avcodec.h 125 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
diego's avatar
diego committed
18
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19 20
 */

21 22
#ifndef AVCODEC_AVCODEC_H
#define AVCODEC_AVCODEC_H
glantau's avatar
glantau committed
23

michaelni's avatar
michaelni committed
24
/**
25
 * @file libavcodec/avcodec.h
diego's avatar
diego committed
26
 * external API header
michaelni's avatar
michaelni committed
27 28
 */

29
#include <errno.h>
30
#include "libavutil/avutil.h"
glantau's avatar
glantau committed
31

32
#define LIBAVCODEC_VERSION_MAJOR 52
pross's avatar
pross committed
33
#define LIBAVCODEC_VERSION_MINOR 50
34
#define LIBAVCODEC_VERSION_MICRO  0
mru's avatar
mru committed
35

36 37 38 39 40 41
#define LIBAVCODEC_VERSION_INT  AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
                                               LIBAVCODEC_VERSION_MINOR, \
                                               LIBAVCODEC_VERSION_MICRO)
#define LIBAVCODEC_VERSION      AV_VERSION(LIBAVCODEC_VERSION_MAJOR,    \
                                           LIBAVCODEC_VERSION_MINOR,    \
                                           LIBAVCODEC_VERSION_MICRO)
42
#define LIBAVCODEC_BUILD        LIBAVCODEC_VERSION_INT
michael's avatar
michael committed
43

44
#define LIBAVCODEC_IDENT        "Lavc" AV_STRINGIFY(LIBAVCODEC_VERSION)
al3x's avatar
al3x 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

michael's avatar
michael committed
50
/**
benoit's avatar
benoit committed
51 52 53 54 55 56
 * Identifies the syntax and semantics of the bitstream.
 * The principle is roughly:
 * Two decoders with the same ID can decode the same streams.
 * Two encoders with the same ID can encode compatible streams.
 * There may be slight deviations from the principle due to implementation
 * details.
michael's avatar
michael committed
57
 *
diego's avatar
diego committed
58 59 60
 * If you add a codec ID to this list, add it so that
 * 1. no value of a existing codec ID changes (that would break ABI),
 * 2. it is as close as possible to similar codecs.
michael's avatar
michael committed
61
 */
glantau's avatar
glantau committed
62
enum CodecID {
63
    CODEC_ID_NONE,
64 65

    /* video codecs */
glantau's avatar
glantau committed
66
    CODEC_ID_MPEG1VIDEO,
67
    CODEC_ID_MPEG2VIDEO, ///< preferred ID for MPEG-1/2 video decoding
iive's avatar
iive committed
68
    CODEC_ID_MPEG2VIDEO_XVMC,
69
    CODEC_ID_H261,
glantau's avatar
glantau committed
70 71
    CODEC_ID_H263,
    CODEC_ID_RV10,
michael's avatar
michael committed
72
    CODEC_ID_RV20,
glantau's avatar
glantau committed
73
    CODEC_ID_MJPEG,
al3x's avatar
al3x committed
74
    CODEC_ID_MJPEGB,
75
    CODEC_ID_LJPEG,
alex's avatar
alex committed
76
    CODEC_ID_SP5X,
77
    CODEC_ID_JPEGLS,
glantau's avatar
glantau committed
78
    CODEC_ID_MPEG4,
glantau's avatar
glantau committed
79
    CODEC_ID_RAWVIDEO,
80 81 82
    CODEC_ID_MSMPEG4V1,
    CODEC_ID_MSMPEG4V2,
    CODEC_ID_MSMPEG4V3,
michaelni's avatar
michaelni committed
83
    CODEC_ID_WMV1,
michaelni's avatar
 
michaelni committed
84
    CODEC_ID_WMV2,
glantau's avatar
glantau committed
85 86
    CODEC_ID_H263P,
    CODEC_ID_H263I,
87
    CODEC_ID_FLV1,
nickols_k's avatar
nickols_k committed
88
    CODEC_ID_SVQ1,
michaelni's avatar
michaelni committed
89
    CODEC_ID_SVQ3,
bellard's avatar
bellard committed
90
    CODEC_ID_DVVIDEO,
michaelni's avatar
michaelni committed
91
    CODEC_ID_HUFFYUV,
92
    CODEC_ID_CYUV,
michaelni's avatar
michaelni committed
93
    CODEC_ID_H264,
tmmm's avatar
tmmm committed
94
    CODEC_ID_INDEO3,
tmmm's avatar
tmmm committed
95
    CODEC_ID_VP3,
96
    CODEC_ID_THEORA,
michaelni's avatar
michaelni committed
97
    CODEC_ID_ASV1,
michaelni's avatar
michaelni committed
98
    CODEC_ID_ASV2,
99
    CODEC_ID_FFV1,
tmmm's avatar
tmmm committed
100
    CODEC_ID_4XM,
michaelni's avatar
michaelni committed
101
    CODEC_ID_VCR1,
al3x's avatar
al3x committed
102
    CODEC_ID_CLJR,
103
    CODEC_ID_MDEC,
104 105
    CODEC_ID_ROQ,
    CODEC_ID_INTERPLAY_VIDEO,
106 107
    CODEC_ID_XAN_WC3,
    CODEC_ID_XAN_WC4,
108 109 110 111 112
    CODEC_ID_RPZA,
    CODEC_ID_CINEPAK,
    CODEC_ID_WS_VQA,
    CODEC_ID_MSRLE,
    CODEC_ID_MSVIDEO1,
tmmm's avatar
tmmm committed
113
    CODEC_ID_IDCIN,
rtognimp's avatar
rtognimp committed
114
    CODEC_ID_8BPS,
115
    CODEC_ID_SMC,
melanson's avatar
melanson committed
116
    CODEC_ID_FLIC,
117
    CODEC_ID_TRUEMOTION1,
118
    CODEC_ID_VMDVIDEO,
rtognimp's avatar
rtognimp committed
119 120
    CODEC_ID_MSZH,
    CODEC_ID_ZLIB,
121
    CODEC_ID_QTRLE,
michael's avatar
michael committed
122
    CODEC_ID_SNOW,
123
    CODEC_ID_TSCC,
124
    CODEC_ID_ULTI,
125
    CODEC_ID_QDRAW,
126
    CODEC_ID_VIXL,
127
    CODEC_ID_QPEG,
128 129 130 131 132 133 134
    CODEC_ID_XVID,
    CODEC_ID_PNG,
    CODEC_ID_PPM,
    CODEC_ID_PBM,
    CODEC_ID_PGM,
    CODEC_ID_PGMYUV,
    CODEC_ID_PAM,
lorenm's avatar
lorenm committed
135
    CODEC_ID_FFVHUFF,
michael's avatar
michael committed
136 137
    CODEC_ID_RV30,
    CODEC_ID_RV40,
138
    CODEC_ID_VC1,
139
    CODEC_ID_WMV3,
140
    CODEC_ID_LOCO,
141
    CODEC_ID_WNV1,
142
    CODEC_ID_AASC,
143
    CODEC_ID_INDEO2,
144
    CODEC_ID_FRAPS,
145
    CODEC_ID_TRUEMOTION2,
mru's avatar
mru committed
146
    CODEC_ID_BMP,
147
    CODEC_ID_CSCD,
148
    CODEC_ID_MMVIDEO,
149
    CODEC_ID_ZMBV,
150
    CODEC_ID_AVS,
kostya's avatar
kostya committed
151
    CODEC_ID_SMACKVIDEO,
152
    CODEC_ID_NUV,
153
    CODEC_ID_KMVC,
154
    CODEC_ID_FLASHSV,
155
    CODEC_ID_CAVS,
156
    CODEC_ID_JPEG2000,
kostya's avatar
kostya committed
157
    CODEC_ID_VMNC,
aurel's avatar
aurel committed
158 159 160
    CODEC_ID_VP5,
    CODEC_ID_VP6,
    CODEC_ID_VP6F,
kostya's avatar
kostya committed
161
    CODEC_ID_TARGA,
162
    CODEC_ID_DSICINVIDEO,
163
    CODEC_ID_TIERTEXSEQVIDEO,
kostya's avatar
kostya committed
164
    CODEC_ID_TIFF,
165
    CODEC_ID_GIF,
166
    CODEC_ID_FFH264,
kostya's avatar
kostya committed
167
    CODEC_ID_DXA,
bcoudurier's avatar
bcoudurier committed
168
    CODEC_ID_DNXHD,
169
    CODEC_ID_THP,
170
    CODEC_ID_SGI,
171
    CODEC_ID_C93,
172
    CODEC_ID_BETHSOFTVID,
ivo's avatar
ivo committed
173
    CODEC_ID_PTX,
ivo's avatar
ivo committed
174
    CODEC_ID_TXD,
175
    CODEC_ID_VP6A,
vitor's avatar
vitor committed
176
    CODEC_ID_AMV,
177
    CODEC_ID_VB,
ivo's avatar
ivo committed
178
    CODEC_ID_PCX,
ivo's avatar
ivo committed
179
    CODEC_ID_SUNRAST,
180 181
    CODEC_ID_INDEO4,
    CODEC_ID_INDEO5,
ramiro's avatar
ramiro committed
182
    CODEC_ID_MIMIC,
faust3's avatar
faust3 committed
183
    CODEC_ID_RL2,
vitor's avatar
vitor committed
184 185
    CODEC_ID_8SVX_EXP,
    CODEC_ID_8SVX_FIB,
superdump's avatar
superdump committed
186
    CODEC_ID_ESCAPE124,
michael's avatar
michael committed
187
    CODEC_ID_DIRAC,
vitor's avatar
vitor committed
188
    CODEC_ID_BFI,
pross's avatar
pross committed
189
    CODEC_ID_CMV,
ramiro's avatar
ramiro committed
190
    CODEC_ID_MOTIONPIXELS,
pross's avatar
pross committed
191
    CODEC_ID_TGV,
pross's avatar
pross committed
192
    CODEC_ID_TGQ,
pross's avatar
pross committed
193
    CODEC_ID_TQI,
194 195
    CODEC_ID_AURA,
    CODEC_ID_AURA2,
196
    CODEC_ID_V210X,
stefano's avatar
stefano committed
197
    CODEC_ID_TMV,
198
    CODEC_ID_V210,
199
    CODEC_ID_DPX,
pross's avatar
pross committed
200
    CODEC_ID_MAD,
201
    CODEC_ID_FRWU,
202
    CODEC_ID_FLASHSV2,
vitor's avatar
vitor committed
203
    CODEC_ID_CDGRAPHICS,
204
    CODEC_ID_R210,
pross's avatar
pross committed
205
    CODEC_ID_ANM,
daniel's avatar
daniel committed
206
    CODEC_ID_BINKVIDEO,
glantau's avatar
glantau committed
207

diego's avatar
diego committed
208
    /* various PCM "codecs" */
209
    CODEC_ID_PCM_S16LE= 0x10000,
glantau's avatar
glantau committed
210 211 212 213 214 215 216
    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,
217 218 219 220 221 222 223 224 225
    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,
226
    CODEC_ID_PCM_ZORK,
227
    CODEC_ID_PCM_S16LE_PLANAR,
228
    CODEC_ID_PCM_DVD,
229
    CODEC_ID_PCM_F32BE,
230 231 232
    CODEC_ID_PCM_F32LE,
    CODEC_ID_PCM_F64BE,
    CODEC_ID_PCM_F64LE,
233
    CODEC_ID_PCM_BLURAY,
234

diego's avatar
diego committed
235
    /* various ADPCM codecs */
236
    CODEC_ID_ADPCM_IMA_QT= 0x11000,
237
    CODEC_ID_ADPCM_IMA_WAV,
238 239
    CODEC_ID_ADPCM_IMA_DK3,
    CODEC_ID_ADPCM_IMA_DK4,
240
    CODEC_ID_ADPCM_IMA_WS,
241
    CODEC_ID_ADPCM_IMA_SMJPEG,
242
    CODEC_ID_ADPCM_MS,
tmmm's avatar
tmmm committed
243
    CODEC_ID_ADPCM_4XM,
244 245
    CODEC_ID_ADPCM_XA,
    CODEC_ID_ADPCM_ADX,
246
    CODEC_ID_ADPCM_EA,
romansh's avatar
 
romansh committed
247
    CODEC_ID_ADPCM_G726,
248
    CODEC_ID_ADPCM_CT,
249
    CODEC_ID_ADPCM_SWF,
250
    CODEC_ID_ADPCM_YAMAHA,
251 252 253
    CODEC_ID_ADPCM_SBPRO_4,
    CODEC_ID_ADPCM_SBPRO_3,
    CODEC_ID_ADPCM_SBPRO_2,
254
    CODEC_ID_ADPCM_THP,
vitor's avatar
vitor committed
255
    CODEC_ID_ADPCM_IMA_AMV,
aurel's avatar
aurel committed
256 257 258
    CODEC_ID_ADPCM_EA_R1,
    CODEC_ID_ADPCM_EA_R3,
    CODEC_ID_ADPCM_EA_R2,
aurel's avatar
aurel committed
259
    CODEC_ID_ADPCM_IMA_EA_SEAD,
aurel's avatar
aurel committed
260
    CODEC_ID_ADPCM_IMA_EA_EACS,
261
    CODEC_ID_ADPCM_EA_XAS,
benoit's avatar
benoit committed
262
    CODEC_ID_ADPCM_EA_MAXIS_XA,
263
    CODEC_ID_ADPCM_IMA_ISS,
264

265 266
    /* AMR */
    CODEC_ID_AMR_NB= 0x12000,
267 268
    CODEC_ID_AMR_WB,

269
    /* RealAudio codecs*/
270
    CODEC_ID_RA_144= 0x13000,
271
    CODEC_ID_RA_288,
272 273

    /* various DPCM codecs */
274
    CODEC_ID_ROQ_DPCM= 0x14000,
275
    CODEC_ID_INTERPLAY_DPCM,
276
    CODEC_ID_XAN_DPCM,
277
    CODEC_ID_SOL_DPCM,
278

279
    /* audio codecs */
280
    CODEC_ID_MP2= 0x15000,
281
    CODEC_ID_MP3, ///< preferred ID for decoding MPEG audio layer 1, 2 or 3
282 283 284 285 286 287 288 289 290 291 292 293
    CODEC_ID_AAC,
    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's avatar
michael committed
294
    CODEC_ID_FLAC,
rtognimp's avatar
rtognimp committed
295
    CODEC_ID_MP3ADU,
296
    CODEC_ID_MP3ON4,
297
    CODEC_ID_SHORTEN,
michael's avatar
michael committed
298
    CODEC_ID_ALAC,
299
    CODEC_ID_WESTWOOD_SND1,
300
    CODEC_ID_GSM, ///< as in Berlin toast format
rtognimp's avatar
rtognimp committed
301
    CODEC_ID_QDM2,
302
    CODEC_ID_COOK,
303
    CODEC_ID_TRUESPEECH,
304
    CODEC_ID_TTA,
kostya's avatar
kostya committed
305
    CODEC_ID_SMACKAUDIO,
banan's avatar
banan committed
306
    CODEC_ID_QCELP,
kostya's avatar
kostya committed
307
    CODEC_ID_WAVPACK,
308
    CODEC_ID_DSICINAUDIO,
kostya's avatar
kostya committed
309
    CODEC_ID_IMC,
kostya's avatar
kostya committed
310
    CODEC_ID_MUSEPACK7,
311
    CODEC_ID_MLP,
diego's avatar
diego committed
312
    CODEC_ID_GSM_MS, /* as found in WAV */
banan's avatar
banan committed
313
    CODEC_ID_ATRAC3,
michael's avatar
michael committed
314
    CODEC_ID_VOXWARE,
kostya's avatar
kostya committed
315
    CODEC_ID_APE,
banan's avatar
banan committed
316
    CODEC_ID_NELLYMOSER,
kostya's avatar
kostya committed
317
    CODEC_ID_MUSEPACK8,
reimar's avatar
reimar committed
318
    CODEC_ID_SPEEX,
319 320
    CODEC_ID_WMAVOICE,
    CODEC_ID_WMAPRO,
321
    CODEC_ID_WMALOSSLESS,
banan's avatar
banan committed
322
    CODEC_ID_ATRAC3P,
jbr's avatar
jbr committed
323
    CODEC_ID_EAC3,
324
    CODEC_ID_SIPR,
michael's avatar
michael committed
325
    CODEC_ID_MP1,
vitor's avatar
vitor committed
326
    CODEC_ID_TWINVQ,
ramiro's avatar
ramiro committed
327
    CODEC_ID_TRUEHD,
328
    CODEC_ID_MP4ALS,
banan's avatar
banan committed
329
    CODEC_ID_ATRAC1,
daniel's avatar
daniel committed
330 331
    CODEC_ID_BINKAUDIO_RDFT,
    CODEC_ID_BINKAUDIO_DCT,
332

bellard's avatar
bellard committed
333
    /* subtitle codecs */
334 335
    CODEC_ID_DVD_SUBTITLE= 0x17000,
    CODEC_ID_DVB_SUBTITLE,
336
    CODEC_ID_TEXT,  ///< raw UTF-8 text
337
    CODEC_ID_XSUB,
338
    CODEC_ID_SSA,
339
    CODEC_ID_MOV_TEXT,
cehoyos's avatar
cehoyos committed
340
    CODEC_ID_HDMV_PGS_SUBTITLE,
341
    CODEC_ID_DVB_TELETEXT,
342

diego's avatar
diego committed
343
    /* other specific kind of codecs (generally used for attachments) */
344 345
    CODEC_ID_TTF= 0x18000,

michael's avatar
michael committed
346 347
    CODEC_ID_PROBE= 0x19000, ///< codec_id is not known (like CODEC_ID_NONE) but lavf should attempt to identify it

348
    CODEC_ID_MPEG2TS= 0x20000, /**< _FAKE_ codec to indicate a raw MPEG-2 TS
diego's avatar
diego committed
349
                                * stream (only used by libavformat) */
glantau's avatar
glantau committed
350
};
351

glantau's avatar
glantau committed
352
enum CodecType {
353
    CODEC_TYPE_UNKNOWN = -1,
glantau's avatar
glantau committed
354 355
    CODEC_TYPE_VIDEO,
    CODEC_TYPE_AUDIO,
356
    CODEC_TYPE_DATA,
bellard's avatar
bellard committed
357
    CODEC_TYPE_SUBTITLE,
358
    CODEC_TYPE_ATTACHMENT,
359
    CODEC_TYPE_NB
glantau's avatar
glantau committed
360 361
};

362 363 364
/**
 * all in native-endian format
 */
glantau's avatar
glantau committed
365
enum SampleFormat {
mru's avatar
mru committed
366
    SAMPLE_FMT_NONE = -1,
367 368
    SAMPLE_FMT_U8,              ///< unsigned 8 bits
    SAMPLE_FMT_S16,             ///< signed 16 bits
369
    SAMPLE_FMT_S32,             ///< signed 32 bits
370
    SAMPLE_FMT_FLT,             ///< float
pross's avatar
pross committed
371
    SAMPLE_FMT_DBL,             ///< double
372
    SAMPLE_FMT_NB               ///< Number of sample formats. DO NOT USE if dynamically linking to libavcodec
glantau's avatar
glantau committed
373 374
};

375
/* Audio channel masks */
376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395
#define CH_FRONT_LEFT             0x00000001
#define CH_FRONT_RIGHT            0x00000002
#define CH_FRONT_CENTER           0x00000004
#define CH_LOW_FREQUENCY          0x00000008
#define CH_BACK_LEFT              0x00000010
#define CH_BACK_RIGHT             0x00000020
#define CH_FRONT_LEFT_OF_CENTER   0x00000040
#define CH_FRONT_RIGHT_OF_CENTER  0x00000080
#define CH_BACK_CENTER            0x00000100
#define CH_SIDE_LEFT              0x00000200
#define CH_SIDE_RIGHT             0x00000400
#define CH_TOP_CENTER             0x00000800
#define CH_TOP_FRONT_LEFT         0x00001000
#define CH_TOP_FRONT_CENTER       0x00002000
#define CH_TOP_FRONT_RIGHT        0x00004000
#define CH_TOP_BACK_LEFT          0x00008000
#define CH_TOP_BACK_CENTER        0x00010000
#define CH_TOP_BACK_RIGHT         0x00020000
#define CH_STEREO_LEFT            0x20000000  ///< Stereo downmix.
#define CH_STEREO_RIGHT           0x40000000  ///< See CH_STEREO_LEFT.
396

397 398 399 400 401
/** Channel mask value used for AVCodecContext.request_channel_layout
    to indicate that the user requests the channel order of the decoder output
    to be the native codec channel order. */
#define CH_LAYOUT_NATIVE          0x8000000000000000LL

402
/* Audio channel convenience macros */
403 404
#define CH_LAYOUT_MONO              (CH_FRONT_CENTER)
#define CH_LAYOUT_STEREO            (CH_FRONT_LEFT|CH_FRONT_RIGHT)
405
#define CH_LAYOUT_2_1               (CH_LAYOUT_STEREO|CH_BACK_CENTER)
406
#define CH_LAYOUT_SURROUND          (CH_LAYOUT_STEREO|CH_FRONT_CENTER)
407 408
#define CH_LAYOUT_4POINT0           (CH_LAYOUT_SURROUND|CH_BACK_CENTER)
#define CH_LAYOUT_2_2               (CH_LAYOUT_STEREO|CH_SIDE_LEFT|CH_SIDE_RIGHT)
409 410 411
#define CH_LAYOUT_QUAD              (CH_LAYOUT_STEREO|CH_BACK_LEFT|CH_BACK_RIGHT)
#define CH_LAYOUT_5POINT0           (CH_LAYOUT_SURROUND|CH_SIDE_LEFT|CH_SIDE_RIGHT)
#define CH_LAYOUT_5POINT1           (CH_LAYOUT_5POINT0|CH_LOW_FREQUENCY)
412 413
#define CH_LAYOUT_5POINT0_BACK      (CH_LAYOUT_SURROUND|CH_BACK_LEFT|CH_BACK_RIGHT)
#define CH_LAYOUT_5POINT1_BACK      (CH_LAYOUT_5POINT0_BACK|CH_LOW_FREQUENCY)
414
#define CH_LAYOUT_7POINT0           (CH_LAYOUT_5POINT0|CH_BACK_LEFT|CH_BACK_RIGHT)
415
#define CH_LAYOUT_7POINT1           (CH_LAYOUT_5POINT1|CH_BACK_LEFT|CH_BACK_RIGHT)
416
#define CH_LAYOUT_7POINT1_WIDE      (CH_LAYOUT_5POINT1_BACK|\
417 418
                                          CH_FRONT_LEFT_OF_CENTER|CH_FRONT_RIGHT_OF_CENTER)
