C++ 中的 NV12 到 RGB24 转换代码

Posted

技术标签:

【中文标题】C++ 中的 NV12 到 RGB24 转换代码【英文标题】:NV12 to RGB24 conversion code in C++ 【发布时间】:2012-05-01 22:42:39 【问题描述】:

有谁知道如何将Intel Media SDK(版本:Media SDK 2010)H.264视频帧解码输出NV12格式转换为RGB888(RGB24)位转换?

Media SDK 解码器输出基本上是 NV12 格式,渲染需要 RGB24 位格式,所以如果有任何转换代码可用于转换 NV12-->RGB24 对我们有很大帮助。

【问题讨论】:

【参考方案1】:

查看YUV to RGB Conversion,然后您可以使用有关YUV pixel formats(链接指向NV12)的信息作为第一个链接的输入并进行转换。

【讨论】:

这个。如果你想看一些伪源代码,你总是可以阅读我写的一篇(措辞不好的)关于 YUV 到 RGB 转换的文章here【参考方案2】:

查看此代码:https://github.com/andrechen/yuv2rgb 虽然它适用于 NV21,但唯一的区别是 UV (VU) 字节的顺序。所有你需要做的,就是颠倒顺序(loadvu 函数):

static void loadvu(int& U, int& V, unsigned char const* &uv) 
    U = (*uv++) - 128;
    V = (*uv++) - 128;

【讨论】:

以上是关于C++ 中的 NV12 到 RGB24 转换代码的主要内容,如果未能解决你的问题,请参考以下文章

YUV NV21 转换为 RGB 的困惑

NV12 到 RGB32 与 Microsoft Media Foundation

Unity渲染iOS中的NV12格式数据---(下)

YUV与RGB 以及之间的转换

DirectX:以 DXGI_FORMAT_NV12 格式从 ID3D11Texture2D 获取 RGB 数据的最佳方法?

ffmpeg api 使用scale_npp的问题总结