![](/img/trans.png)
[英]Android Camera2 API preprocessing and writing frames in SurfaceTexture
[英]Android camera surfaceTexture - How to preserve previous frames?
我正在使用SurfaceTexture進行實時攝像機預覽。 這會將數據流作為紋理直接發送到GPU。
每個新的相機框架都將覆蓋此紋理。
現在-我想避免這種覆蓋,並在內存中保留前幾(n)個先前的幀(這是我的最終目標)
來自攝像機的數據將始終覆蓋n種可用紋理中最舊的紋理。 我只需要在它們之間交替。
這些紋理需要在數據傳入時立即可用。
我不需要:將捕獲的數據保存為字節緩沖區,然后將其轉換回新的紋理=慢,所有這些都必須是實時的。 性能是關鍵。
我已使用此程序示例在SurfaceTexture模式下運行相機: http : //maninara.blogspot.co.uk/2012/09/render-camera-preview-using-opengl-es.html
我嘗試使用SurfaceTexture類的attachToGLContext(int texName)方法附加新紋理,但是它似乎不允許我這樣做而不破壞先前的紋理,似乎我在附加新紋理之前必須使用“ detachFromGLContext()” ..
http://developer.android.com/reference/android/graphics/SurfaceTexture.html
任何幫助表示贊賞。
如何將數據流發送到紋理?
就我而言,我在onSurfaceCreated
創建了多個紋理。 然后在onDraw
覆蓋它們。 整個過程是實時的,不需要幀緩沖區來存儲數據。
在onDraw
,我使用glActiveTexture
和glBindTexture
選擇要覆蓋的紋理。 這是代碼,希望對您有所幫助。
GLES20.glActiveTexture(GLES20.GL_TEXTURE0 + texture_index); GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, m_texture[texture_index]); GLES20.glTexImage2D(GLES20.GL_TEXTURE_2D, 0, GLES20.GL_RGBA, m_frame.width, m_frame.height, 0, GLES20.GL_RGBA, GLES20.GL_UNSIGNED_BYTE, camera_data);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.