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