Nvidia硬解码AppDecImageProvider.cpp例程输出bgra格式文件颜色不正确

Nvidia硬解码AppDecImageProvider.cpp例程输出bgra格式文件颜色不正确


例程AppDecImageProvider.cpp中输出格式为bgra(32位)

在这里插入图片描述
RGB32图像每个像素用32比特位表示,占4个字节,R,G,B分量分别用8个bit表示,存储顺序为B,G,R,最后8个字节保留。注意:在内存中RGB各分量的排列顺序为:BGRA BGRA BGRA …。
在内存中的分量排列顺序如下:

在这里插入图片描述
B在高字节,A在低字节,在内存中存储时为大端法,即内存中的低地址存储高位,高地址存储低位。在读取指针写入文件时,自然写入文件的顺序为BGRA。

fpOut.write(reinterpret_cast<char*>(pImage.get()), nFrameSize);

输出文件如下,播放器为yuvplayer
在这里插入图片描述
颜色明显失真
进入函数Nv12ToBgra32
在这里插入图片描述
进入核函数YuvToRgbKernel
在这里插入图片描述
进入YuvToRgbForPixel
在这里插入图片描述
函数如下:
在这里插入图片描述
将rgb改为bgr:
在这里插入图片描述
更改后输出文件,使用yuvplayer播放如下:
在这里插入图片描述
颜色正常显示。

相关链接:
高地址与低地址的区别是什么?
图解RGB565、RGB555、RGB16、RGB24、RGB32、ARGB32等格式的区别

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值