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:
Implementa su propia
RSTextureView
, que hereda de SurfaceTexture.OnFrameAvailableListener . Registre su vista como laSurfaceTexture
llamada deSurfaceTexture
. Cada vez que el flujo de la cámara actualice su vista de superficie, se notificará a suRSTextureView
y podrá manejarlo de la forma que desee.Otra solución sería implementar su propio
RenderScriptGL
(aún heredando deSurfaceTexture.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.