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等格式的区别