FFmpeg
 All Data Structures 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 "common.h"
26 #include "pixfmt.h"
27 #include "pixdesc.h"
28 
29 #include "intreadwrite.h"
30 
31 void av_read_image_line(uint16_t *dst,
32  const uint8_t *data[4], const int linesize[4],
33  const AVPixFmtDescriptor *desc,
34  int x, int y, int c, int w,
35  int read_pal_component)
36 {
38  int plane = comp.plane;
39  int depth = comp.depth_minus1 + 1;
40  int mask = (1 << depth) - 1;
41  int shift = comp.shift;
42  int step = comp.step_minus1 + 1;
43  int flags = desc->flags;
44 
45  if (flags & PIX_FMT_BITSTREAM) {
46  int skip = x * step + comp.offset_plus1 - 1;
47  const uint8_t *p = data[plane] + y * linesize[plane] + (skip >> 3);
48  int shift = 8 - depth - (skip & 7);
49 
50  while (w--) {
51  int val = (*p >> shift) & mask;
52  if (read_pal_component)
53  val = data[1][4*val + c];
54  shift -= step;
55  p -= shift >> 3;
56  shift &= 7;
57  *dst++ = val;
58  }
59  } else {
60  const uint8_t *p = data[plane] + y * linesize[plane] +
61  x * step + comp.offset_plus1 - 1;
62  int is_8bit = shift + depth <= 8;
63 
64  if (is_8bit)
65  p += !!(flags & PIX_FMT_BE);
66 
67  while (w--) {
68  int val = is_8bit ? *p :
69  flags & PIX_FMT_BE ? AV_RB16(p) : AV_RL16(p);
70  val = (val >> shift) & mask;
71  if (read_pal_component)
72  val = data[1][4 * val + c];
73  p += step;
74  *dst++ = val;
75  }
76  }
77 }
78 
79 void av_write_image_line(const uint16_t *src,
80  uint8_t *data[4], const int linesize[4],
81  const AVPixFmtDescriptor *desc,
82  int x, int y, int c, int w)
83 {
85  int plane = comp.plane;
86  int depth = comp.depth_minus1 + 1;
87  int step = comp.step_minus1 + 1;
88  int flags = desc->flags;
89 
90  if (flags & PIX_FMT_BITSTREAM) {
91  int skip = x * step + comp.offset_plus1 - 1;
92  uint8_t *p = data[plane] + y * linesize[plane] + (skip >> 3);
93  int shift = 8 - depth - (skip & 7);
94 
95  while (w--) {
96  *p |= *src++ << shift;
97  shift -= step;
98  p -= shift >> 3;
99  shift &= 7;
100  }
101  } else {
102  int shift = comp.shift;
103  uint8_t *p = data[plane] + y * linesize[plane] +
104  x * step + comp.offset_plus1 - 1;
105 
106  if (shift + depth <= 8) {
107  p += !!(flags & PIX_FMT_BE);
108  while (w--) {
109  *p |= (*src++ << shift);
110  p += step;
111  }
112  } else {
113  while (w--) {
114  if (flags & PIX_FMT_BE) {
115  uint16_t val = AV_RB16(p) | (*src++ << shift);
116  AV_WB16(p, val);
117  } else {
118  uint16_t val = AV_RL16(p) | (*src++ << shift);
119  AV_WL16(p, val);
120  }
121  p += step;
122  }
123  }
124  }
125 }
126 
127 #if !FF_API_PIX_FMT_DESC
128 static
129 #endif
131  [AV_PIX_FMT_YUV420P] = {
132  .name = "yuv420p",
133  .nb_components = 3,
134  .log2_chroma_w = 1,
135  .log2_chroma_h = 1,
136  .comp = {
137  { 0, 0, 1, 0, 7 }, /* Y */
138  { 1, 0, 1, 0, 7 }, /* U */
139  { 2, 0, 1, 0, 7 }, /* V */
140  },
141  .flags = PIX_FMT_PLANAR,
142  },
143  [AV_PIX_FMT_YUYV422] = {
144  .name = "yuyv422",
145  .nb_components = 3,
146  .log2_chroma_w = 1,
147  .log2_chroma_h = 0,
148  .comp = {
149  { 0, 1, 1, 0, 7 }, /* Y */
150  { 0, 3, 2, 0, 7 }, /* U */
151  { 0, 3, 4, 0, 7 }, /* V */
152  },
153  },
154  [AV_PIX_FMT_RGB24] = {
155  .name = "rgb24",
156  .nb_components = 3,
157  .log2_chroma_w = 0,
158  .log2_chroma_h = 0,
159  .comp = {
160  { 0, 2, 1, 0, 7 }, /* R */
161  { 0, 2, 2, 0, 7 }, /* G */
162  { 0, 2, 3, 0, 7 }, /* B */
163  },
164  .flags = PIX_FMT_RGB,
165  },
166  [AV_PIX_FMT_BGR24] = {
167  .name = "bgr24",
168  .nb_components = 3,
169  .log2_chroma_w = 0,
170  .log2_chroma_h = 0,
171  .comp = {
172  { 0, 2, 3, 0, 7 }, /* R */
173  { 0, 2, 2, 0, 7 }, /* G */
174  { 0, 2, 1, 0, 7 }, /* B */
175  },
176  .flags = PIX_FMT_RGB,
177  },
178  [AV_PIX_FMT_YUV422P] = {
179  .name = "yuv422p",
180  .nb_components = 3,
181  .log2_chroma_w = 1,
182  .log2_chroma_h = 0,
183  .comp = {
184  { 0, 0, 1, 0, 7 }, /* Y */
185  { 1, 0, 1, 0, 7 }, /* U */
186  { 2, 0, 1, 0, 7 }, /* V */
187  },
188  .flags = PIX_FMT_PLANAR,
189  },
190  [AV_PIX_FMT_YUV444P] = {
191  .name = "yuv444p",
192  .nb_components = 3,
193  .log2_chroma_w = 0,
194  .log2_chroma_h = 0,
195  .comp = {
196  { 0, 0, 1, 0, 7 }, /* Y */
197  { 1, 0, 1, 0, 7 }, /* U */
198  { 2, 0, 1, 0, 7 }, /* V */
199  },
200  .flags = PIX_FMT_PLANAR,
201  },
202  [AV_PIX_FMT_YUV410P] = {
203  .name = "yuv410p",
204  .nb_components = 3,
205  .log2_chroma_w = 2,
206  .log2_chroma_h = 2,
207  .comp = {
208  { 0, 0, 1, 0, 7 }, /* Y */
209  { 1, 0, 1, 0, 7 }, /* U */
210  { 2, 0, 1, 0, 7 }, /* V */
211  },
212  .flags = PIX_FMT_PLANAR,
213  },
214  [AV_PIX_FMT_YUV411P] = {
215  .name = "yuv411p",
216  .nb_components = 3,
217  .log2_chroma_w = 2,
218  .log2_chroma_h = 0,
219  .comp = {
220  { 0, 0, 1, 0, 7 }, /* Y */
221  { 1, 0, 1, 0, 7 }, /* U */
222  { 2, 0, 1, 0, 7 }, /* V */
223  },
224  .flags = PIX_FMT_PLANAR,
225  },
226  [AV_PIX_FMT_GRAY8] = {
227  .name = "gray",
228  .nb_components = 1,
229  .log2_chroma_w = 0,
230  .log2_chroma_h = 0,
231  .comp = {
232  { 0, 0, 1, 0, 7 }, /* Y */
233  },
234  .flags = PIX_FMT_PSEUDOPAL,
235  },
237  .name = "monow",
238  .nb_components = 1,
239  .log2_chroma_w = 0,
240  .log2_chroma_h = 0,
241  .comp = {
242  { 0, 0, 1, 0, 0 }, /* Y */
243  },
244  .flags = PIX_FMT_BITSTREAM,
245  },
247  .name = "monob",
248  .nb_components = 1,
249  .log2_chroma_w = 0,
250  .log2_chroma_h = 0,
251  .comp = {
252  { 0, 0, 1, 7, 0 }, /* Y */
253  },
254  .flags = PIX_FMT_BITSTREAM,
255  },
256  [AV_PIX_FMT_PAL8] = {
257  .name = "pal8",
258  .nb_components = 1,
259  .log2_chroma_w = 0,
260  .log2_chroma_h = 0,
261  .comp = {
262  { 0, 0, 1, 0, 7 },
263  },
264  .flags = PIX_FMT_PAL,
265  },
266  [AV_PIX_FMT_YUVJ420P] = {
267  .name = "yuvj420p",
268  .nb_components = 3,
269  .log2_chroma_w = 1,
270  .log2_chroma_h = 1,
271  .comp = {
272  { 0, 0, 1, 0, 7 }, /* Y */
273  { 1, 0, 1, 0, 7 }, /* U */
274  { 2, 0, 1, 0, 7 }, /* V */
275  },
276  .flags = PIX_FMT_PLANAR,
277  },
278  [AV_PIX_FMT_YUVJ422P] = {
279  .name = "yuvj422p",
280  .nb_components = 3,
281  .log2_chroma_w = 1,
282  .log2_chroma_h = 0,
283  .comp = {
284  { 0, 0, 1, 0, 7 }, /* Y */
285  { 1, 0, 1, 0, 7 }, /* U */
286  { 2, 0, 1, 0, 7 }, /* V */
287  },
288  .flags = PIX_FMT_PLANAR,
289  },
290  [AV_PIX_FMT_YUVJ444P] = {
291  .name = "yuvj444p",
292  .nb_components = 3,
293  .log2_chroma_w = 0,
294  .log2_chroma_h = 0,
295  .comp = {
296  { 0, 0, 1, 0, 7 }, /* Y */
297  { 1, 0, 1, 0, 7 }, /* U */
298  { 2, 0, 1, 0, 7 }, /* V */
299  },
300  .flags = PIX_FMT_PLANAR,
301  },
303  .name = "xvmcmc",
304  .flags = PIX_FMT_HWACCEL,
305  },
307  .name = "xvmcidct",
308  .flags = PIX_FMT_HWACCEL,
309  },
310  [AV_PIX_FMT_UYVY422] = {
311  .name = "uyvy422",
312  .nb_components = 3,
313  .log2_chroma_w = 1,
314  .log2_chroma_h = 0,
315  .comp = {
316  { 0, 1, 2, 0, 7 }, /* Y */
317  { 0, 3, 1, 0, 7 }, /* U */
318  { 0, 3, 3, 0, 7 }, /* V */
319  },
320  },
322  .name = "uyyvyy411",
323  .nb_components = 3,
324  .log2_chroma_w = 2,
325  .log2_chroma_h = 0,
326  .comp = {
327  { 0, 3, 2, 0, 7 }, /* Y */
328  { 0, 5, 1, 0, 7 }, /* U */
329  { 0, 5, 4, 0, 7 }, /* V */
330  },
331  },
332  [AV_PIX_FMT_BGR8] = {
333  .name = "bgr8",
334  .nb_components = 3,
335  .log2_chroma_w = 0,
336  .log2_chroma_h = 0,
337  .comp = {
338  { 0, 0, 1, 0, 2 }, /* R */
339  { 0, 0, 1, 3, 2 }, /* G */
340  { 0, 0, 1, 6, 1 }, /* B */
341  },
342  .flags = PIX_FMT_RGB | PIX_FMT_PSEUDOPAL,
343  },
344  [AV_PIX_FMT_BGR4] = {
345  .name = "bgr4",
346  .nb_components = 3,
347  .log2_chroma_w = 0,
348  .log2_chroma_h = 0,
349  .comp = {
350  { 0, 3, 4, 0, 0 }, /* R */
351  { 0, 3, 2, 0, 1 }, /* G */
352  { 0, 3, 1, 0, 0 }, /* B */
353  },
354  .flags = PIX_FMT_BITSTREAM | PIX_FMT_RGB,
355  },
357  .name = "bgr4_byte",
358  .nb_components = 3,
359  .log2_chroma_w = 0,
360  .log2_chroma_h = 0,
361  .comp = {
362  { 0, 0, 1, 0, 0 }, /* R */
363  { 0, 0, 1, 1, 1 }, /* G */
364  { 0, 0, 1, 3, 0 }, /* B */
365  },
366  .flags = PIX_FMT_RGB | PIX_FMT_PSEUDOPAL,
367  },
368  [AV_PIX_FMT_RGB8] = {
369  .name = "rgb8",
370  .nb_components = 3,
371  .log2_chroma_w = 0,
372  .log2_chroma_h = 0,
373  .comp = {
374  { 0, 0, 1, 6, 1 }, /* R */
375  { 0, 0, 1, 3, 2 }, /* G */
376  { 0, 0, 1, 0, 2 }, /* B */
377  },
378  .flags = PIX_FMT_RGB | PIX_FMT_PSEUDOPAL,
379  },
380  [AV_PIX_FMT_RGB4] = {
381  .name = "rgb4",
382  .nb_components = 3,
383  .log2_chroma_w = 0,
384  .log2_chroma_h = 0,
385  .comp = {
386  { 0, 3, 1, 0, 0 }, /* R */
387  { 0, 3, 2, 0, 1 }, /* G */
388  { 0, 3, 4, 0, 0 }, /* B */
389  },
390  .flags = PIX_FMT_BITSTREAM | PIX_FMT_RGB,
391  },
393  .name = "rgb4_byte",
394  .nb_components = 3,
395  .log2_chroma_w = 0,
396  .log2_chroma_h = 0,
397  .comp = {
398  { 0, 0, 1, 3, 0 }, /* R */
399  { 0, 0, 1, 1, 1 }, /* G */
400  { 0, 0, 1, 0, 0 }, /* B */
401  },
402  .flags = PIX_FMT_RGB | PIX_FMT_PSEUDOPAL,
403  },
404  [AV_PIX_FMT_NV12] = {
405  .name = "nv12",
406  .nb_components = 3,
407  .log2_chroma_w = 1,
408  .log2_chroma_h = 1,
409  .comp = {
410  { 0, 0, 1, 0, 7 }, /* Y */
411  { 1, 1, 1, 0, 7 }, /* U */
412  { 1, 1, 2, 0, 7 }, /* V */
413  },
414  .flags = PIX_FMT_PLANAR,
415  },
416  [AV_PIX_FMT_NV21] = {
417  .name = "nv21",
418  .nb_components = 3,
419  .log2_chroma_w = 1,
420  .log2_chroma_h = 1,
421  .comp = {
422  { 0, 0, 1, 0, 7 }, /* Y */
423  { 1, 1, 2, 0, 7 }, /* U */
424  { 1, 1, 1, 0, 7 }, /* V */
425  },
426  .flags = PIX_FMT_PLANAR,
427  },
428  [AV_PIX_FMT_ARGB] = {
429  .name = "argb",
430  .nb_components = 4,
431  .log2_chroma_w = 0,
432  .log2_chroma_h = 0,
433  .comp = {
434  { 0, 3, 2, 0, 7 }, /* R */
435  { 0, 3, 3, 0, 7 }, /* G */
436  { 0, 3, 4, 0, 7 }, /* B */
437  { 0, 3, 1, 0, 7 }, /* A */
438  },
439  .flags = PIX_FMT_RGB | PIX_FMT_ALPHA,
440  },
441  [AV_PIX_FMT_RGBA] = {
442  .name = "rgba",
443  .nb_components = 4,
444  .log2_chroma_w = 0,
445  .log2_chroma_h = 0,
446  .comp = {
447  { 0, 3, 1, 0, 7 }, /* R */
448  { 0, 3, 2, 0, 7 }, /* G */
449  { 0, 3, 3, 0, 7 }, /* B */
450  { 0, 3, 4, 0, 7 }, /* A */
451  },
452  .flags = PIX_FMT_RGB | PIX_FMT_ALPHA,
453  },
454  [AV_PIX_FMT_ABGR] = {
455  .name = "abgr",
456  .nb_components = 4,
457  .log2_chroma_w = 0,
458  .log2_chroma_h = 0,
459  .comp = {
460  { 0, 3, 4, 0, 7 }, /* R */
461  { 0, 3, 3, 0, 7 }, /* G */
462  { 0, 3, 2, 0, 7 }, /* B */
463  { 0, 3, 1, 0, 7 }, /* A */
464  },
465  .flags = PIX_FMT_RGB | PIX_FMT_ALPHA,
466  },
467  [AV_PIX_FMT_BGRA] = {
468  .name = "bgra",
469  .nb_components = 4,
470  .log2_chroma_w = 0,
471  .log2_chroma_h = 0,
472  .comp = {
473  { 0, 3, 3, 0, 7 }, /* R */
474  { 0, 3, 2, 0, 7 }, /* G */
475  { 0, 3, 1, 0, 7 }, /* B */
476  { 0, 3, 4, 0, 7 }, /* A */
477  },
478  .flags = PIX_FMT_RGB | PIX_FMT_ALPHA,
479  },
480  [AV_PIX_FMT_0RGB] = {
481  .name = "0rgb",
482  .nb_components= 3,
483  .log2_chroma_w= 0,
484  .log2_chroma_h= 0,
485  .comp = {
486  { 0, 3, 2, 0, 7 }, /* R */
487  { 0, 3, 3, 0, 7 }, /* G */
488  { 0, 3, 4, 0, 7 }, /* B */
489  },
490  .flags = PIX_FMT_RGB,
491  },
492  [AV_PIX_FMT_RGB0] = {
493  .name = "rgb0",
494  .nb_components= 3,
495  .log2_chroma_w= 0,
496  .log2_chroma_h= 0,
497  .comp = {
498  { 0, 3, 1, 0, 7 }, /* R */
499  { 0, 3, 2, 0, 7 }, /* G */
500  { 0, 3, 3, 0, 7 }, /* B */
501  { 0, 3, 4, 0, 7 }, /* A */
502  },
503  .flags = PIX_FMT_RGB,
504  },
505  [AV_PIX_FMT_0BGR] = {
506  .name = "0bgr",
507  .nb_components= 3,
508  .log2_chroma_w= 0,
509  .log2_chroma_h= 0,
510  .comp = {
511  { 0, 3, 4, 0, 7 }, /* R */
512  { 0, 3, 3, 0, 7 }, /* G */
513  { 0, 3, 2, 0, 7 }, /* B */
514  },
515  .flags = PIX_FMT_RGB,
516  },
517  [AV_PIX_FMT_BGR0] = {
518  .name = "bgr0",
519  .nb_components= 3,
520  .log2_chroma_w= 0,
521  .log2_chroma_h= 0,
522  .comp = {
523  { 0, 3, 3, 0, 7 }, /* R */
524  { 0, 3, 2, 0, 7 }, /* G */
525  { 0, 3, 1, 0, 7 }, /* B */
526  { 0, 3, 4, 0, 7 }, /* A */
527  },
528  .flags = PIX_FMT_RGB,
529  },
530  [AV_PIX_FMT_GRAY16BE] = {
531  .name = "gray16be",
532  .nb_components = 1,
533  .log2_chroma_w = 0,
534  .log2_chroma_h = 0,
535  .comp = {
536  { 0, 1, 1, 0, 15 }, /* Y */
537  },
538  .flags = PIX_FMT_BE,
539  },
540  [AV_PIX_FMT_GRAY16LE] = {
541  .name = "gray16le",
542  .nb_components = 1,
543  .log2_chroma_w = 0,
544  .log2_chroma_h = 0,
545  .comp = {
546  { 0, 1, 1, 0, 15 }, /* Y */
547  },
548  },
549  [AV_PIX_FMT_YUV440P] = {
550  .name = "yuv440p",
551  .nb_components = 3,
552  .log2_chroma_w = 0,
553  .log2_chroma_h = 1,
554  .comp = {
555  { 0, 0, 1, 0, 7 }, /* Y */
556  { 1, 0, 1, 0, 7 }, /* U */
557  { 2, 0, 1, 0, 7 }, /* V */
558  },
559  .flags = PIX_FMT_PLANAR,
560  },
561  [AV_PIX_FMT_YUVJ440P] = {
562  .name = "yuvj440p",
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 = PIX_FMT_PLANAR,
572  },
573  [AV_PIX_FMT_YUVA420P] = {
574  .name = "yuva420p",
575  .nb_components = 4,
576  .log2_chroma_w = 1,
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  { 3, 0, 1, 0, 7 }, /* A */
583  },
584  .flags = PIX_FMT_PLANAR | PIX_FMT_ALPHA,
585  },
586  [AV_PIX_FMT_YUVA422P] = {
587  .name = "yuva422p",
588  .nb_components = 4,
589  .log2_chroma_w = 1,
590  .log2_chroma_h = 0,
591  .comp = {
592  { 0, 0, 1, 0, 7 }, /* Y */
593  { 1, 0, 1, 0, 7 }, /* U */
594  { 2, 0, 1, 0, 7 }, /* V */
595  { 3, 0, 1, 0, 7 }, /* A */
596  },
597  .flags = PIX_FMT_PLANAR | PIX_FMT_ALPHA,
598  },
599  [AV_PIX_FMT_YUVA444P] = {
600  .name = "yuva444p",
601  .nb_components = 4,
602  .log2_chroma_w = 0,
603  .log2_chroma_h = 0,
604  .comp = {
605  { 0, 0, 1, 0, 7 }, /* Y */
606  { 1, 0, 1, 0, 7 }, /* U */
607  { 2, 0, 1, 0, 7 }, /* V */
608  { 3, 0, 1, 0, 7 }, /* A */
609  },
610  .flags = PIX_FMT_PLANAR | PIX_FMT_ALPHA,
611  },
613  .name = "yuva420p9be",
614  .nb_components = 4,
615  .log2_chroma_w = 1,
616  .log2_chroma_h = 1,
617  .comp = {
618  { 0, 1, 1, 0, 8 }, /* Y */
619  { 1, 1, 1, 0, 8 }, /* U */
620  { 2, 1, 1, 0, 8 }, /* V */
621  { 3, 1, 1, 0, 8 }, /* A */
622  },
624  },
626  .name = "yuva420p9le",
627  .nb_components = 4,
628  .log2_chroma_w = 1,
629  .log2_chroma_h = 1,
630  .comp = {
631  { 0, 1, 1, 0, 8 }, /* Y */
632  { 1, 1, 1, 0, 8 }, /* U */
633  { 2, 1, 1, 0, 8 }, /* V */
634  { 3, 1, 1, 0, 8 }, /* A */
635  },
636  .flags = PIX_FMT_PLANAR | PIX_FMT_ALPHA,
637  },
639  .name = "yuva422p9be",
640  .nb_components = 4,
641  .log2_chroma_w = 1,
642  .log2_chroma_h = 0,
643  .comp = {
644  { 0, 1, 1, 0, 8 }, /* Y */
645  { 1, 1, 1, 0, 8 }, /* U */
646  { 2, 1, 1, 0, 8 }, /* V */
647  { 3, 1, 1, 0, 8 }, /* A */
648  },
650  },
652  .name = "yuva422p9le",
653  .nb_components = 4,
654  .log2_chroma_w = 1,
655  .log2_chroma_h = 0,
656  .comp = {
657  { 0, 1, 1, 0, 8 }, /* Y */
658  { 1, 1, 1, 0, 8 }, /* U */
659  { 2, 1, 1, 0, 8 }, /* V */
660  { 3, 1, 1, 0, 8 }, /* A */
661  },
662  .flags = PIX_FMT_PLANAR | PIX_FMT_ALPHA,
663  },
665  .name = "yuva444p9be",
666  .nb_components = 4,
667  .log2_chroma_w = 0,
668  .log2_chroma_h = 0,
669  .comp = {
670  { 0, 1, 1, 0, 8 }, /* Y */
671  { 1, 1, 1, 0, 8 }, /* U */
672  { 2, 1, 1, 0, 8 }, /* V */
673  { 3, 1, 1, 0, 8 }, /* A */
674  },
676  },
678  .name = "yuva444p9le",
679  .nb_components = 4,
680  .log2_chroma_w = 0,
681  .log2_chroma_h = 0,
682  .comp = {
683  { 0, 1, 1, 0, 8 }, /* Y */
684  { 1, 1, 1, 0, 8 }, /* U */
685  { 2, 1, 1, 0, 8 }, /* V */
686  { 3, 1, 1, 0, 8 }, /* A */
687  },
688  .flags = PIX_FMT_PLANAR | PIX_FMT_ALPHA,
689  },
691  .name = "yuva420p10be",
692  .nb_components = 4,
693  .log2_chroma_w = 1,
694  .log2_chroma_h = 1,
695  .comp = {
696  { 0, 1, 1, 0, 9 }, /* Y */
697  { 1, 1, 1, 0, 9 }, /* U */
698  { 2, 1, 1, 0, 9 }, /* V */
699  { 3, 1, 1, 0, 9 }, /* A */
700  },
702  },
704  .name = "yuva420p10le",
705  .nb_components = 4,
706  .log2_chroma_w = 1,
707  .log2_chroma_h = 1,
708  .comp = {
709  { 0, 1, 1, 0, 9 }, /* Y */
710  { 1, 1, 1, 0, 9 }, /* U */
711  { 2, 1, 1, 0, 9 }, /* V */
712  { 3, 1, 1, 0, 9 }, /* A */
713  },
714  .flags = PIX_FMT_PLANAR | PIX_FMT_ALPHA,
715  },
717  .name = "yuva422p10be",
718  .nb_components = 4,
719  .log2_chroma_w = 1,
720  .log2_chroma_h = 0,
721  .comp = {
722  { 0, 1, 1, 0, 9 }, /* Y */
723  { 1, 1, 1, 0, 9 }, /* U */
724  { 2, 1, 1, 0, 9 }, /* V */
725  { 3, 1, 1, 0, 9 }, /* A */
726  },
728  },
730  .name = "yuva422p10le",
731  .nb_components = 4,
732  .log2_chroma_w = 1,
733  .log2_chroma_h = 0,
734  .comp = {
735  { 0, 1, 1, 0, 9 }, /* Y */
736  { 1, 1, 1, 0, 9 }, /* U */
737  { 2, 1, 1, 0, 9 }, /* V */
738  { 3, 1, 1, 0, 9 }, /* A */
739  },
740  .flags = PIX_FMT_PLANAR | PIX_FMT_ALPHA,
741  },
743  .name = "yuva444p10be",
744  .nb_components = 4,
745  .log2_chroma_w = 0,
746  .log2_chroma_h = 0,
747  .comp = {
748  { 0, 1, 1, 0, 9 }, /* Y */
749  { 1, 1, 1, 0, 9 }, /* U */
750  { 2, 1, 1, 0, 9 }, /* V */
751  { 3, 1, 1, 0, 9 }, /* A */
752  },
754  },
756  .name = "yuva444p10le",
757  .nb_components = 4,
758  .log2_chroma_w = 0,
759  .log2_chroma_h = 0,
760  .comp = {
761  { 0, 1, 1, 0, 9 }, /* Y */
762  { 1, 1, 1, 0, 9 }, /* U */
763  { 2, 1, 1, 0, 9 }, /* V */
764  { 3, 1, 1, 0, 9 }, /* A */
765  },
766  .flags = PIX_FMT_PLANAR | PIX_FMT_ALPHA,
767  },
769  .name = "yuva420p16be",
770  .nb_components = 4,
771  .log2_chroma_w = 1,
772  .log2_chroma_h = 1,
773  .comp = {
774  { 0, 1, 1, 0, 15 }, /* Y */
775  { 1, 1, 1, 0, 15 }, /* U */
776  { 2, 1, 1, 0, 15 }, /* V */
777  { 3, 1, 1, 0, 15 }, /* A */
778  },
780  },
782  .name = "yuva420p16le",
783  .nb_components = 4,
784  .log2_chroma_w = 1,
785  .log2_chroma_h = 1,
786  .comp = {
787  { 0, 1, 1, 0, 15 }, /* Y */
788  { 1, 1, 1, 0, 15 }, /* U */
789  { 2, 1, 1, 0, 15 }, /* V */
790  { 3, 1, 1, 0, 15 }, /* A */
791  },
792  .flags = PIX_FMT_PLANAR | PIX_FMT_ALPHA,
793  },
795  .name = "yuva422p16be",
796  .nb_components = 4,
797  .log2_chroma_w = 1,
798  .log2_chroma_h = 0,
799  .comp = {
800  { 0, 1, 1, 0, 15 }, /* Y */
801  { 1, 1, 1, 0, 15 }, /* U */
802  { 2, 1, 1, 0, 15 }, /* V */
803  { 3, 1, 1, 0, 15 }, /* A */
804  },
806  },
808  .name = "yuva422p16le",
809  .nb_components = 4,
810  .log2_chroma_w = 1,
811  .log2_chroma_h = 0,
812  .comp = {
813  { 0, 1, 1, 0, 15 }, /* Y */
814  { 1, 1, 1, 0, 15 }, /* U */
815  { 2, 1, 1, 0, 15 }, /* V */
816  { 3, 1, 1, 0, 15 }, /* A */
817  },
818  .flags = PIX_FMT_PLANAR | PIX_FMT_ALPHA,
819  },
821  .name = "yuva444p16be",
822  .nb_components = 4,
823  .log2_chroma_w = 0,
824  .log2_chroma_h = 0,
825  .comp = {
826  { 0, 1, 1, 0, 15 }, /* Y */
827  { 1, 1, 1, 0, 15 }, /* U */
828  { 2, 1, 1, 0, 15 }, /* V */
829  { 3, 1, 1, 0, 15 }, /* A */
830  },
832  },
834  .name = "yuva444p16le",
835  .nb_components = 4,
836  .log2_chroma_w = 0,
837  .log2_chroma_h = 0,
838  .comp = {
839  { 0, 1, 1, 0, 15 }, /* Y */
840  { 1, 1, 1, 0, 15 }, /* U */
841  { 2, 1, 1, 0, 15 }, /* V */
842  { 3, 1, 1, 0, 15 }, /* A */
843  },
844  .flags = PIX_FMT_PLANAR | PIX_FMT_ALPHA,
845  },
847  .name = "vdpau_h264",
848  .log2_chroma_w = 1,
849  .log2_chroma_h = 1,
850  .flags = PIX_FMT_HWACCEL,
851  },
853  .name = "vdpau_mpeg1",
854  .log2_chroma_w = 1,
855  .log2_chroma_h = 1,
856  .flags = PIX_FMT_HWACCEL,
857  },
859  .name = "vdpau_mpeg2",
860  .log2_chroma_w = 1,
861  .log2_chroma_h = 1,
862  .flags = PIX_FMT_HWACCEL,
863  },
865  .name = "vdpau_wmv3",
866  .log2_chroma_w = 1,
867  .log2_chroma_h = 1,
868  .flags = PIX_FMT_HWACCEL,
869  },
871  .name = "vdpau_vc1",
872  .log2_chroma_w = 1,
873  .log2_chroma_h = 1,
874  .flags = PIX_FMT_HWACCEL,
875  },
877  .name = "vdpau_mpeg4",
878  .log2_chroma_w = 1,
879  .log2_chroma_h = 1,
880  .flags = PIX_FMT_HWACCEL,
881  },
882  [AV_PIX_FMT_RGB48BE] = {
883  .name = "rgb48be",
884  .nb_components = 3,
885  .log2_chroma_w = 0,
886  .log2_chroma_h = 0,
887  .comp = {
888  { 0, 5, 1, 0, 15 }, /* R */
889  { 0, 5, 3, 0, 15 }, /* G */
890  { 0, 5, 5, 0, 15 }, /* B */
891  },
892  .flags = PIX_FMT_RGB | PIX_FMT_BE,
893  },
894  [AV_PIX_FMT_RGB48LE] = {
895  .name = "rgb48le",
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  },
904  .flags = PIX_FMT_RGB,
905  },
906  [AV_PIX_FMT_RGBA64BE] = {
907  .name = "rgba64be",
908  .nb_components= 4,
909  .log2_chroma_w= 0,
910  .log2_chroma_h= 0,
911  .comp = {
912  { 0, 7, 1, 0, 15 }, /* R */
913  { 0, 7, 3, 0, 15 }, /* G */
914  { 0, 7, 5, 0, 15 }, /* B */
915  { 0, 7, 7, 0, 15 }, /* A */
916  },
917  .flags = PIX_FMT_RGB | PIX_FMT_BE | PIX_FMT_ALPHA,
918  },
919  [AV_PIX_FMT_RGBA64LE] = {
920  .name = "rgba64le",
921  .nb_components= 4,
922  .log2_chroma_w= 0,
923  .log2_chroma_h= 0,
924  .comp = {
925  { 0, 7, 1, 0, 15 }, /* R */
926  { 0, 7, 3, 0, 15 }, /* G */
927  { 0, 7, 5, 0, 15 }, /* B */
928  { 0, 7, 7, 0, 15 }, /* A */
929  },
930  .flags = PIX_FMT_RGB | PIX_FMT_ALPHA,
931  },
932  [AV_PIX_FMT_RGB565BE] = {
933  .name = "rgb565be",
934  .nb_components = 3,
935  .log2_chroma_w = 0,
936  .log2_chroma_h = 0,
937  .comp = {
938  { 0, 1, 0, 3, 4 }, /* R */
939  { 0, 1, 1, 5, 5 }, /* G */
940  { 0, 1, 1, 0, 4 }, /* B */
941  },
942  .flags = PIX_FMT_BE | PIX_FMT_RGB,
943  },
944  [AV_PIX_FMT_RGB565LE] = {
945  .name = "rgb565le",
946  .nb_components = 3,
947  .log2_chroma_w = 0,
948  .log2_chroma_h = 0,
949  .comp = {
950  { 0, 1, 2, 3, 4 }, /* R */
951  { 0, 1, 1, 5, 5 }, /* G */
952  { 0, 1, 1, 0, 4 }, /* B */
953  },
954  .flags = PIX_FMT_RGB,
955  },
956  [AV_PIX_FMT_RGB555BE] = {
957  .name = "rgb555be",
958  .nb_components = 3,
959  .log2_chroma_w = 0,
960  .log2_chroma_h = 0,
961  .comp = {
962  { 0, 1, 0, 2, 4 }, /* R */
963  { 0, 1, 1, 5, 4 }, /* G */
964  { 0, 1, 1, 0, 4 }, /* B */
965  },
966  .flags = PIX_FMT_BE | PIX_FMT_RGB,
967  },
968  [AV_PIX_FMT_RGB555LE] = {
969  .name = "rgb555le",
970  .nb_components = 3,
971  .log2_chroma_w = 0,
972  .log2_chroma_h = 0,
973  .comp = {
974  { 0, 1, 2, 2, 4 }, /* R */
975  { 0, 1, 1, 5, 4 }, /* G */
976  { 0, 1, 1, 0, 4 }, /* B */
977  },
978  .flags = PIX_FMT_RGB,
979  },
980  [AV_PIX_FMT_RGB444BE] = {
981  .name = "rgb444be",
982  .nb_components = 3,
983  .log2_chroma_w = 0,
984  .log2_chroma_h = 0,
985  .comp = {
986  { 0, 1, 0, 0, 3 }, /* R */
987  { 0, 1, 1, 4, 3 }, /* G */
988  { 0, 1, 1, 0, 3 }, /* B */
989  },
990  .flags = PIX_FMT_BE | PIX_FMT_RGB,
991  },
992  [AV_PIX_FMT_RGB444LE] = {
993  .name = "rgb444le",
994  .nb_components = 3,
995  .log2_chroma_w = 0,
996  .log2_chroma_h = 0,
997  .comp = {
998  { 0, 1, 2, 0, 3 }, /* R */
999  { 0, 1, 1, 4, 3 }, /* G */
1000  { 0, 1, 1, 0, 3 }, /* B */
1001  },
1002  .flags = PIX_FMT_RGB,
1003  },
1004  [AV_PIX_FMT_BGR48BE] = {
1005  .name = "bgr48be",
1006  .nb_components = 3,
1007  .log2_chroma_w = 0,
1008  .log2_chroma_h = 0,
1009  .comp = {
1010  { 0, 5, 5, 0, 15 }, /* R */
1011  { 0, 5, 3, 0, 15 }, /* G */
1012  { 0, 5, 1, 0, 15 }, /* B */
1013  },
1014  .flags = PIX_FMT_BE | PIX_FMT_RGB,
1015  },
1016  [AV_PIX_FMT_BGR48LE] = {
1017  .name = "bgr48le",
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  },
1026  .flags = PIX_FMT_RGB,
1027  },
1028  [AV_PIX_FMT_BGRA64BE] = {
1029  .name = "bgra64be",
1030  .nb_components= 4,
1031  .log2_chroma_w= 0,
1032  .log2_chroma_h= 0,
1033  .comp = {
1034  { 0, 7, 5, 0, 15 }, /* R */
1035  { 0, 7, 3, 0, 15 }, /* G */
1036  { 0, 7, 1, 0, 15 }, /* B */
1037  { 0, 7, 7, 0, 15 }, /* A */
1038  },
1039  .flags = PIX_FMT_BE | PIX_FMT_RGB | PIX_FMT_ALPHA,
1040  },
1041  [AV_PIX_FMT_BGRA64LE] = {
1042  .name = "bgra64le",
1043  .nb_components= 4,
1044  .log2_chroma_w= 0,
1045  .log2_chroma_h= 0,
1046  .comp = {
1047  { 0, 7, 5, 0, 15 }, /* R */
1048  { 0, 7, 3, 0, 15 }, /* G */
1049  { 0, 7, 1, 0, 15 }, /* B */
1050  { 0, 7, 7, 0, 15 }, /* A */
1051  },
1052  .flags = PIX_FMT_RGB | PIX_FMT_ALPHA,
1053  },
1054  [AV_PIX_FMT_BGR565BE] = {
1055  .name = "bgr565be",
1056  .nb_components = 3,
1057  .log2_chroma_w = 0,
1058  .log2_chroma_h = 0,
1059  .comp = {
1060  { 0, 1, 1, 0, 4 }, /* R */
1061  { 0, 1, 1, 5, 5 }, /* G */
1062  { 0, 1, 0, 3, 4 }, /* B */
1063  },
1064  .flags = PIX_FMT_BE | PIX_FMT_RGB,
1065  },
1066  [AV_PIX_FMT_BGR565LE] = {
1067  .name = "bgr565le",
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, 2, 3, 4 }, /* B */
1075  },
1076  .flags = PIX_FMT_RGB,
1077  },
1078  [AV_PIX_FMT_BGR555BE] = {
1079  .name = "bgr555be",
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, 4 }, /* G */
1086  { 0, 1, 0, 2, 4 }, /* B */
1087  },
1088  .flags = PIX_FMT_BE | PIX_FMT_RGB,
1089  },
1090  [AV_PIX_FMT_BGR555LE] = {
1091  .name = "bgr555le",
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, 2, 2, 4 }, /* B */
1099  },
1100  .flags = PIX_FMT_RGB,
1101  },
1102  [AV_PIX_FMT_BGR444BE] = {
1103  .name = "bgr444be",
1104  .nb_components = 3,
1105  .log2_chroma_w = 0,
1106  .log2_chroma_h = 0,
1107  .comp = {
1108  { 0, 1, 1, 0, 3 }, /* R */
1109  { 0, 1, 1, 4, 3 }, /* G */
1110  { 0, 1, 0, 0, 3 }, /* B */
1111  },
1112  .flags = PIX_FMT_BE | PIX_FMT_RGB,
1113  },
1114  [AV_PIX_FMT_BGR444LE] = {
1115  .name = "bgr444le",
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, 2, 0, 3 }, /* B */
1123  },
1124  .flags = PIX_FMT_RGB,
1125  },
1126  [AV_PIX_FMT_VAAPI_MOCO] = {
1127  .name = "vaapi_moco",
1128  .log2_chroma_w = 1,
1129  .log2_chroma_h = 1,
1130  .flags = PIX_FMT_HWACCEL,
1131  },
1132  [AV_PIX_FMT_VAAPI_IDCT] = {
1133  .name = "vaapi_idct",
1134  .log2_chroma_w = 1,
1135  .log2_chroma_h = 1,
1136  .flags = PIX_FMT_HWACCEL,
1137  },
1138  [AV_PIX_FMT_VAAPI_VLD] = {
1139  .name = "vaapi_vld",
1140  .log2_chroma_w = 1,
1141  .log2_chroma_h = 1,
1142  .flags = PIX_FMT_HWACCEL,
1143  },
1144  [AV_PIX_FMT_YUV420P9LE] = {
1145  .name = "yuv420p9le",
1146  .nb_components = 3,
1147  .log2_chroma_w = 1,
1148  .log2_chroma_h = 1,
1149  .comp = {
1150  { 0, 1, 1, 0, 8 }, /* Y */
1151  { 1, 1, 1, 0, 8 }, /* U */
1152  { 2, 1, 1, 0, 8 }, /* V */
1153  },
1154  .flags = PIX_FMT_PLANAR,
1155  },
1156  [AV_PIX_FMT_YUV420P9BE] = {
1157  .name = "yuv420p9be",
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 = PIX_FMT_BE | PIX_FMT_PLANAR,
1167  },
1169  .name = "yuv420p10le",
1170  .nb_components = 3,
1171  .log2_chroma_w = 1,
1172  .log2_chroma_h = 1,
1173  .comp = {
1174  { 0, 1, 1, 0, 9 }, /* Y */
1175  { 1, 1, 1, 0, 9 }, /* U */
1176  { 2, 1, 1, 0, 9 }, /* V */
1177  },
1178  .flags = PIX_FMT_PLANAR,
1179  },
1181  .name = "yuv420p10be",
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 = PIX_FMT_BE | PIX_FMT_PLANAR,
1191  },
1193  .name = "yuv420p12le",
1194  .nb_components = 3,
1195  .log2_chroma_w = 1,
1196  .log2_chroma_h = 1,
1197  .comp = {
1198  { 0, 1, 1, 0, 11 }, /* Y */
1199  { 1, 1, 1, 0, 11 }, /* U */
1200  { 2, 1, 1, 0, 11 }, /* V */
1201  },
1202  .flags = PIX_FMT_PLANAR,
1203  },
1205  .name = "yuv420p12be",
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 = PIX_FMT_BE | PIX_FMT_PLANAR,
1215  },
1217  .name = "yuv420p14le",
1218  .nb_components = 3,
1219  .log2_chroma_w = 1,
1220  .log2_chroma_h = 1,
1221  .comp = {
1222  { 0, 1, 1, 0, 13 }, /* Y */
1223  { 1, 1, 1, 0, 13 }, /* U */
1224  { 2, 1, 1, 0, 13 }, /* V */
1225  },
1226  .flags = PIX_FMT_PLANAR,
1227  },
1229  .name = "yuv420p14be",
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 = PIX_FMT_BE | PIX_FMT_PLANAR,
1239  },
1241  .name = "yuv420p16le",
1242  .nb_components = 3,
1243  .log2_chroma_w = 1,
1244  .log2_chroma_h = 1,
1245  .comp = {
1246  { 0, 1, 1, 0, 15 }, /* Y */
1247  { 1, 1, 1, 0, 15 }, /* U */
1248  { 2, 1, 1, 0, 15 }, /* V */
1249  },
1250  .flags = PIX_FMT_PLANAR,
1251  },
1253  .name = "yuv420p16be",
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 = PIX_FMT_BE | PIX_FMT_PLANAR,
1263  },
1264  [AV_PIX_FMT_YUV422P9LE] = {
1265  .name = "yuv422p9le",
1266  .nb_components = 3,
1267  .log2_chroma_w = 1,
1268  .log2_chroma_h = 0,
1269  .comp = {
1270  { 0, 1, 1, 0, 8 }, /* Y */
1271  { 1, 1, 1, 0, 8 }, /* U */
1272  { 2, 1, 1, 0, 8 }, /* V */
1273  },
1274  .flags = PIX_FMT_PLANAR,
1275  },
1276  [AV_PIX_FMT_YUV422P9BE] = {
1277  .name = "yuv422p9be",
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 = PIX_FMT_BE | PIX_FMT_PLANAR,
1287  },
1289  .name = "yuv422p10le",
1290  .nb_components = 3,
1291  .log2_chroma_w = 1,
1292  .log2_chroma_h = 0,
1293  .comp = {
1294  { 0, 1, 1, 0, 9 }, /* Y */
1295  { 1, 1, 1, 0, 9 }, /* U */
1296  { 2, 1, 1, 0, 9 }, /* V */
1297  },
1298  .flags = PIX_FMT_PLANAR,
1299  },
1301  .name = "yuv422p10be",
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 = PIX_FMT_BE | PIX_FMT_PLANAR,
1311  },
1313  .name = "yuv422p12le",
1314  .nb_components = 3,
1315  .log2_chroma_w = 1,
1316  .log2_chroma_h = 0,
1317  .comp = {
1318  { 0, 1, 1, 0, 11 }, /* Y */
1319  { 1, 1, 1, 0, 11 }, /* U */
1320  { 2, 1, 1, 0, 11 }, /* V */
1321  },
1322  .flags = PIX_FMT_PLANAR,
1323  },
1325  .name = "yuv422p12be",
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 = PIX_FMT_BE | PIX_FMT_PLANAR,
1335  },
1337  .name = "yuv422p14le",
1338  .nb_components = 3,
1339  .log2_chroma_w = 1,
1340  .log2_chroma_h = 0,
1341  .comp = {
1342  { 0, 1, 1, 0, 13 }, /* Y */
1343  { 1, 1, 1, 0, 13 }, /* U */
1344  { 2, 1, 1, 0, 13 }, /* V */
1345  },
1346  .flags = PIX_FMT_PLANAR,
1347  },
1349  .name = "yuv422p14be",
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 = PIX_FMT_BE | PIX_FMT_PLANAR,
1359  },
1361  .name = "yuv422p16le",
1362  .nb_components = 3,
1363  .log2_chroma_w = 1,
1364  .log2_chroma_h = 0,
1365  .comp = {
1366  { 0, 1, 1, 0, 15 }, /* Y */
1367  { 1, 1, 1, 0, 15 }, /* U */
1368  { 2, 1, 1, 0, 15 }, /* V */
1369  },
1370  .flags = PIX_FMT_PLANAR,
1371  },
1373  .name = "yuv422p16be",
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 = PIX_FMT_BE | PIX_FMT_PLANAR,
1383  },
1385  .name = "yuv444p16le",
1386  .nb_components = 3,
1387  .log2_chroma_w = 0,
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  },
1394  .flags = PIX_FMT_PLANAR,
1395  },
1397  .name = "yuv444p16be",
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 = PIX_FMT_BE | PIX_FMT_PLANAR,
1407  },
1409  .name = "yuv444p10le",
1410  .nb_components = 3,
1411  .log2_chroma_w = 0,
1412  .log2_chroma_h = 0,
1413  .comp = {
1414  { 0, 1, 1, 0, 9 }, /* Y */
1415  { 1, 1, 1, 0, 9 }, /* U */
1416  { 2, 1, 1, 0, 9 }, /* V */
1417  },
1418  .flags = PIX_FMT_PLANAR,
1419  },
1421  .name = "yuv444p10be",
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 = PIX_FMT_BE | PIX_FMT_PLANAR,
1431  },
1432  [AV_PIX_FMT_YUV444P9LE] = {
1433  .name = "yuv444p9le",
1434  .nb_components = 3,
1435  .log2_chroma_w = 0,
1436  .log2_chroma_h = 0,
1437  .comp = {
1438  { 0, 1, 1, 0, 8 }, /* Y */
1439  { 1, 1, 1, 0, 8 }, /* U */
1440  { 2, 1, 1, 0, 8 }, /* V */
1441  },
1442  .flags = PIX_FMT_PLANAR,
1443  },
1444  [AV_PIX_FMT_YUV444P9BE] = {
1445  .name = "yuv444p9be",
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 = PIX_FMT_BE | PIX_FMT_PLANAR,
1455  },
1457  .name = "yuv444p12le",
1458  .nb_components = 3,
1459  .log2_chroma_w = 0,
1460  .log2_chroma_h = 0,
1461  .comp = {
1462  { 0, 1, 1, 0, 11 }, /* Y */
1463  { 1, 1, 1, 0, 11 }, /* U */
1464  { 2, 1, 1, 0, 11 }, /* V */
1465  },
1466  .flags = PIX_FMT_PLANAR,
1467  },
1469  .name = "yuv444p12be",
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 = PIX_FMT_BE | PIX_FMT_PLANAR,
1479  },
1481  .name = "yuv444p14le",
1482  .nb_components = 3,
1483  .log2_chroma_w = 0,
1484  .log2_chroma_h = 0,
1485  .comp = {
1486  { 0, 1, 1, 0, 13 }, /* Y */
1487  { 1, 1, 1, 0, 13 }, /* U */
1488  { 2, 1, 1, 0, 13 }, /* V */
1489  },
1490  .flags = PIX_FMT_PLANAR,
1491  },
1493  .name = "yuv444p14be",
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 = PIX_FMT_BE | PIX_FMT_PLANAR,
1503  },
1504  [AV_PIX_FMT_DXVA2_VLD] = {
1505  .name = "dxva2_vld",
1506  .log2_chroma_w = 1,
1507  .log2_chroma_h = 1,
1508  .flags = PIX_FMT_HWACCEL,
1509  },
1510  [AV_PIX_FMT_VDA_VLD] = {
1511  .name = "vda_vld",
1512  .log2_chroma_w = 1,
1513  .log2_chroma_h = 1,
1514  .flags = PIX_FMT_HWACCEL,
1515  },
1516  [AV_PIX_FMT_GRAY8A] = {
1517  .name = "gray8a",
1518  .nb_components = 2,
1519  .comp = {
1520  { 0, 1, 1, 0, 7 }, /* Y */
1521  { 0, 1, 2, 0, 7 }, /* A */
1522  },
1523  .flags = PIX_FMT_ALPHA,
1524  },
1525  [AV_PIX_FMT_GBRP] = {
1526  .name = "gbrp",
1527  .nb_components = 3,
1528  .log2_chroma_w = 0,
1529  .log2_chroma_h = 0,
1530  .comp = {
1531  { 2, 0, 1, 0, 7 }, /* R */
1532  { 0, 0, 1, 0, 7 }, /* G */
1533  { 1, 0, 1, 0, 7 }, /* B */
1534  },
1535  .flags = PIX_FMT_PLANAR | PIX_FMT_RGB,
1536  },
1537  [AV_PIX_FMT_GBRP9LE] = {
1538  .name = "gbrp9le",
1539  .nb_components = 3,
1540  .log2_chroma_w = 0,
1541  .log2_chroma_h = 0,
1542  .comp = {
1543  { 2, 1, 1, 0, 8 }, /* R */
1544  { 0, 1, 1, 0, 8 }, /* G */
1545  { 1, 1, 1, 0, 8 }, /* B */
1546  },
1547  .flags = PIX_FMT_PLANAR | PIX_FMT_RGB,
1548  },
1549  [AV_PIX_FMT_GBRP9BE] = {
1550  .name = "gbrp9be",
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  },
1559  .flags = PIX_FMT_BE | PIX_FMT_PLANAR | PIX_FMT_RGB,
1560  },
1561  [AV_PIX_FMT_GBRP10LE] = {
1562  .name = "gbrp10le",
1563  .nb_components = 3,
1564  .log2_chroma_w = 0,
1565  .log2_chroma_h = 0,
1566  .comp = {
1567  { 2, 1, 1, 0, 9 }, /* R */
1568  { 0, 1, 1, 0, 9 }, /* G */
1569  { 1, 1, 1, 0, 9 }, /* B */
1570  },
1571  .flags = PIX_FMT_PLANAR | PIX_FMT_RGB,
1572  },
1573  [AV_PIX_FMT_GBRP10BE] = {
1574  .name = "gbrp10be",
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  },
1583  .flags = PIX_FMT_BE | PIX_FMT_PLANAR | PIX_FMT_RGB,
1584  },
1585  [AV_PIX_FMT_GBRP12LE] = {
1586  .name = "gbrp12le",
1587  .nb_components = 3,
1588  .log2_chroma_w = 0,
1589  .log2_chroma_h = 0,
1590  .comp = {
1591  { 2, 1, 1, 0, 11 }, /* R */
1592  { 0, 1, 1, 0, 11 }, /* G */
1593  { 1, 1, 1, 0, 11 }, /* B */
1594  },
1595  .flags = PIX_FMT_PLANAR | PIX_FMT_RGB,
1596  },
1597  [AV_PIX_FMT_GBRP12BE] = {
1598  .name = "gbrp12be",
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  },
1607  .flags = PIX_FMT_BE | PIX_FMT_PLANAR | PIX_FMT_RGB,
1608  },
1609  [AV_PIX_FMT_GBRP14LE] = {
1610  .name = "gbrp14le",
1611  .nb_components = 3,
1612  .log2_chroma_w = 0,
1613  .log2_chroma_h = 0,
1614  .comp = {
1615  { 2, 1, 1, 0, 13 }, /* R */
1616  { 0, 1, 1, 0, 13 }, /* G */
1617  { 1, 1, 1, 0, 13 }, /* B */
1618  },
1619  .flags = PIX_FMT_PLANAR | PIX_FMT_RGB,
1620  },
1621  [AV_PIX_FMT_GBRP14BE] = {
1622  .name = "gbrp14be",
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  },
1631  .flags = PIX_FMT_BE | PIX_FMT_PLANAR | PIX_FMT_RGB,
1632  },
1633  [AV_PIX_FMT_GBRP16LE] = {
1634  .name = "gbrp16le",
1635  .nb_components = 3,
1636  .log2_chroma_w = 0,
1637  .log2_chroma_h = 0,
1638  .comp = {
1639  { 2, 1, 1, 0, 15 }, /* R */
1640  { 0, 1, 1, 0, 15 }, /* G */
1641  { 1, 1, 1, 0, 15 }, /* B */
1642  },
1643  .flags = PIX_FMT_PLANAR | PIX_FMT_RGB,
1644  },
1645  [AV_PIX_FMT_GBRP16BE] = {
1646  .name = "gbrp16be",
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  },
1655  .flags = PIX_FMT_BE | PIX_FMT_PLANAR | PIX_FMT_RGB,
1656  },
1657 };
1658 
1659 static enum AVPixelFormat get_pix_fmt_internal(const char *name)
1660 {
1661  enum AVPixelFormat pix_fmt;
1662 
1663  for (pix_fmt = 0; pix_fmt < AV_PIX_FMT_NB; pix_fmt++)
1664  if (av_pix_fmt_descriptors[pix_fmt].name &&
1665  !strcmp(av_pix_fmt_descriptors[pix_fmt].name, name))
1666  return pix_fmt;
1667 
1668  return AV_PIX_FMT_NONE;
1669 }
1670 
1672 {
1673  return (unsigned)pix_fmt < AV_PIX_FMT_NB ?
1674  av_pix_fmt_descriptors[pix_fmt].name : NULL;
1675 }
1676 
1677 #if HAVE_BIGENDIAN
1678 # define X_NE(be, le) be
1679 #else
1680 # define X_NE(be, le) le
1681 #endif
1682 
1684 {
1685  enum AVPixelFormat pix_fmt;
1686 
1687  if (!strcmp(name, "rgb32"))
1688  name = X_NE("argb", "bgra");
1689  else if (!strcmp(name, "bgr32"))
1690  name = X_NE("abgr", "rgba");
1691 
1692  pix_fmt = get_pix_fmt_internal(name);
1693  if (pix_fmt == AV_PIX_FMT_NONE) {
1694  char name2[32];
1695 
1696  snprintf(name2, sizeof(name2), "%s%s", name, X_NE("be", "le"));
1697  pix_fmt = get_pix_fmt_internal(name2);
1698  }
1699  return pix_fmt;
1700 }
1701 
1703 {
1704  int c, bits = 0;
1705  int log2_pixels = pixdesc->log2_chroma_w + pixdesc->log2_chroma_h;
1706 
1707  for (c = 0; c < pixdesc->nb_components; c++) {
1708  int s = c == 1 || c == 2 ? 0 : log2_pixels;
1709  bits += (pixdesc->comp[c].depth_minus1 + 1) << s;
1710  }
1711 
1712  return bits >> log2_pixels;
1713 }
1714 
1716 {
1717  int c, bits = 0;
1718  int log2_pixels = pixdesc->log2_chroma_w + pixdesc->log2_chroma_h;
1719  int steps[4] = {0};
1720 
1721  for (c = 0; c < pixdesc->nb_components; c++) {
1722  const AVComponentDescriptor *comp = &pixdesc->comp[c];
1723  int s = c == 1 || c == 2 ? 0 : log2_pixels;
1724  steps[comp->plane] = (comp->step_minus1 + 1) << s;
1725  }
1726  for (c = 0; c < 4; c++)
1727  bits += steps[c];
1728 
1729  if(!(pixdesc->flags & PIX_FMT_BITSTREAM))
1730  bits *= 8;
1731 
1732  return bits >> log2_pixels;
1733 }
1734 
1735 char *av_get_pix_fmt_string (char *buf, int buf_size, enum AVPixelFormat pix_fmt)
1736 {
1737  /* print header */
1738  if (pix_fmt < 0) {
1739  snprintf (buf, buf_size, "name" " nb_components" " nb_bits");
1740  } else {
1741  const AVPixFmtDescriptor *pixdesc = &av_pix_fmt_descriptors[pix_fmt];
1742  snprintf(buf, buf_size, "%-11s %7d %10d", pixdesc->name,
1743  pixdesc->nb_components, av_get_bits_per_pixel(pixdesc));
1744  }
1745 
1746  return buf;
1747 }
1748 
1750 {
1751  if (pix_fmt < 0 || pix_fmt >= AV_PIX_FMT_NB)
1752  return NULL;
1753  return &av_pix_fmt_descriptors[pix_fmt];
1754 }
1755 
1757 {
1758  if (!prev)
1759  return &av_pix_fmt_descriptors[0];
1760  while (prev - av_pix_fmt_descriptors < FF_ARRAY_ELEMS(av_pix_fmt_descriptors) - 1) {
1761  prev++;
1762  if (prev->name)
1763  return prev;
1764  }
1765  return NULL;
1766 }
1767 
1769 {
1770  if (desc < av_pix_fmt_descriptors ||
1771  desc >= av_pix_fmt_descriptors + FF_ARRAY_ELEMS(av_pix_fmt_descriptors))
1772  return AV_PIX_FMT_NONE;
1773 
1774  return desc - av_pix_fmt_descriptors;
1775 }
1776 
1778  int *h_shift, int *v_shift)
1779 {
1780  const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pix_fmt);
1781  if (!desc)
1782  return AVERROR(ENOSYS);
1783  *h_shift = desc->log2_chroma_w;
1784  *v_shift = desc->log2_chroma_h;
1785 
1786  return 0;
1787 }