#define CH_LAYOUT_STEREO_DOWNMIX    (CH_STEREO_LEFT|CH_STEREO_RIGHT)
419

glantau's avatar
glantau committed
420
/* in bytes */
421
#define AVCODEC_MAX_AUDIO_FRAME_SIZE 192000 // 1 second of 48khz 32bit audio
glantau's avatar
glantau committed
422

423
/**
424
 * Required number of additionally allocated bytes at the end of the input bitstream for decoding.
diego's avatar
diego committed
425 426 427 428
 * This is mainly needed because some optimized bitstream readers read
 * 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.
429 430 431
 */
#define FF_INPUT_BUFFER_PADDING_SIZE 8

432
/**
diego's avatar
diego committed
433 434
 * minimum encoding buffer size
 * Used to avoid some checks during header writing.
435 436 437
 */
#define FF_MIN_BUFFER_SIZE 16384

michael's avatar
michael committed
438

439
/**
440
 * motion estimation type.
441
 */
442
enum Motion_Est_ID {
michael's avatar
michael committed
443
    ME_ZERO = 1,    ///< no search, that is use 0,0 vector whenever one is needed
444 445 446
    ME_FULL,
    ME_LOG,
    ME_PHODS,
michael's avatar
michael committed
447 448 449 450 451
    ME_EPZS,        ///< enhanced predictive zonal search
    ME_X1,          ///< reserved for experiments
    ME_HEX,         ///< hexagon based search
    ME_UMH,         ///< uneven multi-hexagon search
    ME_ITER,        ///< iterative search
lorenm's avatar
lorenm committed
452
    ME_TESA,        ///< transformed exhaustive search algorithm
453 454
};

michael's avatar
michael committed
455
enum AVDiscard{
diego's avatar
diego committed
456 457
    /* We leave some space between them for extensions (drop some
     * keyframes for intra-only or drop just some bidir frames). */
michael's avatar
michael committed
458 459 460 461 462 463 464 465
    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
};

466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502
enum AVColorPrimaries{
    AVCOL_PRI_BT709      =1, ///< also ITU-R BT1361 / IEC 61966-2-4 / SMPTE RP177 Annex B
    AVCOL_PRI_UNSPECIFIED=2,
    AVCOL_PRI_BT470M     =4,
    AVCOL_PRI_BT470BG    =5, ///< also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM
    AVCOL_PRI_SMPTE170M  =6, ///< also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC
    AVCOL_PRI_SMPTE240M  =7, ///< functionally identical to above
    AVCOL_PRI_FILM       =8,
    AVCOL_PRI_NB           , ///< Not part of ABI
};

enum AVColorTransferCharacteristic{
    AVCOL_TRC_BT709      =1, ///< also ITU-R BT1361
    AVCOL_TRC_UNSPECIFIED=2,
    AVCOL_TRC_GAMMA22    =4, ///< also ITU-R BT470M / ITU-R BT1700 625 PAL & SECAM
    AVCOL_TRC_GAMMA28    =5, ///< also ITU-R BT470BG
    AVCOL_TRC_NB           , ///< Not part of ABI
};

enum AVColorSpace{
    AVCOL_SPC_RGB        =0,
    AVCOL_SPC_BT709      =1, ///< also ITU-R BT1361 / IEC 61966-2-4 xvYCC709 / SMPTE RP177 Annex B
    AVCOL_SPC_UNSPECIFIED=2,
    AVCOL_SPC_FCC        =4,
    AVCOL_SPC_BT470BG    =5, ///< also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM / IEC 61966-2-4 xvYCC601
    AVCOL_SPC_SMPTE170M  =6, ///< also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC / functionally identical to above
    AVCOL_SPC_SMPTE240M  =7,
    AVCOL_SPC_NB           , ///< Not part of ABI
};

enum AVColorRange{
    AVCOL_RANGE_UNSPECIFIED=0,
    AVCOL_RANGE_MPEG       =1, ///< the normal 219*2^(n-8) "MPEG" YUV ranges
    AVCOL_RANGE_JPEG       =2, ///< the normal     2^n-1   "JPEG" YUV ranges
    AVCOL_RANGE_NB           , ///< Not part of ABI
};

503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518
/**
 *  X   X      3 4 X      X are luma samples,
 *             1 2        1-6 are possible chroma positions
 *  X   X      5 6 X      0 is undefined/unknown position
 */
enum AVChromaLocation{
    AVCHROMA_LOC_UNSPECIFIED=0,
    AVCHROMA_LOC_LEFT       =1, ///< mpeg2/4, h264 default
    AVCHROMA_LOC_CENTER     =2, ///< mpeg1, jpeg, h263
    AVCHROMA_LOC_TOPLEFT    =3, ///< DV
    AVCHROMA_LOC_TOP        =4,
    AVCHROMA_LOC_BOTTOMLEFT =5,
    AVCHROMA_LOC_BOTTOM     =6,
    AVCHROMA_LOC_NB           , ///< Not part of ABI
};

michaelni's avatar
michaelni committed
519 520 521
typedef struct RcOverride{
    int start_frame;
    int end_frame;
diego's avatar
diego committed
522
    int qscale; // If this is 0 then quality_factor will be used instead.
michaelni's avatar
michaelni committed
523 524 525
    float quality_factor;
} RcOverride;

526
#define FF_MAX_B_FRAMES 16
527

michaelni's avatar
michaelni committed
528
/* encoding support
diego's avatar
diego committed
529 530
   These flags can be passed in AVCodecContext.flags before initialization.
   Note: Not everything is supported yet.
michaelni's avatar
michaelni committed
531
*/
glantau's avatar
glantau committed
532

diego's avatar
diego committed
533 534 535 536 537 538
#define CODEC_FLAG_QSCALE 0x0002  ///< Use fixed qscale.
#define CODEC_FLAG_4MV    0x0004  ///< 4 MV per MB allowed / advanced prediction for H.263.
#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.
michael's avatar
michael committed
539 540
/**
 * The parent program guarantees that the input for B-frames containing
diego's avatar
diego committed
541
 * streams is not written to for at least s->max_b_frames+1 frames, if
michael's avatar
michael committed
542 543
 * this is not set the input will be copied.
 */
michaelni's avatar
michaelni committed
544
#define CODEC_FLAG_INPUT_PRESERVED 0x0100
diego's avatar
diego committed
545 546 547 548 549 550 551 552
#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.
#define CODEC_FLAG_EMU_EDGE        0x4000   ///< Don't draw edges.
#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 of only at frame boundaries. */
diego's avatar
diego committed
553 554 555 556 557 558
#define CODEC_FLAG_NORMALIZE_AQP  0x00020000 ///< Normalize adaptive quantization.
#define CODEC_FLAG_INTERLACED_DCT 0x00040000 ///< Use interlaced DCT.
#define CODEC_FLAG_LOW_DELAY      0x00080000 ///< Force low delay.
#define CODEC_FLAG_ALT_SCAN       0x00100000 ///< Use alternate scan.
#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).
559
/* Fx : Flag for h263+ extra options */
diego's avatar
diego committed
560 561 562 563 564
#define CODEC_FLAG_AC_PRED        0x01000000 ///< H.263 advanced intra coding / MPEG-4 AC prediction
#define CODEC_FLAG_H263P_UMV      0x02000000 ///< unlimited motion vector
#define CODEC_FLAG_CBP_RD         0x04000000 ///< Use rate distortion optimization for cbp.
#define CODEC_FLAG_QP_RD          0x08000000 ///< Use rate distortion optimization for qp selectioon.
#define CODEC_FLAG_H263P_AIV      0x00000008 ///< H.263 alternative inter VLC
michael's avatar
michael committed
565 566
#define CODEC_FLAG_OBMC           0x00000001 ///< OBMC
#define CODEC_FLAG_LOOP_FILTER    0x00000800 ///< loop filter
michael's avatar
michael committed
567 568
#define CODEC_FLAG_H263P_SLICE_STRUCT 0x10000000
#define CODEC_FLAG_INTERLACED_ME  0x20000000 ///< interlaced motion estimation
diego's avatar
diego committed
569
#define CODEC_FLAG_SVCD_SCAN_OFFSET 0x40000000 ///< Will reserve space for SVCD scan offset user data.
michael's avatar
michael committed
570
#define CODEC_FLAG_CLOSED_GOP     0x80000000
diego's avatar
diego committed
571 572 573 574 575 576
#define CODEC_FLAG2_FAST          0x00000001 ///< Allow non spec compliant speedup tricks.
#define CODEC_FLAG2_STRICT_GOP    0x00000002 ///< Strictly enforce GOP size.
#define CODEC_FLAG2_NO_OUTPUT     0x00000004 ///< Skip bitstream encoding.
#define CODEC_FLAG2_LOCAL_HEADER  0x00000008 ///< Place global headers at every keyframe instead of in extradata.
#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
577
#define CODEC_FLAG2_MIXED_REFS    0x00000040 ///< H.264 one reference per partition, as opposed to one reference per macroblock
lorenm's avatar
lorenm committed
578 579 580
#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
diego's avatar
diego committed
581 582 583 584 585 586 587
#define CODEC_FLAG2_BRDO          0x00000400 ///< B-frame rate-distortion optimization
#define CODEC_FLAG2_INTRA_VLC     0x00000800 ///< Use MPEG-2 intra VLC table.
#define CODEC_FLAG2_MEMC_ONLY     0x00001000 ///< Only do ME/MC (I frames -> ref, P frame -> ME+MC).
#define CODEC_FLAG2_DROP_FRAME_TIMECODE 0x00002000 ///< timecode is in drop frame format.
#define CODEC_FLAG2_SKIP_RD       0x00004000 ///< RD optimal MB level residual skipping
#define CODEC_FLAG2_CHUNKS        0x00008000 ///< Input bitstream might be truncated at a packet boundaries instead of only at frame boundaries.
#define CODEC_FLAG2_NON_LINEAR_QUANT 0x00010000 ///< Use MPEG-2 nonlinear quantizer.
588
#define CODEC_FLAG2_BIT_RESERVOIR 0x00020000 ///< Use a bit reservoir when encoding if possible
darkshikari's avatar
darkshikari committed
589
#define CODEC_FLAG2_MBTREE        0x00040000 ///< Use macroblock tree ratecontrol (x264 only)
590

591
/* Unsupported options :
592 593
 *              Syntax Arithmetic coding (SAC)
 *              Reference Picture Selection
594
 *              Independent Segment Decoding */
595
/* /Fx */
glantau's avatar
glantau committed
596 597
/* codec capabilities */

diego's avatar
diego committed
598
#define CODEC_CAP_DRAW_HORIZ_BAND 0x0001 ///< Decoder can use draw_horiz_band callback.
michaelni's avatar
michaelni committed
599 600 601 602 603
/**
 * Codec uses get_buffer() for allocating buffers.
 * direct rendering method 1
 */
#define CODEC_CAP_DR1             0x0002
diego's avatar
diego committed
604
/* If 'parse_only' field is true, then avcodec_parse_frame() can be used. */
605
#define CODEC_CAP_PARSE_ONLY      0x0004
606
#define CODEC_CAP_TRUNCATED       0x0008
diego's avatar
diego committed
607
/* Codec can export data for HW decoding (XvMC). */
608
#define CODEC_CAP_HWACCEL         0x0010
609
/**
diego's avatar
diego committed
610 611
 * Codec has a nonzero delay and needs to be fed with NULL at the end to get the delayed data.
 * If this is not set, the codec is guaranteed to never be fed with NULL data.
612
 */
613
#define CODEC_CAP_DELAY           0x0020
614 615 616 617 618
/**
 * 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
619 620 621 622
/**
 * Codec can export data for HW decoding (VDPAU).
 */
#define CODEC_CAP_HWACCEL_VDPAU    0x0080
623 624
/**
 * Codec can output multiple frames per AVPacket
michael's avatar
michael committed
625 626 627 628 629 630 631 632
 * Normally demuxers return one frame at a time, demuxers which do not do
 * are connected to a parser to split what they return into proper frames.
 * This flag is reserved to the very rare category of codecs which have a
 * bitstream that cannot be split into frames without timeconsuming
 * operations like full decoding. Demuxers carring such bitstreams thus
 * may return multiple frames in a packet. This has many disadvantages like
 * prohibiting stream copy in many cases thus it should only be considered
 * as a last resort.
633 634
 */
#define CODEC_CAP_SUBFRAMES        0x0100
glantau's avatar
glantau committed
635

diego's avatar
diego committed
636
//The following defines may change, don't expect compatibility if you use them.
637
#define MB_TYPE_INTRA4x4   0x0001
diego's avatar
diego committed
638 639
#define MB_TYPE_INTRA16x16 0x0002 //FIXME H.264-specific
#define MB_TYPE_INTRA_PCM  0x0004 //FIXME H.264-specific
640 641 642 643 644
#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
diego's avatar
diego committed
645
#define MB_TYPE_DIRECT2    0x0100 //FIXME
646 647 648 649 650 651 652 653 654 655 656 657 658 659
#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, ...)

660 661
/**
 * Pan Scan area.
diego's avatar
diego committed
662 663
 * This specifies the area which should be displayed.
 * Note there may be multiple such areas for one frame.
664 665 666
 */
typedef struct AVPanScan{
    /**
diego's avatar
diego committed
667 668 669
     * id
     * - encoding: Set by user.
     * - decoding: Set by libavcodec.
670 671 672 673 674
     */
    int id;

    /**
     * width and height in 1/16 pel
diego's avatar
diego committed
675 676
     * - encoding: Set by user.
     * - decoding: Set by libavcodec.
677 678 679 680 681
     */
    int width;
    int height;

    /**
diego's avatar
diego committed
682 683 684
     * position of the top left corner in 1/16 pel for up to 3 fields/frames
     * - encoding: Set by user.
     * - decoding: Set by libavcodec.
685 686 687 688
     */
    int16_t position[3][2];
}AVPanScan;

michaelni's avatar
michaelni committed
689
#define FF_COMMON_FRAME \
michaelni's avatar
michaelni committed
690 691
    /**\
     * pointer to the picture planes.\
diego's avatar
diego committed
692
     * This might be different from the first allocated byte\
michaelni's avatar
michaelni committed
693 694 695
     * - encoding: \
     * - decoding: \
     */\
michaelni's avatar
michaelni committed
696 697 698
    uint8_t *data[4];\
    int linesize[4];\
    /**\
diego's avatar
diego committed
699 700
     * pointer to the first allocated byte of the picture. Can be used in get_buffer/release_buffer.\
     * This isn't used by libavcodec unless the default get/release_buffer() is used.\
701 702
     * - encoding: \
     * - decoding: \
michaelni's avatar
michaelni committed
703 704 705 706
     */\
    uint8_t *base[4];\
    /**\
     * 1 -> keyframe, 0-> not\
diego's avatar
diego committed
707 708
     * - encoding: Set by libavcodec.\
     * - decoding: Set by libavcodec.\
michaelni's avatar
michaelni committed
709 710 711 712
     */\
    int key_frame;\
\
    /**\
diego's avatar
diego committed
713 714 715
     * Picture type of the frame, see ?_TYPE below.\
     * - encoding: Set by libavcodec. for coded_picture (and set by user for input).\
     * - decoding: Set by libavcodec.\
michaelni's avatar
michaelni committed
716 717 718 719
     */\
    int pict_type;\
\
    /**\
michael's avatar
michael committed
720
     * presentation timestamp in time_base units (time when frame should be shown to user)\
diego's avatar
diego committed
721 722 723
     * If AV_NOPTS_VALUE then frame_rate = 1/time_base will be assumed.\
     * - encoding: MUST be set by user.\
     * - decoding: Set by libavcodec.\
michaelni's avatar
michaelni committed
724
     */\
725
    int64_t pts;\
michaelni's avatar
michaelni committed
726 727
\
    /**\
diego's avatar
diego committed
728
     * picture number in bitstream order\
729
     * - encoding: set by\
diego's avatar
diego committed
730
     * - decoding: Set by libavcodec.\
michaelni's avatar
michaelni committed
731 732 733
     */\
    int coded_picture_number;\
    /**\
diego's avatar
diego committed
734
     * picture number in display order\
735
     * - encoding: set by\
diego's avatar
diego committed
736
     * - decoding: Set by libavcodec.\
michaelni's avatar
michaelni committed
737 738 739 740
     */\
    int display_picture_number;\
\
    /**\
741
     * quality (between 1 (good) and FF_LAMBDA_MAX (bad)) \
diego's avatar
diego committed
742 743
     * - encoding: Set by libavcodec. for coded_picture (and set by user for input).\
     * - decoding: Set by libavcodec.\
michaelni's avatar
michaelni committed
744
     */\
745
    int quality; \
michaelni's avatar
michaelni committed
746 747 748
\
    /**\
     * buffer age (1->was last buffer and dint change, 2->..., ...).\
diego's avatar
diego committed
749
     * Set to INT_MAX if the buffer has not been used yet.\
750
     * - encoding: unused\
diego's avatar
diego committed
751
     * - decoding: MUST be set by get_buffer().\
michaelni's avatar
michaelni committed
752 753 754 755 756
     */\
    int age;\
\
    /**\
     * is this picture used as reference\
757 758
     * The values for this are the same as the MpegEncContext.picture_structure\
     * variable, that is 1->top field, 2->bottom field, 3->frame/both fields.\
759
     * Set to 4 for delayed, non-reference frames.\
760
     * - encoding: unused\
diego's avatar
diego committed
761
     * - decoding: Set by libavcodec. (before get_buffer() call)).\
michaelni's avatar
michaelni committed
762 763 764 765 766
     */\
    int reference;\
\
    /**\
     * QP table\
767
     * - encoding: unused\
diego's avatar
diego committed
768
     * - decoding: Set by libavcodec.\
michaelni's avatar
michaelni committed
769 770 771 772
     */\
    int8_t *qscale_table;\
    /**\
     * QP store stride\
773
     * - encoding: unused\
diego's avatar
diego committed
774
     * - decoding: Set by libavcodec.\
michaelni's avatar
michaelni committed
775 776 777 778
     */\
    int qstride;\
\
    /**\
diego's avatar
diego committed
779
     * mbskip_table[mb]>=1 if MB didn't change\
michaelni's avatar
michaelni committed
780
     * stride= mb_width = (width+15)>>4\
781
     * - encoding: unused\
diego's avatar
diego committed
782
     * - decoding: Set by libavcodec.\
michaelni's avatar
michaelni committed
783 784
     */\
    uint8_t *mbskip_table;\
785 786
\
    /**\
diego's avatar
diego committed
787
     * motion vector table\
michael's avatar
michael committed
788 789 790 791 792 793 794
     * @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\
diego's avatar
diego committed
795 796
     * - encoding: Set by user.\
     * - decoding: Set by libavcodec.\
797 798 799 800
     */\
    int16_t (*motion_val[2])[2];\
\
    /**\
diego's avatar
diego committed
801
     * macroblock type table\
802
     * mb_type_base + mb_width + 2\
diego's avatar
diego committed
803 804
     * - encoding: Set by user.\
     * - decoding: Set by libavcodec.\
805 806 807 808
     */\
    uint32_t *mb_type;\
\
    /**\
michael's avatar
michael committed
809 810
     * log2 of the size of the block which a single vector in motion_val represents: \
     * (4->16x16, 3->8x8, 2-> 4x4, 1-> 2x2)\
811
     * - encoding: unused\
diego's avatar
diego committed
812
     * - decoding: Set by libavcodec.\
813 814
     */\
    uint8_t motion_subsample_log2;\
michaelni's avatar
michaelni committed
815 816 817
\
    /**\
     * for some private data of the user\
818
     * - encoding: unused\
diego's avatar
diego committed
819
     * - decoding: Set by user.\
michaelni's avatar
michaelni committed
820 821
     */\
    void *opaque;\
822 823 824
\
    /**\
     * error\
diego's avatar
diego committed
825
     * - encoding: Set by libavcodec. if flags&CODEC_FLAG_PSNR.\
826
     * - decoding: unused\
827 828
     */\
    uint64_t error[4];\
michaelni's avatar
michaelni committed
829 830
\
    /**\
diego's avatar
diego committed
831 832 833 834
     * type of the buffer (to keep track of who has to deallocate data[*])\
     * - encoding: Set by the one who allocates it.\
     * - decoding: Set by the one who allocates it.\
     * Note: User allocated (direct rendering) & internal buffers cannot coexist currently.\
michaelni's avatar
michaelni committed
835 836
     */\
    int type;\
837 838
    \
    /**\
diego's avatar
diego committed
839
     * When decoding, this signals how much the picture must be delayed.\
840
     * extra_delay = repeat_pict / (2*fps)\
841
     * - encoding: unused\
diego's avatar
diego committed
842
     * - decoding: Set by libavcodec.\
843
     */\
michaelni's avatar
michaelni committed
844 845 846 847 848 849
    int repeat_pict;\
    \
    /**\
     * \
     */\
    int qscale_type;\
romansh's avatar
 
romansh committed
850 851 852
    \
    /**\
     * The content of the picture is interlaced.\
diego's avatar
diego committed
853 854
     * - encoding: Set by user.\
     * - decoding: Set by libavcodec. (default 0)\
romansh's avatar
 
romansh committed
855 856 857 858
     */\
    int interlaced_frame;\
    \
    /**\
diego's avatar
diego committed
859 860 861
     * If the content is interlaced, is top field displayed first.\
     * - encoding: Set by user.\
     * - decoding: Set by libavcodec.\
romansh's avatar
 
romansh committed
862
     */\
863
    int top_field_first;\
864 865 866
    \
    /**\
     * Pan scan.\
diego's avatar
diego committed
867 868
     * - encoding: Set by user.\
     * - decoding: Set by libavcodec.\
869 870
     */\
    AVPanScan *pan_scan;\
871 872
    \
    /**\
diego's avatar
diego committed
873
     * Tell user application that palette has changed from previous frame.\
874
     * - encoding: ??? (no palette-enabled encoder yet)\
diego's avatar
diego committed
875
     * - decoding: Set by libavcodec. (default 0).\
876 877
     */\
    int palette_has_changed;\
878 879
    \
    /**\
diego's avatar
diego committed
880
     * codec suggestion on buffer type if != 0\
881
     * - encoding: unused\
diego's avatar
diego committed
882
     * - decoding: Set by libavcodec. (before get_buffer() call)).\
883 884
     */\
    int buffer_hints;\
