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 Libav.
6  *
7  * Libav 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  * Libav 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 Libav; 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 {
37  AVComponentDescriptor comp = desc->comp[c];
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 {
84  AVComponentDescriptor comp = desc->comp[c];
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, 1, 0, 7 }, /* B */
173  { 0, 2, 2, 0, 7 }, /* G */
174  { 0, 2, 3, 0, 7 }, /* R */
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, 6, 1 }, /* B */
339  { 0, 0, 1, 3, 2 }, /* G */
340  { 0, 0, 1, 0, 2 }, /* R */
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, 1, 0, 0 }, /* B */
351  { 0, 3, 2, 0, 1 }, /* G */
352  { 0, 3, 4, 0, 0 }, /* R */
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, 3, 0 }, /* B */
363  { 0, 0, 1, 1, 1 }, /* G */
364  { 0, 0, 1, 0, 0 }, /* R */
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, 1, 0, 7 }, /* V */
424  { 1, 1, 2, 0, 7 }, /* U */
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, 1, 0, 7 }, /* A */
435  { 0, 3, 2, 0, 7 }, /* R */
436  { 0, 3, 3, 0, 7 }, /* G */
437  { 0, 3, 4, 0, 7 }, /* B */
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, 1, 0, 7 }, /* A */
461  { 0, 3, 2, 0, 7 }, /* B */
462  { 0, 3, 3, 0, 7 }, /* G */
463  { 0, 3, 4, 0, 7 }, /* R */
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, 1, 0, 7 }, /* B */
474  { 0, 3, 2, 0, 7 }, /* G */
475  { 0, 3, 3, 0, 7 }, /* R */
476  { 0, 3, 4, 0, 7 }, /* A */
477  },
478  .flags = PIX_FMT_RGB | PIX_FMT_ALPHA,
479  },
480  [AV_PIX_FMT_GRAY16BE] = {
481  .name = "gray16be",
482  .nb_components = 1,
483  .log2_chroma_w = 0,
484  .log2_chroma_h = 0,
485  .comp = {
486  { 0, 1, 1, 0, 15 }, /* Y */
487  },
488  .flags = PIX_FMT_BE,
489  },
490  [AV_PIX_FMT_GRAY16LE] = {
491  .name = "gray16le",
492  .nb_components = 1,
493  .log2_chroma_w = 0,
494  .log2_chroma_h = 0,
495  .comp = {
496  { 0, 1, 1, 0, 15 }, /* Y */
497  },
498  },
499  [AV_PIX_FMT_YUV440P] = {
500  .name = "yuv440p",
501  .nb_components = 3,
502  .log2_chroma_w = 0,
503  .log2_chroma_h = 1,
504  .comp = {
505  { 0, 0, 1, 0, 7 }, /* Y */
506  { 1, 0, 1, 0, 7 }, /* U */
507  { 2, 0, 1, 0, 7 }, /* V */
508  },
509  .flags = PIX_FMT_PLANAR,
510  },
511  [AV_PIX_FMT_YUVJ440P] = {
512  .name = "yuvj440p",
513  .nb_components = 3,
514  .log2_chroma_w = 0,
515  .log2_chroma_h = 1,
516  .comp = {
517  { 0, 0, 1, 0, 7 }, /* Y */
518  { 1, 0, 1, 0, 7 }, /* U */
519  { 2, 0, 1, 0, 7 }, /* V */
520  },
521  .flags = PIX_FMT_PLANAR,
522  },
523  [AV_PIX_FMT_YUVA420P] = {
524  .name = "yuva420p",
525  .nb_components = 4,
526  .log2_chroma_w = 1,
527  .log2_chroma_h = 1,
528  .comp = {
529  { 0, 0, 1, 0, 7 }, /* Y */
530  { 1, 0, 1, 0, 7 }, /* U */
531  { 2, 0, 1, 0, 7 }, /* V */
532  { 3, 0, 1, 0, 7 }, /* A */
533  },
534  .flags = PIX_FMT_PLANAR | PIX_FMT_ALPHA,
535  },
536  [AV_PIX_FMT_YUVA422P] = {
537  .name = "yuva422p",
538  .nb_components = 4,
539  .log2_chroma_w = 1,
540  .log2_chroma_h = 0,
541  .comp = {
542  { 0, 0, 1, 0, 7 }, /* Y */
543  { 1, 0, 1, 0, 7 }, /* U */
544  { 2, 0, 1, 0, 7 }, /* V */
545  { 3, 0, 1, 0, 7 }, /* A */
546  },
547  .flags = PIX_FMT_PLANAR | PIX_FMT_ALPHA,
548  },
549  [AV_PIX_FMT_YUVA444P] = {
550  .name = "yuva444p",
551  .nb_components = 4,
552  .log2_chroma_w = 0,
553  .log2_chroma_h = 0,
554  .comp = {
555  { 0, 0, 1, 0, 7 }, /* Y */
556  { 1, 0, 1, 0, 7 }, /* U */
557  { 2, 0, 1, 0, 7 }, /* V */
558  { 3, 0, 1, 0, 7 }, /* A */
559  },
560  .flags = PIX_FMT_PLANAR | PIX_FMT_ALPHA,
561  },
563  .name = "yuva420p9be",
564  .nb_components = 4,
565  .log2_chroma_w = 1,
566  .log2_chroma_h = 1,
567  .comp = {
568  { 0, 1, 1, 0, 8 }, /* Y */
569  { 1, 1, 1, 0, 8 }, /* U */
570  { 2, 1, 1, 0, 8 }, /* V */
571  { 3, 1, 1, 0, 8 }, /* A */
572  },
573  .flags = PIX_FMT_BE | PIX_FMT_PLANAR,
574  },
576  .name = "yuva420p9le",
577  .nb_components = 4,
578  .log2_chroma_w = 1,
579  .log2_chroma_h = 1,
580  .comp = {
581  { 0, 1, 1, 0, 8 }, /* Y */
582  { 1, 1, 1, 0, 8 }, /* U */
583  { 2, 1, 1, 0, 8 }, /* V */
584  { 3, 1, 1, 0, 8 }, /* A */
585  },
586  .flags = PIX_FMT_PLANAR | PIX_FMT_ALPHA,
587  },
589  .name = "yuva422p9be",
590  .nb_components = 4,
591  .log2_chroma_w = 1,
592  .log2_chroma_h = 0,
593  .comp = {
594  { 0, 1, 1, 0, 8 }, /* Y */
595  { 1, 1, 1, 0, 8 }, /* U */
596  { 2, 1, 1, 0, 8 }, /* V */
597  { 3, 1, 1, 0, 8 }, /* A */
598  },
600  },
602  .name = "yuva422p9le",
603  .nb_components = 4,
604  .log2_chroma_w = 1,
605  .log2_chroma_h = 0,
606  .comp = {
607  { 0, 1, 1, 0, 8 }, /* Y */
608  { 1, 1, 1, 0, 8 }, /* U */
609  { 2, 1, 1, 0, 8 }, /* V */
610  { 3, 1, 1, 0, 8 }, /* A */
611  },
612  .flags = PIX_FMT_PLANAR | PIX_FMT_ALPHA,
613  },
615  .name = "yuva444p9be",
616  .nb_components = 4,
617  .log2_chroma_w = 0,
618  .log2_chroma_h = 0,
619  .comp = {
620  { 0, 1, 1, 0, 8 }, /* Y */
621  { 1, 1, 1, 0, 8 }, /* U */
622  { 2, 1, 1, 0, 8 }, /* V */
623  { 3, 1, 1, 0, 8 }, /* A */
624  },
626  },
628  .name = "yuva444p9le",
629  .nb_components = 4,
630  .log2_chroma_w = 0,
631  .log2_chroma_h = 0,
632  .comp = {
633  { 0, 1, 1, 0, 8 }, /* Y */
634  { 1, 1, 1, 0, 8 }, /* U */
635  { 2, 1, 1, 0, 8 }, /* V */
636  { 3, 1, 1, 0, 8 }, /* A */
637  },
638  .flags = PIX_FMT_PLANAR | PIX_FMT_ALPHA,
639  },
641  .name = "yuva420p10be",
642  .nb_components = 4,
643  .log2_chroma_w = 1,
644  .log2_chroma_h = 1,
645  .comp = {
646  { 0, 1, 1, 0, 9 }, /* Y */
647  { 1, 1, 1, 0, 9 }, /* U */
648  { 2, 1, 1, 0, 9 }, /* V */
649  { 3, 1, 1, 0, 9 }, /* A */
650  },
652  },
654  .name = "yuva420p10le",
655  .nb_components = 4,
656  .log2_chroma_w = 1,
657  .log2_chroma_h = 1,
658  .comp = {
659  { 0, 1, 1, 0, 9 }, /* Y */
660  { 1, 1, 1, 0, 9 }, /* U */
661  { 2, 1, 1, 0, 9 }, /* V */
662  { 3, 1, 1, 0, 9 }, /* A */
663  },
664  .flags = PIX_FMT_PLANAR | PIX_FMT_ALPHA,
665  },
667  .name = "yuva422p10be",
668  .nb_components = 4,
669  .log2_chroma_w = 1,
670  .log2_chroma_h = 0,
671  .comp = {
672  { 0, 1, 1, 0, 9 }, /* Y */
673  { 1, 1, 1, 0, 9 }, /* U */
674  { 2, 1, 1, 0, 9 }, /* V */
675  { 3, 1, 1, 0, 9 }, /* A */
676  },
678  },
680  .name = "yuva422p10le",
681  .nb_components = 4,
682  .log2_chroma_w = 1,
683  .log2_chroma_h = 0,
684  .comp = {
685  { 0, 1, 1, 0, 9 }, /* Y */
686  { 1, 1, 1, 0, 9 }, /* U */
687  { 2, 1, 1, 0, 9 }, /* V */
688  { 3, 1, 1, 0, 9 }, /* A */
689  },
690  .flags = PIX_FMT_PLANAR | PIX_FMT_ALPHA,
691  },
693  .name = "yuva444p10be",
694  .nb_components = 4,
695  .log2_chroma_w = 0,
696  .log2_chroma_h = 0,
697  .comp = {
698  { 0, 1, 1, 0, 9 }, /* Y */
699  { 1, 1, 1, 0, 9 }, /* U */
700  { 2, 1, 1, 0, 9 }, /* V */
701  { 3, 1, 1, 0, 9 }, /* A */
702  },
704  },
706  .name = "yuva444p10le",
707  .nb_components = 4,
708  .log2_chroma_w = 0,
709  .log2_chroma_h = 0,
710  .comp = {
711  { 0, 1, 1, 0, 9 }, /* Y */
712  { 1, 1, 1, 0, 9 }, /* U */
713  { 2, 1, 1, 0, 9 }, /* V */
714  { 3, 1, 1, 0, 9 }, /* A */
715  },
716  .flags = PIX_FMT_PLANAR | PIX_FMT_ALPHA,
717  },
719  .name = "yuva420p16be",
720  .nb_components = 4,
721  .log2_chroma_w = 1,
722  .log2_chroma_h = 1,
723  .comp = {
724  { 0, 1, 1, 0, 15 }, /* Y */
725  { 1, 1, 1, 0, 15 }, /* U */
726  { 2, 1, 1, 0, 15 }, /* V */
727  { 3, 1, 1, 0, 15 }, /* A */
728  },
730  },
732  .name = "yuva420p16le",
733  .nb_components = 4,
734  .log2_chroma_w = 1,
735  .log2_chroma_h = 1,
736  .comp = {
737  { 0, 1, 1, 0, 15 }, /* Y */
738  { 1, 1, 1, 0, 15 }, /* U */
739  { 2, 1, 1, 0, 15 }, /* V */
740  { 3, 1, 1, 0, 15 }, /* A */
741  },
742  .flags = PIX_FMT_PLANAR | PIX_FMT_ALPHA,
743  },
745  .name = "yuva422p16be",
746  .nb_components = 4,
747  .log2_chroma_w = 1,
748  .log2_chroma_h = 0,
749  .comp = {
750  { 0, 1, 1, 0, 15 }, /* Y */
751  { 1, 1, 1, 0, 15 }, /* U */
752  { 2, 1, 1, 0, 15 }, /* V */
753  { 3, 1, 1, 0, 15 }, /* A */
754  },
756  },
758  .name = "yuva422p16le",
759  .nb_components = 4,
760  .log2_chroma_w = 1,
761  .log2_chroma_h = 0,
762  .comp = {
763  { 0, 1, 1, 0, 15 }, /* Y */
764  { 1, 1, 1, 0, 15 }, /* U */
765  { 2, 1, 1, 0, 15 }, /* V */
766  { 3, 1, 1, 0, 15 }, /* A */
767  },
768  .flags = PIX_FMT_PLANAR | PIX_FMT_ALPHA,
769  },
771  .name = "yuva444p16be",
772  .nb_components = 4,
773  .log2_chroma_w = 0,
774  .log2_chroma_h = 0,
775  .comp = {
776  { 0, 1, 1, 0, 15 }, /* Y */
777  { 1, 1, 1, 0, 15 }, /* U */
778  { 2, 1, 1, 0, 15 }, /* V */
779  { 3, 1, 1, 0, 15 }, /* A */
780  },
782  },
784  .name = "yuva444p16le",
785  .nb_components = 4,
786  .log2_chroma_w = 0,
787  .log2_chroma_h = 0,
788  .comp = {
789  { 0, 1, 1, 0, 15 }, /* Y */
790  { 1, 1, 1, 0, 15 }, /* U */
791  { 2, 1, 1, 0, 15 }, /* V */
792  { 3, 1, 1, 0, 15 }, /* A */
793  },
794  .flags = PIX_FMT_PLANAR | PIX_FMT_ALPHA,
795  },
797  .name = "vdpau_h264",
798  .log2_chroma_w = 1,
799  .log2_chroma_h = 1,
800  .flags = PIX_FMT_HWACCEL,
801  },
803  .name = "vdpau_mpeg1",
804  .log2_chroma_w = 1,
805  .log2_chroma_h = 1,
806  .flags = PIX_FMT_HWACCEL,
807  },
809  .name = "vdpau_mpeg2",
810  .log2_chroma_w = 1,
811  .log2_chroma_h = 1,
812  .flags = PIX_FMT_HWACCEL,
813  },
815  .name = "vdpau_wmv3",
816  .log2_chroma_w = 1,
817  .log2_chroma_h = 1,
818  .flags = PIX_FMT_HWACCEL,
819  },
821  .name = "vdpau_vc1",
822  .log2_chroma_w = 1,
823  .log2_chroma_h = 1,
824  .flags = PIX_FMT_HWACCEL,
825  },
827  .name = "vdpau_mpeg4",
828  .log2_chroma_w = 1,
829  .log2_chroma_h = 1,
830  .flags = PIX_FMT_HWACCEL,
831  },
832  [AV_PIX_FMT_RGB48BE] = {
833  .name = "rgb48be",
834  .nb_components = 3,
835  .log2_chroma_w = 0,
836  .log2_chroma_h = 0,
837  .comp = {
838  { 0, 5, 1, 0, 15 }, /* R */
839  { 0, 5, 3, 0, 15 }, /* G */
840  { 0, 5, 5, 0, 15 }, /* B */
841  },
842  .flags = PIX_FMT_RGB | PIX_FMT_BE,
843  },
844  [AV_PIX_FMT_RGB48LE] = {
845  .name = "rgb48le",
846  .nb_components = 3,
847  .log2_chroma_w = 0,
848  .log2_chroma_h = 0,
849  .comp = {
850  { 0, 5, 1, 0, 15 }, /* R */
851  { 0, 5, 3, 0, 15 }, /* G */
852  { 0, 5, 5, 0, 15 }, /* B */
853  },
854  .flags = PIX_FMT_RGB,
855  },
856  [AV_PIX_FMT_RGB565BE] = {
857  .name = "rgb565be",
858  .nb_components = 3,
859  .log2_chroma_w = 0,
860  .log2_chroma_h = 0,
861  .comp = {
862  { 0, 1, 0, 3, 4 }, /* R */
863  { 0, 1, 1, 5, 5 }, /* G */
864  { 0, 1, 1, 0, 4 }, /* B */
865  },
866  .flags = PIX_FMT_BE | PIX_FMT_RGB,
867  },
868  [AV_PIX_FMT_RGB565LE] = {
869  .name = "rgb565le",
870  .nb_components = 3,
871  .log2_chroma_w = 0,
872  .log2_chroma_h = 0,
873  .comp = {
874  { 0, 1, 2, 3, 4 }, /* R */
875  { 0, 1, 1, 5, 5 }, /* G */
876  { 0, 1, 1, 0, 4 }, /* B */
877  },
878  .flags = PIX_FMT_RGB,
879  },
880  [AV_PIX_FMT_RGB555BE] = {
881  .name = "rgb555be",
882  .nb_components = 3,
883  .log2_chroma_w = 0,
884  .log2_chroma_h = 0,
885  .comp = {
886  { 0, 1, 0, 2, 4 }, /* R */
887  { 0, 1, 1, 5, 4 }, /* G */
888  { 0, 1, 1, 0, 4 }, /* B */
889  },
890  .flags = PIX_FMT_BE | PIX_FMT_RGB,
891  },
892  [AV_PIX_FMT_RGB555LE] = {
893  .name = "rgb555le",
894  .nb_components = 3,
895  .log2_chroma_w = 0,
896  .log2_chroma_h = 0,
897  .comp = {
898  { 0, 1, 2, 2, 4 }, /* R */
899  { 0, 1, 1, 5, 4 }, /* G */
900  { 0, 1, 1, 0, 4 }, /* B */
901  },
902  .flags = PIX_FMT_RGB,
903  },
904  [AV_PIX_FMT_RGB444BE] = {
905  .name = "rgb444be",
906  .nb_components = 3,
907  .log2_chroma_w = 0,
908  .log2_chroma_h = 0,
909  .comp = {
910  { 0, 1, 0, 0, 3 }, /* R */
911  { 0, 1, 1, 4, 3 }, /* G */
912  { 0, 1, 1, 0, 3 }, /* B */
913  },
914  .flags = PIX_FMT_BE | PIX_FMT_RGB,
915  },
916  [AV_PIX_FMT_RGB444LE] = {
917  .name = "rgb444le",
918  .nb_components = 3,
919  .log2_chroma_w = 0,
920  .log2_chroma_h = 0,
921  .comp = {
922  { 0, 1, 2, 0, 3 }, /* R */
923  { 0, 1, 1, 4, 3 }, /* G */
924  { 0, 1, 1, 0, 3 }, /* B */
925  },
926  .flags = PIX_FMT_RGB,
927  },
928  [AV_PIX_FMT_BGR48BE] = {
929  .name = "bgr48be",
930  .nb_components = 3,
931  .log2_chroma_w = 0,
932  .log2_chroma_h = 0,
933  .comp = {
934  { 0, 5, 1, 0, 15 }, /* B */
935  { 0, 5, 3, 0, 15 }, /* G */
936  { 0, 5, 5, 0, 15 }, /* R */
937  },
938  .flags = PIX_FMT_BE | PIX_FMT_RGB,
939  },
940  [AV_PIX_FMT_BGR48LE] = {
941  .name = "bgr48le",
942  .nb_components = 3,
943  .log2_chroma_w = 0,
944  .log2_chroma_h = 0,
945  .comp = {
946  { 0, 5, 1, 0, 15 }, /* B */
947  { 0, 5, 3, 0, 15 }, /* G */
948  { 0, 5, 5, 0, 15 }, /* R */
949  },
950  .flags = PIX_FMT_RGB,
951  },
952  [AV_PIX_FMT_BGR565BE] = {
953  .name = "bgr565be",
954  .nb_components = 3,
955  .log2_chroma_w = 0,
956  .log2_chroma_h = 0,
957  .comp = {
958  { 0, 1, 0, 3, 4 }, /* B */
959  { 0, 1, 1, 5, 5 }, /* G */
960  { 0, 1, 1, 0, 4 }, /* R */
961  },
962  .flags = PIX_FMT_BE | PIX_FMT_RGB,
963  },
964  [AV_PIX_FMT_BGR565LE] = {
965  .name = "bgr565le",
966  .nb_components = 3,
967  .log2_chroma_w = 0,
968  .log2_chroma_h = 0,
969  .comp = {
970  { 0, 1, 2, 3, 4 }, /* B */
971  { 0, 1, 1, 5, 5 }, /* G */
972  { 0, 1, 1, 0, 4 }, /* R */
973  },
974  .flags = PIX_FMT_RGB,
975  },
976  [AV_PIX_FMT_BGR555BE] = {
977  .name = "bgr555be",
978  .nb_components = 3,
979  .log2_chroma_w = 0,
980  .log2_chroma_h = 0,
981  .comp = {
982  { 0, 1, 0, 2, 4 }, /* B */
983  { 0, 1, 1, 5, 4 }, /* G */
984  { 0, 1, 1, 0, 4 }, /* R */
985  },
986  .flags = PIX_FMT_BE | PIX_FMT_RGB,
987  },
988  [AV_PIX_FMT_BGR555LE] = {
989  .name = "bgr555le",
990  .nb_components = 3,
991  .log2_chroma_w = 0,
992  .log2_chroma_h = 0,
993  .comp = {
994  { 0, 1, 2, 2, 4 }, /* B */
995  { 0, 1, 1, 5, 4 }, /* G */
996  { 0, 1, 1, 0, 4 }, /* R */
997  },
998  .flags = PIX_FMT_RGB,
999  },
1000  [AV_PIX_FMT_BGR444BE] = {
1001  .name = "bgr444be",
1002  .nb_components = 3,
1003  .log2_chroma_w = 0,
1004  .log2_chroma_h = 0,
1005  .comp = {
1006  { 0, 1, 0, 0, 3 }, /* B */
1007  { 0, 1, 1, 4, 3 }, /* G */
1008  { 0, 1, 1, 0, 3 }, /* R */
1009  },
1010  .flags = PIX_FMT_BE | PIX_FMT_RGB,
1011  },
1012  [AV_PIX_FMT_BGR444LE] = {
1013  .name = "bgr444le",
1014  .nb_components = 3,
1015  .log2_chroma_w = 0,
1016  .log2_chroma_h = 0,
1017  .comp = {
1018  { 0, 1, 2, 0, 3 }, /* B */
1019  { 0, 1, 1, 4, 3 }, /* G */
1020  { 0, 1, 1, 0, 3 }, /* R */
1021  },
1022  .flags = PIX_FMT_RGB,
1023  },
1024  [AV_PIX_FMT_VAAPI_MOCO] = {
1025  .name = "vaapi_moco",
1026  .log2_chroma_w = 1,
1027  .log2_chroma_h = 1,
1028  .flags = PIX_FMT_HWACCEL,
1029  },
1030  [AV_PIX_FMT_VAAPI_IDCT] = {
1031  .name = "vaapi_idct",
1032  .log2_chroma_w = 1,
1033  .log2_chroma_h = 1,
1034  .flags = PIX_FMT_HWACCEL,
1035  },
1036  [AV_PIX_FMT_VAAPI_VLD] = {
1037  .name = "vaapi_vld",
1038  .log2_chroma_w = 1,
1039  .log2_chroma_h = 1,
1040  .flags = PIX_FMT_HWACCEL,
1041  },
1042  [AV_PIX_FMT_VDA_VLD] = {
1043  .name = "vda_vld",
1044  .log2_chroma_w = 1,
1045  .log2_chroma_h = 1,
1046  .flags = PIX_FMT_HWACCEL,
1047  },
1048  [AV_PIX_FMT_YUV420P9LE] = {
1049  .name = "yuv420p9le",
1050  .nb_components = 3,
1051  .log2_chroma_w = 1,
1052  .log2_chroma_h = 1,
1053  .comp = {
1054  { 0, 1, 1, 0, 8 }, /* Y */
1055  { 1, 1, 1, 0, 8 }, /* U */
1056  { 2, 1, 1, 0, 8 }, /* V */
1057  },
1058  .flags = PIX_FMT_PLANAR,
1059  },
1060  [AV_PIX_FMT_YUV420P9BE] = {
1061  .name = "yuv420p9be",
1062  .nb_components = 3,
1063  .log2_chroma_w = 1,
1064  .log2_chroma_h = 1,
1065  .comp = {
1066  { 0, 1, 1, 0, 8 }, /* Y */
1067  { 1, 1, 1, 0, 8 }, /* U */
1068  { 2, 1, 1, 0, 8 }, /* V */
1069  },
1070  .flags = PIX_FMT_BE | PIX_FMT_PLANAR,
1071  },
1073  .name = "yuv420p10le",
1074  .nb_components = 3,
1075  .log2_chroma_w = 1,
1076  .log2_chroma_h = 1,
1077  .comp = {
1078  { 0, 1, 1, 0, 9 }, /* Y */
1079  { 1, 1, 1, 0, 9 }, /* U */
1080  { 2, 1, 1, 0, 9 }, /* V */
1081  },
1082  .flags = PIX_FMT_PLANAR,
1083  },
1085  .name = "yuv420p10be",
1086  .nb_components = 3,
1087  .log2_chroma_w = 1,
1088  .log2_chroma_h = 1,
1089  .comp = {
1090  { 0, 1, 1, 0, 9 }, /* Y */
1091  { 1, 1, 1, 0, 9 }, /* U */
1092  { 2, 1, 1, 0, 9 }, /* V */
1093  },
1094  .flags = PIX_FMT_BE | PIX_FMT_PLANAR,
1095  },
1097  .name = "yuv420p16le",
1098  .nb_components = 3,
1099  .log2_chroma_w = 1,
1100  .log2_chroma_h = 1,
1101  .comp = {
1102  { 0, 1, 1, 0, 15 }, /* Y */
1103  { 1, 1, 1, 0, 15 }, /* U */
1104  { 2, 1, 1, 0, 15 }, /* V */
1105  },
1106  .flags = PIX_FMT_PLANAR,
1107  },
1109  .name = "yuv420p16be",
1110  .nb_components = 3,
1111  .log2_chroma_w = 1,
1112  .log2_chroma_h = 1,
1113  .comp = {
1114  { 0, 1, 1, 0, 15 }, /* Y */
1115  { 1, 1, 1, 0, 15 }, /* U */
1116  { 2, 1, 1, 0, 15 }, /* V */
1117  },
1118  .flags = PIX_FMT_BE | PIX_FMT_PLANAR,
1119  },
1120  [AV_PIX_FMT_YUV422P9LE] = {
1121  .name = "yuv422p9le",
1122  .nb_components = 3,
1123  .log2_chroma_w = 1,
1124  .log2_chroma_h = 0,
1125  .comp = {
1126  { 0, 1, 1, 0, 8 }, /* Y */
1127  { 1, 1, 1, 0, 8 }, /* U */
1128  { 2, 1, 1, 0, 8 }, /* V */
1129  },
1130  .flags = PIX_FMT_PLANAR,
1131  },
1132  [AV_PIX_FMT_YUV422P9BE] = {
1133  .name = "yuv422p9be",
1134  .nb_components = 3,
1135  .log2_chroma_w = 1,
1136  .log2_chroma_h = 0,
1137  .comp = {
1138  { 0, 1, 1, 0, 8 }, /* Y */
1139  { 1, 1, 1, 0, 8 }, /* U */
1140  { 2, 1, 1, 0, 8 }, /* V */
1141  },
1142  .flags = PIX_FMT_BE | PIX_FMT_PLANAR,
1143  },
1145  .name = "yuv422p10le",
1146  .nb_components = 3,
1147  .log2_chroma_w = 1,
1148  .log2_chroma_h = 0,
1149  .comp = {
1150  { 0, 1, 1, 0, 9 }, /* Y */
1151  { 1, 1, 1, 0, 9 }, /* U */
1152  { 2, 1, 1, 0, 9 }, /* V */
1153  },
1154  .flags = PIX_FMT_PLANAR,
1155  },
1157  .name = "yuv422p10be",
1158  .nb_components = 3,
1159  .log2_chroma_w = 1,
1160  .log2_chroma_h = 0,
1161  .comp = {
1162  { 0, 1, 1, 0, 9 }, /* Y */
1163  { 1, 1, 1, 0, 9 }, /* U */
1164  { 2, 1, 1, 0, 9 }, /* V */
1165  },
1166  .flags = PIX_FMT_BE | PIX_FMT_PLANAR,
1167  },
1169  .name = "yuv422p16le",
1170  .nb_components = 3,
1171  .log2_chroma_w = 1,
1172  .log2_chroma_h = 0,
1173  .comp = {
1174  { 0, 1, 1, 0, 15 }, /* Y */
1175  { 1, 1, 1, 0, 15 }, /* U */
1176  { 2, 1, 1, 0, 15 }, /* V */
1177  },
1178  .flags = PIX_FMT_PLANAR,
1179  },
1181  .name = "yuv422p16be",
1182  .nb_components = 3,
1183  .log2_chroma_w = 1,
1184  .log2_chroma_h = 0,
1185  .comp = {
1186  { 0, 1, 1, 0, 15 }, /* Y */
1187  { 1, 1, 1, 0, 15 }, /* U */
1188  { 2, 1, 1, 0, 15 }, /* V */
1189  },
1190  .flags = PIX_FMT_BE | PIX_FMT_PLANAR,
1191  },
1193  .name = "yuv444p16le",
1194  .nb_components = 3,
1195  .log2_chroma_w = 0,
1196  .log2_chroma_h = 0,
1197  .comp = {
1198  { 0, 1, 1, 0, 15 }, /* Y */
1199  { 1, 1, 1, 0, 15 }, /* U */
1200  { 2, 1, 1, 0, 15 }, /* V */
1201  },
1202  .flags = PIX_FMT_PLANAR,
1203  },
1205  .name = "yuv444p16be",
1206  .nb_components = 3,
1207  .log2_chroma_w = 0,
1208  .log2_chroma_h = 0,
1209  .comp = {
1210  { 0, 1, 1, 0, 15 }, /* Y */
1211  { 1, 1, 1, 0, 15 }, /* U */
1212  { 2, 1, 1, 0, 15 }, /* V */
1213  },
1214  .flags = PIX_FMT_BE | PIX_FMT_PLANAR,
1215  },
1217  .name = "yuv444p10le",
1218  .nb_components = 3,
1219  .log2_chroma_w = 0,
1220  .log2_chroma_h = 0,
1221  .comp = {
1222  { 0, 1, 1, 0, 9 }, /* Y */
1223  { 1, 1, 1, 0, 9 }, /* U */
1224  { 2, 1, 1, 0, 9 }, /* V */
1225  },
1226  .flags = PIX_FMT_PLANAR,
1227  },
1229  .name = "yuv444p10be",
1230  .nb_components = 3,
1231  .log2_chroma_w = 0,
1232  .log2_chroma_h = 0,
1233  .comp = {
1234  { 0, 1, 1, 0, 9 }, /* Y */
1235  { 1, 1, 1, 0, 9 }, /* U */
1236  { 2, 1, 1, 0, 9 }, /* V */
1237  },
1238  .flags = PIX_FMT_BE | PIX_FMT_PLANAR,
1239  },
1240  [AV_PIX_FMT_YUV444P9LE] = {
1241  .name = "yuv444p9le",
1242  .nb_components = 3,
1243  .log2_chroma_w = 0,
1244  .log2_chroma_h = 0,
1245  .comp = {
1246  { 0, 1, 1, 0, 8 }, /* Y */
1247  { 1, 1, 1, 0, 8 }, /* U */
1248  { 2, 1, 1, 0, 8 }, /* V */
1249  },
1250  .flags = PIX_FMT_PLANAR,
1251  },
1252  [AV_PIX_FMT_YUV444P9BE] = {
1253  .name = "yuv444p9be",
1254  .nb_components = 3,
1255  .log2_chroma_w = 0,
1256  .log2_chroma_h = 0,
1257  .comp = {
1258  { 0, 1, 1, 0, 8 }, /* Y */
1259  { 1, 1, 1, 0, 8 }, /* U */
1260  { 2, 1, 1, 0, 8 }, /* V */
1261  },
1262  .flags = PIX_FMT_BE | PIX_FMT_PLANAR,
1263  },
1264  [AV_PIX_FMT_DXVA2_VLD] = {
1265  .name = "dxva2_vld",
1266  .log2_chroma_w = 1,
1267  .log2_chroma_h = 1,
1268  .flags = PIX_FMT_HWACCEL,
1269  },
1270  [AV_PIX_FMT_Y400A] = {
1271  .name = "y400a",
1272  .nb_components = 2,
1273  .comp = {
1274  { 0, 1, 1, 0, 7 }, /* Y */
1275  { 0, 1, 2, 0, 7 }, /* A */
1276  },
1277  .flags = PIX_FMT_ALPHA,
1278  },
1279  [AV_PIX_FMT_GBRP] = {
1280  .name = "gbrp",
1281  .nb_components = 3,
1282  .log2_chroma_w = 0,
1283  .log2_chroma_h = 0,
1284  .comp = {
1285  { 0, 0, 1, 0, 7 }, /* G */
1286  { 1, 0, 1, 0, 7 }, /* B */
1287  { 2, 0, 1, 0, 7 }, /* R */
1288  },
1289  .flags = PIX_FMT_PLANAR | PIX_FMT_RGB,
1290  },
1291  [AV_PIX_FMT_GBRP9LE] = {
1292  .name = "gbrp9le",
1293  .nb_components = 3,
1294  .log2_chroma_w = 0,
1295  .log2_chroma_h = 0,
1296  .comp = {
1297  { 0, 1, 1, 0, 8 }, /* G */
1298  { 1, 1, 1, 0, 8 }, /* B */
1299  { 2, 1, 1, 0, 8 }, /* R */
1300  },
1301  .flags = PIX_FMT_PLANAR | PIX_FMT_RGB,
1302  },
1303  [AV_PIX_FMT_GBRP9BE] = {
1304  .name = "gbrp9be",
1305  .nb_components = 3,
1306  .log2_chroma_w = 0,
1307  .log2_chroma_h = 0,
1308  .comp = {
1309  { 0, 1, 1, 0, 8 }, /* G */
1310  { 1, 1, 1, 0, 8 }, /* B */
1311  { 2, 1, 1, 0, 8 }, /* R */
1312  },
1313  .flags = PIX_FMT_BE | PIX_FMT_PLANAR | PIX_FMT_RGB,
1314  },
1315  [AV_PIX_FMT_GBRP10LE] = {
1316  .name = "gbrp10le",
1317  .nb_components = 3,
1318  .log2_chroma_w = 0,
1319  .log2_chroma_h = 0,
1320  .comp = {
1321  { 0, 1, 1, 0, 9 }, /* G */
1322  { 1, 1, 1, 0, 9 }, /* B */
1323  { 2, 1, 1, 0, 9 }, /* R */
1324  },
1325  .flags = PIX_FMT_PLANAR | PIX_FMT_RGB,
1326  },
1327  [AV_PIX_FMT_GBRP10BE] = {
1328  .name = "gbrp10be",
1329  .nb_components = 3,
1330  .log2_chroma_w = 0,
1331  .log2_chroma_h = 0,
1332  .comp = {
1333  { 0, 1, 1, 0, 9 }, /* G */
1334  { 1, 1, 1, 0, 9 }, /* B */
1335  { 2, 1, 1, 0, 9 }, /* R */
1336  },
1337  .flags = PIX_FMT_BE | PIX_FMT_PLANAR | PIX_FMT_RGB,
1338  },
1339  [AV_PIX_FMT_GBRP16LE] = {
1340  .name = "gbrp16le",
1341  .nb_components = 3,
1342  .log2_chroma_w = 0,
1343  .log2_chroma_h = 0,
1344  .comp = {
1345  { 0, 1, 1, 0, 15 }, /* G */
1346  { 1, 1, 1, 0, 15 }, /* B */
1347  { 2, 1, 1, 0, 15 }, /* R */
1348  },
1349  .flags = PIX_FMT_PLANAR | PIX_FMT_RGB,
1350  },
1351  [AV_PIX_FMT_GBRP16BE] = {
1352  .name = "gbrp16be",
1353  .nb_components = 3,
1354  .log2_chroma_w = 0,
1355  .log2_chroma_h = 0,
1356  .comp = {
1357  { 0, 1, 1, 0, 15 }, /* G */
1358  { 1, 1, 1, 0, 15 }, /* B */
1359  { 2, 1, 1, 0, 15 }, /* R */
1360  },
1361  .flags = PIX_FMT_BE | PIX_FMT_PLANAR | PIX_FMT_RGB,
1362  },
1363 };
1364 
1365 static enum AVPixelFormat get_pix_fmt_internal(const char *name)
1366 {
1367  enum AVPixelFormat pix_fmt;
1368 
1369  for (pix_fmt = 0; pix_fmt < AV_PIX_FMT_NB; pix_fmt++)
1370  if (av_pix_fmt_descriptors[pix_fmt].name &&
1371  !strcmp(av_pix_fmt_descriptors[pix_fmt].name, name))
1372  return pix_fmt;
1373 
1374  return AV_PIX_FMT_NONE;
1375 }
1376 
1378 {
1379  return (unsigned)pix_fmt < AV_PIX_FMT_NB ?
1380  av_pix_fmt_descriptors[pix_fmt].name : NULL;
1381 }
1382 
1383 #if HAVE_BIGENDIAN
1384 # define X_NE(be, le) be
1385 #else
1386 # define X_NE(be, le) le
1387 #endif
1388 
1390 {
1391  enum AVPixelFormat pix_fmt;
1392 
1393  if (!strcmp(name, "rgb32"))
1394  name = X_NE("argb", "bgra");
1395  else if (!strcmp(name, "bgr32"))
1396  name = X_NE("abgr", "rgba");
1397 
1398  pix_fmt = get_pix_fmt_internal(name);
1399  if (pix_fmt == AV_PIX_FMT_NONE) {
1400  char name2[32];
1401 
1402  snprintf(name2, sizeof(name2), "%s%s", name, X_NE("be", "le"));
1403  pix_fmt = get_pix_fmt_internal(name2);
1404  }
1405  return pix_fmt;
1406 }
1407 
1409 {
1410  int c, bits = 0;
1411  int log2_pixels = pixdesc->log2_chroma_w + pixdesc->log2_chroma_h;
1412 
1413  for (c = 0; c < pixdesc->nb_components; c++) {
1414  int s = c == 1 || c == 2 ? 0 : log2_pixels;
1415  bits += (pixdesc->comp[c].depth_minus1 + 1) << s;
1416  }
1417 
1418  return bits >> log2_pixels;
1419 }
1420 
1421 char *av_get_pix_fmt_string (char *buf, int buf_size, enum AVPixelFormat pix_fmt)
1422 {
1423  /* print header */
1424  if (pix_fmt < 0) {
1425  snprintf (buf, buf_size, "name" " nb_components" " nb_bits");
1426  } else {
1427  const AVPixFmtDescriptor *pixdesc = &av_pix_fmt_descriptors[pix_fmt];
1428  snprintf(buf, buf_size, "%-11s %7d %10d", pixdesc->name,
1429  pixdesc->nb_components, av_get_bits_per_pixel(pixdesc));
1430  }
1431 
1432  return buf;
1433 }
1434 
1436 {
1437  if (pix_fmt < 0 || pix_fmt >= AV_PIX_FMT_NB)
1438  return NULL;
1439  return &av_pix_fmt_descriptors[pix_fmt];
1440 }
1441 
1443 {
1444  if (!prev)
1445  return &av_pix_fmt_descriptors[0];
1446  if (prev - av_pix_fmt_descriptors < FF_ARRAY_ELEMS(av_pix_fmt_descriptors) - 1)
1447  return prev + 1;
1448  return NULL;
1449 }
1450 
1452 {
1453  if (desc < av_pix_fmt_descriptors ||
1454  desc >= av_pix_fmt_descriptors + FF_ARRAY_ELEMS(av_pix_fmt_descriptors))
1455  return AV_PIX_FMT_NONE;
1456 
1457  return desc - av_pix_fmt_descriptors;
1458 }
1459 
1461  int *h_shift, int *v_shift)
1462 {
1463  const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pix_fmt);
1464  if (!desc)
1465  return AVERROR(ENOSYS);
1466  *h_shift = desc->log2_chroma_w;
1467  *v_shift = desc->log2_chroma_h;
1468 
1469  return 0;
1470 }