YUV格式浅析

来源:互联网 发布:linux 添加用户组 编辑:程序博客网 时间:2024/05/16 05:23

 

YUV格式,从输入源端理解,对应码流的采样格式,主要的采样格式有YCbCr 4:2:0、YCbCr 4:2:2、YCbCr 4:1:1和 YCbCr 4:4:4等;
从输出端理解,可以理解为解码后视频数据在解码器内存中的组织布局。
YUV码流的存储格式其实与其采样的方式密切相关.

YUV格式有三大类:planar,semi-planar 和packed。


1 planar(平面)格式


       对于full planar的YUV格式,Y/U/V是分开存放的,先连续存储所有像素点的Y,紧接着存储所有像素点的U,随后是所有像素点的V。

       我所接触过的平面格式有V208和V408两种。

1.1 440的V208格式

          在内存布局中,排在最前的是Y Plane数据。Y PLANE的宽度为pitch(按照硬件对齐后的宽度),高度为对齐后的高度。Y PLANE之后,紧接着是U plane, 宽度跟Y PLANE一样,高度是Y PLANE的一般。U plane之后,紧接着V Plane,高宽跟U plane一样。以实际分辨率为61*61的码流举例,其解码输出在内存中的布局如下图所示:

                                                                                                                             

1.2 444的V408格式:

该格式的布局与V208比较像,最大的区别在于V408的U/V平面的宽高与Y平面一样。这里依然以实际分辨率为61*61的码流举例,其解码输出在内存中的布局如下图所示:

                                                                                                                                    


2 semi-planar(半平面)格式


       对于semi-planar的格式, Y和UV是分开存放的,但UV共享一个planar,即先存储所有像素点的Y数据,然后存储UV数据。U/V数据是交替存储在同一块内存区域。

       我所接触过的semi-planar格式有NV12和P208两种。

2.1 420的NV12格式

       UV共用一个平面,交替存放,且UV的高度是Y的一半。其内存布局如下图所示:

                                 

 

2.2 422的P208格式

 UV共用一个平面,交替存放,且UV的高度和Y平面的高度一样。其内存布局如下图所示:

                                                                                           

3. 打包格式

对于packed的YUV格式,每个像素点的Y,U,V是连续交叉存储的。

我接触过的打包格式主要是YUY2格式。


3.1 422的YUY2格式。

Y,U,V共用一个平面,每两个Y数据共用一组UV数据,排列顺序为:Y0 U0 Y1 V0

即: 第一个字节包含第一个 Y 样例,第二个字节包含第一个 U (Cb) 样例,第三个字节包含第二个 Y 样例,第四个字节包含第一个 V (Cr) 样例.

其内存布局如下所示:

 

       本文为原创作品,谢绝转载。

1 0
原创粉丝点击