OLD | NEW |
1 # Introduction | 1 # Introduction |
2 | 2 |
3 Formats (FOURCC) supported by libyuv are detailed here. | 3 Formats (FOURCC) supported by libyuv are detailed here. |
4 | 4 |
5 # Core Formats | 5 # Core Formats |
6 | 6 |
7 There are 2 core formats supported by libyuv - I420 and ARGB. All YUV formats c
an be converted to/from I420. All RGB formats can be converted to/from ARGB. | 7 There are 2 core formats supported by libyuv - I420 and ARGB. All YUV formats c
an be converted to/from I420. All RGB formats can be converted to/from ARGB. |
8 | 8 |
9 Filtering functions such as scaling and planar functions work on I420 and/or ARG
B. | 9 Filtering functions such as scaling and planar functions work on I420 and/or ARG
B. |
10 | 10 |
(...skipping 19 matching lines...) Expand all Loading... |
30 kCMPixelFormat_444YpCbCr10 = 'v410', Not supported. | 30 kCMPixelFormat_444YpCbCr10 = 'v410', Not supported. |
31 kCMPixelFormat_8IndexedGray_WhiteIsZero = 0x00000028, Not supported. | 31 kCMPixelFormat_8IndexedGray_WhiteIsZero = 0x00000028, Not supported. |
32 }; | 32 }; |
33 | 33 |
34 | 34 |
35 # FOURCC (Four Charactacter Code) List | 35 # FOURCC (Four Charactacter Code) List |
36 | 36 |
37 The following is extracted from video_common.h as a complete list of formats sup
ported by libyuv. | 37 The following is extracted from video_common.h as a complete list of formats sup
ported by libyuv. |
38 | 38 |
39 enum FourCC { | 39 enum FourCC { |
40 // 9 Primary YUV formats: 5 planar, 2 biplanar, 2 packed. | 40 // 8 Primary YUV formats: 5 planar, 2 biplanar, 2 packed. |
41 FOURCC_I420 = FOURCC('I', '4', '2', '0'), | 41 FOURCC_I420 = FOURCC('I', '4', '2', '0'), |
42 FOURCC_I422 = FOURCC('I', '4', '2', '2'), | 42 FOURCC_I422 = FOURCC('I', '4', '2', '2'), |
43 FOURCC_I444 = FOURCC('I', '4', '4', '4'), | 43 FOURCC_I444 = FOURCC('I', '4', '4', '4'), |
44 FOURCC_I411 = FOURCC('I', '4', '1', '1'), | |
45 FOURCC_I400 = FOURCC('I', '4', '0', '0'), | 44 FOURCC_I400 = FOURCC('I', '4', '0', '0'), |
46 FOURCC_NV21 = FOURCC('N', 'V', '2', '1'), | 45 FOURCC_NV21 = FOURCC('N', 'V', '2', '1'), |
47 FOURCC_NV12 = FOURCC('N', 'V', '1', '2'), | 46 FOURCC_NV12 = FOURCC('N', 'V', '1', '2'), |
48 FOURCC_YUY2 = FOURCC('Y', 'U', 'Y', '2'), | 47 FOURCC_YUY2 = FOURCC('Y', 'U', 'Y', '2'), |
49 FOURCC_UYVY = FOURCC('U', 'Y', 'V', 'Y'), | 48 FOURCC_UYVY = FOURCC('U', 'Y', 'V', 'Y'), |
50 | 49 |
51 // 2 Secondary YUV formats: row biplanar. | 50 // 1 Secondary YUV formats: row biplanar. |
52 FOURCC_M420 = FOURCC('M', '4', '2', '0'), | 51 FOURCC_M420 = FOURCC('M', '4', '2', '0'), |
53 FOURCC_Q420 = FOURCC('Q', '4', '2', '0'), | |
54 | 52 |
55 // 9 Primary RGB formats: 4 32 bpp, 2 24 bpp, 3 16 bpp. | 53 // 9 Primary RGB formats: 4 32 bpp, 2 24 bpp, 3 16 bpp. |
56 FOURCC_ARGB = FOURCC('A', 'R', 'G', 'B'), | 54 FOURCC_ARGB = FOURCC('A', 'R', 'G', 'B'), |
57 FOURCC_BGRA = FOURCC('B', 'G', 'R', 'A'), | 55 FOURCC_BGRA = FOURCC('B', 'G', 'R', 'A'), |
58 FOURCC_ABGR = FOURCC('A', 'B', 'G', 'R'), | 56 FOURCC_ABGR = FOURCC('A', 'B', 'G', 'R'), |
59 FOURCC_24BG = FOURCC('2', '4', 'B', 'G'), | 57 FOURCC_24BG = FOURCC('2', '4', 'B', 'G'), |
60 FOURCC_RAW = FOURCC('r', 'a', 'w', ' '), | 58 FOURCC_RAW = FOURCC('r', 'a', 'w', ' '), |
61 FOURCC_RGBA = FOURCC('R', 'G', 'B', 'A'), | 59 FOURCC_RGBA = FOURCC('R', 'G', 'B', 'A'), |
62 FOURCC_RGBP = FOURCC('R', 'G', 'B', 'P'), // rgb565 LE. | 60 FOURCC_RGBP = FOURCC('R', 'G', 'B', 'P'), // rgb565 LE. |
63 FOURCC_RGBO = FOURCC('R', 'G', 'B', 'O'), // argb1555 LE. | 61 FOURCC_RGBO = FOURCC('R', 'G', 'B', 'O'), // argb1555 LE. |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
97 FOURCC_CM24 = FOURCC(0, 0, 0, 24), // Alias for RAW kCMPixelFormat_24RGB | 95 FOURCC_CM24 = FOURCC(0, 0, 0, 24), // Alias for RAW kCMPixelFormat_24RGB |
98 FOURCC_L555 = FOURCC('L', '5', '5', '5'), // Alias for RGBO. | 96 FOURCC_L555 = FOURCC('L', '5', '5', '5'), // Alias for RGBO. |
99 FOURCC_L565 = FOURCC('L', '5', '6', '5'), // Alias for RGBP. | 97 FOURCC_L565 = FOURCC('L', '5', '6', '5'), // Alias for RGBP. |
100 FOURCC_5551 = FOURCC('5', '5', '5', '1'), // Alias for RGBO. | 98 FOURCC_5551 = FOURCC('5', '5', '5', '1'), // Alias for RGBO. |
101 | 99 |
102 // 1 Auxiliary compressed YUV format set aside for capturer. | 100 // 1 Auxiliary compressed YUV format set aside for capturer. |
103 FOURCC_H264 = FOURCC('H', '2', '6', '4'), | 101 FOURCC_H264 = FOURCC('H', '2', '6', '4'), |
104 | 102 |
105 # Planar YUV | 103 # Planar YUV |
106 The following formats contains a full size Y plane followed by 1 or 2 | 104 The following formats contains a full size Y plane followed by 1 or 2 |
107 planes for UV: I420, I422, I444, I411, I400, NV21, NV12, I400 | 105 planes for UV: I420, I422, I444, I400, NV21, NV12, I400 |
108 The size (subsampling) of the UV varies. | 106 The size (subsampling) of the UV varies. |
109 I420, NV12 and NV21 are half width, half height | 107 I420, NV12 and NV21 are half width, half height |
110 I422, NV16 and NV61 are half width, full height | 108 I422, NV16 and NV61 are half width, full height |
111 I444, NV24 and NV42 are full width, full height | 109 I444, NV24 and NV42 are full width, full height |
112 I400 and J400 have no chroma channel. | 110 I400 and J400 have no chroma channel. |
113 | 111 |
114 # The ARGB FOURCC | 112 # The ARGB FOURCC |
115 | 113 |
116 There are 4 ARGB layouts - ARGB, BGRA, ABGR and RGBA. ARGB is most common by fa
r, used for screen formats, and windows webcam drivers. | 114 There are 4 ARGB layouts - ARGB, BGRA, ABGR and RGBA. ARGB is most common by fa
r, used for screen formats, and windows webcam drivers. |
117 | 115 |
(...skipping 15 matching lines...) Expand all Loading... |
133 | 131 |
134 All formats can be converted to/from ARGB. | 132 All formats can be converted to/from ARGB. |
135 | 133 |
136 Most 'planar_functions' work on ARGB (e.g. ARGBBlend). | 134 Most 'planar_functions' work on ARGB (e.g. ARGBBlend). |
137 | 135 |
138 Some are channel order agnostic (e.g. ARGBScale). | 136 Some are channel order agnostic (e.g. ARGBScale). |
139 | 137 |
140 Some functions are symmetric (e.g. ARGBToBGRA is the same as BGRAToARGB, so its
a macro). | 138 Some functions are symmetric (e.g. ARGBToBGRA is the same as BGRAToARGB, so its
a macro). |
141 | 139 |
142 ARGBBlend expects preattenuated ARGB. The R,G,B are premultiplied by alpha. Oth
er functions don't care. | 140 ARGBBlend expects preattenuated ARGB. The R,G,B are premultiplied by alpha. Oth
er functions don't care. |
OLD | NEW |