avcodec.h 74.6 KB
Newer Older
Fabrice Bellard's avatar
Fabrice Bellard committed
1 2 3
#ifndef AVCODEC_H
#define AVCODEC_H

Michael Niedermayer's avatar
Michael Niedermayer committed
4 5
/**
 * @file avcodec.h
Michael Niedermayer's avatar
doxy  
Michael Niedermayer committed
6
 * external api header.
Michael Niedermayer's avatar
Michael Niedermayer committed
7 8 9
 */


10 11 12 13
#ifdef __cplusplus
extern "C" {
#endif

14
#include "avutil.h"
Zdenek Kabelac's avatar
Zdenek Kabelac committed
15
#include <sys/types.h> /* size_t */
Fabrice Bellard's avatar
Fabrice Bellard committed
16

17
//FIXME: This really doesn't belong in here..
18
#define FFMPEG_VERSION_INT      0x000409
Fabrice Bellard's avatar
Fabrice Bellard committed
19

20
#define AV_STRINGIFY(s)         AV_TOSTRING(s)
Fabrice Bellard's avatar
Fabrice Bellard committed
21
#define AV_TOSTRING(s) #s
Michael Niedermayer's avatar
Michael Niedermayer committed
22

23 24
#define LIBAVCODEC_VERSION_INT  ((51<<16)+(9<<8)+0)
#define LIBAVCODEC_VERSION      51.9.0
25
#define LIBAVCODEC_BUILD        LIBAVCODEC_VERSION_INT
Michael Niedermayer's avatar
Michael Niedermayer committed
26

27
#define LIBAVCODEC_IDENT        "Lavc" AV_STRINGIFY(LIBAVCODEC_VERSION)
Alex Beregszaszi's avatar
Alex Beregszaszi committed
28

29 30 31
#define AV_NOPTS_VALUE          int64_t_C(0x8000000000000000)
#define AV_TIME_BASE            1000000
#define AV_TIME_BASE_Q          (AVRational){1, AV_TIME_BASE}
32

Fabrice Bellard's avatar
Fabrice Bellard committed
33
enum CodecID {
34
    CODEC_ID_NONE,
Fabrice Bellard's avatar
Fabrice Bellard committed
35
    CODEC_ID_MPEG1VIDEO,
36
    CODEC_ID_MPEG2VIDEO, /* prefered ID for MPEG Video 1 or 2 decoding */
Ivan Kalvachev's avatar
Ivan Kalvachev committed
37
    CODEC_ID_MPEG2VIDEO_XVMC,
38
    CODEC_ID_H261,
Fabrice Bellard's avatar
Fabrice Bellard committed
39 40
    CODEC_ID_H263,
    CODEC_ID_RV10,
Michael Niedermayer's avatar
Michael Niedermayer committed
41
    CODEC_ID_RV20,
Fabrice Bellard's avatar
Fabrice Bellard committed
42
    CODEC_ID_MJPEG,
43
    CODEC_ID_MJPEGB,
44
    CODEC_ID_LJPEG,
45
    CODEC_ID_SP5X,
46
    CODEC_ID_JPEGLS,
Fabrice Bellard's avatar
Fabrice Bellard committed
47
    CODEC_ID_MPEG4,
Fabrice Bellard's avatar
Fabrice Bellard committed
48
    CODEC_ID_RAWVIDEO,
49 50 51
    CODEC_ID_MSMPEG4V1,
    CODEC_ID_MSMPEG4V2,
    CODEC_ID_MSMPEG4V3,
52
    CODEC_ID_WMV1,
Michael Niedermayer's avatar
Michael Niedermayer committed
53
    CODEC_ID_WMV2,
Fabrice Bellard's avatar
Fabrice Bellard committed
54 55
    CODEC_ID_H263P,
    CODEC_ID_H263I,
56
    CODEC_ID_FLV1,
Nick Kurshev's avatar
Nick Kurshev committed
57
    CODEC_ID_SVQ1,
58
    CODEC_ID_SVQ3,
Fabrice Bellard's avatar
Fabrice Bellard committed
59
    CODEC_ID_DVVIDEO,
Michael Niedermayer's avatar
huffyuv  
Michael Niedermayer committed
60
    CODEC_ID_HUFFYUV,
61
    CODEC_ID_CYUV,
Michael Niedermayer's avatar
Michael Niedermayer committed
62
    CODEC_ID_H264,
63
    CODEC_ID_INDEO3,
64
    CODEC_ID_VP3,
65
    CODEC_ID_THEORA,
Michael Niedermayer's avatar
Michael Niedermayer committed
66
    CODEC_ID_ASV1,
Michael Niedermayer's avatar
Michael Niedermayer committed
67
    CODEC_ID_ASV2,
68
    CODEC_ID_FFV1,
69
    CODEC_ID_4XM,
Michael Niedermayer's avatar
Michael Niedermayer committed
70
    CODEC_ID_VCR1,
Alex Beregszaszi's avatar
Alex Beregszaszi committed
71
    CODEC_ID_CLJR,
72
    CODEC_ID_MDEC,
73 74
    CODEC_ID_ROQ,
    CODEC_ID_INTERPLAY_VIDEO,
75 76
    CODEC_ID_XAN_WC3,
    CODEC_ID_XAN_WC4,
77 78 79 80 81
    CODEC_ID_RPZA,
    CODEC_ID_CINEPAK,
    CODEC_ID_WS_VQA,
    CODEC_ID_MSRLE,
    CODEC_ID_MSVIDEO1,
82
    CODEC_ID_IDCIN,
Roberto Togni's avatar
Roberto Togni committed
83
    CODEC_ID_8BPS,
84
    CODEC_ID_SMC,
Mike Melanson's avatar
Mike Melanson committed
85
    CODEC_ID_FLIC,
86
    CODEC_ID_TRUEMOTION1,
87
    CODEC_ID_VMDVIDEO,
Roberto Togni's avatar
Roberto Togni committed
88 89
    CODEC_ID_MSZH,
    CODEC_ID_ZLIB,
90
    CODEC_ID_QTRLE,
91
    CODEC_ID_SNOW,
92
    CODEC_ID_TSCC,
93
    CODEC_ID_ULTI,
94
    CODEC_ID_QDRAW,
95
    CODEC_ID_VIXL,
96
    CODEC_ID_QPEG,
97 98 99 100 101 102 103
    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
104
    CODEC_ID_FFVHUFF,
105 106
    CODEC_ID_RV30,
    CODEC_ID_RV40,
107 108
    CODEC_ID_VC9,
    CODEC_ID_WMV3,
109
    CODEC_ID_LOCO,
110
    CODEC_ID_WNV1,
111
    CODEC_ID_AASC,
112
    CODEC_ID_INDEO2,
113
    CODEC_ID_FRAPS,
114
    CODEC_ID_TRUEMOTION2,
Måns Rullgård's avatar
Måns Rullgård committed
115
    CODEC_ID_BMP,
116
    CODEC_ID_CSCD,
117
    CODEC_ID_MMVIDEO,
118
    CODEC_ID_ZMBV,
119
    CODEC_ID_AVS,
Kostya Shishkov's avatar
Kostya Shishkov committed
120
    CODEC_ID_SMACKVIDEO,
121
    CODEC_ID_NUV,
122
    CODEC_ID_KMVC,
123
    CODEC_ID_FLASHSV,
Fabrice Bellard's avatar
Fabrice Bellard committed
124 125

    /* various pcm "codecs" */
126
    CODEC_ID_PCM_S16LE= 0x10000,
Fabrice Bellard's avatar
Fabrice Bellard committed
127 128 129 130 131 132 133
    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,
134 135 136 137 138 139 140 141 142
    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,
143 144

    /* various adpcm codecs */
145
    CODEC_ID_ADPCM_IMA_QT= 0x11000,
146
    CODEC_ID_ADPCM_IMA_WAV,
147 148
    CODEC_ID_ADPCM_IMA_DK3,
    CODEC_ID_ADPCM_IMA_DK4,
149
    CODEC_ID_ADPCM_IMA_WS,
150
    CODEC_ID_ADPCM_IMA_SMJPEG,
151
    CODEC_ID_ADPCM_MS,
152
    CODEC_ID_ADPCM_4XM,
153 154
    CODEC_ID_ADPCM_XA,
    CODEC_ID_ADPCM_ADX,
155
    CODEC_ID_ADPCM_EA,
156
    CODEC_ID_ADPCM_G726,
157
    CODEC_ID_ADPCM_CT,
158
    CODEC_ID_ADPCM_SWF,
159
    CODEC_ID_ADPCM_YAMAHA,
160 161 162
    CODEC_ID_ADPCM_SBPRO_4,
    CODEC_ID_ADPCM_SBPRO_3,
    CODEC_ID_ADPCM_SBPRO_2,
163

164 165
    /* AMR */
    CODEC_ID_AMR_NB= 0x12000,
166 167
    CODEC_ID_AMR_WB,

168
    /* RealAudio codecs*/
169
    CODEC_ID_RA_144= 0x13000,
170
    CODEC_ID_RA_288,
171 172

    /* various DPCM codecs */
173
    CODEC_ID_ROQ_DPCM= 0x14000,
174
    CODEC_ID_INTERPLAY_DPCM,
175
    CODEC_ID_XAN_DPCM,
176
    CODEC_ID_SOL_DPCM,
177

178 179 180 181 182 183 184 185 186 187 188 189 190 191 192
    CODEC_ID_MP2= 0x15000,
    CODEC_ID_MP3, /* prefered ID for MPEG Audio layer 1, 2 or3 decoding */
    CODEC_ID_AAC,
    CODEC_ID_MPEG4AAC,
    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
193
    CODEC_ID_FLAC,
Roberto Togni's avatar
Roberto Togni committed
194
    CODEC_ID_MP3ADU,
195
    CODEC_ID_MP3ON4,
196
    CODEC_ID_SHORTEN,
Michael Niedermayer's avatar
Michael Niedermayer committed
197
    CODEC_ID_ALAC,
198
    CODEC_ID_WESTWOOD_SND1,
199
    CODEC_ID_GSM,
Roberto Togni's avatar
Roberto Togni committed
200
    CODEC_ID_QDM2,
201
    CODEC_ID_COOK,
202
    CODEC_ID_TRUESPEECH,
203
    CODEC_ID_TTA,
Kostya Shishkov's avatar
Kostya Shishkov committed
204
    CODEC_ID_SMACKAUDIO,
205 206

    CODEC_ID_OGGTHEORA= 0x16000,
Fabrice Bellard's avatar
Fabrice Bellard committed
207 208

    /* subtitle codecs */
209 210 211
    CODEC_ID_DVD_SUBTITLE= 0x17000,
    CODEC_ID_DVB_SUBTITLE,

212
    CODEC_ID_MPEG2TS= 0x20000, /* _FAKE_ codec to indicate a raw MPEG2 transport
213
                         stream (only used by libavformat) */
Fabrice Bellard's avatar
Fabrice Bellard committed
214
};
215 216 217

/* CODEC_ID_MP3LAME is absolete */
#define CODEC_ID_MP3LAME CODEC_ID_MP3
Fabrice Bellard's avatar
Fabrice Bellard committed
218 219

enum CodecType {
220
    CODEC_TYPE_UNKNOWN = -1,
Fabrice Bellard's avatar
Fabrice Bellard committed
221 222
    CODEC_TYPE_VIDEO,
    CODEC_TYPE_AUDIO,
223
    CODEC_TYPE_DATA,
Fabrice Bellard's avatar
Fabrice Bellard committed
224
    CODEC_TYPE_SUBTITLE,
Fabrice Bellard's avatar
Fabrice Bellard committed
225 226
};

Fabrice Bellard's avatar
Fabrice Bellard committed
227
/* currently unused, may be used if 24/32 bits samples ever supported */
228
/* all in native endian */
Fabrice Bellard's avatar
Fabrice Bellard committed
229
enum SampleFormat {
230
    SAMPLE_FMT_NONE = -1,
231 232 233
    SAMPLE_FMT_U8,              ///< unsigned 8 bits
    SAMPLE_FMT_S16,             ///< signed 16 bits
    SAMPLE_FMT_S24,             ///< signed 24 bits
234
    SAMPLE_FMT_S32,             ///< signed 32 bits
235
    SAMPLE_FMT_FLT,             ///< float
Fabrice Bellard's avatar
Fabrice Bellard committed
236 237
};

Fabrice Bellard's avatar
Fabrice Bellard committed
238
/* in bytes */
239
#define AVCODEC_MAX_AUDIO_FRAME_SIZE 192000 // 1 second of 48khz 32bit audio
Fabrice Bellard's avatar
Fabrice Bellard committed
240

241
/**
242
 * Required number of additionally allocated bytes at the end of the input bitstream for decoding.
243
 * this is mainly needed because some optimized bitstream readers read
244 245 246
 * 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
247 248 249
 */
#define FF_INPUT_BUFFER_PADDING_SIZE 8

250 251 252 253 254 255
/**
 * minimum encoding buffer size.
 * used to avoid some checks during header writing
 */
#define FF_MIN_BUFFER_SIZE 16384

256 257
/* motion estimation type, EPZS by default */
enum Motion_Est_ID {
258
    ME_ZERO = 1,
259 260 261 262
    ME_FULL,
    ME_LOG,
    ME_PHODS,
    ME_EPZS,
263 264 265 266
    ME_X1,
    ME_HEX,
    ME_UMH,
    ME_ITER,
267 268
};

Michael Niedermayer's avatar
Michael Niedermayer committed
269 270 271 272 273 274 275 276 277 278
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
279 280 281 282 283 284 285
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;

286 287 288
/* only for ME compatiblity with old apps */
extern int motion_estimation_method;

289
#define FF_MAX_B_FRAMES 16
290

Michael Niedermayer's avatar
Michael Niedermayer committed
291
/* encoding support
292
   these flags can be passed in AVCodecContext.flags before initing
Diego Biurrun's avatar
Diego Biurrun committed
293
   Note: not everything is supported yet.
Michael Niedermayer's avatar
Michael Niedermayer committed
294
*/
Fabrice Bellard's avatar
Fabrice Bellard committed
295

296
#define CODEC_FLAG_QSCALE 0x0002  ///< use fixed qscale
297
#define CODEC_FLAG_4MV    0x0004  ///< 4 MV per MB allowed / Advanced prediction for H263
298 299 300 301 302
#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
/* parent program gurantees that the input for b-frame containing streams is not written to
303
   for at least s->max_b_frames+1 frames, if this is not set than the input will be copied */
304
#define CODEC_FLAG_INPUT_PRESERVED 0x0100
305 306 307 308
#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
309
#define CODEC_FLAG_EMU_EDGE 0x4000///< don't draw edges
310 311
#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
312
                                            of only at frame boundaries */
313 314
#define CODEC_FLAG_NORMALIZE_AQP  0x00020000 ///< normalize adaptive quantization
#define CODEC_FLAG_INTERLACED_DCT 0x00040000 ///< use interlaced dct
315
#define CODEC_FLAG_LOW_DELAY      0x00080000 ///< force low delay
316 317 318 319
#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)
320
/* Fx : Flag for h263+ extra options */
Michael Niedermayer's avatar
Michael Niedermayer committed
321 322
#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
323
#define CODEC_FLAG_H263P_UMV      0x02000000 ///< Unlimited motion vector
324
#define CODEC_FLAG_CBP_RD         0x04000000 ///< use rate distortion optimization for cbp
325
#define CODEC_FLAG_QP_RD          0x08000000 ///< use rate distortion optimization for qp selectioon
326
#define CODEC_FLAG_H263P_AIV      0x00000008 ///< H263 Alternative inter vlc
Michael Niedermayer's avatar
Michael Niedermayer committed
327 328
#define CODEC_FLAG_OBMC           0x00000001 ///< OBMC
#define CODEC_FLAG_LOOP_FILTER    0x00000800 ///< loop filter
329 330
#define CODEC_FLAG_H263P_SLICE_STRUCT 0x10000000
#define CODEC_FLAG_INTERLACED_ME  0x20000000 ///< interlaced motion estimation
Michael Niedermayer's avatar
Michael Niedermayer committed
331
#define CODEC_FLAG_SVCD_SCAN_OFFSET 0x40000000 ///< will reserve space for SVCD scan offset user data
Baptiste Coudurier's avatar
Baptiste Coudurier committed
332
#define CODEC_FLAG_CLOSED_GOP     ((int)0x80000000)
333
#define CODEC_FLAG2_FAST          0x00000001 ///< allow non spec compliant speedup tricks
334
#define CODEC_FLAG2_STRICT_GOP    0x00000002 ///< strictly enforce GOP size
335
#define CODEC_FLAG2_NO_OUTPUT     0x00000004 ///< skip bitstream encoding
336
#define CODEC_FLAG2_LOCAL_HEADER  0x00000008 ///< place global headers at every keyframe instead of in extradata
Robert Swain's avatar
Robert Swain committed
337 338 339 340 341 342 343
#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
#define CODEC_FLAG2_MIXED_REFS    0x00000040 ///< H.264 multiple references per partition
#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
344
#define CODEC_FLAG2_INTRA_VLC     0x00000800 ///< use MPEG-2 intra VLC table
345
#define CODEC_FLAG2_MEMC_ONLY     0x00001000 ///< only do ME/MC (I frames -> ref, P frame -> ME+MC)
346

347
/* Unsupported options :
348 349 350
 *              Syntax Arithmetic coding (SAC)
 *              Reference Picture Selection
 *              Independant Segment Decoding */
351
/* /Fx */
Fabrice Bellard's avatar
Fabrice Bellard committed
352 353
/* codec capabilities */

354
#define CODEC_CAP_DRAW_HORIZ_BAND 0x0001 ///< decoder can use draw_horiz_band callback
Michael Niedermayer's avatar
Michael Niedermayer committed
355 356 357 358 359
/**
 * Codec uses get_buffer() for allocating buffers.
 * direct rendering method 1
 */
#define CODEC_CAP_DR1             0x0002
360 361 362
/* if 'parse_only' field is true, then avcodec_parse_frame() can be
   used */
#define CODEC_CAP_PARSE_ONLY      0x0004
363
#define CODEC_CAP_TRUNCATED       0x0008
364 365
/* codec can export data for HW decoding (XvMC) */
#define CODEC_CAP_HWACCEL         0x0010
366
/**
367 368 369
 * codec has a non zero delay and needs to be feeded with NULL at the end to get the delayed data.
 * if this is not set, the codec is guranteed to never be feeded with NULL data
 */
370
#define CODEC_CAP_DELAY           0x0020
Fabrice Bellard's avatar
Fabrice Bellard committed
371

Diego Biurrun's avatar
Diego Biurrun committed
372
//the following defines may change, don't expect compatibility if you use them
373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395
#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, ...)

396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423
/**
 * 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
424
#define FF_COMMON_FRAME \
425 426 427 428 429 430
    /**\
     * pointer to the picture planes.\
     * this might be different from the first allocated byte\
     * - encoding: \
     * - decoding: \
     */\
Michael Niedermayer's avatar
cleanup  
Michael Niedermayer committed
431 432 433
    uint8_t *data[4];\
    int linesize[4];\
    /**\
434
     * pointer to the first allocated byte of the picture. can be used in get_buffer/release_buffer\
Diego Biurrun's avatar
Diego Biurrun committed
435
     * this isn't used by lavc unless the default get/release_buffer() is used\
436 437
     * - encoding: \
     * - decoding: \
Michael Niedermayer's avatar
cleanup  
Michael Niedermayer committed
438 439 440 441
     */\
    uint8_t *base[4];\
    /**\
     * 1 -> keyframe, 0-> not\
442 443
     * - encoding: set by lavc\
     * - decoding: set by lavc\
Michael Niedermayer's avatar
cleanup  
Michael Niedermayer committed
444 445 446 447
     */\
    int key_frame;\
\
    /**\
Michael Niedermayer's avatar
Michael Niedermayer committed
448
     * picture type of the frame, see ?_TYPE below.\
449 450
     * - 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
451 452 453 454
     */\
    int pict_type;\
\
    /**\
455 456
     * 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\
457 458
     * - encoding: MUST be set by user\
     * - decoding: set by lavc\
Michael Niedermayer's avatar
cleanup  
Michael Niedermayer committed
459
     */\
460
    int64_t pts;\
Michael Niedermayer's avatar
cleanup  
Michael Niedermayer committed
461 462 463
\
    /**\
     * picture number in bitstream order.\
464 465
     * - encoding: set by\
     * - decoding: set by lavc\
Michael Niedermayer's avatar
cleanup  
Michael Niedermayer committed
466 467 468 469
     */\
    int coded_picture_number;\
    /**\
     * picture number in display order.\
470 471
     * - encoding: set by\
     * - decoding: set by lavc\
Michael Niedermayer's avatar
cleanup  
Michael Niedermayer committed
472 473 474 475
     */\
    int display_picture_number;\
\
    /**\
476
     * quality (between 1 (good) and FF_LAMBDA_MAX (bad)) \
477 478
     * - 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
479
     */\
480
    int quality; \
Michael Niedermayer's avatar
cleanup  
Michael Niedermayer committed
481 482 483
\
    /**\
     * buffer age (1->was last buffer and dint change, 2->..., ...).\
484
     * set to INT_MAX if the buffer has not been used yet \
485 486
     * - encoding: unused\
     * - decoding: MUST be set by get_buffer()\
Michael Niedermayer's avatar
cleanup  
Michael Niedermayer committed
487 488 489 490 491
     */\
    int age;\
\
    /**\
     * is this picture used as reference\
492 493
     * - encoding: unused\
     * - decoding: set by lavc (before get_buffer() call))\
Michael Niedermayer's avatar
cleanup  
Michael Niedermayer committed
494 495 496 497 498
     */\
    int reference;\
\
    /**\
     * QP table\
499 500
     * - encoding: unused\
     * - decoding: set by lavc\
Michael Niedermayer's avatar
cleanup  
Michael Niedermayer committed
501 502 503 504
     */\
    int8_t *qscale_table;\
    /**\
     * QP store stride\
505 506
     * - encoding: unused\
     * - decoding: set by lavc\
Michael Niedermayer's avatar
cleanup  
Michael Niedermayer committed
507 508 509 510 511 512
     */\
    int qstride;\
\
    /**\
     * mbskip_table[mb]>=1 if MB didnt change\
     * stride= mb_width = (width+15)>>4\
513 514
     * - encoding: unused\
     * - decoding: set by lavc\
Michael Niedermayer's avatar
cleanup  
Michael Niedermayer committed
515 516
     */\
    uint8_t *mbskip_table;\
517 518
\
    /**\
Michael Niedermayer's avatar
Michael Niedermayer committed
519 520 521 522 523 524 525 526
     * 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\
527
     * - encoding: set by user\
528 529 530 531 532 533 534
     * - decoding: set by lavc\
     */\
    int16_t (*motion_val[2])[2];\
\
    /**\
     * Macroblock type table\
     * mb_type_base + mb_width + 2\
535
     * - encoding: set by user\
536 537 538 539 540
     * - decoding: set by lavc\
     */\
    uint32_t *mb_type;\
\
    /**\
541 542
     * log2 of the size of the block which a single vector in motion_val represents: \
     * (4->16x16, 3->8x8, 2-> 4x4, 1-> 2x2)\
543 544 545 546
     * - encoding: unused\
     * - decoding: set by lavc\
     */\
    uint8_t motion_subsample_log2;\
Michael Niedermayer's avatar
cleanup  
Michael Niedermayer committed
547 548 549
\
    /**\
     * for some private data of the user\
550 551
     * - encoding: unused\
     * - decoding: set by user\
Michael Niedermayer's avatar
cleanup  
Michael Niedermayer committed
552 553
     */\
    void *opaque;\
554 555 556
\
    /**\
     * error\
557 558
     * - encoding: set by lavc if flags&CODEC_FLAG_PSNR\
     * - decoding: unused\
559 560
     */\
    uint64_t error[4];\
Michael Niedermayer's avatar
Michael Niedermayer committed
561 562 563
\
    /**\
     * type of the buffer (to keep track of who has to dealloc data[*])\
564 565
     * - 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
566
     * Note: user allocated (direct rendering) & internal buffers can not coexist currently\
Michael Niedermayer's avatar
Michael Niedermayer committed
567 568
     */\
    int type;\
569 570 571 572
    \
    /**\
     * when decoding, this signal how much the picture must be delayed.\
     * extra_delay = repeat_pict / (2*fps)\
573 574
     * - encoding: unused\
     * - decoding: set by lavc\
575
     */\
Michael Niedermayer's avatar
Michael Niedermayer committed
576 577 578 579 580 581
    int repeat_pict;\
    \
    /**\
     * \
     */\
    int qscale_type;\
582 583 584 585 586 587 588 589 590
    \
    /**\
     * The content of the picture is interlaced.\
     * - encoding: set by user\
     * - decoding: set by lavc (default 0)\
     */\
    int interlaced_frame;\
    \
    /**\
591
     * if the content is interlaced, is top field displayed first.\
592
     * - encoding: set by user\
593
     * - decoding: set by lavc\
594
     */\
595
    int top_field_first;\
596 597 598 599 600 601 602
    \
    /**\
     * Pan scan.\
     * - encoding: set by user\
     * - decoding: set by lavc\
     */\
    AVPanScan *pan_scan;\
603 604 605 606 607 608 609
    \
    /**\
     * 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;\
610 611 612 613 614 615 616
    \
    /**\
     * Codec suggestion on buffer type if != 0\
     * - encoding: unused\
     * - decoding: set by lavc (before get_buffer() call))\
     */\
    int buffer_hints;\
617 618 619 620 621 622 623
\
    /**\
     * DCT coeffitients\
     * - encoding: unused\
     * - decoding: set by lavc\
     */\
    short *dct_coeff;\
624 625 626 627 628 629 630
\
    /**\
     * Motion referece frame index\
     * - encoding: set by user\
     * - decoding: set by lavc\
     */\
    int8_t *ref_index[2];
631

632 633 634
#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
635 636

#define FF_BUFFER_TYPE_INTERNAL 1
Michael Niedermayer's avatar
Michael Niedermayer committed
637
#define FF_BUFFER_TYPE_USER     2 ///< Direct rendering buffers (image is (de)allocated by user)
Diego Biurrun's avatar
Diego Biurrun committed
638 639
#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
640

Michael Niedermayer's avatar
cleanup  
Michael Niedermayer committed
641

642 643 644 645
#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
646 647
#define FF_SI_TYPE 5
#define FF_SP_TYPE 6
Michael Niedermayer's avatar
cleanup  
Michael Niedermayer committed
648

649 650 651 652 653
#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
654 655 656
/**
 * Audio Video Frame.
 */
Michael Niedermayer's avatar
Michael Niedermayer committed
657 658 659
typedef struct AVFrame {
    FF_COMMON_FRAME
} AVFrame;
Michael Niedermayer's avatar
cleanup  
Michael Niedermayer committed
660

661
#define DEFAULT_FRAME_RATE_BASE 1001000
Michael Niedermayer's avatar
doxy  
Michael Niedermayer committed
662

663 664 665 666 667 668 669
/**
 * Used by av_log
 */
typedef struct AVCLASS AVClass;
struct AVCLASS {
    const char* class_name;
    const char* (*item_name)(void*); /* actually passing a pointer to an AVCodecContext
670 671 672
                                        or AVFormatContext, which begin with an AVClass.
                                        Needed because av_log is in libavcodec and has no visibility
                                        of AVIn/OutputFormat */
673
    struct AVOption *option;
674 675
};

Michael Niedermayer's avatar
doxy  
Michael Niedermayer committed
676 677 678
/**
 * main external api structure.
 */
Fabrice Bellard's avatar
Fabrice Bellard committed
679
typedef struct AVCodecContext {
680 681 682 683
    /**
     * Info on struct for av_log
     * - set by avcodec_alloc_context
     */
Michael Niedermayer's avatar
Michael Niedermayer committed
684
    AVClass *av_class;
685
    /**
686 687
     * the average bitrate.
     * - encoding: set by user. unused for constant quantizer encoding
688
     * - decoding: set by lavc. 0 or some bitrate if this info is available in the stream
689
     */
Fabrice Bellard's avatar
Fabrice Bellard committed
690
    int bit_rate;
691 692

    /**
693
     * number of bits the bitstream is allowed to diverge from the reference.
694
     *           the reference can be CBR (for CBR pass1) or VBR (for pass2)
695 696
     * - encoding: set by user. unused for constant quantizer encoding
     * - decoding: unused
697
     */
698
    int bit_rate_tolerance;
699 700

    /**
701 702 703
     * CODEC_FLAG_*.
     * - encoding: set by user.
     * - decoding: set by user.
704
     */
Fabrice Bellard's avatar
Fabrice Bellard committed
705
    int flags;
706 707 708

    /**
     * some codecs needs additionnal format info. It is stored here
709
     * - encoding: set by user.
710
     * - decoding: set by lavc. (FIXME is this ok?)
711 712 713 714
     */
    int sub_id;

    /**
715
     * motion estimation algorithm used for video coding.
Robert Swain's avatar
Robert Swain committed
716 717
     * 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]
718 719
     * - encoding: MUST be set by user.
     * - decoding: unused
720 721 722 723
     */
    int me_method;

    /**
724
     * some codecs need / can use extra-data like huffman tables.
725 726
     * mjpeg: huffman tables
     * rv10: additional flags
727
     * mpeg4: global headers (they can be in the bitstream or here)
728 729
     * 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
730
     * the bytewise contents of extradata must not depend on the architecture or cpu endianness
731 732
     * - encoding: set/allocated/freed by lavc.
     * - decoding: set/allocated/freed by user.
733
     */
734 735
    void *extradata;
    int extradata_size;
736

737
    /**
738 739 740 741
     * 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.
742
     * - encoding: MUST be set by user
743
     * - decoding: set by lavc.
744
     */
745
    AVRational time_base;
746

747
    /* video only */
748
    /**
749
     * picture width / height.
750
     * - encoding: MUST be set by user.
751
     * - decoding: set by lavc.
752
     * Note, for compatibility its possible to set this instead of
753
     * coded_width/height before decoding
754
     */
Fabrice Bellard's avatar
Fabrice Bellard committed
755
    int width, height;
756

757
#define FF_ASPECT_EXTENDED 15
758 759

    /**
760 761 762
     * the number of pictures in a group of pitures, or 0 for intra_only.
     * - encoding: set by user.
     * - decoding: unused
763 764 765 766
     */
    int gop_size;

    /**
767
     * pixel format, see PIX_FMT_xxx.
768
     * - encoding: set by user.
769
     * - decoding: set by lavc.
770
     */
771
    enum PixelFormat pix_fmt;
772

773
    /**
774
     * Frame rate emulation. If not zero lower layer (i.e. format handler)
775 776 777 778 779
     * has to read frames at native frame rate.
     * - encoding: set by user.
     * - decoding: unused.
     */
    int rate_emu;
780

781 782 783 784 785
    /**
     * 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
786 787
     * - encoding: unused
     * - decoding: set by user.
788 789 790 791
     * @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
792
     */
Fabrice Bellard's avatar
Fabrice Bellard committed
793
    void (*draw_horiz_band)(struct AVCodecContext *s,
794
                            const AVFrame *src, int offset[4],
795
                            int y, int type, int height);
Fabrice Bellard's avatar
Fabrice Bellard committed
796

Fabrice Bellard's avatar
Fabrice Bellard committed
797
    /* audio only */
798
    int sample_rate; ///< samples per sec
Fabrice Bellard's avatar
Fabrice Bellard committed
799
    int channels;
800 801 802 803 804 805

    /**
     * audio sample format.
     * - encoding: set by user.
     * - decoding: set by lavc.
     */
806
    enum SampleFormat sample_fmt;  ///< sample format, currenly unused
Fabrice Bellard's avatar
Fabrice Bellard committed
807 808

    /* the following data should not be initialized */
809
    /**
810
     * samples per packet. initialized when calling 'init'
811 812
     */
    int frame_size;
813 814 815
    int frame_number;   ///< audio or video frame number
    int real_pict_num;  ///< returns the real picture number of previous encoded frame

816
    /**
817
     * number of frames the decoded output will be delayed relative to
818 819 820
     * the encoded input.
     * - encoding: set by lavc.
     * - decoding: unused
821 822
     */
    int delay;
823

824 825
    /* - encoding parameters */
    float qcompress;  ///< amount of qscale change between easy & hard scenes (0.0-1.0)
826 827
    float qblur;      ///< amount of qscale smoothing over time (0.0-1.0)

828
    /**
829 830 831
     * minimum quantizer.
     * - encoding: set by user.
     * - decoding: unused
832 833 834 835
     */
    int qmin;

    /**
836 837 838
     * maximum quantizer.
     * - encoding: set by user.
     * - decoding: unused
839 840 841 842
     */
    int qmax;

    /**