885 886
\
    /**\
diego's avatar
diego committed
887
     * DCT coefficients\
888
     * - encoding: unused\
diego's avatar
diego committed
889
     * - decoding: Set by libavcodec.\
890 891
     */\
    short *dct_coeff;\
892 893
\
    /**\
diego's avatar
diego committed
894 895 896
     * motion referece frame index\
     * - encoding: Set by user.\
     * - decoding: Set by libavcodec.\
897
     */\
898 899 900 901 902 903 904 905 906
    int8_t *ref_index[2];\
\
    /**\
     * reordered opaque 64bit number (generally a PTS) from AVCodecContext.reordered_opaque\
     * output in AVFrame.reordered_opaque\
     * - encoding: unused\
     * - decoding: Read by user.\
     */\
    int64_t reordered_opaque;\
907 908 909 910 911 912
\
    /**\
     * hardware accelerator private data (FFmpeg allocated)\
     * - encoding: unused\
     * - decoding: Set by libavcodec\
     */\
913
    void *hwaccel_picture_private;\
914

915

916 917 918
#define FF_QSCALE_TYPE_MPEG1 0
#define FF_QSCALE_TYPE_MPEG2 1
#define FF_QSCALE_TYPE_H264  2
919
#define FF_QSCALE_TYPE_VP56  3
michaelni's avatar
michaelni committed
920 921

#define FF_BUFFER_TYPE_INTERNAL 1
diego's avatar
diego committed
922 923 924
#define FF_BUFFER_TYPE_USER     2 ///< direct rendering buffers (image is (de)allocated by user)
#define FF_BUFFER_TYPE_SHARED   4 ///< Buffer from somewhere else; don't deallocate 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 deallocate anything.
michaelni's avatar
michaelni committed
925

michaelni's avatar
michaelni committed
926

927 928 929 930 931 932
#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
#define FF_SI_TYPE 5 ///< Switching Intra
#define FF_SP_TYPE 6 ///< Switching Predicted
933
#define FF_BI_TYPE 7
michaelni's avatar
michaelni committed
934

diego's avatar
diego committed
935 936 937 938
#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).
939

940 941
typedef struct AVPacket {
    /**
942 943
     * Presentation timestamp in AVStream->time_base units; the time at which
     * the decompressed packet will be presented to the user.
944 945 946 947 948 949 950 951
     * Can be AV_NOPTS_VALUE if it is not stored in the file.
     * pts MUST be larger or equal to dts as presentation cannot happen before
     * decompression, unless one wants to view hex dumps. Some formats misuse
     * the terms dts and pts/cts to mean something different. Such timestamps
     * must be converted to true pts/dts before they are stored in AVPacket.
     */
    int64_t pts;
    /**
952 953
     * Decompression timestamp in AVStream->time_base units; the time at which
     * the packet is decompressed.
954 955 956 957 958 959 960 961
     * Can be AV_NOPTS_VALUE if it is not stored in the file.
     */
    int64_t dts;
    uint8_t *data;
    int   size;
    int   stream_index;
    int   flags;
    /**
962
     * Duration of this packet in AVStream->time_base units, 0 if unknown.
963 964 965 966 967 968 969 970
     * Equals next_pts - this_pts in presentation order.
     */
    int   duration;
    void  (*destruct)(struct AVPacket *);
    void  *priv;
    int64_t pos;                            ///< byte position in stream, -1 if unknown

    /**
971
     * Time difference in AVStream->time_base units from the pts of this
972 973 974 975 976 977 978 979 980 981 982 983 984 985 986
     * packet to the point at which the output from the decoder has converged
     * independent from the availability of previous frames. That is, the
     * frames are virtually identical no matter if decoding started from
     * the very first frame or from this keyframe.
     * Is AV_NOPTS_VALUE if unknown.
     * This field is not the display duration of the current packet.
     *
     * The purpose of this field is to allow seeking in streams that have no
     * keyframes in the conventional sense. It corresponds to the
     * recovery point SEI in H.264 and match_time_delta in NUT. It is also
     * essential for some types of subtitle streams to ensure that all
     * subtitles are correctly displayed after seeking.
     */
    int64_t convergence_duration;
} AVPacket;
987 988 989 990
#define AV_PKT_FLAG_KEY   0x0001
#if LIBAVCODEC_VERSION_MAJOR < 53
#define PKT_FLAG_KEY AV_PKT_FLAG_KEY
#endif
991

michaelni's avatar
michaelni committed
992 993
/**
 * Audio Video Frame.
994 995
 * New fields can be added to the end of FF_COMMON_FRAME with minor version
 * bumps.
diego's avatar
diego committed
996
 * Removal, reordering and changes to existing fields require a major
997 998
 * version bump. No fields should be added into AVFrame before or after
 * FF_COMMON_FRAME!
diego's avatar
diego committed
999
 * sizeof(AVFrame) must not be used outside libav*.
michaelni's avatar
michaelni committed
1000
 */
michaelni's avatar
michaelni committed
1001 1002 1003
typedef struct AVFrame {
    FF_COMMON_FRAME
} AVFrame;
michaelni's avatar
michaelni committed
1004

michaelni's avatar
doxy  
michaelni committed
1005
/**
1006 1007
 * main external API structure.
 * New fields can be added to the end with minor version bumps.
diego's avatar
diego committed
1008
 * Removal, reordering and changes to existing fields require a major
1009
 * version bump.
diego's avatar
diego committed
1010
 * sizeof(AVCodecContext) must not be used outside libav*.
michaelni's avatar
doxy  
michaelni committed
1011
 */
