avcodec.h 75.8 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
#define AV_STRINGIFY(s)         AV_TOSTRING(s)
Fabrice Bellard's avatar
Fabrice Bellard committed
18
#define AV_TOSTRING(s) #s
Michael Niedermayer's avatar
Michael Niedermayer committed
19

20
#define LIBAVCODEC_VERSION_INT  ((51<<16)+(11<<8)+0)
21
#define LIBAVCODEC_VERSION      51.11.0
22
#define LIBAVCODEC_BUILD        LIBAVCODEC_VERSION_INT
Michael Niedermayer's avatar
Michael Niedermayer committed
23

24
#define LIBAVCODEC_IDENT        "Lavc" AV_STRINGIFY(LIBAVCODEC_VERSION)
Alex Beregszaszi's avatar
Alex Beregszaszi committed
25

26 27 28
#define AV_NOPTS_VALUE          int64_t_C(0x8000000000000000)
#define AV_TIME_BASE            1000000
#define AV_TIME_BASE_Q          (AVRational){1, AV_TIME_BASE}
29

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

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

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

162 163
    /* AMR */
    CODEC_ID_AMR_NB= 0x12000,
164 165
    CODEC_ID_AMR_WB,

166
    /* RealAudio codecs*/
167
    CODEC_ID_RA_144= 0x13000,
168
    CODEC_ID_RA_288,
169 170

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

176 177 178 179 180 181 182 183 184 185 186 187 188 189 190
    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
191
    CODEC_ID_FLAC,
Roberto Togni's avatar
Roberto Togni committed
192
    CODEC_ID_MP3ADU,
193
    CODEC_ID_MP3ON4,
194
    CODEC_ID_SHORTEN,
Michael Niedermayer's avatar
Michael Niedermayer committed
195
    CODEC_ID_ALAC,
196
    CODEC_ID_WESTWOOD_SND1,
197
    CODEC_ID_GSM,
Roberto Togni's avatar
Roberto Togni committed
198
    CODEC_ID_QDM2,
199
    CODEC_ID_COOK,
200
    CODEC_ID_TRUESPEECH,
201
    CODEC_ID_TTA,
Kostya Shishkov's avatar
Kostya Shishkov committed
202
    CODEC_ID_SMACKAUDIO,
Benjamin Larsson's avatar
Benjamin Larsson committed
203
    CODEC_ID_QCELP,
204

Fabrice Bellard's avatar
Fabrice Bellard committed
205
    /* subtitle codecs */
206 207 208
    CODEC_ID_DVD_SUBTITLE= 0x17000,
    CODEC_ID_DVB_SUBTITLE,

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

/* CODEC_ID_MP3LAME is absolete */
#define CODEC_ID_MP3LAME CODEC_ID_MP3
Fabrice Bellard's avatar
Fabrice Bellard committed
215 216

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

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

Fabrice Bellard's avatar
Fabrice Bellard committed
235
/* in bytes */
236
#define AVCODEC_MAX_AUDIO_FRAME_SIZE 192000 // 1 second of 48khz 32bit audio
Fabrice Bellard's avatar
Fabrice Bellard committed
237

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

247 248 249 250 251 252
/**
 * minimum encoding buffer size.
 * used to avoid some checks during header writing
 */
#define FF_MIN_BUFFER_SIZE 16384

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

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

283
#define FF_MAX_B_FRAMES 16
284

Michael Niedermayer's avatar
Michael Niedermayer committed
285
/* encoding support
286
   these flags can be passed in AVCodecContext.flags before initing
Diego Biurrun's avatar
Diego Biurrun committed
287
   Note: not everything is supported yet.
Michael Niedermayer's avatar
Michael Niedermayer committed
288
*/
Fabrice Bellard's avatar
Fabrice Bellard committed
289

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

341
/* Unsupported options :
342 343 344
 *              Syntax Arithmetic coding (SAC)
 *              Reference Picture Selection
 *              Independant Segment Decoding */
345
/* /Fx */
Fabrice Bellard's avatar
Fabrice Bellard committed
346 347
/* codec capabilities */

348
#define CODEC_CAP_DRAW_HORIZ_BAND 0x0001 ///< decoder can use draw_horiz_band callback
Michael Niedermayer's avatar
Michael Niedermayer committed
349 350 351 352 353
/**
 * Codec uses get_buffer() for allocating buffers.
 * direct rendering method 1
 */
#define CODEC_CAP_DR1             0x0002
354 355 356
/* if 'parse_only' field is true, then avcodec_parse_frame() can be
   used */
#define CODEC_CAP_PARSE_ONLY      0x0004
357
#define CODEC_CAP_TRUNCATED       0x0008
358 359
/* codec can export data for HW decoding (XvMC) */
#define CODEC_CAP_HWACCEL         0x0010
360
/**
361 362 363
 * 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
 */
364
#define CODEC_CAP_DELAY           0x0020
365 366 367 368 369
/**
 * 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
370

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

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

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

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

Michael Niedermayer's avatar
cleanup  
Michael Niedermayer committed
640

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

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

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

/**
 * main external api structure.
 */
