2010-08-19 6 views
9

Estoy tratando de mostrar una vista previa de cámara filtrada, utilizando la devolución de llamada onPreviewFrame().¿Qué significa SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS?

El problema es que cuando elimino esta línea: mHolder.setType (SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

para ocultar la vista previa, la aplicación se bloquea. El registro dice: 08-19 15: 57: 51.042: ERROR/CameraService (59): registerBuffers falló con el estado -38

¿Qué significa esto? ¿Está esto documentado en algún lugar?

estoy usando el CameraPreview de los APIDemos SDK: http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/CameraPreview.html

Respuesta

9

SURFACE_TYPE_PUSH_BUFFERS genera varios búferes para SurfaceView. Los componentes se bloquean (llenan de datos) y empujan (muestran datos) estos búfers en el código del sistema operativo. Especialmente OpenMax (interfaz de dispositivo de hardware de cámara) está utilizando "buffers gráficos" = "buffers de inserción" para llenar datos y visualizar datos. Para ser específicos, el hardware de la cámara puede llenar un búfer de inserción directamente y el hardware de gráficos puede mostrar un búfer de inserción directamente (comparten estos búferes). Conclusión: el sistema operativo lo obliga a crear un SurfaceView con buffers de inserción. Luego puede usar los buffers para el dispositivo de la cámara.

5

¿Qué significa esto?

Significa que no configuró correctamente el SurfaceView a través del SurfaceHolder.

Es esta documentado en cualquier lugar?

¿Qué es "esto"? Aquí está la documentación para SurfaceView, SurfaceHolder, SURFACE_TYPE_PUSH_BUFFERS y Camera.

Si su verdadera pregunta es "¿dónde está documentado que Camera requiere SURFACE_TYPE_PUSH_BUFFERS?", Sospecho que no está documentado. Utiliza SURFACE_TYPE_PUSH_BUFFERS para la vista previa de la cámara y la reproducción de video, y tal vez otras situaciones también.

+0

Gracias por la atención Traté de usar otro tipo de superficie para ocultar la vista porque no quiero mostrar la vista previa de la cámara cruda, sino mi propia secuencia procesada, al igual que esta aplicación http: //www.androidtapp .com/camera-illusion /. Por lo tanto, no sé si debo usar SURFACE_TYPE_PUSH_BUFFERS, como se menciona en este hilo: http://groups.google.com/group/android-developers/msg/5eee66acae3f7c1f Si conoce otros recursos (aplicaciones de código abierto) , libros, etc.) que pueden ser útiles para esta intención, por favor comparte. –

7

En Google's Camera guide puede encontrar una breve mención de esto. De acuerdo con la guía SURFACE_TYPE_PUSH_BUFFERS, es una configuración obsoleta necesaria para dispositivos pre-3.0.

Buscar en el ejemplo de código en la sección "Creación de una clase de vista previa", en la parte inferior del constructor que dice:

// deprecated setting, but required on Android versions prior to 3.0 
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 

Es una buena idea leer the camera guide con cuidado si no lo ha hecho , contiene algunas cosas importantes que no están en la documentación API de las clases de la cámara.