前面连续写过两篇 shader 实现 RGBA 转 YUV 的文章:
关于 YUV 图像的相关知识这里也贴出来一些链接,供不熟悉的同学查阅。
Shader 实现 RGBA 转 I420
I420 格式的图像在视频解码中比较常见,像前面文章中提到的,在工程中一般会选择使用 Shader 将 RGBA 转 YUV,这样再使用 glReadPixels 读取图像时可以有效降低传输数据量,提升性能,并且兼容性好。
所以,在读取 OpenGL 渲染结果时,先利用 Shader 将 RGBA 转 YUV 然后再进行读取,这种方式非常高效便捷。
例如 YUYV 格式相对 RGBA 数据量降为原来的 50% ,而采用 NV21 或者 I420 格式可以降低为原来的 37.5% 。
当然读取 OpenGL 渲染结果的方式还有很多种,要视具体的需求和使用场景而定,具体可以参考文章:
OpenGL Shader 实现 RGBA 到 I420 转换
本文介绍了如何使用 OpenGL 的 Shader 来实现 RGBA 图像到 I420 格式的转换,详细讲解了转换原理,包括视口设置、纹理坐标采样,并提供了关键代码实现。通过这种方法,可以在视频解码中减少数据量,提高性能。文章还探讨了与转换 NV21 相比的效率问题,并提供了一个完整的项目源码链接。
订阅专栏 解锁全文
3万+

被折叠的 条评论
为什么被折叠?



