Obtención de marcos de imagen de video en Android

He implementado una aplicación simple que muestra la imagen de la cámara en la pantalla. Lo que me gusta hacer ahora es tomar un solo fotograma y procesarlo como mapa de bits. De lo que pude averiguar hasta este punto no es una cosa fácil de hacer.

He intentado usar el método onPreviewFrame con el que obtienes el marco actual como una matriz de bytes y traté de decodificarlo con la clase BitmapFactory, pero devuelve un valor nulo. El formato del marco es un YUV sin encabezado que podría traducirse a mapa de bits pero toma mucho tiempo en un teléfono. También he leído que el método onPreviewFrame tiene restricciones en el tiempo de ejecución, si demora demasiado la aplicación podría fallar.

Entonces, ¿cuál es la forma correcta de hacer esto?

Respuestas a la pregunta(4)

Su respuesta a la pregunta