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

Sébastien Escudier's avatar
Sébastien Escudier 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;
}