使用 OpenGL 显示 YUY2 (Y'UV422)

Display YUY2 (Y'UV422) using OpenGL

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

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

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

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