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 转换代码的主要内容,如果未能解决你的问题,请参考以下文章
NV12 到 RGB32 与 Microsoft Media Foundation
DirectX:以 DXGI_FORMAT_NV12 格式从 ID3D11Texture2D 获取 RGB 数据的最佳方法?