1 /*****************************************************************************
2 * avcodec.h: decoder and encoder using libavcodec
3 *****************************************************************************
4 * Copyright (C) 2001-2013 VLC authors and VideoLAN
7 * Authors: Laurent Aimar <fenrir@via.ecp.fr>
8 * Jean-Baptiste Kempf <jb@videolan.org>
10 * This program is free software; you can redistribute it and/or modify it
11 * under the terms of the GNU Lesser General Public License as published by
12 * the Free Software Foundation; either version 2.1 of the License, or
13 * (at your option) any later version.
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU Lesser General Public License for more details.
20 * You should have received a copy of the GNU Lesser General Public License
21 * along with this program; if not, write to the Free Software Foundation,
22 * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
23 *****************************************************************************/
25 #ifndef AVCOMMON_COMPAT_H
26 #define AVCOMMON_COMPAT_H 1
28 #ifdef HAVE_LIBAVCODEC_AVCODEC_H
29 #include <libavcodec/avcodec.h>
31 /* LIBAVCODEC_VERSION_CHECK checks for the right version of libav and FFmpeg
32 * a is the major version
33 * b and c the minor and micro versions of libav
34 * d and e the minor and micro versions of FFmpeg */
35 #define LIBAVCODEC_VERSION_CHECK( a, b, c, d, e ) \
36 ( (LIBAVCODEC_VERSION_MICRO < 100 && LIBAVCODEC_VERSION_INT >= AV_VERSION_INT( a, b, c ) ) || \
37 (LIBAVCODEC_VERSION_MICRO >= 100 && LIBAVCODEC_VERSION_INT >= AV_VERSION_INT( a, d, e ) ) )
39 #if LIBAVCODEC_VERSION_MAJOR < 54
40 # define AV_PICTURE_TYPE_B FF_B_TYPE
41 # define AV_PICTURE_TYPE_I FF_I_TYPE
42 # define AV_PICTURE_TYPE_P FF_P_TYPE
44 # define AV_SAMPLE_FMT_NONE SAMPLE_FMT_NONE
45 # define AV_SAMPLE_FMT_U8 SAMPLE_FMT_U8
46 # define AV_SAMPLE_FMT_S16 SAMPLE_FMT_S16
47 # define AV_SAMPLE_FMT_S32 SAMPLE_FMT_S32
48 # define AV_SAMPLE_FMT_FLT SAMPLE_FMT_FLT
49 # define AV_SAMPLE_FMT_DBL SAMPLE_FMT_DBL
51 #ifndef AV_CH_FRONT_LEFT
52 # define AV_CH_FRONT_LEFT CH_FRONT_LEFT
54 #ifndef AV_CH_FRONT_RIGHT
55 # define AV_CH_FRONT_RIGHT CH_FRONT_RIGHT
57 #ifndef AV_CH_FRONT_CENTER
58 # define AV_CH_FRONT_CENTER CH_FRONT_CENTER
60 #ifndef AV_CH_LOW_FREQUENCY
61 # define AV_CH_LOW_FREQUENCY CH_LOW_FREQUENCY
63 #ifndef AV_CH_BACK_LEFT
64 # define AV_CH_BACK_LEFT CH_BACK_LEFT
66 #ifndef AV_CH_BACK_RIGHT
67 # define AV_CH_BACK_RIGHT CH_BACK_RIGHT
69 #ifndef AV_CH_FRONT_LEFT_OF_CENTER
70 # define AV_CH_FRONT_LEFT_OF_CENTER CH_FRONT_LEFT_OF_CENTER
72 #ifndef AV_CH_FRONT_RIGHT_OF_CENTER
73 # define AV_CH_FRONT_RIGHT_OF_CENTER CH_FRONT_RIGHT_OF_CENTER
75 #ifndef AV_CH_BACK_CENTER
76 # define AV_CH_BACK_CENTER CH_BACK_CENTER
78 #ifndef AV_CH_SIDE_LEFT
79 # define AV_CH_SIDE_LEFT CH_SIDE_LEFT
81 #ifndef AV_CH_SIDE_RIGHT
82 # define AV_CH_SIDE_RIGHT CH_SIDE_RIGHT
84 #ifndef AV_CH_TOP_CENTER
85 # define AV_CH_TOP_CENTER CH_TOP_CENTER
87 #ifndef AV_CH_TOP_FRONT_LEFT
88 # define AV_CH_TOP_FRONT_LEFT CH_TOP_FRONT_LEFT
90 #ifndef AV_CH_TOP_FRONT_CENTER
91 # define AV_CH_TOP_FRONT_CENTER CH_TOP_FRONT_CENTER
93 #ifndef AV_CH_TOP_FRONT_RIGHT
94 # define AV_CH_TOP_FRONT_RIGHT CH_TOP_FRONT_RIGHT
96 #ifndef AV_CH_TOP_BACK_LEFT
97 # define AV_CH_TOP_BACK_LEFT CH_TOP_BACK_LEFT
99 #ifndef AV_CH_TOP_BACK_CENTER
100 # define AV_CH_TOP_BACK_CENTER CH_TOP_BACK_CENTER
102 #ifndef AV_CH_TOP_BACK_RIGHT
103 # define AV_CH_TOP_BACK_RIGHT CH_TOP_BACK_RIGHT
105 #ifndef AV_CH_STEREO_LEFT
106 # define AV_CH_STEREO_LEFT CH_STEREO_LEFT
108 #ifndef AV_CH_STEREO_RIGHT
109 # define AV_CH_STEREO_RIGHT CH_STEREO_RIGHT
112 #endif /* LIBAVCODEC_VERSION_MAJOR < 54 */
114 #if !LIBAVCODEC_VERSION_CHECK(54, 25, 0, 51, 100)
115 #define AVCodecID CodecID
121 AV_CODEC_ID_MPEG1VIDEO,
122 AV_CODEC_ID_MPEG2VIDEO, ///< preferred ID for MPEG-1/2 video decoding
123 AV_CODEC_ID_MPEG2VIDEO_XVMC,
134 AV_CODEC_ID_RAWVIDEO,
135 AV_CODEC_ID_MSMPEG4V1,
136 AV_CODEC_ID_MSMPEG4V2,
137 AV_CODEC_ID_MSMPEG4V3,
160 AV_CODEC_ID_INTERPLAY_VIDEO,
167 AV_CODEC_ID_MSVIDEO1,
172 AV_CODEC_ID_TRUEMOTION1,
173 AV_CODEC_ID_VMDVIDEO,
199 AV_CODEC_ID_TRUEMOTION2,
205 AV_CODEC_ID_SMACKVIDEO,
210 AV_CODEC_ID_JPEG2000,
216 AV_CODEC_ID_DSICINVIDEO,
217 AV_CODEC_ID_TIERTEXSEQVIDEO,
220 #if LIBAVCODEC_VERSION_MAJOR == 53
228 AV_CODEC_ID_BETHSOFTVID,
240 #if LIBAVCODEC_VERSION_MAJOR == 53
241 AV_CODEC_ID_8SVX_EXP,
242 AV_CODEC_ID_8SVX_FIB,
244 AV_CODEC_ID_ESCAPE124,
248 AV_CODEC_ID_MOTIONPIXELS,
260 AV_CODEC_ID_FLASHSV2,
261 AV_CODEC_ID_CDGRAPHICS,
264 AV_CODEC_ID_BINKVIDEO,
265 AV_CODEC_ID_IFF_ILBM,
266 AV_CODEC_ID_IFF_BYTERUN1,
272 AV_CODEC_ID_A64_MULTI,
273 AV_CODEC_ID_A64_MULTI5,
276 AV_CODEC_ID_LAGARITH,
280 AV_CODEC_ID_WMV3IMAGE,
281 AV_CODEC_ID_VC1IMAGE,
282 #if LIBAVCODEC_VERSION_MAJOR == 53
287 AV_CODEC_ID_BMV_VIDEO,
294 AV_CODEC_ID_ZEROCODEC,
301 /* various PAV_CM "codecs" */
302 AV_CODEC_ID_FIRST_AUDIO = 0x10000, ///< A dummy id pointing at the start of audio codecs
303 AV_CODEC_ID_PCM_S16LE = 0x10000,
304 AV_CODEC_ID_PCM_S16BE,
305 AV_CODEC_ID_PCM_U16LE,
306 AV_CODEC_ID_PCM_U16BE,
309 AV_CODEC_ID_PCM_MULAW,
310 AV_CODEC_ID_PCM_ALAW,
311 AV_CODEC_ID_PCM_S32LE,
312 AV_CODEC_ID_PCM_S32BE,
313 AV_CODEC_ID_PCM_U32LE,
314 AV_CODEC_ID_PCM_U32BE,
315 AV_CODEC_ID_PCM_S24LE,
316 AV_CODEC_ID_PCM_S24BE,
317 AV_CODEC_ID_PCM_U24LE,
318 AV_CODEC_ID_PCM_U24BE,
319 AV_CODEC_ID_PCM_S24DAUD,
320 AV_CODEC_ID_PCM_ZORK,
321 AV_CODEC_ID_PCM_S16LE_PLANAR,
323 AV_CODEC_ID_PCM_F32BE,
324 AV_CODEC_ID_PCM_F32LE,
325 AV_CODEC_ID_PCM_F64BE,
326 AV_CODEC_ID_PCM_F64LE,
327 AV_CODEC_ID_PCM_BLURAY,
330 AV_CODEC_ID_PCM_S8_PLANAR,
332 /* various ADPAV_CM codecs */
333 AV_CODEC_ID_ADPCM_IMA_QT = 0x11000,
334 AV_CODEC_ID_ADPCM_IMA_WAV,
335 AV_CODEC_ID_ADPCM_IMA_DK3,
336 AV_CODEC_ID_ADPCM_IMA_DK4,
337 AV_CODEC_ID_ADPCM_IMA_WS,
338 AV_CODEC_ID_ADPCM_IMA_SMJPEG,
339 AV_CODEC_ID_ADPCM_MS,
340 AV_CODEC_ID_ADPCM_4XM,
341 AV_CODEC_ID_ADPCM_XA,
342 AV_CODEC_ID_ADPCM_ADX,
343 AV_CODEC_ID_ADPCM_EA,
344 AV_CODEC_ID_ADPCM_G726,
345 AV_CODEC_ID_ADPCM_CT,
346 AV_CODEC_ID_ADPCM_SWF,
347 AV_CODEC_ID_ADPCM_YAMAHA,
348 AV_CODEC_ID_ADPCM_SBPRO_4,
349 AV_CODEC_ID_ADPCM_SBPRO_3,
350 AV_CODEC_ID_ADPCM_SBPRO_2,
351 AV_CODEC_ID_ADPCM_THP,
352 AV_CODEC_ID_ADPCM_IMA_AMV,
353 AV_CODEC_ID_ADPCM_EA_R1,
354 AV_CODEC_ID_ADPCM_EA_R3,
355 AV_CODEC_ID_ADPCM_EA_R2,
356 AV_CODEC_ID_ADPCM_IMA_EA_SEAD,
357 AV_CODEC_ID_ADPCM_IMA_EA_EACS,
358 AV_CODEC_ID_ADPCM_EA_XAS,
359 AV_CODEC_ID_ADPCM_EA_MAXIS_XA,
360 AV_CODEC_ID_ADPCM_IMA_ISS,
361 AV_CODEC_ID_ADPCM_G722,
362 AV_CODEC_ID_ADPCM_IMA_APC,
365 AV_CODEC_ID_AMR_NB = 0x12000,
368 /* RealAudio codecs*/
369 AV_CODEC_ID_RA_144 = 0x13000,
372 /* various DPAV_CM codecs */
373 AV_CODEC_ID_ROQ_DPCM = 0x14000,
374 AV_CODEC_ID_INTERPLAY_DPCM,
375 AV_CODEC_ID_XAN_DPCM,
376 AV_CODEC_ID_SOL_DPCM,
379 AV_CODEC_ID_MP2 = 0x15000,
380 AV_CODEC_ID_MP3, ///< preferred ID for decoding MPEG audio layer 1, 2 or 3
390 AV_CODEC_ID_VMDAUDIO,
391 #if LIBAVCODEC_VERSION_MAJOR == 53
393 AV_CODEC_ID_SONIC_LS,
400 AV_CODEC_ID_WESTWOOD_SND1,
401 AV_CODEC_ID_GSM, ///< as in Berlin toast format
404 AV_CODEC_ID_TRUESPEECH,
406 AV_CODEC_ID_SMACKAUDIO,
409 AV_CODEC_ID_DSICINAUDIO,
411 AV_CODEC_ID_MUSEPACK7,
413 AV_CODEC_ID_GSM_MS, /* as found in WAV */
415 #if LIBAVCODEC_VERSION_MAJOR < 56
419 AV_CODEC_ID_NELLYMOSER,
420 AV_CODEC_ID_MUSEPACK8,
422 AV_CODEC_ID_WMAVOICE,
424 AV_CODEC_ID_WMALOSSLESS,
433 AV_CODEC_ID_BINKAUDIO_RDFT,
434 AV_CODEC_ID_BINKAUDIO_DCT,
435 AV_CODEC_ID_AAC_LATM,
438 #if LIBAVCODEC_VERSION_MAJOR > 53
441 AV_CODEC_ID_8SVX_EXP,
442 AV_CODEC_ID_8SVX_FIB,
444 AV_CODEC_ID_BMV_AUDIO,
449 /* subtitle codecs */
450 AV_CODEC_ID_FIRST_SUBTITLE = 0x17000, ///< A dummy ID pointing at the start of subtitle codecs.
451 AV_CODEC_ID_DVD_SUBTITLE = 0x17000,
452 AV_CODEC_ID_DVB_SUBTITLE,
453 AV_CODEC_ID_TEXT, ///< raw UTF-8 text
456 AV_CODEC_ID_MOV_TEXT,
457 AV_CODEC_ID_HDMV_PGS_SUBTITLE,
458 AV_CODEC_ID_DVB_TELETEXT,
461 /* other specific kind of codecs (generally used for attachments) */
462 AV_CODEC_ID_FIRST_UNKNOWN = 0x18000, ///< A dummy ID pointing at the start of various fake codecs.
463 AV_CODEC_ID_TTF = 0x18000,
465 AV_CODEC_ID_PROBE = 0x19000, ///< codec_id is not known (like AV_CODEC_ID_NONE) but lavf should attempt to identify it
467 AV_CODEC_ID_MPEG2TS = 0x20000, /**< _FAKE_ codec to indicate a raw MPEG-2 TS
468 * stream (only used by libavformat) */
469 AV_CODEC_ID_MPEG4SYSTEMS = 0x20001, /**< _FAKE_ codec to indicate a MPEG-4 Systems
470 * stream (only used by libavformat) */
471 AV_CODEC_ID_FFMETADATA = 0x21000, ///< Dummy codec for streams containing only metadata information.
474 #endif /* LIBAVCODEC_VERSION < 54.25 */
476 #if LIBAVCODEC_VERSION_MAJOR < 54
477 # define avcodec_alloc_context3(a) avcodec_alloc_context()
478 # define avcodec_open2(a, b, c) avcodec_open(a, b)
479 # define err_recognition error_recognition
482 #endif /* HAVE_LIBAVCODEC_AVCODEC_H */
484 #ifdef HAVE_LIBAVUTIL_AVUTIL_H
485 # include <libavutil/avutil.h>
487 /* LIBAVUTIL_VERSION_CHECK checks for the right version of libav and FFmpeg
488 * a is the major version
489 * b and c the minor and micro versions of libav
490 * d and e the minor and micro versions of FFmpeg */
491 #define LIBAVUTIL_VERSION_CHECK( a, b, c, d, e ) \
492 ( (LIBAVUTIL_VERSION_MICRO < 100 && LIBAVUTIL_VERSION_INT >= AV_VERSION_INT( a, b, c ) ) || \
493 (LIBAVUTIL_VERSION_MICRO >= 100 && LIBAVUTIL_VERSION_INT >= AV_VERSION_INT( a, d, e ) ) )
495 #if LIBAVUTIL_VERSION_MAJOR < 52 && !defined(AV_CPU_FLAG_MMXEXT)
496 # define AV_CPU_FLAG_MMXEXT AV_CPU_FLAG_MMX2
499 #if !LIBAVUTIL_VERSION_CHECK( 52, 11, 0, 32, 100 )
500 # define AV_PIX_FMT_FLAG_HWACCEL PIX_FMT_HWACCEL
503 #if !LIBAVUTIL_VERSION_CHECK( 51, 44, 0, 76, 100 )
504 # define av_pix_fmt_desc_get(a) &av_pix_fmt_descriptors[a]
507 #endif /* HAVE_LIBAVUTIL_AVUTIL_H */