glantau's avatar
glantau committed
1012
typedef struct AVCodecContext {
1013
    /**
diego's avatar
diego committed
1014
     * information on struct for av_log
1015 1016
     * - set by avcodec_alloc_context
     */
1017
    const AVClass *av_class;
1018
    /**
diego's avatar
diego committed
1019 1020 1021
     * the average bitrate
     * - encoding: Set by user; unused for constant quantizer encoding.
     * - decoding: Set by libavcodec. 0 or some bitrate if this info is available in the stream.
1022
     */
glantau's avatar
glantau committed
1023
    int bit_rate;
1024 1025

    /**
1026
     * number of bits the bitstream is allowed to diverge from the reference.
1027
     *           the reference can be CBR (for CBR pass1) or VBR (for pass2)
diego's avatar
diego committed
1028
     * - encoding: Set by user; unused for constant quantizer encoding.
1029
     * - decoding: unused
1030
     */
1031
    int bit_rate_tolerance;
1032 1033

    /**
1034
     * CODEC_FLAG_*.
diego's avatar
diego committed
1035 1036
     * - encoding: Set by user.
     * - decoding: Set by user.
1037
     */
glantau's avatar
glantau committed
1038
    int flags;
1039 1040

    /**
diego's avatar
diego committed
1041 1042 1043 1044 1045 1046
     * Some codecs need additional format info. It is stored here.
     * If any muxer uses this then ALL demuxers/parsers AND encoders for the
     * specific codec MUST set it correctly otherwise stream copy breaks.
     * In general use of this field by muxers is not recommanded.
     * - encoding: Set by libavcodec.
     * - decoding: Set by libavcodec. (FIXME: Is this OK?)
1047 1048 1049 1050
     */
    int sub_id;

    /**
diego's avatar
diego committed
1051
     * Motion estimation algorithm used for video coding.
lorenm's avatar
lorenm committed
1052
     * 1 (zero), 2 (full), 3 (log), 4 (phods), 5 (epzs), 6 (x1), 7 (hex),
1053
     * 8 (umh), 9 (iter), 10 (tesa) [7, 8, 10 are x264 specific, 9 is snow specific]
1054 1055
     * - encoding: MUST be set by user.
     * - decoding: unused
1056 1057 1058 1059
     */
    int me_method;

    /**
diego's avatar
diego committed
1060 1061
     * some codecs need / can use extradata like Huffman tables.
     * mjpeg: Huffman tables
1062
     * rv10: additional flags
1063
     * mpeg4: global headers (they can be in the bitstream or here)
diego's avatar
diego committed
1064 1065 1066 1067 1068
     * The allocated memory should be FF_INPUT_BUFFER_PADDING_SIZE bytes larger
     * than extradata_size to avoid prolems if it is read with the bitstream reader.
     * The bytewise contents of extradata must not depend on the architecture or CPU endianness.
     * - encoding: Set/allocated/freed by libavcodec.
     * - decoding: Set/allocated/freed by user.
1069
     */
1070
    uint8_t *extradata;
1071
    int extradata_size;
1072

1073
    /**
diego's avatar
diego committed
1074 1075
     * This is the fundamental unit of time (in seconds) in terms
     * of which frame timestamps are represented. For fixed-fps content,
1076 1077
     * timebase should be 1/framerate and timestamp increments should be
     * identically 1.
diego's avatar
diego committed
1078 1079
     * - encoding: MUST be set by user.
     * - decoding: Set by libavcodec.
1080
     */
michael's avatar
michael committed
1081
    AVRational time_base;
1082

1083
    /* video only */
1084
    /**
1085
     * picture width / height.
1086
     * - encoding: MUST be set by user.
diego's avatar
diego committed
1087 1088 1089
     * - decoding: Set by libavcodec.
     * Note: For compatibility it is possible to set this instead of
     * coded_width/height before decoding.
1090
     */
glantau's avatar
glantau committed
1091
    int width, height;
1092

1093
#define FF_ASPECT_EXTENDED 15
1094 1095

    /**
diego's avatar
diego committed
1096 1097
     * the number of pictures in a group of pictures, or 0 for intra_only
     * - encoding: Set by user.
1098
     * - decoding: unused
1099 1100 1101 1102
     */
    int gop_size;

    /**
diego's avatar
diego committed
1103 1104 1105
     * Pixel format, see PIX_FMT_xxx.
     * - encoding: Set by user.
     * - decoding: Set by libavcodec.
1106
     */
1107
    enum PixelFormat pix_fmt;
1108

1109
    /**
diego's avatar
diego committed
1110
     * Frame rate emulation. If not zero, the lower layer (i.e. format handler)
1111
     * has to read frames at native frame rate.
diego's avatar
diego committed
1112 1113
     * - encoding: Set by user.
     * - decoding: unused
1114 1115
     */
    int rate_emu;
1116

1117
    /**
diego's avatar
diego committed
1118 1119
     * If non NULL, 'draw_horiz_band' is called by the libavcodec
     * decoder to draw a horizontal band. It improves cache usage. Not
1120
     * all codecs can do that. You must check the codec capabilities
diego's avatar
diego committed
1121
     * beforehand.
1122 1123 1124 1125 1126 1127 1128
     * The function is also used by hardware acceleration APIs.
     * It is called at least once during frame decoding to pass
     * the data needed for hardware render.
     * In that mode instead of pixel data, AVFrame points to
     * a structure specific to the acceleration API. The application
     * reads the structure and can change some fields to indicate progress
     * or mark state.
1129
     * - encoding: unused
diego's avatar
diego committed
1130
     * - decoding: Set by user.
1131 1132 1133 1134
     * @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
1135
     */
glantau's avatar
glantau committed
1136
    void (*draw_horiz_band)(struct AVCodecContext *s,
1137
                            const AVFrame *src, int offset[4],
1138
                            int y, int type, int height);
glantau's avatar
glantau committed
1139

glantau's avatar
glantau committed
1140
    /* audio only */
diego's avatar
diego committed
1141
    int sample_rate; ///< samples per second
1142
    int channels;    ///< number of audio channels
1143 1144

    /**
diego's avatar
diego committed
1145 1146 1147
     * audio sample format
     * - encoding: Set by user.
     * - decoding: Set by libavcodec.
1148
     */
1149
    enum SampleFormat sample_fmt;  ///< sample format
glantau's avatar
glantau committed
1150

diego's avatar
diego committed
1151
    /* The following data should not be initialized. */
1152
    /**
diego's avatar
diego committed
1153
     * Samples per packet, initialized when calling 'init'.
1154 1155
     */
    int frame_size;
1156
    int frame_number;   ///< audio or video frame number
1157
#if LIBAVCODEC_VERSION_MAJOR < 53
diego's avatar
diego committed
1158
    int real_pict_num;  ///< Returns the real picture number of previous encoded frame.
1159
#endif
1160

1161
    /**
diego's avatar
diego committed
1162
     * Number of frames the decoded output will be delayed relative to
1163
     * the encoded input.
diego's avatar
diego committed
1164
     * - encoding: Set by libavcodec.
1165
     * - decoding: unused
1166 1167
     */
    int delay;
1168

1169 1170
    /* - encoding parameters */
    float qcompress;  ///< amount of qscale change between easy & hard scenes (0.0-1.0)
1171 1172
    float qblur;      ///< amount of qscale smoothing over time (0.0-1.0)

1173
    /**
diego's avatar
diego committed
1174 1175
     * minimum quantizer
     * - encoding: Set by user.
1176
     * - decoding: unused
1177 1178 1179 1180
     */
    int qmin;

    /**
diego's avatar
diego committed
1181 1182
     * maximum quantizer
     * - encoding: Set by user.
1183
     * - decoding: unused
1184 1185 1186 1187
     */
    int qmax;

    /**
diego's avatar
diego committed
1188 1189
     * maximum quantizer difference between frames
     * - encoding: Set by user.
1190
     * - decoding: unused
1191 1192 1193 1194
     */
    int max_qdiff;

    /**
diego's avatar
diego committed
1195 1196 1197
     * maximum number of B-frames between non-B-frames
     * Note: The output will be delayed by max_b_frames+1 relative to the input.
     * - encoding: Set by user.
1198
     * - decoding: unused
1199 1200 1201 1202
     */
    int max_b_frames;

    /**
diego's avatar
diego committed
1203
     * qscale factor between IP and B-frames
1204 1205
     * If > 0 then the last P-frame quantizer will be used (q= lastp_q*factor+offset).
     * If < 0 then normal ratecontrol will be done (q= -normal_q*factor+offset).
diego's avatar
diego committed
1206
     * - encoding: Set by user.
1207
     * - decoding: unused
1208 1209
     */
    float b_quant_factor;
1210

1211 1212
    /** obsolete FIXME remove */
    int rc_strategy;
michael's avatar
michael committed
1213 1214
#define FF_RC_STRATEGY_XVID 1

michaelni's avatar
michaelni committed
1215
    int b_frame_strategy;
1216

1217
    /**
1218 1219 1220
     * hurry up amount
     * - encoding: unused
     * - decoding: Set by user. 1-> Skip B-frames, 2-> Skip IDCT/dequant too, 5-> Skip everything except header
takis's avatar
takis committed
1221
     * @deprecated Deprecated in favor of skip_idct and skip_frame.
1222 1223
     */
    int hurry_up;
1224

glantau's avatar
glantau committed
1225
    struct AVCodec *codec;
1226

glantau's avatar
glantau committed
1227 1228
    void *priv_data;

diego's avatar
diego committed
1229
    int rtp_payload_size;   /* The size of the RTP payload: the coder will  */
diego's avatar
diego committed
1230
                            /* do its best to deliver a chunk with size     */
1231
                            /* below rtp_payload_size, the chunk will start */
diego's avatar
diego committed
1232
                            /* with a start code on some codecs like H.263. */
1233
                            /* This doesn't take account of any particular  */
diego's avatar
diego committed
1234
                            /* headers inside the transmitted RTP payload.  */
1235

1236

diego's avatar
diego committed
1237 1238 1239 1240 1241 1242
    /* The RTP callback: This function is called    */
    /* every time the encoder has a packet to send. */
    /* It depends on the encoder if the data starts */
    /* with a Start Code (it should). H.263 does.   */
    /* mb_nb contains the number of macroblocks     */
    /* encoded in the RTP payload.                  */
1243
    void (*rtp_callback)(struct AVCodecContext *avctx, void *data, int size, int mb_nb);
1244

michaelni's avatar
michaelni committed
1245 1246 1247 1248 1249 1250 1251 1252
    /* statistics, used for 2-pass encoding */
    int mv_bits;
    int header_bits;
    int i_tex_bits;
    int p_tex_bits;
    int i_count;
    int p_count;
    int skip_count;
1253
    int misc_bits;
1254

1255
    /**
diego's avatar
diego committed
1256 1257
     * number of bits used for the previously encoded frame
     * - encoding: Set by libavcodec.
michaelni's avatar
michaelni committed
1258
     * - decoding: unused
1259
     */
michaelni's avatar
michaelni committed
1260
    int frame_bits;
michaelni's avatar
michaelni committed
1261

1262
    /**
diego's avatar
diego committed
1263 1264 1265
     * Private data of the user, can be used to carry app specific stuff.
     * - encoding: Set by user.
     * - decoding: Set by user.
1266 1267 1268
     */
    void *opaque;

glantau's avatar
glantau committed
1269
    char codec_name[32];
1270 1271
    enum CodecType codec_type; /* see CODEC_TYPE_xxx */
    enum CodecID codec_id; /* see CODEC_ID_xxx */
1272

michaelni's avatar
michaelni committed
1273 1274
    /**
     * fourcc (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A').
diego's avatar
diego committed
1275 1276 1277 1278 1279 1280
     * This is used to work around some encoder bugs.
     * A demuxer should set this to what is stored in the field used to identify the codec.
     * If there are multiple such fields in a container then the demuxer should choose the one
     * which maximizes the information about the used codec.
     * If the codec tag field in a container is larger then 32 bits then the demuxer should
     * remap the longer ID to 32 bits with a table or other structure. Alternatively a new
michael's avatar
michael committed
1281
     * extra_codec_tag + size could be added but for this a clear advantage must be demonstrated
diego's avatar
diego committed
1282 1283 1284
     * first.
     * - encoding: Set by user, if not then the default based on codec_id will be used.
     * - decoding: Set by user, will be converted to uppercase by libavcodec during init.
michaelni's avatar
michaelni committed
1285 1286
     */
    unsigned int codec_tag;
1287

1288
    /**
diego's avatar
diego committed
1289 1290 1291
     * Work around bugs in encoders which sometimes cannot be detected automatically.
     * - encoding: Set by user
     * - decoding: Set by user
1292 1293
     */
    int workaround_bugs;
1294
#define FF_BUG_AUTODETECT       1  ///< autodetection
1295 1296 1297 1298
#define FF_BUG_OLD_MSMPEG4      2
#define FF_BUG_XVID_ILACE       4
#define FF_BUG_UMP4             8
#define FF_BUG_NO_PADDING       16
michael's avatar
michael committed
1299
#define FF_BUG_AMV              32
diego's avatar
diego committed
1300
#define FF_BUG_AC_VLC           0  ///< Will be removed, libavcodec can now handle these non-compliant files by default.
michaelni's avatar
michaelni committed
1301
#define FF_BUG_QPEL_CHROMA      64
michaelni's avatar
michaelni committed
1302
#define FF_BUG_STD_QPEL         128
michaelni's avatar
michaelni committed
1303
#define FF_BUG_QPEL_CHROMA2     256
1304
#define FF_BUG_DIRECT_BLOCKSIZE 512
1305
#define FF_BUG_EDGE             1024
1306
#define FF_BUG_HPEL_CHROMA      2048
1307
#define FF_BUG_DC_CLIP          4096
diego's avatar
diego committed
1308 1309
#define FF_BUG_MS               8192 ///< Work around various bugs in Microsoft's broken decoders.
//#define FF_BUG_FAKE_SCALABILITY 16 //Autodetection should work 100%.
1310

1311
    /**
diego's avatar
diego committed
1312 1313
     * luma single coefficient elimination threshold
     * - encoding: Set by user.
1314
     * - decoding: unused
1315
     */
michaelni's avatar
 
michaelni committed
1316
    int luma_elim_threshold;
1317

1318
    /**
diego's avatar
diego committed
1319 1320
     * chroma single coeff elimination threshold
     * - encoding: Set by user.
1321
     * - decoding: unused
1322
     */
michaelni's avatar
 
michaelni committed
1323
    int chroma_elim_threshold;
1324

1325
    /**
diego's avatar
diego committed
1326 1327
     * strictly follow the standard (MPEG4, ...).
     * - encoding: Set by user.
1328 1329 1330 1331 1332 1333 1334 1335
     * - decoding: Set by user.
     * Setting this to STRICT or higher means the encoder and decoder will
     * generally do stupid things. While setting it to inofficial or lower
     * will mean the encoder might use things that are not supported by all
     * spec compliant decoders. Decoders make no difference between normal,
     * inofficial and experimental, that is they always try to decode things
     * when they can unless they are explicitly asked to behave stupid
     * (=strictly conform to the specs)
1336 1337
     */
    int strict_std_compliance;
diego's avatar
diego committed
1338 1339
#define FF_COMPLIANCE_VERY_STRICT   2 ///< Strictly conform to a older more strict version of the spec or reference software.
#define FF_COMPLIANCE_STRICT        1 ///< Strictly conform to all the things in the spec no matter what consequences.
1340
#define FF_COMPLIANCE_NORMAL        0
diego's avatar
diego committed
1341 1342
#define FF_COMPLIANCE_INOFFICIAL   -1 ///< Allow inofficial extensions.
#define FF_COMPLIANCE_EXPERIMENTAL -2 ///< Allow nonstandardized experimental things.
1343

1344
    /**
diego's avatar
diego committed
1345 1346
     * qscale offset between IP and B-frames
     * - encoding: Set by user.
1347
     * - decoding: unused
1348 1349
     */
    float b_quant_offset;
1350

1351
    /**
1352
     * Error recognization; higher values will detect more errors but may
diego's avatar
diego committed
1353
     * misdetect some more or less valid parts as errors.
1354
     * - encoding: unused
diego's avatar
diego committed
1355
     * - decoding: Set by user.
1356
     */
1357
    int error_recognition;
diego's avatar
diego committed
1358
#define FF_ER_CAREFUL         1
1359 1360 1361
#define FF_ER_COMPLIANT       2
#define FF_ER_AGGRESSIVE      3
#define FF_ER_VERY_AGGRESSIVE 4
1362

1363
    /**
diego's avatar
diego committed
1364 1365
     * Called at the beginning of each frame to get a buffer for it.
     * If pic.reference is set then the frame will be read later by libavcodec.
michael's avatar
michael committed
1366
     * avcodec_align_dimensions() should be used to find the required width and
diego's avatar
diego committed
1367
     * height, as they normally need to be rounded up to the next multiple of 16.
1368 1369 1370
     * if CODEC_CAP_DR1 is not set then get_buffer() must call
     * avcodec_default_get_buffer() instead of providing buffers allocated by
     * some other means.
1371
     * - encoding: unused
diego's avatar
diego committed
1372
     * - decoding: Set by libavcodec., user can override.
1373
     */
michaelni's avatar
michaelni committed
1374
    int (*get_buffer)(struct AVCodecContext *c, AVFrame *pic);
1375

1376
    /**
ramiro's avatar
Typo  
ramiro committed
1377
     * Called to release buffers which were allocated with get_buffer.
diego's avatar
diego committed
1378 1379
     * A released buffer can be reused in get_buffer().
     * pic.data[*] must be set to NULL.
1380
     * - encoding: unused
diego's avatar
diego committed
1381
     * - decoding: Set by libavcodec., user can override.
1382
     */
michaelni's avatar
michaelni committed
1383
    void (*release_buffer)(struct AVCodecContext *c, AVFrame *pic);
michaelni's avatar
michaelni committed
1384

1385
    /**
michael's avatar
michael committed
1386
     * Size of the frame reordering buffer in the decoder.
1387
     * For MPEG-2 it is 1 IPB or 0 low delay IP.
diego's avatar
diego committed
1388 1389
     * - encoding: Set by libavcodec.
     * - decoding: Set by libavcodec.
1390 1391
     */
    int has_b_frames;
1392 1393 1394

    /**
     * number of bytes per packet if constant and known or 0
diego's avatar
diego committed
1395
     * Used by some WAV based audio codecs.
1396 1397
     */
    int block_align;
1398

diego's avatar
diego committed
1399
    int parse_only; /* - decoding only: If true, only parsing is done
1400 1401
                       (function avcodec_parse_frame()). The frame
                       data is returned. Only MPEG codecs support this now. */
1402

1403
    /**
diego's avatar
diego committed
1404 1405
     * 0-> h263 quant 1-> mpeg quant
     * - encoding: Set by user.
1406
     * - decoding: unused
1407 1408
     */
    int mpeg_quant;
1409

1410
    /**
diego's avatar
diego committed
1411 1412
     * pass1 encoding statistics output buffer
     * - encoding: Set by libavcodec.
1413
     * - decoding: unused
1414
     */
1415
    char *stats_out;
1416

1417
    /**
diego's avatar
diego committed
1418 1419 1420
     * pass2 encoding statistics input buffer
     * Concatenated stuff from stats_out of pass1 should be placed here.
     * - encoding: Allocated/set/freed by user.
1421
     * - decoding: unused
1422 1423
     */
    char *stats_in;
1424

1425
    /**
diego's avatar
diego committed
1426 1427 1428
     * ratecontrol qmin qmax limiting method
     * 0-> clipping, 1-> use a nice continous function to limit qscale wthin qmin/qmax.
     * - encoding: Set by user.
1429
     * - decoding: unused
1430
     */
michaelni's avatar
michaelni committed
1431
    float rc_qsquish;
1432

michaelni's avatar
michaelni committed
1433 1434
    float rc_qmod_amp;
    int rc_qmod_freq;
1435

1436
    /**
diego's avatar
diego committed
1437 1438
     * ratecontrol override, see RcOverride
     * - encoding: Allocated/set/freed by user.
1439
     * - decoding: unused
1440
     */
michaelni's avatar
michaelni committed
1441 1442
    RcOverride *rc_override;
    int rc_override_count;
1443

1444
    /**
diego's avatar
diego committed
1445 1446
     * rate control equation
     * - encoding: Set by user
1447
     * - decoding: unused
1448
     */
lucabe's avatar
Fix  
lucabe committed
1449
    const char *rc_eq;
1450

1451
    /**
diego's avatar
diego committed
1452 1453
     * maximum bitrate
     * - encoding: Set by user.
1454
     * - decoding: unused
1455
     */
michaelni's avatar
michaelni committed
1456
    int rc_max_rate;
1457

1458
    /**
diego's avatar
diego committed
1459 1460
     * minimum bitrate
     * - encoding: Set by user.
1461
     * - decoding: unused
1462
     */
michaelni's avatar
michaelni committed
1463
    int rc_min_rate;
1464

1465
    /**
diego's avatar
diego committed
1466 1467
     * decoder bitstream buffer size
     * - encoding: Set by user.
1468
     * - decoding: unused
1469
     */
michaelni's avatar
michaelni committed
1470 1471
    int rc_buffer_size;
    float rc_buffer_aggressivity;
1472 1473

    /**
diego's avatar
diego committed
1474 1475 1476 1477
     * qscale factor between P and I-frames
     * If > 0 then the last p frame quantizer will be used (q= lastp_q*factor+offset).
     * If < 0 then normal ratecontrol will be done (q= -normal_q*factor+offset).
     * - encoding: Set by user.
1478
     * - decoding: unused
1479 1480
     */
    float i_quant_factor;
1481

1482
    /**
diego's avatar
diego committed
1483 1484
     * qscale offset between P and I-frames
     * - encoding: Set by user.
1485
     * - decoding: unused
1486 1487
     */
    float i_quant_offset;
1488

1489
    /**
diego's avatar
diego committed
1490 1491
     * initial complexity for pass1 ratecontrol
     * - encoding: Set by user.
1492
     * - decoding: unused
1493
     */
michaelni's avatar
michaelni committed
1494
    float rc_initial_cplx;
1495

1496
    /**
diego's avatar
diego committed
1497 1498
     * DCT algorithm, see FF_DCT_* below
     * - encoding: Set by user.
1499
     * - decoding: unused
1500
     */
1501
    int dct_algo;
1502
#define FF_DCT_AUTO    0
1503
#define FF_DCT_FASTINT 1
1504 1505 1506
#define FF_DCT_INT     2
#define FF_DCT_MMX     3
#define FF_DCT_MLIB    4
1507
#define FF_DCT_ALTIVEC 5
michael's avatar
michael committed
1508
#define FF_DCT_FAAN    6
1509

1510
    /**
diego's avatar
diego committed
1511 1512
     * luminance masking (0-> disabled)
     * - encoding: Set by user.
1513
     * - decoding: unused
1514 1515
     */
    float lumi_masking;
1516

1517
    /**
diego's avatar
diego committed
1518 1519
     * temporary complexity masking (0-> disabled)
     * - encoding: Set by user.
1520
     * - decoding: unused
1521 1522
     */
    float temporal_cplx_masking;
1523

1524
    /**
diego's avatar
diego committed
1525 1526
     * spatial complexity masking (0-> disabled)
     * - encoding: Set by user.
1527
     * - decoding: unused
1528 1529
     */
    float spatial_cplx_masking;
1530

1531
    /**
diego's avatar
diego committed
1532 1533
     * p block masking (0-> disabled)
     * - encoding: Set by user.
1534
     * - decoding: unused
1535 1536
     */
    float p_masking;
1537

1538
    /**
diego's avatar
diego committed
1539 1540
     * darkness masking (0-> disabled)
     * - encoding: Set by user.
1541
     * - decoding: unused
1542 1543
     */
    float dark_masking;
1544

1545
    /**
diego's avatar
diego committed
1546 1547 1548
     * IDCT algorithm, see FF_IDCT_* below.
     * - encoding: Set by user.
     * - decoding: Set by user.
1549 1550
     */
    int idct_algo;
diego's avatar
diego committed
1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566
#define FF_IDCT_AUTO          0
#define FF_IDCT_INT           1
#define FF_IDCT_SIMPLE        2
#define FF_IDCT_SIMPLEMMX     3
#define FF_IDCT_LIBMPEG2MMX   4
#define FF_IDCT_PS2           5
#define FF_IDCT_MLIB          6
#define FF_IDCT_ARM           7
#define FF_IDCT_ALTIVEC       8
#define FF_IDCT_SH4           9
#define FF_IDCT_SIMPLEARM     10
#define FF_IDCT_H264          11
#define FF_IDCT_VP3           12
#define FF_IDCT_IPP           13
#define FF_IDCT_XVIDMMX       14
#define FF_IDCT_CAVS          15
mru's avatar
mru committed
1567
#define FF_IDCT_SIMPLEARMV5TE 16
diego's avatar
diego committed
1568
#define FF_IDCT_SIMPLEARMV6   17
1569
#define FF_IDCT_SIMPLEVIS     18
michael's avatar
michael committed
1570
#define FF_IDCT_WMV2          19
michael's avatar
michael committed
1571
#define FF_IDCT_FAAN          20
pross's avatar
pross committed
1572
#define FF_IDCT_EA            21
mru's avatar
mru committed
1573
#define FF_IDCT_SIMPLENEON    22
mru's avatar
mru committed
1574
#define FF_IDCT_SIMPLEALPHA   23
1575

1576
    /**
diego's avatar
diego committed
1577 1578 1579
     * slice count
     * - encoding: Set by libavcodec.
     * - decoding: Set by user (or 0).
1580 1581 1582
     */
    int slice_count;
    /**
diego's avatar
diego committed
1583 1584 1585
     * slice offsets in the frame in bytes
     * - encoding: Set/allocated by libavcodec.
     * - decoding: Set/allocated by user (or NULL).
1586 1587 1588
     */
    int *slice_offset;

1589
    /**
diego's avatar
diego committed
1590
     * error concealment flags
1591
     * - encoding: unused
diego's avatar
diego committed
1592
     * - decoding: Set by user.
1593 1594 1595 1596 1597
     */
    int error_concealment;
#define FF_EC_GUESS_MVS   1
#define FF_EC_DEBLOCK     2

kabi's avatar
kabi committed
1598
    /**
kabi's avatar
kabi committed
1599
     * dsp_mask could be add used to disable unwanted CPU features
kabi's avatar
kabi committed
1600
     * CPU features (i.e. MMX, SSE. ...)
kabi's avatar
kabi committed
1601
     *
diego's avatar
diego committed
1602 1603 1604
     * With the FORCE flag you may instead enable given CPU features.
     * (Dangerous: Usable in case of misdetection, improper usage however will
     * result into program crash.)
kabi's avatar
kabi committed
1605 1606
     */
    unsigned dsp_mask;
diego's avatar
diego committed
1607
#define FF_MM_FORCE    0x80000000 /* Force usage of selected flags (OR) */
kabi's avatar
kabi committed
1608
    /* lower 16 bits - CPU features */
michael's avatar
michael committed
1609 1610
#define FF_MM_MMX      0x0001 ///< standard MMX
#define FF_MM_3DNOW    0x0004 ///< AMD 3DNOW
1611
#if LIBAVCODEC_VERSION_MAJOR < 53
michael's avatar
michael committed
1612
#define FF_MM_MMXEXT   0x0002 ///< SSE integer functions or AMD MMX ext
1613 1614
#endif
#define FF_MM_MMX2     0x0002 ///< SSE integer functions or AMD MMX ext
michael's avatar
michael committed
1615 1616 1617 1618 1619
#define FF_MM_SSE      0x0008 ///< SSE functions
#define FF_MM_SSE2     0x0010 ///< PIV SSE2 functions
#define FF_MM_3DNOWEXT 0x0020 ///< AMD 3DNowExt
#define FF_MM_SSE3     0x0040 ///< Prescott SSE3 functions
#define FF_MM_SSSE3    0x0080 ///< Conroe SSSE3 functions
conrad's avatar
conrad committed
1620 1621
#define FF_MM_SSE4     0x0100 ///< Penryn SSE4.1 functions
#define FF_MM_SSE42    0x0200 ///< Nehalem SSE4.2 functions
michael's avatar
michael committed
1622
#define FF_MM_IWMMXT   0x0100 ///< XScale IWMMXT
1623
#define FF_MM_ALTIVEC  0x0001 ///< standard AltiVec
michaelni's avatar
michaelni committed
1624 1625

    /**
1626
     * bits per sample/pixel from the demuxer (needed for huffyuv).
diego's avatar
diego committed
1627 1628
     * - encoding: Set by libavcodec.
     * - decoding: Set by user.
michaelni's avatar
michaelni committed
1629
     */
1630
     int bits_per_coded_sample;
1631

michaelni's avatar
michaelni committed
1632
    /**
diego's avatar
diego committed
1633 1634
     * prediction method (needed for huffyuv)
     * - encoding: Set by user.
1635
     * - decoding: unused
michaelni's avatar
michaelni committed
1636 1637 1638 1639 1640
     */
     int prediction_method;
#define FF_PRED_LEFT   0
#define FF_PRED_PLANE  1
#define FF_PRED_MEDIAN 2
1641

michaelni's avatar
michaelni committed
1642
    /**
diego's avatar
diego committed
1643
     * sample aspect ratio (0 if unknown)
michael's avatar
michael committed
1644
     * That is the width of a pixel divided by the height of the pixel.
diego's avatar
diego committed
1645 1646 1647
     * Numerator and denominator must be relatively prime and smaller than 256 for some video standards.
     * - encoding: Set by user.
     * - decoding: Set by libavcodec.
michaelni's avatar
michaelni committed
1648
     */
michael's avatar
michael committed
1649
    AVRational sample_aspect_ratio;
michaelni's avatar
michaelni committed
1650 1651

    /**
diego's avatar
diego committed
1652 1653 1654
     * the picture in the bitstream
     * - encoding: Set by libavcodec.
     * - decoding: Set by libavcodec.
michaelni's avatar
michaelni committed
1655
     */
michaelni's avatar
michaelni committed
1656
    AVFrame *coded_frame;
michaelni's avatar
michaelni committed
1657 1658

    /**
diego's avatar
diego committed
1659 1660 1661
     * debug
     * - encoding: Set by user.
     * - decoding: Set by user.
michaelni's avatar
michaelni committed
1662 1663
     */
    int debug;
diego's avatar
diego committed
1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677
#define FF_DEBUG_PICT_INFO   1
#define FF_DEBUG_RC          2
#define FF_DEBUG_BITSTREAM   4
#define FF_DEBUG_MB_TYPE     8
#define FF_DEBUG_QP          16
#define FF_DEBUG_MV          32
#define FF_DEBUG_DCT_COEFF   0x00000040
#define FF_DEBUG_SKIP        0x00000080
#define FF_DEBUG_STARTCODE   0x00000100
#define FF_DEBUG_PTS         0x00000200
#define FF_DEBUG_ER          0x00000400
#define FF_DEBUG_MMCO        0x00000800
#define FF_DEBUG_BUGS        0x00001000
#define FF_DEBUG_VIS_QP      0x00002000
michael's avatar
michael committed
1678
#define FF_DEBUG_VIS_MB_TYPE 0x00004000
1679
#define FF_DEBUG_BUFFERS     0x00008000
1680

1681
    /**
diego's avatar
diego committed
1682 1683 1684
     * debug
     * - encoding: Set by user.
     * - decoding: Set by user.
1685 1686 1687 1688 1689 1690
     */
    int debug_mv;
#define FF_DEBUG_VIS_MV_P_FOR  0x00000001 //visualize forward predicted MVs of P frames
#define FF_DEBUG_VIS_MV_B_FOR  0x00000002 //visualize forward predicted MVs of B frames
#define FF_DEBUG_VIS_MV_B_BACK 0x00000004 //visualize backward predicted MVs of B frames

1691
    /**
diego's avatar
diego committed
1692 1693
     * error
     * - encoding: Set by libavcodec if flags&CODEC_FLAG_PSNR.
1694
     * - decoding: unused
1695 1696
     */
    uint64_t error[4];
1697

michaelni's avatar
michaelni committed
1698
    /**
diego's avatar
diego committed
1699
     * minimum MB quantizer
1700
     * - encoding: unused
1701
     * - decoding: unused
michaelni's avatar
michaelni committed
1702 1703 1704 1705
     */
    int mb_qmin;

    /**
diego's avatar
diego committed
1706
     * maximum MB quantizer
1707
     * - encoding: unused
1708
     * - decoding: unused
michaelni's avatar
michaelni committed
1709 1710
     */
    int mb_qmax;
1711

michaelni's avatar
michaelni committed
1712
    /**
diego's avatar
diego committed
1713 1714
     * motion estimation comparison function
     * - encoding: Set by user.
1715
     * - decoding: unused
michaelni's avatar
michaelni committed
1716 1717 1718
     */
    int me_cmp;
    /**
diego's avatar
diego committed
1719 1720
     * subpixel motion estimation comparison function
     * - encoding: Set by user.
1721
     * - decoding: unused
michaelni's avatar
michaelni committed
1722 1723 1724
     */
    int me_sub_cmp;
    /**
diego's avatar
diego committed
1725 1726
     * macroblock comparison function (not supported yet)
     * - encoding: Set by user.
1727
     * - decoding: unused
michaelni's avatar
michaelni committed
1728 1729
     */
    int mb_cmp;
michael's avatar
michael committed
1730
    /**
diego's avatar
diego committed
1731 1732
     * interlaced DCT comparison function
     * - encoding: Set by user.
michael's avatar
michael committed
1733 1734 1735
     * - decoding: unused
     */
    int ildct_cmp;
diego's avatar
diego committed
1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748
#define FF_CMP_SAD    0
#define FF_CMP_SSE    1
#define FF_CMP_SATD   2
#define FF_CMP_DCT    3
#define FF_CMP_PSNR   4
#define FF_CMP_BIT    5
#define FF_CMP_RD     6
#define FF_CMP_ZERO   7
#define FF_CMP_VSAD   8
#define FF_CMP_VSSE   9
#define FF_CMP_NSSE   10
#define FF_CMP_W53    11
#define FF_CMP_W97    12
michael's avatar
michael committed
1749
#define FF_CMP_DCTMAX 13
1750
#define FF_CMP_DCT264 14
michaelni's avatar
michaelni committed
1751
#define FF_CMP_CHROMA 256
1752

michaelni's avatar
michaelni committed
1753
    /**
diego's avatar
diego committed
1754 1755
     * ME diamond size & shape
     * - encoding: Set by user.
1756
     * - decoding: unused
michaelni's avatar
michaelni committed
1757 1758
     */
    int dia_size;
michaelni's avatar
michaelni committed
1759 1760

    /**
diego's avatar
diego committed
1761 1762
     * amount of previous MV predictors (2a+1 x 2a+1 square)
     * - encoding: Set by user.
1763
     * - decoding: unused
michaelni's avatar
michaelni committed
1764 1765
     */
    int last_predictor_count;
michaelni's avatar
michaelni committed
1766

michaelni's avatar
michaelni committed
1767
    /**
diego's avatar
diego committed
1768 1769
     * prepass for motion estimation
     * - encoding: Set by user.
1770
     * - decoding: unused
michaelni's avatar
michaelni committed
1771 1772
     */
    int pre_me;
michaelni's avatar
michaelni committed
1773

michaelni's avatar
michaelni committed
1774
    /**
diego's avatar
diego committed
1775 1776
     * motion estimation prepass comparison function
     * - encoding: Set by user.
1777
     * - decoding: unused
michaelni's avatar
michaelni committed
1778 1779
     */
    int me_pre_cmp;
michaelni's avatar
michaelni committed
1780

michaelni's avatar
michaelni committed
1781
    /**
diego's avatar
diego committed
1782 1783
     * ME prepass diamond size & shape
     * - encoding: Set by user.
1784
     * - decoding: unused
michaelni's avatar
michaelni committed
1785 1786 1787
     */
    int pre_dia_size;

michaelni's avatar
michaelni committed
1788
    /**
diego's avatar
diego committed
1789 1790
     * subpel ME quality
     * - encoding: Set by user.
1791
     * - decoding: unused
michaelni's avatar
michaelni committed
1792 1793 1794
     */
    int me_subpel_quality;

michaelni's avatar
michaelni committed
1795
    /**
diego's avatar
diego committed
1796
     * callback to negotiate the pixelFormat
michaelni's avatar
michaelni committed
1797
     * @param fmt is the list of formats which are supported by the codec,
diego's avatar
diego committed
1798 1799 1800
     * it is terminated by -1 as 0 is a valid format, the formats are ordered by quality.
     * The first is always the native one.
     * @return the chosen format
1801
     * - encoding: unused
diego's avatar
diego committed
1802
     * - decoding: Set by user, if not set the native format will be chosen.
michaelni's avatar
michaelni committed
1803
     */
iive's avatar
iive committed
1804
    enum PixelFormat (*get_format)(struct AVCodecContext *s, const enum PixelFormat * fmt);
1805 1806

    /**
diego's avatar
diego committed
1807 1808 1809
     * DTG active format information (additional aspect ratio
     * information only used in DVB MPEG-2 transport streams)
     * 0 if not set.
1810
     *
diego's avatar
diego committed
1811 1812
     * - encoding: unused
     * - decoding: Set by decoder.
1813 1814 1815 1816 1817 1818 1819 1820 1821 1822
     */
    int dtg_active_format;
#define FF_DTG_AFD_SAME         8
#define FF_DTG_AFD_4_3          9
#define FF_DTG_AFD_16_9         10
#define FF_DTG_AFD_14_9         11
#define FF_DTG_AFD_4_3_SP_14_9  13
#define FF_DTG_AFD_16_9_SP_14_9 14
#define FF_DTG_AFD_SP_4_3       15

1823
    /**
diego's avatar
diego committed
1824 1825
     * maximum motion estimation search range in subpel units
     * If 0 then no limit.
1826
     *
diego's avatar
diego committed
1827 1828
     * - encoding: Set by user.
     * - decoding: unused
1829
     */
kabi's avatar
kabi committed
1830
    int me_range;
1831

michaelni's avatar
michaelni committed
1832
    /**
diego's avatar
diego committed
1833 1834
     * intra quantizer bias
     * - encoding: Set by user.
michaelni's avatar
michaelni committed
1835 1836 1837 1838
     * - decoding: unused
     */
    int intra_quant_bias;
#define FF_DEFAULT_QUANT_BIAS 999999
1839

michaelni's avatar
michaelni committed
1840
    /**
diego's avatar
diego committed
1841 1842
     * inter quantizer bias
     * - encoding: Set by user.
michaelni's avatar
michaelni committed
1843 1844 1845
     * - decoding: unused
     */
    int inter_quant_bias;
1846 1847

    /**
diego's avatar
diego committed
1848 1849 1850 1851
     * color table ID
     * - encoding: unused
     * - decoding: Which clrtable should be used for 8bit RGB images.
     *             Tables have to be stored somewhere. FIXME
1852 1853
     */
    int color_table_id;
1854

1855
    /**
diego's avatar
diego committed
1856 1857
     * internal_buffer count
     * Don't touch, used by libavcodec default_get_buffer().
1858 1859
     */
    int internal_buffer_count;
1860

1861
    /**
diego's avatar
diego committed
1862 1863
     * internal_buffers
     * Don't touch, used by libavcodec default_get_buffer().
1864 1865
     */
    void *internal_buffer;
1866 1867 1868 1869 1870 1871 1872

#define FF_LAMBDA_SHIFT 7
#define FF_LAMBDA_SCALE (1<<FF_LAMBDA_SHIFT)
#define FF_QP2LAMBDA 118 ///< factor to convert from H.263 QP to lambda
#define FF_LAMBDA_MAX (256*128-1)

#define FF_QUALITY_SCALE FF_LAMBDA_SCALE //FIXME maybe remove
michaelni's avatar
michaelni committed
1873
    /**
diego's avatar
diego committed
1874 1875 1876
     * Global quality for codecs which cannot change it per frame.
     * This should be proportional to MPEG-1/2/4 qscale.
     * - encoding: Set by user.
michaelni's avatar
michaelni committed
1877 1878 1879
     * - decoding: unused
     */
    int global_quality;
1880

michael's avatar
michael committed
1881 1882
#define FF_CODER_TYPE_VLC       0
#define FF_CODER_TYPE_AC        1
1883 1884 1885
#define FF_CODER_TYPE_RAW       2
#define FF_CODER_TYPE_RLE       3
#define FF_CODER_TYPE_DEFLATE   4
michaelni's avatar
michaelni committed
1886 1887
    /**
     * coder type
diego's avatar
diego committed
1888
     * - encoding: Set by user.
michaelni's avatar
michaelni committed
1889 1890 1891 1892 1893 1894
     * - decoding: unused
     */
    int coder_type;

    /**
     * context model
diego's avatar
diego committed
1895
     * - encoding: Set by user.
michaelni's avatar
michaelni committed
1896 1897 1898
     * - decoding: unused
     */
    int context_model;
1899 1900 1901 1902
#if 0
    /**
     *
     * - encoding: unused
diego's avatar
diego committed
1903
     * - decoding: Set by user.
1904 1905 1906
     */
    uint8_t * (*realloc)(struct AVCodecContext *s, uint8_t *buf, int buf_size);
#endif
1907

1908 1909 1910
    /**
     * slice flags
     * - encoding: unused
diego's avatar
diego committed
1911
     * - decoding: Set by user.
1912 1913 1914 1915 1916 1917
     */
    int slice_flags;
#define SLICE_FLAG_CODED_ORDER    0x0001 ///< draw_horiz_band() is called in coded order instead of display
#define SLICE_FLAG_ALLOW_FIELD    0x0002 ///< allow draw_horiz_band() with field slices (MPEG2 field pics)
#define SLICE_FLAG_ALLOW_PLANE    0x0004 ///< allow draw_horiz_band() with 1 component at a time (SVQ1)

iive's avatar
iive committed
1918 1919 1920 1921 1922 1923
    /**
     * XVideo Motion Acceleration
     * - encoding: forbidden
     * - decoding: set by decoder
     */
    int xvmc_acceleration;
1924

1925 1926
    /**
     * macroblock decision mode
diego's avatar
diego committed
1927
     * - encoding: Set by user.
1928 1929 1930 1931 1932
     * - decoding: unused
     */
    int mb_decision;
#define FF_MB_DECISION_SIMPLE 0        ///< uses mb_cmp
#define FF_MB_DECISION_BITS   1        ///< chooses the one which needs the fewest bits
ramiro's avatar
ramiro committed
1933
#define FF_MB_DECISION_RD     2        ///< rate distortion
1934 1935 1936

    /**
     * custom intra quantization matrix
diego's avatar
diego committed
1937 1938
     * - encoding: Set by user, can be NULL.
     * - decoding: Set by libavcodec.
1939 1940 1941 1942 1943
     */
    uint16_t *intra_matrix;

    /**
     * custom inter quantization matrix
diego's avatar
diego committed
1944 1945
     * - encoding: Set by user, can be NULL.
     * - decoding: Set by libavcodec.
1946 1947
     */
    uint16_t *inter_matrix;
1948

1949 1950
    /**
     * fourcc from the AVI stream header (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A').
diego's avatar
diego committed
1951
     * This is used to work around some encoder bugs.
1952
     * - encoding: unused
diego's avatar
diego committed
1953
     * - decoding: Set by user, will be converted to uppercase by libavcodec during init.
1954 1955
     */
    unsigned int stream_codec_tag;
michaelni's avatar
michaelni committed
1956 1957

    /**
diego's avatar
diego committed
1958 1959 1960
     * scene change detection threshold
     * 0 is default, larger means fewer detected scene changes.
     * - encoding: Set by user.
michaelni's avatar
michaelni committed
1961 1962 1963
     * - decoding: unused
     */
    int scenechange_threshold;
1964 1965

    /**
diego's avatar
diego committed
1966 1967
     * minimum Lagrange multipler
     * - encoding: Set by user.
1968 1969 1970 1971 1972
     * - decoding: unused
     */
    int lmin;

    /**
diego's avatar
diego committed
1973 1974
     * maximum Lagrange multipler
     * - encoding: Set by user.
1975 1976 1977
     * - decoding: unused
     */
    int lmax;
1978 1979

    /**
diego's avatar
diego committed
1980
     * palette control structure
1981
     * - encoding: ??? (no palette-enabled encoder yet)
diego's avatar
diego committed
1982
     * - decoding: Set by user.
1983 1984
     */
    struct AVPaletteControl *palctrl;
1985 1986 1987

    /**
     * noise reduction strength
diego's avatar
diego committed
1988
     * - encoding: Set by user.
1989 1990 1991
     * - decoding: unused
     */
    int noise_reduction;
1992

1993
    /**
diego's avatar
diego committed
1994 1995 1996
     * Called at the beginning of a frame to get cr buffer for it.
     * Buffer type (size, hints) must be the same. libavcodec won't check it.
     * libavcodec will pass previous buffer in pic, function should return
1997
     * same buffer or new buffer with old frame "painted" into it.
diego's avatar
diego committed
1998
     * If pic.data[0] == NULL must behave like get_buffer().
1999 2000 2001
     * if CODEC_CAP_DR1 is not set then reget_buffer() must call
     * avcodec_default_reget_buffer() instead of providing buffers allocated by
     * some other means.
2002
     * - encoding: unused
diego's avatar
diego committed
2003
     * - decoding: Set by libavcodec., user can override
2004
     */
2005
    int (*reget_buffer)(struct AVCodecContext *c, AVFrame *pic);
michael's avatar
michael committed
2006 2007

    /**
diego's avatar
diego committed
2008 2009
     * Number of bits which should be loaded into the rc buffer before decoding starts.
     * - encoding: Set by user.
michael's avatar
michael committed
2010 2011 2012 2013 2014 2015
     * - decoding: unused
     */
    int rc_initial_buffer_occupancy;

    /**
     *
diego's avatar
diego committed
2016
     * - encoding: Set by user.
michael's avatar
michael committed
2017 2018 2019 2020 2021
     * - decoding: unused
     */
    int inter_threshold;

    /**
diego's avatar
diego committed
2022 2023 2024
     * CODEC_FLAG2_*
     * - encoding: Set by user.
     * - decoding: Set by user.
michael's avatar
michael committed
2025 2026
     */
    int flags2;
michael's avatar
michael committed
2027 2028

    /**
diego's avatar
diego committed
2029 2030 2031
     * Simulates errors in the bitstream to test error concealment.
     * - encoding: Set by user.
     * - decoding: unused
michael's avatar
michael committed
2032 2033
     */
    int error_rate;
2034

2035 2036 2037
    /**
     * MP3 antialias algorithm, see FF_AA_* below.
     * - encoding: unused
diego's avatar
diego committed
2038
     * - decoding: Set by user.
2039 2040 2041 2042 2043 2044
     */
    int antialias_algo;
#define FF_AA_AUTO    0
#define FF_AA_FASTINT 1 //not implemented yet
#define FF_AA_INT     2
#define FF_AA_FLOAT   3
michael's avatar
michael committed
2045
    /**
diego's avatar
diego committed
2046 2047
     * quantizer noise shaping
     * - encoding: Set by user.
michael's avatar
michael committed
2048 2049 2050
     * - decoding: unused
     */
    int quantizer_noise_shaping;
2051 2052

    /**
diego's avatar
diego committed
2053
     * thread count
2054
     * is used to decide how many independent tasks should be passed to execute()
diego's avatar
diego committed
2055 2056
     * - encoding: Set by user.
     * - decoding: Set by user.
2057 2058
     */
    int thread_count;
2059

2060
    /**
diego's avatar
diego committed
2061 2062 2063 2064
     * The codec may call this to execute several independent things.
     * It will return only after finishing all tasks.
     * The user may replace this with some multithreaded implementation,
     * the default implementation will execute the parts serially.
michael's avatar
michael committed
2065
     * @param count the number of things to execute
diego's avatar
diego committed
2066 2067
     * - encoding: Set by libavcodec, user can override.
     * - decoding: Set by libavcodec, user can override.
2068
     */
2069
    int (*execute)(struct AVCodecContext *c, int (*func)(struct AVCodecContext *c2, void *arg), void *arg2, int *ret, int count, int size);
2070

2071
    /**
diego's avatar
diego committed
2072 2073
     * thread opaque
     * Can be used by execute() to store some per AVCodecContext stuff.
2074 2075 2076 2077
     * - encoding: set by execute()
     * - decoding: set by execute()
     */
    void *thread_opaque;
2078 2079

    /**
diego's avatar
diego committed
2080 2081
     * Motion estimation threshold below which no motion estimation is
     * performed, but instead the user specified motion vectors are used.
2082
     *
diego's avatar
diego committed
2083
     * - encoding: Set by user.
2084
     * - decoding: unused
2085
     */
michael's avatar
michael committed
2086
     int me_threshold;
2087 2088

    /**
diego's avatar
diego committed
2089 2090
     * Macroblock threshold below which the user specified macroblock types will be used.
     * - encoding: Set by user.
2091 2092 2093
     * - decoding: unused
     */
     int mb_threshold;
2094 2095

    /**
diego's avatar
diego committed
2096 2097
     * precision of the intra DC coefficient - 8
     * - encoding: Set by user.
2098 2099 2100
     * - decoding: unused
     */
     int intra_dc_precision;
michael's avatar
michael committed
2101 2102

    /**
diego's avatar
diego committed
2103 2104
     * noise vs. sse weight for the nsse comparsion function
     * - encoding: Set by user.
michael's avatar
michael committed
2105 2106 2107
     * - decoding: unused
     */
     int nsse_weight;
2108 2109

    /**
diego's avatar
diego committed
2110
     * Number of macroblock rows at the top which are skipped.
2111
     * - encoding: unused
diego's avatar
diego committed
2112
     * - decoding: Set by user.
2113 2114 2115 2116
     */
     int skip_top;

    /**
diego's avatar
diego committed
2117
     * Number of macroblock rows at the bottom which are skipped.
2118
     * - encoding: unused
diego's avatar
diego committed
2119
     * - decoding: Set by user.
2120 2121
     */
     int skip_bottom;
michael's avatar
michael committed
2122 2123 2124

    /**
     * profile
diego's avatar
diego committed
2125 2126
     * - encoding: Set by user.
     * - decoding: Set by libavcodec.
michael's avatar
michael committed
2127 2128 2129
     */
     int profile;
#define FF_PROFILE_UNKNOWN -99
2130

benoit's avatar
 
benoit committed
2131
#define FF_PROFILE_AAC_MAIN 0
diego's avatar
diego committed
2132 2133 2134
#define FF_PROFILE_AAC_LOW  1
#define FF_PROFILE_AAC_SSR  2
#define FF_PROFILE_AAC_LTP  3
michael's avatar
michael committed
2135

2136 2137 2138 2139 2140 2141 2142 2143 2144
#define FF_PROFILE_H264_BASELINE    66
#define FF_PROFILE_H264_MAIN        77
#define FF_PROFILE_H264_EXTENDED    88
#define FF_PROFILE_H264_HIGH        100
#define FF_PROFILE_H264_HIGH_10     110
#define FF_PROFILE_H264_HIGH_422    122
#define FF_PROFILE_H264_HIGH_444    244
#define FF_PROFILE_H264_CAVLC_444   44

michael's avatar
michael committed
2145 2146
    /**
     * level
diego's avatar
diego committed
2147 2148
     * - encoding: Set by user.
     * - decoding: Set by libavcodec.
michael's avatar
michael committed
2149 2150 2151
     */
     int level;
#define FF_LEVEL_UNKNOWN -99
michael's avatar
michael committed
2152 2153

    /**
diego's avatar
diego committed
2154
     * low resolution decoding, 1-> 1/2 size, 2->1/4 size
michael's avatar
michael committed
2155
     * - encoding: unused
diego's avatar
diego committed
2156
     * - decoding: Set by user.
michael's avatar
michael committed
2157 2158
     */
     int lowres;
2159 2160

    /**
diego's avatar
diego committed
2161 2162
     * Bitstream width / height, may be different from width/height if lowres
     * or other things are used.
2163
     * - encoding: unused
diego's avatar
diego committed
2164
     * - decoding: Set by user before init if known. Codec should override / dynamically change if needed.
2165 2166
     */
    int coded_width, coded_height;
michael's avatar
michael committed
2167 2168 2169

    /**
     * frame skip threshold
diego's avatar
diego committed
2170
     * - encoding: Set by user.
michael's avatar
michael committed
2171 2172 2173 2174 2175 2176
     * - decoding: unused
     */
    int frame_skip_threshold;

    /**
     * frame skip factor
diego's avatar
diego committed
2177
     * - encoding: Set by user.
michael's avatar
michael committed
2178 2179 2180
     * - decoding: unused
     */
    int frame_skip_factor;
michael's avatar
michael committed
2181 2182 2183

    /**
     * frame skip exponent
diego's avatar
diego committed
2184
     * - encoding: Set by user.
michael's avatar
michael committed
2185 2186 2187 2188 2189
     * - decoding: unused
     */
    int frame_skip_exp;

    /**
diego's avatar
diego committed
2190 2191
     * frame skip comparison function
     * - encoding: Set by user.
michael's avatar
michael committed
2192 2193 2194
     * - decoding: unused
     */
    int frame_skip_cmp;
2195 2196

    /**
diego's avatar
diego committed
2197
     * Border processing masking, raises the quantizer for mbs on the borders
2198
     * of the picture.
diego's avatar
diego committed
2199
     * - encoding: Set by user.
2200 2201 2202
     * - decoding: unused
     */
    float border_masking;
2203 2204

    /**
diego's avatar
diego committed
2205 2206
     * minimum MB lagrange multipler
     * - encoding: Set by user.
2207 2208 2209 2210 2211
     * - decoding: unused
     */
    int mb_lmin;

    /**
diego's avatar
diego committed
2212 2213
     * maximum MB lagrange multipler
     * - encoding: Set by user.
2214 2215 2216
     * - decoding: unused
     */
    int mb_lmax;
2217 2218

    /**
2219
     *
diego's avatar
diego committed
2220
     * - encoding: Set by user.
2221 2222 2223
     * - decoding: unused
     */
    int me_penalty_compensation;
michael's avatar
michael committed
2224 2225

    /**
2226
     *
michael's avatar
michael committed
2227
     * - encoding: unused
diego's avatar
diego committed
2228
     * - decoding: Set by user.
michael's avatar
michael committed
2229 2230 2231 2232
     */
    enum AVDiscard skip_loop_filter;

    /**
2233
     *
michael's avatar
michael committed
2234
     * - encoding: unused
diego's avatar
diego committed
2235
     * - decoding: Set by user.
michael's avatar
michael committed
2236 2237 2238 2239
     */
    enum AVDiscard skip_idct;

    /**
2240
     *
michael's avatar
michael committed
2241
     * - encoding: unused
diego's avatar
diego committed
2242
     * - decoding: Set by user.
michael's avatar
michael committed
2243 2244
     */
    enum AVDiscard skip_frame;
michael's avatar
michael committed
2245 2246 2247

    /**
     *
diego's avatar
diego committed
2248
     * - encoding: Set by user.
michael's avatar
michael committed
2249 2250 2251
     * - decoding: unused
     */
    int bidir_refine;
2252 2253 2254

    /**
     *
diego's avatar
diego committed
2255
     * - encoding: Set by user.
2256 2257 2258
     * - decoding: unused
     */
    int brd_scale;
lorenm's avatar
lorenm committed
2259 2260 2261

    /**
     * constant rate factor - quality-based VBR - values ~correspond to qps
diego's avatar
diego committed
2262
     * - encoding: Set by user.
lorenm's avatar
lorenm committed
2263 2264
     * - decoding: unused
     */
lu_zero's avatar
lu_zero committed
2265
    float crf;
lorenm's avatar
lorenm committed
2266 2267 2268

    /**
     * constant quantization parameter rate control method
diego's avatar
diego committed
2269
     * - encoding: Set by user.
lorenm's avatar
lorenm committed
2270 2271 2272 2273 2274
     * - decoding: unused
     */
    int cqp;

    /**
diego's avatar
diego committed
2275 2276
     * minimum GOP size
     * - encoding: Set by user.
lorenm's avatar
lorenm committed
2277 2278 2279 2280 2281 2282
     * - decoding: unused
     */
    int keyint_min;

    /**
     * number of reference frames
diego's avatar
diego committed
2283
     * - encoding: Set by user.
2284
     * - decoding: Set by lavc.
lorenm's avatar
lorenm committed
2285 2286 2287 2288 2289
     */
    int refs;

    /**
     * chroma qp offset from luma
diego's avatar
diego committed
2290
     * - encoding: Set by user.
lorenm's avatar
lorenm committed
2291 2292 2293 2294 2295
     * - decoding: unused
     */
    int chromaoffset;

    /**
diego's avatar
diego committed
2296 2297
     * Influences how often B-frames are used.
     * - encoding: Set by user.
lorenm's avatar
lorenm committed
2298 2299 2300 2301 2302 2303
     * - decoding: unused
     */
    int bframebias;

    /**
     * trellis RD quantization
diego's avatar
diego committed
2304
     * - encoding: Set by user.
lorenm's avatar
lorenm committed
2305 2306 2307 2308 2309
     * - decoding: unused
     */
    int trellis;

    /**
diego's avatar
diego committed
2310 2311
     * Reduce fluctuations in qp (before curve compression).
     * - encoding: Set by user.
lorenm's avatar
lorenm committed
2312 2313 2314 2315 2316 2317 2318
     * - decoding: unused
     */
    float complexityblur;

    /**
     * in-loop deblocking filter alphac0 parameter
     * alpha is in the range -6...6
diego's avatar
diego committed
2319
     * - encoding: Set by user.
lorenm's avatar
lorenm committed
2320 2321 2322 2323 2324 2325 2326
     * - decoding: unused
     */
    int deblockalpha;

    /**
     * in-loop deblocking filter beta parameter
     * beta is in the range -6...6
diego's avatar
diego committed
2327
     * - encoding: Set by user.
lorenm's avatar
lorenm committed
2328 2329 2330 2331 2332 2333
     * - decoding: unused
     */
    int deblockbeta;

    /**
     * macroblock subpartition sizes to consider - p8x8, p4x4, b8x8, i8x8, i4x4
diego's avatar
diego committed
2334
     * - encoding: Set by user.
lorenm's avatar
lorenm committed
2335 2336 2337
     * - decoding: unused
     */
    int partitions;
2338 2339 2340 2341 2342
#define X264_PART_I4X4 0x001  /* Analyze i4x4 */
#define X264_PART_I8X8 0x002  /* Analyze i8x8 (requires 8x8 transform) */
#define X264_PART_P8X8 0x010  /* Analyze p16x8, p8x16 and p8x8 */
#define X264_PART_P4X4 0x020  /* Analyze p8x4, p4x8, p4x4 */
#define X264_PART_B8X8 0x100  /* Analyze b16x8, b8x16 and b8x8 */
lorenm's avatar
lorenm committed
2343 2344

    /**
2345
     * direct MV prediction mode - 0 (none), 1 (spatial), 2 (temporal), 3 (auto)
diego's avatar
diego committed
2346
     * - encoding: Set by user.
lorenm's avatar
lorenm committed
2347 2348 2349
     * - decoding: unused
     */
    int directpred;
2350

2351
    /**
2352
     * Audio cutoff bandwidth (0 means "automatic")
diego's avatar
diego committed
2353
     * - encoding: Set by user.
2354 2355 2356
     * - decoding: unused
     */
    int cutoff;
corey's avatar
corey committed
2357 2358

    /**
diego's avatar
diego committed
2359 2360
     * Multiplied by qscale for each frame and added to scene_change_score.
     * - encoding: Set by user.
corey's avatar
corey committed
2361 2362 2363
     * - decoding: unused
     */
    int scenechange_factor;
2364 2365 2366

    /**
     *
diego's avatar
diego committed
2367 2368
     * Note: Value depends upon the compare function used for fullpel ME.
     * - encoding: Set by user.
2369 2370 2371
     * - decoding: unused
     */
    int mv0_threshold;
2372 2373

    /**
diego's avatar
diego committed
2374 2375
     * Adjusts sensitivity of b_frame_strategy 1.
     * - encoding: Set by user.
2376 2377 2378
     * - decoding: unused
     */
    int b_sensitivity;
2379 2380

    /**
diego's avatar
diego committed
2381
     * - encoding: Set by user.
2382 2383 2384 2385 2386 2387
     * - decoding: unused
     */
    int compression_level;
#define FF_COMPRESSION_DEFAULT -1

    /**
diego's avatar
diego committed
2388 2389 2390
     * Sets whether to use LPC mode - used by FLAC encoder.
     * - encoding: Set by user.
     * - decoding: unused
2391 2392 2393 2394 2395
     */
    int use_lpc;

    /**
     * LPC coefficient precision - used by FLAC encoder
diego's avatar
diego committed
2396 2397
     * - encoding: Set by user.
     * - decoding: unused
2398 2399 2400 2401
     */
    int lpc_coeff_precision;

    /**
diego's avatar
diego committed
2402 2403
     * - encoding: Set by user.
     * - decoding: unused
2404 2405 2406 2407
     */
    int min_prediction_order;

    /**
diego's avatar
diego committed
2408 2409
     * - encoding: Set by user.
     * - decoding: unused
2410 2411 2412 2413 2414
     */
    int max_prediction_order;

    /**
     * search method for selecting prediction order
diego's avatar
diego committed
2415 2416
     * - encoding: Set by user.
     * - decoding: unused
2417 2418 2419 2420
     */
    int prediction_order_method;

    /**
diego's avatar
diego committed
2421 2422
     * - encoding: Set by user.
     * - decoding: unused
2423 2424 2425 2426
     */
    int min_partition_order;

    /**
diego's avatar
diego committed
2427 2428
     * - encoding: Set by user.
     * - decoding: unused
2429 2430
     */
    int max_partition_order;
2431 2432 2433

    /**
     * GOP timecode frame start number, in non drop frame format
diego's avatar
diego committed
2434 2435
     * - encoding: Set by user.
     * - decoding: unused
2436 2437
     */
    int64_t timecode_frame_start;
2438

2439
#if LIBAVCODEC_VERSION_MAJOR < 53
2440
    /**
2441 2442 2443
     * Decoder should decode to this many channels if it can (0 for default)
     * - encoding: unused
     * - decoding: Set by user.
2444
     * @deprecated Deprecated in favor of request_channel_layout.
2445 2446
     */
    int request_channels;
2447
#endif
2448 2449 2450 2451 2452 2453 2454 2455

    /**
     * Percentage of dynamic range compression to be applied by the decoder.
     * The default value is 1.0, corresponding to full compression.
     * - encoding: unused
     * - decoding: Set by user.
     */
    float drc_scale;
2456 2457 2458 2459 2460 2461 2462 2463

    /**
     * opaque 64bit number (generally a PTS) that will be reordered and
     * output in AVFrame.reordered_opaque
     * - encoding: unused
     * - decoding: Set by user.
     */
    int64_t reordered_opaque;
2464 2465 2466 2467 2468 2469 2470 2471

    /**
     * Bits per sample/pixel of internal libavcodec pixel/sample format.
     * This field is applicable only when sample_fmt is SAMPLE_FMT_S32.
     * - encoding: set by user.
     * - decoding: set by libavcodec.
     */
    int bits_per_raw_sample;
2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485

    /**
     * Audio channel layout.
     * - encoding: set by user.
     * - decoding: set by libavcodec.
     */
    int64_t channel_layout;

    /**
     * Request decoder to use this channel layout if it can (0 for default)
     * - encoding: unused
     * - decoding: Set by user.
     */
    int64_t request_channel_layout;
2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499

    /**
     * Ratecontrol attempt to use, at maximum, <value> of what can be used without an underflow.
     * - encoding: Set by user.
     * - decoding: unused.
     */
    float rc_max_available_vbv_use;

    /**
     * Ratecontrol attempt to use, at least, <value> times the amount needed to prevent a vbv overflow.
     * - encoding: Set by user.
     * - decoding: unused.
     */
    float rc_min_vbv_overflow_use;
2500 2501 2502 2503 2504 2505 2506

    /**
     * Hardware accelerator in use
     * - encoding: unused.
     * - decoding: Set by libavcodec
     */
    struct AVHWAccel *hwaccel;
2507 2508 2509 2510 2511 2512 2513 2514 2515

    /**
     * For some codecs, the time base is closer to the field rate than the frame rate.
     * Most notably, H.264 and MPEG-2 specify time_base as half of frame duration
     * if no telecine is used ...
     *
     * Set to time_base ticks per frame. Default 1, e.g., H.264/MPEG-2 set it to 2.
     */
    int ticks_per_frame;
2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527

    /**
     * Hardware accelerator context.
     * For some hardware accelerators, a global context needs to be
     * provided by the user. In that case, this holds display-dependent
     * data FFmpeg cannot instantiate itself. Please refer to the
     * FFmpeg HW accelerator documentation to know how to fill this
     * is. e.g. for VA API, this is a struct vaapi_context.
     * - encoding: unused
     * - decoding: Set by user
     */
    void *hwaccel_context;
2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555

    /**
     * Chromaticity coordinates of the source primaries.
     * - encoding: Set by user
     * - decoding: Set by libavcodec
     */
    enum AVColorPrimaries color_primaries;

    /**
     * Color Transfer Characteristic.
     * - encoding: Set by user
     * - decoding: Set by libavcodec
     */
    enum AVColorTransferCharacteristic color_trc;

    /**
     * YUV colorspace type.
     * - encoding: Set by user
     * - decoding: Set by libavcodec
     */
    enum AVColorSpace colorspace;

    /**
     * MPEG vs JPEG YUV range.
     * - encoding: Set by user
     * - decoding: Set by libavcodec
     */
    enum AVColorRange color_range;
2556 2557 2558 2559 2560 2561

    /**
     * This defines the location of chroma samples.
     * - encoding: Set by user
     * - decoding: Set by libavcodec
     */
darkshikari's avatar
darkshikari committed
2562
    enum AVChromaLocation chroma_sample_location;
2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582

    /**
     * The codec may call this to execute several independent things.
     * It will return only after finishing all tasks.
     * The user may replace this with some multithreaded implementation,
     * the default implementation will execute the parts serially.
     * Also see avcodec_thread_init and e.g. the --enable-pthread configure option.
     * @param c context passed also to func
     * @param count the number of things to execute
     * @param arg2 argument passed unchanged to func
     * @param ret return values of executed functions, must have space for "count" values. May be NULL.
     * @param func function that will be called count times, with jobnr from 0 to count-1.
     *             threadnr will be in the range 0 to c->thread_count-1 < MAX_THREADS and so that no
     *             two instances of func executing at the same time will have the same threadnr.
     * @return always 0 currently, but code should handle a future improvement where when any call to func
     *         returns < 0 no further calls to func may be done and < 0 is returned.
     * - encoding: Set by libavcodec, user can override.
     * - decoding: Set by libavcodec, user can override.
     */
    int (*execute2)(struct AVCodecContext *c, int (*func)(struct AVCodecContext *c2, void *arg, int jobnr, int threadnr), void *arg2, int *ret, int count);
2583 2584 2585 2586 2587 2588 2589 2590 2591 2592

    /**
     * explicit P-frame weighted prediction analysis method
     * 0: off
     * 1: fast blind weighting (one reference duplicate with -1 offset)
     * 2: smart weighting (full fade detection analysis)
     * - encoding: Set by user.
     * - decoding: unused
     */
    int weighted_p_pred;
glantau's avatar
glantau committed
2593 2594
} AVCodecContext;

