本文转自:
http://blog.csdn.net/zhuweigangzwg/article/details/17222581
YUV(二)-YUV格式转换缩放
本文主要讲解yuv各种格式相互转换的功能实现及原理,以常用的yuv420p,yuv422p,yuv444p作为转换格式比较清晰的解析各
种格式,以及用ffmpeg做转换的实现,同时有需要的朋友也可以用opencv做实现。
(一):内存采样
YUV码流的存储格式其实与其采样的方式密切相关,主流的采样方式有三种,YUV4:4:4,YUV4:2:2,YUV4:2:0,这里强调的
是如何根据其采样格式来从码流中还原每个像素点的YUV值,因为只有正确地还原了每个像素点的YUV值,才能通过YUV与RGB的
转换公式提取出每个像素点的RGB值,然后显示出来。
用三个图来直观地表示采集的方式吧,以黑点表示采样该像素点的Y分量,以空心圆圈表示采用该像素点的UV分量。
YUV 4:4:4采样,每一个Y对应一组UV分量。 2. 3.YUV 4:2:2采样,每两个Y共用一组UV分量。 4.5.YUV 4:2:0采样,每四个Y共
用一组UV分量。

(二):内存分布
1:YUV420
(1):I420:
YYYYYYYY
UU VV =>YUV420P
(2):YV12
YYYYYYYY
VV UU =>YUV420P
(3):NV12
YYYYYYYY
UVUV =>YUV420SP
(dxva 输出 NV12)
(4):NV21
YYYYYYYY
VUVU =>YUV420SP
(x264/ffmpeg 输入、输出 I420)
2:YUV422
(1):YUVY:(实际格式与YUY2相同)

(2):UYVY:

(3):YUV422P

3:YUV444
(1):YUV444P
YYYYYYYY UUUUUUUU
VVVVVVVV
(三):ffmepeg实现
(1):AVFrame内存关联

(2):判断输入输出格式

(3):格式转换

(四):扩展分析
(1):本例只实现上述中的几种格式,还有很多格式未有实现。
(2):内存分布中,还有不同的格式可以扩展例如:YUV444->可以扩展为:YYYYYYYY VVVVVVVV UUUUUUUU.等等
内存格式。
(3):本文采取yuv-yuv格式之间的转换,底层用到的是双三次差值算法。