2011-11-24 6 views
5

en mi aplicación de Android, observé que el video grabado desde la cámara frontal se está grabando con 7-10 fps mientras que la cámara trasera hace bien el trabajo, la aplicación de cámara nativa graba videos de la cámara frontal a 29 fps.No se puede obtener alta velocidad de fps (cuadros por segundo) (alrededor de 30 fps) mientras grabo desde la cámara frontal en mi aplicación Android

que utilizar la siguiente función para ajustar la velocidad de fotogramas

myRecorder.setVideoFrameRate(30); 

pero de alguna manera lo registra a 8 fps. ¿Cuál es el problema? También las condiciones de iluminación parecen mejorarlo a 15 fps, pero quiero que sea al menos> 25 fps ¿cómo puedo lograr esto? ¿Podemos usar NDK para este propósito?

Respuesta

2

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

+0

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. –

+0

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

1

siguiente configuración funciona para algunos móviles de 30 fps.

Camera.Parameters parms = camera.getParameters(); 
    parms.setRecordingHint(true); 
    camera.setParameters(parms); 
Cuestiones relacionadas