欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

[基础] YUV 格式简介

程序员文章站 2022-07-02 08:52:03
...

【音视频基础系列】
YUV格式简介 (本文)
色彩空间简介(YUV与RGB转换)


分类

YUV格式按照存储可分为packed formats和planar formats两类。
- packed formats
指Y,U(Cb),V(Cr) packed,图像以像素为单位存储;
- planar formats
指每个分量分开存储,三个分量依次存储。

YUV格式按照存储精度(bpp),又可分为4:2:0, 4:2:2, 4:4:4等。

因为人眼对于色度分量较为不敏感,所以视频编码使用的原始序列多是YUV 4:2:0格式。

定义

  • packed yuv
Label FOURCC in Hex Bits per pixel Description
AYUV 0x56555941 32 Combined YUV and alpha
CLJR 0x524A4C43 8 Cirrus Logic format with 4 pixels packed into a u_int32. A form of YUV 4:1:1 wiht less than 8 bits per Y, U and V sample.
cyuv 0x76757963 16 Essentially a copy of UYVY except that the sense of the height is reversed - the image is upside down with respect to the UYVY version.
GREY 0x59455247 8 Apparently a duplicate of Y800 (and also, presumably, “Y8 “)
IRAW 0x57615349 ? Intel uncompressed YUV. I have no information on this format - can you help?
IUYV 0x56595549 16 Interlaced version of UYVY (line order 0, 2, 4,….,1, 3, 5….) registered by Silviu Brinzei of Lead Technologies.
IY41 0x31345949 12 Interlaced version of Y41P (line order 0, 2, 4,….,1, 3, 5….) registered by Silviu Brinzei of Lead Technologies.
IYU1 0x31555949 12 12 bit format used in mode 2 of the IEEE 1394 Digital Camera 1.04 spec. This is equivalent to Y411
IYU2 0x32555949 24 24 bit format used in mode 0 of the IEEE 1394 Digital Camera 1.04 spec
UYNV 0x564E5955 16 A direct copy of UYVY registered by NVidia to work around problems in some old codecs which did not like hardware which offered more than 2 UYVY surfaces.
UYVP 0x50565955 24? YCbCr 4:2:2 extended precision 10-bits per component in U0Y0V0Y1 order. Registered by Rich Ehlers of Evans & Sutherland. (Awaiting confirmation of component packing structure)
UYVY 0x59565955 16 YUV 4:2:2 (Y sample at every pixel, U and V sampled at every second pixel horizontally on each line). A macropixel contains 2 pixels in 1 u_int32.
V210 0x30313256 32 10-bit 4:2:2 YCrCb equivalent to the Quicktime format of the same name.
V422 0x32323456 16 I am told that this is an upside down version of UYVY.
V655 0x35353656 16? 16 bit YUV 4:2:2 format registered by Vitec Multimedia. I have no information on the component ordering or packing.
VYUY 0x59555956 ? ATI Packed YUV Data (format unknown but you can get hold of a codec supporting it here)
Y422 0x32323459 16 Direct copy of UYVY as used by ADS Technologies Pyro WebCam firewire camera.
YUY2 0x32595559 16 YUV 4:2:2 as for UYVY but with different component ordering within the u_int32 macropixel.
YUYV 0x56595559 16 Duplicate of YUY2
YUNV 0x564E5559 16 A direct copy of YUY2 registered by NVidia to work around problems in some old codecs which did not like hardware which offered more than 2 YUY2 surfaces.
YVYU 0x55595659 16 YUV 4:2:2 as for UYVY but with different component ordering within the u_int32 macropixel.
Y41P 0x50313459 12 YUV 4:1:1 (Y sample at every pixel, U and V sampled at every fourth pixel horizontally on each line). A macropixel contains 8 pixels in 3 u_int32s.
Y411 0x31313459 12 YUV 4:1:1 with a packed, 6 byte/4 pixel macroblock structure.
Y211 0x31313259 8 Packed YUV format with Y sampled at every second pixel across each line and U and V sampled at every fourth pixel.
Y41T 0x54313459 12 Format as for Y41P but the lsb of each Y component is used to signal pixel transparency .
Y42T 0x54323459 16 Format as for UYVY but the lsb of each Y component is used to signal pixel transparency .
YUVP 0x50565559 24? YCbCr 4:2:2 extended precision 10-bits per component in Y0U0Y1V0 order. Registered by Rich Ehlers of Evans & Sutherland.
Y800 0x30303859 8 Simple, single Y plane for monochrome images.
Y8 0x20203859 8 Duplicate of Y800 as far as I can see.

  • planar formats
