YUV格式,从输入源端理解,对应码流的采样格式,主要的采样格式有YCbCr 4:2:0、YCbCr 4:2:2、YCbCr 4:1:1和 YCbCr 4:4:4等;
从输出端理解,可以理解为解码后视频数据在解码器内存中的组织布局。
YUV码流的存储格式其实与其采样的方式密切相关.
YUV格式有三大类:planar,semi-planar 和packed。
对于full planar的YUV格式,Y/U/V是分开存放的,先连续存储所有像素点的Y,紧接着存储所有像素点的U,随后是所有像素点的V。
我所接触过的平面格式有V208和V408两种。
在内存布局中,排在最前的是Y Plane数据。Y PLANE的宽度为pitch(按照硬件对齐后的宽度),高度为对齐后的高度。Y PLANE之后,紧接着是U plane, 宽度跟Y PLANE一样,高度是Y PLANE的一般。U plane之后,紧接着V Plane,高宽跟U plane一样。以实际分辨率为61*61的码流举例,其解码输出在内存中的布局如下图所示:
该格式的布局与V208比较像,最大的区别在于V408的U/V平面的宽高与Y平面一样。这里依然以实际分辨率为61*61的码流举例,其解码输出在内存中的布局如下图所示:
对于semi-planar的格式, Y和UV是分开存放的,但UV共享一个planar,即先存储所有像素点的Y数据,然后存储UV数据。U/V数据是交替存储在同一块内存区域。
我所接触过的semi-planar格式有NV12和P208两种。
UV共用一个平面,交替存放,且UV的高度是Y的一半。其内存布局如下图所示:
UV共用一个平面,交替存放,且UV的高度和Y平面的高度一样。其内存布局如下图所示:
对于packed的YUV格式,每个像素点的Y,U,V是连续交叉存储的。
我接触过的打包格式主要是YUY2格式。
Y,U,V共用一个平面,每两个Y数据共用一组UV数据,排列顺序为:Y0 U0 Y1 V0
即: 第一个字节包含第一个 Y 样例,第二个字节包含第一个 U (Cb) 样例,第三个字节包含第二个 Y 样例,第四个字节包含第一个 V (Cr) 样例.
其内存布局如下所示:
本文为原创作品,谢绝转载。