我目前正在嘗試開發Android上的視頻播放器,但我正在努力使用彩色格式。Android MediaCodec輸出格式:GLES外部紋理(YUV/NV12)到GLES紋理(RGB)
上下文:我提取並通過MediaExtractor/MediaCodec的標準combinaison解碼的視頻。因爲我需要提取的幀是可用作爲OpenGLES紋理(RGB),設置我的解碼器(MediaCodec),使得其通過表面紋理饋送外部GLES紋理(GL_TEXTURE_EXTERNAL_OES)。我知道我的硬件解碼器輸出的數據是在NV12(YUV420SemiPlanar)格式,我需要通過渲染將其轉換爲RGB(使用片段着色器進行轉換)。
MediaCodec ---> GLES外部紋理(NV12)[1] --->渲染---> GLES紋理(RGB)
其中I鬥爭的要點是 :如何訪問GLES外部紋理中包含的特定Y,U和V值([1])。我不知道如何設置GLES紋理內存,也不知道如何訪問它(除了「texture()」和「texelFetch()」GLSL函數)。
- 有沒有辦法訪問數據,因爲我會訪問一個簡單的數組(指針+偏移)?
- 我是否過時了整件事?
- 請執行表面或SurfaceTexture是否需要照顧轉換? (I不這樣認爲)
- 執行下列任表面或表面紋理改變數據的存儲器佈局,同時填充GLES外部紋理([1]),以便組件可以通過GLES紋理訪問功能訪問?
我實施了一些測試,你是對的。我的問題只是理論上的,並且運行一些例子讓我意識到這些麻煩對我來說是隱藏的。感謝你的回答 –