fourcc.c 17.5 KB
Newer Older
1
/*****************************************************************************
2
 * fourcc.c: libavcodec <-> libvlc conversion routines
3
 *****************************************************************************
4
 * Copyright (C) 1999-2009 the VideoLAN team
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 * $Id$
 *
 * Authors: Laurent Aimar <fenrir@via.ecp.fr>
 *          Gildas Bazin <gbazin@videolan.org>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
 *****************************************************************************/

25
26
27
28
29
30
31
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif

#include <vlc_common.h>
#include <vlc_codec.h>

32
#include <libavcodec/avcodec.h>
33
34
#include "avcodec.h"

35
/*****************************************************************************
36
 * Codec fourcc -> libavcodec Codec_id mapping
37
 *****************************************************************************/
38
static const struct
39
40
41
42
43
44
45
46
47
48
{
    vlc_fourcc_t  i_fourcc;
    int  i_codec;
    int  i_cat;
} codecs_table[] =
{
    /*
     * Video Codecs
     */

Laurent Aimar's avatar
Laurent Aimar committed
49
    { VLC_CODEC_MPGV, CODEC_ID_MPEG2VIDEO, VIDEO_ES },
50
    { VLC_CODEC_MPGV, CODEC_ID_MPEG1VIDEO, VIDEO_ES },
51
52

    { VLC_CODEC_MP4V, CODEC_ID_MPEG4, VIDEO_ES },
53
54
    /* 3ivx delta 3.5 Unsupported
     * putting it here gives extreme distorted images
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
    { VLC_FOURCC('3','I','V','1'), CODEC_ID_MPEG4, VIDEO_ES },
    { VLC_FOURCC('3','i','v','1'), CODEC_ID_MPEG4, VIDEO_ES }, */

    { VLC_CODEC_DIV1, CODEC_ID_MSMPEG4V1, VIDEO_ES },
    { VLC_CODEC_DIV2, CODEC_ID_MSMPEG4V2, VIDEO_ES },
    { VLC_CODEC_DIV3, CODEC_ID_MSMPEG4V3, VIDEO_ES },

    { VLC_CODEC_SVQ1, CODEC_ID_SVQ1, VIDEO_ES },
    { VLC_CODEC_SVQ3, CODEC_ID_SVQ3, VIDEO_ES },

    { VLC_CODEC_H264, CODEC_ID_H264, VIDEO_ES },
    { VLC_CODEC_H263, CODEC_ID_H263, VIDEO_ES },
    { VLC_CODEC_H263I,CODEC_ID_H263I,VIDEO_ES },
    { VLC_CODEC_H263P,CODEC_ID_H263P,VIDEO_ES },

    { VLC_CODEC_FLV1, CODEC_ID_FLV1, VIDEO_ES },

    { VLC_CODEC_H261, CODEC_ID_H261, VIDEO_ES },
    { VLC_CODEC_FLIC, CODEC_ID_FLIC, VIDEO_ES },

    { VLC_CODEC_MJPG, CODEC_ID_MJPEG, VIDEO_ES },
    { VLC_CODEC_MJPGB,CODEC_ID_MJPEGB,VIDEO_ES },
    { VLC_CODEC_LJPG, CODEC_ID_LJPEG, VIDEO_ES },

    { VLC_CODEC_SP5X, CODEC_ID_SP5X, VIDEO_ES },

    { VLC_CODEC_DV,   CODEC_ID_DVVIDEO, VIDEO_ES },

    { VLC_CODEC_WMV1, CODEC_ID_WMV1, VIDEO_ES },
    { VLC_CODEC_WMV2, CODEC_ID_WMV2, VIDEO_ES },
    { VLC_CODEC_WMV3, CODEC_ID_WMV3, VIDEO_ES },
86
87
88
#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT( 52, 90, 1 )
    { VLC_CODEC_WMVP, CODEC_ID_WMV3, VIDEO_ES },
#endif
89
90

    { VLC_CODEC_VC1,  CODEC_ID_VC1, VIDEO_ES },
91
    { VLC_CODEC_WMVA, CODEC_ID_VC1, VIDEO_ES },
92

93
94
    { VLC_CODEC_MSVIDEO1, CODEC_ID_MSVIDEO1, VIDEO_ES },
    { VLC_CODEC_MSRLE, CODEC_ID_MSRLE, VIDEO_ES },
95

96
    { VLC_CODEC_INDEO2, CODEC_ID_INDEO2, VIDEO_ES },
97
    /* Indeo Video Codecs (Quality of this decoder on ppc is not good) */
98
99
100
101
102
103
104
105
106
107
108
    { VLC_CODEC_INDEO3, CODEC_ID_INDEO3, VIDEO_ES },

    { VLC_CODEC_HUFFYUV, CODEC_ID_HUFFYUV, VIDEO_ES },
    { VLC_CODEC_FFVHUFF, CODEC_ID_FFVHUFF, VIDEO_ES },
    { VLC_CODEC_CYUV, CODEC_ID_CYUV, VIDEO_ES },

    { VLC_CODEC_VP3, CODEC_ID_VP3, VIDEO_ES },
    { VLC_CODEC_VP5, CODEC_ID_VP5, VIDEO_ES },
    { VLC_CODEC_VP6, CODEC_ID_VP6, VIDEO_ES },
    { VLC_CODEC_VP6F, CODEC_ID_VP6F, VIDEO_ES },
    { VLC_CODEC_VP6A, CODEC_ID_VP6A, VIDEO_ES },
109

110
    { VLC_CODEC_THEORA, CODEC_ID_THEORA, VIDEO_ES },
111
112
113

#if ( !defined( WORDS_BIGENDIAN ) )
    /* Asus Video (Another thing that doesn't work on PPC) */
114
115
    { VLC_CODEC_ASV1, CODEC_ID_ASV1, VIDEO_ES },
    { VLC_CODEC_ASV2, CODEC_ID_ASV2, VIDEO_ES },
116
117
#endif

118
    { VLC_CODEC_FFV1, CODEC_ID_FFV1, VIDEO_ES },
119

120
    { VLC_CODEC_VCR1, CODEC_ID_VCR1, VIDEO_ES },
121

122
    { VLC_CODEC_CLJR, CODEC_ID_CLJR, VIDEO_ES },
123
124

    /* Real Video */
125
    { VLC_CODEC_RV10, CODEC_ID_RV10, VIDEO_ES },
126
    { VLC_CODEC_RV13, CODEC_ID_RV10, VIDEO_ES },
127
128
129
    { VLC_CODEC_RV20, CODEC_ID_RV20, VIDEO_ES },
    { VLC_CODEC_RV30, CODEC_ID_RV30, VIDEO_ES },
    { VLC_CODEC_RV40, CODEC_ID_RV40, VIDEO_ES },
130

131
    { VLC_CODEC_RPZA, CODEC_ID_RPZA, VIDEO_ES },
132

133
    { VLC_CODEC_SMC, CODEC_ID_SMC, VIDEO_ES },
134

135
    { VLC_CODEC_CINEPAK, CODEC_ID_CINEPAK, VIDEO_ES },
136

137
    { VLC_CODEC_TSCC, CODEC_ID_TSCC, VIDEO_ES },
138

139
    { VLC_CODEC_CSCD, CODEC_ID_CSCD, VIDEO_ES },
140

141
    { VLC_CODEC_ZMBV, CODEC_ID_ZMBV, VIDEO_ES },
142

143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
    { VLC_CODEC_VMNC, CODEC_ID_VMNC, VIDEO_ES },
    { VLC_CODEC_FRAPS, CODEC_ID_FRAPS, VIDEO_ES },

    { VLC_CODEC_TRUEMOTION1, CODEC_ID_TRUEMOTION1, VIDEO_ES },
    { VLC_CODEC_TRUEMOTION2, CODEC_ID_TRUEMOTION2, VIDEO_ES },

    { VLC_CODEC_SNOW, CODEC_ID_SNOW, VIDEO_ES },

    { VLC_CODEC_QTRLE, CODEC_ID_QTRLE, VIDEO_ES },

    { VLC_CODEC_QDRAW, CODEC_ID_QDRAW, VIDEO_ES },

    { VLC_CODEC_QPEG, CODEC_ID_QPEG, VIDEO_ES },

    { VLC_CODEC_ULTI, CODEC_ID_ULTI, VIDEO_ES },

    { VLC_CODEC_VIXL, CODEC_ID_VIXL, VIDEO_ES },

    { VLC_CODEC_LOCO, CODEC_ID_LOCO, VIDEO_ES },

    { VLC_CODEC_WNV1, CODEC_ID_WNV1, VIDEO_ES },

    { VLC_CODEC_AASC, CODEC_ID_AASC, VIDEO_ES },

    { VLC_CODEC_FLASHSV, CODEC_ID_FLASHSV, VIDEO_ES },
    { VLC_CODEC_KMVC, CODEC_ID_KMVC, VIDEO_ES },
169

170
    { VLC_CODEC_NUV, CODEC_ID_NUV, VIDEO_ES },
171

172
    { VLC_CODEC_SMACKVIDEO, CODEC_ID_SMACKVIDEO, VIDEO_ES },
173
174

    /* Chinese AVS - Untested */
175
    { VLC_CODEC_CAVS, CODEC_ID_CAVS, VIDEO_ES },
176
177

    /* Untested yet */
178
179
    { VLC_CODEC_DNXHD, CODEC_ID_DNXHD, VIDEO_ES },
    { VLC_CODEC_8BPS, CODEC_ID_8BPS, VIDEO_ES },
180

181
    { VLC_CODEC_MIMIC, CODEC_ID_MIMIC, VIDEO_ES },
182

183
184
    { VLC_CODEC_DIRAC, CODEC_ID_DIRAC, VIDEO_ES },

Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
185
186
187
188
#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT( 52, 29, 0 )
    { VLC_CODEC_V210, CODEC_ID_V210, VIDEO_ES },
#endif

189
#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT( 52, 37, 1 )
190
191
192
    { VLC_CODEC_FRWU, CODEC_ID_FRWU, VIDEO_ES },
#endif

Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
193
194
195
196
#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT( 52, 53, 0 )
    { VLC_CODEC_INDEO5, CODEC_ID_INDEO5, VIDEO_ES },
#endif

197
#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT( 52, 68, 2 )
198
199
200
    { VLC_CODEC_VP8, CODEC_ID_VP8, VIDEO_ES },
#endif

Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
201
202
203
204
#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT( 52, 108, 2 )
    { VLC_CODEC_LAGARITH, CODEC_ID_LAGARITH, VIDEO_ES },
#endif

sebastien's avatar
sebastien committed
205
206
207
208
#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT( 52, 117, 0 )
    { VLC_CODEC_MXPEG, CODEC_ID_MXPEG, VIDEO_ES },
#endif

209
210
211
212
213
214
215
216
217
218
219
220
#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT( 53, 19, 0 )
    { VLC_CODEC_VBLE, CODEC_ID_VBLE, VIDEO_ES },
#endif

#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT( 54, 1, 0 )
    { VLC_CODEC_CDXL, CODEC_ID_CDXL, VIDEO_ES },
#endif

#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT( 53, 13, 0 )
    { VLC_CODEC_UTVIDEO, CODEC_ID_UTVIDEO, VIDEO_ES },
#endif

221
#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT( 53, 42, 0 )
222
223
224
    { VLC_CODEC_DXTORY, CODEC_ID_DXTORY, VIDEO_ES },
#endif

Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
225
226
227
228
#if LIBAVCODEC_VERSION_CHECK( 54, 16, 0, 27, 100 )
    { VLC_CODEC_MSS1, CODEC_ID_MSS1, VIDEO_ES },
#endif

229
230
231
232
#if LIBAVCODEC_VERSION_CHECK( 54, 17, 0, 32, 100 )
    { VLC_CODEC_MSA1, CODEC_ID_MSA1, VIDEO_ES },
#endif

Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
233
234
235
236
#if LIBAVCODEC_VERSION_CHECK( 54, 18, 0, 34, 100 )
    { VLC_CODEC_TSC2, CODEC_ID_TSCC2, VIDEO_ES },
#endif

237
238
239
#if LIBAVCODEC_VERSION_CHECK( 54, 20, 0, 37, 100 )
    { VLC_CODEC_MTS2, CODEC_ID_MTS2, VIDEO_ES },
#endif
Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
240

Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
241
#if LIBAVCODEC_VERSION_CHECK( 54, 27, 0, 55, 100 )
Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
242
    { VLC_CODEC_MSS2, AV_CODEC_ID_MSS2, VIDEO_ES },
Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
243
244
#endif

245
246
    /* Videogames Codecs */

247
    { VLC_CODEC_INTERPLAY, CODEC_ID_INTERPLAY_VIDEO, VIDEO_ES },
248

249
    { VLC_CODEC_IDCIN, CODEC_ID_IDCIN, VIDEO_ES },
250

251
    { VLC_CODEC_4XM, CODEC_ID_4XM, VIDEO_ES },
252

253
    { VLC_CODEC_ROQ, CODEC_ID_ROQ, VIDEO_ES },
254

255
    { VLC_CODEC_MDEC, CODEC_ID_MDEC, VIDEO_ES },
256

257
    { VLC_CODEC_VMDVIDEO, CODEC_ID_VMDVIDEO, VIDEO_ES },
258

259
260
    { VLC_CODEC_AMV, CODEC_ID_AMV, VIDEO_ES },

261
262
263
264
#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT( 53, 7, 0 )
    { VLC_CODEC_FLASHSV2, CODEC_ID_FLASHSV2, VIDEO_ES },
#endif

265
266
#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT( 53, 9, 0 )
    { VLC_CODEC_WMVP, CODEC_ID_WMV3IMAGE, VIDEO_ES },
267
    { VLC_CODEC_WMVP2, CODEC_ID_VC1IMAGE, VIDEO_ES },
268
269
#endif

270
271
272
273
#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT( 53, 15, 0 )
    { VLC_CODEC_PRORES, CODEC_ID_PRORES, VIDEO_ES },
#endif

274
#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT( 53, 32, 0 )
Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
275
    { VLC_CODEC_INDEO4, CODEC_ID_INDEO4, VIDEO_ES },
276
277
#endif

278
279
280
#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT( 53, 17, 0 )
    { VLC_CODEC_BMVVIDEO, CODEC_ID_BMV_VIDEO, VIDEO_ES },
#endif
281

282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
#if 0
/*    UNTESTED VideoGames*/
    { VLC_FOURCC('W','C','3','V'), CODEC_ID_XAN_WC3,
      VIDEO_ES, "XAN wc3 Video" },
    { VLC_FOURCC('W','C','4','V'), CODEC_ID_XAN_WC4,
      VIDEO_ES, "XAN wc4 Video" },
    { VLC_FOURCC('S','T','3','C'), CODEC_ID_TXD,
      VIDEO_ES, "Renderware TeXture Dictionary" },
    { VLC_FOURCC('V','Q','A','V'), CODEC_ID_WS_VQA,
      VIDEO_ES, "WestWood Vector Quantized Animation" },
    { VLC_FOURCC('T','S','E','Q'), CODEC_ID_TIERTEXSEQVIDEO,
      VIDEO_ES, "Tiertex SEQ Video" },
    { VLC_FOURCC('D','X','A','1'), CODEC_ID_DXA,
      VIDEO_ES, "Feeble DXA Video" },
    { VLC_FOURCC('D','C','I','V'), CODEC_ID_DSICINVIDEO,
      VIDEO_ES, "Delphine CIN Video" },
    { VLC_FOURCC('T','H','P','V'), CODEC_ID_THP,
      VIDEO_ES, "THP Video" },
    { VLC_FOURCC('B','E','T','H'), CODEC_ID_BETHSOFTVID,
      VIDEO_ES, "THP Video" },
    { VLC_FOURCC('C','9','3','V'), CODEC_ID_C93,
      VIDEO_ES, "THP Video" },
#endif

    /*
     *  Image codecs
     */
309
310
311
312
313
314
    { VLC_CODEC_PNG, CODEC_ID_PNG, VIDEO_ES },
    { VLC_CODEC_PPM, CODEC_ID_PPM, VIDEO_ES },
    { VLC_CODEC_PGM, CODEC_ID_PGM, VIDEO_ES },
    { VLC_CODEC_PGMYUV, CODEC_ID_PGMYUV, VIDEO_ES },
    { VLC_CODEC_PAM, CODEC_ID_PAM, VIDEO_ES },
    { VLC_CODEC_JPEGLS, CODEC_ID_JPEGLS, VIDEO_ES },
315

316
    { VLC_CODEC_BMP, CODEC_ID_BMP, VIDEO_ES },
317

318
319
320
321
    { VLC_CODEC_TIFF, CODEC_ID_TIFF, VIDEO_ES },
    { VLC_CODEC_GIF, CODEC_ID_GIF, VIDEO_ES },
    { VLC_CODEC_TARGA, CODEC_ID_TARGA, VIDEO_ES },
    { VLC_CODEC_SGI, CODEC_ID_SGI, VIDEO_ES },
Jai Menon's avatar
Jai Menon committed
322
    { VLC_CODEC_JPEG2000, CODEC_ID_JPEG2000, VIDEO_ES },
323
324
325
326

    /*
     *  Audio Codecs
     */
327
    /* WMA family */
328
329
    { VLC_CODEC_WMA1, CODEC_ID_WMAV1, AUDIO_ES },
    { VLC_CODEC_WMA2, CODEC_ID_WMAV2, AUDIO_ES },
330
331
332
#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT( 52, 35, 0 )
    { VLC_CODEC_WMAP, CODEC_ID_WMAPRO, AUDIO_ES },
#endif
333
334
335
#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT( 52, 54, 0 )
    { VLC_CODEC_WMAS, CODEC_ID_WMAVOICE, AUDIO_ES },
#endif
336
337
338
339
340

    { VLC_CODEC_DVAUDIO, CODEC_ID_DVAUDIO, AUDIO_ES },

    { VLC_CODEC_MACE3, CODEC_ID_MACE3, AUDIO_ES },
    { VLC_CODEC_MACE6, CODEC_ID_MACE6, AUDIO_ES },
341

342
343
    { VLC_CODEC_MUSEPACK7, CODEC_ID_MUSEPACK7, AUDIO_ES },
    { VLC_CODEC_MUSEPACK8, CODEC_ID_MUSEPACK8, AUDIO_ES },
344

345
346
347
348
349
    { VLC_CODEC_RA_144, CODEC_ID_RA_144, AUDIO_ES },
    { VLC_CODEC_RA_288, CODEC_ID_RA_288, AUDIO_ES },

    { VLC_CODEC_A52, CODEC_ID_AC3, AUDIO_ES },
    { VLC_CODEC_EAC3, CODEC_ID_EAC3, AUDIO_ES },
350

351
    { VLC_CODEC_DTS, CODEC_ID_DTS, AUDIO_ES },
352

353
    { VLC_CODEC_MPGA, CODEC_ID_MP3, AUDIO_ES },
354
    { VLC_CODEC_MPGA, CODEC_ID_MP2, AUDIO_ES },
355

356
    { VLC_CODEC_MP4A, CODEC_ID_AAC, AUDIO_ES },
357
#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT( 52, 26, 0 )
358
    { VLC_CODEC_ALS, CODEC_ID_MP4ALS, AUDIO_ES },
359
#endif
360
361
362
#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT( 52, 94, 0 )
    { VLC_CODEC_MP4A, CODEC_ID_AAC_LATM, AUDIO_ES },
#endif
363

364
    { VLC_CODEC_INTERPLAY_DPCM, CODEC_ID_INTERPLAY_DPCM, AUDIO_ES },
365

366
    { VLC_CODEC_ROQ_DPCM, CODEC_ID_ROQ_DPCM, AUDIO_ES },
367

368
    { VLC_CODEC_DSICINAUDIO, CODEC_ID_DSICINAUDIO, AUDIO_ES },
369

370
371
    { VLC_CODEC_ADPCM_4XM, CODEC_ID_ADPCM_4XM, AUDIO_ES },
    { VLC_CODEC_ADPCM_EA, CODEC_ID_ADPCM_EA, AUDIO_ES },
372
373
374
    { VLC_CODEC_ADPCM_XA, CODEC_ID_ADPCM_XA, AUDIO_ES },
    { VLC_CODEC_ADPCM_ADX, CODEC_ID_ADPCM_ADX, AUDIO_ES },
    { VLC_CODEC_ADPCM_IMA_WS, CODEC_ID_ADPCM_IMA_WS, AUDIO_ES },
375
    { VLC_CODEC_ADPCM_MS, CODEC_ID_ADPCM_MS, AUDIO_ES },
376
    { VLC_CODEC_ADPCM_IMA_WAV, CODEC_ID_ADPCM_IMA_WAV, AUDIO_ES },
377
    { VLC_CODEC_ADPCM_IMA_AMV, CODEC_ID_ADPCM_IMA_AMV, AUDIO_ES },
Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
378
    { VLC_CODEC_ADPCM_IMA_QT, CODEC_ID_ADPCM_IMA_QT, AUDIO_ES },
379
    { VLC_CODEC_ADPCM_YAMAHA, CODEC_ID_ADPCM_YAMAHA, AUDIO_ES },
380

381
    { VLC_CODEC_VMDAUDIO, CODEC_ID_VMDAUDIO, AUDIO_ES },
382

383
    { VLC_CODEC_ADPCM_G726, CODEC_ID_ADPCM_G726, AUDIO_ES },
384
    { VLC_CODEC_ADPCM_SWF, CODEC_ID_ADPCM_SWF, AUDIO_ES },
385

386
387
    { VLC_CODEC_AMR_NB, CODEC_ID_AMR_NB, AUDIO_ES },
    { VLC_CODEC_AMR_WB, CODEC_ID_AMR_WB, AUDIO_ES },
388

389
390
    { VLC_CODEC_GSM, CODEC_ID_GSM, AUDIO_ES },
    { VLC_CODEC_GSM_MS, CODEC_ID_GSM_MS, AUDIO_ES },
391

392
    { VLC_CODEC_QDM2, CODEC_ID_QDM2, AUDIO_ES },
393

394
    { VLC_CODEC_COOK, CODEC_ID_COOK, AUDIO_ES },
395

396
    { VLC_CODEC_TTA, CODEC_ID_TTA, AUDIO_ES },
397

398
    { VLC_CODEC_WAVPACK, CODEC_ID_WAVPACK, AUDIO_ES },
399

400
    { VLC_CODEC_ATRAC3, CODEC_ID_ATRAC3, AUDIO_ES },
401

402
#if LIBAVCODEC_VERSION_MAJOR < 54
403
    { VLC_CODEC_SONIC, CODEC_ID_SONIC, AUDIO_ES },
404
#endif
405

406
    { VLC_CODEC_IMC, CODEC_ID_IMC, AUDIO_ES },
407

408
    { VLC_CODEC_TRUESPEECH, CODEC_ID_TRUESPEECH, AUDIO_ES },
409

410
    { VLC_CODEC_NELLYMOSER, CODEC_ID_NELLYMOSER, AUDIO_ES },
411

412
413
    { VLC_CODEC_VORBIS, CODEC_ID_VORBIS, AUDIO_ES },

414
    { VLC_CODEC_QCELP, CODEC_ID_QCELP, AUDIO_ES },
415
    { VLC_CODEC_SPEEX, CODEC_ID_SPEEX, AUDIO_ES },
416
417
418
#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT( 52, 34, 0 )
    { VLC_CODEC_TWINVQ, CODEC_ID_TWINVQ, AUDIO_ES },
#endif
Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
419
420
421
#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT( 52, 36, 0 )
    { VLC_CODEC_ATRAC1, CODEC_ID_ATRAC1, AUDIO_ES },
#endif
422
423
424
#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT( 52, 47, 0 )
    { VLC_CODEC_SIPR, CODEC_ID_SIPR, AUDIO_ES },
#endif
425
426
427
#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT( 52, 91, 0 )
    { VLC_CODEC_ADPCM_G722, CODEC_ID_ADPCM_G722, AUDIO_ES },
#endif
428
429
430
#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT( 53, 17, 0 )
        { VLC_CODEC_BMVAUDIO, CODEC_ID_BMV_AUDIO, AUDIO_ES },
#endif
Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
431

432
433
434
435
436
437
438
439
440
441
442
443
    /* Lossless */
    { VLC_CODEC_FLAC, CODEC_ID_FLAC, AUDIO_ES },

    { VLC_CODEC_ALAC, CODEC_ID_ALAC, AUDIO_ES },

    { VLC_CODEC_APE, CODEC_ID_APE, AUDIO_ES },

    { VLC_CODEC_SHORTEN, CODEC_ID_SHORTEN, AUDIO_ES },

    { VLC_CODEC_TRUEHD, CODEC_ID_TRUEHD, AUDIO_ES },
    { VLC_CODEC_MLP, CODEC_ID_MLP, AUDIO_ES },

444
445
446
447
#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT( 54, 5, 0 )
    { VLC_CODEC_WMAL, CODEC_ID_WMALOSSLESS, AUDIO_ES },
#endif

448
#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT( 54, 12, 0 )
449
450
451
    { VLC_CODEC_RALF, CODEC_ID_RALF, AUDIO_ES },
#endif

Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
452
453
454
#if LIBAVCODEC_VERSION_CHECK( 54, 14, 0, 26, 100 )
    { VLC_CODEC_INDEO_AUDIO, CODEC_ID_IAC, AUDIO_ES },
#endif
455

456
    /* PCM */
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
    { VLC_CODEC_S8, CODEC_ID_PCM_S8, AUDIO_ES },
    { VLC_CODEC_U8, CODEC_ID_PCM_U8, AUDIO_ES },
    { VLC_CODEC_S16L, CODEC_ID_PCM_S16LE, AUDIO_ES },
    { VLC_CODEC_S16B, CODEC_ID_PCM_S16BE, AUDIO_ES },
    { VLC_CODEC_U16L, CODEC_ID_PCM_U16LE, AUDIO_ES },
    { VLC_CODEC_U16B, CODEC_ID_PCM_U16BE, AUDIO_ES },
    { VLC_CODEC_S24L, CODEC_ID_PCM_S24LE, AUDIO_ES },
    { VLC_CODEC_S24B, CODEC_ID_PCM_S24BE, AUDIO_ES },
    { VLC_CODEC_U24L, CODEC_ID_PCM_U24LE, AUDIO_ES },
    { VLC_CODEC_U24B, CODEC_ID_PCM_U24BE, AUDIO_ES },
    { VLC_CODEC_S32L, CODEC_ID_PCM_S32LE, AUDIO_ES },
    { VLC_CODEC_S32B, CODEC_ID_PCM_S32BE, AUDIO_ES },
    { VLC_CODEC_U32L, CODEC_ID_PCM_U32LE, AUDIO_ES },
    { VLC_CODEC_U32B, CODEC_ID_PCM_U32BE, AUDIO_ES },
    { VLC_CODEC_ALAW, CODEC_ID_PCM_ALAW, AUDIO_ES },
    { VLC_CODEC_MULAW, CODEC_ID_PCM_MULAW, AUDIO_ES },
    { VLC_CODEC_S24DAUD, CODEC_ID_PCM_S24DAUD, AUDIO_ES },
474
475
476
477
478
479
480
#if ( !defined( WORDS_BIGENDIAN ) )
    { VLC_CODEC_FL32, CODEC_ID_PCM_F32LE, AUDIO_ES },
    { VLC_CODEC_FL64, CODEC_ID_PCM_F64LE, AUDIO_ES },
#else
    { VLC_CODEC_FL32, CODEC_ID_PCM_F32BE, AUDIO_ES },
    { VLC_CODEC_FL64, CODEC_ID_PCM_F64BE, AUDIO_ES },
#endif
481

482
    /* Subtitle streams */
483
484
485
#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT( 52, 33, 0 )
    { VLC_CODEC_BD_PG, CODEC_ID_HDMV_PGS_SUBTITLE, SPU_ES },
#endif
486
487
488
489
490
    { VLC_CODEC_SPU, CODEC_ID_DVD_SUBTITLE, SPU_ES },
    { VLC_CODEC_DVBS, CODEC_ID_DVB_SUBTITLE, SPU_ES },
    { VLC_CODEC_SUBT, CODEC_ID_TEXT, SPU_ES },
    { VLC_CODEC_XSUB, CODEC_ID_XSUB, SPU_ES },
    { VLC_CODEC_SSA, CODEC_ID_SSA, SPU_ES },
491
492
493
#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT( 52, 38, 0 )
    { VLC_CODEC_TELETEXT, CODEC_ID_DVB_TELETEXT, SPU_ES },
#endif
494

495
    { 0, 0, UNKNOWN_ES }
496
497
};