2595 2596 2597
/**
 * AVCodec.
 */
glantau's avatar
glantau committed
2598
typedef struct AVCodec {
benoit's avatar
benoit committed
2599 2600 2601 2602 2603 2604
    /**
     * Name of the codec implementation.
     * The name is globally unique among encoders and among decoders (but an
     * encoder and a decoder can share the same name).
     * This is the primary way to find a codec from the user perspective.
     */
kabi's avatar
kabi committed
2605
    const char *name;
kabi's avatar
kabi committed
2606
    enum CodecType type;
michael's avatar
michael committed
2607
    enum CodecID id;
glantau's avatar
glantau committed
2608 2609
    int priv_data_size;
    int (*init)(AVCodecContext *);
kabi's avatar
kabi committed
2610
    int (*encode)(AVCodecContext *, uint8_t *buf, int buf_size, void *data);
glantau's avatar
glantau committed
2611
    int (*close)(AVCodecContext *);
2612
    int (*decode)(AVCodecContext *, void *outdata, int *outdata_size, AVPacket *avpkt);
michael's avatar
michael committed
2613 2614 2615 2616
    /**
     * Codec capabilities.
     * see CODEC_CAP_*
     */
glantau's avatar
glantau committed
2617
    int capabilities;
glantau's avatar
glantau committed
2618
    struct AVCodec *next;
michael's avatar
michael committed
2619 2620 2621 2622
    /**
     * Flush buffers.
     * Will be called when seeking
     */
michaelni's avatar
michaelni committed
2623
    void (*flush)(AVCodecContext *);
2624
    const AVRational *supported_framerates; ///< array of supported framerates, or NULL if any, array is terminated by {0,0}
benoit's avatar
benoit committed
2625
    const enum PixelFormat *pix_fmts;       ///< array of supported pixel formats, or NULL if unknown, array is terminated by -1
2626
    /**
2627 2628
     * Descriptive name for the codec, meant to be more human readable than name.
     * You should use the NULL_IF_CONFIG_SMALL() macro to define it.
2629 2630
     */
    const char *long_name;
2631
    const int *supported_samplerates;       ///< array of supported audio samplerates, or NULL if unknown, array is terminated by 0
2632
    const enum SampleFormat *sample_fmts;   ///< array of supported sample formats, or NULL if unknown, array is terminated by -1
2633
    const int64_t *channel_layouts;         ///< array of support channel layouts, or NULL if unknown. array is terminated by 0
glantau's avatar
glantau committed
2634 2635
} AVCodec;

