1 /* ***** BEGIN LICENSE BLOCK *****
2 * This file is part of openfx-io <https://github.com/MrKepzie/openfx-io>,
3 * Copyright (C) 2013-2018 INRIA
4 *
5 * openfx-io is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * openfx-io is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with openfx-io. If not, see <http://www.gnu.org/licenses/gpl-2.0.html>
17 * ***** END LICENSE BLOCK ***** */
18
19 #include "PixelFormat.h"
20
21 extern "C" {
22 #include <libavutil/pixdesc.h>
23 }
24
25 namespace OFX {
26 namespace FFmpeg {
27
28 bool
pixelFormatIsYUV(AVPixelFormat pix_fmt)29 pixelFormatIsYUV(AVPixelFormat pix_fmt)
30 {
31 // from swscale_internal.h
32 const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pix_fmt);
33
34 return desc && !(desc->flags & AV_PIX_FMT_FLAG_RGB) && desc->nb_components >= 2;
35 }
36
37 bool
pixelFormatAlpha(AVPixelFormat pix_fmt)38 pixelFormatAlpha(AVPixelFormat pix_fmt)
39 {
40 const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pix_fmt);
41
42 return desc && (desc->flags & AV_PIX_FMT_FLAG_ALPHA);
43 }
44
45 int
pixelFormatBPP(const AVPixelFormat pixelFormat)46 pixelFormatBPP(const AVPixelFormat pixelFormat)
47 {
48 #if 1
49 const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pixelFormat);
50
51 return av_get_bits_per_pixel(desc);
52 #else
53 switch (pixelFormat) {
54 case AV_PIX_FMT_NONE:
55
56 return 0;
57 break;
58
59 case AV_PIX_FMT_YUV420P: ///< planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
60 return 12;
61 break;
62 case AV_PIX_FMT_YUYV422: ///< packed YUV 4:2:2, 16bpp, Y0 Cb Y1 Cr
63 return 16;
64 break;
65 case AV_PIX_FMT_RGB24: ///< packed RGB 8:8:8, 24bpp, RGBRGB...
66 return 24;
67 break;
68 case AV_PIX_FMT_BGR24: ///< packed RGB 8:8:8, 24bpp, BGRBGR...
69 return 24;
70 break;
71 case AV_PIX_FMT_YUV422P: ///< planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples)
72 return 16;
73 break;
74 case AV_PIX_FMT_YUV444P: ///< planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples)
75 return 24;
76 break;
77 case AV_PIX_FMT_YUV410P: ///< planar YUV 4:1:0, 9bpp, (1 Cr & Cb sample per 4x4 Y samples)
78 return 9;
79 break;
80 case AV_PIX_FMT_YUV411P: ///< planar YUV 4:1:1, 12bpp, (1 Cr & Cb sample per 4x1 Y samples)
81 return 12;
82 break;
83 case AV_PIX_FMT_GRAY8: ///< Y , 8bpp
84 return 8;
85 break;
86 case AV_PIX_FMT_MONOWHITE: ///< Y , 1bpp, 0 is white, 1 is black, in each byte pixels are ordered from the msb to the lsb
87 return 1;
88 break;
89 case AV_PIX_FMT_MONOBLACK: ///< Y , 1bpp, 0 is black, 1 is white, in each byte pixels are ordered from the msb to the lsb
90 return 1;
91 break;
92 case AV_PIX_FMT_PAL8: ///< 8 bits with AV_PIX_FMT_RGB32 palette
93 return 8;
94 break;
95 case AV_PIX_FMT_YUVJ420P: ///< planar YUV 4:2:0, 12bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV420P and setting color_range
96 return 12;
97 break;
98 case AV_PIX_FMT_YUVJ422P: ///< planar YUV 4:2:2, 16bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV422P and setting color_range
99 return 16;
100 break;
101 case AV_PIX_FMT_YUVJ444P: ///< planar YUV 4:4:4, 24bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV444P and setting color_range
102 return 24;
103 break;
104 case AV_PIX_FMT_UYVY422: ///< packed YUV 4:2:2, 16bpp, Cb Y0 Cr Y1
105 return 16;
106 break;
107 case AV_PIX_FMT_UYYVYY411: ///< packed YUV 4:1:1, 12bpp, Cb Y0 Y1 Cr Y2 Y3
108 return 12;
109 break;
110 case AV_PIX_FMT_BGR8: ///< packed RGB 3:3:2, 8bpp, (msb)2B 3G 3R(lsb)
111 return 8;
112 break;
113 case AV_PIX_FMT_BGR4: ///< packed RGB 1:2:1 bitstream, 4bpp, (msb)1B 2G 1R(lsb), a byte contains two pixels, the first pixel in the byte is the one composed by the 4 msb bits
114 return 4;
115 break;
116 case AV_PIX_FMT_BGR4_BYTE: ///< packed RGB 1:2:1, 8bpp, (msb)1B 2G 1R(lsb)
117 return 8;
118 break;
119 case AV_PIX_FMT_RGB8: ///< packed RGB 3:3:2, 8bpp, (msb)2R 3G 3B(lsb)
120 return 8;
121 break;
122 case AV_PIX_FMT_RGB4: ///< packed RGB 1:2:1 bitstream, 4bpp, (msb)1R 2G 1B(lsb), a byte contains two pixels, the first pixel in the byte is the one composed by the 4 msb bits
123 return 4;
124 break;
125 case AV_PIX_FMT_RGB4_BYTE: ///< packed RGB 1:2:1, 8bpp, (msb)1R 2G 1B(lsb)
126 return 8;
127 break;
128 case AV_PIX_FMT_NV12: ///< planar YUV 4:2:0, 12bpp, 1 plane for Y and 1 plane for the UV components, which are interleaved (first byte U and the following byte V)
129 return 12;
130 break;
131 case AV_PIX_FMT_NV21: ///< as above, but U and V bytes are swapped
132 return 12;
133 break;
134
135 case AV_PIX_FMT_ARGB: ///< packed ARGB 8:8:8:8, 32bpp, ARGBARGB...
136 return 32;
137 break;
138 case AV_PIX_FMT_RGBA: ///< packed RGBA 8:8:8:8, 32bpp, RGBARGBA...
139 return 32;
140 break;
141 case AV_PIX_FMT_ABGR: ///< packed ABGR 8:8:8:8, 32bpp, ABGRABGR...
142 return 32;
143 break;
144 case AV_PIX_FMT_BGRA: ///< packed BGRA 8:8:8:8, 32bpp, BGRABGRA...
145 return 32;
146 break;
147
148 case AV_PIX_FMT_GRAY16BE: ///< Y , 16bpp, big-endian
149 return 16;
150 break;
151 case AV_PIX_FMT_GRAY16LE: ///< Y , 16bpp, little-endian
152 return 16;
153 break;
154 case AV_PIX_FMT_YUV440P: ///< planar YUV 4:4:0 (1 Cr & Cb sample per 1x2 Y samples)
155 return 16;
156 break;
157 case AV_PIX_FMT_YUVJ440P: ///< planar YUV 4:4:0 full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV440P and setting color_range
158 return 16;
159 break;
160 case AV_PIX_FMT_YUVA420P: ///< planar YUV 4:2:0, 20bpp, (1 Cr & Cb sample per 2x2 Y & A samples)
161 return 20;
162 break;
163 case AV_PIX_FMT_RGB48BE: ///< packed RGB 16:16:16, 48bpp, 16R, 16G, 16B, the 2-byte value for each R/G/B component is stored as big-endian
164 return 48;
165 break;
166 case AV_PIX_FMT_RGB48LE: ///< packed RGB 16:16:16, 48bpp, 16R, 16G, 16B, the 2-byte value for each R/G/B component is stored as little-endian
167 return 48;
168 break;
169
170 case AV_PIX_FMT_RGB565BE: ///< packed RGB 5:6:5, 16bpp, (msb) 5R 6G 5B(lsb), big-endian
171 return 16;
172 break;
173 case AV_PIX_FMT_RGB565LE: ///< packed RGB 5:6:5, 16bpp, (msb) 5R 6G 5B(lsb), little-endian
174 return 16;
175 break;
176 case AV_PIX_FMT_RGB555BE: ///< packed RGB 5:5:5, 16bpp, (msb)1X 5R 5G 5B(lsb), big-endian , X=unused/undefined
177 return 16;
178 break;
179 case AV_PIX_FMT_RGB555LE: ///< packed RGB 5:5:5, 16bpp, (msb)1X 5R 5G 5B(lsb), little-endian, X=unused/undefined
180 return 16;
181 break;
182
183 case AV_PIX_FMT_BGR565BE: ///< packed BGR 5:6:5, 16bpp, (msb) 5B 6G 5R(lsb), big-endian
184 return 16;
185 break;
186 case AV_PIX_FMT_BGR565LE: ///< packed BGR 5:6:5, 16bpp, (msb) 5B 6G 5R(lsb), little-endian
187 return 16;
188 break;
189 case AV_PIX_FMT_BGR555BE: ///< packed BGR 5:5:5, 16bpp, (msb)1X 5B 5G 5R(lsb), big-endian , X=unused/undefined
190 return 16;
191 break;
192 case AV_PIX_FMT_BGR555LE: ///< packed BGR 5:5:5, 16bpp, (msb)1X 5B 5G 5R(lsb), little-endian, X=unused/undefined
193 return 16;
194 break;
195
196 case AV_PIX_FMT_YUV420P16LE: ///< planar YUV 4:2:0, 24bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian
197 return 24;
198 break;
199 case AV_PIX_FMT_YUV420P16BE: ///< planar YUV 4:2:0, 24bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian
200 return 24;
201 break;
202 case AV_PIX_FMT_YUV422P16LE: ///< planar YUV 4:2:2, 32bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian
203 return 32;
204 break;
205 case AV_PIX_FMT_YUV422P16BE: ///< planar YUV 4:2:2, 32bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian
206 return 32;
207 break;
208 case AV_PIX_FMT_YUV444P16LE: ///< planar YUV 4:4:4, 48bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian
209 return 48;
210 break;
211 case AV_PIX_FMT_YUV444P16BE: ///< planar YUV 4:4:4, 48bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian
212 return 48;
213 break;
214
215 case AV_PIX_FMT_RGB444LE: ///< packed RGB 4:4:4, 16bpp, (msb)4X 4R 4G 4B(lsb), little-endian, X=unused/undefined
216 return 16;
217 break;
218 case AV_PIX_FMT_RGB444BE: ///< packed RGB 4:4:4, 16bpp, (msb)4X 4R 4G 4B(lsb), big-endian, X=unused/undefined
219 return 16;
220 break;
221 case AV_PIX_FMT_BGR444LE: ///< packed BGR 4:4:4, 16bpp, (msb)4X 4B 4G 4R(lsb), little-endian, X=unused/undefined
222 return 16;
223 break;
224 case AV_PIX_FMT_BGR444BE: ///< packed BGR 4:4:4, 16bpp, (msb)4X 4B 4G 4R(lsb), big-endian, X=unused/undefined
225 return 16;
226 break;
227 case AV_PIX_FMT_YA8: ///< 8 bits gray, 8 bits alpha
228 return 16;
229 break;
230
231 case AV_PIX_FMT_BGR48BE: ///< packed RGB 16:16:16, 48bpp, 16B, 16G, 16R, the 2-byte value for each R/G/B component is stored as big-endian
232 return 48;
233 break;
234 case AV_PIX_FMT_BGR48LE: ///< packed RGB 16:16:16, 48bpp, 16B, 16G, 16R, the 2-byte value for each R/G/B component is stored as little-endian
235 return 48;
236 break;
237
238 /**
239 * The following 12 formats have the disadvantage of needing 1 format for each bit depth.
240 * Notice that each 9/10 bits sample is stored in 16 bits with extra padding.
241 * If you want to support multiple bit depths, then using AV_PIX_FMT_YUV420P16* with the bpp stored separately is better.
242 */
243 case AV_PIX_FMT_YUV420P9BE: ///< planar YUV 4:2:0, 13.5bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian
244 return (int)13.5;
245 break;
246 case AV_PIX_FMT_YUV420P9LE: ///< planar YUV 4:2:0, 13.5bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian
247 return (int)13.5;
248 break;
249 case AV_PIX_FMT_YUV420P10BE:///< planar YUV 4:2:0, 15bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian
250 return 15;
251 break;
252 case AV_PIX_FMT_YUV420P10LE:///< planar YUV 4:2:0, 15bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian
253 return 15;
254 break;
255 case AV_PIX_FMT_YUV422P10BE:///< planar YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian
256 return 20;
257 break;
258 case AV_PIX_FMT_YUV422P10LE:///< planar YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian
259 return 20;
260 break;
261 case AV_PIX_FMT_YUV444P9BE: ///< planar YUV 4:4:4, 27bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian
262 return 27;
263 break;
264 case AV_PIX_FMT_YUV444P9LE: ///< planar YUV 4:4:4, 27bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian
265 return 27;
266 break;
267 case AV_PIX_FMT_YUV444P10BE:///< planar YUV 4:4:4, 30bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian
268 return 30;
269 break;
270 case AV_PIX_FMT_YUV444P10LE:///< planar YUV 4:4:4, 30bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian
271 return 30;
272 break;
273 case AV_PIX_FMT_YUV422P9BE: ///< planar YUV 4:2:2, 18bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian
274 return 18;
275 break;
276 case AV_PIX_FMT_YUV422P9LE: ///< planar YUV 4:2:2, 18bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian
277 return 18;
278 break;
279 case AV_PIX_FMT_GBRP: ///< planar GBR 4:4:4 24bpp
280 return 24;
281 break;
282 case AV_PIX_FMT_GBRP9BE: ///< planar GBR 4:4:4 27bpp, big-endian
283 return 27;
284 break;
285 case AV_PIX_FMT_GBRP9LE: ///< planar GBR 4:4:4 27bpp, little-endian
286 return 27;
287 break;
288 case AV_PIX_FMT_GBRP10BE: ///< planar GBR 4:4:4 30bpp, big-endian
289 return 30;
290 break;
291 case AV_PIX_FMT_GBRP10LE: ///< planar GBR 4:4:4 30bpp, little-endian
292 return 30;
293 break;
294 case AV_PIX_FMT_GBRP16BE: ///< planar GBR 4:4:4 48bpp, big-endian
295 return 48;
296 break;
297 case AV_PIX_FMT_GBRP16LE: ///< planar GBR 4:4:4 48bpp, little-endian
298 return 48;
299 break;
300 case AV_PIX_FMT_YUVA422P: ///< planar YUV 4:2:2 24bpp, (1 Cr & Cb sample per 2x1 Y & A samples)
301 return 24;
302 break;
303 case AV_PIX_FMT_YUVA444P: ///< planar YUV 4:4:4 32bpp, (1 Cr & Cb sample per 1x1 Y & A samples)
304 return 32;
305 break;
306 case AV_PIX_FMT_YUVA420P9BE: ///< planar YUV 4:2:0 22.5bpp, (1 Cr & Cb sample per 2x2 Y & A samples), big-endian
307 return (int)22.5;
308 break;
309 case AV_PIX_FMT_YUVA420P9LE: ///< planar YUV 4:2:0 22.5bpp, (1 Cr & Cb sample per 2x2 Y & A samples), little-endian
310 return (int)22.5;
311 break;
312 case AV_PIX_FMT_YUVA422P9BE: ///< planar YUV 4:2:2 27bpp, (1 Cr & Cb sample per 2x1 Y & A samples), big-endian
313 return 27;
314 break;
315 case AV_PIX_FMT_YUVA422P9LE: ///< planar YUV 4:2:2 27bpp, (1 Cr & Cb sample per 2x1 Y & A samples), little-endian
316 return 27;
317 break;
318 case AV_PIX_FMT_YUVA444P9BE: ///< planar YUV 4:4:4 36bpp, (1 Cr & Cb sample per 1x1 Y & A samples), big-endian
319 return 36;
320 break;
321 case AV_PIX_FMT_YUVA444P9LE: ///< planar YUV 4:4:4 36bpp, (1 Cr & Cb sample per 1x1 Y & A samples), little-endian
322 return 36;
323 break;
324 case AV_PIX_FMT_YUVA420P10BE: ///< planar YUV 4:2:0 25bpp, (1 Cr & Cb sample per 2x2 Y & A samples, big-endian)
325 return 25;
326 break;
327 case AV_PIX_FMT_YUVA420P10LE: ///< planar YUV 4:2:0 25bpp, (1 Cr & Cb sample per 2x2 Y & A samples, little-endian)
328 return 25;
329 break;
330 case AV_PIX_FMT_YUVA422P10BE: ///< planar YUV 4:2:2 30bpp, (1 Cr & Cb sample per 2x1 Y & A samples, big-endian)
331 return 30;
332 break;
333 case AV_PIX_FMT_YUVA422P10LE: ///< planar YUV 4:2:2 30bpp, (1 Cr & Cb sample per 2x1 Y & A samples, little-endian)
334 return 30;
335 break;
336 case AV_PIX_FMT_YUVA444P10BE: ///< planar YUV 4:4:4 40bpp, (1 Cr & Cb sample per 1x1 Y & A samples, big-endian)
337 return 40;
338 break;
339 case AV_PIX_FMT_YUVA444P10LE: ///< planar YUV 4:4:4 40bpp, (1 Cr & Cb sample per 1x1 Y & A samples, little-endian)
340 return 40;
341 break;
342 case AV_PIX_FMT_YUVA420P16BE: ///< planar YUV 4:2:0 40bpp, (1 Cr & Cb sample per 2x2 Y & A samples, big-endian)
343 return 40;
344 break;
345 case AV_PIX_FMT_YUVA420P16LE: ///< planar YUV 4:2:0 40bpp, (1 Cr & Cb sample per 2x2 Y & A samples, little-endian)
346 return 40;
347 break;
348 case AV_PIX_FMT_YUVA422P16BE: ///< planar YUV 4:2:2 48bpp, (1 Cr & Cb sample per 2x1 Y & A samples, big-endian)
349 return 48;
350 break;
351 case AV_PIX_FMT_YUVA422P16LE: ///< planar YUV 4:2:2 48bpp, (1 Cr & Cb sample per 2x1 Y & A samples, little-endian)
352 return 48;
353 break;
354 case AV_PIX_FMT_YUVA444P16BE: ///< planar YUV 4:4:4 64bpp, (1 Cr & Cb sample per 1x1 Y & A samples, big-endian)
355 return 64;
356 break;
357 case AV_PIX_FMT_YUVA444P16LE: ///< planar YUV 4:4:4 64bpp, (1 Cr & Cb sample per 1x1 Y & A samples, little-endian)
358 return 64;
359 break;
360
361 case AV_PIX_FMT_XYZ12LE: ///< packed XYZ 4:4:4, 36 bpp, (msb) 12X, 12Y, 12Z (lsb), the 2-byte value for each X/Y/Z is stored as little-endian, the 4 lower bits are set to 0
362 return 36;
363 break;
364 case AV_PIX_FMT_XYZ12BE: ///< packed XYZ 4:4:4, 36 bpp, (msb) 12X, 12Y, 12Z (lsb), the 2-byte value for each X/Y/Z is stored as big-endian, the 4 lower bits are set to 0
365 return 36;
366 break;
367 case AV_PIX_FMT_NV16: ///< interleaved chroma YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples)
368 return 16;
369 break;
370 case AV_PIX_FMT_NV20LE: ///< interleaved chroma YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian
371 return 20;
372 break;
373 case AV_PIX_FMT_NV20BE: ///< interleaved chroma YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian
374 return 20;
375 break;
376
377 case AV_PIX_FMT_RGBA64BE: ///< packed RGBA 16:16:16:16, 64bpp, 16R, 16G, 16B, 16A, the 2-byte value for each R/G/B/A component is stored as big-endian
378 return 64;
379 break;
380 case AV_PIX_FMT_RGBA64LE: ///< packed RGBA 16:16:16:16, 64bpp, 16R, 16G, 16B, 16A, the 2-byte value for each R/G/B/A component is stored as little-endian
381 return 64;
382 break;
383 case AV_PIX_FMT_BGRA64BE: ///< packed RGBA 16:16:16:16, 64bpp, 16B, 16G, 16R, 16A, the 2-byte value for each R/G/B/A component is stored as big-endian
384 return 64;
385 break;
386 case AV_PIX_FMT_BGRA64LE: ///< packed RGBA 16:16:16:16, 64bpp, 16B, 16G, 16R, 16A, the 2-byte value for each R/G/B/A component is stored as little-endian
387 return 64;
388 break;
389
390 case AV_PIX_FMT_YVYU422: ///< packed YUV 4:2:2, 16bpp, Y0 Cr Y1 Cb
391 return 16;
392 break;
393
394 case AV_PIX_FMT_YA16BE: ///< 16 bits gray, 16 bits alpha (big-endian)
395 return 32;
396 break;
397 case AV_PIX_FMT_YA16LE: ///< 16 bits gray, 16 bits alpha (little-endian)
398 return 32;
399 break;
400
401 case AV_PIX_FMT_GBRAP: ///< planar GBRA 4:4:4:4 32bpp
402 return 32;
403 break;
404 case AV_PIX_FMT_GBRAP16BE: ///< planar GBRA 4:4:4:4 64bpp, big-endian
405 return 64;
406 break;
407 case AV_PIX_FMT_GBRAP16LE: ///< planar GBRA 4:4:4:4 64bpp, little-endian
408 return 64;
409 break;
410
411 case AV_PIX_FMT_0RGB:///< packed RGB 8:8:8, 32bpp, XRGBXRGB... X=unused/undefined
412 return 32;
413 break;
414 case AV_PIX_FMT_RGB0: ///< packed RGB 8:8:8, 32bpp, RGBXRGBX... X=unused/undefined
415 return 32;
416 break;
417 case AV_PIX_FMT_0BGR: ///< packed BGR 8:8:8, 32bpp, XBGRXBGR... X=unused/undefined
418 return 32;
419 break;
420 case AV_PIX_FMT_BGR0: ///< packed BGR 8:8:8, 32bpp, BGRXBGRX... X=unused/undefined
421 return 32;
422 break;
423
424 case AV_PIX_FMT_YUV420P12BE: ///< planar YUV 4:2:0,18bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian
425 return 18;
426 break;
427 case AV_PIX_FMT_YUV420P12LE: ///< planar YUV 4:2:0,18bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian
428 return 18;
429 break;
430 case AV_PIX_FMT_YUV420P14BE: ///< planar YUV 4:2:0,21bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian
431 return 21;
432 break;
433 case AV_PIX_FMT_YUV420P14LE: ///< planar YUV 4:2:0,21bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian
434 return 21;
435 break;
436 case AV_PIX_FMT_YUV422P12BE: ///< planar YUV 4:2:2,24bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian
437 return 24;
438 break;
439 case AV_PIX_FMT_YUV422P12LE: ///< planar YUV 4:2:2,24bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian
440 return 24;
441 break;
442 case AV_PIX_FMT_YUV422P14BE: ///< planar YUV 4:2:2,28bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian
443 return 28;
444 break;
445 case AV_PIX_FMT_YUV422P14LE: ///< planar YUV 4:2:2,28bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian
446 return 28;
447 break;
448 case AV_PIX_FMT_YUV444P12BE: ///< planar YUV 4:4:4,36bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian
449 return 36;
450 break;
451 case AV_PIX_FMT_YUV444P12LE: ///< planar YUV 4:4:4,36bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian
452 return 36;
453 break;
454 case AV_PIX_FMT_YUV444P14BE: ///< planar YUV 4:4:4,42bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian
455 return 42;
456 break;
457 case AV_PIX_FMT_YUV444P14LE: ///< planar YUV 4:4:4,42bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian
458 return 42;
459 break;
460 case AV_PIX_FMT_GBRP12BE: ///< planar GBR 4:4:4 36bpp, big-endian
461 return 36;
462 break;
463 case AV_PIX_FMT_GBRP12LE: ///< planar GBR 4:4:4 36bpp, little-endian
464 return 36;
465 break;
466 case AV_PIX_FMT_GBRP14BE: ///< planar GBR 4:4:4 42bpp, big-endian
467 return 42;
468 break;
469 case AV_PIX_FMT_GBRP14LE: ///< planar GBR 4:4:4 42bpp, little-endian
470 return 42;
471 break;
472 case AV_PIX_FMT_YUVJ411P: ///< planar YUV 4:1:1, 12bpp, (1 Cr & Cb sample per 4x1 Y samples) full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV411P and setting color_range
473 return 12;
474 break;
475
476 case AV_PIX_FMT_BAYER_BGGR8: ///< bayer, BGBG..(odd line), GRGR..(even line), 8-bit samples */
477 return 8;
478 break;
479 case AV_PIX_FMT_BAYER_RGGB8: ///< bayer, RGRG..(odd line), GBGB..(even line), 8-bit samples */
480 return 8;
481 break;
482 case AV_PIX_FMT_BAYER_GBRG8: ///< bayer, GBGB..(odd line), RGRG..(even line), 8-bit samples */
483 return 8;
484 break;
485 case AV_PIX_FMT_BAYER_GRBG8: ///< bayer, GRGR..(odd line), BGBG..(even line), 8-bit samples */
486 return 8;
487 break;
488 case AV_PIX_FMT_BAYER_BGGR16LE: ///< bayer, BGBG..(odd line), GRGR..(even line), 16-bit samples, little-endian */
489 return 16;
490 break;
491 case AV_PIX_FMT_BAYER_BGGR16BE: ///< bayer, BGBG..(odd line), GRGR..(even line), 16-bit samples, big-endian */
492 return 16;
493 break;
494 case AV_PIX_FMT_BAYER_RGGB16LE: ///< bayer, RGRG..(odd line), GBGB..(even line), 16-bit samples, little-endian */
495 return 16;
496 break;
497 case AV_PIX_FMT_BAYER_RGGB16BE: ///< bayer, RGRG..(odd line), GBGB..(even line), 16-bit samples, big-endian */
498 return 16;
499 break;
500 case AV_PIX_FMT_BAYER_GBRG16LE: ///< bayer, GBGB..(odd line), RGRG..(even line), 16-bit samples, little-endian */
501 return 16;
502 break;
503 case AV_PIX_FMT_BAYER_GBRG16BE: ///< bayer, GBGB..(odd line), RGRG..(even line), 16-bit samples, big-endian */
504 return 16;
505 break;
506 case AV_PIX_FMT_BAYER_GRBG16LE: ///< bayer, GRGR..(odd line), BGBG..(even line), 16-bit samples, little-endian */
507 return 16;
508 break;
509 case AV_PIX_FMT_BAYER_GRBG16BE: ///< bayer, GRGR..(odd line), BGBG..(even line), 16-bit samples, big-endian */
510 return 16;
511 break;
512 case AV_PIX_FMT_YUV440P10LE: ///< planar YUV 4:4:0,20bpp, (1 Cr & Cb sample per 1x2 Y samples), little-endian
513 return 20;
514 break;
515 case AV_PIX_FMT_YUV440P10BE: ///< planar YUV 4:4:0,20bpp, (1 Cr & Cb sample per 1x2 Y samples), big-endian
516 return 20;
517 break;
518 case AV_PIX_FMT_YUV440P12LE: ///< planar YUV 4:4:0,24bpp, (1 Cr & Cb sample per 1x2 Y samples), little-endian
519 return 24;
520 break;
521 case AV_PIX_FMT_YUV440P12BE: ///< planar YUV 4:4:0,24bpp, (1 Cr & Cb sample per 1x2 Y samples), big-endian
522 return 24;
523 break;
524 case AV_PIX_FMT_AYUV64LE: ///< packed AYUV 4:4:4,64bpp (1 Cr & Cb sample per 1x1 Y & A samples), little-endian
525 return 64;
526 break;
527 case AV_PIX_FMT_AYUV64BE: ///< packed AYUV 4:4:4,64bpp (1 Cr & Cb sample per 1x1 Y & A samples), big-endian
528 return 64;
529 break;
530
531 case AV_PIX_FMT_P010LE: ///< like NV12, with 10bpp per component, data in the high bits, zeros in the low bits, little-endian
532 return 10;
533 break;
534 case AV_PIX_FMT_P010BE: ///< like NV12, with 10bpp per component, data in the high bits, zeros in the low bits, big-endian
535 return 10;
536 break;
537
538 case AV_PIX_FMT_GBRAP12BE: ///< planar GBR 4:4:4:4 48bpp, big-endian
539 return 48;
540 break;
541 case AV_PIX_FMT_GBRAP12LE: ///< planar GBR 4:4:4:4 48bpp, little-endian
542 return 48;
543 break;
544
545 case AV_PIX_FMT_GBRAP10BE: ///< planar GBR 4:4:4:4 40bpp, big-endian
546 return 40;
547 break;
548 case AV_PIX_FMT_GBRAP10LE: ///< planar GBR 4:4:4:4 40bpp, little-endian
549 return 40;
550 break;
551
552 default:
553 return 0;
554 break;
555 } // switch
556 #endif
557 } // WriteFFmpegPlugin::pixelFormatBPP
558
559
560 // av_get_bits_per_sample knows about surprisingly few codecs.
561 // We have to do this manually.
562 /*static*/
563 int
pixelFormatBitDepth(const AVPixelFormat pixelFormat)564 pixelFormatBitDepth(const AVPixelFormat pixelFormat)
565 {
566 switch (pixelFormat) {
567 case AV_PIX_FMT_NONE:
568
569 return 0;
570 break;
571
572 case AV_PIX_FMT_YUV420P: ///< planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
573 return 8;
574 break;
575 case AV_PIX_FMT_YUYV422: ///< packed YUV 4:2:2, 16bpp, Y0 Cb Y1 Cr
576 return 8;
577 break;
578 case AV_PIX_FMT_RGB24: ///< packed RGB 8:8:8, 24bpp, RGBRGB...
579 return 8;
580 break;
581 case AV_PIX_FMT_BGR24: ///< packed RGB 8:8:8, 24bpp, BGRBGR...
582 return 8;
583 break;
584 case AV_PIX_FMT_YUV422P: ///< planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples)
585 return 8;
586 break;
587 case AV_PIX_FMT_YUV444P: ///< planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples)
588 return 8;
589 break;
590 case AV_PIX_FMT_YUV410P: ///< planar YUV 4:1:0, 9bpp, (1 Cr & Cb sample per 4x4 Y samples)
591 return 8;
592 break;
593 case AV_PIX_FMT_YUV411P: ///< planar YUV 4:1:1, 12bpp, (1 Cr & Cb sample per 4x1 Y samples)
594 return 8;
595 break;
596 case AV_PIX_FMT_GRAY8: ///< Y , 8bpp
597 return 8;
598 break;
599 case AV_PIX_FMT_MONOWHITE: ///< Y , 1bpp, 0 is white, 1 is black, in each byte pixels are ordered from the msb to the lsb
600 return 1;
601 break;
602 case AV_PIX_FMT_MONOBLACK: ///< Y , 1bpp, 0 is black, 1 is white, in each byte pixels are ordered from the msb to the lsb
603 return 1;
604 break;
605 case AV_PIX_FMT_PAL8: ///< 8 bits with AV_PIX_FMT_RGB32 palette
606 return 8;
607 break;
608 case AV_PIX_FMT_YUVJ420P: ///< planar YUV 4:2:0, 12bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV420P and setting color_range
609 return 8;
610 break;
611 case AV_PIX_FMT_YUVJ422P: ///< planar YUV 4:2:2, 16bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV422P and setting color_range
612 return 8;
613 break;
614 case AV_PIX_FMT_YUVJ444P: ///< planar YUV 4:4:4, 24bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV444P and setting color_range
615 return 8;
616 break;
617 case AV_PIX_FMT_UYVY422: ///< packed YUV 4:2:2, 16bpp, Cb Y0 Cr Y1
618 return 8;
619 break;
620 case AV_PIX_FMT_UYYVYY411: ///< packed YUV 4:1:1, 12bpp, Cb Y0 Y1 Cr Y2 Y3
621 return 8;
622 break;
623 case AV_PIX_FMT_BGR8: ///< packed RGB 3:3:2, 8bpp, (msb)2B 3G 3R(lsb)
624 return 2;
625 break;
626 case AV_PIX_FMT_BGR4: ///< packed RGB 1:2:1 bitstream, 4bpp, (msb)1B 2G 1R(lsb), a byte contains two pixels, the first pixel in the byte is the one composed by the 4 msb bits
627 return 1;
628 break;
629 case AV_PIX_FMT_BGR4_BYTE: ///< packed RGB 1:2:1, 8bpp, (msb)1B 2G 1R(lsb)
630 return 1;
631 break;
632 case AV_PIX_FMT_RGB8: ///< packed RGB 3:3:2, 8bpp, (msb)2R 3G 3B(lsb)
633 return 2;
634 break;
635 case AV_PIX_FMT_RGB4: ///< packed RGB 1:2:1 bitstream, 4bpp, (msb)1R 2G 1B(lsb), a byte contains two pixels, the first pixel in the byte is the one composed by the 4 msb bits
636 return 1;
637 break;
638 case AV_PIX_FMT_RGB4_BYTE: ///< packed RGB 1:2:1, 8bpp, (msb)1R 2G 1B(lsb)
639 return 1;
640 break;
641 case AV_PIX_FMT_NV12: ///< planar YUV 4:2:0, 12bpp, 1 plane for Y and 1 plane for the UV components, which are interleaved (first byte U and the following byte V)
642 return 8;
643 break;
644 case AV_PIX_FMT_NV21: ///< as above, but U and V bytes are swapped
645 return 8;
646 break;
647
648 case AV_PIX_FMT_ARGB: ///< packed ARGB 8:8:8:8, 32bpp, ARGBARGB...
649 return 8;
650 break;
651 case AV_PIX_FMT_RGBA: ///< packed RGBA 8:8:8:8, 32bpp, RGBARGBA...
652 return 8;
653 break;
654 case AV_PIX_FMT_ABGR: ///< packed ABGR 8:8:8:8, 32bpp, ABGRABGR...
655 return 8;
656 break;
657 case AV_PIX_FMT_BGRA: ///< packed BGRA 8:8:8:8, 32bpp, BGRABGRA...
658 return 8;
659 break;
660
661 case AV_PIX_FMT_GRAY16BE: ///< Y , 16bpp, big-endian
662 return 16;
663 break;
664 case AV_PIX_FMT_GRAY16LE: ///< Y , 16bpp, little-endian
665 return 16;
666 break;
667 case AV_PIX_FMT_YUV440P: ///< planar YUV 4:4:0 (1 Cr & Cb sample per 1x2 Y samples)
668 return 8;
669 break;
670 case AV_PIX_FMT_YUVJ440P: ///< planar YUV 4:4:0 full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV440P and setting color_range
671 return 8;
672 break;
673 case AV_PIX_FMT_YUVA420P: ///< planar YUV 4:2:0, 20bpp, (1 Cr & Cb sample per 2x2 Y & A samples)
674 return 8;
675 break;
676 case AV_PIX_FMT_RGB48BE: ///< packed RGB 16:16:16, 48bpp, 16R, 16G, 16B, the 2-byte value for each R/G/B component is stored as big-endian
677 return 16;
678 break;
679 case AV_PIX_FMT_RGB48LE: ///< packed RGB 16:16:16, 48bpp, 16R, 16G, 16B, the 2-byte value for each R/G/B component is stored as little-endian
680 return 16;
681 break;
682
683 case AV_PIX_FMT_RGB565BE: ///< packed RGB 5:6:5, 16bpp, (msb) 5R 6G 5B(lsb), big-endian
684 return 5;
685 break;
686 case AV_PIX_FMT_RGB565LE: ///< packed RGB 5:6:5, 16bpp, (msb) 5R 6G 5B(lsb), little-endian
687 return 5;
688 break;
689 case AV_PIX_FMT_RGB555BE: ///< packed RGB 5:5:5, 16bpp, (msb)1X 5R 5G 5B(lsb), big-endian , X=unused/undefined
690 return 5;
691 break;
692 case AV_PIX_FMT_RGB555LE: ///< packed RGB 5:5:5, 16bpp, (msb)1X 5R 5G 5B(lsb), little-endian, X=unused/undefined
693 return 5;
694 break;
695
696 case AV_PIX_FMT_BGR565BE: ///< packed BGR 5:6:5, 16bpp, (msb) 5B 6G 5R(lsb), big-endian
697 return 5;
698 break;
699 case AV_PIX_FMT_BGR565LE: ///< packed BGR 5:6:5, 16bpp, (msb) 5B 6G 5R(lsb), little-endian
700 return 5;
701 break;
702 case AV_PIX_FMT_BGR555BE: ///< packed BGR 5:5:5, 16bpp, (msb)1X 5B 5G 5R(lsb), big-endian , X=unused/undefined
703 return 5;
704 break;
705 case AV_PIX_FMT_BGR555LE: ///< packed BGR 5:5:5, 16bpp, (msb)1X 5B 5G 5R(lsb), little-endian, X=unused/undefined
706 return 5;
707 break;
708
709 case AV_PIX_FMT_YUV420P16LE: ///< planar YUV 4:2:0, 24bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian
710 return 16;
711 break;
712 case AV_PIX_FMT_YUV420P16BE: ///< planar YUV 4:2:0, 24bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian
713 return 16;
714 break;
715 case AV_PIX_FMT_YUV422P16LE: ///< planar YUV 4:2:2, 32bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian
716 return 16;
717 break;
718 case AV_PIX_FMT_YUV422P16BE: ///< planar YUV 4:2:2, 32bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian
719 return 16;
720 break;
721 case AV_PIX_FMT_YUV444P16LE: ///< planar YUV 4:4:4, 48bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian
722 return 16;
723 break;
724 case AV_PIX_FMT_YUV444P16BE: ///< planar YUV 4:4:4, 48bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian
725 return 16;
726 break;
727
728 case AV_PIX_FMT_RGB444LE: ///< packed RGB 4:4:4, 16bpp, (msb)4X 4R 4G 4B(lsb), little-endian, X=unused/undefined
729 return 4;
730 break;
731 case AV_PIX_FMT_RGB444BE: ///< packed RGB 4:4:4, 16bpp, (msb)4X 4R 4G 4B(lsb), big-endian, X=unused/undefined
732 return 4;
733 break;
734 case AV_PIX_FMT_BGR444LE: ///< packed BGR 4:4:4, 16bpp, (msb)4X 4B 4G 4R(lsb), little-endian, X=unused/undefined
735 return 4;
736 break;
737 case AV_PIX_FMT_BGR444BE: ///< packed BGR 4:4:4, 16bpp, (msb)4X 4B 4G 4R(lsb), big-endian, X=unused/undefined
738 return 4;
739 break;
740 case AV_PIX_FMT_YA8: ///< 8 bits gray, 8 bits alpha
741 return 8;
742 break;
743
744 case AV_PIX_FMT_BGR48BE: ///< packed RGB 16:16:16, 48bpp, 16B, 16G, 16R, the 2-byte value for each R/G/B component is stored as big-endian
745 return 16;
746 break;
747 case AV_PIX_FMT_BGR48LE: ///< packed RGB 16:16:16, 48bpp, 16B, 16G, 16R, the 2-byte value for each R/G/B component is stored as little-endian
748 return 16;
749 break;
750
751 /**
752 * The following 12 formats have the disadvantage of needing 1 format for each bit depth.
753 * Notice that each 9/10 bits sample is stored in 16 bits with extra padding.
754 * If you want to support multiple bit depths, then using AV_PIX_FMT_YUV420P16* with the bpp stored separately is better.
755 */
756 case AV_PIX_FMT_YUV420P9BE: ///< planar YUV 4:2:0, 13.5bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian
757 return 9;
758 break;
759 case AV_PIX_FMT_YUV420P9LE: ///< planar YUV 4:2:0, 13.5bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian
760 return 9;
761 break;
762 case AV_PIX_FMT_YUV420P10BE:///< planar YUV 4:2:0, 15bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian
763 return 10;
764 break;
765 case AV_PIX_FMT_YUV420P10LE:///< planar YUV 4:2:0, 15bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian
766 return 10;
767 break;
768 case AV_PIX_FMT_YUV422P10BE:///< planar YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian
769 return 10;
770 break;
771 case AV_PIX_FMT_YUV422P10LE:///< planar YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian
772 return 10;
773 break;
774 case AV_PIX_FMT_YUV444P9BE: ///< planar YUV 4:4:4, 27bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian
775 return 9;
776 break;
777 case AV_PIX_FMT_YUV444P9LE: ///< planar YUV 4:4:4, 27bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian
778 return 9;
779 break;
780 case AV_PIX_FMT_YUV444P10BE:///< planar YUV 4:4:4, 30bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian
781 return 10;
782 break;
783 case AV_PIX_FMT_YUV444P10LE:///< planar YUV 4:4:4, 30bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian
784 return 10;
785 break;
786 case AV_PIX_FMT_YUV422P9BE: ///< planar YUV 4:2:2, 18bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian
787 return 9;
788 break;
789 case AV_PIX_FMT_YUV422P9LE: ///< planar YUV 4:2:2, 18bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian
790 return 9;
791 break;
792 case AV_PIX_FMT_GBRP: ///< planar GBR 4:4:4 24bpp
793 return 8;
794 break;
795 case AV_PIX_FMT_GBRP9BE: ///< planar GBR 4:4:4 27bpp, big-endian
796 return 9;
797 break;
798 case AV_PIX_FMT_GBRP9LE: ///< planar GBR 4:4:4 27bpp, little-endian
799 return 9;
800 break;
801 case AV_PIX_FMT_GBRP10BE: ///< planar GBR 4:4:4 30bpp, big-endian
802 return 10;
803 break;
804 case AV_PIX_FMT_GBRP10LE: ///< planar GBR 4:4:4 30bpp, little-endian
805 return 10;
806 break;
807 case AV_PIX_FMT_GBRP16BE: ///< planar GBR 4:4:4 48bpp, big-endian
808 return 16;
809 break;
810 case AV_PIX_FMT_GBRP16LE: ///< planar GBR 4:4:4 48bpp, little-endian
811 return 16;
812 break;
813 case AV_PIX_FMT_YUVA422P: ///< planar YUV 4:2:2 24bpp, (1 Cr & Cb sample per 2x1 Y & A samples)
814 return 8;
815 break;
816 case AV_PIX_FMT_YUVA444P: ///< planar YUV 4:4:4 32bpp, (1 Cr & Cb sample per 1x1 Y & A samples)
817 return 8;
818 break;
819 case AV_PIX_FMT_YUVA420P9BE: ///< planar YUV 4:2:0 22.5bpp, (1 Cr & Cb sample per 2x2 Y & A samples), big-endian
820 return 9;
821 break;
822 case AV_PIX_FMT_YUVA420P9LE: ///< planar YUV 4:2:0 22.5bpp, (1 Cr & Cb sample per 2x2 Y & A samples), little-endian
823 return 9;
824 break;
825 case AV_PIX_FMT_YUVA422P9BE: ///< planar YUV 4:2:2 27bpp, (1 Cr & Cb sample per 2x1 Y & A samples), big-endian
826 return 9;
827 break;
828 case AV_PIX_FMT_YUVA422P9LE: ///< planar YUV 4:2:2 27bpp, (1 Cr & Cb sample per 2x1 Y & A samples), little-endian
829 return 9;
830 break;
831 case AV_PIX_FMT_YUVA444P9BE: ///< planar YUV 4:4:4 36bpp, (1 Cr & Cb sample per 1x1 Y & A samples), big-endian
832 return 9;
833 break;
834 case AV_PIX_FMT_YUVA444P9LE: ///< planar YUV 4:4:4 36bpp, (1 Cr & Cb sample per 1x1 Y & A samples), little-endian
835 return 9;
836 break;
837 case AV_PIX_FMT_YUVA420P10BE: ///< planar YUV 4:2:0 25bpp, (1 Cr & Cb sample per 2x2 Y & A samples, big-endian)
838 return 10;
839 break;
840 case AV_PIX_FMT_YUVA420P10LE: ///< planar YUV 4:2:0 25bpp, (1 Cr & Cb sample per 2x2 Y & A samples, little-endian)
841 return 10;
842 break;
843 case AV_PIX_FMT_YUVA422P10BE: ///< planar YUV 4:2:2 30bpp, (1 Cr & Cb sample per 2x1 Y & A samples, big-endian)
844 return 10;
845 break;
846 case AV_PIX_FMT_YUVA422P10LE: ///< planar YUV 4:2:2 30bpp, (1 Cr & Cb sample per 2x1 Y & A samples, little-endian)
847 return 10;
848 break;
849 case AV_PIX_FMT_YUVA444P10BE: ///< planar YUV 4:4:4 40bpp, (1 Cr & Cb sample per 1x1 Y & A samples, big-endian)
850 return 10;
851 break;
852 case AV_PIX_FMT_YUVA444P10LE: ///< planar YUV 4:4:4 40bpp, (1 Cr & Cb sample per 1x1 Y & A samples, little-endian)
853 return 10;
854 break;
855 case AV_PIX_FMT_YUVA420P16BE: ///< planar YUV 4:2:0 40bpp, (1 Cr & Cb sample per 2x2 Y & A samples, big-endian)
856 return 16;
857 break;
858 case AV_PIX_FMT_YUVA420P16LE: ///< planar YUV 4:2:0 40bpp, (1 Cr & Cb sample per 2x2 Y & A samples, little-endian)
859 return 16;
860 break;
861 case AV_PIX_FMT_YUVA422P16BE: ///< planar YUV 4:2:2 48bpp, (1 Cr & Cb sample per 2x1 Y & A samples, big-endian)
862 return 16;
863 break;
864 case AV_PIX_FMT_YUVA422P16LE: ///< planar YUV 4:2:2 48bpp, (1 Cr & Cb sample per 2x1 Y & A samples, little-endian)
865 return 16;
866 break;
867 case AV_PIX_FMT_YUVA444P16BE: ///< planar YUV 4:4:4 64bpp, (1 Cr & Cb sample per 1x1 Y & A samples, big-endian)
868 return 16;
869 break;
870 case AV_PIX_FMT_YUVA444P16LE: ///< planar YUV 4:4:4 64bpp, (1 Cr & Cb sample per 1x1 Y & A samples, little-endian)
871 return 16;
872 break;
873
874 case AV_PIX_FMT_XYZ12LE: ///< packed XYZ 4:4:4, 36 bpp, (msb) 12X, 12Y, 12Z (lsb), the 2-byte value for each X/Y/Z is stored as little-endian, the 4 lower bits are set to 0
875 return 12;
876 break;
877 case AV_PIX_FMT_XYZ12BE: ///< packed XYZ 4:4:4, 36 bpp, (msb) 12X, 12Y, 12Z (lsb), the 2-byte value for each X/Y/Z is stored as big-endian, the 4 lower bits are set to 0
878 return 12;
879 break;
880 case AV_PIX_FMT_NV16: ///< interleaved chroma YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples)
881 return 8;
882 break;
883 case AV_PIX_FMT_NV20LE: ///< interleaved chroma YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian
884 return 10;
885 break;
886 case AV_PIX_FMT_NV20BE: ///< interleaved chroma YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian
887 return 10;
888 break;
889
890 case AV_PIX_FMT_RGBA64BE: ///< packed RGBA 16:16:16:16, 64bpp, 16R, 16G, 16B, 16A, the 2-byte value for each R/G/B/A component is stored as big-endian
891 return 16;
892 break;
893 case AV_PIX_FMT_RGBA64LE: ///< packed RGBA 16:16:16:16, 64bpp, 16R, 16G, 16B, 16A, the 2-byte value for each R/G/B/A component is stored as little-endian
894 return 16;
895 break;
896 case AV_PIX_FMT_BGRA64BE: ///< packed RGBA 16:16:16:16, 64bpp, 16B, 16G, 16R, 16A, the 2-byte value for each R/G/B/A component is stored as big-endian
897 return 16;
898 break;
899 case AV_PIX_FMT_BGRA64LE: ///< packed RGBA 16:16:16:16, 64bpp, 16B, 16G, 16R, 16A, the 2-byte value for each R/G/B/A component is stored as little-endian
900 return 16;
901 break;
902
903 case AV_PIX_FMT_YVYU422: ///< packed YUV 4:2:2, 16bpp, Y0 Cr Y1 Cb
904 return 8;
905 break;
906
907 case AV_PIX_FMT_YA16BE: ///< 16 bits gray, 16 bits alpha (big-endian)
908 return 16;
909 break;
910 case AV_PIX_FMT_YA16LE: ///< 16 bits gray, 16 bits alpha (little-endian)
911 return 16;
912 break;
913
914 case AV_PIX_FMT_GBRAP: ///< planar GBRA 4:4:4:4 32bpp
915 return 8;
916 break;
917 case AV_PIX_FMT_GBRAP16BE: ///< planar GBRA 4:4:4:4 64bpp, big-endian
918 return 16;
919 break;
920 case AV_PIX_FMT_GBRAP16LE: ///< planar GBRA 4:4:4:4 64bpp, little-endian
921 return 16;
922 break;
923
924 case AV_PIX_FMT_0RGB:///< packed RGB 8:8:8, 32bpp, XRGBXRGB... X=unused/undefined
925 return 8;
926 break;
927 case AV_PIX_FMT_RGB0: ///< packed RGB 8:8:8, 32bpp, RGBXRGBX... X=unused/undefined
928 return 8;
929 break;
930 case AV_PIX_FMT_0BGR: ///< packed BGR 8:8:8, 32bpp, XBGRXBGR... X=unused/undefined
931 return 8;
932 break;
933 case AV_PIX_FMT_BGR0: ///< packed BGR 8:8:8, 32bpp, BGRXBGRX... X=unused/undefined
934 return 8;
935 break;
936
937 case AV_PIX_FMT_YUV420P12BE: ///< planar YUV 4:2:0,18bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian
938 return 12;
939 break;
940 case AV_PIX_FMT_YUV420P12LE: ///< planar YUV 4:2:0,18bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian
941 return 12;
942 break;
943 case AV_PIX_FMT_YUV420P14BE: ///< planar YUV 4:2:0,21bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian
944 return 14;
945 break;
946 case AV_PIX_FMT_YUV420P14LE: ///< planar YUV 4:2:0,21bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian
947 return 14;
948 break;
949 case AV_PIX_FMT_YUV422P12BE: ///< planar YUV 4:2:2,24bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian
950 return 12;
951 break;
952 case AV_PIX_FMT_YUV422P12LE: ///< planar YUV 4:2:2,24bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian
953 return 12;
954 break;
955 case AV_PIX_FMT_YUV422P14BE: ///< planar YUV 4:2:2,28bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian
956 return 14;
957 break;
958 case AV_PIX_FMT_YUV422P14LE: ///< planar YUV 4:2:2,28bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian
959 return 14;
960 break;
961 case AV_PIX_FMT_YUV444P12BE: ///< planar YUV 4:4:4,36bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian
962 return 12;
963 break;
964 case AV_PIX_FMT_YUV444P12LE: ///< planar YUV 4:4:4,36bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian
965 return 12;
966 break;
967 case AV_PIX_FMT_YUV444P14BE: ///< planar YUV 4:4:4,42bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian
968 return 14;
969 break;
970 case AV_PIX_FMT_YUV444P14LE: ///< planar YUV 4:4:4,42bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian
971 return 14;
972 break;
973 case AV_PIX_FMT_GBRP12BE: ///< planar GBR 4:4:4 36bpp, big-endian
974 return 12;
975 break;
976 case AV_PIX_FMT_GBRP12LE: ///< planar GBR 4:4:4 36bpp, little-endian
977 return 12;
978 break;
979 case AV_PIX_FMT_GBRP14BE: ///< planar GBR 4:4:4 42bpp, big-endian
980 return 14;
981 break;
982 case AV_PIX_FMT_GBRP14LE: ///< planar GBR 4:4:4 42bpp, little-endian
983 return 14;
984 break;
985 case AV_PIX_FMT_YUVJ411P: ///< planar YUV 4:1:1, 12bpp, (1 Cr & Cb sample per 4x1 Y samples) full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV411P and setting color_range
986 return 8;
987 break;
988
989 case AV_PIX_FMT_BAYER_BGGR8: ///< bayer, BGBG..(odd line), GRGR..(even line), 8-bit samples */
990 return 8;
991 break;
992 case AV_PIX_FMT_BAYER_RGGB8: ///< bayer, RGRG..(odd line), GBGB..(even line), 8-bit samples */
993 return 8;
994 break;
995 case AV_PIX_FMT_BAYER_GBRG8: ///< bayer, GBGB..(odd line), RGRG..(even line), 8-bit samples */
996 return 8;
997 break;
998 case AV_PIX_FMT_BAYER_GRBG8: ///< bayer, GRGR..(odd line), BGBG..(even line), 8-bit samples */
999 return 8;
1000 break;
1001 case AV_PIX_FMT_BAYER_BGGR16LE: ///< bayer, BGBG..(odd line), GRGR..(even line), 16-bit samples, little-endian */
1002 return 16;
1003 break;
1004 case AV_PIX_FMT_BAYER_BGGR16BE: ///< bayer, BGBG..(odd line), GRGR..(even line), 16-bit samples, big-endian */
1005 return 16;
1006 break;
1007 case AV_PIX_FMT_BAYER_RGGB16LE: ///< bayer, RGRG..(odd line), GBGB..(even line), 16-bit samples, little-endian */
1008 return 16;
1009 break;
1010 case AV_PIX_FMT_BAYER_RGGB16BE: ///< bayer, RGRG..(odd line), GBGB..(even line), 16-bit samples, big-endian */
1011 return 16;
1012 break;
1013 case AV_PIX_FMT_BAYER_GBRG16LE: ///< bayer, GBGB..(odd line), RGRG..(even line), 16-bit samples, little-endian */
1014 return 16;
1015 break;
1016 case AV_PIX_FMT_BAYER_GBRG16BE: ///< bayer, GBGB..(odd line), RGRG..(even line), 16-bit samples, big-endian */
1017 return 16;
1018 break;
1019 case AV_PIX_FMT_BAYER_GRBG16LE: ///< bayer, GRGR..(odd line), BGBG..(even line), 16-bit samples, little-endian */
1020 return 16;
1021 break;
1022 case AV_PIX_FMT_BAYER_GRBG16BE: ///< bayer, GRGR..(odd line), BGBG..(even line), 16-bit samples, big-endian */
1023 return 16;
1024 break;
1025 case AV_PIX_FMT_YUV440P10LE: ///< planar YUV 4:4:0,20bpp, (1 Cr & Cb sample per 1x2 Y samples), little-endian
1026 return 10;
1027 break;
1028 case AV_PIX_FMT_YUV440P10BE: ///< planar YUV 4:4:0,20bpp, (1 Cr & Cb sample per 1x2 Y samples), big-endian
1029 return 10;
1030 break;
1031 case AV_PIX_FMT_YUV440P12LE: ///< planar YUV 4:4:0,24bpp, (1 Cr & Cb sample per 1x2 Y samples), little-endian
1032 return 12;
1033 break;
1034 case AV_PIX_FMT_YUV440P12BE: ///< planar YUV 4:4:0,24bpp, (1 Cr & Cb sample per 1x2 Y samples), big-endian
1035 return 12;
1036 break;
1037 case AV_PIX_FMT_AYUV64LE: ///< packed AYUV 4:4:4,64bpp (1 Cr & Cb sample per 1x1 Y & A samples), little-endian
1038 return 16;
1039 break;
1040 case AV_PIX_FMT_AYUV64BE: ///< packed AYUV 4:4:4,64bpp (1 Cr & Cb sample per 1x1 Y & A samples), big-endian
1041 return 16;
1042 break;
1043
1044 case AV_PIX_FMT_P010LE: ///< like NV12, with 10bpp per component, data in the high bits, zeros in the low bits, little-endian
1045 return 10;
1046 break;
1047 case AV_PIX_FMT_P010BE: ///< like NV12, with 10bpp per component, data in the high bits, zeros in the low bits, big-endian
1048 return 10;
1049 break;
1050
1051 case AV_PIX_FMT_GBRAP12BE: ///< planar GBR 4:4:4:4 48bpp, big-endian
1052 return 12;
1053 break;
1054 case AV_PIX_FMT_GBRAP12LE: ///< planar GBR 4:4:4:4 48bpp, little-endian
1055 return 12;
1056 break;
1057
1058 case AV_PIX_FMT_GBRAP10BE: ///< planar GBR 4:4:4:4 40bpp, big-endian
1059 return 10;
1060 break;
1061 case AV_PIX_FMT_GBRAP10LE: ///< planar GBR 4:4:4:4 40bpp, little-endian
1062 return 10;
1063 break;
1064
1065 default:
1066 #if OFX_FFMPEG_PRINT_CODECS
1067 std::cout << "** Format " << av_get_pix_fmt_name(pixelFormat) << "not handled" << std::endl;
1068 #endif
1069
1070 return 0;
1071 } // switch
1072
1073 } // WriteFFmpegPlugin::pixelFormatBitDepth
1074
1075
1076
1077 PixelCodingEnum
pixelFormatCoding(const AVPixelFormat pixelFormat)1078 pixelFormatCoding(const AVPixelFormat pixelFormat)
1079 {
1080 switch (pixelFormat) {
1081 case AV_PIX_FMT_NONE:
1082
1083 return ePixelCodingNone;
1084 break;
1085
1086 case AV_PIX_FMT_YUV420P: ///< planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
1087 return ePixelCodingYUV420;
1088 break;
1089 case AV_PIX_FMT_YUYV422: ///< packed YUV 4:2:2, 16bpp, Y0 Cb Y1 Cr
1090 return ePixelCodingYUV422;
1091 break;
1092 case AV_PIX_FMT_RGB24: ///< packed RGB 8:8:8, 24bpp, RGBRGB...
1093 return ePixelCodingRGB;
1094 break;
1095 case AV_PIX_FMT_BGR24: ///< packed RGB 8:8:8, 24bpp, BGRBGR...
1096 return ePixelCodingRGB;
1097 break;
1098 case AV_PIX_FMT_YUV422P: ///< planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples)
1099 return ePixelCodingYUV422;
1100 break;
1101 case AV_PIX_FMT_YUV444P: ///< planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples)
1102 return ePixelCodingYUV444;
1103 break;
1104 case AV_PIX_FMT_YUV410P: ///< planar YUV 4:1:0, 9bpp, (1 Cr & Cb sample per 4x4 Y samples)
1105 return ePixelCodingYUV410;
1106 break;
1107 case AV_PIX_FMT_YUV411P: ///< planar YUV 4:1:1, 12bpp, (1 Cr & Cb sample per 4x1 Y samples)
1108 return ePixelCodingYUV411;
1109 break;
1110 case AV_PIX_FMT_GRAY8: ///< Y , 8bpp
1111 return ePixelCodingGray;
1112 break;
1113 case AV_PIX_FMT_MONOWHITE: ///< Y , 1bpp, 0 is white, 1 is black, in each byte pixels are ordered from the msb to the lsb
1114 return ePixelCodingGray;
1115 break;
1116 case AV_PIX_FMT_MONOBLACK: ///< Y , 1bpp, 0 is black, 1 is white, in each byte pixels are ordered from the msb to the lsb
1117 return ePixelCodingGray;
1118 break;
1119 case AV_PIX_FMT_PAL8: ///< 8 bits with AV_PIX_FMT_RGB32 palette
1120 return ePixelCodingPalette;
1121 break;
1122 case AV_PIX_FMT_YUVJ420P: ///< planar YUV 4:2:0, 12bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV420P and setting color_range
1123 return ePixelCodingYUV420;
1124 break;
1125 case AV_PIX_FMT_YUVJ422P: ///< planar YUV 4:2:2, 16bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV422P and setting color_range
1126 return ePixelCodingYUV422;
1127 break;
1128 case AV_PIX_FMT_YUVJ444P: ///< planar YUV 4:4:4, 24bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV444P and setting color_range
1129 return ePixelCodingYUV444;
1130 break;
1131 case AV_PIX_FMT_UYVY422: ///< packed YUV 4:2:2, 16bpp, Cb Y0 Cr Y1
1132 return ePixelCodingYUV422;
1133 break;
1134 case AV_PIX_FMT_UYYVYY411: ///< packed YUV 4:1:1, 12bpp, Cb Y0 Y1 Cr Y2 Y3
1135 return ePixelCodingYUV411;
1136 break;
1137 case AV_PIX_FMT_BGR8: ///< packed RGB 3:3:2, 8bpp, (msb)2B 3G 3R(lsb)
1138 return ePixelCodingRGB;
1139 break;
1140 case AV_PIX_FMT_BGR4: ///< packed RGB 1:2:1 bitstream, 4bpp, (msb)1B 2G 1R(lsb), a byte contains two pixels, the first pixel in the byte is the one composed by the 4 msb bits
1141 return ePixelCodingRGB;
1142 break;
1143 case AV_PIX_FMT_BGR4_BYTE: ///< packed RGB 1:2:1, 8bpp, (msb)1B 2G 1R(lsb)
1144 return ePixelCodingRGB;
1145 break;
1146 case AV_PIX_FMT_RGB8: ///< packed RGB 3:3:2, 8bpp, (msb)2R 3G 3B(lsb)
1147 return ePixelCodingRGB;
1148 break;
1149 case AV_PIX_FMT_RGB4: ///< packed RGB 1:2:1 bitstream, 4bpp, (msb)1R 2G 1B(lsb), a byte contains two pixels, the first pixel in the byte is the one composed by the 4 msb bits
1150 return ePixelCodingRGB;
1151 break;
1152 case AV_PIX_FMT_RGB4_BYTE: ///< packed RGB 1:2:1, 8bpp, (msb)1R 2G 1B(lsb)
1153 return ePixelCodingRGB;
1154 break;
1155 case AV_PIX_FMT_NV12: ///< planar YUV 4:2:0, 12bpp, 1 plane for Y and 1 plane for the UV components, which are interleaved (first byte U and the following byte V)
1156 return ePixelCodingYUV420;
1157 break;
1158 case AV_PIX_FMT_NV21: ///< as above, but U and V bytes are swapped
1159 return ePixelCodingYUV420;
1160 break;
1161
1162 case AV_PIX_FMT_ARGB: ///< packed ARGB 8:8:8:8, 32bpp, ARGBARGB...
1163 return ePixelCodingRGB;
1164 break;
1165 case AV_PIX_FMT_RGBA: ///< packed RGBA 8:8:8:8, 32bpp, RGBARGBA...
1166 return ePixelCodingRGB;
1167 break;
1168 case AV_PIX_FMT_ABGR: ///< packed ABGR 8:8:8:8, 32bpp, ABGRABGR...
1169 return ePixelCodingRGB;
1170 break;
1171 case AV_PIX_FMT_BGRA: ///< packed BGRA 8:8:8:8, 32bpp, BGRABGRA...
1172 return ePixelCodingRGB;
1173 break;
1174
1175 case AV_PIX_FMT_GRAY16BE: ///< Y , 16bpp, big-endian
1176 return ePixelCodingGray;
1177 break;
1178 case AV_PIX_FMT_GRAY16LE: ///< Y , 16bpp, little-endian
1179 return ePixelCodingGray;
1180 break;
1181 case AV_PIX_FMT_YUV440P: ///< planar YUV 4:4:0 (1 Cr & Cb sample per 1x2 Y samples)
1182 return ePixelCodingYUV440;
1183 break;
1184 case AV_PIX_FMT_YUVJ440P: ///< planar YUV 4:4:0 full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV440P and setting color_range
1185 return ePixelCodingYUV440;
1186 break;
1187 case AV_PIX_FMT_YUVA420P: ///< planar YUV 4:2:0, 20bpp, (1 Cr & Cb sample per 2x2 Y & A samples)
1188 return ePixelCodingYUV420;
1189 break;
1190 case AV_PIX_FMT_RGB48BE: ///< packed RGB 16:16:16, 48bpp, 16R, 16G, 16B, the 2-byte value for each R/G/B component is stored as big-endian
1191 return ePixelCodingRGB;
1192 break;
1193 case AV_PIX_FMT_RGB48LE: ///< packed RGB 16:16:16, 48bpp, 16R, 16G, 16B, the 2-byte value for each R/G/B component is stored as little-endian
1194 return ePixelCodingRGB;
1195 break;
1196
1197 case AV_PIX_FMT_RGB565BE: ///< packed RGB 5:6:5, 16bpp, (msb) 5R 6G 5B(lsb), big-endian
1198 return ePixelCodingRGB;
1199 break;
1200 case AV_PIX_FMT_RGB565LE: ///< packed RGB 5:6:5, 16bpp, (msb) 5R 6G 5B(lsb), little-endian
1201 return ePixelCodingRGB;
1202 break;
1203 case AV_PIX_FMT_RGB555BE: ///< packed RGB 5:5:5, 16bpp, (msb)1X 5R 5G 5B(lsb), big-endian , X=unused/undefined
1204 return ePixelCodingRGB;
1205 break;
1206 case AV_PIX_FMT_RGB555LE: ///< packed RGB 5:5:5, 16bpp, (msb)1X 5R 5G 5B(lsb), little-endian, X=unused/undefined
1207 return ePixelCodingRGB;
1208 break;
1209
1210 case AV_PIX_FMT_BGR565BE: ///< packed BGR 5:6:5, 16bpp, (msb) 5B 6G 5R(lsb), big-endian
1211 return ePixelCodingRGB;
1212 break;
1213 case AV_PIX_FMT_BGR565LE: ///< packed BGR 5:6:5, 16bpp, (msb) 5B 6G 5R(lsb), little-endian
1214 return ePixelCodingRGB;
1215 break;
1216 case AV_PIX_FMT_BGR555BE: ///< packed BGR 5:5:5, 16bpp, (msb)1X 5B 5G 5R(lsb), big-endian , X=unused/undefined
1217 return ePixelCodingRGB;
1218 break;
1219 case AV_PIX_FMT_BGR555LE: ///< packed BGR 5:5:5, 16bpp, (msb)1X 5B 5G 5R(lsb), little-endian, X=unused/undefined
1220 return ePixelCodingRGB;
1221 break;
1222
1223 case AV_PIX_FMT_YUV420P16LE: ///< planar YUV 4:2:0, 24bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian
1224 return ePixelCodingYUV420;
1225 break;
1226 case AV_PIX_FMT_YUV420P16BE: ///< planar YUV 4:2:0, 24bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian
1227 return ePixelCodingYUV420;
1228 break;
1229 case AV_PIX_FMT_YUV422P16LE: ///< planar YUV 4:2:2, 32bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian
1230 return ePixelCodingYUV422;
1231 break;
1232 case AV_PIX_FMT_YUV422P16BE: ///< planar YUV 4:2:2, 32bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian
1233 return ePixelCodingYUV422;
1234 break;
1235 case AV_PIX_FMT_YUV444P16LE: ///< planar YUV 4:4:4, 48bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian
1236 return ePixelCodingYUV444;
1237 break;
1238 case AV_PIX_FMT_YUV444P16BE: ///< planar YUV 4:4:4, 48bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian
1239 return ePixelCodingYUV444;
1240 break;
1241
1242 case AV_PIX_FMT_RGB444LE: ///< packed RGB 4:4:4, 16bpp, (msb)4X 4R 4G 4B(lsb), little-endian, X=unused/undefined
1243 return ePixelCodingRGB;
1244 break;
1245 case AV_PIX_FMT_RGB444BE: ///< packed RGB 4:4:4, 16bpp, (msb)4X 4R 4G 4B(lsb), big-endian, X=unused/undefined
1246 return ePixelCodingRGB;
1247 break;
1248 case AV_PIX_FMT_BGR444LE: ///< packed BGR 4:4:4, 16bpp, (msb)4X 4B 4G 4R(lsb), little-endian, X=unused/undefined
1249 return ePixelCodingRGB;
1250 break;
1251 case AV_PIX_FMT_BGR444BE: ///< packed BGR 4:4:4, 16bpp, (msb)4X 4B 4G 4R(lsb), big-endian, X=unused/undefined
1252 return ePixelCodingRGB;
1253 break;
1254 case AV_PIX_FMT_YA8: ///< 8 bits gray, 8 bits alpha
1255 return ePixelCodingGray;
1256 break;
1257
1258 case AV_PIX_FMT_BGR48BE: ///< packed RGB 16:16:16, 48bpp, 16B, 16G, 16R, the 2-byte value for each R/G/B component is stored as big-endian
1259 return ePixelCodingRGB;
1260 break;
1261 case AV_PIX_FMT_BGR48LE: ///< packed RGB 16:16:16, 48bpp, 16B, 16G, 16R, the 2-byte value for each R/G/B component is stored as little-endian
1262 return ePixelCodingRGB;
1263 break;
1264
1265 /**
1266 * The following 12 formats have the disadvantage of needing 1 format for each bit depth.
1267 * Notice that each 9/10 bits sample is stored in 16 bits with extra padding.
1268 * If you want to support multiple bit depths, then using AV_PIX_FMT_YUV420P16* with the bpp stored separately is better.
1269 */
1270 case AV_PIX_FMT_YUV420P9BE: ///< planar YUV 4:2:0, 13.5bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian
1271 return ePixelCodingYUV420;
1272 break;
1273 case AV_PIX_FMT_YUV420P9LE: ///< planar YUV 4:2:0, 13.5bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian
1274 return ePixelCodingYUV420;
1275 break;
1276 case AV_PIX_FMT_YUV420P10BE:///< planar YUV 4:2:0, 15bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian
1277 return ePixelCodingYUV420;
1278 break;
1279 case AV_PIX_FMT_YUV420P10LE:///< planar YUV 4:2:0, 15bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian
1280 return ePixelCodingYUV420;
1281 break;
1282 case AV_PIX_FMT_YUV422P10BE:///< planar YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian
1283 return ePixelCodingYUV422;
1284 break;
1285 case AV_PIX_FMT_YUV422P10LE:///< planar YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian
1286 return ePixelCodingYUV422;
1287 break;
1288 case AV_PIX_FMT_YUV444P9BE: ///< planar YUV 4:4:4, 27bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian
1289 return ePixelCodingYUV444;
1290 break;
1291 case AV_PIX_FMT_YUV444P9LE: ///< planar YUV 4:4:4, 27bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian
1292 return ePixelCodingYUV444;
1293 break;
1294 case AV_PIX_FMT_YUV444P10BE:///< planar YUV 4:4:4, 30bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian
1295 return ePixelCodingYUV444;
1296 break;
1297 case AV_PIX_FMT_YUV444P10LE:///< planar YUV 4:4:4, 30bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian
1298 return ePixelCodingYUV444;
1299 break;
1300 case AV_PIX_FMT_YUV422P9BE: ///< planar YUV 4:2:2, 18bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian
1301 return ePixelCodingYUV422;
1302 break;
1303 case AV_PIX_FMT_YUV422P9LE: ///< planar YUV 4:2:2, 18bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian
1304 return ePixelCodingYUV422;
1305 break;
1306 case AV_PIX_FMT_GBRP: ///< planar GBR 4:4:4 24bpp
1307 return ePixelCodingRGB;
1308 break;
1309 case AV_PIX_FMT_GBRP9BE: ///< planar GBR 4:4:4 27bpp, big-endian
1310 return ePixelCodingRGB;
1311 break;
1312 case AV_PIX_FMT_GBRP9LE: ///< planar GBR 4:4:4 27bpp, little-endian
1313 return ePixelCodingRGB;
1314 break;
1315 case AV_PIX_FMT_GBRP10BE: ///< planar GBR 4:4:4 30bpp, big-endian
1316 return ePixelCodingRGB;
1317 break;
1318 case AV_PIX_FMT_GBRP10LE: ///< planar GBR 4:4:4 30bpp, little-endian
1319 return ePixelCodingRGB;
1320 break;
1321 case AV_PIX_FMT_GBRP16BE: ///< planar GBR 4:4:4 48bpp, big-endian
1322 return ePixelCodingRGB;
1323 break;
1324 case AV_PIX_FMT_GBRP16LE: ///< planar GBR 4:4:4 48bpp, little-endian
1325 return ePixelCodingRGB;
1326 break;
1327 case AV_PIX_FMT_YUVA422P: ///< planar YUV 4:2:2 24bpp, (1 Cr & Cb sample per 2x1 Y & A samples)
1328 return ePixelCodingYUV422;
1329 break;
1330 case AV_PIX_FMT_YUVA444P: ///< planar YUV 4:4:4 32bpp, (1 Cr & Cb sample per 1x1 Y & A samples)
1331 return ePixelCodingYUV444;
1332 break;
1333 case AV_PIX_FMT_YUVA420P9BE: ///< planar YUV 4:2:0 22.5bpp, (1 Cr & Cb sample per 2x2 Y & A samples), big-endian
1334 return ePixelCodingYUV420;
1335 break;
1336 case AV_PIX_FMT_YUVA420P9LE: ///< planar YUV 4:2:0 22.5bpp, (1 Cr & Cb sample per 2x2 Y & A samples), little-endian
1337 return ePixelCodingYUV420;
1338 break;
1339 case AV_PIX_FMT_YUVA422P9BE: ///< planar YUV 4:2:2 27bpp, (1 Cr & Cb sample per 2x1 Y & A samples), big-endian
1340 return ePixelCodingYUV422;
1341 break;
1342 case AV_PIX_FMT_YUVA422P9LE: ///< planar YUV 4:2:2 27bpp, (1 Cr & Cb sample per 2x1 Y & A samples), little-endian
1343 return ePixelCodingYUV422;
1344 break;
1345 case AV_PIX_FMT_YUVA444P9BE: ///< planar YUV 4:4:4 36bpp, (1 Cr & Cb sample per 1x1 Y & A samples), big-endian
1346 return ePixelCodingYUV444;
1347 break;
1348 case AV_PIX_FMT_YUVA444P9LE: ///< planar YUV 4:4:4 36bpp, (1 Cr & Cb sample per 1x1 Y & A samples), little-endian
1349 return ePixelCodingYUV444;
1350 break;
1351 case AV_PIX_FMT_YUVA420P10BE: ///< planar YUV 4:2:0 25bpp, (1 Cr & Cb sample per 2x2 Y & A samples, big-endian)
1352 return ePixelCodingYUV420;
1353 break;
1354 case AV_PIX_FMT_YUVA420P10LE: ///< planar YUV 4:2:0 25bpp, (1 Cr & Cb sample per 2x2 Y & A samples, little-endian)
1355 return ePixelCodingYUV420;
1356 break;
1357 case AV_PIX_FMT_YUVA422P10BE: ///< planar YUV 4:2:2 30bpp, (1 Cr & Cb sample per 2x1 Y & A samples, big-endian)
1358 return ePixelCodingYUV422;
1359 break;
1360 case AV_PIX_FMT_YUVA422P10LE: ///< planar YUV 4:2:2 30bpp, (1 Cr & Cb sample per 2x1 Y & A samples, little-endian)
1361 return ePixelCodingYUV422;
1362 break;
1363 case AV_PIX_FMT_YUVA444P10BE: ///< planar YUV 4:4:4 40bpp, (1 Cr & Cb sample per 1x1 Y & A samples, big-endian)
1364 return ePixelCodingYUV444;
1365 break;
1366 case AV_PIX_FMT_YUVA444P10LE: ///< planar YUV 4:4:4 40bpp, (1 Cr & Cb sample per 1x1 Y & A samples, little-endian)
1367 return ePixelCodingYUV444;
1368 break;
1369 case AV_PIX_FMT_YUVA420P16BE: ///< planar YUV 4:2:0 40bpp, (1 Cr & Cb sample per 2x2 Y & A samples, big-endian)
1370 return ePixelCodingYUV420;
1371 break;
1372 case AV_PIX_FMT_YUVA420P16LE: ///< planar YUV 4:2:0 40bpp, (1 Cr & Cb sample per 2x2 Y & A samples, little-endian)
1373 return ePixelCodingYUV420;
1374 break;
1375 case AV_PIX_FMT_YUVA422P16BE: ///< planar YUV 4:2:2 48bpp, (1 Cr & Cb sample per 2x1 Y & A samples, big-endian)
1376 return ePixelCodingYUV422;
1377 break;
1378 case AV_PIX_FMT_YUVA422P16LE: ///< planar YUV 4:2:2 48bpp, (1 Cr & Cb sample per 2x1 Y & A samples, little-endian)
1379 return ePixelCodingYUV422;
1380 break;
1381 case AV_PIX_FMT_YUVA444P16BE: ///< planar YUV 4:4:4 64bpp, (1 Cr & Cb sample per 1x1 Y & A samples, big-endian)
1382 return ePixelCodingYUV444;
1383 break;
1384 case AV_PIX_FMT_YUVA444P16LE: ///< planar YUV 4:4:4 64bpp, (1 Cr & Cb sample per 1x1 Y & A samples, little-endian)
1385 return ePixelCodingYUV444;
1386 break;
1387
1388 case AV_PIX_FMT_XYZ12LE: ///< packed XYZ 4:4:4, 36 bpp, (msb) 12X, 12Y, 12Z (lsb), the 2-byte value for each X/Y/Z is stored as little-endian, the 4 lower bits are set to 0
1389 return ePixelCodingXYZ;
1390 break;
1391 case AV_PIX_FMT_XYZ12BE: ///< packed XYZ 4:4:4, 36 bpp, (msb) 12X, 12Y, 12Z (lsb), the 2-byte value for each X/Y/Z is stored as big-endian, the 4 lower bits are set to 0
1392 return ePixelCodingXYZ;
1393 break;
1394 case AV_PIX_FMT_NV16: ///< interleaved chroma YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples)
1395 return ePixelCodingYUV422;
1396 break;
1397 case AV_PIX_FMT_NV20LE: ///< interleaved chroma YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian
1398 return ePixelCodingYUV422;
1399 break;
1400 case AV_PIX_FMT_NV20BE: ///< interleaved chroma YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian
1401 return ePixelCodingYUV422;
1402 break;
1403
1404 case AV_PIX_FMT_RGBA64BE: ///< packed RGBA 16:16:16:16, 64bpp, 16R, 16G, 16B, 16A, the 2-byte value for each R/G/B/A component is stored as big-endian
1405 return ePixelCodingRGB;
1406 break;
1407 case AV_PIX_FMT_RGBA64LE: ///< packed RGBA 16:16:16:16, 64bpp, 16R, 16G, 16B, 16A, the 2-byte value for each R/G/B/A component is stored as little-endian
1408 return ePixelCodingRGB;
1409 break;
1410 case AV_PIX_FMT_BGRA64BE: ///< packed RGBA 16:16:16:16, 64bpp, 16B, 16G, 16R, 16A, the 2-byte value for each R/G/B/A component is stored as big-endian
1411 return ePixelCodingRGB;
1412 break;
1413 case AV_PIX_FMT_BGRA64LE: ///< packed RGBA 16:16:16:16, 64bpp, 16B, 16G, 16R, 16A, the 2-byte value for each R/G/B/A component is stored as little-endian
1414 return ePixelCodingRGB;
1415 break;
1416
1417 case AV_PIX_FMT_YVYU422: ///< packed YUV 4:2:2, 16bpp, Y0 Cr Y1 Cb
1418 return ePixelCodingYUV422;
1419 break;
1420
1421 case AV_PIX_FMT_YA16BE: ///< 16 bits gray, 16 bits alpha (big-endian)
1422 return ePixelCodingGray;
1423 break;
1424 case AV_PIX_FMT_YA16LE: ///< 16 bits gray, 16 bits alpha (little-endian)
1425 return ePixelCodingGray;
1426 break;
1427
1428 case AV_PIX_FMT_GBRAP: ///< planar GBRA 4:4:4:4 32bpp
1429 return ePixelCodingRGB;
1430 break;
1431 case AV_PIX_FMT_GBRAP16BE: ///< planar GBRA 4:4:4:4 64bpp, big-endian
1432 return ePixelCodingRGB;
1433 break;
1434 case AV_PIX_FMT_GBRAP16LE: ///< planar GBRA 4:4:4:4 64bpp, little-endian
1435 return ePixelCodingRGB;
1436 break;
1437
1438 case AV_PIX_FMT_0RGB:///< packed RGB 8:8:8, 32bpp, XRGBXRGB... X=unused/undefined
1439 return ePixelCodingRGB;
1440 break;
1441 case AV_PIX_FMT_RGB0: ///< packed RGB 8:8:8, 32bpp, RGBXRGBX... X=unused/undefined
1442 return ePixelCodingRGB;
1443 break;
1444 case AV_PIX_FMT_0BGR: ///< packed BGR 8:8:8, 32bpp, XBGRXBGR... X=unused/undefined
1445 return ePixelCodingRGB;
1446 break;
1447 case AV_PIX_FMT_BGR0: ///< packed BGR 8:8:8, 32bpp, BGRXBGRX... X=unused/undefined
1448 return ePixelCodingRGB;
1449 break;
1450
1451 case AV_PIX_FMT_YUV420P12BE: ///< planar YUV 4:2:0,18bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian
1452 return ePixelCodingYUV420;
1453 break;
1454 case AV_PIX_FMT_YUV420P12LE: ///< planar YUV 4:2:0,18bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian
1455 return ePixelCodingYUV420;
1456 break;
1457 case AV_PIX_FMT_YUV420P14BE: ///< planar YUV 4:2:0,21bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian
1458 return ePixelCodingYUV420;
1459 break;
1460 case AV_PIX_FMT_YUV420P14LE: ///< planar YUV 4:2:0,21bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian
1461 return ePixelCodingYUV420;
1462 break;
1463 case AV_PIX_FMT_YUV422P12BE: ///< planar YUV 4:2:2,24bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian
1464 return ePixelCodingYUV422;
1465 break;
1466 case AV_PIX_FMT_YUV422P12LE: ///< planar YUV 4:2:2,24bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian
1467 return ePixelCodingYUV422;
1468 break;
1469 case AV_PIX_FMT_YUV422P14BE: ///< planar YUV 4:2:2,28bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian
1470 return ePixelCodingYUV422;
1471 break;
1472 case AV_PIX_FMT_YUV422P14LE: ///< planar YUV 4:2:2,28bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian
1473 return ePixelCodingYUV422;
1474 break;
1475 case AV_PIX_FMT_YUV444P12BE: ///< planar YUV 4:4:4,36bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian
1476 return ePixelCodingYUV444;
1477 break;
1478 case AV_PIX_FMT_YUV444P12LE: ///< planar YUV 4:4:4,36bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian
1479 return ePixelCodingYUV444;
1480 break;
1481 case AV_PIX_FMT_YUV444P14BE: ///< planar YUV 4:4:4,42bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian
1482 return ePixelCodingYUV444;
1483 break;
1484 case AV_PIX_FMT_YUV444P14LE: ///< planar YUV 4:4:4,42bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian
1485 return ePixelCodingYUV444;
1486 break;
1487 case AV_PIX_FMT_GBRP12BE: ///< planar GBR 4:4:4 36bpp, big-endian
1488 return ePixelCodingRGB;
1489 break;
1490 case AV_PIX_FMT_GBRP12LE: ///< planar GBR 4:4:4 36bpp, little-endian
1491 return ePixelCodingRGB;
1492 break;
1493 case AV_PIX_FMT_GBRP14BE: ///< planar GBR 4:4:4 42bpp, big-endian
1494 return ePixelCodingRGB;
1495 break;
1496 case AV_PIX_FMT_GBRP14LE: ///< planar GBR 4:4:4 42bpp, little-endian
1497 return ePixelCodingRGB;
1498 break;
1499 case AV_PIX_FMT_YUVJ411P: ///< planar YUV 4:1:1, 12bpp, (1 Cr & Cb sample per 4x1 Y samples) full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV411P and setting color_range
1500 return ePixelCodingYUV411;
1501 break;
1502
1503 case AV_PIX_FMT_BAYER_BGGR8: ///< bayer, BGBG..(odd line), GRGR..(even line), 8-bit samples */
1504 return ePixelCodingBayer;
1505 break;
1506 case AV_PIX_FMT_BAYER_RGGB8: ///< bayer, RGRG..(odd line), GBGB..(even line), 8-bit samples */
1507 return ePixelCodingBayer;
1508 break;
1509 case AV_PIX_FMT_BAYER_GBRG8: ///< bayer, GBGB..(odd line), RGRG..(even line), 8-bit samples */
1510 return ePixelCodingBayer;
1511 break;
1512 case AV_PIX_FMT_BAYER_GRBG8: ///< bayer, GRGR..(odd line), BGBG..(even line), 8-bit samples */
1513 return ePixelCodingBayer;
1514 break;
1515 case AV_PIX_FMT_BAYER_BGGR16LE: ///< bayer, BGBG..(odd line), GRGR..(even line), 16-bit samples, little-endian */
1516 return ePixelCodingBayer;
1517 break;
1518 case AV_PIX_FMT_BAYER_BGGR16BE: ///< bayer, BGBG..(odd line), GRGR..(even line), 16-bit samples, big-endian */
1519 return ePixelCodingBayer;
1520 break;
1521 case AV_PIX_FMT_BAYER_RGGB16LE: ///< bayer, RGRG..(odd line), GBGB..(even line), 16-bit samples, little-endian */
1522 return ePixelCodingBayer;
1523 break;
1524 case AV_PIX_FMT_BAYER_RGGB16BE: ///< bayer, RGRG..(odd line), GBGB..(even line), 16-bit samples, big-endian */
1525 return ePixelCodingBayer;
1526 break;
1527 case AV_PIX_FMT_BAYER_GBRG16LE: ///< bayer, GBGB..(odd line), RGRG..(even line), 16-bit samples, little-endian */
1528 return ePixelCodingBayer;
1529 break;
1530 case AV_PIX_FMT_BAYER_GBRG16BE: ///< bayer, GBGB..(odd line), RGRG..(even line), 16-bit samples, big-endian */
1531 return ePixelCodingBayer;
1532 break;
1533 case AV_PIX_FMT_BAYER_GRBG16LE: ///< bayer, GRGR..(odd line), BGBG..(even line), 16-bit samples, little-endian */
1534 return ePixelCodingBayer;
1535 break;
1536 case AV_PIX_FMT_BAYER_GRBG16BE: ///< bayer, GRGR..(odd line), BGBG..(even line), 16-bit samples, big-endian */
1537 return ePixelCodingBayer;
1538 break;
1539 case AV_PIX_FMT_YUV440P10LE: ///< planar YUV 4:4:0,20bpp, (1 Cr & Cb sample per 1x2 Y samples), little-endian
1540 return ePixelCodingYUV440;
1541 break;
1542 case AV_PIX_FMT_YUV440P10BE: ///< planar YUV 4:4:0,20bpp, (1 Cr & Cb sample per 1x2 Y samples), big-endian
1543 return ePixelCodingYUV440;
1544 break;
1545 case AV_PIX_FMT_YUV440P12LE: ///< planar YUV 4:4:0,24bpp, (1 Cr & Cb sample per 1x2 Y samples), little-endian
1546 return ePixelCodingYUV440;
1547 break;
1548 case AV_PIX_FMT_YUV440P12BE: ///< planar YUV 4:4:0,24bpp, (1 Cr & Cb sample per 1x2 Y samples), big-endian
1549 return ePixelCodingYUV440;
1550 break;
1551 case AV_PIX_FMT_AYUV64LE: ///< packed AYUV 4:4:4,64bpp (1 Cr & Cb sample per 1x1 Y & A samples), little-endian
1552 return ePixelCodingYUV440;
1553 break;
1554 case AV_PIX_FMT_AYUV64BE: ///< packed AYUV 4:4:4,64bpp (1 Cr & Cb sample per 1x1 Y & A samples), big-endian
1555 return ePixelCodingYUV440;
1556 break;
1557
1558 case AV_PIX_FMT_P010LE: ///< like NV12, with 10bpp per component, data in the high bits, zeros in the low bits, little-endian
1559 return ePixelCodingYUV420;
1560 break;
1561 case AV_PIX_FMT_P010BE: ///< like NV12, with 10bpp per component, data in the high bits, zeros in the low bits, big-endian
1562 return ePixelCodingYUV420;
1563 break;
1564
1565 case AV_PIX_FMT_GBRAP12BE: ///< planar GBR 4:4:4:4 48bpp, big-endian
1566 return ePixelCodingRGB;
1567 break;
1568 case AV_PIX_FMT_GBRAP12LE: ///< planar GBR 4:4:4:4 48bpp, little-endian
1569 return ePixelCodingRGB;
1570 break;
1571
1572 case AV_PIX_FMT_GBRAP10BE: ///< planar GBR 4:4:4:4 40bpp, big-endian
1573 return ePixelCodingRGB;
1574 break;
1575 case AV_PIX_FMT_GBRAP10LE: ///< planar GBR 4:4:4:4 40bpp, little-endian
1576 return ePixelCodingRGB;
1577 break;
1578
1579 default:
1580 #if OFX_FFMPEG_PRINT_CODECS
1581 std::cout << "** Format " << av_get_pix_fmt_name(pixelFormat) << "not handled" << std::endl;
1582 #endif
1583
1584 return ePixelCodingNone;
1585 } // switch
1586
1587 } // pixelFormatCoding
1588
1589 int
pixelFormatBPPFromSpec(PixelCodingEnum coding,int bitdepth,bool alpha)1590 pixelFormatBPPFromSpec(PixelCodingEnum coding, int bitdepth, bool alpha)
1591 {
1592 int bits;
1593 switch (coding) {
1594 case ePixelCodingNone:
1595 bits = 0;
1596 break;
1597 case ePixelCodingGray:
1598 case ePixelCodingPalette:
1599 case ePixelCodingBayer:
1600 bits = bitdepth;
1601 break;
1602 case ePixelCodingYUV410:
1603 bits = (bitdepth * (16 + 2)) / 16;
1604 break;
1605 case ePixelCodingYUV411: // 1 Cr & Cb sample per 4x1 Y samples
1606 case ePixelCodingYUV420: // 1 Cr & Cb sample per 2x2 Y samples
1607 bits = (bitdepth * (4 + 2)) / 4;
1608 break;
1609 case ePixelCodingYUV422: // 1 Cr & Cb sample per 2x1 Y samples
1610 //case ePixelCodingYUV440: // 1 Cr & Cb sample per 1x2 Y samples
1611 bits = (bitdepth * (2 + 2)) / 2;
1612 break;
1613 case ePixelCodingYUV444: // 1 Cr & Cb sample per 1x1 Y samples
1614 case ePixelCodingRGB: // RGB
1615 case ePixelCodingXYZ: // XYZ
1616 bits = bitdepth * 3;
1617 }
1618 return alpha ? (bits + bitdepth) : bits;
1619 }
1620
1621
1622
1623 }
1624 }
1625