Estoy explorando el mismo problema. Debido a que MediaRecorder ya tiene una implementación nativa, usar el NDK no parece ser un enfoque prometedor para aumentar los fotogramas por segundo. Mejorar el almacenamiento en búfer con setPreviewCallbackWithBuffer como se muestra en el código en http://www.androidadb.com/source/cellbots-read-only/experimental/android/ioio/samples/ShootOnSight/src/com/cellbots/ioioshoot/CameraView.java.html parece prometedor, pero primero me gustaría obtener una mejor comprensión de los muchos parámetros de la cámara y cómo afectan la velocidad de cuadros.
Como seguramente sabrá, existe una amplia gama de dispositivos Android con una amplia gama de capacidades de cámara. Para ver las capacidades de sus cámaras frontales y traseras particulares, puede usar el siguiente código (por ejemplo, estableciendo mCameraId en 0 para la parte posterior y 1 para la parte frontal).
Camera mCamera = Camera.open(mCameraId);
Camera.Parameters cp = mCamera.getParameters();
Log.d(TAG, "camera parameters: " + cp.flatten());
Por ejemplo, aquí son los parámetros de la cámara vertidos por mi Nexus S (OS 4.0.4 corriendo).
NEXUS-S FRONT PARÁMETROS frente a la cámara:
06-16 15: 14: 16.909: D/SENSORS_PLUS (24583): parámetros de la cámara:
de imagen--valores de tamaño = 640x480;
preview-fps-range = 7500,30000;
min-exposición-compensación = -4;
vertical-view-angle = 39,4;
horizontal-view-angle = 51.2;
whitebalance = auto;
jpeg-thumbnail-height = 120;
jpeg-quality = 100;
preview-format-values = yuv420sp, yuv420p;
rotation = 0;
jpeg-thumbnail-quality = 100;
focus-mode = fixed;
preview-format = yuv420sp;
preview-size = 640x480;
focal-length = 0.9;
video-frame-format = yuv420p;
picture-format-values = jpeg;
max-exposure-compensation = 4;
exposición-compensación = 0;
preview-frame-rate-values = 15;
exposición-compensación-paso = 0.5;
preview-frame-rate = 15;
effect-values = none, mono, negative, sepia;
focus-mode-values = fixed;
picture-size = 640x480;
efecto = ninguno;
jpeg-thumbnail-width = 160;
whitebalance-values = auto, incandescente, fluorescente, luz del día, luz del día nublada;
picture-format = jpeg;
distancias de enfoque = 0.20,0.25, infinito;
preview-fps-range-values = (7500,30000);
jpeg-thumbnail-size-values = 160x120,0x0;
talla valores preview = 640x480,320x240,176x144
NEXUS-S TRASERO PARÁMETROS frente a la cámara:
06-16 15: 46: 55.315:/SENSORS_PLUS (24732) D: parámetros de la cámara:
Imagen- size-values = 2560x1920,2048x1536,1600x1200,1280x960,640x480;
preview-fps-range = 15000,30000;
min-exposición-compensación = -4;
vertical-view-angle = 39,4;
horizontal-view-angle = 51.2;
whitebalance = auto;
jpeg-thumbnail-height = 240;
scene-mode = auto;
jpeg-quality = 100;
preview-format-values = yuv420sp, yuv420p;
rotation = 0;
jpeg-thumbnail-quality = 100;
focus-mode = auto;
preview-format = yuv420sp;
preview-size = 720x480;
distancia focal = 3,43;
video-frame-format = yuv420p;
picture-format-values = jpeg;
max-exposure-compensation = 4;
flash-mode-values = encendido, apagado, automático, antorcha;
exposición-compensación = 0;
preview-frame-rate-values = 30;
exposición-compensación-paso = 0.5;
preview-frame-rate = 30;
flash-mode = off;
effect-values = none, mono, negative, sepia;
focus-mode-values = auto, infinito, macro;
picture-size = 2560x1920;
efecto = ninguno;
jpeg-thumbnail-width = 320;
whitebalance-values = auto, incandescente, fluorescente, luz del día, luz del día nublada;
scene-mode-values = auto, retrato, paisaje, noche, playa, nieve, puesta de sol, fuegos artificiales, deportes, fiesta, luz de velas;
picture-format = jpeg;
distancias de enfoque = 0,10,1.20, infinito;
preview-fps-range-values = (15000,30000);
jpeg-thumbnail-size-values = 320x240,0x0;
talla valores preview = 720x480,640x480,352x288,176x144
esto es agradable y explica por sí mismo, pero ¿cómo puedo aumentar la velocidad de fotogramas? ¿Has probado el código de cellbots? Dudo si funciona Tal vez un pequeño control sobre los parámetros de la cámara debería haber sido proporcionado por el equipo de Google Android. –
Debería haber resumido esa larga respuesta. En resumen, recién estoy empezando a ver el aumento de la velocidad de cuadros, pero estoy bastante seguro de que NDK no es el mejor camino para eso. Me parece que los parámetros de la cámara son la fruta que cuelga más baja que debería probarse primero. Un ejemplo de configuración de los parámetros de la cámara es http://developer.android.com/guide/topics/media/camera.html#using-features – gregS