2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681
/**
 * AVHWAccel.
 */
typedef struct AVHWAccel {
    /**
     * Name of the hardware accelerated codec.
     * The name is globally unique among encoders and among decoders (but an
     * encoder and a decoder can share the same name).
     */
    const char *name;

    /**
     * Type of codec implemented by the hardware accelerator.
     *
     * See CODEC_TYPE_xxx
     */
    enum CodecType type;

    /**
     * Codec implemented by the hardware accelerator.
     *
     * See CODEC_ID_xxx
     */
    enum CodecID id;

    /**
     * Supported pixel format.
     *
     * Only hardware accelerated formats are supported here.
     */
    enum PixelFormat pix_fmt;

    /**
     * Hardware accelerated codec capabilities.
     * see FF_HWACCEL_CODEC_CAP_*
     */
    int capabilities;

    struct AVHWAccel *next;

    /**
     * Called at the beginning of each frame or field picture.
     *
     * Meaningful frame information (codec specific) is guaranteed to
     * be parsed at this point. This function is mandatory.
     *
2682
     * Note that buf can be NULL along with buf_size set to 0.
2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714
     * Otherwise, this means the whole frame is available at this point.
     *
     * @param avctx the codec context
     * @param buf the frame data buffer base
     * @param buf_size the size of the frame in bytes
     * @return zero if successful, a negative value otherwise
     */
    int (*start_frame)(AVCodecContext *avctx, const uint8_t *buf, uint32_t buf_size);

    /**
     * Callback for each slice.
     *
     * Meaningful slice information (codec specific) is guaranteed to
     * be parsed at this point. This function is mandatory.
     *
     * @param avctx the codec context
     * @param buf the slice data buffer base
     * @param buf_size the size of the slice in bytes
     * @return zero if successful, a negative value otherwise
     */
    int (*decode_slice)(AVCodecContext *avctx, const uint8_t *buf, uint32_t buf_size);

    /**
     * Called at the end of each frame or field picture.
     *
     * The whole picture is parsed at this point and can now be sent
     * to the hardware accelerator. This function is mandatory.
     *
     * @param avctx the codec context
     * @return zero if successful, a negative value otherwise
     */
    int (*end_frame)(AVCodecContext *avctx);
2715 2716 2717 2718

    /**
     * Size of HW accelerator private data.
     *
2719 2720 2721
     * Private data is allocated with av_mallocz() before
     * AVCodecContext.get_buffer() and deallocated after
     * AVCodecContext.release_buffer().
2722 2723
     */
    int priv_data_size;
2724 2725
} AVHWAccel;

kabi's avatar
kabi committed
2726
/**
2727 2728 2729
 * four components are given, that's all.
 * the last component is alpha
 */
glantau's avatar
glantau committed
2730
typedef struct AVPicture {
kabi's avatar
kabi committed
2731
    uint8_t *data[4];
michaelni's avatar
michaelni committed
2732
    int linesize[4];       ///< number of bytes per line
glantau's avatar
glantau committed
2733 2734
} AVPicture;

2735
#if LIBAVCODEC_VERSION_MAJOR < 53
tmmm's avatar
tmmm committed
2736
/**
2737 2738 2739 2740
 * AVPaletteControl
 * This structure defines a method for communicating palette changes
 * between and demuxer and a decoder.
 *
benoit's avatar
 
benoit committed
2741
 * @deprecated Use AVPacket to send palette changes instead.
2742
 * This is totally broken.
tmmm's avatar
tmmm committed
2743
 */
2744
#define AVPALETTE_SIZE 1024
michael's avatar
michael committed
2745
#define AVPALETTE_COUNT 256
tmmm's avatar
tmmm committed
2746 2747
typedef struct AVPaletteControl {

diego's avatar
diego committed
2748 2749
    /* Demuxer sets this to 1 to indicate the palette has changed;
     * decoder resets to 0. */
tmmm's avatar
tmmm committed
2750 2751
    int palette_changed;

2752 2753
    /* 4-byte ARGB palette entries, stored in native byte order; note that
     * the individual palette components should be on a 8-bit scale; if
diego's avatar
diego committed
2754 2755
     * the palette data comes from an IBM VGA native format, the component
     * data is probably 6 bits in size and needs to be scaled. */
2756
    unsigned int palette[AVPALETTE_COUNT];
tmmm's avatar
tmmm committed
2757

2758
} AVPaletteControl attribute_deprecated;
2759
#endif
tmmm's avatar
tmmm committed
2760

michael's avatar
michael committed
2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778
enum AVSubtitleType {
    SUBTITLE_NONE,

    SUBTITLE_BITMAP,                ///< A bitmap, pict will be set

    /**
     * Plain text, the text field must be set by the decoder and is
     * authoritative. ass and pict fields may contain approximations.
     */
    SUBTITLE_TEXT,

    /**
     * Formatted text, the ass field must be set by the decoder and is
     * authoritative. pict and text fields may contain approximations.
     */
    SUBTITLE_ASS,
};

2779
typedef struct AVSubtitleRect {
2780 2781 2782 2783 2784
    int x;         ///< top left corner  of pict, undefined when pict is not set
    int y;         ///< top left corner  of pict, undefined when pict is not set
    int w;         ///< width            of pict, undefined when pict is not set
    int h;         ///< height           of pict, undefined when pict is not set
    int nb_colors; ///< number of colors in pict, undefined when pict is not set
2785 2786 2787 2788 2789 2790

    /**
     * data+linesize for the bitmap of this subtitle.
     * can be set for text/ass as well once they where rendered
     */
    AVPicture pict;
2791 2792 2793 2794 2795 2796 2797 2798 2799 2800
    enum AVSubtitleType type;

    char *text;                     ///< 0 terminated plain UTF-8 text

    /**
     * 0 terminated ASS/SSA compatible event line.
     * The pressentation of this is unaffected by the other values in this
     * struct.
     */
    char *ass;
2801 2802 2803 2804 2805 2806
} AVSubtitleRect;

typedef struct AVSubtitle {
    uint16_t format; /* 0 = graphics */
    uint32_t start_display_time; /* relative to packet pts, in ms */
    uint32_t end_display_time; /* relative to packet pts, in ms */
2807
    unsigned num_rects;
2808
    AVSubtitleRect **rects;
2809
    int64_t pts;    ///< Same as packet pts, in AV_TIME_BASE
bellard's avatar
bellard committed
2810 2811
} AVSubtitle;

2812 2813
/* packet functions */

2814 2815 2816 2817
/**
 * @deprecated use NULL instead
 */
attribute_deprecated void av_destruct_packet_nofree(AVPacket *pkt);
2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840

/**
 * Default packet destructor.
 */
void av_destruct_packet(AVPacket *pkt);

/**
 * Initialize optional fields of a packet with default values.
 *
 * @param pkt packet
 */
void av_init_packet(AVPacket *pkt);

/**
 * Allocate the payload of a packet and initialize its fields with
 * default values.
 *
 * @param pkt packet
 * @param size wanted payload size
 * @return 0 if OK, AVERROR_xxx otherwise
 */
int av_new_packet(AVPacket *pkt, int size);

2841 2842 2843 2844 2845 2846 2847 2848
/**
 * Reduce packet size, correctly zeroing padding
 *
 * @param pkt packet
 * @param size new size
 */
void av_shrink_packet(AVPacket *pkt, int size);

2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859
/**
 * @warning This is a hack - the packet memory allocation stuff is broken. The
 * packet is allocated if it was not really allocated.
 */
int av_dup_packet(AVPacket *pkt);

/**
 * Free a packet.
 *
 * @param pkt packet to free
 */
ramiro's avatar
ramiro committed
2860
void av_free_packet(AVPacket *pkt);
bellard's avatar
bellard committed
2861

glantau's avatar
glantau committed
2862 2863 2864
/* resample.c */

struct ReSampleContext;
2865
struct AVResampleContext;
glantau's avatar
glantau committed
2866 2867 2868

typedef struct ReSampleContext ReSampleContext;

2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898
#if LIBAVCODEC_VERSION_MAJOR < 53
/**
 * @deprecated Use av_audio_resample_init() instead.
 */
attribute_deprecated ReSampleContext *audio_resample_init(int output_channels, int input_channels,
                                                          int output_rate, int input_rate);
#endif
/**
 *  Initializes audio resampling context
 *
 * @param output_channels  number of output channels
 * @param input_channels   number of input channels
 * @param output_rate      output sample rate
 * @param input_rate       input sample rate
 * @param sample_fmt_out   requested output sample format
 * @param sample_fmt_in    input sample format
 * @param filter_length    length of each FIR filter in the filterbank relative to the cutoff freq
 * @param log2_phase_count log2 of the number of entries in the polyphase filterbank
 * @param linear           If 1 then the used FIR filter will be linearly interpolated
                           between the 2 closest, if 0 the closest will be used
 * @param cutoff           cutoff frequency, 1.0 corresponds to half the output sampling rate
 * @return allocated ReSampleContext, NULL if error occured
 */
ReSampleContext *av_audio_resample_init(int output_channels, int input_channels,
                                        int output_rate, int input_rate,
                                        enum SampleFormat sample_fmt_out,
                                        enum SampleFormat sample_fmt_in,
                                        int filter_length, int log2_phase_count,
                                        int linear, double cutoff);

glantau's avatar
glantau committed
2899 2900 2901
int audio_resample(ReSampleContext *s, short *output, short *input, int nb_samples);
void audio_resample_close(ReSampleContext *s);

2902 2903 2904 2905

/**
 * Initializes an audio resampler.
 * Note, if either rate is not an integer then simply scale both rates up so they are.
2906 2907 2908 2909 2910
 * @param filter_length length of each FIR filter in the filterbank relative to the cutoff freq
 * @param log2_phase_count log2 of the number of entries in the polyphase filterbank
 * @param linear If 1 then the used FIR filter will be linearly interpolated
                 between the 2 closest, if 0 the closest will be used
 * @param cutoff cutoff frequency, 1.0 corresponds to half the output sampling rate
2911
 */
michael's avatar
michael committed
2912
struct AVResampleContext *av_resample_init(int out_rate, int in_rate, int filter_length, int log2_phase_count, int linear, double cutoff);
2913 2914 2915 2916 2917 2918 2919 2920 2921 2922

/**
 * resamples.
 * @param src an array of unconsumed samples
 * @param consumed the number of samples of src which have been consumed are returned here
 * @param src_size the number of unconsumed samples available
 * @param dst_size the amount of space in samples available in dst
 * @param update_ctx If this is 0 then the context will not be modified, that way several channels can be resampled with the same context.
 * @return the number of samples written in dst or -1 if an error occurred
 */
2923
int av_resample(struct AVResampleContext *c, short *dst, short *src, int *consumed, int src_size, int dst_size, int update_ctx);
2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937


/**
 * Compensates samplerate/timestamp drift. The compensation is done by changing
 * the resampler parameters, so no audible clicks or similar distortions occur
 * @param compensation_distance distance in output samples over which the compensation should be performed
 * @param sample_delta number of output samples which should be output less
 *
 * example: av_resample_compensate(c, 10, 500)
 * here instead of 510 samples only 500 samples would be output
 *
 * note, due to rounding the actual compensation might be slightly different,
 * especially if the compensation_distance is large and the in_rate used during init is small
 */
michael's avatar
michael committed
2938
void av_resample_compensate(struct AVResampleContext *c, int sample_delta, int compensation_distance);
2939
void av_resample_close(struct AVResampleContext *c);
2940

michael's avatar
michael committed
2941 2942 2943
/**
 * Allocate memory for a picture.  Call avpicture_free to free it.
 *
diego's avatar
diego committed
2944 2945 2946 2947 2948
 * @param picture the picture to be filled in
 * @param pix_fmt the format of the picture
 * @param width the width of the picture
 * @param height the height of the picture
 * @return zero if successful, a negative value if not
michael's avatar
michael committed
2949
 */
2950
int avpicture_alloc(AVPicture *picture, enum PixelFormat pix_fmt, int width, int height);
michael's avatar
michael committed
2951

2952 2953 2954
/**
 * Free a picture previously allocated by avpicture_alloc().
 *
diego's avatar
diego committed
2955
 * @param picture the AVPicture to be freed
2956
 */
michael's avatar
michael committed
2957 2958
void avpicture_free(AVPicture *picture);

2959
/**
diego's avatar
diego committed
2960
 * Fill in the AVPicture fields.
2961 2962 2963 2964 2965 2966
 * The fields of the given AVPicture are filled in by using the 'ptr' address
 * which points to the image data buffer. Depending on the specified picture
 * format, one or multiple image data pointers and line sizes will be set.
 * If a planar format is specified, several pointers will be set pointing to
 * the different picture planes and the line sizes of the different planes
 * will be stored in the lines_sizes array.
2967
 * Call with ptr == NULL to get the required size for the ptr buffer.
2968
 *
diego's avatar
diego committed
2969
 * @param picture AVPicture whose fields are to be filled in
2970
 * @param ptr Buffer which will contain or contains the actual image data
diego's avatar
diego committed
2971 2972 2973 2974
 * @param pix_fmt The format in which the picture data is stored.
 * @param width the width of the image in pixels
 * @param height the height of the image in pixels
 * @return size of the image data in bytes
2975
 */
kabi's avatar
kabi committed
2976
int avpicture_fill(AVPicture *picture, uint8_t *ptr,
2977
                   enum PixelFormat pix_fmt, int width, int height);
2978
int avpicture_layout(const AVPicture* src, enum PixelFormat pix_fmt, int width, int height,
romansh's avatar
 
romansh committed
2979
                     unsigned char *dest, int dest_size);
2980 2981 2982 2983

/**
 * Calculate the size in bytes that a picture of the given width and height
 * would occupy if stored in the given picture format.
2984 2985 2986
 * Note that this returns the size of a compact representation as generated
 * by avpicture_layout, which can be smaller than the size required for e.g.
 * avpicture_fill.
2987
 *
diego's avatar
diego committed
2988 2989 2990
 * @param pix_fmt the given picture format
 * @param width the width of the image
 * @param height the height of the image
2991
 * @return Image data size in bytes or -1 on error (e.g. too large dimensions).
2992
 */
2993 2994 2995
int avpicture_get_size(enum PixelFormat pix_fmt, int width, int height);
void avcodec_get_chroma_sub_sample(enum PixelFormat pix_fmt, int *h_shift, int *v_shift);
const char *avcodec_get_pix_fmt_name(enum PixelFormat pix_fmt);
2996
void avcodec_set_dimensions(AVCodecContext *s, int width, int height);
2997