498
499
int GetFfmpegCodec( vlc_fourcc_t i_fourcc, int *pi_cat,
                    int *pi_ffmpeg_codec, const char **ppsz_name )
500
{
501
    i_fourcc = vlc_fourcc_GetCodec( UNKNOWN_ES, i_fourcc );
502
    for( unsigned i = 0; codecs_table[i].i_fourcc != 0; i++ )
503
504
505
506
507
    {
        if( codecs_table[i].i_fourcc == i_fourcc )
        {
            if( pi_cat ) *pi_cat = codecs_table[i].i_cat;
            if( pi_ffmpeg_codec ) *pi_ffmpeg_codec = codecs_table[i].i_codec;
508
            if( ppsz_name ) *ppsz_name = vlc_fourcc_GetDescription( UNKNOWN_ES, i_fourcc );//char *)codecs_table[i].psz_name;
509
510
511
512
513
514
515

            return true;
        }
    }
    return false;
}

516
517
int GetVlcFourcc( int i_ffmpeg_codec, int *pi_cat,
                  vlc_fourcc_t *pi_fourcc, const char **ppsz_name )
518
{
519
    for( unsigned i = 0; codecs_table[i].i_codec != 0; i++ )
520
521
522
523
524
    {
        if( codecs_table[i].i_codec == i_ffmpeg_codec )
        {
            if( pi_cat ) *pi_cat = codecs_table[i].i_cat;
            if( pi_fourcc ) *pi_fourcc = codecs_table[i].i_fourcc;
525
            if( ppsz_name ) *ppsz_name = vlc_fourcc_GetDescription( codecs_table[i].i_cat, codecs_table[i].i_fourcc );
526
527
528
529
530
531

            return true;
        }
    }
    return false;
}