]> git.sesse.net Git - vlc/blob - src/misc/fourcc.c
ddc9726ecc6d0a49fac7b76d3bd00f221d38b5d0
[vlc] / src / misc / fourcc.c
1 /*****************************************************************************
2  * fourcc.c: fourcc helpers functions
3  *****************************************************************************
4  * Copyright © 2009-2011 Laurent Aimar
5  *
6  * Authors: Laurent Aimar <fenrir@videolan.org>
7  *          Jean-Baptiste Kempf <jb@videolan.org>
8  *
9  * This program is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation; either version 2 of the License, or
12  * (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program; if not, write to the Free Software
21  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
22  *****************************************************************************/
23
24 /*****************************************************************************
25  * Preamble
26  *****************************************************************************/
27 #ifdef HAVE_CONFIG_H
28 # include "config.h"
29 #endif
30
31 #include <vlc_common.h>
32 #include <vlc_fourcc.h>
33 #include <vlc_es.h>
34 #include <assert.h>
35
36 typedef struct
37 {
38     char p_class[4];
39     char p_fourcc[4];
40     const char *psz_description;
41 } entry_t;
42
43 #define NULL4 "\x00\x00\x00\x00"
44
45 /* XXX You don't want to see the preprocessor generated code ;) */
46 #ifdef WORDS_BIGENDIAN
47 #   define FCC2STR(f) { ((f)>>24)&0xff, ((f)>>16)&0xff, ((f)>>8)&0xff, ((f)>>0)&0xff }
48 #else
49 #   define FCC2STR(f) { ((f)>>0)&0xff, ((f)>>8)&0xff, ((f)>>16)&0xff, ((f)>>24)&0xff }
50 #endif
51 /* Begin a new class */
52 #define B(a, c) { .p_class = FCC2STR(a), .p_fourcc = FCC2STR(a), .psz_description = c }
53 /* Create a sub-class entry with description */
54 #define E(b, c) { .p_class = NULL4, .p_fourcc = b, .psz_description = c }
55 /* Create a sub-class entry without description (alias) */
56 #define A(b) E(b, NULL4)
57
58
59 /* */
60 static const entry_t p_list_video[] = {
61
62     B(VLC_CODEC_MPGV, "MPEG-1/2 Video"),
63         A("mpgv"),
64         A("mp1v"),
65         A("mpeg"),
66         A("mpg1"),
67         A("mp2v"),
68         A("MPEG"),
69         A("mpg2"),
70         A("MPG2"),
71         A("H262"),
72
73         E("PIM1", "Pinnacle DC1000 (MPEG-1 Video)"),
74
75         E("hdv1", "HDV 720p30 (MPEG-2 Video)"),
76         E("hdv2", "Sony HDV 1080i60 (MPEG-2 Video)"),
77         E("hdv3", "FCP HDV 1080i50 (MPEG-2 Video)"),
78         E("hdv4", "HDV 720p24 (MPEG-2 Video)"),
79         E("hdv5", "HDV 720p25 (MPEG-2 Video)"),
80         E("hdv6", "HDV 1080p24 (MPEG-2 Video)"),
81         E("hdv7", "HDV 1080p25 (MPEG-2 Video)"),
82         E("hdv8", "HDV 1080p30 (MPEG-2 Video)"),
83         E("hdv9", "HDV 720p60 JVC (MPEG-2 Video)"),
84         E("hdva", "HDV 720p50 (MPEG-2 Video)"),
85
86         E("mx5n", "MPEG2 IMX NTSC 525/60 50Mb/s (FCP)"),
87         E("mx5p", "MPEG2 IMX PAL 625/60 50Mb/s (FCP)"),
88         E("mx4n", "MPEG2 IMX NTSC 525/60 40Mb/s (FCP)"),
89         E("mx4p", "MPEG2 IMX PAL 625/50 40Mb/s (FCP)"),
90         E("mx3n", "MPEG2 IMX NTSC 525/60 30Mb/s (FCP)"),
91         E("mx3p", "MPEG2 IMX NTSC 625/50 30Mb/s (FCP)"),
92
93         E("xdv1", "XDCAM HD 720p30 35Mb/s"),
94         E("xdv2", "XDCAM HD 1080i60 35Mb/s"),
95         E("xdv3", "XDCAM HD 1080i50 35Mb/s"),
96         E("xdv4", "XDCAM HD 720p24 35Mb/s"),
97         E("xdv5", "XDCAM HD 720p25 35Mb/s"),
98         E("xdv6", "XDCAM HD 1080p24 35Mb/s"),
99         E("xdv7", "XDCAM HD 1080p25 35Mb/s"),
100         E("xdv8", "XDCAM HD 1080p30 35Mb/s"),
101         E("xdv9", "XDCAM HD 720p60 35Mb/s"),
102         E("xdva", "XDCAM HD 720p50 35Mb/s"),
103
104         E("xdvb", "XDCAM EX 1080i60 50Mb/s CBR"),
105         E("xdvc", "XDCAM EX 1080i50 50Mb/s CBR"),
106         E("xdvd", "XDCAM EX 1080p24 50Mb/s CBR"),
107         E("xdve", "XDCAM EX 1080p25 50Mb/s CBR"),
108         E("xdvf", "XDCAM EX 1080p30 50Mb/s CBR"),
109
110         E("xd54", "XDCAM HD422 720p24 50Mb/s CBR"),
111         E("xd55", "XDCAM HD422 720p25 50Mb/s CBR"),
112         E("xd59", "XDCAM HD422 720p60 50Mb/s CBR"),
113         E("xd5a", "XDCAM HD422 720p50 50Mb/s CBR"),
114         E("xd5b", "XDCAM HD422 1080i60 50Mb/s CBR"),
115         E("xd5c", "XDCAM HD422 1080i50 50Mb/s CBR"),
116         E("xd5d", "XDCAM HD422 1080p24 50Mb/s CBR"),
117         E("xd5e", "XDCAM HD422 1080p25 50Mb/s CBR"),
118         E("xd5f", "XDCAM HD422 1080p30 50Mb/s CBR"),
119
120         E("xdhd", "XDCAM HD 540p"),
121         E("xdh2", "XDCAM HD422 540p"),
122
123         E("AVmp", "AVID IMX PAL"),
124         E("MMES", "Matrox MPEG-2"),
125         E("mmes", "Matrox MPEG-2"),
126         E("PIM2", "Pinnacle MPEG-2"),
127         E("LMP2", "Lead MPEG-2"),
128
129         E("VCR2", "ATI VCR-2"),
130
131     B(VLC_CODEC_MP4V, "MPEG-4 Video"),
132         A("mp4v"),
133         A("DIVX"),
134         A("divx"),
135         A("MP4S"),
136         A("mp4s"),
137         A("M4S2"),
138         A("m4s2"),
139         A("MP4V"),
140         A("\x04\x00\x00\x00"),
141         A("m4cc"),
142         A("M4CC"),
143         A("FMP4"),
144         A("fmp4"),
145         A("DCOD"),
146         A("MVXM"),
147         A("PM4V"),
148         A("M4T3"),
149         A("GEOX"),
150         A("GEOV"),
151         A("DMK2"),
152         A("WV1F"),
153         A("DIGI"),
154         A("INMC"),
155         A("SN40"),
156         A("EPHV"),
157         A("DM4V"),
158         /* XVID flavours */
159         E("xvid", "Xvid MPEG-4 Video"),
160         E("XVID", "Xvid MPEG-4 Video"),
161         E("XviD", "Xvid MPEG-4 Video"),
162         E("XVIX", "Xvid MPEG-4 Video"),
163         E("xvix", "Xvid MPEG-4 Video"),
164         /* DX50 */
165         E("DX50", "DivX MPEG-4 Video"),
166         E("dx50", "DivX MPEG-4 Video"),
167         E("BLZ0", "Blizzard MPEG-4 Video"),
168         E("DXGM", "Electronic Arts Game MPEG-4 Video"),
169         E("DreX", "DreX Mpeg-4"),
170         /* 3ivx delta 4 */
171         E("3IV2", "3ivx MPEG-4 Video"),
172         E("3iv2", "3ivx MPEG-4 Video"),
173         /* Various */
174         E("UMP4", "UB MPEG-4 Video"),
175         E("SEDG", "Samsung MPEG-4 Video"),
176         E("RMP4", "REALmagic MPEG-4 Video"),
177         E("LMP4", "Lead MPEG-4 Video"),
178         E("HDX4", "Jomigo HDX4 (MPEG-4 Video)"),
179         E("hdx4", "Jomigo HDX4 (MPEG-4 Video)"),
180         E("SMP4", "Samsung SMP4 (MPEG-4 Video)"),
181         E("smp4", "Samsung SMP4 (MPEG-4 Video)"),
182         E("fvfw", "FFmpeg MPEG-4"),
183         E("FVFW", "FFmpeg MPEG-4"),
184         E("FFDS", "FFDShow MPEG-4"),
185         E("VIDM", "vidm 4.01 codec"),
186         E("DP02", "DynaPel MPEG-4 codec"),
187         /* 3ivx delta 3.5 Unsupported
188          * putting it here gives extreme distorted images */
189         //E("3IV1", "3ivx delta 3.5 MPEG-4 Video"),
190         //E("3iv1", "3ivx delta 3.5 MPEG-4 Video"),
191
192     /* MSMPEG4 v1 */
193     B(VLC_CODEC_DIV1, "MS MPEG-4 Video v1"),
194         A("DIV1"),
195         A("div1"),
196         A("MPG4"),
197         A("mpg4"),
198         A("mp41"),
199
200     /* MSMPEG4 v2 */
201     B(VLC_CODEC_DIV2, "MS MPEG-4 Video v2"),
202         A("DIV2"),
203         A("div2"),
204         A("MP42"),
205         A("mp42"),
206
207     /* MSMPEG4 v3 / M$ mpeg4 v3 */
208     B(VLC_CODEC_DIV3, "MS MPEG-4 Video v3"),
209         A("DIV3"),
210         A("MPG3"),
211         A("mpg3"),
212         A("div3"),
213         A("MP43"),
214         A("mp43"),
215         /* DivX 3.20 */
216         A("DIV4"),
217         A("div4"),
218         A("DIV5"),
219         A("div5"),
220         A("DIV6"),
221         A("div6"),
222         E("divf", "DivX 4.12"),
223         E("DIVF", "DivX 4.12"),
224         /* Cool Codec */
225         A("COL1"),
226         A("col1"),
227         A("COL0"),
228         A("col0"),
229         /* AngelPotion stuff */
230         A("AP41"),
231         /* 3ivx doctered divx files */
232         A("3IVD"),
233         A("3ivd"),
234         /* who knows? */
235         A("3VID"),
236         A("3vid"),
237         A("DVX1"),
238         A("DVX3"),
239
240     /* Sorenson v1 */
241     B(VLC_CODEC_SVQ1, "SVQ-1 (Sorenson Video v1)"),
242         A("SVQ1"),
243         A("svq1"),
244         A("svqi"),
245
246     /* Sorenson v3 */
247     B(VLC_CODEC_SVQ3, "SVQ-3 (Sorenson Video v3)"),
248         A("SVQ3"),
249
250     /* h264 */
251     B(VLC_CODEC_H264, "H264 - MPEG-4 AVC (part 10)"),
252         A("H264"),
253         A("h264"),
254         A("x264"),
255         A("X264"),
256         /* avc1: special case h264 */
257         A("avc1"),
258         A("AVC1"),
259         E("ai5p", "AVC-Intra  50M 720p24/30/60"),
260         E("ai5q", "AVC-Intra  50M 720p25/50"),
261         E("ai52", "AVC-Intra  50M 1080p25/50"),
262         E("ai53", "AVC-Intra  50M 1080p24/30/60"),
263         E("ai55", "AVC-Intra  50M 1080i50"),
264         E("ai56", "AVC-Intra  50M 1080i60"),
265         E("ai1p", "AVC-Intra 100M 720p24/30/60"),
266         E("ai1q", "AVC-Intra 100M 720p25/50"),
267         E("ai12", "AVC-Intra 100M 1080p25/50"),
268         E("ai13", "AVC-Intra 100M 1080p24/30/60"),
269         E("ai15", "AVC-Intra 100M 1080i50"),
270         E("ai16", "AVC-Intra 100M 1080i60"),
271         E("VSSH", "Vanguard VSS H264"),
272         E("VSSW", "Vanguard VSS H264"),
273         E("vssh", "Vanguard VSS H264"),
274         E("DAVC", "Dicas MPEGable H.264/MPEG-4 AVC"),
275         E("davc", "Dicas MPEGable H.264/MPEG-4 AVC"),
276         E("x3eV", "DreX H.264"),
277
278     /* H263 and H263i */
279     /* H263(+) is also known as Real Video 1.0 */
280
281     /* H263 */
282     B(VLC_CODEC_H263, "H263"),
283         A("H263"),
284         A("h263"),
285         A("VX1K"),
286         A("s263"),
287         A("S263"),
288         A("U263"),
289         A("u263"),
290         E("D263", "DEC H263"),
291         E("d263", "DEC H263"),
292         E("L263", "LEAD H263"),
293         E("M263", "Microsoft H263"),
294         E("X263", "Xirlink H263"),
295         /* Zygo (partial) */
296         E("ZyGo", "ITU H263+"),
297
298     /* H263i */
299     B(VLC_CODEC_H263I, "I263.I"),
300         A("I263"),
301         A("i263"),
302
303     /* H263P */
304     B(VLC_CODEC_H263P, "ITU H263+"),
305         E("ILVR", "ITU H263+"),
306         E("viv1", "H263+"),
307         E("vivO", "H263+"),
308         E("viv2", "H263+"),
309         E("VIVO", "H263+"),
310         E("U263", "UB H263+"),
311
312     /* Flash (H263) variant */
313     B(VLC_CODEC_FLV1, "Flash Video"),
314         A("FLV1"),
315         A("flv "),
316
317     /* H261 */
318     B(VLC_CODEC_H261, "H.261"),
319         A("H261"),
320         A("h261"),
321
322     B(VLC_CODEC_FLIC, "Flic Video"),
323         A("FLIC"),
324
325     /* MJPEG */
326     B(VLC_CODEC_MJPG, "Motion JPEG Video"),
327         A("MJPG"),
328         A("MJPx"),
329         A("mjpg"),
330         A("mJPG"),
331         A("mjpa"),
332         A("jpeg"),
333         A("JPEG"),
334         A("JFIF"),
335         A("JPGL"),
336         A("AVDJ"),
337         A("MMJP"),
338         A("FLJP"),
339         A("FMJP"),
340         A("SJPG"),
341         A("QIVG"),
342         E("AVRn", "Avid Motion JPEG"),
343         E("AVDJ", "Avid Motion JPEG"),
344         E("ADJV", "Avid Motion JPEG"),
345         E("dmb1", "Motion JPEG OpenDML Video"),
346         E("DMB1", "Motion JPEG OpenDML Video"),
347         E("ijpg", "Intergraph JPEG Video"),
348         E("IJPG", "Intergraph JPEG Video"),
349         E("ACDV", "ACD Systems Digital"),
350         E("SLMJ", "SL M-JPEG"),
351
352     B(VLC_CODEC_MJPGB, "Motion JPEG B Video"),
353         A("mjpb"),
354
355     B(VLC_CODEC_LJPG, "Lead Motion JPEG Video"),
356         A("LJPG"),
357         E("Ljpg", "Lead Motion JPEG"),
358
359     // ? from avcodec/fourcc.c but makes not sense.
360     //{ VLC_FOURCC( 'L','J','P','G' ), CODEC_ID_MJPEG,       VIDEO_ES, "Lead Motion JPEG Video" },
361
362     /* SP5x */
363     B(VLC_CODEC_SP5X, "Sunplus Motion JPEG Video"),
364         A("SP5X"),
365         A("SP53"),
366         A("SP54"),
367         A("SP55"),
368         A("SP56"),
369         A("SP57"),
370         A("SP58"),
371
372     /* DV */
373     B(VLC_CODEC_DV, "DV Video"),
374         A("dv  "),
375         A("dvsl"),
376         A("DVSD"),
377         A("dvsd"),
378         A("DVCS"),
379         A("dvcs"),
380         A("dvhd"),
381         A("dvhq"),
382         A("dvh1"),
383         E("dvh2", "DV Video 720p24"),
384         E("dvh3", "DV Video 720p25"),
385         E("dvh4", "DV Video 720p30"),
386         A("dv25"),
387         A("dc25"),
388         A("dvs1"),
389         A("dvis"),
390         A("CDV2"),
391         A("CDVP"),
392         A("PDVC"),
393         A("IPDV"),
394         A("ipdv"),
395         E("dvcp", "DV Video PAL"),
396         E("dvc ", "DV Video NTSC" ),
397         E("dvp ", "DV Video Pro"),
398         E("dvpp", "DV Video Pro PAL"),
399         E("dv50", "DV Video C Pro 50"),
400         E("dv5p", "DV Video C Pro 50 PAL"),
401         E("dv5n", "DV Video C Pro 50 NTSC"),
402         E("dv1p", "DV Video C Pro 100 PAL" ),
403         E("dv1n", "DV Video C Pro 100 NTSC" ),
404         E("dvhp", "DV Video C Pro HD 720p" ),
405         E("dvh5", "DV Video C Pro HD 1080i50" ),
406         E("dvh6", "DV Video C Pro HD 1080i60" ),
407         E("AVdv", "AVID DV"),
408         E("AVd1", "AVID DV"),
409         E("CDVC", "Canopus DV Video"),
410         E("cdvc", "Canopus DV Video"),
411         E("CDVH", "Canopus DV Video"),
412         E("cdvh", "Canopus DV Video"),
413         E("CDV5", "Canopus DV Video"),
414
415     /* Windows Media Video */
416     B(VLC_CODEC_WMV1, "Windows Media Video 7"),
417         A("WMV1"),
418         A("wmv1"),
419
420     B(VLC_CODEC_WMV2, "Windows Media Video 8"),
421         A("WMV2"),
422         A("wmv2"),
423
424     B(VLC_CODEC_WMV3, "Windows Media Video 9"),
425         A("WMV3"),
426         A("wmv3"),
427
428     /* WMVA is the VC-1 codec before the standardization proces,
429      * it is not bitstream compatible and deprecated  */
430     B(VLC_CODEC_WMVA, "Windows Media Video Advanced Profile"),
431         A("WMVA"),
432         A("wmva"),
433
434     B(VLC_CODEC_VC1, "Windows Media Video VC1"),
435         A("WVC1"),
436         A("wvc1"),
437         A("vc-1"),
438         A("VC-1"),
439
440     B(VLC_CODEC_WMVP, "Windows Media Video Presentation"),
441         A("WMVP"),
442         A("wmvp"),
443
444     B(VLC_CODEC_WMVP2, "Windows Media Video Presentation, v2"),
445         A("WVP2"),
446         A("wvp2"),
447
448     /* Microsoft Video 1 */
449     B(VLC_CODEC_MSVIDEO1, "Microsoft Video 1"),
450         A("MSVC"),
451         A("msvc"),
452         A("CRAM"),
453         A("cram"),
454         A("WHAM"),
455         A("wham"),
456
457     /* Microsoft RLE */
458     B(VLC_CODEC_MSRLE, "Microsoft RLE Video"),
459         A("mrle"),
460         A("WRLE"),
461         A("\x01\x00\x00\x00"),
462         A("\x02\x00\x00\x00"),
463
464     /* Indeo Video Codecs (Quality of this decoder on ppc is not good) */
465     B(VLC_CODEC_INDEO3, "Indeo Video v3"),
466         A("IV31"),
467         A("iv31"),
468         A("IV32"),
469         A("iv32"),
470
471     /* Huff YUV */
472     B(VLC_CODEC_HUFFYUV, "Huff YUV Video"),
473         A("HFYU"),
474
475     B(VLC_CODEC_FFVHUFF, "Huff YUV Video"),
476         A("FFVH"),
477
478     /* On2 VP3 Video Codecs */
479     B(VLC_CODEC_VP3, "On2's VP3 Video"),
480         A("VP3 "),
481         A("VP30"),
482         A("vp30"),
483         A("VP31"),
484         A("vp31"),
485
486     /* On2  VP5, VP6 codecs */
487     B(VLC_CODEC_VP5, "On2's VP5 Video"),
488         A("VP5 "),
489         A("VP50"),
490
491     B(VLC_CODEC_VP6, "On2's VP6.2 Video"),
492         A("VP62"),
493         A("vp62"),
494         E("VP60", "On2's VP6.0 Video"),
495         E("VP61", "On2's VP6.1 Video"),
496
497     B(VLC_CODEC_VP6F, "On2's VP6.2 Video (Flash)"),
498         A("VP6F"),
499         A("FLV4"),
500
501     B(VLC_CODEC_VP6A, "On2's VP6 A Video"),
502         A("VP6A"),
503
504     B(VLC_CODEC_VP8, "Google/On2's VP8 Video"),
505         A("VP80"),
506
507
508     /* Xiph.org theora */
509     B(VLC_CODEC_THEORA, "Xiph.org's Theora Video"),
510         A("theo"),
511         A("Thra"),
512
513     /* Xiph.org tarkin */
514     B(VLC_CODEC_TARKIN, "Xiph.org's Tarkin Video"),
515         A("tark"),
516
517     /* Asus Video (Another thing that doesn't work on PPC) */
518     B(VLC_CODEC_ASV1, "Asus V1 Video"),
519         A("ASV1"),
520     B(VLC_CODEC_ASV2, "Asus V2 Video"),
521         A("ASV2"),
522
523     /* FFMPEG Video 1 (lossless codec) */
524     B(VLC_CODEC_FFV1, "FFMpeg Video 1"),
525         A("FFV1"),
526
527     /* ATI VCR1 */
528     B(VLC_CODEC_VCR1, "ATI VCR1 Video"),
529         A("VCR1"),
530
531     /* Cirrus Logic AccuPak */
532     B(VLC_CODEC_CLJR, "Creative Logic AccuPak"),
533         A("CLJR"),
534
535     /* Real Video */
536     B(VLC_CODEC_RV10, "Real Video 1.0"),
537         A("RV10"),
538         A("rv10"),
539
540     B(VLC_CODEC_RV13, "Real Video 1.3"),
541         A("RV13"),
542         A("rv13"),
543
544     B(VLC_CODEC_RV20, "Real Video 2.0"),
545         A("RV20"),
546         A("rv20"),
547
548     B(VLC_CODEC_RV30, "Real Video 3.0"),
549         A("RV30"),
550         A("rv30"),
551
552     B(VLC_CODEC_RV40, "Real Video 4.0"),
553         A("RV40"),
554         A("rv40"),
555
556     /* Apple Video */
557     B(VLC_CODEC_RPZA, "Apple Video"),
558         A("rpza"),
559         A("azpr"),
560         A("RPZA"),
561         A("AZPR"),
562
563     B(VLC_CODEC_SMC, "Apple graphics"),
564         A("smc "),
565
566     B(VLC_CODEC_CINEPAK, "Cinepak Video"),
567         A("CVID"),
568         A("cvid"),
569
570     /* Screen Capture Video Codecs */
571     B(VLC_CODEC_TSCC, "TechSmith Camtasia Screen Capture"),
572         A("TSCC"),
573         A("tscc"),
574
575     B(VLC_CODEC_CSCD, "CamStudio Screen Codec"),
576         A("CSCD"),
577         A("cscd"),
578
579     B(VLC_CODEC_ZMBV, "DosBox Capture Codec"),
580         A("ZMBV"),
581
582     B(VLC_CODEC_VMNC, "VMware Video"),
583         A("VMnc"),
584     B(VLC_CODEC_FRAPS, "FRAPS: Realtime Video Capture"),
585         A("FPS1"),
586         A("fps1"),
587
588     /* Duck TrueMotion */
589     B(VLC_CODEC_TRUEMOTION1, "Duck TrueMotion v1 Video"),
590         A("DUCK"),
591         A("PVEZ"),
592     B(VLC_CODEC_TRUEMOTION2, "Duck TrueMotion v2.0 Video"),
593         A("TM20"),
594
595     /* FFMPEG's SNOW wavelet codec */
596     B(VLC_CODEC_SNOW, "FFMpeg SNOW wavelet Video"),
597         A("SNOW"),
598         A("snow"),
599
600     B(VLC_CODEC_QTRLE, "Apple QuickTime RLE Video"),
601         A("rle "),
602
603     B(VLC_CODEC_QDRAW, "Apple QuickDraw Video"),
604         A("qdrw"),
605
606     B(VLC_CODEC_QPEG, "QPEG Video"),
607         A("QPEG"),
608         A("Q1.0"),
609         A("Q1.1"),
610
611     B(VLC_CODEC_ULTI, "IBM Ultimotion Video"),
612         A("ULTI"),
613
614     B(VLC_CODEC_VIXL, "Miro/Pinnacle VideoXL Video"),
615         A("VIXL"),
616         A("XIXL"),
617         E("PIXL", "Pinnacle VideoXL Video"),
618
619     B(VLC_CODEC_LOCO, "LOCO Video"),
620         A("LOCO"),
621
622     B(VLC_CODEC_WNV1, "Winnov WNV1 Video"),
623         A("WNV1"),
624
625     B(VLC_CODEC_AASC, "Autodesc RLE Video"),
626         A("AASC"),
627
628     B(VLC_CODEC_INDEO2, "Indeo Video v2"),
629         A("IV20"),
630         E("RT21", "Indeo Video 2.1" ),
631
632     /* Flash Screen Video */
633     B(VLC_CODEC_FLASHSV, "Flash Screen Video"),
634         A("FSV1"),
635     B(VLC_CODEC_FLASHSV2, "Flash Screen Video 2"),
636         A("FSV2"),
637
638     B(VLC_CODEC_KMVC, "Karl Morton's Video Codec (Worms)"),
639         A("KMVC"),
640
641     B(VLC_CODEC_NUV, "Nuppel Video"),
642         A("RJPG"),
643         A("NUV1"),
644
645     /* CODEC_ID_SMACKVIDEO */
646     B(VLC_CODEC_SMACKVIDEO, "Smacker Video"),
647         A("SMK2"),
648         A("SMK4"),
649
650     /* Chinese AVS - Untested */
651     B(VLC_CODEC_CAVS, "Chinese AVS"),
652         A("CAVS"),
653         A("AVs2"),
654         A("avs2"),
655
656     B(VLC_CODEC_AMV, "AMV"),
657
658     /* */
659     B(VLC_CODEC_DNXHD, "DNxHD"),
660         A("AVdn"),
661     B(VLC_CODEC_8BPS, "8BPS"),
662         A("8BPS"),
663     B(VLC_CODEC_MIMIC, "Mimic"),
664         A("ML2O"),
665
666     B(VLC_CODEC_CDG, "CD-G Video"),
667         A("CDG "),
668
669     B(VLC_CODEC_FRWU, "Forward Uncompressed" ),
670         A("FRWU"),
671
672     B(VLC_CODEC_INDEO5, "Indeo Video v5"),
673         A("IV50"),
674         A("iv50"),
675
676     B(VLC_CODEC_PRORES, "Apple ProRes 422"),
677         E("apch", "Apple ProRes 422 HQ"),
678         E("apcs", "Apple ProRes 422 LT"),
679         E("apco", "Apple ProRes 422 Proxy"),
680         E("ap4c", "Apple ProRes 4444"),
681
682     /* */
683     B(VLC_CODEC_YV12, "Planar 4:2:0 YVU"),
684         A("YV12"),
685         A("yv12"),
686     B(VLC_CODEC_YV9,  "Planar 4:1:0 YVU"),
687         A("YVU9"),
688     B(VLC_CODEC_I410, "Planar 4:1:0 YUV"),
689         A("I410"),
690     B(VLC_CODEC_I411, "Planar 4:1:1 YUV"),
691         A("I411"),
692     B(VLC_CODEC_I420, "Planar 4:2:0 YUV"),
693         A("I420"),
694         A("IYUV"),
695     B(VLC_CODEC_I422, "Planar 4:2:2 YUV"),
696         A("I422"),
697     B(VLC_CODEC_I444, "Planar 4:4:0 YUV"),
698         A("I440"),
699     B(VLC_CODEC_I444, "Planar 4:4:4 YUV"),
700         A("I444"),
701
702     B(VLC_CODEC_J420, "Planar 4:2:0 YUV full scale"),
703         A("J420"),
704     B(VLC_CODEC_J422, "Planar 4:2:2 YUV full scale"),
705         A("J422"),
706     B(VLC_CODEC_J440, "Planar 4:4:0 YUV full scale"),
707         A("J440"),
708     B(VLC_CODEC_J444, "Planar 4:4:4 YUV full scale"),
709         A("J444"),
710
711     B(VLC_CODEC_YUVP, "Palettized YUV with palette element Y:U:V:A"),
712         A("YUVP"),
713
714     B(VLC_CODEC_YUVA, "Planar YUV 4:4:4 Y:U:V:A"),
715         A("YUVA"),
716
717     B(VLC_CODEC_RGBP, "Palettized RGB with palette element R:G:B"),
718         A("RGBP"),
719
720     B(VLC_CODEC_RGB8, "8 bits RGB"),
721         A("RGB2"),
722     B(VLC_CODEC_RGB12, "12 bits RGB"),
723         A("RV12"),
724     B(VLC_CODEC_RGBA16, "16 bits RGBA"),
725         A("AV16"),
726     B(VLC_CODEC_RGB15, "15 bits RGB"),
727         A("RV15"),
728     B(VLC_CODEC_RGBT, "16 bits RGBT"),
729         A("RGBT"),
730     B(VLC_CODEC_RGB16, "16 bits RGB"),
731         A("RV16"),
732     B(VLC_CODEC_RGB24, "24 bits RGB"),
733         A("RV24"),
734     B(VLC_CODEC_RGB32, "32 bits RGB"),
735         A("RV32"),
736     B(VLC_CODEC_RGBA, "32 bits RGBA"),
737         A("RGBA"),
738         A("AV32"),
739
740     B(VLC_CODEC_GREY, "8 bits greyscale"),
741         A("GREY"),
742         A("Y800"),
743         A("Y8  "),
744
745     B(VLC_CODEC_UYVY, "Packed YUV 4:2:2, U:Y:V:Y"),
746         A("UYVY"),
747         A("UYNV"),
748         A("UYNY"),
749         A("Y422"),
750         A("HDYC"),
751         A("AVUI"),
752         A("uyv1"),
753         A("2vuy"),
754         A("2Vuy"),
755         A("2Vu1"),
756     B(VLC_CODEC_VYUY, "Packed YUV 4:2:2, V:Y:U:Y"),
757         A("VYUY"),
758     B(VLC_CODEC_YUYV, "Packed YUV 4:2:2, Y:U:Y:V"),
759         A("YUY2"),
760         A("YUYV"),
761         A("YUNV"),
762         A("V422"),
763     B(VLC_CODEC_YVYU, "Packed YUV 4:2:2, Y:V:Y:U"),
764         A("YVYU"),
765
766     B(VLC_CODEC_Y211, "Packed YUV 2:1:1, Y:U:Y:V "),
767         A("Y211"),
768     B(VLC_CODEC_CYUV, "Creative Packed YUV 4:2:2, U:Y:V:Y, reverted"),
769         A("cyuv"),
770         A("CYUV"),
771
772     B(VLC_CODEC_V210, "10-bit 4:2:2 Component YCbCr"),
773         A("v210"),
774
775     B(VLC_CODEC_NV12, "Biplanar 4:2:0 Y/UV"),
776         A("NV12"),
777     B(VLC_CODEC_NV21, "Biplanar 4:2:0 Y/VU"),
778         A("NV21"),
779     B(VLC_CODEC_NV16, "Biplanar 4:2:2 Y/UV"),
780         A("NV16"),
781     B(VLC_CODEC_NV61, "Biplanar 4:2:2 Y/VU"),
782         A("NV61"),
783
784     B(VLC_CODEC_I420_9L, "Planar 4:2:0 YUV 9-bit LE"),
785         A("I09L"),
786     B(VLC_CODEC_I420_9B, "Planar 4:2:0 YUV 9-bit BE"),
787         A("I09B"),
788     B(VLC_CODEC_I422_9L, "Planar 4:2:2 YUV 9-bit LE"),
789         A("I29L"),
790     B(VLC_CODEC_I422_9B, "Planar 4:2:2 YUV 9-bit BE"),
791         A("I29B"),
792     B(VLC_CODEC_I444_9L, "Planar 4:4:4 YUV 9-bit LE"),
793         A("I49L"),
794     B(VLC_CODEC_I444_9B, "Planar 4:4:4 YUV 9-bit BE"),
795         A("I49B"),
796
797     B(VLC_CODEC_I420_10L, "Planar 4:2:0 YUV 10-bit LE"),
798         A("I0AL"),
799     B(VLC_CODEC_I420_10B, "Planar 4:2:0 YUV 10-bit BE"),
800         A("I0AB"),
801     B(VLC_CODEC_I422_10L, "Planar 4:2:2 YUV 10-bit LE"),
802         A("I2AL"),
803     B(VLC_CODEC_I422_10B, "Planar 4:2:2 YUV 10-bit BE"),
804         A("I2AB"),
805     B(VLC_CODEC_I444_10L, "Planar 4:4:4 YUV 10-bit LE"),
806         A("I4AL"),
807     B(VLC_CODEC_I444_10B, "Planar 4:4:4 YUV 10-bit BE"),
808         A("I4AB"),
809
810     /* Videogames Codecs */
811
812     /* Interplay MVE */
813     B(VLC_CODEC_INTERPLAY, "Interplay MVE Video"),
814         A("imve"),
815         A("INPV"),
816
817     /* Id Quake II CIN */
818     B(VLC_CODEC_IDCIN, "Id Quake II CIN Video"),
819         A("IDCI"),
820
821     /* 4X Technologies */
822     B(VLC_CODEC_4XM, "4X Technologies Video"),
823         A("4XMV"),
824         A("4xmv"),
825
826     /* Id RoQ */
827     B(VLC_CODEC_ROQ, "Id RoQ Video"),
828         A("RoQv"),
829
830     /* Sony Playstation MDEC */
831     B(VLC_CODEC_MDEC, "PSX MDEC Video"),
832         A("MDEC"),
833
834     /* Sierra VMD */
835     B(VLC_CODEC_VMDVIDEO, "Sierra VMD Video"),
836         A("VMDV"),
837         A("vmdv"),
838
839     B(VLC_CODEC_DIRAC, "Dirac" ),
840         A("drac"),
841
842     /* Image */
843     B(VLC_CODEC_PNG, "PNG Image"),
844         A("png "),
845
846     B(VLC_CODEC_PPM, "PPM Image"),
847         A("ppm "),
848
849     B(VLC_CODEC_PGM, "PGM Image"),
850         A("pgm "),
851
852     B(VLC_CODEC_PGMYUV, "PGM YUV Image"),
853         A("pgmy"),
854
855     B(VLC_CODEC_PAM, "PAM Image"),
856         A("pam "),
857
858     B(VLC_CODEC_JPEGLS, "JPEG-LS"),
859         A("MJLS"),
860
861     B(VLC_CODEC_JPEG, "JPEG"),
862         A("jpeg"),
863         A("JPEG"),
864
865     B(VLC_CODEC_BMP, "BMP Image"),
866         A("bmp "),
867
868     B(VLC_CODEC_TIFF, "TIFF Image"),
869         A("tiff"),
870
871     B(VLC_CODEC_GIF, "GIF Image"),
872         A("gif "),
873
874
875     B(VLC_CODEC_TARGA, "Truevision Targa Image"),
876         A("tga "),
877         A("mtga"),
878         A("MTGA"),
879
880     B(VLC_CODEC_SGI, "SGI Image"),
881         A("sgi "),
882
883     B(VLC_CODEC_PNM, "Portable Anymap Image"),
884         A("pnm "),
885
886     B(VLC_CODEC_PCX, "Personal Computer Exchange Image"),
887         A("pcx "),
888
889     B(VLC_CODEC_JPEG2000, "JPEG 2000 Image"),
890         A("JP2K"),
891         A("mjp2"),
892         A("MJP2"),
893         A("MJ2C"),
894         A("LJ2C"),
895         A("LJ2K"),
896
897     B(VLC_CODEC_LAGARITH, "Lagarith Lossless"),
898         A("LAGS"),
899
900     B(0, "")
901 };
902 static const entry_t p_list_audio[] = {
903
904     /* Windows Media Audio 1 */
905     B(VLC_CODEC_WMA1, "Windows Media Audio 1"),
906         A("WMA1"),
907         A("wma1"),
908
909     /* Windows Media Audio 2 */
910     B(VLC_CODEC_WMA2, "Windows Media Audio 2"),
911         A("WMA2"),
912         A("wma2"),
913         A("wma "),
914
915     /* Windows Media Audio Professional */
916     B(VLC_CODEC_WMAP, "Windows Media Audio Professional"),
917         A("WMAP"),
918         A("wmap"),
919
920     /* Windows Media Audio Lossless */
921     B(VLC_CODEC_WMAL, "Windows Media Audio Lossless"),
922         A("WMAL"),
923         A("wmal"),
924
925     /* Windows Media Audio Speech */
926     B(VLC_CODEC_WMAS, "Windows Media Audio Voice (Speech)"),
927         A("WMAS"),
928         A("wmas"),
929
930     /* DV Audio */
931     B(VLC_CODEC_DVAUDIO, "DV Audio"),
932         A("dvau"),
933         A("vdva"),
934         A("dvca"),
935         A("RADV"),
936
937     /* MACE-3 Audio */
938     B(VLC_CODEC_MACE3, "MACE-3 Audio"),
939         A("MAC3"),
940
941     /* MACE-6 Audio */
942     B(VLC_CODEC_MACE6, "MACE-6 Audio"),
943         A("MAC6"),
944
945     /* MUSEPACK7 Audio */
946     B(VLC_CODEC_MUSEPACK7, "MUSEPACK7 Audio"),
947         A("MPC "),
948
949     /* MUSEPACK8 Audio */
950     B(VLC_CODEC_MUSEPACK8, "MUSEPACK8 Audio"),
951         A("MPCK"),
952         A("MPC8"),
953
954     /* RealAudio 1.0 */
955     B(VLC_CODEC_RA_144, "RealAudio 1.0"),
956         A("14_4"),
957         A("lpcJ"),
958
959     /* RealAudio 2.0 */
960     B(VLC_CODEC_RA_288, "RealAudio 2.0"),
961         A("28_8"),
962
963     B(VLC_CODEC_SIPR, "RealAudio Sipr"),
964         A("sipr"),
965
966     /* MPEG Audio layer 1/2/3 */
967     B(VLC_CODEC_MPGA, "MPEG Audio layer 1/2/3"),
968         A("mpga"),
969         A(".mp1"),
970         A(".mp2"),
971         A("mp3 "),
972         A(".mp3"),
973         A("MP3 "),
974         A("LAME"),
975         A("ms\x00\x50"),
976         A("ms\x00\x55"),
977
978     /* A52 Audio (aka AC3) */
979     B(VLC_CODEC_A52, "A52 Audio (aka AC3)"),
980         A("a52 "),
981         A("a52b"),
982         A("ac-3"),
983         A("sac3"),
984         A("ms\x20\x00"),
985
986     B(VLC_CODEC_EAC3, "A/52 B Audio (aka E-AC3)"),
987         A("eac3"),
988
989     /* DTS Audio */
990     B(VLC_CODEC_DTS, "DTS Audio"),
991         A("dts "),
992         A("DTS "),
993         A("dtsb"),
994         A("dtsc"),
995         A("ms\x20\x01"),
996
997     /* AAC audio */
998     B(VLC_CODEC_MP4A, "MPEG AAC Audio"),
999         A("mp4a"),
1000         A("aac "),
1001
1002     /* ALS audio */
1003     B(VLC_CODEC_ALS, "MPEG-4 Audio Lossless (ALS)"),
1004         A("als "),
1005
1006     /* 4X Technologies */
1007     B(VLC_CODEC_ADPCM_4XM, "4X Technologies Audio"),
1008         A("4xma"),
1009
1010     /* EA ADPCM */
1011     B(VLC_CODEC_ADPCM_EA, "EA ADPCM Audio"),
1012         A("ADEA"),
1013
1014     /* Interplay DPCM */
1015     B(VLC_CODEC_INTERPLAY_DPCM, "Interplay DPCM Audio"),
1016         A("idpc"),
1017
1018     /* Id RoQ */
1019     B(VLC_CODEC_ROQ_DPCM, "Id RoQ DPCM Audio"),
1020         A("RoQa"),
1021
1022     /* DCIN Audio */
1023     B(VLC_CODEC_DSICINAUDIO, "Delphine CIN Audio"),
1024         A("DCIA"),
1025
1026     /* Sony Playstation XA ADPCM */
1027     B(VLC_CODEC_ADPCM_XA, "PSX XA ADPCM Audio"),
1028         A("xa  "),
1029
1030     /* ADX ADPCM */
1031     B(VLC_CODEC_ADPCM_ADX, "ADX ADPCM Audio"),
1032         A("adx "),
1033
1034     /* Westwood ADPCM */
1035     B(VLC_CODEC_ADPCM_IMA_WS, "Westwood IMA ADPCM audio"),
1036         A("AIWS"),
1037
1038     /* MS ADPCM */
1039     B(VLC_CODEC_ADPCM_MS, "MS ADPCM audio"),
1040         A("ms\x00\x02"),
1041
1042     /* Sierra VMD */
1043     B(VLC_CODEC_VMDAUDIO, "Sierra VMD Audio"),
1044         A("vmda"),
1045
1046     /* G.726 ADPCM */
1047     B(VLC_CODEC_ADPCM_G726, "G.726 ADPCM Audio"),
1048         A("g726"),
1049
1050     /* G.722 ADPCM */
1051     B(VLC_CODEC_ADPCM_G722, "G.722 ADPCM Audio"),
1052         A("g722"),
1053
1054     /* Flash ADPCM */
1055     B(VLC_CODEC_ADPCM_SWF, "Flash ADPCM Audio"),
1056         A("SWFa"),
1057
1058     B(VLC_CODEC_ADPCM_IMA_WAV, "IMA WAV ADPCM Audio"),
1059         A("ms\x00\x11"),
1060
1061     B(VLC_CODEC_ADPCM_IMA_AMV, "IMA AMV ADPCM Audio"),
1062         A("imav"),
1063
1064     /* AMR */
1065     B(VLC_CODEC_AMR_NB, "AMR narrow band"),
1066         A("samr"),
1067
1068     B(VLC_CODEC_AMR_WB, "AMR wide band"),
1069         A("sawb"),
1070
1071     /* FLAC */
1072     B(VLC_CODEC_FLAC, "FLAC (Free Lossless Audio Codec)"),
1073         A("flac"),
1074
1075     /* ALAC */
1076     B(VLC_CODEC_ALAC, "Apple Lossless Audio Codec"),
1077         A("alac"),
1078
1079     /* QDM2 */
1080     B(VLC_CODEC_QDM2, "QDM2 Audio"),
1081         A("QDM2"),
1082
1083     /* COOK */
1084     B(VLC_CODEC_COOK, "Cook Audio"),
1085         A("cook"),
1086
1087     /* TTA: The Lossless True Audio */
1088     B(VLC_CODEC_TTA, "The Lossless True Audio"),
1089         A("TTA1"),
1090
1091     /* Shorten */
1092     B(VLC_CODEC_SHORTEN, "Shorten Lossless Audio"),
1093         A("shn "),
1094         A("shrn"),
1095
1096     B(VLC_CODEC_WAVPACK, "WavPack"),
1097         A("WVPK"),
1098         A("wvpk"),
1099
1100     B(VLC_CODEC_GSM, "GSM Audio"),
1101         A("gsm "),
1102
1103     B(VLC_CODEC_GSM_MS, "Microsoft GSM Audio"),
1104         A("agsm"),
1105
1106     B(VLC_CODEC_ATRAC1, "atrac 1"),
1107         A("atr1"),
1108
1109     B(VLC_CODEC_ATRAC3, "atrac 3"),
1110         A("atrc"),
1111         A("\x70\x02\x00\x00"),
1112
1113     B(VLC_CODEC_SONIC, "Sonic"),
1114         A("SONC"),
1115
1116     B(VLC_CODEC_IMC, "IMC" ),
1117         A("\x01\x04\x00\x00"),
1118
1119     B(VLC_CODEC_TRUESPEECH,"TrueSpeech"),
1120         A("\x22\x00\x00\x00"),
1121
1122     B(VLC_CODEC_NELLYMOSER, "NellyMoser ASAO"),
1123         A("NELL"),
1124         A("nmos"),
1125
1126     B(VLC_CODEC_APE, "Monkey's Audio"),
1127         A("APE "),
1128
1129     B(VLC_CODEC_MLP, "MLP/TrueHD Audio"),
1130         A("mlp "),
1131
1132     B(VLC_CODEC_TRUEHD, "TrueHD Audio"),
1133         A("trhd"),
1134
1135     B(VLC_CODEC_QCELP, "QCELP Audio"),
1136         A("Qclp"),
1137         A("Qclq"),
1138         A("sqcp"),
1139
1140     B(VLC_CODEC_SPEEX, "Speex Audio"),
1141         A("spx "),
1142         A("spxr"),
1143
1144     B(VLC_CODEC_VORBIS, "Vorbis Audio"),
1145         A("vorb"),
1146
1147     B(VLC_CODEC_302M, "302M Audio"),
1148         A("302m"),
1149
1150     B(VLC_CODEC_DVD_LPCM, "DVD LPCM Audio"),
1151         A("lpcm"),
1152
1153     B(VLC_CODEC_DVDA_LPCM, "DVD-Audio LPCM Audio"),
1154         A("apcm"),
1155
1156     B(VLC_CODEC_BD_LPCM, "BD LPCM Audio"),
1157         A("bpcm"),
1158
1159     B(VLC_CODEC_SDDS, "SDDS Audio"),
1160         A("sdds"),
1161         A("sddb"),
1162
1163     B(VLC_CODEC_MIDI, "MIDI Audio"),
1164         A("MIDI"),
1165
1166     /* PCM */
1167     B(VLC_CODEC_S8, "PCM S8"),
1168         A("s8  "),
1169
1170     B(VLC_CODEC_U8, "PCM U8"),
1171         A("u8  "),
1172
1173     B(VLC_CODEC_S16L, "PCM S16 LE"),
1174         A("s16l"),
1175
1176     B(VLC_CODEC_S16B, "PCM S16 BE"),
1177         A("s16b"),
1178
1179     B(VLC_CODEC_U16L, "PCM U16 LE"),
1180         A("u16l"),
1181
1182     B(VLC_CODEC_U16B, "PCM U16 BE"),
1183         A("u16b"),
1184
1185     B(VLC_CODEC_S20B, "PCM S20 BE"),
1186
1187     B(VLC_CODEC_S24L, "PCM S24 LE"),
1188         A("s24l"),
1189         A("42ni"),  /* Quicktime */
1190
1191     B(VLC_CODEC_S24B, "PCM S24 BE"),
1192         A("s24b"),
1193         A("in24"),  /* Quicktime */
1194
1195     B(VLC_CODEC_U24L, "PCM U24 LE"),
1196         A("u24l"),
1197
1198     B(VLC_CODEC_U24B, "PCM U24 BE"),
1199         A("u24b"),
1200
1201     B(VLC_CODEC_S32L, "PCM S32 LE"),
1202         A("s32l"),
1203         A("23ni"),  /* Quicktime */
1204
1205     B(VLC_CODEC_S32B, "PCM S32 BE"),
1206         A("s32b"),
1207         A("in32"),  /* Quicktime */
1208
1209     B(VLC_CODEC_U32L, "PCM U32 LE"),
1210         A("u32l"),
1211
1212     B(VLC_CODEC_U32B, "PCM U32 BE"),
1213         A("u32b"),
1214
1215     B(VLC_CODEC_ALAW, "PCM ALAW"),
1216         A("alaw"),
1217
1218     B(VLC_CODEC_MULAW, "PCM MU-LAW"),
1219         A("mlaw"),
1220         A("ulaw"),
1221
1222     B(VLC_CODEC_DAT12, "12 bits DAT audio"),
1223
1224     B(VLC_CODEC_S24DAUD, "PCM DAUD"),
1225         A("daud"),
1226
1227     B(VLC_CODEC_FI32, "32 bits fixed float"),
1228         A("fi32"),
1229
1230     B(VLC_CODEC_F32L, "32 bits float LE"),
1231         A("f32l"),
1232         A("fl32"),
1233
1234     B(VLC_CODEC_F32B, "32 bits float BE"),
1235         A("f32b"),
1236
1237     B(VLC_CODEC_F64L, "64 bits float LE"),
1238         A("f64l"),
1239
1240     B(VLC_CODEC_F64L, "64 bits float BE"),
1241         A("f64b"),
1242
1243     B(VLC_CODEC_TWINVQ, "TwinVQ"),
1244         A("TWIN"),
1245
1246     B(0, "")
1247 };
1248 static const entry_t p_list_spu[] = {
1249
1250     B(VLC_CODEC_SPU, "DVD Subtitles"),
1251         A("spu "),
1252         A("spub"),
1253
1254     B(VLC_CODEC_DVBS, "DVB Subtitles"),
1255         A("dvbs"),
1256
1257     B(VLC_CODEC_SUBT, "Text subtitles with various tags"),
1258         A("subt"),
1259
1260     B(VLC_CODEC_XSUB, "DivX XSUB subtitles"),
1261         A("XSUB"),
1262         A("xsub"),
1263         A("DXSB"),
1264
1265     B(VLC_CODEC_SSA, "SubStation Alpha subtitles"),
1266         A("ssa "),
1267
1268     B(VLC_CODEC_TEXT, "Plain text subtitles"),
1269         A("TEXT"),
1270
1271     B(VLC_CODEC_TELETEXT, "Teletext"),
1272         A("telx"),
1273
1274     B(VLC_CODEC_KATE, "Kate subtitles"),
1275         A("kate"),
1276
1277     B(VLC_CODEC_CMML, "CMML annotations/metadata"),
1278         A("cmml"),
1279
1280     B(VLC_CODEC_ITU_T140, "ITU T.140 subtitles"),
1281         A("t140"),
1282
1283     B(VLC_CODEC_USF, "USF subtitles"),
1284         A("usf "),
1285
1286     B(VLC_CODEC_OGT, "OGT subtitles"),
1287         A("ogt "),
1288
1289     B(VLC_CODEC_CVD, "CVD subtitles"),
1290         A("cvd "),
1291
1292     B(VLC_CODEC_BD_PG, "BD subtitles"),
1293         A("bdpg"),
1294
1295     B(VLC_CODEC_EBU_STL, "EBU STL subtitles"),
1296         A("STL "),
1297
1298     B(0, "")
1299 };
1300
1301 /* Create a fourcc from a string.
1302  * XXX it assumes that the string is at least four bytes */
1303 static inline vlc_fourcc_t CreateFourcc( const char *psz_fourcc )
1304 {
1305     return VLC_FOURCC( psz_fourcc[0], psz_fourcc[1],
1306                        psz_fourcc[2], psz_fourcc[3] );
1307 }
1308
1309 /* */
1310 static entry_t Lookup( const entry_t p_list[], vlc_fourcc_t i_fourcc )
1311 {
1312     const char *p_class = NULL;
1313     const char *psz_description = NULL;
1314
1315     entry_t e = B(0, "");
1316
1317     for( int i = 0; ; i++ )
1318     {
1319         const entry_t *p = &p_list[i];
1320         const vlc_fourcc_t i_entry_fourcc = CreateFourcc( p->p_fourcc );
1321         const vlc_fourcc_t i_entry_class = CreateFourcc( p->p_class );
1322
1323         if( i_entry_fourcc == 0 )
1324             break;
1325
1326         if( i_entry_class != 0 )
1327         {
1328             p_class = p->p_class;
1329             psz_description = p->psz_description;
1330         }
1331
1332         if( i_entry_fourcc == i_fourcc )
1333         {
1334             assert( p_class != NULL );
1335
1336             memcpy( e.p_class, p_class, 4 );
1337             memcpy( e.p_fourcc, p->p_fourcc, 4 );
1338             e.psz_description = p->psz_description ?
1339                                 p->psz_description : psz_description;
1340             break;
1341         }
1342     }
1343     return e;
1344 }
1345
1346 /* */
1347 static entry_t Find( int i_cat, vlc_fourcc_t i_fourcc )
1348 {
1349     entry_t e;
1350
1351     switch( i_cat )
1352     {
1353     case VIDEO_ES:
1354         return Lookup( p_list_video, i_fourcc );
1355     case AUDIO_ES:
1356         return Lookup( p_list_audio, i_fourcc );
1357     case SPU_ES:
1358         return Lookup( p_list_spu, i_fourcc );
1359
1360     default:
1361         e = Find( VIDEO_ES, i_fourcc );
1362         if( CreateFourcc( e.p_class ) == 0 )
1363             e = Find( AUDIO_ES, i_fourcc );
1364         if( CreateFourcc( e.p_class ) == 0 )
1365             e = Find( SPU_ES, i_fourcc );
1366         return e;
1367     }
1368 }
1369
1370 /* */
1371 vlc_fourcc_t vlc_fourcc_GetCodec( int i_cat, vlc_fourcc_t i_fourcc )
1372 {
1373     entry_t e = Find( i_cat, i_fourcc );
1374
1375     if( CreateFourcc( e.p_class ) == 0 )
1376         return i_fourcc;
1377     return CreateFourcc( e.p_class );
1378 }
1379
1380 vlc_fourcc_t vlc_fourcc_GetCodecFromString( int i_cat, const char *psz_fourcc )
1381 {
1382     if( !psz_fourcc || strlen(psz_fourcc) != 4 )
1383         return 0;
1384     return vlc_fourcc_GetCodec( i_cat,
1385                                 VLC_FOURCC( psz_fourcc[0], psz_fourcc[1],
1386                                             psz_fourcc[2], psz_fourcc[3] ) );
1387 }
1388
1389 vlc_fourcc_t vlc_fourcc_GetCodecAudio( vlc_fourcc_t i_fourcc, int i_bits )
1390 {
1391     const int i_bytes = ( i_bits + 7 ) / 8;
1392
1393     if( i_fourcc == VLC_FOURCC( 'a', 'f', 'l', 't' ) )
1394     {
1395         switch( i_bytes )
1396         {
1397         case 4:
1398             return VLC_CODEC_FL32;
1399         case 8:
1400             return VLC_CODEC_FL64;
1401         default:
1402             return 0;
1403         }
1404     }
1405     else if( i_fourcc == VLC_FOURCC( 'a', 'r', 'a', 'w' ) ||
1406              i_fourcc == VLC_FOURCC( 'p', 'c', 'm', ' ' ) )
1407     {
1408         switch( i_bytes )
1409         {
1410         case 1:
1411             return VLC_CODEC_U8;
1412         case 2:
1413             return VLC_CODEC_S16L;
1414         case 3:
1415             return VLC_CODEC_S24L;
1416             break;
1417         case 4:
1418             return VLC_CODEC_S32L;
1419         default:
1420             return 0;
1421         }
1422     }
1423     else if( i_fourcc == VLC_FOURCC( 't', 'w', 'o', 's' ) )
1424     {
1425         switch( i_bytes )
1426         {
1427         case 1:
1428             return VLC_CODEC_S8;
1429         case 2:
1430             return VLC_CODEC_S16B;
1431         case 3:
1432             return VLC_CODEC_S24B;
1433         case 4:
1434             return VLC_CODEC_S32B;
1435         default:
1436             return 0;
1437         }
1438     }
1439     else if( i_fourcc == VLC_FOURCC( 's', 'o', 'w', 't' ) )
1440     {
1441         switch( i_bytes )
1442         {
1443         case 1:
1444             return VLC_CODEC_S8;
1445         case 2:
1446             return VLC_CODEC_S16L;
1447         case 3:
1448             return VLC_CODEC_S24L;
1449         case 4:
1450             return VLC_CODEC_S32L;
1451         default:
1452             return 0;
1453         }
1454     }
1455     else
1456     {
1457         return vlc_fourcc_GetCodec( AUDIO_ES, i_fourcc );
1458     }
1459 }
1460
1461 /* */
1462 const char *vlc_fourcc_GetDescription( int i_cat, vlc_fourcc_t i_fourcc )
1463 {
1464     entry_t e = Find( i_cat, i_fourcc );
1465
1466     return e.psz_description;
1467 }
1468
1469
1470 /* */
1471 #define VLC_CODEC_YUV_PLANAR_410 \
1472     VLC_CODEC_I410, VLC_CODEC_YV9
1473
1474 #define VLC_CODEC_YUV_PLANAR_420 \
1475     VLC_CODEC_I420, VLC_CODEC_YV12, VLC_CODEC_J420
1476
1477 #define VLC_CODEC_YUV_PLANAR_420_16 \
1478     VLC_CODEC_I420_10L, VLC_CODEC_I420_10B, VLC_CODEC_I420_9L, VLC_CODEC_I420_9B
1479
1480 #define VLC_CODEC_YUV_PLANAR_422 \
1481     VLC_CODEC_I422, VLC_CODEC_J422
1482
1483 #define VLC_CODEC_YUV_PLANAR_422_16 \
1484     VLC_CODEC_I422_10L, VLC_CODEC_I422_10B, VLC_CODEC_I422_9L, VLC_CODEC_I422_9B
1485
1486 #define VLC_CODEC_YUV_PLANAR_440 \
1487     VLC_CODEC_I440, VLC_CODEC_J440
1488
1489 #define VLC_CODEC_YUV_PLANAR_444 \
1490     VLC_CODEC_I444, VLC_CODEC_J444
1491
1492 #define VLC_CODEC_YUV_PLANAR_444_16 \
1493     VLC_CODEC_I444_10L, VLC_CODEC_I444_10B, VLC_CODEC_I444_9L, VLC_CODEC_I444_9B
1494
1495 #define VLC_CODEC_YUV_PACKED \
1496     VLC_CODEC_YUYV, VLC_CODEC_YVYU, \
1497     VLC_CODEC_UYVY, VLC_CODEC_VYUY
1498
1499 #define VLC_CODEC_FALLBACK_420 \
1500     VLC_CODEC_YUV_PLANAR_422, VLC_CODEC_YUV_PACKED, \
1501     VLC_CODEC_YUV_PLANAR_444, VLC_CODEC_YUV_PLANAR_440, \
1502     VLC_CODEC_I411, VLC_CODEC_YUV_PLANAR_410, VLC_CODEC_Y211
1503
1504 static const vlc_fourcc_t p_I420_fallback[] = {
1505     VLC_CODEC_I420, VLC_CODEC_YV12, VLC_CODEC_J420, VLC_CODEC_FALLBACK_420, 0
1506 };
1507 static const vlc_fourcc_t p_J420_fallback[] = {
1508     VLC_CODEC_J420, VLC_CODEC_I420, VLC_CODEC_YV12, VLC_CODEC_FALLBACK_420, 0
1509 };
1510 static const vlc_fourcc_t p_YV12_fallback[] = {
1511     VLC_CODEC_YV12, VLC_CODEC_I420, VLC_CODEC_J420, VLC_CODEC_FALLBACK_420, 0
1512 };
1513
1514 #define VLC_CODEC_FALLBACK_420_16 \
1515     VLC_CODEC_I420, VLC_CODEC_YV12, VLC_CODEC_J420, VLC_CODEC_FALLBACK_420
1516
1517 static const vlc_fourcc_t p_I420_9L_fallback[] = {
1518     VLC_CODEC_I420_9L, VLC_CODEC_I420_9B, VLC_CODEC_FALLBACK_420_16, 0
1519 };
1520 static const vlc_fourcc_t p_I420_9B_fallback[] = {
1521     VLC_CODEC_I420_9B, VLC_CODEC_I420_9L, VLC_CODEC_FALLBACK_420_16, 0
1522 };
1523 static const vlc_fourcc_t p_I420_10L_fallback[] = {
1524     VLC_CODEC_I420_10L, VLC_CODEC_I420_10B, VLC_CODEC_FALLBACK_420_16, 0
1525 };
1526 static const vlc_fourcc_t p_I420_10B_fallback[] = {
1527     VLC_CODEC_I420_10B, VLC_CODEC_I420_10L, VLC_CODEC_FALLBACK_420_16, 0
1528 };
1529
1530 #define VLC_CODEC_FALLBACK_422 \
1531     VLC_CODEC_YUV_PACKED, VLC_CODEC_YUV_PLANAR_420, \
1532     VLC_CODEC_YUV_PLANAR_444, VLC_CODEC_YUV_PLANAR_440, \
1533     VLC_CODEC_I411, VLC_CODEC_YUV_PLANAR_410, VLC_CODEC_Y211
1534
1535 static const vlc_fourcc_t p_I422_fallback[] = {
1536     VLC_CODEC_I422, VLC_CODEC_J422, VLC_CODEC_FALLBACK_422, 0
1537 };
1538 static const vlc_fourcc_t p_J422_fallback[] = {
1539     VLC_CODEC_J422, VLC_CODEC_I422, VLC_CODEC_FALLBACK_422, 0
1540 };
1541
1542 #define VLC_CODEC_FALLBACK_422_16 \
1543     VLC_CODEC_I422, VLC_CODEC_J422, VLC_CODEC_FALLBACK_422
1544
1545 static const vlc_fourcc_t p_I422_9L_fallback[] = {
1546     VLC_CODEC_I422_9L, VLC_CODEC_I422_9B, VLC_CODEC_FALLBACK_422_16, 0
1547 };
1548 static const vlc_fourcc_t p_I422_9B_fallback[] = {
1549     VLC_CODEC_I422_9B, VLC_CODEC_I422_9L, VLC_CODEC_FALLBACK_422_16, 0
1550 };
1551 static const vlc_fourcc_t p_I422_10L_fallback[] = {
1552     VLC_CODEC_I422_10L, VLC_CODEC_I422_10B, VLC_CODEC_FALLBACK_422_16, 0
1553 };
1554 static const vlc_fourcc_t p_I422_10B_fallback[] = {
1555     VLC_CODEC_I422_10B, VLC_CODEC_I422_10L, VLC_CODEC_FALLBACK_422_16, 0
1556 };
1557
1558 #define VLC_CODEC_FALLBACK_444 \
1559     VLC_CODEC_YUV_PLANAR_422, VLC_CODEC_YUV_PACKED, \
1560     VLC_CODEC_YUV_PLANAR_420, VLC_CODEC_YUV_PLANAR_440, \
1561     VLC_CODEC_I411, VLC_CODEC_YUV_PLANAR_410, VLC_CODEC_Y211
1562
1563 static const vlc_fourcc_t p_I444_fallback[] = {
1564     VLC_CODEC_I444, VLC_CODEC_J444, VLC_CODEC_FALLBACK_444, 0
1565 };
1566 static const vlc_fourcc_t p_J444_fallback[] = {
1567     VLC_CODEC_J444, VLC_CODEC_I444, VLC_CODEC_FALLBACK_444, 0
1568 };
1569
1570 #define VLC_CODEC_FALLBACK_444_16 \
1571     VLC_CODEC_I444, VLC_CODEC_J444, VLC_CODEC_FALLBACK_444
1572
1573 static const vlc_fourcc_t p_I444_9L_fallback[] = {
1574     VLC_CODEC_I444_9L, VLC_CODEC_I444_9B, VLC_CODEC_FALLBACK_444_16, 0
1575 };
1576 static const vlc_fourcc_t p_I444_9B_fallback[] = {
1577     VLC_CODEC_I444_9B, VLC_CODEC_I444_9L, VLC_CODEC_FALLBACK_444_16, 0
1578 };
1579 static const vlc_fourcc_t p_I444_10L_fallback[] = {
1580     VLC_CODEC_I444_10L, VLC_CODEC_I444_10B, VLC_CODEC_FALLBACK_444_16, 0
1581 };
1582 static const vlc_fourcc_t p_I444_10B_fallback[] = {
1583     VLC_CODEC_I444_10B, VLC_CODEC_I444_10L, VLC_CODEC_FALLBACK_444_16, 0
1584 };
1585
1586 static const vlc_fourcc_t p_I440_fallback[] = {
1587     VLC_CODEC_I440,
1588     VLC_CODEC_YUV_PLANAR_420,
1589     VLC_CODEC_YUV_PLANAR_422,
1590     VLC_CODEC_YUV_PLANAR_444,
1591     VLC_CODEC_YUV_PACKED,
1592     VLC_CODEC_I411, VLC_CODEC_YUV_PLANAR_410, VLC_CODEC_Y211, 0
1593 };
1594
1595 #define VLC_CODEC_FALLBACK_PACKED \
1596     VLC_CODEC_YUV_PLANAR_422, VLC_CODEC_YUV_PLANAR_420, \
1597     VLC_CODEC_YUV_PLANAR_444, VLC_CODEC_YUV_PLANAR_440, \
1598     VLC_CODEC_I411, VLC_CODEC_YUV_PLANAR_410, VLC_CODEC_Y211
1599
1600 static const vlc_fourcc_t p_YUYV_fallback[] = {
1601     VLC_CODEC_YUYV,
1602     VLC_CODEC_YVYU,
1603     VLC_CODEC_UYVY,
1604     VLC_CODEC_VYUY,
1605     VLC_CODEC_FALLBACK_PACKED, 0
1606 };
1607 static const vlc_fourcc_t p_YVYU_fallback[] = {
1608     VLC_CODEC_YVYU,
1609     VLC_CODEC_YUYV,
1610     VLC_CODEC_UYVY,
1611     VLC_CODEC_VYUY,
1612     VLC_CODEC_FALLBACK_PACKED, 0
1613 };
1614 static const vlc_fourcc_t p_UYVY_fallback[] = {
1615     VLC_CODEC_UYVY,
1616     VLC_CODEC_VYUY,
1617     VLC_CODEC_YUYV,
1618     VLC_CODEC_YVYU,
1619     VLC_CODEC_FALLBACK_PACKED, 0
1620 };
1621 static const vlc_fourcc_t p_VYUY_fallback[] = {
1622     VLC_CODEC_VYUY,
1623     VLC_CODEC_UYVY,
1624     VLC_CODEC_YUYV,
1625     VLC_CODEC_YVYU,
1626     VLC_CODEC_FALLBACK_PACKED, 0
1627 };
1628
1629 static const vlc_fourcc_t *pp_YUV_fallback[] = {
1630     p_YV12_fallback,
1631     p_I420_fallback,
1632     p_I420_9L_fallback,
1633     p_I420_9B_fallback,
1634     p_I420_10L_fallback,
1635     p_I420_10B_fallback,
1636     p_J420_fallback,
1637     p_I422_fallback,
1638     p_I422_9L_fallback,
1639     p_I422_9B_fallback,
1640     p_I422_10L_fallback,
1641     p_I422_10B_fallback,
1642     p_J422_fallback,
1643     p_I444_fallback,
1644     p_J444_fallback,
1645     p_I444_9L_fallback,
1646     p_I444_9B_fallback,
1647     p_I444_10L_fallback,
1648     p_I444_10B_fallback,
1649     p_I440_fallback,
1650     p_YUYV_fallback,
1651     p_YVYU_fallback,
1652     p_UYVY_fallback,
1653     p_VYUY_fallback,
1654
1655
1656     NULL,
1657 };
1658
1659 static const vlc_fourcc_t p_list_YUV[] = {
1660     VLC_CODEC_YUV_PLANAR_420,
1661     VLC_CODEC_YUV_PLANAR_422,
1662     VLC_CODEC_YUV_PLANAR_440,
1663     VLC_CODEC_YUV_PLANAR_444,
1664     VLC_CODEC_YUV_PACKED,
1665     VLC_CODEC_I411, VLC_CODEC_YUV_PLANAR_410, VLC_CODEC_Y211,
1666     VLC_CODEC_YUV_PLANAR_420_16,
1667     VLC_CODEC_YUV_PLANAR_422_16,
1668     VLC_CODEC_YUV_PLANAR_444_16,
1669     0,
1670 };
1671
1672 /* */
1673 static const vlc_fourcc_t p_RGB32_fallback[] = {
1674     VLC_CODEC_RGB32,
1675     VLC_CODEC_RGB24,
1676     VLC_CODEC_RGB16,
1677     VLC_CODEC_RGB15,
1678     VLC_CODEC_RGB8,
1679     0,
1680 };
1681 static const vlc_fourcc_t p_RGB24_fallback[] = {
1682     VLC_CODEC_RGB24,
1683     VLC_CODEC_RGB32,
1684     VLC_CODEC_RGB16,
1685     VLC_CODEC_RGB15,
1686     VLC_CODEC_RGB8,
1687     0,
1688 };
1689 static const vlc_fourcc_t p_RGB16_fallback[] = {
1690     VLC_CODEC_RGB16,
1691     VLC_CODEC_RGB24,
1692     VLC_CODEC_RGB32,
1693     VLC_CODEC_RGB15,
1694     VLC_CODEC_RGB8,
1695     0,
1696 };
1697 static const vlc_fourcc_t p_RGB15_fallback[] = {
1698     VLC_CODEC_RGB15,
1699     VLC_CODEC_RGB16,
1700     VLC_CODEC_RGB24,
1701     VLC_CODEC_RGB32,
1702     VLC_CODEC_RGB8,
1703     0,
1704 };
1705 static const vlc_fourcc_t p_RGB8_fallback[] = {
1706     VLC_CODEC_RGB8,
1707     VLC_CODEC_RGB15,
1708     VLC_CODEC_RGB16,
1709     VLC_CODEC_RGB24,
1710     VLC_CODEC_RGB32,
1711     0,
1712 };
1713 static const vlc_fourcc_t *pp_RGB_fallback[] = {
1714     p_RGB32_fallback,
1715     p_RGB24_fallback,
1716     p_RGB16_fallback,
1717     p_RGB15_fallback,
1718     p_RGB8_fallback,
1719     NULL,
1720 };
1721
1722
1723 /* */
1724 static const vlc_fourcc_t *GetFallback( vlc_fourcc_t i_fourcc,
1725                                         const vlc_fourcc_t *pp_fallback[],
1726                                         const vlc_fourcc_t p_list[] )
1727 {
1728     for( unsigned i = 0; pp_fallback[i]; i++ )
1729     {
1730         if( pp_fallback[i][0] == i_fourcc )
1731             return pp_fallback[i];
1732     }
1733     return p_list;
1734 }
1735
1736 const vlc_fourcc_t *vlc_fourcc_GetYUVFallback( vlc_fourcc_t i_fourcc )
1737 {
1738     return GetFallback( i_fourcc, pp_YUV_fallback, p_list_YUV );
1739 }
1740 const vlc_fourcc_t *vlc_fourcc_GetRGBFallback( vlc_fourcc_t i_fourcc )
1741 {
1742     return GetFallback( i_fourcc, pp_RGB_fallback, p_RGB32_fallback );
1743 }
1744
1745 bool vlc_fourcc_AreUVPlanesSwapped( vlc_fourcc_t a, vlc_fourcc_t b )
1746 {
1747     static const vlc_fourcc_t pp_swapped[][4] = {
1748         { VLC_CODEC_YV12, VLC_CODEC_I420, VLC_CODEC_J420, 0 },
1749         { VLC_CODEC_YV9,  VLC_CODEC_I410, 0 },
1750         { 0 }
1751     };
1752
1753     for( int i = 0; pp_swapped[i][0]; i++ )
1754     {
1755         if( pp_swapped[i][0] == b )
1756         {
1757             vlc_fourcc_t t = a;
1758             a = b;
1759             b = t;
1760         }
1761         if( pp_swapped[i][0] != a )
1762             continue;
1763         for( int j = 1; pp_swapped[i][j]; j++ )
1764         {
1765             if( pp_swapped[i][j] == b )
1766                 return true;
1767         }
1768     }
1769     return false;
1770 }
1771
1772 bool vlc_fourcc_IsYUV(vlc_fourcc_t fcc)
1773 {
1774     for( unsigned i = 0; p_list_YUV[i]; i++ )
1775     {
1776         if( p_list_YUV[i] == fcc )
1777             return true;
1778     }
1779     return false;
1780 }
1781
1782 #define PLANAR(n, w_den, h_den, size, bits) \
1783     { .plane_count = n, \
1784       .p = { {.w = {1,    1}, .h = {1,    1}}, \
1785              {.w = {1,w_den}, .h = {1,h_den}}, \
1786              {.w = {1,w_den}, .h = {1,h_den}}, \
1787              {.w = {1,    1}, .h = {1,    1}} }, \
1788       .pixel_size = size, \
1789       .pixel_bits = bits }
1790
1791 #define PLANAR_8(n, w_den, h_den)        PLANAR(n, w_den, h_den, 1, 8)
1792 #define PLANAR_16(n, w_den, h_den, bits) PLANAR(n, w_den, h_den, 2, bits)
1793
1794 #define PACKED_FMT(size, bits) \
1795     { .plane_count = 1, \
1796       .p = { {.w = {1,1}, .h = {1,1}} }, \
1797       .pixel_size = size, \
1798       .pixel_bits = bits }
1799
1800 static const struct
1801 {
1802     vlc_fourcc_t             p_fourcc[6];
1803     vlc_chroma_description_t description;
1804 } p_list_chroma_description[] = {
1805     { { VLC_CODEC_I411, 0 },                   PLANAR_8(3, 4, 1) },
1806     { { VLC_CODEC_YUV_PLANAR_410, 0 },         PLANAR_8(3, 4, 4) },
1807     { { VLC_CODEC_YUV_PLANAR_420, 0 },         PLANAR_8(3, 2, 2) },
1808     { { VLC_CODEC_NV12, VLC_CODEC_NV21, 0 },   PLANAR_8(2, 1, 2) },
1809     { { VLC_CODEC_YUV_PLANAR_422, 0 },         PLANAR_8(3, 2, 1) },
1810     { { VLC_CODEC_YUV_PLANAR_440, 0 },         PLANAR_8(3, 1, 2) },
1811     { { VLC_CODEC_YUV_PLANAR_444, 0 },         PLANAR_8(3, 1, 1) },
1812     { { VLC_CODEC_YUVA, 0 },                   PLANAR_8(4, 1, 1) },
1813
1814     { { VLC_CODEC_I420_10L,
1815         VLC_CODEC_I420_10B, 0 },               PLANAR_16(3, 2, 2, 10) },
1816     { { VLC_CODEC_I420_9L,
1817         VLC_CODEC_I420_9B, 0 },                PLANAR_16(3, 2, 2,  9) },
1818     { { VLC_CODEC_I422_10L,
1819         VLC_CODEC_I422_10B, 0 },               PLANAR_16(3, 2, 1, 10) },
1820     { { VLC_CODEC_I422_9L,
1821         VLC_CODEC_I422_9B, 0 },                PLANAR_16(3, 2, 1,  9) },
1822     { { VLC_CODEC_I444_10L,
1823         VLC_CODEC_I444_10B, 0 },               PLANAR_16(3, 1, 1, 10) },
1824     { { VLC_CODEC_I444_9L,
1825         VLC_CODEC_I444_9B, 0 },                PLANAR_16(3, 1, 1,  9) },
1826
1827     { { VLC_CODEC_YUV_PACKED, 0 },             PACKED_FMT(2, 16) },
1828     { { VLC_CODEC_RGB8, VLC_CODEC_GREY,
1829         VLC_CODEC_YUVP, VLC_CODEC_RGBP, 0 },   PACKED_FMT(1, 8) },
1830
1831     { { VLC_CODEC_RGB15, 0 },                  PACKED_FMT(2, 15) },
1832     { { VLC_CODEC_RGB12, 0 },                  PACKED_FMT(2, 12) },
1833     { { VLC_CODEC_RGB16, VLC_CODEC_RGBT,
1834         VLC_CODEC_RGBA16, 0 },                 PACKED_FMT(2, 16) },
1835     { { VLC_CODEC_RGB24, 0 },                  PACKED_FMT(3, 24) },
1836     { { VLC_CODEC_RGB32, 0 },                  PACKED_FMT(4, 24) },
1837     { { VLC_CODEC_RGBA,  0 },                  PACKED_FMT(4, 32) },
1838
1839     { { VLC_CODEC_Y211, 0 },                   { 1, { {{1,4}, {1,1}} }, 4, 32 } },
1840
1841     { {0}, { 0, {}, 0, 0 } }
1842 };
1843
1844 #undef PACKED_FMT
1845 #undef PLANAR_16
1846 #undef PLANAR_8
1847 #undef PLANAR
1848
1849 const vlc_chroma_description_t *vlc_fourcc_GetChromaDescription( vlc_fourcc_t i_fourcc )
1850 {
1851     for( unsigned i = 0; p_list_chroma_description[i].p_fourcc[0]; i++ )
1852     {
1853         const vlc_fourcc_t *p_fourcc = p_list_chroma_description[i].p_fourcc;
1854         for( unsigned j = 0; p_fourcc[j]; j++ )
1855         {
1856             if( p_fourcc[j] == i_fourcc )
1857                 return &p_list_chroma_description[i].description;
1858         }
1859     }
1860     return NULL;
1861 }