FFmpeg
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
pixdesc.c
Go to the documentation of this file.
1 /*
2  * pixel format descriptor
3  * Copyright (c) 2009 Michael Niedermayer <michaelni@gmx.at>
4  *
5  * This file is part of FFmpeg.
6  *
7  * FFmpeg is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2.1 of the License, or (at your option) any later version.
11  *
12  * FFmpeg is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with FFmpeg; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20  */
21 
22 #include <stdio.h>
23 #include <string.h>
24 
25 #include "avassert.h"
26 #include "common.h"
27 #include "pixfmt.h"
28 #include "pixdesc.h"
29 
30 #include "intreadwrite.h"
31 #include "avstring.h"
32 
33 void av_read_image_line(uint16_t *dst,
34  const uint8_t *data[4], const int linesize[4],
35  const AVPixFmtDescriptor *desc,
36  int x, int y, int c, int w,
37  int read_pal_component)
38 {
40  int plane = comp.plane;
41  int depth = comp.depth_minus1 + 1;
42  int mask = (1 << depth) - 1;
43  int shift = comp.shift;
44  int step = comp.step_minus1 + 1;
45  int flags = desc->flags;
46 
47  if (flags & AV_PIX_FMT_FLAG_BITSTREAM) {
48  int skip = x * step + comp.offset_plus1 - 1;
49  const uint8_t *p = data[plane] + y * linesize[plane] + (skip >> 3);
50  int shift = 8 - depth - (skip & 7);
51 
52  while (w--) {
53  int val = (*p >> shift) & mask;
54  if (read_pal_component)
55  val = data[1][4*val + c];
56  shift -= step;
57  p -= shift >> 3;
58  shift &= 7;
59  *dst++ = val;
60  }
61  } else {
62  const uint8_t *p = data[plane] + y * linesize[plane] +
63  x * step + comp.offset_plus1 - 1;
64  int is_8bit = shift + depth <= 8;
65 
66  if (is_8bit)
67  p += !!(flags & AV_PIX_FMT_FLAG_BE);
68 
69  while (w--) {
70  int val = is_8bit ? *p :
71  flags & AV_PIX_FMT_FLAG_BE ? AV_RB16(p) : AV_RL16(p);
72  val = (val >> shift) & mask;
73  if (read_pal_component)
74  val = data[1][4 * val + c];
75  p += step;
76  *dst++ = val;
77  }
78  }
79 }
80 
81 void av_write_image_line(const uint16_t *src,
82  uint8_t *data[4], const int linesize[4],
83  const AVPixFmtDescriptor *desc,
84  int x, int y, int c, int w)
85 {
87  int plane = comp.plane;
88  int depth = comp.depth_minus1 + 1;
89  int step = comp.step_minus1 + 1;
90  int flags = desc->flags;
91 
92  if (flags & AV_PIX_FMT_FLAG_BITSTREAM) {
93  int skip = x * step + comp.offset_plus1 - 1;
94  uint8_t *p = data[plane] + y * linesize[plane] + (skip >> 3);
95  int shift = 8 - depth - (skip & 7);
96 
97  while (w--) {
98  *p |= *src++ << shift;
99  shift -= step;
100  p -= shift >> 3;
101  shift &= 7;
102  }
103  } else {
104  int shift = comp.shift;
105  uint8_t *p = data[plane] + y * linesize[plane] +
106  x * step + comp.offset_plus1 - 1;
107 
108  if (shift + depth <= 8) {
109  p += !!(flags & AV_PIX_FMT_FLAG_BE);
110  while (w--) {
111  *p |= (*src++ << shift);
112  p += step;
113  }
114  } else {
115  while (w--) {
116  if (flags & AV_PIX_FMT_FLAG_BE) {
117  uint16_t val = AV_RB16(p) | (*src++ << shift);
118  AV_WB16(p, val);
119  } else {
120  uint16_t val = AV_RL16(p) | (*src++ << shift);
121  AV_WL16(p, val);
122  }
123  p += step;
124  }
125  }
126  }
127 }
128 
129 #if !FF_API_PIX_FMT_DESC
130 static
131 #endif
133  [AV_PIX_FMT_YUV420P] = {
134  .name = "yuv420p",
135  .nb_components = 3,
136  .log2_chroma_w = 1,
137  .log2_chroma_h = 1,
138  .comp = {
139  { 0, 0, 1, 0, 7 }, /* Y */
140  { 1, 0, 1, 0, 7 }, /* U */
141  { 2, 0, 1, 0, 7 }, /* V */
142  },
143  .flags = AV_PIX_FMT_FLAG_PLANAR,
144  },
145  [AV_PIX_FMT_YUYV422] = {
146  .name = "yuyv422",
147  .nb_components = 3,
148  .log2_chroma_w = 1,
149  .log2_chroma_h = 0,
150  .comp = {
151  { 0, 1, 1, 0, 7 }, /* Y */
152  { 0, 3, 2, 0, 7 }, /* U */
153  { 0, 3, 4, 0, 7 }, /* V */
154  },
155  },
156  [AV_PIX_FMT_RGB24] = {
157  .name = "rgb24",
158  .nb_components = 3,
159  .log2_chroma_w = 0,
160  .log2_chroma_h = 0,
161  .comp = {
162  { 0, 2, 1, 0, 7 }, /* R */
163  { 0, 2, 2, 0, 7 }, /* G */
164  { 0, 2, 3, 0, 7 }, /* B */
165  },
166  .flags = AV_PIX_FMT_FLAG_RGB,
167  },
168  [AV_PIX_FMT_BGR24] = {
169  .name = "bgr24",
170  .nb_components = 3,
171  .log2_chroma_w = 0,
172  .log2_chroma_h = 0,
173  .comp = {
174  { 0, 2, 3, 0, 7 }, /* R */
175  { 0, 2, 2, 0, 7 }, /* G */
176  { 0, 2, 1, 0, 7 }, /* B */
177  },
178  .flags = AV_PIX_FMT_FLAG_RGB,
179  },
180  [AV_PIX_FMT_YUV422P] = {
181  .name = "yuv422p",
182  .nb_components = 3,
183  .log2_chroma_w = 1,
184  .log2_chroma_h = 0,
185  .comp = {
186  { 0, 0, 1, 0, 7 }, /* Y */
187  { 1, 0, 1, 0, 7 }, /* U */
188  { 2, 0, 1, 0, 7 }, /* V */
189  },
190  .flags = AV_PIX_FMT_FLAG_PLANAR,
191  },
192  [AV_PIX_FMT_YUV444P] = {
193  .name = "yuv444p",
194  .nb_components = 3,
195  .log2_chroma_w = 0,
196  .log2_chroma_h = 0,
197  .comp = {
198  { 0, 0, 1, 0, 7 }, /* Y */
199  { 1, 0, 1, 0, 7 }, /* U */
200  { 2, 0, 1, 0, 7 }, /* V */
201  },
202  .flags = AV_PIX_FMT_FLAG_PLANAR,
203  },
204  [AV_PIX_FMT_YUV410P] = {
205  .name = "yuv410p",
206  .nb_components = 3,
207  .log2_chroma_w = 2,
208  .log2_chroma_h = 2,
209  .comp = {
210  { 0, 0, 1, 0, 7 }, /* Y */
211  { 1, 0, 1, 0, 7 }, /* U */
212  { 2, 0, 1, 0, 7 }, /* V */
213  },
214  .flags = AV_PIX_FMT_FLAG_PLANAR,
215  },
216  [AV_PIX_FMT_YUV411P] = {
217  .name = "yuv411p",
218  .nb_components = 3,
219  .log2_chroma_w = 2,
220  .log2_chroma_h = 0,
221  .comp = {
222  { 0, 0, 1, 0, 7 }, /* Y */
223  { 1, 0, 1, 0, 7 }, /* U */
224  { 2, 0, 1, 0, 7 }, /* V */
225  },
226  .flags = AV_PIX_FMT_FLAG_PLANAR,
227  },
228  [AV_PIX_FMT_YUVJ411P] = {
229  .name = "yuvj411p",
230  .nb_components = 3,
231  .log2_chroma_w = 2,
232  .log2_chroma_h = 0,
233  .comp = {
234  { 0, 0, 1, 0, 7 }, /* Y */
235  { 1, 0, 1, 0, 7 }, /* U */
236  { 2, 0, 1, 0, 7 }, /* V */
237  },
238  .flags = AV_PIX_FMT_FLAG_PLANAR,
239  },
240  [AV_PIX_FMT_GRAY8] = {
241  .name = "gray",
242  .nb_components = 1,
243  .log2_chroma_w = 0,
244  .log2_chroma_h = 0,
245  .comp = {
246  { 0, 0, 1, 0, 7 }, /* Y */
247  },
248  .flags = AV_PIX_FMT_FLAG_PSEUDOPAL,
249  },
251  .name = "monow",
252  .nb_components = 1,
253  .log2_chroma_w = 0,
254  .log2_chroma_h = 0,
255  .comp = {
256  { 0, 0, 1, 0, 0 }, /* Y */
257  },
258  .flags = AV_PIX_FMT_FLAG_BITSTREAM,
259  },
261  .name = "monob",
262  .nb_components = 1,
263  .log2_chroma_w = 0,
264  .log2_chroma_h = 0,
265  .comp = {
266  { 0, 0, 1, 7, 0 }, /* Y */
267  },
268  .flags = AV_PIX_FMT_FLAG_BITSTREAM,
269  },
270  [AV_PIX_FMT_PAL8] = {
271  .name = "pal8",
272  .nb_components = 1,
273  .log2_chroma_w = 0,
274  .log2_chroma_h = 0,
275  .comp = {
276  { 0, 0, 1, 0, 7 },
277  },
278  .flags = AV_PIX_FMT_FLAG_PAL,
279  },
280  [AV_PIX_FMT_YUVJ420P] = {
281  .name = "yuvj420p",
282  .nb_components = 3,
283  .log2_chroma_w = 1,
284  .log2_chroma_h = 1,
285  .comp = {
286  { 0, 0, 1, 0, 7 }, /* Y */
287  { 1, 0, 1, 0, 7 }, /* U */
288  { 2, 0, 1, 0, 7 }, /* V */
289  },
290  .flags = AV_PIX_FMT_FLAG_PLANAR,
291  },
292  [AV_PIX_FMT_YUVJ422P] = {
293  .name = "yuvj422p",
294  .nb_components = 3,
295  .log2_chroma_w = 1,
296  .log2_chroma_h = 0,
297  .comp = {
298  { 0, 0, 1, 0, 7 }, /* Y */
299  { 1, 0, 1, 0, 7 }, /* U */
300  { 2, 0, 1, 0, 7 }, /* V */
301  },
302  .flags = AV_PIX_FMT_FLAG_PLANAR,
303  },
304  [AV_PIX_FMT_YUVJ444P] = {
305  .name = "yuvj444p",
306  .nb_components = 3,
307  .log2_chroma_w = 0,
308  .log2_chroma_h = 0,
309  .comp = {
310  { 0, 0, 1, 0, 7 }, /* Y */
311  { 1, 0, 1, 0, 7 }, /* U */
312  { 2, 0, 1, 0, 7 }, /* V */
313  },
314  .flags = AV_PIX_FMT_FLAG_PLANAR,
315  },
317  .name = "xvmcmc",
318  .flags = AV_PIX_FMT_FLAG_HWACCEL,
319  },
321  .name = "xvmcidct",
322  .flags = AV_PIX_FMT_FLAG_HWACCEL,
323  },
324  [AV_PIX_FMT_UYVY422] = {
325  .name = "uyvy422",
326  .nb_components = 3,
327  .log2_chroma_w = 1,
328  .log2_chroma_h = 0,
329  .comp = {
330  { 0, 1, 2, 0, 7 }, /* Y */
331  { 0, 3, 1, 0, 7 }, /* U */
332  { 0, 3, 3, 0, 7 }, /* V */
333  },
334  },
336  .name = "uyyvyy411",
337  .nb_components = 3,
338  .log2_chroma_w = 2,
339  .log2_chroma_h = 0,
340  .comp = {
341  { 0, 3, 2, 0, 7 }, /* Y */
342  { 0, 5, 1, 0, 7 }, /* U */
343  { 0, 5, 4, 0, 7 }, /* V */
344  },
345  },
346  [AV_PIX_FMT_BGR8] = {
347  .name = "bgr8",
348  .nb_components = 3,
349  .log2_chroma_w = 0,
350  .log2_chroma_h = 0,
351  .comp = {
352  { 0, 0, 1, 0, 2 }, /* R */
353  { 0, 0, 1, 3, 2 }, /* G */
354  { 0, 0, 1, 6, 1 }, /* B */
355  },
357  },
358  [AV_PIX_FMT_BGR4] = {
359  .name = "bgr4",
360  .nb_components = 3,
361  .log2_chroma_w = 0,
362  .log2_chroma_h = 0,
363  .comp = {
364  { 0, 3, 4, 0, 0 }, /* R */
365  { 0, 3, 2, 0, 1 }, /* G */
366  { 0, 3, 1, 0, 0 }, /* B */
367  },
369  },
371  .name = "bgr4_byte",
372  .nb_components = 3,
373  .log2_chroma_w = 0,
374  .log2_chroma_h = 0,
375  .comp = {
376  { 0, 0, 1, 0, 0 }, /* R */
377  { 0, 0, 1, 1, 1 }, /* G */
378  { 0, 0, 1, 3, 0 }, /* B */
379  },
381  },
382  [AV_PIX_FMT_RGB8] = {
383  .name = "rgb8",
384  .nb_components = 3,
385  .log2_chroma_w = 0,
386  .log2_chroma_h = 0,
387  .comp = {
388  { 0, 0, 1, 6, 1 }, /* R */
389  { 0, 0, 1, 3, 2 }, /* G */
390  { 0, 0, 1, 0, 2 }, /* B */
391  },
393  },
394  [AV_PIX_FMT_RGB4] = {
395  .name = "rgb4",
396  .nb_components = 3,
397  .log2_chroma_w = 0,
398  .log2_chroma_h = 0,
399  .comp = {
400  { 0, 3, 1, 0, 0 }, /* R */
401  { 0, 3, 2, 0, 1 }, /* G */
402  { 0, 3, 4, 0, 0 }, /* B */
403  },
405  },
407  .name = "rgb4_byte",
408  .nb_components = 3,
409  .log2_chroma_w = 0,
410  .log2_chroma_h = 0,
411  .comp = {
412  { 0, 0, 1, 3, 0 }, /* R */
413  { 0, 0, 1, 1, 1 }, /* G */
414  { 0, 0, 1, 0, 0 }, /* B */
415  },
417  },
418  [AV_PIX_FMT_NV12] = {
419  .name = "nv12",
420  .nb_components = 3,
421  .log2_chroma_w = 1,
422  .log2_chroma_h = 1,
423  .comp = {
424  { 0, 0, 1, 0, 7 }, /* Y */
425  { 1, 1, 1, 0, 7 }, /* U */
426  { 1, 1, 2, 0, 7 }, /* V */
427  },
428  .flags = AV_PIX_FMT_FLAG_PLANAR,
429  },
430  [AV_PIX_FMT_NV21] = {
431  .name = "nv21",
432  .nb_components = 3,
433  .log2_chroma_w = 1,
434  .log2_chroma_h = 1,
435  .comp = {
436  { 0, 0, 1, 0, 7 }, /* Y */
437  { 1, 1, 2, 0, 7 }, /* U */
438  { 1, 1, 1, 0, 7 }, /* V */
439  },
440  .flags = AV_PIX_FMT_FLAG_PLANAR,
441  },
442  [AV_PIX_FMT_ARGB] = {
443  .name = "argb",
444  .nb_components = 4,
445  .log2_chroma_w = 0,
446  .log2_chroma_h = 0,
447  .comp = {
448  { 0, 3, 2, 0, 7 }, /* R */
449  { 0, 3, 3, 0, 7 }, /* G */
450  { 0, 3, 4, 0, 7 }, /* B */
451  { 0, 3, 1, 0, 7 }, /* A */
452  },
454  },
455  [AV_PIX_FMT_RGBA] = {
456  .name = "rgba",
457  .nb_components = 4,
458  .log2_chroma_w = 0,
459  .log2_chroma_h = 0,
460  .comp = {
461  { 0, 3, 1, 0, 7 }, /* R */
462  { 0, 3, 2, 0, 7 }, /* G */
463  { 0, 3, 3, 0, 7 }, /* B */
464  { 0, 3, 4, 0, 7 }, /* A */
465  },
467  },
468  [AV_PIX_FMT_ABGR] = {
469  .name = "abgr",
470  .nb_components = 4,
471  .log2_chroma_w = 0,
472  .log2_chroma_h = 0,
473  .comp = {
474  { 0, 3, 4, 0, 7 }, /* R */
475  { 0, 3, 3, 0, 7 }, /* G */
476  { 0, 3, 2, 0, 7 }, /* B */
477  { 0, 3, 1, 0, 7 }, /* A */
478  },
480  },
481  [AV_PIX_FMT_BGRA] = {
482  .name = "bgra",
483  .nb_components = 4,
484  .log2_chroma_w = 0,
485  .log2_chroma_h = 0,
486  .comp = {
487  { 0, 3, 3, 0, 7 }, /* R */
488  { 0, 3, 2, 0, 7 }, /* G */
489  { 0, 3, 1, 0, 7 }, /* B */
490  { 0, 3, 4, 0, 7 }, /* A */
491  },
493  },
494  [AV_PIX_FMT_0RGB] = {
495  .name = "0rgb",
496  .nb_components= 3,
497  .log2_chroma_w= 0,
498  .log2_chroma_h= 0,
499  .comp = {
500  { 0, 3, 2, 0, 7 }, /* R */
501  { 0, 3, 3, 0, 7 }, /* G */
502  { 0, 3, 4, 0, 7 }, /* B */
503  },
504  .flags = AV_PIX_FMT_FLAG_RGB,
505  },
506  [AV_PIX_FMT_RGB0] = {
507  .name = "rgb0",
508  .nb_components= 3,
509  .log2_chroma_w= 0,
510  .log2_chroma_h= 0,
511  .comp = {
512  { 0, 3, 1, 0, 7 }, /* R */
513  { 0, 3, 2, 0, 7 }, /* G */
514  { 0, 3, 3, 0, 7 }, /* B */
515  },
516  .flags = AV_PIX_FMT_FLAG_RGB,
517  },
518  [AV_PIX_FMT_0BGR] = {
519  .name = "0bgr",
520  .nb_components= 3,
521  .log2_chroma_w= 0,
522  .log2_chroma_h= 0,
523  .comp = {
524  { 0, 3, 4, 0, 7 }, /* R */
525  { 0, 3, 3, 0, 7 }, /* G */
526  { 0, 3, 2, 0, 7 }, /* B */
527  },
528  .flags = AV_PIX_FMT_FLAG_RGB,
529  },
530  [AV_PIX_FMT_BGR0] = {
531  .name = "bgr0",
532  .nb_components= 3,
533  .log2_chroma_w= 0,
534  .log2_chroma_h= 0,
535  .comp = {
536  { 0, 3, 3, 0, 7 }, /* R */
537  { 0, 3, 2, 0, 7 }, /* G */
538  { 0, 3, 1, 0, 7 }, /* B */
539  },
540  .flags = AV_PIX_FMT_FLAG_RGB,
541  },
542  [AV_PIX_FMT_GRAY16BE] = {
543  .name = "gray16be",
544  .nb_components = 1,
545  .log2_chroma_w = 0,
546  .log2_chroma_h = 0,
547  .comp = {
548  { 0, 1, 1, 0, 15 }, /* Y */
549  },
550  .flags = AV_PIX_FMT_FLAG_BE,
551  },
552  [AV_PIX_FMT_GRAY16LE] = {
553  .name = "gray16le",
554  .nb_components = 1,
555  .log2_chroma_w = 0,
556  .log2_chroma_h = 0,
557  .comp = {
558  { 0, 1, 1, 0, 15 }, /* Y */
559  },
560  },
561  [AV_PIX_FMT_YUV440P] = {
562  .name = "yuv440p",
563  .nb_components = 3,
564  .log2_chroma_w = 0,
565  .log2_chroma_h = 1,
566  .comp = {
567  { 0, 0, 1, 0, 7 }, /* Y */
568  { 1, 0, 1, 0, 7 }, /* U */
569  { 2, 0, 1, 0, 7 }, /* V */
570  },
571  .flags = AV_PIX_FMT_FLAG_PLANAR,
572  },
573  [AV_PIX_FMT_YUVJ440P] = {
574  .name = "yuvj440p",
575  .nb_components = 3,
576  .log2_chroma_w = 0,
577  .log2_chroma_h = 1,
578  .comp = {
579  { 0, 0, 1, 0, 7 }, /* Y */
580  { 1, 0, 1, 0, 7 }, /* U */
581  { 2, 0, 1, 0, 7 }, /* V */
582  },
583  .flags = AV_PIX_FMT_FLAG_PLANAR,
584  },
585  [AV_PIX_FMT_YUVA420P] = {
586  .name = "yuva420p",
587  .nb_components = 4,
588  .log2_chroma_w = 1,
589  .log2_chroma_h = 1,
590  .comp = {
591  { 0, 0, 1, 0, 7 }, /* Y */
592  { 1, 0, 1, 0, 7 }, /* U */
593  { 2, 0, 1, 0, 7 }, /* V */
594  { 3, 0, 1, 0, 7 }, /* A */
595  },
597  },
598  [AV_PIX_FMT_YUVA422P] = {
599  .name = "yuva422p",
600  .nb_components = 4,
601  .log2_chroma_w = 1,
602  .log2_chroma_h = 0,
603  .comp = {
604  { 0, 0, 1, 0, 7 }, /* Y */
605  { 1, 0, 1, 0, 7 }, /* U */
606  { 2, 0, 1, 0, 7 }, /* V */
607  { 3, 0, 1, 0, 7 }, /* A */
608  },
610  },
611  [AV_PIX_FMT_YUVA444P] = {
612  .name = "yuva444p",
613  .nb_components = 4,
614  .log2_chroma_w = 0,
615  .log2_chroma_h = 0,
616  .comp = {
617  { 0, 0, 1, 0, 7 }, /* Y */
618  { 1, 0, 1, 0, 7 }, /* U */
619  { 2, 0, 1, 0, 7 }, /* V */
620  { 3, 0, 1, 0, 7 }, /* A */
621  },
623  },
625  .name = "yuva420p9be",
626  .nb_components = 4,
627  .log2_chroma_w = 1,
628  .log2_chroma_h = 1,
629  .comp = {
630  { 0, 1, 1, 0, 8 }, /* Y */
631  { 1, 1, 1, 0, 8 }, /* U */
632  { 2, 1, 1, 0, 8 }, /* V */
633  { 3, 1, 1, 0, 8 }, /* A */
634  },
636  },
638  .name = "yuva420p9le",
639  .nb_components = 4,
640  .log2_chroma_w = 1,
641  .log2_chroma_h = 1,
642  .comp = {
643  { 0, 1, 1, 0, 8 }, /* Y */
644  { 1, 1, 1, 0, 8 }, /* U */
645  { 2, 1, 1, 0, 8 }, /* V */
646  { 3, 1, 1, 0, 8 }, /* A */
647  },
649  },
651  .name = "yuva422p9be",
652  .nb_components = 4,
653  .log2_chroma_w = 1,
654  .log2_chroma_h = 0,
655  .comp = {
656  { 0, 1, 1, 0, 8 }, /* Y */
657  { 1, 1, 1, 0, 8 }, /* U */
658  { 2, 1, 1, 0, 8 }, /* V */
659  { 3, 1, 1, 0, 8 }, /* A */
660  },
662  },
664  .name = "yuva422p9le",
665  .nb_components = 4,
666  .log2_chroma_w = 1,
667  .log2_chroma_h = 0,
668  .comp = {
669  { 0, 1, 1, 0, 8 }, /* Y */
670  { 1, 1, 1, 0, 8 }, /* U */
671  { 2, 1, 1, 0, 8 }, /* V */
672  { 3, 1, 1, 0, 8 }, /* A */
673  },
675  },
677  .name = "yuva444p9be",
678  .nb_components = 4,
679  .log2_chroma_w = 0,
680  .log2_chroma_h = 0,
681  .comp = {
682  { 0, 1, 1, 0, 8 }, /* Y */
683  { 1, 1, 1, 0, 8 }, /* U */
684  { 2, 1, 1, 0, 8 }, /* V */
685  { 3, 1, 1, 0, 8 }, /* A */
686  },
688  },
690  .name = "yuva444p9le",
691  .nb_components = 4,
692  .log2_chroma_w = 0,
693  .log2_chroma_h = 0,
694  .comp = {
695  { 0, 1, 1, 0, 8 }, /* Y */
696  { 1, 1, 1, 0, 8 }, /* U */
697  { 2, 1, 1, 0, 8 }, /* V */
698  { 3, 1, 1, 0, 8 }, /* A */
699  },
701  },
703  .name = "yuva420p10be",
704  .nb_components = 4,
705  .log2_chroma_w = 1,
706  .log2_chroma_h = 1,
707  .comp = {
708  { 0, 1, 1, 0, 9 }, /* Y */
709  { 1, 1, 1, 0, 9 }, /* U */
710  { 2, 1, 1, 0, 9 }, /* V */
711  { 3, 1, 1, 0, 9 }, /* A */
712  },
714  },
716  .name = "yuva420p10le",
717  .nb_components = 4,
718  .log2_chroma_w = 1,
719  .log2_chroma_h = 1,
720  .comp = {
721  { 0, 1, 1, 0, 9 }, /* Y */
722  { 1, 1, 1, 0, 9 }, /* U */
723  { 2, 1, 1, 0, 9 }, /* V */
724  { 3, 1, 1, 0, 9 }, /* A */
725  },
727  },
729  .name = "yuva422p10be",
730  .nb_components = 4,
731  .log2_chroma_w = 1,
732  .log2_chroma_h = 0,
733  .comp = {
734  { 0, 1, 1, 0, 9 }, /* Y */
735  { 1, 1, 1, 0, 9 }, /* U */
736  { 2, 1, 1, 0, 9 }, /* V */
737  { 3, 1, 1, 0, 9 }, /* A */
738  },
740  },
742  .name = "yuva422p10le",
743  .nb_components = 4,
744  .log2_chroma_w = 1,
745  .log2_chroma_h = 0,
746  .comp = {
747  { 0, 1, 1, 0, 9 }, /* Y */
748  { 1, 1, 1, 0, 9 }, /* U */
749  { 2, 1, 1, 0, 9 }, /* V */
750  { 3, 1, 1, 0, 9 }, /* A */
751  },
753  },
755  .name = "yuva444p10be",
756  .nb_components = 4,
757  .log2_chroma_w = 0,
758  .log2_chroma_h = 0,
759  .comp = {
760  { 0, 1, 1, 0, 9 }, /* Y */
761  { 1, 1, 1, 0, 9 }, /* U */
762  { 2, 1, 1, 0, 9 }, /* V */
763  { 3, 1, 1, 0, 9 }, /* A */
764  },
766  },
768  .name = "yuva444p10le",
769  .nb_components = 4,
770  .log2_chroma_w = 0,
771  .log2_chroma_h = 0,
772  .comp = {
773  { 0, 1, 1, 0, 9 }, /* Y */
774  { 1, 1, 1, 0, 9 }, /* U */
775  { 2, 1, 1, 0, 9 }, /* V */
776  { 3, 1, 1, 0, 9 }, /* A */
777  },
779  },
781  .name = "yuva420p16be",
782  .nb_components = 4,
783  .log2_chroma_w = 1,
784  .log2_chroma_h = 1,
785  .comp = {
786  { 0, 1, 1, 0, 15 }, /* Y */
787  { 1, 1, 1, 0, 15 }, /* U */
788  { 2, 1, 1, 0, 15 }, /* V */
789  { 3, 1, 1, 0, 15 }, /* A */
790  },
792  },
794  .name = "yuva420p16le",
795  .nb_components = 4,
796  .log2_chroma_w = 1,
797  .log2_chroma_h = 1,
798  .comp = {
799  { 0, 1, 1, 0, 15 }, /* Y */
800  { 1, 1, 1, 0, 15 }, /* U */
801  { 2, 1, 1, 0, 15 }, /* V */
802  { 3, 1, 1, 0, 15 }, /* A */
803  },
805  },
807  .name = "yuva422p16be",
808  .nb_components = 4,
809  .log2_chroma_w = 1,
810  .log2_chroma_h = 0,
811  .comp = {
812  { 0, 1, 1, 0, 15 }, /* Y */
813  { 1, 1, 1, 0, 15 }, /* U */
814  { 2, 1, 1, 0, 15 }, /* V */
815  { 3, 1, 1, 0, 15 }, /* A */
816  },
818  },
820  .name = "yuva422p16le",
821  .nb_components = 4,
822  .log2_chroma_w = 1,
823  .log2_chroma_h = 0,
824  .comp = {
825  { 0, 1, 1, 0, 15 }, /* Y */
826  { 1, 1, 1, 0, 15 }, /* U */
827  { 2, 1, 1, 0, 15 }, /* V */
828  { 3, 1, 1, 0, 15 }, /* A */
829  },
831  },
833  .name = "yuva444p16be",
834  .nb_components = 4,
835  .log2_chroma_w = 0,
836  .log2_chroma_h = 0,
837  .comp = {
838  { 0, 1, 1, 0, 15 }, /* Y */
839  { 1, 1, 1, 0, 15 }, /* U */
840  { 2, 1, 1, 0, 15 }, /* V */
841  { 3, 1, 1, 0, 15 }, /* A */
842  },
844  },
846  .name = "yuva444p16le",
847  .nb_components = 4,
848  .log2_chroma_w = 0,
849  .log2_chroma_h = 0,
850  .comp = {
851  { 0, 1, 1, 0, 15 }, /* Y */
852  { 1, 1, 1, 0, 15 }, /* U */
853  { 2, 1, 1, 0, 15 }, /* V */
854  { 3, 1, 1, 0, 15 }, /* A */
855  },
857  },
859  .name = "vdpau_h264",
860  .log2_chroma_w = 1,
861  .log2_chroma_h = 1,
862  .flags = AV_PIX_FMT_FLAG_HWACCEL,
863  },
865  .name = "vdpau_mpeg1",
866  .log2_chroma_w = 1,
867  .log2_chroma_h = 1,
868  .flags = AV_PIX_FMT_FLAG_HWACCEL,
869  },
871  .name = "vdpau_mpeg2",
872  .log2_chroma_w = 1,
873  .log2_chroma_h = 1,
874  .flags = AV_PIX_FMT_FLAG_HWACCEL,
875  },
877  .name = "vdpau_wmv3",
878  .log2_chroma_w = 1,
879  .log2_chroma_h = 1,
880  .flags = AV_PIX_FMT_FLAG_HWACCEL,
881  },
883  .name = "vdpau_vc1",
884  .log2_chroma_w = 1,
885  .log2_chroma_h = 1,
886  .flags = AV_PIX_FMT_FLAG_HWACCEL,
887  },
889  .name = "vdpau_mpeg4",
890  .log2_chroma_w = 1,
891  .log2_chroma_h = 1,
892  .flags = AV_PIX_FMT_FLAG_HWACCEL,
893  },
894  [AV_PIX_FMT_RGB48BE] = {
895  .name = "rgb48be",
896  .nb_components = 3,
897  .log2_chroma_w = 0,
898  .log2_chroma_h = 0,
899  .comp = {
900  { 0, 5, 1, 0, 15 }, /* R */
901  { 0, 5, 3, 0, 15 }, /* G */
902  { 0, 5, 5, 0, 15 }, /* B */
903  },
905  },
906  [AV_PIX_FMT_RGB48LE] = {
907  .name = "rgb48le",
908  .nb_components = 3,
909  .log2_chroma_w = 0,
910  .log2_chroma_h = 0,
911  .comp = {
912  { 0, 5, 1, 0, 15 }, /* R */
913  { 0, 5, 3, 0, 15 }, /* G */
914  { 0, 5, 5, 0, 15 }, /* B */
915  },
916  .flags = AV_PIX_FMT_FLAG_RGB,
917  },
918  [AV_PIX_FMT_RGBA64BE] = {
919  .name = "rgba64be",
920  .nb_components= 4,
921  .log2_chroma_w= 0,
922  .log2_chroma_h= 0,
923  .comp = {
924  { 0, 7, 1, 0, 15 }, /* R */
925  { 0, 7, 3, 0, 15 }, /* G */
926  { 0, 7, 5, 0, 15 }, /* B */
927  { 0, 7, 7, 0, 15 }, /* A */
928  },
930  },
931  [AV_PIX_FMT_RGBA64LE] = {
932  .name = "rgba64le",
933  .nb_components= 4,
934  .log2_chroma_w= 0,
935  .log2_chroma_h= 0,
936  .comp = {
937  { 0, 7, 1, 0, 15 }, /* R */
938  { 0, 7, 3, 0, 15 }, /* G */
939  { 0, 7, 5, 0, 15 }, /* B */
940  { 0, 7, 7, 0, 15 }, /* A */
941  },
943  },
944  [AV_PIX_FMT_RGB565BE] = {
945  .name = "rgb565be",
946  .nb_components = 3,
947  .log2_chroma_w = 0,
948  .log2_chroma_h = 0,
949  .comp = {
950  { 0, 1, 0, 3, 4 }, /* R */
951  { 0, 1, 1, 5, 5 }, /* G */
952  { 0, 1, 1, 0, 4 }, /* B */
953  },
955  },
956  [AV_PIX_FMT_RGB565LE] = {
957  .name = "rgb565le",
958  .nb_components = 3,
959  .log2_chroma_w = 0,
960  .log2_chroma_h = 0,
961  .comp = {
962  { 0, 1, 2, 3, 4 }, /* R */
963  { 0, 1, 1, 5, 5 }, /* G */
964  { 0, 1, 1, 0, 4 }, /* B */
965  },
966  .flags = AV_PIX_FMT_FLAG_RGB,
967  },
968  [AV_PIX_FMT_RGB555BE] = {
969  .name = "rgb555be",
970  .nb_components = 3,
971  .log2_chroma_w = 0,
972  .log2_chroma_h = 0,
973  .comp = {
974  { 0, 1, 0, 2, 4 }, /* R */
975  { 0, 1, 1, 5, 4 }, /* G */
976  { 0, 1, 1, 0, 4 }, /* B */
977  },
979  },
980  [AV_PIX_FMT_RGB555LE] = {
981  .name = "rgb555le",
982  .nb_components = 3,
983  .log2_chroma_w = 0,
984  .log2_chroma_h = 0,
985  .comp = {
986  { 0, 1, 2, 2, 4 }, /* R */
987  { 0, 1, 1, 5, 4 }, /* G */
988  { 0, 1, 1, 0, 4 }, /* B */
989  },
990  .flags = AV_PIX_FMT_FLAG_RGB,
991  },
992  [AV_PIX_FMT_RGB444BE] = {
993  .name = "rgb444be",
994  .nb_components = 3,
995  .log2_chroma_w = 0,
996  .log2_chroma_h = 0,
997  .comp = {
998  { 0, 1, 0, 0, 3 }, /* R */
999  { 0, 1, 1, 4, 3 }, /* G */
1000  { 0, 1, 1, 0, 3 }, /* B */
1001  },
1003  },
1004  [AV_PIX_FMT_RGB444LE] = {
1005  .name = "rgb444le",
1006  .nb_components = 3,
1007  .log2_chroma_w = 0,
1008  .log2_chroma_h = 0,
1009  .comp = {
1010  { 0, 1, 2, 0, 3 }, /* R */
1011  { 0, 1, 1, 4, 3 }, /* G */
1012  { 0, 1, 1, 0, 3 }, /* B */
1013  },
1014  .flags = AV_PIX_FMT_FLAG_RGB,
1015  },
1016  [AV_PIX_FMT_BGR48BE] = {
1017  .name = "bgr48be",
1018  .nb_components = 3,
1019  .log2_chroma_w = 0,
1020  .log2_chroma_h = 0,
1021  .comp = {
1022  { 0, 5, 5, 0, 15 }, /* R */
1023  { 0, 5, 3, 0, 15 }, /* G */
1024  { 0, 5, 1, 0, 15 }, /* B */
1025  },
1027  },
1028  [AV_PIX_FMT_BGR48LE] = {
1029  .name = "bgr48le",
1030  .nb_components = 3,
1031  .log2_chroma_w = 0,
1032  .log2_chroma_h = 0,
1033  .comp = {
1034  { 0, 5, 5, 0, 15 }, /* R */
1035  { 0, 5, 3, 0, 15 }, /* G */
1036  { 0, 5, 1, 0, 15 }, /* B */
1037  },
1038  .flags = AV_PIX_FMT_FLAG_RGB,
1039  },
1040  [AV_PIX_FMT_BGRA64BE] = {
1041  .name = "bgra64be",
1042  .nb_components= 4,
1043  .log2_chroma_w= 0,
1044  .log2_chroma_h= 0,
1045  .comp = {
1046  { 0, 7, 5, 0, 15 }, /* R */
1047  { 0, 7, 3, 0, 15 }, /* G */
1048  { 0, 7, 1, 0, 15 }, /* B */
1049  { 0, 7, 7, 0, 15 }, /* A */
1050  },
1052  },
1053  [AV_PIX_FMT_BGRA64LE] = {
1054  .name = "bgra64le",
1055  .nb_components= 4,
1056  .log2_chroma_w= 0,
1057  .log2_chroma_h= 0,
1058  .comp = {
1059  { 0, 7, 5, 0, 15 }, /* R */
1060  { 0, 7, 3, 0, 15 }, /* G */
1061  { 0, 7, 1, 0, 15 }, /* B */
1062  { 0, 7, 7, 0, 15 }, /* A */
1063  },
1065  },
1066  [AV_PIX_FMT_BGR565BE] = {
1067  .name = "bgr565be",
1068  .nb_components = 3,
1069  .log2_chroma_w = 0,
1070  .log2_chroma_h = 0,
1071  .comp = {
1072  { 0, 1, 1, 0, 4 }, /* R */
1073  { 0, 1, 1, 5, 5 }, /* G */
1074  { 0, 1, 0, 3, 4 }, /* B */
1075  },
1077  },
1078  [AV_PIX_FMT_BGR565LE] = {
1079  .name = "bgr565le",
1080  .nb_components = 3,
1081  .log2_chroma_w = 0,
1082  .log2_chroma_h = 0,
1083  .comp = {
1084  { 0, 1, 1, 0, 4 }, /* R */
1085  { 0, 1, 1, 5, 5 }, /* G */
1086  { 0, 1, 2, 3, 4 }, /* B */
1087  },
1088  .flags = AV_PIX_FMT_FLAG_RGB,
1089  },
1090  [AV_PIX_FMT_BGR555BE] = {
1091  .name = "bgr555be",
1092  .nb_components = 3,
1093  .log2_chroma_w = 0,
1094  .log2_chroma_h = 0,
1095  .comp = {
1096  { 0, 1, 1, 0, 4 }, /* R */
1097  { 0, 1, 1, 5, 4 }, /* G */
1098  { 0, 1, 0, 2, 4 }, /* B */
1099  },
1101  },
1102  [AV_PIX_FMT_BGR555LE] = {
1103  .name = "bgr555le",
1104  .nb_components = 3,
1105  .log2_chroma_w = 0,
1106  .log2_chroma_h = 0,
1107  .comp = {
1108  { 0, 1, 1, 0, 4 }, /* R */
1109  { 0, 1, 1, 5, 4 }, /* G */
1110  { 0, 1, 2, 2, 4 }, /* B */
1111  },
1112  .flags = AV_PIX_FMT_FLAG_RGB,
1113  },
1114  [AV_PIX_FMT_BGR444BE] = {
1115  .name = "bgr444be",
1116  .nb_components = 3,
1117  .log2_chroma_w = 0,
1118  .log2_chroma_h = 0,
1119  .comp = {
1120  { 0, 1, 1, 0, 3 }, /* R */
1121  { 0, 1, 1, 4, 3 }, /* G */
1122  { 0, 1, 0, 0, 3 }, /* B */
1123  },
1125  },
1126  [AV_PIX_FMT_BGR444LE] = {
1127  .name = "bgr444le",
1128  .nb_components = 3,
1129  .log2_chroma_w = 0,
1130  .log2_chroma_h = 0,
1131  .comp = {
1132  { 0, 1, 1, 0, 3 }, /* R */
1133  { 0, 1, 1, 4, 3 }, /* G */
1134  { 0, 1, 2, 0, 3 }, /* B */
1135  },
1136  .flags = AV_PIX_FMT_FLAG_RGB,
1137  },
1138  [AV_PIX_FMT_VAAPI_MOCO] = {
1139  .name = "vaapi_moco",
1140  .log2_chroma_w = 1,
1141  .log2_chroma_h = 1,
1142  .flags = AV_PIX_FMT_FLAG_HWACCEL,
1143  },
1144  [AV_PIX_FMT_VAAPI_IDCT] = {
1145  .name = "vaapi_idct",
1146  .log2_chroma_w = 1,
1147  .log2_chroma_h = 1,
1148  .flags = AV_PIX_FMT_FLAG_HWACCEL,
1149  },
1150  [AV_PIX_FMT_VAAPI_VLD] = {
1151  .name = "vaapi_vld",
1152  .log2_chroma_w = 1,
1153  .log2_chroma_h = 1,
1154  .flags = AV_PIX_FMT_FLAG_HWACCEL,
1155  },
1156  [AV_PIX_FMT_YUV420P9LE] = {
1157  .name = "yuv420p9le",
1158  .nb_components = 3,
1159  .log2_chroma_w = 1,
1160  .log2_chroma_h = 1,
1161  .comp = {
1162  { 0, 1, 1, 0, 8 }, /* Y */
1163  { 1, 1, 1, 0, 8 }, /* U */
1164  { 2, 1, 1, 0, 8 }, /* V */
1165  },
1166  .flags = AV_PIX_FMT_FLAG_PLANAR,
1167  },
1168  [AV_PIX_FMT_YUV420P9BE] = {
1169  .name = "yuv420p9be",
1170  .nb_components = 3,
1171  .log2_chroma_w = 1,
1172  .log2_chroma_h = 1,
1173  .comp = {
1174  { 0, 1, 1, 0, 8 }, /* Y */
1175  { 1, 1, 1, 0, 8 }, /* U */
1176  { 2, 1, 1, 0, 8 }, /* V */
1177  },
1179  },
1181  .name = "yuv420p10le",
1182  .nb_components = 3,
1183  .log2_chroma_w = 1,
1184  .log2_chroma_h = 1,
1185  .comp = {
1186  { 0, 1, 1, 0, 9 }, /* Y */
1187  { 1, 1, 1, 0, 9 }, /* U */
1188  { 2, 1, 1, 0, 9 }, /* V */
1189  },
1190  .flags = AV_PIX_FMT_FLAG_PLANAR,
1191  },
1193  .name = "yuv420p10be",
1194  .nb_components = 3,
1195  .log2_chroma_w = 1,
1196  .log2_chroma_h = 1,
1197  .comp = {
1198  { 0, 1, 1, 0, 9 }, /* Y */
1199  { 1, 1, 1, 0, 9 }, /* U */
1200  { 2, 1, 1, 0, 9 }, /* V */
1201  },
1203  },
1205  .name = "yuv420p12le",
1206  .nb_components = 3,
1207  .log2_chroma_w = 1,
1208  .log2_chroma_h = 1,
1209  .comp = {
1210  { 0, 1, 1, 0, 11 }, /* Y */
1211  { 1, 1, 1, 0, 11 }, /* U */
1212  { 2, 1, 1, 0, 11 }, /* V */
1213  },
1214  .flags = AV_PIX_FMT_FLAG_PLANAR,
1215  },
1217  .name = "yuv420p12be",
1218  .nb_components = 3,
1219  .log2_chroma_w = 1,
1220  .log2_chroma_h = 1,
1221  .comp = {
1222  { 0, 1, 1, 0, 11 }, /* Y */
1223  { 1, 1, 1, 0, 11 }, /* U */
1224  { 2, 1, 1, 0, 11 }, /* V */
1225  },
1227  },
1229  .name = "yuv420p14le",
1230  .nb_components = 3,
1231  .log2_chroma_w = 1,
1232  .log2_chroma_h = 1,
1233  .comp = {
1234  { 0, 1, 1, 0, 13 }, /* Y */
1235  { 1, 1, 1, 0, 13 }, /* U */
1236  { 2, 1, 1, 0, 13 }, /* V */
1237  },
1238  .flags = AV_PIX_FMT_FLAG_PLANAR,
1239  },
1241  .name = "yuv420p14be",
1242  .nb_components = 3,
1243  .log2_chroma_w = 1,
1244  .log2_chroma_h = 1,
1245  .comp = {
1246  { 0, 1, 1, 0, 13 }, /* Y */
1247  { 1, 1, 1, 0, 13 }, /* U */
1248  { 2, 1, 1, 0, 13 }, /* V */
1249  },
1251  },
1253  .name = "yuv420p16le",
1254  .nb_components = 3,
1255  .log2_chroma_w = 1,
1256  .log2_chroma_h = 1,
1257  .comp = {
1258  { 0, 1, 1, 0, 15 }, /* Y */
1259  { 1, 1, 1, 0, 15 }, /* U */
1260  { 2, 1, 1, 0, 15 }, /* V */
1261  },
1262  .flags = AV_PIX_FMT_FLAG_PLANAR,
1263  },
1265  .name = "yuv420p16be",
1266  .nb_components = 3,
1267  .log2_chroma_w = 1,
1268  .log2_chroma_h = 1,
1269  .comp = {
1270  { 0, 1, 1, 0, 15 }, /* Y */
1271  { 1, 1, 1, 0, 15 }, /* U */
1272  { 2, 1, 1, 0, 15 }, /* V */
1273  },
1275  },
1276  [AV_PIX_FMT_YUV422P9LE] = {
1277  .name = "yuv422p9le",
1278  .nb_components = 3,
1279  .log2_chroma_w = 1,
1280  .log2_chroma_h = 0,
1281  .comp = {
1282  { 0, 1, 1, 0, 8 }, /* Y */
1283  { 1, 1, 1, 0, 8 }, /* U */
1284  { 2, 1, 1, 0, 8 }, /* V */
1285  },
1286  .flags = AV_PIX_FMT_FLAG_PLANAR,
1287  },
1288  [AV_PIX_FMT_YUV422P9BE] = {
1289  .name = "yuv422p9be",
1290  .nb_components = 3,
1291  .log2_chroma_w = 1,
1292  .log2_chroma_h = 0,
1293  .comp = {
1294  { 0, 1, 1, 0, 8 }, /* Y */
1295  { 1, 1, 1, 0, 8 }, /* U */
1296  { 2, 1, 1, 0, 8 }, /* V */
1297  },
1299  },
1301  .name = "yuv422p10le",
1302  .nb_components = 3,
1303  .log2_chroma_w = 1,
1304  .log2_chroma_h = 0,
1305  .comp = {
1306  { 0, 1, 1, 0, 9 }, /* Y */
1307  { 1, 1, 1, 0, 9 }, /* U */
1308  { 2, 1, 1, 0, 9 }, /* V */
1309  },
1310  .flags = AV_PIX_FMT_FLAG_PLANAR,
1311  },
1313  .name = "yuv422p10be",
1314  .nb_components = 3,
1315  .log2_chroma_w = 1,
1316  .log2_chroma_h = 0,
1317  .comp = {
1318  { 0, 1, 1, 0, 9 }, /* Y */
1319  { 1, 1, 1, 0, 9 }, /* U */
1320  { 2, 1, 1, 0, 9 }, /* V */
1321  },
1323  },
1325  .name = "yuv422p12le",
1326  .nb_components = 3,
1327  .log2_chroma_w = 1,
1328  .log2_chroma_h = 0,
1329  .comp = {
1330  { 0, 1, 1, 0, 11 }, /* Y */
1331  { 1, 1, 1, 0, 11 }, /* U */
1332  { 2, 1, 1, 0, 11 }, /* V */
1333  },
1334  .flags = AV_PIX_FMT_FLAG_PLANAR,
1335  },
1337  .name = "yuv422p12be",
1338  .nb_components = 3,
1339  .log2_chroma_w = 1,
1340  .log2_chroma_h = 0,
1341  .comp = {
1342  { 0, 1, 1, 0, 11 }, /* Y */
1343  { 1, 1, 1, 0, 11 }, /* U */
1344  { 2, 1, 1, 0, 11 }, /* V */
1345  },
1347  },
1349  .name = "yuv422p14le",
1350  .nb_components = 3,
1351  .log2_chroma_w = 1,
1352  .log2_chroma_h = 0,
1353  .comp = {
1354  { 0, 1, 1, 0, 13 }, /* Y */
1355  { 1, 1, 1, 0, 13 }, /* U */
1356  { 2, 1, 1, 0, 13 }, /* V */
1357  },
1358  .flags = AV_PIX_FMT_FLAG_PLANAR,
1359  },
1361  .name = "yuv422p14be",
1362  .nb_components = 3,
1363  .log2_chroma_w = 1,
1364  .log2_chroma_h = 0,
1365  .comp = {
1366  { 0, 1, 1, 0, 13 }, /* Y */
1367  { 1, 1, 1, 0, 13 }, /* U */
1368  { 2, 1, 1, 0, 13 }, /* V */
1369  },
1371  },
1373  .name = "yuv422p16le",
1374  .nb_components = 3,
1375  .log2_chroma_w = 1,
1376  .log2_chroma_h = 0,
1377  .comp = {
1378  { 0, 1, 1, 0, 15 }, /* Y */
1379  { 1, 1, 1, 0, 15 }, /* U */
1380  { 2, 1, 1, 0, 15 }, /* V */
1381  },
1382  .flags = AV_PIX_FMT_FLAG_PLANAR,
1383  },
1385  .name = "yuv422p16be",
1386  .nb_components = 3,
1387  .log2_chroma_w = 1,
1388  .log2_chroma_h = 0,
1389  .comp = {
1390  { 0, 1, 1, 0, 15 }, /* Y */
1391  { 1, 1, 1, 0, 15 }, /* U */
1392  { 2, 1, 1, 0, 15 }, /* V */
1393  },
1395  },
1397  .name = "yuv444p16le",
1398  .nb_components = 3,
1399  .log2_chroma_w = 0,
1400  .log2_chroma_h = 0,
1401  .comp = {
1402  { 0, 1, 1, 0, 15 }, /* Y */
1403  { 1, 1, 1, 0, 15 }, /* U */
1404  { 2, 1, 1, 0, 15 }, /* V */
1405  },
1406  .flags = AV_PIX_FMT_FLAG_PLANAR,
1407  },
1409  .name = "yuv444p16be",
1410  .nb_components = 3,
1411  .log2_chroma_w = 0,
1412  .log2_chroma_h = 0,
1413  .comp = {
1414  { 0, 1, 1, 0, 15 }, /* Y */
1415  { 1, 1, 1, 0, 15 }, /* U */
1416  { 2, 1, 1, 0, 15 }, /* V */
1417  },
1419  },
1421  .name = "yuv444p10le",
1422  .nb_components = 3,
1423  .log2_chroma_w = 0,
1424  .log2_chroma_h = 0,
1425  .comp = {
1426  { 0, 1, 1, 0, 9 }, /* Y */
1427  { 1, 1, 1, 0, 9 }, /* U */
1428  { 2, 1, 1, 0, 9 }, /* V */
1429  },
1430  .flags = AV_PIX_FMT_FLAG_PLANAR,
1431  },
1433  .name = "yuv444p10be",
1434  .nb_components = 3,
1435  .log2_chroma_w = 0,
1436  .log2_chroma_h = 0,
1437  .comp = {
1438  { 0, 1, 1, 0, 9 }, /* Y */
1439  { 1, 1, 1, 0, 9 }, /* U */
1440  { 2, 1, 1, 0, 9 }, /* V */
1441  },
1443  },
1444  [AV_PIX_FMT_YUV444P9LE] = {
1445  .name = "yuv444p9le",
1446  .nb_components = 3,
1447  .log2_chroma_w = 0,
1448  .log2_chroma_h = 0,
1449  .comp = {
1450  { 0, 1, 1, 0, 8 }, /* Y */
1451  { 1, 1, 1, 0, 8 }, /* U */
1452  { 2, 1, 1, 0, 8 }, /* V */
1453  },
1454  .flags = AV_PIX_FMT_FLAG_PLANAR,
1455  },
1456  [AV_PIX_FMT_YUV444P9BE] = {
1457  .name = "yuv444p9be",
1458  .nb_components = 3,
1459  .log2_chroma_w = 0,
1460  .log2_chroma_h = 0,
1461  .comp = {
1462  { 0, 1, 1, 0, 8 }, /* Y */
1463  { 1, 1, 1, 0, 8 }, /* U */
1464  { 2, 1, 1, 0, 8 }, /* V */
1465  },
1467  },
1469  .name = "yuv444p12le",
1470  .nb_components = 3,
1471  .log2_chroma_w = 0,
1472  .log2_chroma_h = 0,
1473  .comp = {
1474  { 0, 1, 1, 0, 11 }, /* Y */
1475  { 1, 1, 1, 0, 11 }, /* U */
1476  { 2, 1, 1, 0, 11 }, /* V */
1477  },
1478  .flags = AV_PIX_FMT_FLAG_PLANAR,
1479  },
1481  .name = "yuv444p12be",
1482  .nb_components = 3,
1483  .log2_chroma_w = 0,
1484  .log2_chroma_h = 0,
1485  .comp = {
1486  { 0, 1, 1, 0, 11 }, /* Y */
1487  { 1, 1, 1, 0, 11 }, /* U */
1488  { 2, 1, 1, 0, 11 }, /* V */
1489  },
1491  },
1493  .name = "yuv444p14le",
1494  .nb_components = 3,
1495  .log2_chroma_w = 0,
1496  .log2_chroma_h = 0,
1497  .comp = {
1498  { 0, 1, 1, 0, 13 }, /* Y */
1499  { 1, 1, 1, 0, 13 }, /* U */
1500  { 2, 1, 1, 0, 13 }, /* V */
1501  },
1502  .flags = AV_PIX_FMT_FLAG_PLANAR,
1503  },
1505  .name = "yuv444p14be",
1506  .nb_components = 3,
1507  .log2_chroma_w = 0,
1508  .log2_chroma_h = 0,
1509  .comp = {
1510  { 0, 1, 1, 0, 13 }, /* Y */
1511  { 1, 1, 1, 0, 13 }, /* U */
1512  { 2, 1, 1, 0, 13 }, /* V */
1513  },
1515  },
1516  [AV_PIX_FMT_DXVA2_VLD] = {
1517  .name = "dxva2_vld",
1518  .log2_chroma_w = 1,
1519  .log2_chroma_h = 1,
1520  .flags = AV_PIX_FMT_FLAG_HWACCEL,
1521  },
1522  [AV_PIX_FMT_VDA_VLD] = {
1523  .name = "vda_vld",
1524  .log2_chroma_w = 1,
1525  .log2_chroma_h = 1,
1526  .flags = AV_PIX_FMT_FLAG_HWACCEL,
1527  },
1528  [AV_PIX_FMT_GRAY8A] = {
1529  .name = "gray8a",
1530  .nb_components = 2,
1531  .comp = {
1532  { 0, 1, 1, 0, 7 }, /* Y */
1533  { 0, 1, 2, 0, 7 }, /* A */
1534  },
1535  .flags = AV_PIX_FMT_FLAG_ALPHA,
1536  },
1537  [AV_PIX_FMT_GBRP] = {
1538  .name = "gbrp",
1539  .nb_components = 3,
1540  .log2_chroma_w = 0,
1541  .log2_chroma_h = 0,
1542  .comp = {
1543  { 2, 0, 1, 0, 7 }, /* R */
1544  { 0, 0, 1, 0, 7 }, /* G */
1545  { 1, 0, 1, 0, 7 }, /* B */
1546  },
1548  },
1549  [AV_PIX_FMT_GBRP9LE] = {
1550  .name = "gbrp9le",
1551  .nb_components = 3,
1552  .log2_chroma_w = 0,
1553  .log2_chroma_h = 0,
1554  .comp = {
1555  { 2, 1, 1, 0, 8 }, /* R */
1556  { 0, 1, 1, 0, 8 }, /* G */
1557  { 1, 1, 1, 0, 8 }, /* B */
1558  },
1560  },
1561  [AV_PIX_FMT_GBRP9BE] = {
1562  .name = "gbrp9be",
1563  .nb_components = 3,
1564  .log2_chroma_w = 0,
1565  .log2_chroma_h = 0,
1566  .comp = {
1567  { 2, 1, 1, 0, 8 }, /* R */
1568  { 0, 1, 1, 0, 8 }, /* G */
1569  { 1, 1, 1, 0, 8 }, /* B */
1570  },
1572  },
1573  [AV_PIX_FMT_GBRP10LE] = {
1574  .name = "gbrp10le",
1575  .nb_components = 3,
1576  .log2_chroma_w = 0,
1577  .log2_chroma_h = 0,
1578  .comp = {
1579  { 2, 1, 1, 0, 9 }, /* R */
1580  { 0, 1, 1, 0, 9 }, /* G */
1581  { 1, 1, 1, 0, 9 }, /* B */
1582  },
1584  },
1585  [AV_PIX_FMT_GBRP10BE] = {
1586  .name = "gbrp10be",
1587  .nb_components = 3,
1588  .log2_chroma_w = 0,
1589  .log2_chroma_h = 0,
1590  .comp = {
1591  { 2, 1, 1, 0, 9 }, /* R */
1592  { 0, 1, 1, 0, 9 }, /* G */
1593  { 1, 1, 1, 0, 9 }, /* B */
1594  },
1596  },
1597  [AV_PIX_FMT_GBRP12LE] = {
1598  .name = "gbrp12le",
1599  .nb_components = 3,
1600  .log2_chroma_w = 0,
1601  .log2_chroma_h = 0,
1602  .comp = {
1603  { 2, 1, 1, 0, 11 }, /* R */
1604  { 0, 1, 1, 0, 11 }, /* G */
1605  { 1, 1, 1, 0, 11 }, /* B */
1606  },
1608  },
1609  [AV_PIX_FMT_GBRP12BE] = {
1610  .name = "gbrp12be",
1611  .nb_components = 3,
1612  .log2_chroma_w = 0,
1613  .log2_chroma_h = 0,
1614  .comp = {
1615  { 2, 1, 1, 0, 11 }, /* R */
1616  { 0, 1, 1, 0, 11 }, /* G */
1617  { 1, 1, 1, 0, 11 }, /* B */
1618  },
1620  },
1621  [AV_PIX_FMT_GBRP14LE] = {
1622  .name = "gbrp14le",
1623  .nb_components = 3,
1624  .log2_chroma_w = 0,
1625  .log2_chroma_h = 0,
1626  .comp = {
1627  { 2, 1, 1, 0, 13 }, /* R */
1628  { 0, 1, 1, 0, 13 }, /* G */
1629  { 1, 1, 1, 0, 13 }, /* B */
1630  },
1632  },
1633  [AV_PIX_FMT_GBRP14BE] = {
1634  .name = "gbrp14be",
1635  .nb_components = 3,
1636  .log2_chroma_w = 0,
1637  .log2_chroma_h = 0,
1638  .comp = {
1639  { 2, 1, 1, 0, 13 }, /* R */
1640  { 0, 1, 1, 0, 13 }, /* G */
1641  { 1, 1, 1, 0, 13 }, /* B */
1642  },
1644  },
1645  [AV_PIX_FMT_GBRP16LE] = {
1646  .name = "gbrp16le",
1647  .nb_components = 3,
1648  .log2_chroma_w = 0,
1649  .log2_chroma_h = 0,
1650  .comp = {
1651  { 2, 1, 1, 0, 15 }, /* R */
1652  { 0, 1, 1, 0, 15 }, /* G */
1653  { 1, 1, 1, 0, 15 }, /* B */
1654  },
1656  },
1657  [AV_PIX_FMT_GBRP16BE] = {
1658  .name = "gbrp16be",
1659  .nb_components = 3,
1660  .log2_chroma_w = 0,
1661  .log2_chroma_h = 0,
1662  .comp = {
1663  { 2, 1, 1, 0, 15 }, /* R */
1664  { 0, 1, 1, 0, 15 }, /* G */
1665  { 1, 1, 1, 0, 15 }, /* B */
1666  },
1668  },
1669  [AV_PIX_FMT_GBRAP] = {
1670  .name = "gbrap",
1671  .nb_components = 4,
1672  .log2_chroma_w = 0,
1673  .log2_chroma_h = 0,
1674  .comp = {
1675  { 2, 0, 1, 0, 7 }, /* R */
1676  { 0, 0, 1, 0, 7 }, /* G */
1677  { 1, 0, 1, 0, 7 }, /* B */
1678  { 3, 0, 1, 0, 7 }, /* A */
1679  },
1681  },
1682  [AV_PIX_FMT_GBRAP16LE] = {
1683  .name = "gbrap16le",
1684  .nb_components = 4,
1685  .log2_chroma_w = 0,
1686  .log2_chroma_h = 0,
1687  .comp = {
1688  { 2, 1, 1, 0, 15 }, /* R */
1689  { 0, 1, 1, 0, 15 }, /* G */
1690  { 1, 1, 1, 0, 15 }, /* B */
1691  { 3, 1, 1, 0, 15 }, /* A */
1692  },
1694  },
1695  [AV_PIX_FMT_GBRAP16BE] = {
1696  .name = "gbrap16be",
1697  .nb_components = 4,
1698  .log2_chroma_w = 0,
1699  .log2_chroma_h = 0,
1700  .comp = {
1701  { 2, 1, 1, 0, 15 }, /* R */
1702  { 0, 1, 1, 0, 15 }, /* G */
1703  { 1, 1, 1, 0, 15 }, /* B */
1704  { 3, 1, 1, 0, 15 }, /* A */
1705  },
1707  },
1708  [AV_PIX_FMT_VDPAU] = {
1709  .name = "vdpau",
1710  .log2_chroma_w = 1,
1711  .log2_chroma_h = 1,
1712  .flags = AV_PIX_FMT_FLAG_HWACCEL,
1713  },
1714  [AV_PIX_FMT_XYZ12LE] = {
1715  .name = "xyz12le",
1716  .nb_components = 3,
1717  .log2_chroma_w = 0,
1718  .log2_chroma_h = 0,
1719  .comp = {
1720  { 0, 5, 1, 4, 11 }, /* X */
1721  { 0, 5, 3, 4, 11 }, /* Y */
1722  { 0, 5, 5, 4, 11 }, /* Z */
1723  },
1724  /*.flags = -- not used*/
1725  },
1726  [AV_PIX_FMT_XYZ12BE] = {
1727  .name = "xyz12be",
1728  .nb_components = 3,
1729  .log2_chroma_w = 0,
1730  .log2_chroma_h = 0,
1731  .comp = {
1732  { 0, 5, 1, 4, 11 }, /* X */
1733  { 0, 5, 3, 4, 11 }, /* Y */
1734  { 0, 5, 5, 4, 11 }, /* Z */
1735  },
1736  .flags = AV_PIX_FMT_FLAG_BE,
1737  },
1738 };
1739 
1740 static enum AVPixelFormat get_pix_fmt_internal(const char *name)
1741 {
1742  enum AVPixelFormat pix_fmt;
1743 
1744  for (pix_fmt = 0; pix_fmt < AV_PIX_FMT_NB; pix_fmt++)
1745  if (av_pix_fmt_descriptors[pix_fmt].name &&
1746  !strcmp(av_pix_fmt_descriptors[pix_fmt].name, name))
1747  return pix_fmt;
1748 
1749  return AV_PIX_FMT_NONE;
1750 }
1751 
1753 {
1754  return (unsigned)pix_fmt < AV_PIX_FMT_NB ?
1755  av_pix_fmt_descriptors[pix_fmt].name : NULL;
1756 }
1757 
1758 #if HAVE_BIGENDIAN
1759 # define X_NE(be, le) be
1760 #else
1761 # define X_NE(be, le) le
1762 #endif
1763 
1765 {
1766  enum AVPixelFormat pix_fmt;
1767 
1768  if (!strcmp(name, "rgb32"))
1769  name = X_NE("argb", "bgra");
1770  else if (!strcmp(name, "bgr32"))
1771  name = X_NE("abgr", "rgba");
1772 
1773  pix_fmt = get_pix_fmt_internal(name);
1774  if (pix_fmt == AV_PIX_FMT_NONE) {
1775  char name2[32];
1776 
1777  snprintf(name2, sizeof(name2), "%s%s", name, X_NE("be", "le"));
1778  pix_fmt = get_pix_fmt_internal(name2);
1779  }
1780  return pix_fmt;
1781 }
1782 
1784 {
1785  int c, bits = 0;
1786  int log2_pixels = pixdesc->log2_chroma_w + pixdesc->log2_chroma_h;
1787 
1788  for (c = 0; c < pixdesc->nb_components; c++) {
1789  int s = c == 1 || c == 2 ? 0 : log2_pixels;
1790  bits += (pixdesc->comp[c].depth_minus1 + 1) << s;
1791  }
1792 
1793  return bits >> log2_pixels;
1794 }
1795 
1797 {
1798  int c, bits = 0;
1799  int log2_pixels = pixdesc->log2_chroma_w + pixdesc->log2_chroma_h;
1800  int steps[4] = {0};
1801 
1802  for (c = 0; c < pixdesc->nb_components; c++) {
1803  const AVComponentDescriptor *comp = &pixdesc->comp[c];
1804  int s = c == 1 || c == 2 ? 0 : log2_pixels;
1805  steps[comp->plane] = (comp->step_minus1 + 1) << s;
1806  }
1807  for (c = 0; c < 4; c++)
1808  bits += steps[c];
1809 
1810  if(!(pixdesc->flags & AV_PIX_FMT_FLAG_BITSTREAM))
1811  bits *= 8;
1812 
1813  return bits >> log2_pixels;
1814 }
1815 
1816 char *av_get_pix_fmt_string (char *buf, int buf_size, enum AVPixelFormat pix_fmt)
1817 {
1818  /* print header */
1819  if (pix_fmt < 0) {
1820  snprintf (buf, buf_size, "name" " nb_components" " nb_bits");
1821  } else {
1822  const AVPixFmtDescriptor *pixdesc = &av_pix_fmt_descriptors[pix_fmt];
1823  snprintf(buf, buf_size, "%-11s %7d %10d", pixdesc->name,
1824  pixdesc->nb_components, av_get_bits_per_pixel(pixdesc));
1825  }
1826 
1827  return buf;
1828 }
1829 
1831 {
1832  if (pix_fmt < 0 || pix_fmt >= AV_PIX_FMT_NB)
1833  return NULL;
1834  return &av_pix_fmt_descriptors[pix_fmt];
1835 }
1836 
1838 {
1839  if (!prev)
1840  return &av_pix_fmt_descriptors[0];
1841  while (prev - av_pix_fmt_descriptors < FF_ARRAY_ELEMS(av_pix_fmt_descriptors) - 1) {
1842  prev++;
1843  if (prev->name)
1844  return prev;
1845  }
1846  return NULL;
1847 }
1848 
1850 {
1851  if (desc < av_pix_fmt_descriptors ||
1852  desc >= av_pix_fmt_descriptors + FF_ARRAY_ELEMS(av_pix_fmt_descriptors))
1853  return AV_PIX_FMT_NONE;
1854 
1855  return desc - av_pix_fmt_descriptors;
1856 }
1857 
1859  int *h_shift, int *v_shift)
1860 {
1861  const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pix_fmt);
1862  if (!desc)
1863  return AVERROR(ENOSYS);
1864  *h_shift = desc->log2_chroma_w;
1865  *v_shift = desc->log2_chroma_h;
1866 
1867  return 0;
1868 }
1869 
1871 {
1872  const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pix_fmt);
1873  int i, planes[4] = { 0 }, ret = 0;
1874 
1875  if (!desc)
1876  return AVERROR(EINVAL);
1877 
1878  for (i = 0; i < desc->nb_components; i++)
1879  planes[desc->comp[i].plane] = 1;
1880  for (i = 0; i < FF_ARRAY_ELEMS(planes); i++)
1881  ret += planes[i];
1882  return ret;
1883 }
1884 
1886  int i, j;
1887 
1888  for (i=0; i<FF_ARRAY_ELEMS(av_pix_fmt_descriptors); i++) {
1889  const AVPixFmtDescriptor *d = &av_pix_fmt_descriptors[i];
1890  uint8_t fill[4][8+6+3] = {{0}};
1891  uint8_t *data[4] = {fill[0], fill[1], fill[2], fill[3]};
1892  int linesize[4] = {0,0,0,0};
1893  uint16_t tmp[2];
1894 
1895  if (!d->name && !d->nb_components && !d->log2_chroma_w && !d->log2_chroma_h && !d->flags)
1896  continue;
1897 // av_log(NULL, AV_LOG_DEBUG, "Checking: %s\n", d->name);
1898  av_assert0(d->log2_chroma_w <= 3);
1899  av_assert0(d->log2_chroma_h <= 3);
1900  av_assert0(d->nb_components <= 4);
1901  av_assert0(d->name && d->name[0]);
1902  av_assert0((d->nb_components==4 || d->nb_components==2) == !!(d->flags & AV_PIX_FMT_FLAG_ALPHA));
1903  av_assert2(av_get_pix_fmt(d->name) == i);
1904 
1905  for (j=0; j<FF_ARRAY_ELEMS(d->comp); j++) {
1906  const AVComponentDescriptor *c = &d->comp[j];
1907  if(j>=d->nb_components) {
1908  av_assert0(!c->plane && !c->step_minus1 && !c->offset_plus1 && !c->shift && !c->depth_minus1);
1909  continue;
1910  }
1911  if (d->flags & AV_PIX_FMT_FLAG_BITSTREAM) {
1913  } else {
1914  av_assert0(8*(c->step_minus1+1) >= c->depth_minus1+1);
1915  }
1916  av_read_image_line(tmp, (void*)data, linesize, d, 0, 0, j, 2, 0);
1917  av_assert0(tmp[0] == 0 && tmp[1] == 0);
1918  tmp[0] = tmp[1] = (1<<(c->depth_minus1 + 1)) - 1;
1919  av_write_image_line(tmp, data, linesize, d, 0, 0, j, 2);
1920  }
1921  }
1922 }
1923 
1924 
1926 {
1927  const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pix_fmt);
1928  char name[16];
1929  int i;
1930 
1931  if (!desc || strlen(desc->name) < 2)
1932  return AV_PIX_FMT_NONE;
1933  av_strlcpy(name, desc->name, sizeof(name));
1934  i = strlen(name) - 2;
1935  if (strcmp(name + i, "be") && strcmp(name + i, "le"))
1936  return AV_PIX_FMT_NONE;
1937 
1938  name[i] ^= 'b' ^ 'l';
1939 
1940  return get_pix_fmt_internal(name);
1941 }