Sto progettando un'applicazione che ha una pipeline di elaborazione OpenGL (raccolta di shader) e richiede simultaneamente all'utente finale di vedere l'anteprima della fotocamera non elaborata .Anteprima ed elaborazione simultanee della fotocamera
Per esempio, si supponga di voler mostrare all'utente l'anteprima della fotocamera e allo stesso tempo contare il numero di oggetti rossi nelle scene che si ricevono dalla fotocamera, ma tutti gli ombreggiatori che si utilizzano per contare gli oggetti come come filtro della tonalità, ecc. non dovrebbe essere visto dall'utente.
Come dovrei fare per configurarlo correttamente?
So che posso impostare un'anteprima della telecamera e quindi sul callback ricevere i dati della cornice della fotocamera in formato YUV, quindi riversarlo in una trama OpenGL ed elaborare il fotogramma in quel modo, tuttavia, che ha problemi di prestazioni ad esso associati. Devo arrotondare i dati dall'hardware della videocamera alla VM, quindi restituirlo alla memoria della GPU. Sto usando SurfaceTexture
per ottenere i dati dalla fotocamera direttamente in formato comprensibile OpenGL e passarli ai miei shader per risolvere questo problema.
ho pensato che sarei in grado di dimostrare che lo stesso non trasformati SurfaceTexture
per l'utente finale, ma TextureView
non avere un costruttore o un setter dove posso passare la SurfaceTexture
voglio che il rendering. Crea sempre il suo.
Questa è una panoramica della mia configurazione corrente:
- GLRenderThread: questa classe si estende da Thread, messe a punto contesto OpenGL, esposizione, ecc e utilizza un SurfaceTexture come la superficie (3 ° parametro di eglCreateWindowSurface).
- GLFilterChain: una raccolta di shader che eseguono il rilevamento sulla trama dell'input.
- fotocamera: Usa un SurfaceTexture separata che viene usato come input di GLFilterChain e afferra anteprima della fotocamera
- Finalmente un TextureView che visualizza SurfaceTexture del GLRenderThread
Ovviamente, con questa configurazione, sto mostrando il frame elaborati all'utente che non è quello che voglio. Inoltre, l'elaborazione dei frame non è in tempo reale. Fondamentalmente, eseguo l'input dalla videocamera attraverso la catena una volta e una volta che tutti i filtri sono terminati, chiamo updateTexImage per prendere il fotogramma successivo dalla fotocamera. La mia elaborazione è di circa 10 fotogrammi al secondo su Nexus 4.
Penso che probabilmente ho bisogno di usare 2 contesti GL, uno per l'anteprima in tempo reale e uno per l'elaborazione, ma non ne sono certo. Spero che qualcuno possa spingermi nella giusta direzione.
http://stackoverflow.com/questions/12519235/modifying-camera-output-using-surfacetexture-and-opengl –