Como no tengo permitido comentar. En cuanto a la respuesta de Eddy. Debe trabajar con esto en el NDK ya que el uso de la interfaz Java anulará cualquier beneficio de rendimiento. Tener que trabajar con un PixelBuffer es una locura desde el punto de vista del rendimiento. Su conversión de RGBA888 a YUV también debe hacerse en C.
No intente usar un TextureView, ya que será aún peor. Tendría que copiar los Pixels en un mapa de bits y luego desde un mapa de bits en una matriz antes de la conversión a YUV. Esto, por sí mismo, toma casi el 30% de la utilización de la CPU en un nuevo y flamante Nexus 7 2013.
La forma más eficiente es hablar directamente con Camera.h y omitir todas las API de Android. Puede crear su propio búfer e interceptar los datos del YUV antes de que vaya a otro lado.
Acabo de probar la solución dummy SurfaceTexture (método 2) en un Samsung Galaxy s5. Falla después de algunos cuadros. Mi solución es llamar a updateTexImage, pero use un nombre de textura no válido con un contexto GL válido. Después de silenciar la excepción resultante, todo funciona sin problemas. – user3693576