我目前正在尝试使用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有什么用吗?
非常感谢您的帮助
答案 0 :(得分:0)
如果您以这种方式进行操作,则说明您做错了。绝对不要在片段着色器中从视频表面手动读取原始数据。
生成SurfaceTexture
,将其绑定到OpenGL ES纹理,然后使用EGL_image_external
通过外部图像采样器访问纹理。
这将使您可以直接访问着色器中的视频数据,包括自动处理内存格式和颜色转换,在许多情况下为“免费”,因为它具有GPU硬件加速的支持。