Fabrice Bellard's avatar
Fabrice Bellard committed
665
typedef struct AVCodecContext {
666 667 668 669
    /**
     * Info on struct for av_log
     * - set by avcodec_alloc_context
     */
Michael Niedermayer's avatar
Michael Niedermayer committed
670
    AVClass *av_class;
671
    /**
672 673
     * the average bitrate.
     * - encoding: set by user. unused for constant quantizer encoding
674
     * - decoding: set by lavc. 0 or some bitrate if this info is available in the stream
675
     */
Fabrice Bellard's avatar
Fabrice Bellard committed
676
    int bit_rate;
677 678

    /**
679
     * number of bits the bitstream is allowed to diverge from the reference.
680
     *           the reference can be CBR (for CBR pass1) or VBR (for pass2)
681 682
     * - encoding: set by user. unused for constant quantizer encoding
     * - decoding: unused
683
     */
684
    int bit_rate_tolerance;
685 686

    /**
687 688 689
     * CODEC_FLAG_*.
     * - encoding: set by user.
     * - decoding: set by user.
690
     */
Fabrice Bellard's avatar
Fabrice Bellard committed
691
    int flags;
692 693 694

    /**
     * some codecs needs additionnal format info. It is stored here
695
     * - encoding: set by user.
696
     * - decoding: set by lavc. (FIXME is this ok?)
697 698 699 700
     */
    int sub_id;

    /**
701
     * motion estimation algorithm used for video coding.
Robert Swain's avatar
Robert Swain committed
702 703
     * 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]
704 705
     * - encoding: MUST be set by user.
     * - decoding: unused
706 707 708 709
     */
    int me_method;

    /**
710
     * some codecs need / can use extra-data like huffman tables.
711 712
     * mjpeg: huffman tables
     * rv10: additional flags
713
     * mpeg4: global headers (they can be in the bitstream or here)
714 715
     * 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
716
     * the bytewise contents of extradata must not depend on the architecture or cpu endianness
717 718
     * - encoding: set/allocated/freed by lavc.
     * - decoding: set/allocated/freed by user.
719
     */
720 721
    void *extradata;
    int extradata_size;
722

723
    /**
724 725 726 727
     * 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.
728
     * - encoding: MUST be set by user
729
     * - decoding: set by lavc.
730
     */
731
    AVRational time_base;
732

733
    /* video only */
734
    /**
735
     * picture width / height.
736
     * - encoding: MUST be set by user.
737
     * - decoding: set by lavc.
738
     * Note, for compatibility its possible to set this instead of
739
     * coded_width/height before decoding
740
     */
Fabrice Bellard's avatar
Fabrice Bellard committed
741
    int width, height;
742

743
#define FF_ASPECT_EXTENDED 15
744 745

    /**
746 747 748
     * the number of pictures in a group of pitures, or 0 for intra_only.
     * - encoding: set by user.
     * - decoding: unused
749 750 751 752
     */
    int gop_size;

    /**
753
     * pixel format, see PIX_FMT_xxx.
754
     * - encoding: set by user.
755
     * - decoding: set by lavc.
756
     */
757
    enum PixelFormat pix_fmt;
758

759
    /**
760
     * Frame rate emulation. If not zero lower layer (i.e. format handler)
761 762 763 764 765
     * has to read frames at native frame rate.
     * - encoding: set by user.
     * - decoding: unused.
     */
    int rate_emu;
766

767 768 769 770 771
    /**
     * 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
772 773
     * - encoding: unused
     * - decoding: set by user.
774 775 776 777
     * @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
778
     */
Fabrice Bellard's avatar
Fabrice Bellard committed
779
    void (*draw_horiz_band)(struct AVCodecContext *s,
780
                            const AVFrame *src, int offset[4],
781
                            int y, int type, int height);
Fabrice Bellard's avatar
Fabrice Bellard committed
782

Fabrice Bellard's avatar
Fabrice Bellard committed
783
    /* audio only */
784
    int sample_rate; ///< samples per sec
Fabrice Bellard's avatar
Fabrice Bellard committed
785
    int channels;
786 787 788 789 790 791

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

    /* the following data should not be initialized */
795
    /**
796
     * samples per packet. initialized when calling 'init'
797 798
     */
    int frame_size;
799 800 801
    int frame_number;   ///< audio or video frame number
    int real_pict_num;  ///< returns the real picture number of previous encoded frame

802
    /**
803
     * number of frames the decoded output will be delayed relative to
804 805 806
     * the encoded input.
     * - encoding: set by lavc.
     * - decoding: unused
807 808
     */
    int delay;
809

810 811
    /* - encoding parameters */
    float qcompress;  ///< amount of qscale change between easy & hard scenes (0.0-1.0)
812 813
    float qblur;      ///< amount of qscale smoothing over time (0.0-1.0)

814
    /**
815 816 817
     * minimum quantizer.
     * - encoding: set by user.
     * - decoding: unused
818 819 820 821
     */
    int qmin;

    /**
822 823 824
     * maximum quantizer.
     * - encoding: set by user.
     * - decoding: unused
825 826 827 828
     */
    int qmax;

    /**
829 830 831
     * maximum quantizer difference etween frames.
     * - encoding: set by user.
     * - decoding: unused
832 833 834 835
     */
    int max_qdiff;

    /**
836
     * maximum number of b frames between non b frames.
837
     * note: the output will be delayed by max_b_frames+1 relative to the input
838 839
     * - encoding: set by user.
     * - decoding: unused
840 841 842 843
     */
    int max_b_frames;

    /**
844 845 846
     * qscale factor between ip and b frames.
     * - encoding: set by user.
     * - decoding: unused
847 848
     */
    float b_quant_factor;
849

850 851
    /** obsolete FIXME remove */
    int rc_strategy;
Michael Niedermayer's avatar
Michael Niedermayer committed
852 853
#define FF_RC_STRATEGY_XVID 1