cre*_*zyz 4 rgb android opengl-es yuv android-mediacodec
我目前正在尝试在 Android 上开发一个视频播放器,但在颜色格式方面遇到了困难。
上下文:我通过MediaExtractor/MediaCodec的标准组合提取和解码视频。因为我需要提取的帧可用作 OpenGLES 纹理 (RGB),所以我设置了解码器 ( MediaCodec ),以便它通过 SurfaceTexture提供外部 GLES 纹理 ( GL_TEXTURE_EXTERNAL_OES )。我知道我的硬件解码器输出的数据是NV12 ( YUV420SemiPlanar ) 格式,我需要通过渲染将其转换为 RGB(使用片段着色器进行转换)。
MediaCodec ---> GLES 外部纹理 (NV12) [1] ---> 渲染 ---> GLES 纹理 (RGB)
我遇到的困难是:如何访问 GLES 外部纹理 ( [1] ) 中包含的特定 Y、U 和 V 值。我不知道 GLES 纹理内存是如何设置的,也不知道如何访问它(“texture()”和“texelFetch()”GLSL 函数除外)。
是的,我想说你想太多了。您是否测试过并遇到了可以描述的实际问题,或者到目前为止这只是理论上的?
尽管原始解码器本身输出 NV12,但当您通过SufaceTexture- 然后您可以将其作为任何 RGB 纹理访问时,此细节会被隐藏。由于纹理的物理内存布局是隐藏的,因此您实际上并不知道在获取纹理之前它是否实际上一次全部转换,或者纹理访问器是否在每次采样时进行即时转换。据我所知,实现可以自由地以任何一种方式进行,并且根本无法通过公共 API 观察到如何完成的实现细节。
| 归档时间: |
|
| 查看次数: |
2033 次 |
| 最近记录: |