2998
#if LIBAVCODEC_VERSION_MAJOR < 53
2999
/**
3000
 * Returns the pixel format corresponding to the name name.
3001
 *
3002
 * If there is no pixel format with name name, then looks for a
3003
 * pixel format with the name corresponding to the native endian
3004
 * format of name.
3005 3006 3007
 * For example in a little-endian system, first looks for "gray16",
 * then for "gray16le".
 *
3008
 * Finally if no pixel format has been found, returns PIX_FMT_NONE.
3009 3010
 *
 * @deprecated Deprecated in favor of av_get_pix_fmt().
3011
 */
3012 3013
attribute_deprecated enum PixelFormat avcodec_get_pix_fmt(const char* name);
#endif
3014 3015 3016 3017 3018 3019 3020

/**
 * Returns a value representing the fourCC code associated to the
 * pixel format pix_fmt, or 0 if no associated fourCC code can be
 * found.
 */
unsigned int avcodec_pix_fmt_to_codec_tag(enum PixelFormat pix_fmt);
3021

3022 3023 3024 3025 3026 3027
#define FF_LOSS_RESOLUTION  0x0001 /**< loss due to resolution change */
#define FF_LOSS_DEPTH       0x0002 /**< loss due to color depth change */
#define FF_LOSS_COLORSPACE  0x0004 /**< loss due to color space conversion */
#define FF_LOSS_ALPHA       0x0008 /**< loss of alpha bits */
#define FF_LOSS_COLORQUANT  0x0010 /**< loss due to color quantization */
#define FF_LOSS_CHROMA      0x0020 /**< loss of chroma (e.g. RGB to gray conversion) */
3028

3029
/**
3030 3031 3032 3033 3034 3035 3036 3037
 * Computes what kind of losses will occur when converting from one specific
 * pixel format to another.
 * When converting from one pixel format to another, information loss may occur.
 * For example, when converting from RGB24 to GRAY, the color information will
 * be lost. Similarly, other losses occur when converting from some formats to
 * other formats. These losses can involve loss of chroma, but also loss of
 * resolution, loss of color depth, loss due to the color space conversion, loss
 * of the alpha bits or loss due to color quantization.
diego's avatar
diego committed
3038 3039
 * avcodec_get_fix_fmt_loss() informs you about the various types of losses
 * which will occur when converting from one pixel format to another.
3040
 *
diego's avatar
diego committed
3041 3042
 * @param[in] dst_pix_fmt destination pixel format
 * @param[in] src_pix_fmt source pixel format
3043 3044
 * @param[in] has_alpha Whether the source pixel format alpha channel is used.
 * @return Combination of flags informing you what kind of losses will occur.
3045
 */
3046
int avcodec_get_pix_fmt_loss(enum PixelFormat dst_pix_fmt, enum PixelFormat src_pix_fmt,
3047
                             int has_alpha);
3048 3049

/**
3050 3051 3052 3053 3054
 * Finds the best pixel format to convert to given a certain source pixel
 * format.  When converting from one pixel format to another, information loss
 * may occur.  For example, when converting from RGB24 to GRAY, the color
 * information will be lost. Similarly, other losses occur when converting from
 * some formats to other formats. avcodec_find_best_pix_fmt() searches which of
diego's avatar
diego committed
3055 3056
 * the given pixel formats should be used to suffer the least amount of loss.
 * The pixel formats from which it chooses one, are determined by the
3057
 * pix_fmt_mask parameter.
3058 3059 3060 3061 3062 3063 3064
 *
 * @code
 * src_pix_fmt = PIX_FMT_YUV420P;
 * pix_fmt_mask = (1 << PIX_FMT_YUV422P) || (1 << PIX_FMT_RGB24);
 * dst_pix_fmt = avcodec_find_best_pix_fmt(pix_fmt_mask, src_pix_fmt, alpha, &loss);
 * @endcode
 *
diego's avatar
diego committed
3065 3066
 * @param[in] pix_fmt_mask bitmask determining which pixel format to choose from
 * @param[in] src_pix_fmt source pixel format
3067 3068 3069
 * @param[in] has_alpha Whether the source pixel format alpha channel is used.
 * @param[out] loss_ptr Combination of flags informing you what kind of losses will occur.
 * @return The best pixel format to convert to or -1 if none was found.
3070
 */
3071
enum PixelFormat avcodec_find_best_pix_fmt(int64_t pix_fmt_mask, enum PixelFormat src_pix_fmt,
3072 3073
                              int has_alpha, int *loss_ptr);

benoit's avatar
 
benoit committed
3074 3075 3076 3077 3078

/**
 * Print in buf the string corresponding to the pixel format with
 * number pix_fmt, or an header if pix_fmt is negative.
 *
3079 3080 3081
 * @param[in] buf the buffer where to write the string
 * @param[in] buf_size the size of buf
 * @param[in] pix_fmt the number of the pixel format to print the corresponding info string, or
benoit's avatar
 
benoit committed
3082 3083 3084
 * a negative value to print the corresponding header.
 * Meaningful values for obtaining a pixel format info vary from 0 to PIX_FMT_NB -1.
 */
3085
void avcodec_pix_fmt_string (char *buf, int buf_size, enum PixelFormat pix_fmt);
benoit's avatar
 
benoit committed
3086

bellard's avatar
bellard committed
3087 3088
#define FF_ALPHA_TRANSP       0x0001 /* image has some totally transparent pixels */
#define FF_ALPHA_SEMI_TRANSP  0x0002 /* image has some transparent pixels */
3089 3090 3091 3092 3093

/**
 * Tell if an image really has transparent alpha values.
 * @return ored mask of FF_ALPHA_xxx constants
 */
3094
int img_get_alpha_info(const AVPicture *src,
3095
                       enum PixelFormat pix_fmt, int width, int height);
bellard's avatar
bellard committed
3096

3097
/* deinterlace a picture */
3098
/* deinterlace - if not supported return -1 */
3099
int avpicture_deinterlace(AVPicture *dst, const AVPicture *src,
3100
                          enum PixelFormat pix_fmt, int width, int height);
glantau's avatar
glantau committed
3101 3102 3103

/* external high level API */

stefano's avatar
stefano committed
3104 3105
/**
 * If c is NULL, returns the first registered codec,
3106
 * if c is non-NULL, returns the next registered codec after c,
stefano's avatar
stefano committed
3107 3108
 * or NULL if c is the last one.
 */
michael's avatar
michael committed
3109
AVCodec *av_codec_next(AVCodec *c);
glantau's avatar
glantau committed
3110

stefano's avatar
stefano committed
3111 3112 3113
/**
 * Returns the LIBAVCODEC_VERSION_INT constant.
 */
3114
unsigned avcodec_version(void);
stefano's avatar
stefano committed
3115

3116 3117 3118
/**
 * Returns the libavcodec build-time configuration.
 */
3119
const char *avcodec_configuration(void);
3120 3121 3122 3123

/**
 * Returns the libavcodec license.
 */
3124
const char *avcodec_license(void);
3125

takis's avatar
takis committed
3126 3127 3128
/**
 * Initializes libavcodec.
 *
3129
 * @warning This function must be called before any other libavcodec
takis's avatar
takis committed
3130 3131
 * function.
 */
glantau's avatar
glantau committed
3132 3133
void avcodec_init(void);

3134
#if LIBAVCODEC_VERSION_MAJOR < 53
3135 3136 3137 3138
/**
 * @deprecated Deprecated in favor of avcodec_register().
 */
attribute_deprecated void register_avcodec(AVCodec *codec);
3139
#endif
3140

stefano's avatar
stefano committed
3141
/**
3142
 * Register the codec codec and initialize libavcodec.
stefano's avatar
stefano committed
3143 3144 3145
 *
 * @see avcodec_init()
 */
3146
void avcodec_register(AVCodec *codec);
takis's avatar
takis committed
3147 3148

/**
3149
 * Finds a registered encoder with a matching codec ID.
takis's avatar
takis committed
3150
 *
diego's avatar
diego committed
3151
 * @param id CodecID of the requested encoder
takis's avatar
takis committed
3152 3153
 * @return An encoder if one was found, NULL otherwise.
 */
glantau's avatar
glantau committed
3154
AVCodec *avcodec_find_encoder(enum CodecID id);
takis's avatar
takis committed
3155 3156

/**
3157
 * Finds a registered encoder with the specified name.
takis's avatar
takis committed
3158
 *
diego's avatar
diego committed
3159
 * @param name name of the requested encoder
takis's avatar
takis committed
3160 3161
 * @return An encoder if one was found, NULL otherwise.
 */
3162
AVCodec *avcodec_find_encoder_by_name(const char *name);
takis's avatar
takis committed
3163 3164

/**
3165
 * Finds a registered decoder with a matching codec ID.
takis's avatar
takis committed
3166
 *
diego's avatar
diego committed
3167
 * @param id CodecID of the requested decoder
takis's avatar
takis committed
3168 3169
 * @return A decoder if one was found, NULL otherwise.
 */
glantau's avatar
glantau committed
3170
AVCodec *avcodec_find_decoder(enum CodecID id);
takis's avatar
takis committed
3171 3172

/**
3173
 * Finds a registered decoder with the specified name.
takis's avatar
takis committed
3174
 *
diego's avatar
diego committed
3175
 * @param name name of the requested decoder
takis's avatar
takis committed
3176 3177
 * @return A decoder if one was found, NULL otherwise.
 */
glantau's avatar
glantau committed
3178 3179 3180
AVCodec *avcodec_find_decoder_by_name(const char *name);
void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode);

takis's avatar
takis committed
3181 3182 3183 3184 3185
/**
 * Sets the fields of the given AVCodecContext to default values.
 *
 * @param s The AVCodecContext of which the fields should be set to default values.
 */
michaelni's avatar
michaelni committed
3186
void avcodec_get_context_defaults(AVCodecContext *s);
takis's avatar
takis committed
3187

3188 3189 3190 3191
/** THIS FUNCTION IS NOT YET PART OF THE PUBLIC API!
 *  we WILL change its arguments and name a few times! */
void avcodec_get_context_defaults2(AVCodecContext *s, enum CodecType);

takis's avatar
takis committed
3192 3193 3194 3195 3196 3197 3198
/**
 * Allocates an AVCodecContext and sets its fields to default values.  The
 * resulting struct can be deallocated by simply calling av_free().
 *
 * @return An AVCodecContext filled with default values or NULL on failure.
 * @see avcodec_get_context_defaults
 */
mellum's avatar
mellum committed
3199
AVCodecContext *avcodec_alloc_context(void);
takis's avatar
takis committed
3200

3201 3202 3203 3204
/** THIS FUNCTION IS NOT YET PART OF THE PUBLIC API!
 *  we WILL change its arguments and name a few times! */
AVCodecContext *avcodec_alloc_context2(enum CodecType);

takis's avatar
takis committed
3205 3206 3207 3208 3209
/**
 * Sets the fields of the given AVFrame to default values.
 *
 * @param pic The AVFrame of which the fields should be set to default values.
 */
mellum's avatar
mellum committed
3210
void avcodec_get_frame_defaults(AVFrame *pic);
takis's avatar
takis committed
3211 3212 3213 3214 3215 3216 3217 3218

/**
 * Allocates an AVFrame and sets its fields to default values.  The resulting
 * struct can be deallocated by simply calling av_free().
 *
 * @return An AVFrame filled with default values or NULL on failure.
 * @see avcodec_get_frame_defaults
 */
michaelni's avatar
michaelni committed
3219
AVFrame *avcodec_alloc_frame(void);
michaelni's avatar
michaelni committed
3220

michaelni's avatar
michaelni committed
3221 3222
int avcodec_default_get_buffer(AVCodecContext *s, AVFrame *pic);
void avcodec_default_release_buffer(AVCodecContext *s, AVFrame *pic);
michael's avatar
michael committed
3223 3224
int avcodec_default_reget_buffer(AVCodecContext *s, AVFrame *pic);
void avcodec_align_dimensions(AVCodecContext *s, int *width, int *height);
takis's avatar
takis committed
3225 3226 3227 3228 3229 3230 3231 3232 3233

/**
 * Checks if the given dimension of a picture is valid, meaning that all
 * bytes of the picture can be addressed with a signed int.
 *
 * @param[in] w Width of the picture.
 * @param[in] h Height of the picture.
 * @return Zero if valid, a negative value if invalid.
 */
3234
int avcodec_check_dimensions(void *av_log_ctx, unsigned int w, unsigned int h);
michael's avatar
michael committed
3235
enum PixelFormat avcodec_default_get_format(struct AVCodecContext *s, const enum PixelFormat * fmt);
michaelni's avatar
michaelni committed
3236

michael's avatar
1l  
michael committed
3237 3238
int avcodec_thread_init(AVCodecContext *s, int thread_count);
void avcodec_thread_free(AVCodecContext *s);
3239 3240
int avcodec_thread_execute(AVCodecContext *s, int (*func)(AVCodecContext *c2, void *arg2),void *arg, int *ret, int count, int size);
int avcodec_default_execute(AVCodecContext *c, int (*func)(AVCodecContext *c2, void *arg2),void *arg, int *ret, int count, int size);
3241
int avcodec_default_execute2(AVCodecContext *c, int (*func)(AVCodecContext *c2, void *arg2, int, int),void *arg, int *ret, int count);
3242 3243
//FIXME func typedef

michaelni's avatar
michaelni committed
3244
/**
takis's avatar
takis committed
3245 3246 3247 3248 3249 3250 3251
 * Initializes the AVCodecContext to use the given AVCodec. Prior to using this
 * function the context has to be allocated.
 *
 * The functions avcodec_find_decoder_by_name(), avcodec_find_encoder_by_name(),
 * avcodec_find_decoder() and avcodec_find_encoder() provide an easy way for
 * retrieving a codec.
 *
diego's avatar
diego committed
3252
 * @warning This function is not thread safe!
takis's avatar
takis committed
3253 3254
 *
 * @code
3255
 * avcodec_register_all();
takis's avatar
takis committed
3256 3257 3258 3259 3260 3261 3262 3263 3264 3265
 * codec = avcodec_find_decoder(CODEC_ID_H264);
 * if (!codec)
 *     exit(1);
 *
 * context = avcodec_alloc_context();
 *
 * if (avcodec_open(context, codec) < 0)
 *     exit(1);
 * @endcode
 *
diego's avatar
diego committed
3266
 * @param avctx The context which will be set up to use the given codec.
takis's avatar
takis committed
3267
 * @param codec The codec to use within the context.
diego's avatar
diego committed
3268
 * @return zero on success, a negative value on error
takis's avatar
takis committed
3269
 * @see avcodec_alloc_context, avcodec_find_decoder, avcodec_find_encoder
michaelni's avatar
michaelni committed
3270
 */
glantau's avatar
glantau committed
3271
int avcodec_open(AVCodecContext *avctx, AVCodec *codec);
michaelni's avatar
michaelni committed
3272

3273
#if LIBAVCODEC_VERSION_MAJOR < 53
3274
/**
3275
 * Decodes an audio frame from buf into samples.
3276 3277
 * Wrapper function which calls avcodec_decode_audio3.
 *
3278
 * @deprecated Use avcodec_decode_audio3 instead.
3279 3280 3281 3282 3283 3284 3285
 * @param avctx the codec context
 * @param[out] samples the output buffer
 * @param[in,out] frame_size_ptr the output buffer size in bytes
 * @param[in] buf the input buffer
 * @param[in] buf_size the input buffer size in bytes
 * @return On error a negative value is returned, otherwise the number of bytes
 * used or zero if no frame could be decompressed.
3286 3287 3288 3289 3290 3291 3292
 */
attribute_deprecated int avcodec_decode_audio2(AVCodecContext *avctx, int16_t *samples,
                         int *frame_size_ptr,
                         const uint8_t *buf, int buf_size);
#endif

/**
3293 3294
 * Decodes the audio frame of size avpkt->size from avpkt->data into samples.
 * Some decoders may support multiple frames in a single AVPacket, such
3295 3296 3297
 * decoders would then just decode the first frame. In this case,
 * avcodec_decode_audio3 has to be called again with an AVPacket that contains
 * the remaining data in order to decode the second frame etc.
3298
 * If no frame
3299
 * could be outputted, frame_size_ptr is zero. Otherwise, it is the
3300
 * decompressed frame size in bytes.
takis's avatar
takis committed
3301
 *
3302
 * @warning You must set frame_size_ptr to the allocated size of the
3303
 * output buffer before calling avcodec_decode_audio3().
takis's avatar
takis committed
3304
 *
3305
 * @warning The input buffer must be FF_INPUT_BUFFER_PADDING_SIZE larger than
takis's avatar
takis committed
3306 3307 3308
 * the actual read bytes because some optimized bitstream readers read 32 or 64
 * bits at once and could read over the end.
 *
3309
 * @warning The end of the input buffer avpkt->data should be set to 0 to ensure that
takis's avatar
takis committed
3310
 * no overreading happens for damaged MPEG streams.
3311
 *
3312
 * @note You might have to align the input buffer avpkt->data and output buffer
diego's avatar
diego committed
3313
 * samples. The alignment requirements depend on the CPU: On some CPUs it isn't
takis's avatar
takis committed
3314
 * necessary at all, on others it won't work at all if not aligned and on others
3315 3316 3317 3318 3319
 * it will work but it will have an impact on performance.
 *
 * In practice, avpkt->data should have 4 byte alignment at minimum and
 * samples should be 16 byte aligned unless the CPU doesn't need it
 * (AltiVec and SSE do).
takis's avatar
takis committed
3320
 *
diego's avatar
diego committed
3321
 * @param avctx the codec context
3322
 * @param[out] samples the output buffer, sample type in avctx->sample_fmt
diego's avatar
diego committed
3323
 * @param[in,out] frame_size_ptr the output buffer size in bytes
3324
 * @param[in] avpkt The input AVPacket containing the input buffer.
3325 3326 3327
 *            You can create such packet with av_init_packet() and by then setting
 *            data and size, some decoders might in addition need other fields.
 *            All decoders are designed to use the least fields possible though.
takis's avatar
takis committed
3328
 * @return On error a negative value is returned, otherwise the number of bytes
3329
 * used or zero if no frame data was decompressed (used) from the input AVPacket.
3330
 */
3331
int avcodec_decode_audio3(AVCodecContext *avctx, int16_t *samples,
glantau's avatar
glantau committed
3332
                         int *frame_size_ptr,
3333
                         AVPacket *avpkt);
takis's avatar
takis committed
3334

3335
#if LIBAVCODEC_VERSION_MAJOR < 53
takis's avatar
takis committed
3336
/**
3337
 * Decodes a video frame from buf into picture.
3338 3339
 * Wrapper function which calls avcodec_decode_video2.
 *
3340
 * @deprecated Use avcodec_decode_video2 instead.
3341 3342 3343 3344 3345 3346 3347
 * @param avctx the codec context
 * @param[out] picture The AVFrame in which the decoded video frame will be stored.
 * @param[in] buf the input buffer
 * @param[in] buf_size the size of the input buffer in bytes
 * @param[in,out] got_picture_ptr Zero if no frame could be decompressed, otherwise, it is nonzero.
 * @return On error a negative value is returned, otherwise the number of bytes
 * used or zero if no frame could be decompressed.
3348 3349 3350 3351 3352 3353 3354
 */
attribute_deprecated int avcodec_decode_video(AVCodecContext *avctx, AVFrame *picture,
                         int *got_picture_ptr,
                         const uint8_t *buf, int buf_size);
#endif

/**
3355
 * Decodes the video frame of size avpkt->size from avpkt->data into picture.
3356 3357
 * Some decoders may support multiple frames in a single AVPacket, such
 * decoders would then just decode the first frame.
takis's avatar
takis committed
3358
 *
3359
 * @warning The input buffer must be FF_INPUT_BUFFER_PADDING_SIZE larger than
takis's avatar
takis committed
3360 3361 3362
 * the actual read bytes because some optimized bitstream readers read 32 or 64
 * bits at once and could read over the end.
 *
3363
 * @warning The end of the input buffer buf should be set to 0 to ensure that
takis's avatar
takis committed
3364 3365
 * no overreading happens for damaged MPEG streams.
 *
3366 3367
 * @note You might have to align the input buffer avpkt->data.
 * The alignment requirements depend on the CPU: on some CPUs it isn't
takis's avatar
takis committed
3368
 * necessary at all, on others it won't work at all if not aligned and on others
3369 3370 3371
 * it will work but it will have an impact on performance.
 *
 * In practice, avpkt->data should have 4 byte alignment at minimum.
takis's avatar
takis committed
3372
 *
3373
 * @note Some codecs have a delay between input and output, these need to be
ramiro's avatar
ramiro committed
3374
 * fed with avpkt->data=NULL, avpkt->size=0 at the end to return the remaining frames.
3375
 *
diego's avatar
diego committed
3376
 * @param avctx the codec context
takis's avatar
takis committed
3377
 * @param[out] picture The AVFrame in which the decoded video frame will be stored.
3378
 * @param[in] avpkt The input AVpacket containing the input buffer.
3379 3380 3381 3382
 *            You can create such packet with av_init_packet() and by then setting
 *            data and size, some decoders might in addition need other fields like
 *            flags&PKT_FLAG_KEY. All decoders are designed to use the least
 *            fields possible.
diego's avatar
diego committed
3383
 * @param[in,out] got_picture_ptr Zero if no frame could be decompressed, otherwise, it is nonzero.
takis's avatar
takis committed
3384 3385 3386
 * @return On error a negative value is returned, otherwise the number of bytes
 * used or zero if no frame could be decompressed.
 */
3387
int avcodec_decode_video2(AVCodecContext *avctx, AVFrame *picture,
glantau's avatar
glantau committed
3388
                         int *got_picture_ptr,
3389
                         AVPacket *avpkt);
3390

3391
#if LIBAVCODEC_VERSION_MAJOR < 53
diego's avatar
diego committed
3392 3393 3394
/* Decode a subtitle message. Return -1 if error, otherwise return the
 * number of bytes used. If no subtitle could be decompressed,
 * got_sub_ptr is zero. Otherwise, the subtitle is stored in *sub. */
3395
attribute_deprecated int avcodec_decode_subtitle(AVCodecContext *avctx, AVSubtitle *sub,
bellard's avatar
bellard committed
3396 3397
                            int *got_sub_ptr,
                            const uint8_t *buf, int buf_size);
