2012-03-28 12 views
20

Quiero hacer el procesamiento de imágenes de la cámara en la GPU en Android.Uso de SurfaceTexture en combinación con RenderScript

En mi configuración actual uso una Textura de superficie para capturar fotogramas de la secuencia de imagen de la cámara como una textura OpenGL ES. Esta es una manera eficiente de hacer que la secuencia de la cámara sea accesible en mis sombreadores. (http://developer.android.com/reference/android/graphics/SurfaceTexture.html)

Ahora me gustaría comenzar a utilizar la nueva API de RenderScript en lugar de utilizar directamente OenGL ES. (http://developer.android.com/guide/topics/renderscript/index.html)

Pero para crear una textura de superficie, necesito pasar el ID de la textura de openGl al constructor. Desafortunadamente, el ID de textura no está disponible (RenderScript usa la clase de asignación para cargar texturas, lo que no expone la ID de textura). Así que no puedo crear una textura de superficie cuando uso RenderScript.

He leído toda la documentación en renderscript (que todavía es bastante escasa) y miré las muestras, pero no tienen información sobre el tema.

Así que mi pregunta es: ¿Es posible utilizar en combinación con SurfaceTexture RenderScript, o hay alguna otra forma eficiente de utilizar la secuencia de cámara en vivo en un script RenderScript Gráficos?

Respuesta

1

Si entiendo correctamente, ya usa SurfaceTexture. A continuación, puede registrar una devolución de llamada con setOnFrameAvailableListener.

veo dos soluciones:

  1. Implementa es el propietario RSTextureView, que hereda de SurfaceTexture.OnFrameAvailableListener. Registre su vista como la devolución de llamada SurfaceTexture. Cada vez que la vista de la cámara se actualiza por la corriente de la cámara, se le notificará su RSTextureView y podrá manejarlo de la manera que desee.

  2. Otra solución sería implementar su propio RenderScriptGL (sigue heredando de SurfaceTexture.OnFrameAvailableListener) y llamar a setSurfaceTexture cuando la devolución de llamada.

Usted debe ser capaz de combinar con un RenderScriptSurfaceTexture con al menos una de estas dos soluciones.

+0

Agradezco la respuesta, pero desde que publiqué esta pregunta, decidí usar GLSL para mi aplicación. Esto se debe a que no encontré una manera fácil de hacerlo funcionar, y más recientemente porque la sección de gráficos Renderscript se depreciará en 4.1 (Jelly Bean). Por lo tanto, no probé esto por mi cuenta. Entonces, para otros seguidores de este hilo: acepto esta respuesta ya que parece razonable, pero no la implementé. – Arjan

Cuestiones relacionadas