I420/YU12/YUV420P/IYUV格式详解
2023-03-17
279
0
I420介绍
I420也叫YU12,也叫 IYUV,属于 YUV420P 格式。三个平面,分别存储 Y U V 分量。每四个 Y 分量共享一组 UV 分量。U、V 平面的 strides, width 和 height 都是 Y 平面的一半,因此一个像素 12 bits。
I420字节大小
- 4:2:0 Formats, 12 Bits per Pixel, 3 Planars
I420(属于 YUV 420 Plannar) I420 是 YUV 420 Planar 的一种,YUV 分量分别存放,先是 w x h 长度的 Y,后面跟 w/2 x h/2 长度的 U, 最后是 w/2 x h/2 长度的 V,总长度为 w x h x 1.5。
I420应用
I420 是音视频开发中常用的一种格式。
I420属于YUV420P(存储格式为Planar),先是Y分量,再依次是U分量,V分量。这种格式很常用,在x264/265的中要求传入的源数据就是这种格式。在libyuv中,进行YUV图像处理(缩放,剪切,旋转)也是要求以这种格式传入。ffmpeg解码h264/265后数据也是这种格式。这种格式也可以直接通过D3D,OpenGL进行渲染。
I420数据布局
对于一个6*4的图像, 其数据分布如下:
Y Y Y Y Y Y
Y Y Y Y Y Y
Y Y Y Y Y Y
Y Y Y Y Y Y
U U U
U U U
V V V
V V V
- I420 -
从图中可看出,U、V 平面的每行字节数(strides)、高(height)都是 Y 平面的一半。
I420 GUID
{30323449-0000-0010-8000-00aa00389b71} MEDIASUBTYPE_I420
MEDIASUBTYPE_I420
DEFINE_GUID in /home/user/uuid/winsdk/winsdk-10/Include/10.0.16299.0/um/wmcodecdsp.h
DEFINE_GUID in /home/user/uuid/winsdk/winsdk-10/Include/10.0.10240.0/um/wmcodecdsp.h
DEFINE_GUID in /home/user/uuid/winsdk/winsdk-10/Include/10.0.14393.0/um/wmcodecdsp.h
Include/10.0.16299.0/um/wmsdkidl.h:1893
// 30323449-0000-0010-8000-00AA00389B71 'I420' == MEDIASUBTYPE_I420
in Include/10.0.16299.0/um/wmsdkidl.h:1893
Include/10.0.16299.0/um/wmsdkidl.idl:1509
cpp_quote( "// 30323449-0000-0010-8000-00AA00389B71 'I420' == MEDIASUBTYPE_I420 " )
in Include/10.0.16299.0/um/wmsdkidl.idl:1509
MEDIASUBTYPE_I420
from https://docs.microsoft.com/en-us/windows/desktop/wmformat/media-type-identifiers