3398 3399 3400 3401
#endif

/**
 * Decodes a subtitle message.
3402
 * Returns a negative value on error, otherwise returns the number of bytes used.
3403 3404
 * If no subtitle could be decompressed, got_sub_ptr is zero.
 * Otherwise, the subtitle is stored in *sub.
3405 3406 3407 3408 3409 3410 3411 3412 3413
 *
 * @param avctx the codec context
 * @param[out] sub The AVSubtitle in which the decoded subtitle will be stored.
 * @param[in,out] got_sub_ptr Zero if no subtitle could be decompressed, otherwise, it is nonzero.
 * @param[in] avpkt The input AVPacket containing the input buffer.
 */
int avcodec_decode_subtitle2(AVCodecContext *avctx, AVSubtitle *sub,
                            int *got_sub_ptr,
                            AVPacket *avpkt);
3414
int avcodec_parse_frame(AVCodecContext *avctx, uint8_t **pdata,
3415
                        int *data_size_ptr,
kabi's avatar
kabi committed
3416
                        uint8_t *buf, int buf_size);
takis's avatar
takis committed
3417 3418

/**
3419
 * Encodes an audio frame from samples into buf.
takis's avatar
takis committed
3420
 *
3421
 * @note The output buffer should be at least FF_MIN_BUFFER_SIZE bytes large.
3422
 * However, for PCM audio the user will know how much space is needed
3423
 * because it depends on the value passed in buf_size as described
3424
 * below. In that case a lower value can be used.
takis's avatar
takis committed
3425
 *
diego's avatar
diego committed
3426 3427 3428 3429
 * @param avctx the codec context
 * @param[out] buf the output buffer
 * @param[in] buf_size the output buffer size
 * @param[in] samples the input buffer containing the samples
3430
 * The number of samples read from this buffer is frame_size*channels,
3431 3432 3433
 * both of which are defined in avctx.
 * For PCM audio the number of samples read from samples is equal to
 * buf_size * input_sample_size / output_sample_size.
diego's avatar
diego committed
3434
 * @return On error a negative value is returned, on success zero or the number
3435
 * of bytes used to encode the data read from the input buffer.
takis's avatar
takis committed
3436
 */
3437
int avcodec_encode_audio(AVCodecContext *avctx, uint8_t *buf, int buf_size,
glantau's avatar
glantau committed
3438
                         const short *samples);
takis's avatar
takis committed
3439 3440

/**
3441
 * Encodes a video frame from pict into buf.
3442
 * The input picture should be
3443
 * stored using a specific format, namely avctx.pix_fmt.
takis's avatar
takis committed
3444
 *
diego's avatar
diego committed
3445 3446 3447 3448
 * @param avctx the codec context
 * @param[out] buf the output buffer for the bitstream of encoded frame
 * @param[in] buf_size the size of the output buffer in bytes
 * @param[in] pict the input picture to encode
takis's avatar
takis committed
3449
 * @return On error a negative value is returned, on success zero or the number
3450
 * of bytes used from the output buffer.
takis's avatar
takis committed
3451
 */
3452
int avcodec_encode_video(AVCodecContext *avctx, uint8_t *buf, int buf_size,
michaelni's avatar
michaelni committed
3453
                         const AVFrame *pict);
3454
int avcodec_encode_subtitle(AVCodecContext *avctx, uint8_t *buf, int buf_size,
bellard's avatar
bellard committed
3455
                            const AVSubtitle *sub);
glantau's avatar
glantau committed
3456 3457 3458

int avcodec_close(AVCodecContext *avctx);

3459 3460 3461 3462 3463 3464
/**
 * Register all the codecs, parsers and bitstream filters which were enabled at
 * configuration time. If you do not call this function you can select exactly
 * which formats you want to support, by using the individual registration
 * functions.
 *
3465
 * @see avcodec_register
3466 3467 3468
 * @see av_register_codec_parser
 * @see av_register_bitstream_filter
 */
glantau's avatar
glantau committed
3469
void avcodec_register_all(void);
glantau's avatar
glantau committed
3470

3471 3472 3473
/**
 * Flush buffers, should be called when seeking or when switching to a different stream.
 */
michaelni's avatar
michaelni committed
3474 3475
void avcodec_flush_buffers(AVCodecContext *avctx);

3476 3477
void avcodec_default_free_buffers(AVCodecContext *s);

takis's avatar
takis committed
3478
/* misc useful functions */
michaelni's avatar
michaelni committed
3479 3480

/**
3481
 * Returns a single letter to describe the given picture type pict_type.
3482
 *
diego's avatar
diego committed
3483
 * @param[in] pict_type the picture type
3484
 * @return A single character representing the picture type.
michaelni's avatar
michaelni committed
3485 3486 3487
 */
char av_get_pict_type_char(int pict_type);

3488
/**
3489 3490
 * Returns codec bits per sample.
 *
diego's avatar
diego committed
3491
 * @param[in] codec_id the codec
3492
 * @return Number of bits per sample or zero if unknown for the given codec.
3493 3494
 */
int av_get_bits_per_sample(enum CodecID codec_id);
3495

conrad's avatar
conrad committed
3496 3497 3498 3499 3500 3501 3502 3503
/**
 * Returns sample format bits per sample.
 *
 * @param[in] sample_fmt the sample format
 * @return Number of bits per sample or zero if unknown for the given sample format.
 */
int av_get_bits_per_sample_format(enum SampleFormat sample_fmt);

bellard's avatar
bellard committed
3504 3505 3506 3507 3508
/* frame parsing */
typedef struct AVCodecParserContext {
    void *priv_data;
    struct AVCodecParser *parser;
    int64_t frame_offset; /* offset of the current frame */
3509
    int64_t cur_offset; /* current offset
bellard's avatar
bellard committed
3510
                           (incremented by each av_parser_parse()) */
3511
    int64_t next_frame_offset; /* offset of the next frame */
bellard's avatar
bellard committed
3512
    /* video info */
diego's avatar
diego committed
3513
    int pict_type; /* XXX: Put it back in AVCodecContext. */
3514 3515 3516 3517 3518
    /**
     * This field is used for proper frame duration computation in lavf.
     * It signals, how much longer the frame duration of the current frame
     * is compared to normal frame duration.
     *
3519
     * frame_duration = (1 + repeat_pict) * time_base
3520 3521 3522
     *
     * It is used by codecs like H.264 to display telecined material.
     */
diego's avatar
diego committed
3523
    int repeat_pict; /* XXX: Put it back in AVCodecContext. */
bellard's avatar
bellard committed
3524 3525 3526 3527 3528 3529
    int64_t pts;     /* pts of the current frame */
    int64_t dts;     /* dts of the current frame */

    /* private data */
    int64_t last_pts;
    int64_t last_dts;
michael's avatar
michael committed
3530
    int fetch_timestamp;
bellard's avatar
bellard committed
3531 3532 3533 3534 3535 3536

#define AV_PARSER_PTS_NB 4
    int cur_frame_start_index;
    int64_t cur_frame_offset[AV_PARSER_PTS_NB];
    int64_t cur_frame_pts[AV_PARSER_PTS_NB];
    int64_t cur_frame_dts[AV_PARSER_PTS_NB];
3537

michael's avatar
michael committed
3538 3539
    int flags;
#define PARSER_FLAG_COMPLETE_FRAMES           0x0001
benoit's avatar
 
benoit committed
3540 3541

    int64_t offset;      ///< byte offset from starting packet start
3542
    int64_t cur_frame_end[AV_PARSER_PTS_NB];
3543 3544 3545 3546 3547 3548 3549 3550

    /*!
     * Set by parser to 1 for key frames and 0 for non-key frames.
     * It is initialized to -1, so if the parser doesn't set this flag,
     * old-style fallback using FF_I_TYPE picture type as key frames
     * will be used.
     */
    int key_frame;
3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567

    /**
     * Time difference in stream time base units from the pts of this
     * packet to the point at which the output from the decoder has converged
     * independent from the availability of previous frames. That is, the
     * frames are virtually identical no matter if decoding started from
     * the very first frame or from this keyframe.
     * Is AV_NOPTS_VALUE if unknown.
     * This field is not the display duration of the current frame.
     *
     * The purpose of this field is to allow seeking in streams that have no
     * keyframes in the conventional sense. It corresponds to the
     * recovery point SEI in H.264 and match_time_delta in NUT. It is also
     * essential for some types of subtitle streams to ensure that all
     * subtitles are correctly displayed after seeking.
     */
    int64_t convergence_duration;
3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608

    // Timestamp generation support:
    /**
     * Synchronization point for start of timestamp generation.
     *
     * Set to >0 for sync point, 0 for no sync point and <0 for undefined
     * (default).
     *
     * For example, this corresponds to presence of H.264 buffering period
     * SEI message.
     */
    int dts_sync_point;

    /**
     * Offset of the current timestamp against last timestamp sync point in
     * units of AVCodecContext.time_base.
     *
     * Set to INT_MIN when dts_sync_point unused. Otherwise, it must
     * contain a valid timestamp offset.
     *
     * Note that the timestamp of sync point has usually a nonzero
     * dts_ref_dts_delta, which refers to the previous sync point. Offset of
     * the next frame after timestamp sync point will be usually 1.
     *
     * For example, this corresponds to H.264 cpb_removal_delay.
     */
    int dts_ref_dts_delta;

    /**
     * Presentation delay of current frame in units of AVCodecContext.time_base.
     *
     * Set to INT_MIN when dts_sync_point unused. Otherwise, it must
     * contain valid non-negative timestamp delta (presentation time of a frame
     * must not lie in the past).
     *
     * This delay represents the difference between decoding and presentation
     * time of the frame.
     *
     * For example, this corresponds to H.264 dpb_output_delay.
     */
    int pts_dts_delta;
3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625

    /**
     * Position of the packet in file.
     *
     * Analogous to cur_frame_pts/dts
     */
    int64_t cur_frame_pos[AV_PARSER_PTS_NB];

    /**
     * Byte position of currently parsed frame in stream.
     */
    int64_t pos;

    /**
     * Previous frame byte position.
     */
    int64_t last_pos;
bellard's avatar
bellard committed
3626 3627 3628
} AVCodecParserContext;

typedef struct AVCodecParser {
michael's avatar
michael committed
3629
    int codec_ids[5]; /* several codec IDs are permitted */
bellard's avatar
bellard committed
3630 3631
    int priv_data_size;
    int (*parser_init)(AVCodecParserContext *s);
3632
    int (*parser_parse)(AVCodecParserContext *s,
bellard's avatar
bellard committed
3633
                        AVCodecContext *avctx,
3634
                        const uint8_t **poutbuf, int *poutbuf_size,
bellard's avatar
bellard committed
3635 3636
                        const uint8_t *buf, int buf_size);
    void (*parser_close)(AVCodecParserContext *s);
3637
    int (*split)(AVCodecContext *avctx, const uint8_t *buf, int buf_size);
bellard's avatar
bellard committed
3638 3639 3640
    struct AVCodecParser *next;
} AVCodecParser;

michael's avatar
michael committed
3641
AVCodecParser *av_parser_next(AVCodecParser *c);
bellard's avatar
bellard committed
3642 3643 3644

void av_register_codec_parser(AVCodecParser *parser);
AVCodecParserContext *av_parser_init(int codec_id);
3645

3646
#if LIBAVCODEC_VERSION_MAJOR < 53
3647
attribute_deprecated
3648
int av_parser_parse(AVCodecParserContext *s,
bellard's avatar
bellard committed
3649
                    AVCodecContext *avctx,
3650
                    uint8_t **poutbuf, int *poutbuf_size,
bellard's avatar
bellard committed
3651 3652
                    const uint8_t *buf, int buf_size,
                    int64_t pts, int64_t dts);
3653
#endif
3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689

/**
 * Parse a packet.
 *
 * @param s             parser context.
 * @param avctx         codec context.
 * @param poutbuf       set to pointer to parsed buffer or NULL if not yet finished.
 * @param poutbuf_size  set to size of parsed buffer or zero if not yet finished.
 * @param buf           input buffer.
 * @param buf_size      input length, to signal EOF, this should be 0 (so that the last frame can be output).
 * @param pts           input presentation timestamp.
 * @param dts           input decoding timestamp.
 * @param pos           input byte position in stream.
 * @return the number of bytes of the input bitstream used.
 *
 * Example:
 * @code
 *   while(in_len){
 *       len = av_parser_parse2(myparser, AVCodecContext, &data, &size,
 *                                        in_data, in_len,
 *                                        pts, dts, pos);
 *       in_data += len;
 *       in_len  -= len;
 *
 *       if(size)
 *          decode_frame(data, size);
 *   }
 * @endcode
 */
int av_parser_parse2(AVCodecParserContext *s,
                     AVCodecContext *avctx,
                     uint8_t **poutbuf, int *poutbuf_size,
                     const uint8_t *buf, int buf_size,
                     int64_t pts, int64_t dts,
                     int64_t pos);

3690 3691
int av_parser_change(AVCodecParserContext *s,
                     AVCodecContext *avctx,
3692
                     uint8_t **poutbuf, int *poutbuf_size,
3693
                     const uint8_t *buf, int buf_size, int keyframe);
bellard's avatar
bellard committed
3694 3695
void av_parser_close(AVCodecParserContext *s);

3696 3697

typedef struct AVBitStreamFilterContext {
michael's avatar
michael committed
3698
    void *priv_data;
3699 3700 3701 3702 3703 3704 3705 3706
    struct AVBitStreamFilter *filter;
    AVCodecParserContext *parser;
    struct AVBitStreamFilterContext *next;
} AVBitStreamFilterContext;


typedef struct AVBitStreamFilter {
    const char *name;
michael's avatar
michael committed
3707
    int priv_data_size;
3708 3709 3710 3711
    int (*filter)(AVBitStreamFilterContext *bsfc,
                  AVCodecContext *avctx, const char *args,
                  uint8_t **poutbuf, int *poutbuf_size,
                  const uint8_t *buf, int buf_size, int keyframe);
3712
    void (*close)(AVBitStreamFilterContext *bsfc);
3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723
    struct AVBitStreamFilter *next;
} AVBitStreamFilter;

void av_register_bitstream_filter(AVBitStreamFilter *bsf);
AVBitStreamFilterContext *av_bitstream_filter_init(const char *name);
int av_bitstream_filter_filter(AVBitStreamFilterContext *bsfc,
                               AVCodecContext *avctx, const char *args,
                               uint8_t **poutbuf, int *poutbuf_size,
                               const uint8_t *buf, int buf_size, int keyframe);
void av_bitstream_filter_close(AVBitStreamFilterContext *bsf);

michael's avatar
michael committed
3724
AVBitStreamFilter *av_bitstream_filter_next(AVBitStreamFilter *f);
3725

bellard's avatar
bellard committed
3726
/* memory */
3727 3728

/**
3729 3730 3731 3732
 * Reallocates the given block if it is not large enough, otherwise it
 * does nothing.
 *
 * @see av_realloc
3733
 */
kabi's avatar
kabi committed
3734
void *av_fast_realloc(void *ptr, unsigned int *size, unsigned int min_size);
3735

3736 3737 3738 3739 3740 3741 3742 3743 3744 3745 3746 3747 3748 3749
/**
 * Allocates a buffer, reusing the given one if large enough.
 *
 * Contrary to av_fast_realloc the current buffer contents might not be
 * preserved and on error the old buffer is freed, thus no special
 * handling to avoid memleaks is necessary.
 *
 * @param ptr pointer to pointer to already allocated buffer, overwritten with pointer to new buffer
 * @param size size of the buffer *ptr points to
 * @param min_size minimum size of *ptr buffer after returning, *ptr will be NULL and
 *                 *size 0 if an error occurred.
 */
void av_fast_malloc(void *ptr, unsigned int *size, unsigned int min_size);

3750 3751 3752
/**
 * Copy image 'src' to 'dst'.
 */
3753
void av_picture_copy(AVPicture *dst, const AVPicture *src,
3754
                     enum PixelFormat pix_fmt, int width, int height);
3755

3756
/**
diego's avatar
diego committed
3757
 * Crop image top and left side.
3758
 */
3759
int av_picture_crop(AVPicture *dst, const AVPicture *src,
3760
                    enum PixelFormat pix_fmt, int top_band, int left_band);
3761

3762
/**
diego's avatar
diego committed
3763
 * Pad image.
3764
 */
3765
int av_picture_pad(AVPicture *dst, const AVPicture *src, int height, int width, enum PixelFormat pix_fmt,
3766 3767
            int padtop, int padbottom, int padleft, int padright, int *color);

3768
unsigned int av_xiphlacing(unsigned char *s, unsigned int v);
mru's avatar
mru committed
3769

3770
/**
3771
 * Parses str and put in width_ptr and height_ptr the detected values.
3772
 *
diego's avatar
diego committed
3773
 * @return 0 in case of a successful parsing, a negative value otherwise
3774 3775 3776 3777 3778 3779 3780 3781 3782 3783
 * @param[in] str the string to parse: it has to be a string in the format
 * <width>x<height> or a valid video frame size abbreviation.
 * @param[in,out] width_ptr pointer to the variable which will contain the detected
 * frame width value
 * @param[in,out] height_ptr pointer to the variable which will contain the detected
 * frame height value
 */
int av_parse_video_frame_size(int *width_ptr, int *height_ptr, const char *str);

/**
3784
 * Parses str and put in frame_rate the detected values.
3785
 *
diego's avatar
diego committed
3786
 * @return 0 in case of a successful parsing, a negative value otherwise
3787
 * @param[in] str the string to parse: it has to be a string in the format
3788
 * <frame_rate_num>/<frame_rate_den>, a float number or a valid video rate abbreviation
3789 3790 3791 3792 3793
 * @param[in,out] frame_rate pointer to the AVRational which will contain the detected
 * frame rate
 */
int av_parse_video_frame_rate(AVRational *frame_rate, const char *str);

3794 3795
/* error handling */
#if EINVAL > 0
diego's avatar
diego committed
3796 3797
#define AVERROR(e) (-(e)) /**< Returns a negative error code from a POSIX error code, to return from library functions. */
#define AVUNERROR(e) (-(e)) /**< Returns a POSIX error code from a library function error return value. */
3798
#else
diego's avatar
diego committed
3799
/* Some platforms have E* and errno already negated. */
3800 3801 3802 3803
#define AVERROR(e) (e)
#define AVUNERROR(e) (e)
#endif
#define AVERROR_UNKNOWN     AVERROR(EINVAL)  /**< unknown error */
diego's avatar
diego committed
3804 3805
#define AVERROR_IO          AVERROR(EIO)     /**< I/O error */
#define AVERROR_NUMEXPECTED AVERROR(EDOM)    /**< Number syntax expected in filename. */
3806 3807 3808
#define AVERROR_INVALIDDATA AVERROR(EINVAL)  /**< invalid data found */
#define AVERROR_NOMEM       AVERROR(ENOMEM)  /**< not enough memory */
#define AVERROR_NOFMT       AVERROR(EILSEQ)  /**< unknown format */
diego's avatar
diego committed
3809
#define AVERROR_NOTSUPP     AVERROR(ENOSYS)  /**< Operation not supported. */
benoit's avatar
 
benoit committed
3810
#define AVERROR_NOENT       AVERROR(ENOENT)  /**< No such file or directory. */
pross's avatar
pross committed
3811
#define AVERROR_EOF         AVERROR(EPIPE)   /**< End of file. */
ramiro's avatar
ramiro committed
3812
#define AVERROR_PATCHWELCOME    -MKTAG('P','A','W','E') /**< Not yet implemented in FFmpeg. Patches welcome. */
3813

3814
/**
3815 3816 3817
 * Logs a generic warning message about a missing feature. This function is
 * intended to be used internally by FFmpeg (libavcodec, libavformat, etc.)
 * only, and would normally not be used by applications.
3818 3819 3820 3821 3822 3823 3824 3825 3826 3827 3828
 * @param[in] avc a pointer to an arbitrary struct of which the first field is
 * a pointer to an AVClass struct
 * @param[in] feature string containing the name of the missing feature
 * @param[in] want_sample indicates if samples are wanted which exhibit this feature.
 * If want_sample is non-zero, additional verbage will be added to the log
 * message which tells the user how to report samples to the development
 * mailing list.
 */
void av_log_missing_feature(void *avc, const char *feature, int want_sample);

/**
3829 3830 3831
 * Logs a generic warning message asking for a sample. This function is
 * intended to be used internally by FFmpeg (libavcodec, libavformat, etc.)
 * only, and would normally not be used by applications.
3832 3833 3834 3835 3836 3837
 * @param[in] avc a pointer to an arbitrary struct of which the first field is
 * a pointer to an AVClass struct
 * @param[in] msg string containing an optional message, or NULL if no message
 */
void av_log_ask_for_sample(void *avc, const char *msg);

3838
/**
3839
 * Registers the hardware accelerator hwaccel.
3840 3841 3842 3843 3844 3845 3846 3847 3848 3849
 */
void av_register_hwaccel(AVHWAccel *hwaccel);

/**
 * If hwaccel is NULL, returns the first registered hardware accelerator,
 * if hwaccel is non-NULL, returns the next registered hardware accelerator
 * after hwaccel, or NULL if hwaccel is the last one.
 */
AVHWAccel *av_hwaccel_next(AVHWAccel *hwaccel);

3850 3851 3852 3853 3854 3855 3856 3857 3858 3859 3860 3861 3862

/**
 * Lock operation used by lockmgr
 */
enum AVLockOp {
  AV_LOCK_CREATE,  ///< Create a mutex
  AV_LOCK_OBTAIN,  ///< Lock the mutex
  AV_LOCK_RELEASE, ///< Unlock the mutex
  AV_LOCK_DESTROY, ///< Free mutex resources
};

/**
 * Register a user provided lock manager supporting the operations
3863
 * specified by AVLockOp. mutex points to a (void *) where the
3864 3865 3866 3867 3868 3869 3870 3871 3872 3873 3874 3875
 * lockmgr should store/get a pointer to a user allocated mutex. It's
 * NULL upon AV_LOCK_CREATE and != NULL for all other ops.
 *
 * @param cb User defined callback. Note: FFmpeg may invoke calls to this
 *           callback during the call to av_lockmgr_register().
 *           Thus, the application must be prepared to handle that.
 *           If cb is set to NULL the lockmgr will be unregistered.
 *           Also note that during unregistration the previously registered
 *           lockmgr callback may also be invoked.
 */
int av_lockmgr_register(int (*cb)(void **mutex, enum AVLockOp op));

3876
#endif /* AVCODEC_AVCODEC_H */