2011-12-30 9 views
6

He probado con la aplicación de cámara original (modo de video) viene con Samsung Galaxy Tab 8.9. El video guardado de la cámara frontal puede alcanzar 24 fps, 640x480. (Al mirar las propiedades del archivo de video después de la transferencia a la máquina de Windows)Por qué FPS no es lo mismo que la aplicación de cámara original

Sin embargo, mientras escribo el código Camera frente a la prueba.

mCamera2.setPreviewCallbackWithBuffer(new PreviewCallback() { 
    public void onPreviewFrame(byte[] data, Camera camera) { 
     // image processing code placed here. 
    } 
}); 

El resultado máximo que puedo lograr es (sin guardar el vídeo en el disco. Simplemente medir la onPreviewFrame función de devolución de llamada activa tasa)

  • 15 fps
  • 320x240, 800x600

Me gustaría tener el mismo rendimiento que la aplicación de cámara original de Samsung. ¿Puedo saber que me estoy perdiendo cierta técnica?

+0

es que al hacer captura de imágenes en bruto? incluso 800x600 @ 24bit @ 15fps = 21meg/seg de datos. Cualquier cosa por encima de eso probablemente excederá la velocidad de escritura del almacenamiento flash interno. –

+0

@MarcB por favor miró mi pregunta revisada con más detalles. –

Respuesta

5

La razón por la que está viendo estos resultados es que su devolución de llamada consiste en obtener una muestra del video en lugar del video real.

Cuando la cámara está descargando al sistema de archivos, está realizando una operación de escritura de nivel muy bajo que copia los datos del búfer de video de la cámara al sistema de archivos, sin tocar la JVM. Esto es necesario para mantener el video con una alta calidad y baja latencia, y garantiza un video final fluido. Si necesita hacer procesamiento de video en el video en sí, es mejor hacerlo después de que el video ya está siendo grabado.

La vista previa de vista previa simplemente le ofrece una muestra de la captura de video real, no toda la captura de video, ya que la mayoría de los videos de 15 fps se verán sin problemas, la devolución de vista previa solo ofrece una resolución menor. del video real que se está capturando Incluso la aplicación de captura samsung incorporada solo mostrará la versión de vista previa, porque eso es todo lo que se le está dando a la interfaz de vista previa.

Sería imposible obtener un punto de referencia preciso de la grabación de video en Android de cualquier otra cosa que el volcado del sistema de archivos o las estructuras de datos de matriz de bytes de bajo nivel (utilizando un contenedor JNI por ejemplo). Sería bastante fácil, pero tratar de hacerlo directamente bloquearía la lectura de entrada de la cámara y volaría sus puntos de referencia de todos modos.

+1

Bastante interesante. ¿Tiene alguna información sobre cómo puedo acceder a la memoria intermedia de video de la cámara directamente? En cuanto a la información que obtengo del grupo android-ndk: http://groups.google.com/group/android-ndk/browse_thread/thread/ec7e28a83fa93c8c, parece que acceder a la cámara directamente desde NDK no es oficialmente compatible. –

+0

Eso también lo entiendo: no se puede acceder a la corriente de bits sin procesar desde la propia cámara, excepto a través del archivo después del hecho, ya que no hay accesadores NDK/SDK. Puede valer la pena profundizar en el código fuente de Android para ver si hay algún gancho que pueda estar disponible: android/frameworks/base/media/java/android/media/MediaRecorder.java –

+0

Bueno, supongo que no hay mucho que pueda hacer de mi lado. –

4

La cámara FPS depende de las condiciones de iluminación y del parámetro AutoExposure. Para la obtención de velocidad de cuadro fijo en todas las condiciones de iluminación (de 14 API, Android 4.0):

Camera.Parameters p = camera.getParameters(); 
p.setPreviewFpsRange(30000, 30000); // for 30 fps 
if (p.isAutoExposureLockSupported()) 
    p.setAutoExposureLock(true); 
camera.setParameters(p); 
+0

¿Hay algún efecto secundario para establecer el bloqueo de exposición automática en verdadero? – suitianshi

+0

Bien, imagen más oscura, si esto se puede considerar como efecto secundario. – ggurov

+0

Gracias. Pero parece que tu solución no funciona para mí. La previsualización de fps no es estable en entornos brillantes/oscuros. – suitianshi

Cuestiones relacionadas