簡體   English   中英

Android相機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/Sur​​faceTexture.html

任何幫助表示贊賞。

如何將數據流發送到紋理?

就我而言,我在onSurfaceCreated創建了多個紋理。 然后在onDraw覆蓋它們。 整個過程是實時的,不需要幀緩沖區來存儲數據。

onDraw ,我使用glActiveTextureglBindTexture選擇要覆蓋的紋理。 這是代碼,希望對您有所幫助。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM