单独的YUV420SP用于opengl

时间:2019-09-10 11:02:11

标签: android opengl-es android-ndk opengl-es-2.0 yuv

我目前正在尝试使用opengl显示视频帧。 到目前为止,它仍然有效,但是我有一些颜色问题。 我用这个作为我的 Reference为我的逻辑

我有这个代码

//YUV420SP data
uint8_t *decodedBuff = AMediaCodec_getOutputBuffer(d->codec, status, &bufSize);
buildTexture(decodedBuff, decodedBuff+w*h, decodedBuff+w*h, w, h);
renderFrame();

但是它显示了错误的颜色。

decodedBuff = Y

decodedBuff + w * h = U

decodedBuff + w * h * 5 = V

但是此分离公式适用于YUV420P。

你们碰巧知道YUV420SP有什么用吗?

非常感谢您的帮助

1 个答案:

答案 0 :(得分:0)

如果您以这种方式进行操作,则说明您做错了。绝对不要在片段着色器中从视频表面手动读取原始数据。

生成SurfaceTexture,将其绑定到OpenGL ES纹理,然后使用EGL_image_external通过外部图像采样器访问纹理。

这将使您可以直接访问着色器中的视频数据,包括自动处理内存格式和颜色转换,在许多情况下为“免费”,因为它具有GPU硬件加速的支持。