2012-03-28 12 views
20

Desidero eseguire l'elaborazione delle immagini della telecamera sulla GPU su Android.Utilizzo di SurfaceTexture in combinazione con RenderScript

Nell'attuale configurazione, utilizzo SurfaceTexture per acquisire fotogrammi dal flusso di immagini della telecamera come una trama OpenGL ES. Questo è un modo efficace per rendere il flusso della fotocamera accessibile nei miei ombreggiatori. (http://developer.android.com/reference/android/graphics/SurfaceTexture.html)

Ora vorrei iniziare a utilizzare la nuova API di RenderScript invece dell'uso diretto di OenGL ES. (http://developer.android.com/guide/topics/renderscript/index.html)

Ma per creare SurfaceTexture, ho bisogno di passare l'ID di trama openGl al costruttore. Sfortunatamente l'ID della trama non è disponibile (RenderScript usa la classe di allocazione per caricare trame, che non espone l'ID della trama). Quindi non sono in grado di creare SurfaceTexture quando si usa RenderScript.

Ho letto tutta la documentazione su renderscript (che è ancora piuttosto scarso) e ho guardato i campioni, ma non hanno informazioni sull'argomento.

Quindi la mia domanda è: È possibile utilizzare SurfaceTexture in combinazione con RenderScript oppure esiste un altro modo efficace per utilizzare lo streaming live di una telecamera in uno script RenderScript Graphics?

risposta

1

Se ho capito bene, si utilizza già SurfaceTexture. È quindi possibile registrare una richiamata con setOnFrameAvailableListener.

Vedo due soluzioni:

  1. Implementa si possiede RSTextureView, che eredita da SurfaceTexture.OnFrameAvailableListener. Registra la tua vista come callback SurfaceTexture. Ogni volta che la tua vista di superficie viene aggiornata dallo stream della videocamera, il tuo RSTextureView verrà avvisato e potrai gestirlo nel modo desiderato.

  2. Un'altra soluzione potrebbe essere quella di implementare il proprio RenderScriptGL (ancora eredita da SurfaceTexture.OnFrameAvailableListener) e chiamare setSurfaceTexture quando il callback viene chiamata.

Si dovrebbe essere in grado di combinare RenderScript con un SurfaceTexture con almeno una di queste due soluzioni.

+0

Apprezzo la risposta, ma dopo aver postato questa domanda ho deciso di utilizzare GLSL per la mia applicazione. Questo perché non ho trovato un modo semplice per farlo funzionare, e più recentemente perché la sezione grafica del rendercript verrà ammortizzata in 4.1 (Jelly Bean). Quindi non ho provato questo aswer me stesso. Quindi per gli altri follower di questo thread: accetto questa risposta poiché sembra ragionevole, ma non l'ho implementata. – Arjan

Problemi correlati