本文转自:
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分量。
![](https://img-blog.csdn.net/20131210141502484?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemh1d2VpZ2FuZ3p3Zw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
(二):内存分布
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相同)
![](https://img-blog.csdn.net/20131210141606250?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemh1d2VpZ2FuZ3p3Zw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
(2):UYVY:
![](https://img-blog.csdn.net/20131210141653296?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemh1d2VpZ2FuZ3p3Zw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
(3):YUV422P
![](https://img-blog.csdn.net/20131210141731828?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemh1d2VpZ2FuZ3p3Zw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
3:YUV444
(1):YUV444P
YYYYYYYY UUUUUUUU VVVVVVVV
(三):ffmepeg实现
(1):AVFrame内存关联
![](https://img-blog.csdn.net/20131210141814734?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemh1d2VpZ2FuZ3p3Zw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
(2):判断输入输出格式
![](https://img-blog.csdn.net/20131210141908046?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemh1d2VpZ2FuZ3p3Zw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
(3):格式转换
![](https://img-blog.csdn.net/20131210142008703?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemh1d2VpZ2FuZ3p3Zw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
(四):扩展分析
(1):本例只实现上述中的几种格式,还有很多格式未有实现。
(2):内存分布中,还有不同的格式可以扩展例如:YUV444->可以扩展为:YYYYYYYY VVVVVVVV UUUUUUUU.等等
内存格式。
(3):本文采取yuv-yuv格式之间的转换,底层用到的是双三次差值算法。