| 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 |