avcodec.h 87.2 KB
Newer Older
1 2 3
/*
 * copyright (c) 2001 Fabrice Bellard
 *
4 5 6
 * This file is part of FFmpeg.
 *
 * FFmpeg is free software; you can redistribute it and/or
7 8
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
9
 * version 2.1 of the License, or (at your option) any later version.
10
 *
11
 * FFmpeg is distributed in the hope that it will be useful,
12 13 14 15 16
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
17
 * License along with FFmpeg; if not, write to the Free Software
18 19 20
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 */

Fabrice Bellard's avatar
Fabrice Bellard committed
21 22 23
#ifndef AVCODEC_H
#define AVCODEC_H

Michael Niedermayer's avatar
Michael Niedermayer committed
24 25
/**
 * @file avcodec.h
Michael Niedermayer's avatar
doxy  
Michael Niedermayer committed
26
 * external api header.
Michael Niedermayer's avatar
Michael Niedermayer committed
27 28 29
 */


30 31 32 33
#ifdef __cplusplus
extern "C" {
#endif

34
#include "avutil.h"
Zdenek Kabelac's avatar
Zdenek Kabelac committed
35
#include <sys/types.h> /* size_t */
Fabrice Bellard's avatar
Fabrice Bellard committed
36

37
#define AV_STRINGIFY(s)         AV_TOSTRING(s)
Fabrice Bellard's avatar
Fabrice Bellard committed
38
#define AV_TOSTRING(s) #s
Michael Niedermayer's avatar
Michael Niedermayer committed
39

Michel Bardiaux's avatar
Michel Bardiaux committed
40 41
#define LIBAVCODEC_VERSION_INT  ((51<<16)+(34<<8)+0)
#define LIBAVCODEC_VERSION      51.34.0
42
#define LIBAVCODEC_BUILD        LIBAVCODEC_VERSION_INT
Michael Niedermayer's avatar
Michael Niedermayer committed
43

44
#define LIBAVCODEC_IDENT        "Lavc" AV_STRINGIFY(LIBAVCODEC_VERSION)
Alex Beregszaszi's avatar
Alex Beregszaszi committed
45

46
#define AV_NOPTS_VALUE          INT64_C(0x8000000000000000)
47 48
#define AV_TIME_BASE            1000000
#define AV_TIME_BASE_Q          (AVRational){1, AV_TIME_BASE}
49

Fabrice Bellard's avatar
Fabrice Bellard committed
50
enum CodecID {
51
    CODEC_ID_NONE,
Fabrice Bellard's avatar
Fabrice Bellard committed
52
    CODEC_ID_MPEG1VIDEO,
53
    CODEC_ID_MPEG2VIDEO, /* prefered ID for MPEG Video 1 or 2 decoding */
Ivan Kalvachev's avatar
Ivan Kalvachev committed
54
    CODEC_ID_MPEG2VIDEO_XVMC,
55
    CODEC_ID_H261,
Fabrice Bellard's avatar
Fabrice Bellard committed
56 57
    CODEC_ID_H263,
    CODEC_ID_RV10,
Michael Niedermayer's avatar
Michael Niedermayer committed
58
    CODEC_ID_RV20,
Fabrice Bellard's avatar
Fabrice Bellard committed
59
    CODEC_ID_MJPEG,
60
    CODEC_ID_MJPEGB,
61
    CODEC_ID_LJPEG,
62
    CODEC_ID_SP5X,
63
    CODEC_ID_JPEGLS,
Fabrice Bellard's avatar
Fabrice Bellard committed
64
    CODEC_ID_MPEG4,
Fabrice Bellard's avatar
Fabrice Bellard committed
65
    CODEC_ID_RAWVIDEO,
66 67 68
    CODEC_ID_MSMPEG4V1,
    CODEC_ID_MSMPEG4V2,
    CODEC_ID_MSMPEG4V3,
69
    CODEC_ID_WMV1,
Michael Niedermayer's avatar
Michael Niedermayer committed
70
    CODEC_ID_WMV2,
Fabrice Bellard's avatar
Fabrice Bellard committed
71 72
    CODEC_ID_H263P,
    CODEC_ID_H263I,
73
    CODEC_ID_FLV1,
Nick Kurshev's avatar
Nick Kurshev committed
74
    CODEC_ID_SVQ1,
75
    CODEC_ID_SVQ3,
Fabrice Bellard's avatar
Fabrice Bellard committed
76
    CODEC_ID_DVVIDEO,
Michael Niedermayer's avatar
huffyuv  
Michael Niedermayer committed
77
    CODEC_ID_HUFFYUV,
78
    CODEC_ID_CYUV,
Michael Niedermayer's avatar
Michael Niedermayer committed
79
    CODEC_ID_H264,
80
    CODEC_ID_INDEO3,
81
    CODEC_ID_VP3,
82
    CODEC_ID_THEORA,
Michael Niedermayer's avatar
Michael Niedermayer committed
83
    CODEC_ID_ASV1,
Michael Niedermayer's avatar
Michael Niedermayer committed
84
    CODEC_ID_ASV2,
85
    CODEC_ID_FFV1,
86
    CODEC_ID_4XM,
Michael Niedermayer's avatar
Michael Niedermayer committed
87
    CODEC_ID_VCR1,
Alex Beregszaszi's avatar
Alex Beregszaszi committed
88
    CODEC_ID_CLJR,
89
    CODEC_ID_MDEC,
90 91
    CODEC_ID_ROQ,
    CODEC_ID_INTERPLAY_VIDEO,
92 93
    CODEC_ID_XAN_WC3,
    CODEC_ID_XAN_WC4,
94 95 96 97 98
    CODEC_ID_RPZA,
    CODEC_ID_CINEPAK,
    CODEC_ID_WS_VQA,
    CODEC_ID_MSRLE,
    CODEC_ID_MSVIDEO1,
99
    CODEC_ID_IDCIN,
Roberto Togni's avatar
Roberto Togni committed
100
    CODEC_ID_8BPS,
101
    CODEC_ID_SMC,
Mike Melanson's avatar
Mike Melanson committed
102
    CODEC_ID_FLIC,
103
    CODEC_ID_TRUEMOTION1,
104
    CODEC_ID_VMDVIDEO,
Roberto Togni's avatar
Roberto Togni committed
105 106
    CODEC_ID_MSZH,
    CODEC_ID_ZLIB,
107
    CODEC_ID_QTRLE,
108
    CODEC_ID_SNOW,
109
    CODEC_ID_TSCC,
110
    CODEC_ID_ULTI,
111
    CODEC_ID_QDRAW,
112
    CODEC_ID_VIXL,
113
    CODEC_ID_QPEG,
114 115 116 117 118 119 120
    CODEC_ID_XVID,
    CODEC_ID_PNG,
    CODEC_ID_PPM,
    CODEC_ID_PBM,
    CODEC_ID_PGM,
    CODEC_ID_PGMYUV,
    CODEC_ID_PAM,
Loren Merritt's avatar
Loren Merritt committed
121
    CODEC_ID_FFVHUFF,
122 123
    CODEC_ID_RV30,
    CODEC_ID_RV40,
124
    CODEC_ID_VC1,
125
    CODEC_ID_WMV3,
126
    CODEC_ID_LOCO,
127
    CODEC_ID_WNV1,
128
    CODEC_ID_AASC,
129
    CODEC_ID_INDEO2,
130
    CODEC_ID_FRAPS,
131
    CODEC_ID_TRUEMOTION2,
Måns Rullgård's avatar
Måns Rullgård committed
132
    CODEC_ID_BMP,
133
    CODEC_ID_CSCD,
134
    CODEC_ID_MMVIDEO,
135
    CODEC_ID_ZMBV,
136
    CODEC_ID_AVS,
Kostya Shishkov's avatar
Kostya Shishkov committed
137
    CODEC_ID_SMACKVIDEO,
138
    CODEC_ID_NUV,
139
    CODEC_ID_KMVC,
140
    CODEC_ID_FLASHSV,
141
    CODEC_ID_CAVS,
142
    CODEC_ID_JPEG2000,
143
    CODEC_ID_VMNC,
Aurelien Jacobs's avatar
Aurelien Jacobs committed
144 145 146
    CODEC_ID_VP5,
    CODEC_ID_VP6,
    CODEC_ID_VP6F,
Kostya Shishkov's avatar
Kostya Shishkov committed
147
    CODEC_ID_TARGA,
148
    CODEC_ID_DSICINVIDEO,
149
    CODEC_ID_TIERTEXSEQVIDEO,
Kostya Shishkov's avatar
Kostya Shishkov committed
150
    CODEC_ID_TIFF,
151
    CODEC_ID_GIF,
152
    CODEC_ID_FFH264,
Fabrice Bellard's avatar
Fabrice Bellard committed
153 154

    /* various pcm "codecs" */
155
    CODEC_ID_PCM_S16LE= 0x10000,
Fabrice Bellard's avatar
Fabrice Bellard committed
156 157 158 159 160 161 162
    CODEC_ID_PCM_S16BE,
    CODEC_ID_PCM_U16LE,
    CODEC_ID_PCM_U16BE,
    CODEC_ID_PCM_S8,
    CODEC_ID_PCM_U8,
    CODEC_ID_PCM_MULAW,
    CODEC_ID_PCM_ALAW,
163 164 165 166 167 168 169 170 171
    CODEC_ID_PCM_S32LE,
    CODEC_ID_PCM_S32BE,
    CODEC_ID_PCM_U32LE,
    CODEC_ID_PCM_U32BE,
    CODEC_ID_PCM_S24LE,
    CODEC_ID_PCM_S24BE,
    CODEC_ID_PCM_U24LE,
    CODEC_ID_PCM_U24BE,
    CODEC_ID_PCM_S24DAUD,
172 173

    /* various adpcm codecs */
174
    CODEC_ID_ADPCM_IMA_QT= 0x11000,
175
    CODEC_ID_ADPCM_IMA_WAV,
176 177
    CODEC_ID_ADPCM_IMA_DK3,
    CODEC_ID_ADPCM_IMA_DK4,
178
    CODEC_ID_ADPCM_IMA_WS,
179
    CODEC_ID_ADPCM_IMA_SMJPEG,
180
    CODEC_ID_ADPCM_MS,
181
    CODEC_ID_ADPCM_4XM,
182 183
    CODEC_ID_ADPCM_XA,
    CODEC_ID_ADPCM_ADX,
184
    CODEC_ID_ADPCM_EA,
185
    CODEC_ID_ADPCM_G726,
186
    CODEC_ID_ADPCM_CT,
187
    CODEC_ID_ADPCM_SWF,
188
    CODEC_ID_ADPCM_YAMAHA,
189 190 191
    CODEC_ID_ADPCM_SBPRO_4,
    CODEC_ID_ADPCM_SBPRO_3,
    CODEC_ID_ADPCM_SBPRO_2,
192

193 194
    /* AMR */
    CODEC_ID_AMR_NB= 0x12000,
195 196
    CODEC_ID_AMR_WB,

197
    /* RealAudio codecs*/
198
    CODEC_ID_RA_144= 0x13000,
199
    CODEC_ID_RA_288,
200 201

    /* various DPCM codecs */
202
    CODEC_ID_ROQ_DPCM= 0x14000,
203
    CODEC_ID_INTERPLAY_DPCM,
204
    CODEC_ID_XAN_DPCM,
205
    CODEC_ID_SOL_DPCM,
206

207 208 209
    CODEC_ID_MP2= 0x15000,
    CODEC_ID_MP3, /* prefered ID for MPEG Audio layer 1, 2 or3 decoding */
    CODEC_ID_AAC,
210
#if LIBAVCODEC_VERSION_INT < ((52<<16)+(0<<8)+0)
211
    CODEC_ID_MPEG4AAC,
212
#endif
213 214 215 216 217 218 219 220 221 222 223
    CODEC_ID_AC3,
    CODEC_ID_DTS,
    CODEC_ID_VORBIS,
    CODEC_ID_DVAUDIO,
    CODEC_ID_WMAV1,
    CODEC_ID_WMAV2,
    CODEC_ID_MACE3,
    CODEC_ID_MACE6,
    CODEC_ID_VMDAUDIO,
    CODEC_ID_SONIC,
    CODEC_ID_SONIC_LS,
Michael Niedermayer's avatar
Michael Niedermayer committed
224
    CODEC_ID_FLAC,
Roberto Togni's avatar
Roberto Togni committed
225
    CODEC_ID_MP3ADU,
226
    CODEC_ID_MP3ON4,
227
    CODEC_ID_SHORTEN,
Michael Niedermayer's avatar
Michael Niedermayer committed
228
    CODEC_ID_ALAC,
229
    CODEC_ID_WESTWOOD_SND1,
Michel Bardiaux's avatar
Michel Bardiaux committed
230
    CODEC_ID_GSM, /* As in Berlin toast format */
Roberto Togni's avatar
Roberto Togni committed
231
    CODEC_ID_QDM2,
232
    CODEC_ID_COOK,
233
    CODEC_ID_TRUESPEECH,
234
    CODEC_ID_TTA,
Kostya Shishkov's avatar
Kostya Shishkov committed
235
    CODEC_ID_SMACKAUDIO,
Benjamin Larsson's avatar
Benjamin Larsson committed
236
    CODEC_ID_QCELP,
237
    CODEC_ID_WAVPACK,
238
    CODEC_ID_DSICINAUDIO,
Kostya Shishkov's avatar
Kostya Shishkov committed
239
    CODEC_ID_IMC,
240
    CODEC_ID_MUSEPACK7,
241
    CODEC_ID_MLP,
Michel Bardiaux's avatar
Michel Bardiaux committed
242
    CODEC_ID_GSM_MS, /* As found in WAV */
243

Fabrice Bellard's avatar
Fabrice Bellard committed
244
    /* subtitle codecs */
245 246 247
    CODEC_ID_DVD_SUBTITLE= 0x17000,
    CODEC_ID_DVB_SUBTITLE,

248
    CODEC_ID_MPEG2TS= 0x20000, /* _FAKE_ codec to indicate a raw MPEG2 transport
249
                         stream (only used by libavformat) */
Fabrice Bellard's avatar
Fabrice Bellard committed
250
};
251 252 253

/* CODEC_ID_MP3LAME is absolete */
#define CODEC_ID_MP3LAME CODEC_ID_MP3
Fabrice Bellard's avatar
Fabrice Bellard committed
254 255

enum CodecType {
256
    CODEC_TYPE_UNKNOWN = -1,
Fabrice Bellard's avatar
Fabrice Bellard committed
257 258
    CODEC_TYPE_VIDEO,
    CODEC_TYPE_AUDIO,
259
    CODEC_TYPE_DATA,
Fabrice Bellard's avatar
Fabrice Bellard committed
260
    CODEC_TYPE_SUBTITLE,
Fabrice Bellard's avatar
Fabrice Bellard committed
261 262
};

Fabrice Bellard's avatar
Fabrice Bellard committed
263
/* currently unused, may be used if 24/32 bits samples ever supported */
264
/* all in native endian */
Fabrice Bellard's avatar
Fabrice Bellard committed
265
enum SampleFormat {
266
    SAMPLE_FMT_NONE = -1,
267 268 269
    SAMPLE_FMT_U8,              ///< unsigned 8 bits
    SAMPLE_FMT_S16,             ///< signed 16 bits
    SAMPLE_FMT_S24,             ///< signed 24 bits
270
    SAMPLE_FMT_S32,             ///< signed 32 bits
271
    SAMPLE_FMT_FLT,             ///< float
Fabrice Bellard's avatar
Fabrice Bellard committed
272 273
};

Fabrice Bellard's avatar
Fabrice Bellard committed
274
/* in bytes */
275
#define AVCODEC_MAX_AUDIO_FRAME_SIZE 192000 // 1 second of 48khz 32bit audio
Fabrice Bellard's avatar
Fabrice Bellard committed
276

277
/**
278
 * Required number of additionally allocated bytes at the end of the input bitstream for decoding.
279
 * this is mainly needed because some optimized bitstream readers read
280 281 282
 * 32 or 64 bit at once and could read over the end<br>
 * Note, if the first 23 bits of the additional bytes are not 0 then damaged
 * MPEG bitstreams could cause overread and segfault
283 284 285
 */
#define FF_INPUT_BUFFER_PADDING_SIZE 8

286 287 288 289 290 291
/**
 * minimum encoding buffer size.
 * used to avoid some checks during header writing
 */
#define FF_MIN_BUFFER_SIZE 16384

292 293
/* motion estimation type, EPZS by default */
enum Motion_Est_ID {
294
    ME_ZERO = 1,
295 296 297 298
    ME_FULL,
    ME_LOG,
    ME_PHODS,
    ME_EPZS,
299 300 301 302
    ME_X1,
    ME_HEX,
    ME_UMH,
    ME_ITER,
303 304
};

Michael Niedermayer's avatar
Michael Niedermayer committed
305 306 307 308 309 310 311 312 313 314
enum AVDiscard{
//we leave some space between them for extensions (drop some keyframes for intra only or drop just some bidir frames)
    AVDISCARD_NONE   =-16, ///< discard nothing
    AVDISCARD_DEFAULT=  0, ///< discard useless packets like 0 size packets in avi
    AVDISCARD_NONREF =  8, ///< discard all non reference
    AVDISCARD_BIDIR  = 16, ///< discard all bidirectional frames
    AVDISCARD_NONKEY = 32, ///< discard all frames except keyframes
    AVDISCARD_ALL    = 48, ///< discard all
};

Michael Niedermayer's avatar
Michael Niedermayer committed
315 316 317 318 319 320 321
typedef struct RcOverride{
    int start_frame;
    int end_frame;
    int qscale; // if this is 0 then quality_factor will be used instead
    float quality_factor;
} RcOverride;

322
#define FF_MAX_B_FRAMES 16
323

Michael Niedermayer's avatar
Michael Niedermayer committed
324
/* encoding support
325
   these flags can be passed in AVCodecContext.flags before initing
Diego Biurrun's avatar
Diego Biurrun committed
326
   Note: not everything is supported yet.
Michael Niedermayer's avatar
Michael Niedermayer committed
327
*/
Fabrice Bellard's avatar
Fabrice Bellard committed
328

329
#define CODEC_FLAG_QSCALE 0x0002  ///< use fixed qscale
330
#define CODEC_FLAG_4MV    0x0004  ///< 4 MV per MB allowed / Advanced prediction for H263
331 332 333 334
#define CODEC_FLAG_QPEL   0x0010  ///< use qpel MC
#define CODEC_FLAG_GMC    0x0020  ///< use GMC
#define CODEC_FLAG_MV0    0x0040  ///< always try a MB with MV=<0,0>
#define CODEC_FLAG_PART   0x0080  ///< use data partitioning
335
/* parent program guarantees that the input for b-frame containing streams is not written to
336
   for at least s->max_b_frames+1 frames, if this is not set than the input will be copied */
337
#define CODEC_FLAG_INPUT_PRESERVED 0x0100
338 339 340 341
#define CODEC_FLAG_PASS1 0x0200   ///< use internal 2pass ratecontrol in first  pass mode
#define CODEC_FLAG_PASS2 0x0400   ///< use internal 2pass ratecontrol in second pass mode
#define CODEC_FLAG_EXTERN_HUFF 0x1000 ///< use external huffman table (for mjpeg)
#define CODEC_FLAG_GRAY  0x2000   ///< only decode/encode grayscale
Diego Biurrun's avatar
Diego Biurrun committed
342
#define CODEC_FLAG_EMU_EDGE 0x4000///< don't draw edges
343 344
#define CODEC_FLAG_PSNR           0x8000 ///< error[?] variables will be set during encoding
#define CODEC_FLAG_TRUNCATED  0x00010000 /** input bitstream might be truncated at a random location instead
345
                                            of only at frame boundaries */
346 347
#define CODEC_FLAG_NORMALIZE_AQP  0x00020000 ///< normalize adaptive quantization
#define CODEC_FLAG_INTERLACED_DCT 0x00040000 ///< use interlaced dct
348
#define CODEC_FLAG_LOW_DELAY      0x00080000 ///< force low delay
349 350 351 352
#define CODEC_FLAG_ALT_SCAN       0x00100000 ///< use alternate scan
#define CODEC_FLAG_TRELLIS_QUANT  0x00200000 ///< use trellis quantization
#define CODEC_FLAG_GLOBAL_HEADER  0x00400000 ///< place global headers in extradata instead of every keyframe
#define CODEC_FLAG_BITEXACT       0x00800000 ///< use only bitexact stuff (except (i)dct)
353
/* Fx : Flag for h263+ extra options */
Michael Niedermayer's avatar
Michael Niedermayer committed
354 355
#define CODEC_FLAG_H263P_AIC      0x01000000 ///< H263 Advanced intra coding / MPEG4 AC prediction (remove this)
#define CODEC_FLAG_AC_PRED        0x01000000 ///< H263 Advanced intra coding / MPEG4 AC prediction
356
#define CODEC_FLAG_H263P_UMV      0x02000000 ///< Unlimited motion vector
357
#define CODEC_FLAG_CBP_RD         0x04000000 ///< use rate distortion optimization for cbp
358
#define CODEC_FLAG_QP_RD          0x08000000 ///< use rate distortion optimization for qp selectioon
359
#define CODEC_FLAG_H263P_AIV      0x00000008 ///< H263 Alternative inter vlc
Michael Niedermayer's avatar
Michael Niedermayer committed
360 361
#define CODEC_FLAG_OBMC           0x00000001 ///< OBMC
#define CODEC_FLAG_LOOP_FILTER    0x00000800 ///< loop filter
362 363
#define CODEC_FLAG_H263P_SLICE_STRUCT 0x10000000
#define CODEC_FLAG_INTERLACED_ME  0x20000000 ///< interlaced motion estimation
Michael Niedermayer's avatar
Michael Niedermayer committed
364
#define CODEC_FLAG_SVCD_SCAN_OFFSET 0x40000000 ///< will reserve space for SVCD scan offset user data
Baptiste Coudurier's avatar
Baptiste Coudurier committed
365
#define CODEC_FLAG_CLOSED_GOP     ((int)0x80000000)
366
#define CODEC_FLAG2_FAST          0x00000001 ///< allow non spec compliant speedup tricks
367
#define CODEC_FLAG2_STRICT_GOP    0x00000002 ///< strictly enforce GOP size
368
#define CODEC_FLAG2_NO_OUTPUT     0x00000004 ///< skip bitstream encoding
369
#define CODEC_FLAG2_LOCAL_HEADER  0x00000008 ///< place global headers at every keyframe instead of in extradata
Robert Swain's avatar
Robert Swain committed
370 371
#define CODEC_FLAG2_BPYRAMID      0x00000010 ///< H.264 allow b-frames to be used as references
#define CODEC_FLAG2_WPRED         0x00000020 ///< H.264 weighted biprediction for b-frames
372
#define CODEC_FLAG2_MIXED_REFS    0x00000040 ///< H.264 one reference per partition, as opposed to one reference per macroblock
Robert Swain's avatar
Robert Swain committed
373 374 375 376
#define CODEC_FLAG2_8X8DCT        0x00000080 ///< H.264 high profile 8x8 transform
#define CODEC_FLAG2_FASTPSKIP     0x00000100 ///< H.264 fast pskip
#define CODEC_FLAG2_AUD           0x00000200 ///< H.264 access unit delimiters
#define CODEC_FLAG2_BRDO          0x00000400 ///< b-frame rate-distortion optimization
377
#define CODEC_FLAG2_INTRA_VLC     0x00000800 ///< use MPEG-2 intra VLC table
378
#define CODEC_FLAG2_MEMC_ONLY     0x00001000 ///< only do ME/MC (I frames -> ref, P frame -> ME+MC)
379
#define CODEC_FLAG2_DROP_FRAME_TIMECODE 0x00002000 ///< timecode is in drop frame format
Michael Niedermayer's avatar
skiprd  
Michael Niedermayer committed
380
#define CODEC_FLAG2_SKIP_RD       0x00004000 ///< RD optimal MB level residual skiping
381

382
/* Unsupported options :
383 384 385
 *              Syntax Arithmetic coding (SAC)
 *              Reference Picture Selection
 *              Independant Segment Decoding */
386
/* /Fx */
Fabrice Bellard's avatar
Fabrice Bellard committed
387 388
/* codec capabilities */

389
#define CODEC_CAP_DRAW_HORIZ_BAND 0x0001 ///< decoder can use draw_horiz_band callback
Michael Niedermayer's avatar
Michael Niedermayer committed
390 391 392 393 394
/**
 * Codec uses get_buffer() for allocating buffers.
 * direct rendering method 1
 */
#define CODEC_CAP_DR1             0x0002
395 396 397
/* if 'parse_only' field is true, then avcodec_parse_frame() can be
   used */
#define CODEC_CAP_PARSE_ONLY      0x0004
398
#define CODEC_CAP_TRUNCATED       0x0008
399 400
/* codec can export data for HW decoding (XvMC) */
#define CODEC_CAP_HWACCEL         0x0010
401
/**
402
 * codec has a non zero delay and needs to be feeded with NULL at the end to get the delayed data.
403
 * if this is not set, the codec is guaranteed to never be feeded with NULL data
404
 */
405
#define CODEC_CAP_DELAY           0x0020
406 407 408 409 410
/**
 * Codec can be fed a final frame with a smaller size.
 * This can be used to prevent truncation of the last audio samples.
 */
#define CODEC_CAP_SMALL_LAST_FRAME 0x0040
Fabrice Bellard's avatar
Fabrice Bellard committed
411

Diego Biurrun's avatar
Diego Biurrun committed
412
//the following defines may change, don't expect compatibility if you use them
413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435
#define MB_TYPE_INTRA4x4   0x0001
#define MB_TYPE_INTRA16x16 0x0002 //FIXME h264 specific
#define MB_TYPE_INTRA_PCM  0x0004 //FIXME h264 specific
#define MB_TYPE_16x16      0x0008
#define MB_TYPE_16x8       0x0010
#define MB_TYPE_8x16       0x0020
#define MB_TYPE_8x8        0x0040
#define MB_TYPE_INTERLACED 0x0080
#define MB_TYPE_DIRECT2     0x0100 //FIXME
#define MB_TYPE_ACPRED     0x0200
#define MB_TYPE_GMC        0x0400
#define MB_TYPE_SKIP       0x0800
#define MB_TYPE_P0L0       0x1000
#define MB_TYPE_P1L0       0x2000
#define MB_TYPE_P0L1       0x4000
#define MB_TYPE_P1L1       0x8000
#define MB_TYPE_L0         (MB_TYPE_P0L0 | MB_TYPE_P1L0)
#define MB_TYPE_L1         (MB_TYPE_P0L1 | MB_TYPE_P1L1)
#define MB_TYPE_L0L1       (MB_TYPE_L0   | MB_TYPE_L1)
#define MB_TYPE_QUANT      0x00010000
#define MB_TYPE_CBP        0x00020000
//Note bits 24-31 are reserved for codec specific use (h264 ref0, mpeg1 0mv, ...)

436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463
/**
 * Pan Scan area.
 * this specifies the area which should be displayed. Note there may be multiple such areas for one frame
 */
typedef struct AVPanScan{
    /**
     * id.
     * - encoding: set by user.
     * - decoding: set by lavc
     */
    int id;

    /**
     * width and height in 1/16 pel
     * - encoding: set by user.
     * - decoding: set by lavc
     */
    int width;
    int height;

    /**
     * position of the top left corner in 1/16 pel for up to 3 fields/frames.
     * - encoding: set by user.
     * - decoding: set by lavc
     */
    int16_t position[3][2];
}AVPanScan;

Michael Niedermayer's avatar
Michael Niedermayer committed
464
#define FF_COMMON_FRAME \
465 466 467 468 469 470
    /**\
     * pointer to the picture planes.\
     * this might be different from the first allocated byte\
     * - encoding: \
     * - decoding: \
     */\
Michael Niedermayer's avatar
cleanup  
Michael Niedermayer committed
471 472 473
    uint8_t *data[4];\
    int linesize[4];\
    /**\
474
     * pointer to the first allocated byte of the picture. can be used in get_buffer/release_buffer\
Diego Biurrun's avatar
Diego Biurrun committed
475
     * this isn't used by lavc unless the default get/release_buffer() is used\
476 477
     * - encoding: \
     * - decoding: \
Michael Niedermayer's avatar
cleanup  
Michael Niedermayer committed
478 479 480 481
     */\
    uint8_t *base[4];\
    /**\
     * 1 -> keyframe, 0-> not\
482 483
     * - encoding: set by lavc\
     * - decoding: set by lavc\
Michael Niedermayer's avatar
cleanup  
Michael Niedermayer committed
484 485 486 487
     */\
    int key_frame;\
\
    /**\
Michael Niedermayer's avatar
Michael Niedermayer committed
488
     * picture type of the frame, see ?_TYPE below.\
489 490
     * - encoding: set by lavc for coded_picture (and set by user for input)\
     * - decoding: set by lavc\
Michael Niedermayer's avatar
cleanup  
Michael Niedermayer committed
491 492 493 494
     */\
    int pict_type;\
\
    /**\
495 496
     * presentation timestamp in time_base units (time when frame should be shown to user)\
     * if AV_NOPTS_VALUE then frame_rate = 1/time_base will be assumed\
497 498
     * - encoding: MUST be set by user\
     * - decoding: set by lavc\
Michael Niedermayer's avatar
cleanup  
Michael Niedermayer committed
499
     */\
500
    int64_t pts;\
Michael Niedermayer's avatar
cleanup  
Michael Niedermayer committed
501 502 503
\
    /**\
     * picture number in bitstream order.\
504 505
     * - encoding: set by\
     * - decoding: set by lavc\
Michael Niedermayer's avatar
cleanup  
Michael Niedermayer committed
506 507 508 509
     */\
    int coded_picture_number;\
    /**\
     * picture number in display order.\
510 511
     * - encoding: set by\
     * - decoding: set by lavc\
Michael Niedermayer's avatar
cleanup  
Michael Niedermayer committed
512 513 514 515
     */\
    int display_picture_number;\
\
    /**\
516
     * quality (between 1 (good) and FF_LAMBDA_MAX (bad)) \
517 518
     * - encoding: set by lavc for coded_picture (and set by user for input)\
     * - decoding: set by lavc\
Michael Niedermayer's avatar
cleanup  
Michael Niedermayer committed
519
     */\
520
    int quality; \
Michael Niedermayer's avatar
cleanup  
Michael Niedermayer committed
521 522 523
\
    /**\
     * buffer age (1->was last buffer and dint change, 2->..., ...).\
524
     * set to INT_MAX if the buffer has not been used yet \
525 526
     * - encoding: unused\
     * - decoding: MUST be set by get_buffer()\
Michael Niedermayer's avatar
cleanup  
Michael Niedermayer committed
527 528 529 530 531
     */\
    int age;\
\
    /**\
     * is this picture used as reference\
532 533
     * - encoding: unused\
     * - decoding: set by lavc (before get_buffer() call))\
Michael Niedermayer's avatar
cleanup  
Michael Niedermayer committed
534 535 536 537 538
     */\
    int reference;\
\
    /**\
     * QP table\
539 540
     * - encoding: unused\
     * - decoding: set by lavc\
Michael Niedermayer's avatar
cleanup  
Michael Niedermayer committed
541 542 543 544
     */\
    int8_t *qscale_table;\
    /**\
     * QP store stride\
545 546
     * - encoding: unused\
     * - decoding: set by lavc\
Michael Niedermayer's avatar
cleanup  
Michael Niedermayer committed
547 548 549 550 551 552
     */\
    int qstride;\
\
    /**\
     * mbskip_table[mb]>=1 if MB didnt change\
     * stride= mb_width = (width+15)>>4\
553 554
     * - encoding: unused\
     * - decoding: set by lavc\
Michael Niedermayer's avatar
cleanup  
Michael Niedermayer committed
555 556
     */\
    uint8_t *mbskip_table;\
557 558
\
    /**\
Michael Niedermayer's avatar
Michael Niedermayer committed
559 560 561 562 563 564 565 566
     * Motion vector table.\
     * @code\
     * example:\
     * int mv_sample_log2= 4 - motion_subsample_log2;\
     * int mb_width= (width+15)>>4;\
     * int mv_stride= (mb_width << mv_sample_log2) + 1;\
     * motion_val[direction][x + y*mv_stride][0->mv_x, 1->mv_y];\
     * @endcode\
567
     * - encoding: set by user\
568 569 570 571 572 573 574
     * - decoding: set by lavc\
     */\
    int16_t (*motion_val[2])[2];\
\
    /**\
     * Macroblock type table\
     * mb_type_base + mb_width + 2\
575
     * - encoding: set by user\
576 577 578 579 580
     * - decoding: set by lavc\
     */\
    uint32_t *mb_type;\
\
    /**\
581 582
     * log2 of the size of the block which a single vector in motion_val represents: \
     * (4->16x16, 3->8x8, 2-> 4x4, 1-> 2x2)\
583 584 585 586
     * - encoding: unused\
     * - decoding: set by lavc\
     */\
    uint8_t motion_subsample_log2;\
Michael Niedermayer's avatar
cleanup  
Michael Niedermayer committed
587 588 589
\
    /**\
     * for some private data of the user\
590 591
     * - encoding: unused\
     * - decoding: set by user\
Michael Niedermayer's avatar
cleanup  
Michael Niedermayer committed
592 593
     */\
    void *opaque;\
594 595 596
\
    /**\
     * error\
597 598
     * - encoding: set by lavc if flags&CODEC_FLAG_PSNR\
     * - decoding: unused\
599 600
     */\
    uint64_t error[4];\
Michael Niedermayer's avatar
Michael Niedermayer committed
601 602 603
\
    /**\
     * type of the buffer (to keep track of who has to dealloc data[*])\
604 605
     * - encoding: set by the one who allocs it\
     * - decoding: set by the one who allocs it\
Falk Hüffner's avatar
Falk Hüffner committed
606
     * Note: user allocated (direct rendering) & internal buffers can not coexist currently\
Michael Niedermayer's avatar
Michael Niedermayer committed
607 608
     */\
    int type;\
609 610 611 612
    \
    /**\
     * when decoding, this signal how much the picture must be delayed.\
     * extra_delay = repeat_pict / (2*fps)\
613 614
     * - encoding: unused\
     * - decoding: set by lavc\
615
     */\
Michael Niedermayer's avatar
Michael Niedermayer committed
616 617 618 619 620 621
    int repeat_pict;\
    \
    /**\
     * \
     */\
    int qscale_type;\
622 623 624 625 626 627 628 629 630
    \
    /**\
     * The content of the picture is interlaced.\
     * - encoding: set by user\
     * - decoding: set by lavc (default 0)\
     */\
    int interlaced_frame;\
    \
    /**\
631
     * if the content is interlaced, is top field displayed first.\
632
     * - encoding: set by user\
633
     * - decoding: set by lavc\
634
     */\
635
    int top_field_first;\
636 637 638 639 640 641 642
    \
    /**\
     * Pan scan.\
     * - encoding: set by user\
     * - decoding: set by lavc\
     */\
    AVPanScan *pan_scan;\
643 644 645 646 647 648 649
    \
    /**\
     * tell user application that palette has changed from previous frame.\
     * - encoding: ??? (no palette-enabled encoder yet)\
     * - decoding: set by lavc (default 0)\
     */\
    int palette_has_changed;\
650 651 652 653 654 655 656
    \
    /**\
     * Codec suggestion on buffer type if != 0\
     * - encoding: unused\
     * - decoding: set by lavc (before get_buffer() call))\
     */\
    int buffer_hints;\
657 658 659 660 661 662 663
\
    /**\
     * DCT coeffitients\
     * - encoding: unused\
     * - decoding: set by lavc\
     */\
    short *dct_coeff;\
664 665 666 667 668 669 670
\
    /**\
     * Motion referece frame index\
     * - encoding: set by user\
     * - decoding: set by lavc\
     */\
    int8_t *ref_index[2];
671

672 673 674
#define FF_QSCALE_TYPE_MPEG1 0
#define FF_QSCALE_TYPE_MPEG2 1
#define FF_QSCALE_TYPE_H264  2
Michael Niedermayer's avatar
Michael Niedermayer committed
675 676

#define FF_BUFFER_TYPE_INTERNAL 1
Michael Niedermayer's avatar
Michael Niedermayer committed
677
#define FF_BUFFER_TYPE_USER     2 ///< Direct rendering buffers (image is (de)allocated by user)
Diego Biurrun's avatar
Diego Biurrun committed
678 679
#define FF_BUFFER_TYPE_SHARED   4 ///< buffer from somewhere else, don't dealloc image (data/base), all other tables are not shared
#define FF_BUFFER_TYPE_COPY     8 ///< just a (modified) copy of some other buffer, don't dealloc anything
Michael Niedermayer's avatar
Michael Niedermayer committed
680

Michael Niedermayer's avatar
cleanup  
Michael Niedermayer committed
681

682 683 684 685
#define FF_I_TYPE 1 // Intra
#define FF_P_TYPE 2 // Predicted
#define FF_B_TYPE 3 // Bi-dir predicted
#define FF_S_TYPE 4 // S(GMC)-VOP MPEG4
Michael Niedermayer's avatar
Michael Niedermayer committed
686 687
#define FF_SI_TYPE 5
#define FF_SP_TYPE 6
Michael Niedermayer's avatar
cleanup  
Michael Niedermayer committed
688

689 690 691 692 693
#define FF_BUFFER_HINTS_VALID    0x01 // Buffer hints value is meaningful (if 0 ignore)
#define FF_BUFFER_HINTS_READABLE 0x02 // Codec will read from buffer
#define FF_BUFFER_HINTS_PRESERVE 0x04 // User must not alter buffer content
#define FF_BUFFER_HINTS_REUSABLE 0x08 // Codec will reuse the buffer (update)

Michael Niedermayer's avatar
Michael Niedermayer committed
694 695 696
/**
 * Audio Video Frame.
 */
Michael Niedermayer's avatar
Michael Niedermayer committed
697 698 699
typedef struct AVFrame {
    FF_COMMON_FRAME
} AVFrame;
Michael Niedermayer's avatar
cleanup  
Michael Niedermayer committed
700

701
#define DEFAULT_FRAME_RATE_BASE 1001000
Michael Niedermayer's avatar
doxy  
Michael Niedermayer committed
702 703 704 705

/**
 * main external api structure.
 */
Fabrice Bellard's avatar
Fabrice Bellard committed
706
typedef struct AVCodecContext {
707 708 709 710
    /**
     * Info on struct for av_log
     * - set by avcodec_alloc_context
     */
Michael Niedermayer's avatar
Michael Niedermayer committed
711
    AVClass *av_class;
712
    /**
713 714
     * the average bitrate.
     * - encoding: set by user. unused for constant quantizer encoding
715
     * - decoding: set by lavc. 0 or some bitrate if this info is available in the stream
716
     */
Fabrice Bellard's avatar
Fabrice Bellard committed
717
    int bit_rate;
718 719

    /**
720
     * number of bits the bitstream is allowed to diverge from the reference.
721
     *           the reference can be CBR (for CBR pass1) or VBR (for pass2)
722 723
     * - encoding: set by user. unused for constant quantizer encoding
     * - decoding: unused
724
     */
725
    int bit_rate_tolerance;
726 727

    /**
728 729 730
     * CODEC_FLAG_*.
     * - encoding: set by user.
     * - decoding: set by user.
731
     */
Fabrice Bellard's avatar
Fabrice Bellard committed
732
    int flags;
733 734 735

    /**
     * some codecs needs additionnal format info. It is stored here
736
     * - encoding: set by user.
737
     * - decoding: set by lavc. (FIXME is this ok?)
738 739 740 741
     */
    int sub_id;

    /**
742
     * motion estimation algorithm used for video coding.
Robert Swain's avatar
Robert Swain committed
743 744
     * 1 (zero), 2 (full), 3 (log), 4 (phods), 5 (epzs), 6 (x1), 7 (hex),
     * 8 (umh), 9 (iter) [7, 8 are x264 specific, 9 is snow specific]
745 746
     * - encoding: MUST be set by user.
     * - decoding: unused
747 748 749 750
     */
    int me_method;

    /**
751
     * some codecs need / can use extra-data like huffman tables.
752 753
     * mjpeg: huffman tables
     * rv10: additional flags
754
     * mpeg4: global headers (they can be in the bitstream or here)
755 756
     * the allocated memory should be FF_INPUT_BUFFER_PADDING_SIZE bytes larger
     * then extradata_size to avoid prolems if its read with the bitstream reader
757
     * the bytewise contents of extradata must not depend on the architecture or cpu endianness
758 759
     * - encoding: set/allocated/freed by lavc.
     * - decoding: set/allocated/freed by user.
760
     */
761
    uint8_t *extradata;
762
    int extradata_size;
763

764
    /**
765 766 767 768
     * this is the fundamental unit of time (in seconds) in terms
     * of which frame timestamps are represented. for fixed-fps content,
     * timebase should be 1/framerate and timestamp increments should be
     * identically 1.
769
     * - encoding: MUST be set by user
770
     * - decoding: set by lavc.
771
     */
772
    AVRational time_base;
773

774
    /* video only */
775
    /**
776
     * picture width / height.
777
     * - encoding: MUST be set by user.
778
     * - decoding: set by lavc.
779
     * Note, for compatibility its possible to set this instead of
780
     * coded_width/height before decoding
781
     */
Fabrice Bellard's avatar
Fabrice Bellard committed
782
    int width, height;
783

784
#define FF_ASPECT_EXTENDED 15
785 786

    /**
787 788 789
     * the number of pictures in a group of pitures, or 0 for intra_only.
     * - encoding: set by user.
     * - decoding: unused
790 791 792 793
     */
    int gop_size;

    /**
794
     * pixel format, see PIX_FMT_xxx.
795
     * - encoding: set by user.
796
     * - decoding: set by lavc.
797
     */
798
    enum PixelFormat pix_fmt;
799

800
    /**
801
     * Frame rate emulation. If not zero lower layer (i.e. format handler)
802 803 804 805 806
     * has to read frames at native frame rate.
     * - encoding: set by user.
     * - decoding: unused.
     */
    int rate_emu;
807

808 809 810 811 812
    /**
     * if non NULL, 'draw_horiz_band' is called by the libavcodec
     * decoder to draw an horizontal band. It improve cache usage. Not
     * all codecs can do that. You must check the codec capabilities
     * before
813 814
     * - encoding: unused
     * - decoding: set by user.
815 816 817 818
     * @param height the height of the slice
     * @param y the y position of the slice
     * @param type 1->top field, 2->bottom field, 3->frame
     * @param offset offset into the AVFrame.data from which the slice should be read