Label FOURCC in Hex Bits per pixel Description
YVU9 0x39555659 9 8 bit Y plane followed by 8 bit 4x4 subsampled V and U planes. Registered by Intel.
YUV9 0x39565559 9? Registered by Intel. I have no other information on this format. Probably a copy of YVU9.
IF09 0x39304649 9.5 As YVU9 but an additional 4x4 subsampled plane is appended containing delta information relative to the last frame. (Bpp is reported as 9)
YV16 0x36315659 16 8 bit Y plane followed by 8 bit 2x1 subsampled V and U planes.
YV12 0x32315659 12 8 bit Y plane followed by 8 bit 2x2 subsampled V and U planes.
I420 0x30323449 12 8 bit Y plane followed by 8 bit 2x2 subsampled U and V planes.
IYUV 0x56555949 12 Duplicate FOURCC, identical to I420.
NV12 0x3231564E 12 8-bit Y plane followed by an interleaved U/V plane with 2x2 subsampling
NV21 0x3132564E 12 As NV12 with U and V reversed in the interleaved plane
IMC1 0x31434D49 12 As YV12 except the U and V planes each have the same stride as the Y plane
IMC2 0x32434D49 12 Similar to IMC1 except that the U and V lines are interleaved at half stride boundaries
IMC3 0x33434D49 12 As IMC1 except that U and V are swapped
IMC4 0x34434D49 12 As IMC2 except that U and V are swapped
CLPL 0x4C504C43 12 Format similar to YV12 but including a level of indirection.
Y41B 0x42313459 12? Weitek format listed as “YUV 4:1:1 planar”. I have no other information on this format.
Y42B 0x42323459 16? Weitek format listed as “YUV 4:2:2 planar”. I have no other information on this format.
Y800 0x30303859 8 Simple, single Y plane for monochrome images.
Y8 0x20203859 8 Duplicate of Y800 as far as I can see.

特别关注

4:2:0中的:I420,YV12;NV12和NV21

其实planar formats里描述已经说得非常清楚。
- I420 就是我们最常接触到的yuv420格式,Y plane + (1/2宽, 1/2高)U + (1/2宽, 1/2高)V;
- YV12 是 Y + V + U;
- NV12 是 Y plane + 交织的(interleaved) UV;
- NV21 是 Y plane + 交织的VU。

x264

# x264 x264.h
/* Colorspace type */
#define X264_CSP_MASK           0x00ff  /* */
#define X264_CSP_NONE           0x0000  /* Invalid mode     */
---------------------1
#define X264_CSP_I420           0x0001  /* yuv 4:2:0 planar */
#define X264_CSP_YV12           0x0002  /* yvu 4:2:0 planar */
#define X264_CSP_NV12           0x0003  /* yuv 4:2:0, with one y plane and one packed u+v */
#define X264_CSP_NV21           0x0004  /* yuv 4:2:0, with one y plane and one packed v+u */
---------------------2
#define X264_CSP_I422           0x0005  /* yuv 4:2:2 planar */
#define X264_CSP_YV16           0x0006  /* yvu 4:2:2 planar */
#define X264_CSP_NV16           0x0007  /* yuv 4:2:2, with one y plane and one packed u+v */
#define X264_CSP_V210           0x0008  /* 10-bit yuv 4:2:2 packed in 32 */
---------------------3
#define X264_CSP_I444           0x0009  /* yuv 4:4:4 planar */
#define X264_CSP_YV24           0x000a  /* yvu 4:4:4 planar */
#define X264_CSP_BGR            0x000b  /* packed bgr 24bits   */
#define X264_CSP_BGRA           0x000c  /* packed bgr 32bits   */
#define X264_CSP_RGB            0x000d  /* packed rgb 24bits   */
---------------------4
#define X264_CSP_MAX            0x000e  /* end of list */
#define X264_CSP_VFLIP          0x1000  /* the csp is vertically flipped */
#define X264_CSP_HIGH_DEPTH     0x2000  /* the csp has a depth of 16 bits per pixel component */

编码器内部按4大类型处理:invalid,yuv420, yuv422,yuv444

参考

YUV formats


相关标签: YUV