android android-camera renderscript

android - Usando SurfaceTexture en combinación con RenderScript



android-camera (1)

Quiero hacer el procesamiento de imágenes de la cámara en la GPU en Android.

En mi configuración actual, utilizo un SurfaceTexture para capturar fotogramas de la secuencia de imágenes de la cámara como una textura OpenGL ES. Esta es una forma eficiente de hacer que la transmisión de la cámara sea accesible en mis shaders. ( http://developer.android.com/reference/android/graphics/SurfaceTexture.html )

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

Pero para crear una SurfaceTexture, necesito pasar el ID de textura de openGl al constructor. Desafortunadamente, el ID de textura no está disponible (RenderScript utiliza la clase Asignación para cargar texturas, que no expone el ID de textura). Por lo tanto, no puedo crear una SurfaceTexture al usar RenderScript.

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

Entonces, mi pregunta es: ¿es posible usar SurfaceTexture en combinación con RenderScript, o hay alguna otra forma eficiente de usar la transmisión en vivo de la cámara en un script de gráficos RenderScript?


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

Veo dos soluciones:

  1. Implementa su propia RSTextureView , que hereda de SurfaceTexture.OnFrameAvailableListener . Registre su vista como la SurfaceTexture llamada de SurfaceTexture . Cada vez que el flujo de la cámara actualice su vista de superficie, se notificará a su RSTextureView y podrá manejarlo de la forma que desee.

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

Debería poder combinar RenderScript con una SurfaceTexture con al menos una de estas dos soluciones.