使用 OpenGL 显示 YUY2 (Y'UV422)

Posted

技术标签:

【中文标题】使用 OpenGL 显示 YUY2 (Y\'UV422)【英文标题】:Display YUY2 (Y'UV422) using OpenGL使用 OpenGL 显示 YUY2 (Y'UV422) 【发布时间】:2015-09-06 09:39:43 【问题描述】:

我有一个 YUY2 像素格式帧的视频流,我想将它显示给用户。如果我要在 Qt5 的 QLable 中显示它,我需要先将其转换为 RGB,这很慢(除非你使用 ffmpeg/libav 系列库,我想)。

所以我认为使用 OpenGL/OpenGLES 将 GPU 加速转换为 RGB24/RGB32(如果甚至需要)并显示它会快得多。但是我该怎么做呢?据我了解,编写起来并不容易,尤其是对于不太熟悉 OpenGL、着色器和纹理的人来说。你可以假设我有一个char* pixelDatasize_t bytes, width, height

【问题讨论】:

【参考方案1】:

总体思路是使用 3 个纹理,1 个(全分辨率)用于 Y 分量,2 个(半宽)用于 Cb 和 Cr。

然后您编写一个片段着色器,在同一归一化坐标处对所有 3 个纹理进行采样,并使用矩阵 here 将 YUV 转换为 RGB。

【讨论】:

以上是关于使用 OpenGL 显示 YUY2 (Y'UV422)的主要内容,如果未能解决你的问题,请参考以下文章

OpenGL显示列表比立即模式慢?

使用 OpenGL 在 Qt 中显示来自 DirectShow 的原始图像数据

OpenGL 纹理映射内存泄漏

openGL在不同显示模式下绘制圆形三角形和正方形

opencv怎么采集yuy2图像

解决安卓UVCCamera YUY2格式花屏,MTK无法出视频等问题