avcodec.h 104 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
33
#define LIBAVCODEC_VERSION_MINOR 18
stefano's avatar
stefano committed
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,
glantau's avatar
glantau committed
194

diego's avatar
diego committed
195
    /* various PCM "codecs" */
196
    CODEC_ID_PCM_S16LE= 0x10000,
glantau's avatar
glantau committed
197 198 199 200 201 202 203
    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,
204 205 206 207 208 209 210 211 212
    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,
213
    CODEC_ID_PCM_ZORK,
214
    CODEC_ID_PCM_S16LE_PLANAR,
215
    CODEC_ID_PCM_DVD,
216
    CODEC_ID_PCM_F32BE,
217 218 219
    CODEC_ID_PCM_F32LE,
    CODEC_ID_PCM_F64BE,
    CODEC_ID_PCM_F64LE,
220

diego's avatar
diego committed
221
    /* various ADPCM codecs */
222
    CODEC_ID_ADPCM_IMA_QT= 0x11000,
223
    CODEC_ID_ADPCM_IMA_WAV,
224 225
    CODEC_ID_ADPCM_IMA_DK3,
    CODEC_ID_ADPCM_IMA_DK4,
226
    CODEC_ID_ADPCM_IMA_WS,
227
    CODEC_ID_ADPCM_IMA_SMJPEG,
228
    CODEC_ID_ADPCM_MS,
tmmm's avatar
tmmm committed
229
    CODEC_ID_ADPCM_4XM,
230 231
    CODEC_ID_ADPCM_XA,
    CODEC_ID_ADPCM_ADX,
232
    CODEC_ID_ADPCM_EA,
romansh's avatar
 
romansh committed
233
    CODEC_ID_ADPCM_G726,
234
    CODEC_ID_ADPCM_CT,
235
    CODEC_ID_ADPCM_SWF,
236
    CODEC_ID_ADPCM_YAMAHA,
237 238 239
    CODEC_ID_ADPCM_SBPRO_4,
    CODEC_ID_ADPCM_SBPRO_3,
    CODEC_ID_ADPCM_SBPRO_2,
240
    CODEC_ID_ADPCM_THP,
vitor's avatar
vitor committed
241
    CODEC_ID_ADPCM_IMA_AMV,
aurel's avatar
aurel committed
242 243 244
    CODEC_ID_ADPCM_EA_R1,
    CODEC_ID_ADPCM_EA_R3,
    CODEC_ID_ADPCM_EA_R2,
aurel's avatar
aurel committed
245
    CODEC_ID_ADPCM_IMA_EA_SEAD,
aurel's avatar
aurel committed
246
    CODEC_ID_ADPCM_IMA_EA_EACS,
247
    CODEC_ID_ADPCM_EA_XAS,
benoit's avatar
benoit committed
248
    CODEC_ID_ADPCM_EA_MAXIS_XA,
249
    CODEC_ID_ADPCM_IMA_ISS,
250

251 252
    /* AMR */
    CODEC_ID_AMR_NB= 0x12000,
253 254
    CODEC_ID_AMR_WB,

255
    /* RealAudio codecs*/
256
    CODEC_ID_RA_144= 0x13000,
257
    CODEC_ID_RA_288,
258 259

    /* various DPCM codecs */
260
    CODEC_ID_ROQ_DPCM= 0x14000,
261
    CODEC_ID_INTERPLAY_DPCM,
262
    CODEC_ID_XAN_DPCM,
263
    CODEC_ID_SOL_DPCM,
264

265
    /* audio codecs */
266
    CODEC_ID_MP2= 0x15000,
267
    CODEC_ID_MP3, ///< preferred ID for decoding MPEG audio layer 1, 2 or 3
268 269 270 271 272 273 274 275 276 277 278 279
    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
280
    CODEC_ID_FLAC,
rtognimp's avatar
rtognimp committed
281
    CODEC_ID_MP3ADU,
282
    CODEC_ID_MP3ON4,
283
    CODEC_ID_SHORTEN,
michael's avatar
michael committed
284
    CODEC_ID_ALAC,
285
    CODEC_ID_WESTWOOD_SND1,
286
    CODEC_ID_GSM, ///< as in Berlin toast format
rtognimp's avatar
rtognimp committed
287
    CODEC_ID_QDM2,
288
    CODEC_ID_COOK,
289
    CODEC_ID_TRUESPEECH,
290
    CODEC_ID_TTA,
kostya's avatar
kostya committed
291
    CODEC_ID_SMACKAUDIO,
banan's avatar
banan committed
292
    CODEC_ID_QCELP,
kostya's avatar
kostya committed
293
    CODEC_ID_WAVPACK,
294
    CODEC_ID_DSICINAUDIO,
kostya's avatar
kostya committed
295
    CODEC_ID_IMC,
kostya's avatar
kostya committed
296
    CODEC_ID_MUSEPACK7,
297
    CODEC_ID_MLP,
diego's avatar
diego committed
298
    CODEC_ID_GSM_MS, /* as found in WAV */
banan's avatar
banan committed
299
    CODEC_ID_ATRAC3,
michael's avatar
michael committed
300
    CODEC_ID_VOXWARE,
kostya's avatar
kostya committed
301
    CODEC_ID_APE,
banan's avatar
banan committed
302
    CODEC_ID_NELLYMOSER,
kostya's avatar
kostya committed
303
    CODEC_ID_MUSEPACK8,
reimar's avatar
reimar committed
304
    CODEC_ID_SPEEX,
305 306
    CODEC_ID_WMAVOICE,
    CODEC_ID_WMAPRO,
307
    CODEC_ID_WMALOSSLESS,
banan's avatar
banan committed
308
    CODEC_ID_ATRAC3P,
jbr's avatar
jbr committed
309
    CODEC_ID_EAC3,
310
    CODEC_ID_SIPR,
michael's avatar
michael committed
311
    CODEC_ID_MP1,
312

bellard's avatar
bellard committed
313
    /* subtitle codecs */
314 315
    CODEC_ID_DVD_SUBTITLE= 0x17000,
    CODEC_ID_DVB_SUBTITLE,
316
    CODEC_ID_TEXT,  ///< raw UTF-8 text
317
    CODEC_ID_XSUB,
318
    CODEC_ID_SSA,
319
    CODEC_ID_MOV_TEXT,
320

diego's avatar
diego committed
321
    /* other specific kind of codecs (generally used for attachments) */
322 323
    CODEC_ID_TTF= 0x18000,

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

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

glantau's avatar
glantau committed
330
enum CodecType {
331
    CODEC_TYPE_UNKNOWN = -1,
glantau's avatar
glantau committed
332 333
    CODEC_TYPE_VIDEO,
    CODEC_TYPE_AUDIO,
334
    CODEC_TYPE_DATA,
bellard's avatar
bellard committed
335
    CODEC_TYPE_SUBTITLE,
336
    CODEC_TYPE_ATTACHMENT,
337
    CODEC_TYPE_NB
glantau's avatar
glantau committed
338 339
};

340 341 342
/**
 * all in native-endian format
 */
glantau's avatar
glantau committed
343
enum SampleFormat {
mru's avatar
mru committed
344
    SAMPLE_FMT_NONE = -1,
345 346
    SAMPLE_FMT_U8,              ///< unsigned 8 bits
    SAMPLE_FMT_S16,             ///< signed 16 bits
347
    SAMPLE_FMT_S32,             ///< signed 32 bits
348
    SAMPLE_FMT_FLT,             ///< float
pross's avatar
pross committed
349
    SAMPLE_FMT_DBL,             ///< double
350
    SAMPLE_FMT_NB               ///< Number of sample formats. DO NOT USE if dynamically linking to libavcodec
glantau's avatar
glantau committed
351 352
};

353
/* Audio channel masks */
354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373
#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.
374 375

/* Audio channel convenience macros */
376 377 378 379 380 381 382 383 384 385 386
#define CH_LAYOUT_MONO              (CH_FRONT_CENTER)
#define CH_LAYOUT_STEREO            (CH_FRONT_LEFT|CH_FRONT_RIGHT)
#define CH_LAYOUT_SURROUND          (CH_LAYOUT_STEREO|CH_FRONT_CENTER)
#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)
#define CH_LAYOUT_7POINT1           (CH_LAYOUT_5POINT1|CH_BACK_LEFT|CH_BACK_RIGHT)
#define CH_LAYOUT_7POINT1_WIDE      (CH_LAYOUT_SURROUND|CH_LOW_FREQUENCY|\
                                          CH_BACK_LEFT|CH_BACK_RIGHT|\
                                          CH_FRONT_LEFT_OF_CENTER|CH_FRONT_RIGHT_OF_CENTER)
#define CH_LAYOUT_STEREO_DOWNMIX    (CH_STEREO_LEFT|CH_STEREO_RIGHT)
387

glantau's avatar
glantau committed
388
/* in bytes */
389
#define AVCODEC_MAX_AUDIO_FRAME_SIZE 192000 // 1 second of 48khz 32bit audio
glantau's avatar
glantau committed
390

391
/**
392
 * Required number of additionally allocated bytes at the end of the input bitstream for decoding.
diego's avatar
diego committed
393 394 395 396
 * 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.
397 398 399
 */
#define FF_INPUT_BUFFER_PADDING_SIZE 8

400
/**
diego's avatar
diego committed
401 402
 * minimum encoding buffer size
 * Used to avoid some checks during header writing.
403 404 405
 */
#define FF_MIN_BUFFER_SIZE 16384

michael's avatar
michael committed
406

407
/**
408
 * motion estimation type.
409
 */
410
enum Motion_Est_ID {
michael's avatar
michael committed
411
    ME_ZERO = 1,    ///< no search, that is use 0,0 vector whenever one is needed
412 413 414
    ME_FULL,
    ME_LOG,
    ME_PHODS,
michael's avatar
michael committed
415 416 417 418 419
    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
420
    ME_TESA,        ///< transformed exhaustive search algorithm
421 422
};

michael's avatar
michael committed
423
enum AVDiscard{
diego's avatar
diego committed
424 425
    /* 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
426 427 428 429 430 431 432 433
    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
};

michaelni's avatar
michaelni committed
434 435 436
typedef struct RcOverride{
    int start_frame;
    int end_frame;
diego's avatar
diego committed
437
    int qscale; // If this is 0 then quality_factor will be used instead.
michaelni's avatar
michaelni committed
438 439 440
    float quality_factor;
} RcOverride;

441
#define FF_MAX_B_FRAMES 16
442

michaelni's avatar
michaelni committed
443
/* encoding support
diego's avatar
diego committed
444 445
   These flags can be passed in AVCodecContext.flags before initialization.
   Note: Not everything is supported yet.
michaelni's avatar
michaelni committed
446
*/
glantau's avatar
glantau committed
447

diego's avatar
diego committed
448 449 450 451 452 453
#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
454 455
/**
 * The parent program guarantees that the input for B-frames containing
diego's avatar
diego committed
456
 * streams is not written to for at least s->max_b_frames+1 frames, if
michael's avatar
michael committed
457 458
 * this is not set the input will be copied.
 */
michaelni's avatar
michaelni committed
459
#define CODEC_FLAG_INPUT_PRESERVED 0x0100
diego's avatar
diego committed
460 461 462 463 464 465 466 467
#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
468 469 470 471 472 473
#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).
474
/* Fx : Flag for h263+ extra options */
diego's avatar
diego committed
475 476 477 478 479
#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
480 481
#define CODEC_FLAG_OBMC           0x00000001 ///< OBMC
#define CODEC_FLAG_LOOP_FILTER    0x00000800 ///< loop filter
michael's avatar
michael committed
482 483
#define CODEC_FLAG_H263P_SLICE_STRUCT 0x10000000
#define CODEC_FLAG_INTERLACED_ME  0x20000000 ///< interlaced motion estimation
diego's avatar
diego committed
484
#define CODEC_FLAG_SVCD_SCAN_OFFSET 0x40000000 ///< Will reserve space for SVCD scan offset user data.
michael's avatar
michael committed
485
#define CODEC_FLAG_CLOSED_GOP     0x80000000
diego's avatar
diego committed
486 487 488 489 490 491
#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
492
#define CODEC_FLAG2_MIXED_REFS    0x00000040 ///< H.264 one reference per partition, as opposed to one reference per macroblock
lorenm's avatar
lorenm committed
493 494 495
#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
496 497 498 499 500 501 502
#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.
503
#define CODEC_FLAG2_BIT_RESERVOIR 0x00020000 ///< Use a bit reservoir when encoding if possible
504

505
/* Unsupported options :
506 507
 *              Syntax Arithmetic coding (SAC)
 *              Reference Picture Selection
508
 *              Independent Segment Decoding */
509
/* /Fx */
glantau's avatar
glantau committed
510 511
/* codec capabilities */

diego's avatar
diego committed
512
#define CODEC_CAP_DRAW_HORIZ_BAND 0x0001 ///< Decoder can use draw_horiz_band callback.
michaelni's avatar
michaelni committed
513 514 515 516 517
/**
 * Codec uses get_buffer() for allocating buffers.
 * direct rendering method 1
 */
#define CODEC_CAP_DR1             0x0002
diego's avatar
diego committed
518
/* If 'parse_only' field is true, then avcodec_parse_frame() can be used. */
519
#define CODEC_CAP_PARSE_ONLY      0x0004
520
#define CODEC_CAP_TRUNCATED       0x0008
diego's avatar
diego committed
521
/* Codec can export data for HW decoding (XvMC). */
522
#define CODEC_CAP_HWACCEL         0x0010
523
/**
diego's avatar
diego committed
524 525
 * 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.
526
 */
527
#define CODEC_CAP_DELAY           0x0020
528 529 530 531 532
/**
 * 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
533 534 535 536
/**
 * Codec can export data for HW decoding (VDPAU).
 */
#define CODEC_CAP_HWACCEL_VDPAU    0x0080
glantau's avatar
glantau committed
537

diego's avatar
diego committed
538
//The following defines may change, don't expect compatibility if you use them.
539
#define MB_TYPE_INTRA4x4   0x0001
diego's avatar
diego committed
540 541
#define MB_TYPE_INTRA16x16 0x0002 //FIXME H.264-specific
#define MB_TYPE_INTRA_PCM  0x0004 //FIXME H.264-specific
542 543 544 545 546
#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
547
#define MB_TYPE_DIRECT2    0x0100 //FIXME
548 549 550 551 552 553 554 555 556 557 558 559 560 561
#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, ...)

562 563
/**
 * Pan Scan area.
diego's avatar
diego committed
564 565
 * This specifies the area which should be displayed.
 * Note there may be multiple such areas for one frame.
566 567 568
 */
typedef struct AVPanScan{
    /**
diego's avatar
diego committed
569 570 571
     * id
     * - encoding: Set by user.
     * - decoding: Set by libavcodec.
572 573 574 575 576
     */
    int id;

    /**
     * width and height in 1/16 pel
diego's avatar
diego committed
577 578
     * - encoding: Set by user.
     * - decoding: Set by libavcodec.
579 580 581 582 583
     */
    int width;
    int height;

    /**
diego's avatar
diego committed
584 585 586
     * position of the top left corner in 1/16 pel for up to 3 fields/frames
     * - encoding: Set by user.
     * - decoding: Set by libavcodec.
587 588 589 590
     */
    int16_t position[3][2];
}AVPanScan;

michaelni's avatar
michaelni committed
591
#define FF_COMMON_FRAME \
michaelni's avatar
michaelni committed
592 593
    /**\
     * pointer to the picture planes.\
diego's avatar
diego committed
594
     * This might be different from the first allocated byte\
michaelni's avatar
michaelni committed
595 596 597
     * - encoding: \
     * - decoding: \
     */\
michaelni's avatar
michaelni committed
598 599 600
    uint8_t *data[4];\
    int linesize[4];\
    /**\
diego's avatar
diego committed
601 602
     * 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.\
603 604
     * - encoding: \
     * - decoding: \
michaelni's avatar
michaelni committed
605 606 607 608
     */\
    uint8_t *base[4];\
    /**\
     * 1 -> keyframe, 0-> not\
diego's avatar
diego committed
609 610
     * - encoding: Set by libavcodec.\
     * - decoding: Set by libavcodec.\
michaelni's avatar
michaelni committed
611 612 613 614
     */\
    int key_frame;\
\
    /**\
diego's avatar
diego committed
615 616 617
     * 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
618 619 620 621
     */\
    int pict_type;\
\
    /**\
michael's avatar
michael committed
622
     * presentation timestamp in time_base units (time when frame should be shown to user)\
diego's avatar
diego committed
623 624 625
     * 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
626
     */\
627
    int64_t pts;\
michaelni's avatar
michaelni committed
628 629
\
    /**\
diego's avatar
diego committed
630
     * picture number in bitstream order\
631
     * - encoding: set by\
diego's avatar
diego committed
632
     * - decoding: Set by libavcodec.\
michaelni's avatar
michaelni committed
633 634 635
     */\
    int coded_picture_number;\
    /**\
diego's avatar
diego committed
636
     * picture number in display order\
637
     * - encoding: set by\
diego's avatar
diego committed
638
     * - decoding: Set by libavcodec.\
michaelni's avatar
michaelni committed
639 640 641 642
     */\
    int display_picture_number;\
\
    /**\
643
     * quality (between 1 (good) and FF_LAMBDA_MAX (bad)) \
diego's avatar
diego committed
644 645
     * - encoding: Set by libavcodec. for coded_picture (and set by user for input).\
     * - decoding: Set by libavcodec.\
michaelni's avatar
michaelni committed
646
     */\
647
    int quality; \
michaelni's avatar
michaelni committed
648 649 650
\
    /**\
     * buffer age (1->was last buffer and dint change, 2->..., ...).\
diego's avatar
diego committed
651
     * Set to INT_MAX if the buffer has not been used yet.\
652
     * - encoding: unused\
diego's avatar
diego committed
653
     * - decoding: MUST be set by get_buffer().\
michaelni's avatar
michaelni committed
654 655 656 657 658
     */\
    int age;\
\
    /**\
     * is this picture used as reference\
659 660
     * 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.\
661
     * - encoding: unused\
diego's avatar
diego committed
662
     * - decoding: Set by libavcodec. (before get_buffer() call)).\
michaelni's avatar
michaelni committed
663 664 665 666 667
     */\
    int reference;\
\
    /**\
     * QP table\
668
     * - encoding: unused\
diego's avatar
diego committed
669
     * - decoding: Set by libavcodec.\
michaelni's avatar
michaelni committed
670 671 672 673
     */\
    int8_t *qscale_table;\
    /**\
     * QP store stride\
674
     * - encoding: unused\
diego's avatar
diego committed
675
     * - decoding: Set by libavcodec.\
michaelni's avatar
michaelni committed
676 677 678 679
     */\
    int qstride;\
\
    /**\
diego's avatar
diego committed
680
     * mbskip_table[mb]>=1 if MB didn't change\
michaelni's avatar
michaelni committed
681
     * stride= mb_width = (width+15)>>4\
682
     * - encoding: unused\
diego's avatar
diego committed
683
     * - decoding: Set by libavcodec.\
michaelni's avatar
michaelni committed
684 685
     */\
    uint8_t *mbskip_table;\
686 687
\
    /**\
diego's avatar
diego committed
688
     * motion vector table\
michael's avatar
michael committed
689 690 691 692 693 694 695
     * @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
696 697
     * - encoding: Set by user.\
     * - decoding: Set by libavcodec.\
698 699 700 701
     */\
    int16_t (*motion_val[2])[2];\
\
    /**\
diego's avatar
diego committed
702
     * macroblock type table\
703
     * mb_type_base + mb_width + 2\
diego's avatar
diego committed
704 705
     * - encoding: Set by user.\
     * - decoding: Set by libavcodec.\
706 707 708 709
     */\
    uint32_t *mb_type;\
\
    /**\
michael's avatar
michael committed
710 711
     * log2 of the size of the block which a single vector in motion_val represents: \
     * (4->16x16, 3->8x8, 2-> 4x4, 1-> 2x2)\
712
     * - encoding: unused\
diego's avatar
diego committed
713
     * - decoding: Set by libavcodec.\
714 715
     */\
    uint8_t motion_subsample_log2;\
michaelni's avatar
michaelni committed
716 717 718
\
    /**\
     * for some private data of the user\
719
     * - encoding: unused\
diego's avatar
diego committed
720
     * - decoding: Set by user.\
michaelni's avatar
michaelni committed
721 722
     */\
    void *opaque;\
723 724 725
\
    /**\
     * error\
diego's avatar
diego committed
726
     * - encoding: Set by libavcodec. if flags&CODEC_FLAG_PSNR.\
727
     * - decoding: unused\
728 729
     */\
    uint64_t error[4];\
michaelni's avatar
michaelni committed
730 731
\
    /**\
diego's avatar
diego committed
732 733 734 735
     * 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
736 737
     */\
    int type;\
738 739
    \
    /**\
diego's avatar
diego committed
740
     * When decoding, this signals how much the picture must be delayed.\
741
     * extra_delay = repeat_pict / (2*fps)\
742
     * - encoding: unused\
diego's avatar
diego committed
743
     * - decoding: Set by libavcodec.\
744
     */\
michaelni's avatar
michaelni committed
745 746 747 748 749 750
    int repeat_pict;\
    \
    /**\
     * \
     */\
    int qscale_type;\
romansh's avatar
 
romansh committed
751 752 753
    \
    /**\
     * The content of the picture is interlaced.\
diego's avatar
diego committed
754 755
     * - encoding: Set by user.\
     * - decoding: Set by libavcodec. (default 0)\
romansh's avatar
 
romansh committed
756 757 758 759
     */\
    int interlaced_frame;\
    \
    /**\
diego's avatar
diego committed
760 761 762
     * If the content is interlaced, is top field displayed first.\
     * - encoding: Set by user.\
     * - decoding: Set by libavcodec.\
romansh's avatar
 
romansh committed
763
     */\
764
    int top_field_first;\
765 766 767
    \
    /**\
     * Pan scan.\
diego's avatar
diego committed
768 769
     * - encoding: Set by user.\
     * - decoding: Set by libavcodec.\
770 771
     */\
    AVPanScan *pan_scan;\
772 773
    \
    /**\
diego's avatar
diego committed
774
     * Tell user application that palette has changed from previous frame.\
775
     * - encoding: ??? (no palette-enabled encoder yet)\
diego's avatar
diego committed
776
     * - decoding: Set by libavcodec. (default 0).\
777 778
     */\
    int palette_has_changed;\
779 780
    \
    /**\
diego's avatar
diego committed
781
     * codec suggestion on buffer type if != 0\
782
     * - encoding: unused\
diego's avatar
diego committed
783
     * - decoding: Set by libavcodec. (before get_buffer() call)).\
784 785
     */\
    int buffer_hints;\
786 787
\
    /**\
diego's avatar
diego committed
788
     * DCT coefficients\
789
     * - encoding: unused\
diego's avatar
diego committed
790
     * - decoding: Set by libavcodec.\
791 792
     */\
    short *dct_coeff;\
793 794
\
    /**\
diego's avatar
diego committed
795 796 797
     * motion referece frame index\
     * - encoding: Set by user.\
     * - decoding: Set by libavcodec.\
798
     */\
799 800 801 802 803 804 805 806 807 808
    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;\

809

810 811 812
#define FF_QSCALE_TYPE_MPEG1 0
#define FF_QSCALE_TYPE_MPEG2 1
#define FF_QSCALE_TYPE_H264  2
michaelni's avatar
michaelni committed
813 814

#define FF_BUFFER_TYPE_INTERNAL 1
diego's avatar
diego committed
815 816 817
#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
818

michaelni's avatar
michaelni committed
819

820 821 822 823 824 825
#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
826
#define FF_BI_TYPE 7
michaelni's avatar
michaelni committed
827

diego's avatar
diego committed
828 829 830 831
#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).
832

michaelni's avatar
michaelni committed
833 834
/**
 * Audio Video Frame.
835 836
 * New fields can be added to the end of FF_COMMON_FRAME with minor version
 * bumps.
diego's avatar
diego committed
837
 * Removal, reordering and changes to existing fields require a major
838 839
 * version bump. No fields should be added into AVFrame before or after
 * FF_COMMON_FRAME!
diego's avatar
diego committed
840
 * sizeof(AVFrame) must not be used outside libav*.
michaelni's avatar
michaelni committed
841
 */
michaelni's avatar
michaelni committed
842 843 844
typedef struct AVFrame {
    FF_COMMON_FRAME
} AVFrame;
michaelni's avatar
michaelni committed
845

michaelni's avatar
doxy  
michaelni committed
846
/**
847 848
 * main external API structure.
 * New fields can be added to the end with minor version bumps.
diego's avatar
diego committed
849
 * Removal, reordering and changes to existing fields require a major
850
 * version bump.
diego's avatar
diego committed
851
 * sizeof(AVCodecContext) must not be used outside libav*.
michaelni's avatar
doxy  
michaelni committed
852
 */
glantau's avatar
glantau committed
853
typedef struct AVCodecContext {
854
    /**
diego's avatar
diego committed
855
     * information on struct for av_log
856 857
     * - set by avcodec_alloc_context
     */
858
    const AVClass *av_class;
859
    /**
diego's avatar
diego committed
860 861 862
     * 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.
863
     */
glantau's avatar
glantau committed
864
    int bit_rate;
865 866

    /**
867
     * number of bits the bitstream is allowed to diverge from the reference.
868
     *           the reference can be CBR (for CBR pass1) or VBR (for pass2)
diego's avatar
diego committed
869
     * - encoding: Set by user; unused for constant quantizer encoding.
870
     * - decoding: unused
871
     */
872
    int bit_rate_tolerance;
873 874

    /**
875
     * CODEC_FLAG_*.
diego's avatar
diego committed
876 877
     * - encoding: Set by user.
     * - decoding: Set by user.
878
     */
glantau's avatar
glantau committed
879
    int flags;
880 881

    /**
diego's avatar
diego committed
882 883 884 885 886 887
     * 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?)
888 889 890 891
     */
    int sub_id;

    /**
diego's avatar
diego committed
892
     * Motion estimation algorithm used for video coding.
lorenm's avatar
lorenm committed
893
     * 1 (zero), 2 (full), 3 (log), 4 (phods), 5 (epzs), 6 (x1), 7 (hex),
894
     * 8 (umh), 9 (iter), 10 (tesa) [7, 8, 10 are x264 specific, 9 is snow specific]
895 896
     * - encoding: MUST be set by user.
     * - decoding: unused
897 898 899 900
     */
    int me_method;

    /**
diego's avatar
diego committed
901 902
     * some codecs need / can use extradata like Huffman tables.
     * mjpeg: Huffman tables
903
     * rv10: additional flags
904
     * mpeg4: global headers (they can be in the bitstream or here)
diego's avatar
diego committed
905 906 907 908 909
     * 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.
910
     */
911
    uint8_t *extradata;
912
    int extradata_size;
913

914
    /**
diego's avatar
diego committed
915 916
     * This is the fundamental unit of time (in seconds) in terms
     * of which frame timestamps are represented. For fixed-fps content,
917 918
     * timebase should be 1/framerate and timestamp increments should be
     * identically 1.
diego's avatar
diego committed
919 920
     * - encoding: MUST be set by user.
     * - decoding: Set by libavcodec.
921
     */
michael's avatar
michael committed
922
    AVRational time_base;
923

924
    /* video only */
925
    /**
926
     * picture width / height.
927
     * - encoding: MUST be set by user.
diego's avatar
diego committed
928 929 930
     * - decoding: Set by libavcodec.
     * Note: For compatibility it is possible to set this instead of
     * coded_width/height before decoding.
931
     */
glantau's avatar
glantau committed
932
    int width, height;
933

934
#define FF_ASPECT_EXTENDED 15
935 936

    /**
diego's avatar
diego committed
937 938
     * the number of pictures in a group of pictures, or 0 for intra_only
     * - encoding: Set by user.
939
     * - decoding: unused
940 941 942 943
     */
    int gop_size;

    /**
diego's avatar
diego committed
944 945 946
     * Pixel format, see PIX_FMT_xxx.
     * - encoding: Set by user.
     * - decoding: Set by libavcodec.
947
     */
948
    enum PixelFormat pix_fmt;
949

950
    /**
diego's avatar
diego committed
951
     * Frame rate emulation. If not zero, the lower layer (i.e. format handler)
952
     * has to read frames at native frame rate.
diego's avatar
diego committed
953 954
     * - encoding: Set by user.
     * - decoding: unused
955 956
     */
    int rate_emu;
957

958
    /**
diego's avatar
diego committed
959 960
     * If non NULL, 'draw_horiz_band' is called by the libavcodec
     * decoder to draw a horizontal band. It improves cache usage. Not
961
     * all codecs can do that. You must check the codec capabilities
diego's avatar
diego committed
962
     * beforehand.
963 964 965 966 967 968 969
     * 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.
970
     * - encoding: unused
diego's avatar
diego committed
971
     * - decoding: Set by user.
972 973 974 975
     * @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
976
     */
glantau's avatar
glantau committed
977
    void (*draw_horiz_band)(struct AVCodecContext *s,
978
                            const AVFrame *src, int offset[4],
979
                            int y, int type, int height);
glantau's avatar
glantau committed
980

glantau's avatar
glantau committed
981
    /* audio only */
diego's avatar
diego committed
982
    int sample_rate; ///< samples per second
983
    int channels;    ///< number of audio channels
984 985

    /**
diego's avatar
diego committed
986 987 988
     * audio sample format
     * - encoding: Set by user.
     * - decoding: Set by libavcodec.
989
     */
diego's avatar
diego committed
990
    enum SampleFormat sample_fmt;  ///< sample format, currently unused
glantau's avatar
glantau committed
991

diego's avatar
diego committed
992
    /* The following data should not be initialized. */
993
    /**
diego's avatar
diego committed
994
     * Samples per packet, initialized when calling 'init'.
995 996
     */
    int frame_size;
997
    int frame_number;   ///< audio or video frame number
diego's avatar
diego committed
998
    int real_pict_num;  ///< Returns the real picture number of previous encoded frame.
999

1000
    /**
diego's avatar
diego committed
1001
     * Number of frames the decoded output will be delayed relative to
1002
     * the encoded input.
diego's avatar
diego committed
1003
     * - encoding: Set by libavcodec.
1004
     * - decoding: unused
1005 1006
     */
    int delay;
1007

1008 1009
    /* - encoding parameters */
    float qcompress;  ///< amount of qscale change between easy & hard scenes (0.0-1.0)
1010 1011
    float qblur;      ///< amount of qscale smoothing over time (0.0-1.0)

1012
    /**
diego's avatar
diego committed
1013 1014
     * minimum quantizer
     * - encoding: Set by user.
1015
     * - decoding: unused
1016 1017 1018 1019
     */
    int qmin;

    /**
diego's avatar
diego committed
1020 1021
     * maximum quantizer
     * - encoding: Set by user.
1022
     * - decoding: unused
1023 1024 1025 1026
     */
    int qmax;

    /**
diego's avatar
diego committed
1027 1028
     * maximum quantizer difference between frames
     * - encoding: Set by user.
1029
     * - decoding: unused
1030 1031 1032 1033
     */
    int max_qdiff;

    /**
diego's avatar
diego committed
1034 1035 1036
     * 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.
1037
     * - decoding: unused
1038 1039 1040 1041
     */
    int max_b_frames;

    /**
diego's avatar
diego committed
1042
     * qscale factor between IP and B-frames
1043 1044
     * 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
1045
     * - encoding: Set by user.
1046
     * - decoding: unused
1047 1048
     */
    float b_quant_factor;
1049

1050 1051
    /** obsolete FIXME remove */
    int rc_strategy;
michael's avatar
michael committed
1052 1053
#define FF_RC_STRATEGY_XVID 1

michaelni's avatar
michaelni committed
1054
    int b_frame_strategy;
1055

1056
    /**
diego's avatar
diego committed
1057
     * hurry up amount
1058
     * - encoding: unused
diego's avatar
diego committed
1059
     * - decoding: Set by user. 1-> Skip B-frames, 2-> Skip IDCT/dequant too, 5-> Skip everything except header
takis's avatar
takis committed
1060
     * @deprecated Deprecated in favor of skip_idct and skip_frame.
1061 1062
     */
    int hurry_up;
1063

glantau's avatar
glantau committed
1064
    struct AVCodec *codec;
1065

glantau's avatar
glantau committed
1066 1067
    void *priv_data;

diego's avatar
diego committed
1068
    int rtp_payload_size;   /* The size of the RTP payload: the coder will  */
diego's avatar
diego committed
1069
                            /* do its best to deliver a chunk with size     */
1070
                            /* below rtp_payload_size, the chunk will start */
diego's avatar
diego committed
1071
                            /* with a start code on some codecs like H.263. */
1072
                            /* This doesn't take account of any particular  */
diego's avatar
diego committed
1073
                            /* headers inside the transmitted RTP payload.  */
1074

1075

diego's avatar
diego committed
1076 1077 1078 1079 1080 1081
    /* 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.                  */
1082
    void (*rtp_callback)(struct AVCodecContext *avctx, void *data, int size, int mb_nb);
1083

michaelni's avatar
michaelni committed
1084 1085 1086 1087 1088 1089 1090 1091
    /* 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;
1092
    int misc_bits;
1093

1094
    /**
diego's avatar
diego committed
1095 1096
     * number of bits used for the previously encoded frame
     * - encoding: Set by libavcodec.
michaelni's avatar
michaelni committed
1097
     * - decoding: unused
1098
     */
michaelni's avatar
michaelni committed
1099
    int frame_bits;
michaelni's avatar
michaelni committed
1100

1101
    /**
diego's avatar
diego committed
1102 1103 1104
     * Private data of the user, can be used to carry app specific stuff.
     * - encoding: Set by user.
     * - decoding: Set by user.
1105 1106 1107
     */
    void *opaque;

glantau's avatar
glantau committed
1108
    char codec_name[32];
1109 1110
    enum CodecType codec_type; /* see CODEC_TYPE_xxx */
    enum CodecID codec_id; /* see CODEC_ID_xxx */
1111

michaelni's avatar
michaelni committed
1112 1113
    /**
     * fourcc (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A').
diego's avatar
diego committed
1114 1115 1116 1117 1118 1119
     * 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
1120
     * extra_codec_tag + size could be added but for this a clear advantage must be demonstrated
diego's avatar
diego committed
1121 1122 1123
     * 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
1124 1125
     */
    unsigned int codec_tag;
1126

1127
    /**
diego's avatar
diego committed
1128 1129 1130
     * Work around bugs in encoders which sometimes cannot be detected automatically.
     * - encoding: Set by user
     * - decoding: Set by user
1131 1132
     */
    int workaround_bugs;
1133
#define FF_BUG_AUTODETECT       1  ///< autodetection
1134 1135 1136 1137
#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
1138
#define FF_BUG_AMV              32
diego's avatar
diego committed
1139
#define FF_BUG_AC_VLC           0  ///< Will be removed, libavcodec can now handle these non-compliant files by default.
michaelni's avatar
michaelni committed
1140
#define FF_BUG_QPEL_CHROMA      64
michaelni's avatar
michaelni committed
1141
#define FF_BUG_STD_QPEL         128
michaelni's avatar
michaelni committed
1142
#define FF_BUG_QPEL_CHROMA2     256
1143
#define FF_BUG_DIRECT_BLOCKSIZE 512
1144
#define FF_BUG_EDGE             1024
1145
#define FF_BUG_HPEL_CHROMA      2048
1146
#define FF_BUG_DC_CLIP          4096
diego's avatar
diego committed
1147 1148
#define FF_BUG_MS               8192 ///< Work around various bugs in Microsoft's broken decoders.
//#define FF_BUG_FAKE_SCALABILITY 16 //Autodetection should work 100%.
1149

1150
    /**
diego's avatar
diego committed
1151 1152
     * luma single coefficient elimination threshold
     * - encoding: Set by user.
1153
     * - decoding: unused
1154
     */
michaelni's avatar
 
michaelni committed
1155
    int luma_elim_threshold;
1156

1157
    /**
diego's avatar
diego committed
1158 1159
     * chroma single coeff elimination threshold
     * - encoding: Set by user.
1160
     * - decoding: unused
1161
     */
michaelni's avatar
 
michaelni committed
1162
    int chroma_elim_threshold;
1163

1164
    /**
diego's avatar
diego committed
1165 1166
     * strictly follow the standard (MPEG4, ...).
     * - encoding: Set by user.
1167 1168 1169 1170 1171 1172 1173 1174
     * - 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)
1175 1176
     */
    int strict_std_compliance;
diego's avatar
diego committed
1177 1178
#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.
1179
#define FF_COMPLIANCE_NORMAL        0
diego's avatar
diego committed
1180 1181
#define FF_COMPLIANCE_INOFFICIAL   -1 ///< Allow inofficial extensions.
#define FF_COMPLIANCE_EXPERIMENTAL -2 ///< Allow nonstandardized experimental things.
1182

1183
    /**
diego's avatar
diego committed
1184 1185
     * qscale offset between IP and B-frames
     * - encoding: Set by user.
1186
     * - decoding: unused
1187 1188
     */
    float b_quant_offset;
1189

1190
    /**
1191
     * Error recognization; higher values will detect more errors but may
diego's avatar
diego committed
1192
     * misdetect some more or less valid parts as errors.
1193
     * - encoding: unused
diego's avatar
diego committed
1194
     * - decoding: Set by user.
1195
     */
1196
    int error_recognition;
diego's avatar
diego committed
1197
#define FF_ER_CAREFUL         1
1198 1199 1200
#define FF_ER_COMPLIANT       2
#define FF_ER_AGGRESSIVE      3
#define FF_ER_VERY_AGGRESSIVE 4
1201

1202
    /**
diego's avatar
diego committed
1203 1204
     * 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
1205
     * avcodec_align_dimensions() should be used to find the required width and
diego's avatar
diego committed
1206
     * height, as they normally need to be rounded up to the next multiple of 16.
1207
     * - encoding: unused
diego's avatar
diego committed
1208
     * - decoding: Set by libavcodec., user can override.
1209
     */
michaelni's avatar
michaelni committed
1210
    int (*get_buffer)(struct AVCodecContext *c, AVFrame *pic);
1211

1212
    /**
ramiro's avatar
Typo  
ramiro committed
1213
     * Called to release buffers which were allocated with get_buffer.
diego's avatar
diego committed
1214 1215
     * A released buffer can be reused in get_buffer().
     * pic.data[*] must be set to NULL.
1216
     * - encoding: unused
diego's avatar
diego committed
1217
     * - decoding: Set by libavcodec., user can override.
1218
     */
michaelni's avatar
michaelni committed
1219
    void (*release_buffer)(struct AVCodecContext *c, AVFrame *pic);
michaelni's avatar
michaelni committed
1220

1221
    /**
michael's avatar
michael committed
1222
     * Size of the frame reordering buffer in the decoder.
1223
     * For MPEG-2 it is 1 IPB or 0 low delay IP.
diego's avatar
diego committed
1224 1225
     * - encoding: Set by libavcodec.
     * - decoding: Set by libavcodec.
1226 1227
     */
    int has_b_frames;
1228 1229 1230

    /**
     * number of bytes per packet if constant and known or 0
diego's avatar
diego committed
1231
     * Used by some WAV based audio codecs.
1232 1233
     */
    int block_align;
1234

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

1239
    /**
diego's avatar
diego committed
1240 1241
     * 0-> h263 quant 1-> mpeg quant
     * - encoding: Set by user.
1242
     * - decoding: unused
1243 1244
     */
    int mpeg_quant;
1245

1246
    /**
diego's avatar
diego committed
1247 1248
     * pass1 encoding statistics output buffer
     * - encoding: Set by libavcodec.
1249
     * - decoding: unused
1250
     */
1251
    char *stats_out;
1252

1253
    /**
diego's avatar
diego committed
1254 1255 1256
     * pass2 encoding statistics input buffer
     * Concatenated stuff from stats_out of pass1 should be placed here.
     * - encoding: Allocated/set/freed by user.
1257
     * - decoding: unused
1258 1259
     */
    char *stats_in;
1260

1261
    /**
diego's avatar
diego committed
1262 1263 1264
     * ratecontrol qmin qmax limiting method
     * 0-> clipping, 1-> use a nice continous function to limit qscale wthin qmin/qmax.
     * - encoding: Set by user.
1265
     * - decoding: unused
1266
     */
michaelni's avatar
michaelni committed
1267
    float rc_qsquish;
1268

michaelni's avatar
michaelni committed
1269 1270
    float rc_qmod_amp;
    int rc_qmod_freq;
1271

1272
    /**
diego's avatar
diego committed
1273 1274
     * ratecontrol override, see RcOverride
     * - encoding: Allocated/set/freed by user.
1275
     * - decoding: unused
1276
     */
michaelni's avatar
michaelni committed
1277 1278
    RcOverride *rc_override;
    int rc_override_count;
1279

1280
    /**
diego's avatar
diego committed
1281 1282
     * rate control equation
     * - encoding: Set by user
1283
     * - decoding: unused
1284
     */
lucabe's avatar
Fix  
lucabe committed
1285
    const char *rc_eq;
1286

1287
    /**
diego's avatar
diego committed
1288 1289
     * maximum bitrate
     * - encoding: Set by user.
1290
     * - decoding: unused
1291
     */
michaelni's avatar
michaelni committed
1292
    int rc_max_rate;
1293

1294
    /**
diego's avatar
diego committed
1295 1296
     * minimum bitrate
     * - encoding: Set by user.
1297
     * - decoding: unused
1298
     */
michaelni's avatar
michaelni committed
1299
    int rc_min_rate;
1300

1301
    /**
diego's avatar
diego committed
1302 1303
     * decoder bitstream buffer size
     * - encoding: Set by user.
1304
     * - decoding: unused
1305
     */
michaelni's avatar
michaelni committed
1306 1307
    int rc_buffer_size;
    float rc_buffer_aggressivity;
1308 1309

    /**
diego's avatar
diego committed
1310 1311 1312 1313
     * 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.
1314
     * - decoding: unused
1315 1316
     */
    float i_quant_factor;
1317

1318
    /**
diego's avatar
diego committed
1319 1320
     * qscale offset between P and I-frames
     * - encoding: Set by user.
1321
     * - decoding: unused
1322 1323
     */
    float i_quant_offset;
1324

1325
    /**
diego's avatar
diego committed
1326 1327
     * initial complexity for pass1 ratecontrol
     * - encoding: Set by user.
1328
     * - decoding: unused
1329
     */
michaelni's avatar
michaelni committed
1330
    float rc_initial_cplx;
1331

1332
    /**
diego's avatar
diego committed
1333 1334
     * DCT algorithm, see FF_DCT_* below
     * - encoding: Set by user.
1335
     * - decoding: unused
1336
     */
1337
    int dct_algo;
1338
#define FF_DCT_AUTO    0
1339
#define FF_DCT_FASTINT 1
1340 1341 1342
#define FF_DCT_INT     2
#define FF_DCT_MMX     3
#define FF_DCT_MLIB    4
1343
#define FF_DCT_ALTIVEC 5
michael's avatar
michael committed
1344
#define FF_DCT_FAAN    6
1345

1346
    /**
diego's avatar
diego committed
1347 1348
     * luminance masking (0-> disabled)
     * - encoding: Set by user.
1349
     * - decoding: unused
1350 1351
     */
    float lumi_masking;
1352

1353
    /**
diego's avatar
diego committed
1354 1355
     * temporary complexity masking (0-> disabled)
     * - encoding: Set by user.
1356
     * - decoding: unused
1357 1358
     */
    float temporal_cplx_masking;
1359

1360
    /**
diego's avatar
diego committed
1361 1362
     * spatial complexity masking (0-> disabled)
     * - encoding: Set by user.
1363
     * - decoding: unused
1364 1365
     */
    float spatial_cplx_masking;
1366

1367
    /**
diego's avatar
diego committed
1368 1369
     * p block masking (0-> disabled)
     * - encoding: Set by user.
1370
     * - decoding: unused
1371 1372
     */
    float p_masking;
1373

1374
    /**
diego's avatar
diego committed
1375 1376
     * darkness masking (0-> disabled)
     * - encoding: Set by user.
1377
     * - decoding: unused
1378 1379
     */
    float dark_masking;
1380

1381
    /**
diego's avatar
diego committed
1382 1383 1384
     * IDCT algorithm, see FF_IDCT_* below.
     * - encoding: Set by user.
     * - decoding: Set by user.
1385 1386
     */
    int idct_algo;
diego's avatar
diego committed
1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402
#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
1403
#define FF_IDCT_SIMPLEARMV5TE 16
diego's avatar
diego committed
1404
#define FF_IDCT_SIMPLEARMV6   17
1405
#define FF_IDCT_SIMPLEVIS     18
michael's avatar
michael committed
1406
#define FF_IDCT_WMV2          19
michael's avatar
michael committed
1407
#define FF_IDCT_FAAN          20
pross's avatar
pross committed
1408
#define FF_IDCT_EA            21
mru's avatar
mru committed
1409
#define FF_IDCT_SIMPLENEON    22
mru's avatar
mru committed
1410
#define FF_IDCT_SIMPLEALPHA   23
1411

1412
    /**
diego's avatar
diego committed
1413 1414 1415
     * slice count
     * - encoding: Set by libavcodec.
     * - decoding: Set by user (or 0).
1416 1417 1418
     */
    int slice_count;
    /**
diego's avatar
diego committed
1419 1420 1421
     * slice offsets in the frame in bytes
     * - encoding: Set/allocated by libavcodec.
     * - decoding: Set/allocated by user (or NULL).
1422 1423 1424
     */
    int *slice_offset;

1425
    /**
diego's avatar
diego committed
1426
     * error concealment flags
1427
     * - encoding: unused
diego's avatar
diego committed
1428
     * - decoding: Set by user.
1429 1430 1431 1432 1433
     */
    int error_concealment;
#define FF_EC_GUESS_MVS   1
#define FF_EC_DEBLOCK     2

kabi's avatar
kabi committed
1434
    /**
kabi's avatar
kabi committed
1435
     * dsp_mask could be add used to disable unwanted CPU features
kabi's avatar
kabi committed
1436
     * CPU features (i.e. MMX, SSE. ...)
kabi's avatar
kabi committed
1437
     *
diego's avatar
diego committed
1438 1439 1440
     * 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
1441 1442
     */
    unsigned dsp_mask;
diego's avatar
diego committed
1443
#define FF_MM_FORCE    0x80000000 /* Force usage of selected flags (OR) */
kabi's avatar
kabi committed
1444
    /* lower 16 bits - CPU features */
michael's avatar
michael committed
1445 1446 1447 1448 1449 1450 1451 1452 1453
#define FF_MM_MMX      0x0001 ///< standard MMX
#define FF_MM_3DNOW    0x0004 ///< AMD 3DNOW
#define FF_MM_MMXEXT   0x0002 ///< SSE integer functions or AMD MMX ext
#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
#define FF_MM_IWMMXT   0x0100 ///< XScale IWMMXT
1454
#define FF_MM_ALTIVEC  0x0001 ///< standard AltiVec
michaelni's avatar
michaelni committed
1455 1456

    /**
1457
     * bits per sample/pixel from the demuxer (needed for huffyuv).
diego's avatar
diego committed
1458 1459
     * - encoding: Set by libavcodec.
     * - decoding: Set by user.
michaelni's avatar
michaelni committed
1460
     */
1461
     int bits_per_coded_sample;
1462

michaelni's avatar
michaelni committed
1463
    /**
diego's avatar
diego committed
1464 1465
     * prediction method (needed for huffyuv)
     * - encoding: Set by user.
1466
     * - decoding: unused
michaelni's avatar
michaelni committed
1467 1468 1469 1470 1471
     */
     int prediction_method;
#define FF_PRED_LEFT   0
#define FF_PRED_PLANE  1
#define FF_PRED_MEDIAN 2
1472

michaelni's avatar
michaelni committed
1473
    /**
diego's avatar
diego committed
1474
     * sample aspect ratio (0 if unknown)
michael's avatar
michael committed
1475
     * That is the width of a pixel divided by the height of the pixel.
diego's avatar
diego committed
1476 1477 1478
     * 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
1479
     */
michael's avatar
michael committed
1480
    AVRational sample_aspect_ratio;
michaelni's avatar
michaelni committed
1481 1482

    /**
diego's avatar
diego committed
1483 1484 1485
     * the picture in the bitstream
     * - encoding: Set by libavcodec.
     * - decoding: Set by libavcodec.
michaelni's avatar
michaelni committed
1486
     */
michaelni's avatar
michaelni committed
1487
    AVFrame *coded_frame;
michaelni's avatar
michaelni committed
1488 1489

    /**
diego's avatar
diego committed
1490 1491 1492
     * debug
     * - encoding: Set by user.
     * - decoding: Set by user.
michaelni's avatar
michaelni committed
1493 1494
     */
    int debug;
diego's avatar
diego committed
1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508
#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
1509
#define FF_DEBUG_VIS_MB_TYPE 0x00004000
1510
#define FF_DEBUG_BUFFERS     0x00008000
1511

1512
    /**
diego's avatar
diego committed
1513 1514 1515
     * debug
     * - encoding: Set by user.
     * - decoding: Set by user.
1516 1517 1518 1519 1520 1521
     */
    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

1522
    /**
diego's avatar
diego committed
1523 1524
     * error
     * - encoding: Set by libavcodec if flags&CODEC_FLAG_PSNR.
1525
     * - decoding: unused
1526 1527
     */
    uint64_t error[4];
1528

michaelni's avatar
michaelni committed
1529
    /**
diego's avatar
diego committed
1530
     * minimum MB quantizer
1531
     * - encoding: unused
1532
     * - decoding: unused
michaelni's avatar
michaelni committed
1533 1534 1535 1536
     */
    int mb_qmin;

    /**
diego's avatar
diego committed
1537
     * maximum MB quantizer
1538
     * - encoding: unused
1539
     * - decoding: unused
michaelni's avatar
michaelni committed
1540 1541
     */
    int mb_qmax;
1542

michaelni's avatar
michaelni committed
1543
    /**
diego's avatar
diego committed
1544 1545
     * motion estimation comparison function
     * - encoding: Set by user.
1546
     * - decoding: unused
michaelni's avatar
michaelni committed
1547 1548 1549
     */
    int me_cmp;
    /**
diego's avatar
diego committed
1550 1551
     * subpixel motion estimation comparison function
     * - encoding: Set by user.
1552
     * - decoding: unused
michaelni's avatar
michaelni committed
1553 1554 1555
     */
    int me_sub_cmp;
    /**
diego's avatar
diego committed
1556 1557
     * macroblock comparison function (not supported yet)
     * - encoding: Set by user.
1558
     * - decoding: unused
michaelni's avatar
michaelni committed
1559 1560
     */
    int mb_cmp;
michael's avatar
michael committed
1561
    /**
diego's avatar
diego committed
1562 1563
     * interlaced DCT comparison function
     * - encoding: Set by user.
michael's avatar
michael committed
1564 1565 1566
     * - decoding: unused
     */
    int ildct_cmp;
diego's avatar
diego committed
1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579
#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
1580
#define FF_CMP_DCTMAX 13
1581
#define FF_CMP_DCT264 14
michaelni's avatar
michaelni committed
1582
#define FF_CMP_CHROMA 256
1583

michaelni's avatar
michaelni committed
1584
    /**
diego's avatar
diego committed
1585 1586
     * ME diamond size & shape
     * - encoding: Set by user.
1587
     * - decoding: unused
michaelni's avatar
michaelni committed
1588 1589
     */
    int dia_size;
michaelni's avatar
michaelni committed
1590 1591

    /**
diego's avatar
diego committed
1592 1593
     * amount of previous MV predictors (2a+1 x 2a+1 square)
     * - encoding: Set by user.
1594
     * - decoding: unused
michaelni's avatar
michaelni committed
1595 1596
     */
    int last_predictor_count;
michaelni's avatar
michaelni committed
1597

michaelni's avatar
michaelni committed
1598
    /**
diego's avatar
diego committed
1599 1600
     * prepass for motion estimation
     * - encoding: Set by user.
1601
     * - decoding: unused
michaelni's avatar
michaelni committed
1602 1603
     */
    int pre_me;
michaelni's avatar
michaelni committed
1604

michaelni's avatar
michaelni committed
1605
    /**
diego's avatar
diego committed
1606 1607
     * motion estimation prepass comparison function
     * - encoding: Set by user.
1608
     * - decoding: unused
michaelni's avatar
michaelni committed
1609 1610
     */
    int me_pre_cmp;
michaelni's avatar
michaelni committed
1611

michaelni's avatar
michaelni committed
1612
    /**
diego's avatar
diego committed
1613 1614
     * ME prepass diamond size & shape
     * - encoding: Set by user.
1615
     * - decoding: unused
michaelni's avatar
michaelni committed
1616 1617 1618
     */
    int pre_dia_size;

michaelni's avatar
michaelni committed
1619
    /**
diego's avatar
diego committed
1620 1621
     * subpel ME quality
     * - encoding: Set by user.
1622
     * - decoding: unused
michaelni's avatar
michaelni committed
1623 1624 1625
     */
    int me_subpel_quality;

michaelni's avatar
michaelni committed
1626
    /**
diego's avatar
diego committed
1627
     * callback to negotiate the pixelFormat
michaelni's avatar
michaelni committed
1628
     * @param fmt is the list of formats which are supported by the codec,
diego's avatar
diego committed
1629 1630 1631
     * 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
1632
     * - encoding: unused
diego's avatar
diego committed
1633
     * - decoding: Set by user, if not set the native format will be chosen.
michaelni's avatar
michaelni committed
1634
     */
iive's avatar
iive committed
1635
    enum PixelFormat (*get_format)(struct AVCodecContext *s, const enum PixelFormat * fmt);
1636 1637

    /**
diego's avatar
diego committed
1638 1639 1640
     * DTG active format information (additional aspect ratio
     * information only used in DVB MPEG-2 transport streams)
     * 0 if not set.
1641
     *
diego's avatar
diego committed
1642 1643
     * - encoding: unused
     * - decoding: Set by decoder.
1644 1645 1646 1647 1648 1649 1650 1651 1652 1653
     */
    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

1654
    /**
diego's avatar
diego committed
1655 1656
     * maximum motion estimation search range in subpel units
     * If 0 then no limit.
1657
     *
diego's avatar
diego committed
1658 1659
     * - encoding: Set by user.
     * - decoding: unused
1660
     */
kabi's avatar
kabi committed
1661
    int me_range;
1662

michaelni's avatar
michaelni committed
1663
    /**
diego's avatar
diego committed
1664 1665
     * intra quantizer bias
     * - encoding: Set by user.
michaelni's avatar
michaelni committed
1666 1667 1668 1669
     * - decoding: unused
     */
    int intra_quant_bias;
#define FF_DEFAULT_QUANT_BIAS 999999
1670

michaelni's avatar
michaelni committed
1671
    /**
diego's avatar
diego committed
1672 1673
     * inter quantizer bias
     * - encoding: Set by user.
michaelni's avatar
michaelni committed
1674 1675 1676
     * - decoding: unused
     */
    int inter_quant_bias;
1677 1678

    /**
diego's avatar
diego committed
1679 1680 1681 1682
     * color table ID
     * - encoding: unused
     * - decoding: Which clrtable should be used for 8bit RGB images.
     *             Tables have to be stored somewhere. FIXME
1683 1684
     */
    int color_table_id;
1685

1686
    /**
diego's avatar
diego committed
1687 1688
     * internal_buffer count
     * Don't touch, used by libavcodec default_get_buffer().
1689 1690
     */
    int internal_buffer_count;
1691

1692
    /**
diego's avatar
diego committed
1693 1694
     * internal_buffers
     * Don't touch, used by libavcodec default_get_buffer().
1695 1696
     */
    void *internal_buffer;
1697 1698 1699 1700 1701 1702 1703

#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
1704
    /**
diego's avatar
diego committed
1705 1706 1707
     * 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
1708 1709 1710
     * - decoding: unused
     */
    int global_quality;
1711

michael's avatar
michael committed
1712 1713
#define FF_CODER_TYPE_VLC       0
#define FF_CODER_TYPE_AC        1
1714 1715 1716
#define FF_CODER_TYPE_RAW       2
#define FF_CODER_TYPE_RLE       3
#define FF_CODER_TYPE_DEFLATE   4
michaelni's avatar
michaelni committed
1717 1718
    /**
     * coder type
diego's avatar
diego committed
1719
     * - encoding: Set by user.
michaelni's avatar
michaelni committed
1720 1721 1722 1723 1724 1725
     * - decoding: unused
     */
    int coder_type;

    /**
     * context model
diego's avatar
diego committed
1726
     * - encoding: Set by user.
michaelni's avatar
michaelni committed
1727 1728 1729
     * - decoding: unused
     */
    int context_model;
1730 1731 1732 1733
#if 0
    /**
     *
     * - encoding: unused
diego's avatar
diego committed
1734
     * - decoding: Set by user.
1735 1736 1737
     */
    uint8_t * (*realloc)(struct AVCodecContext *s, uint8_t *buf, int buf_size);
#endif
1738

1739 1740 1741
    /**
     * slice flags
     * - encoding: unused
diego's avatar
diego committed
1742
     * - decoding: Set by user.
1743 1744 1745 1746 1747 1748
     */
    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
1749 1750 1751 1752 1753 1754
    /**
     * XVideo Motion Acceleration
     * - encoding: forbidden
     * - decoding: set by decoder
     */
    int xvmc_acceleration;
1755

1756 1757
    /**
     * macroblock decision mode
diego's avatar
diego committed
1758
     * - encoding: Set by user.
1759 1760 1761 1762 1763
     * - 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
1764
#define FF_MB_DECISION_RD     2        ///< rate distortion
1765 1766 1767

    /**
     * custom intra quantization matrix
diego's avatar
diego committed
1768 1769
     * - encoding: Set by user, can be NULL.
     * - decoding: Set by libavcodec.
1770 1771 1772 1773 1774
     */
    uint16_t *intra_matrix;

    /**
     * custom inter quantization matrix
diego's avatar
diego committed
1775 1776
     * - encoding: Set by user, can be NULL.
     * - decoding: Set by libavcodec.
1777 1778
     */
    uint16_t *inter_matrix;
1779

1780 1781
    /**
     * fourcc from the AVI stream header (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A').
diego's avatar
diego committed
1782
     * This is used to work around some encoder bugs.
1783
     * - encoding: unused
diego's avatar
diego committed
1784
     * - decoding: Set by user, will be converted to uppercase by libavcodec during init.
1785 1786
     */
    unsigned int stream_codec_tag;
michaelni's avatar
michaelni committed
1787 1788

    /**
diego's avatar
diego committed
1789 1790 1791
     * scene change detection threshold
     * 0 is default, larger means fewer detected scene changes.
     * - encoding: Set by user.
michaelni's avatar
michaelni committed
1792 1793 1794
     * - decoding: unused
     */
    int scenechange_threshold;
1795 1796

    /**
diego's avatar
diego committed
1797 1798
     * minimum Lagrange multipler
     * - encoding: Set by user.
1799 1800 1801 1802 1803
     * - decoding: unused
     */
    int lmin;

    /**
diego's avatar
diego committed
1804 1805
     * maximum Lagrange multipler
     * - encoding: Set by user.
1806 1807 1808
     * - decoding: unused
     */
    int lmax;
1809 1810

    /**
diego's avatar
diego committed
1811
     * palette control structure
1812
     * - encoding: ??? (no palette-enabled encoder yet)
diego's avatar
diego committed
1813
     * - decoding: Set by user.
1814 1815
     */
    struct AVPaletteControl *palctrl;
1816 1817 1818

    /**
     * noise reduction strength
diego's avatar
diego committed
1819
     * - encoding: Set by user.
1820 1821 1822
     * - decoding: unused
     */
    int noise_reduction;
1823

1824
    /**
diego's avatar
diego committed
1825 1826 1827
     * 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
1828
     * same buffer or new buffer with old frame "painted" into it.
diego's avatar
diego committed
1829
     * If pic.data[0] == NULL must behave like get_buffer().
1830
     * - encoding: unused
diego's avatar
diego committed
1831
     * - decoding: Set by libavcodec., user can override
1832
     */
1833
    int (*reget_buffer)(struct AVCodecContext *c, AVFrame *pic);
michael's avatar
michael committed
1834 1835

    /**
diego's avatar
diego committed
1836 1837
     * Number of bits which should be loaded into the rc buffer before decoding starts.
     * - encoding: Set by user.
michael's avatar
michael committed
1838 1839 1840 1841 1842 1843
     * - decoding: unused
     */
    int rc_initial_buffer_occupancy;

    /**
     *
diego's avatar
diego committed
1844
     * - encoding: Set by user.
michael's avatar
michael committed
1845 1846 1847 1848 1849
     * - decoding: unused
     */
    int inter_threshold;

    /**
diego's avatar
diego committed
1850 1851 1852
     * CODEC_FLAG2_*
     * - encoding: Set by user.
     * - decoding: Set by user.
michael's avatar
michael committed
1853 1854
     */
    int flags2;
michael's avatar
michael committed
1855 1856

    /**
diego's avatar
diego committed
1857 1858 1859
     * Simulates errors in the bitstream to test error concealment.
     * - encoding: Set by user.
     * - decoding: unused
michael's avatar
michael committed
1860 1861
     */
    int error_rate;
1862

1863 1864 1865
    /**
     * MP3 antialias algorithm, see FF_AA_* below.
     * - encoding: unused
diego's avatar
diego committed
1866
     * - decoding: Set by user.
1867 1868 1869 1870 1871 1872
     */
    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
1873
    /**
diego's avatar
diego committed
1874 1875
     * quantizer noise shaping
     * - encoding: Set by user.
michael's avatar
michael committed
1876 1877 1878
     * - decoding: unused
     */
    int quantizer_noise_shaping;
1879 1880

    /**
diego's avatar
diego committed
1881
     * thread count
1882
     * is used to decide how many independent tasks should be passed to execute()
diego's avatar
diego committed
1883 1884
     * - encoding: Set by user.
     * - decoding: Set by user.
1885 1886
     */
    int thread_count;
1887

1888
    /**
diego's avatar
diego committed
1889 1890 1891 1892
     * 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
1893
     * @param count the number of things to execute
diego's avatar
diego committed
1894 1895
     * - encoding: Set by libavcodec, user can override.
     * - decoding: Set by libavcodec, user can override.
1896
     */
1897
    int (*execute)(struct AVCodecContext *c, int (*func)(struct AVCodecContext *c2, void *arg), void *arg2, int *ret, int count, int size);
1898

1899
    /**
diego's avatar
diego committed
1900 1901
     * thread opaque
     * Can be used by execute() to store some per AVCodecContext stuff.
1902 1903 1904 1905
     * - encoding: set by execute()
     * - decoding: set by execute()
     */
    void *thread_opaque;
1906 1907

    /**
diego's avatar
diego committed
1908 1909
     * Motion estimation threshold below which no motion estimation is
     * performed, but instead the user specified motion vectors are used.
1910
     *
diego's avatar
diego committed
1911
     * - encoding: Set by user.
1912
     * - decoding: unused
1913
     */
michael's avatar
michael committed
1914
     int me_threshold;
1915 1916

    /**
diego's avatar
diego committed
1917 1918
     * Macroblock threshold below which the user specified macroblock types will be used.
     * - encoding: Set by user.
1919 1920 1921
     * - decoding: unused
     */
     int mb_threshold;
1922 1923

    /**
diego's avatar
diego committed
1924 1925
     * precision of the intra DC coefficient - 8
     * - encoding: Set by user.
1926 1927 1928
     * - decoding: unused
     */
     int intra_dc_precision;
michael's avatar
michael committed
1929 1930

    /**
diego's avatar
diego committed
1931 1932
     * noise vs. sse weight for the nsse comparsion function
     * - encoding: Set by user.
michael's avatar
michael committed
1933 1934 1935
     * - decoding: unused
     */
     int nsse_weight;
1936 1937

    /**
diego's avatar
diego committed
1938
     * Number of macroblock rows at the top which are skipped.
1939
     * - encoding: unused
diego's avatar
diego committed
1940
     * - decoding: Set by user.
1941 1942 1943 1944
     */
     int skip_top;

    /**
diego's avatar
diego committed
1945
     * Number of macroblock rows at the bottom which are skipped.
1946
     * - encoding: unused
diego's avatar
diego committed
1947
     * - decoding: Set by user.
1948 1949
     */
     int skip_bottom;
michael's avatar
michael committed
1950 1951 1952

    /**
     * profile
diego's avatar
diego committed
1953 1954
     * - encoding: Set by user.
     * - decoding: Set by libavcodec.
michael's avatar
michael committed
1955 1956 1957
     */
     int profile;
#define FF_PROFILE_UNKNOWN -99
benoit's avatar
 
benoit committed
1958
#define FF_PROFILE_AAC_MAIN 0
diego's avatar
diego committed
1959 1960 1961
#define FF_PROFILE_AAC_LOW  1
#define FF_PROFILE_AAC_SSR  2
#define FF_PROFILE_AAC_LTP  3
michael's avatar
michael committed
1962 1963 1964

    /**
     * level
diego's avatar
diego committed
1965 1966
     * - encoding: Set by user.
     * - decoding: Set by libavcodec.
michael's avatar
michael committed
1967 1968 1969
     */
     int level;
#define FF_LEVEL_UNKNOWN -99
michael's avatar
michael committed
1970 1971

    /**
diego's avatar
diego committed
1972
     * low resolution decoding, 1-> 1/2 size, 2->1/4 size
michael's avatar
michael committed
1973
     * - encoding: unused
diego's avatar
diego committed
1974
     * - decoding: Set by user.
michael's avatar
michael committed
1975 1976
     */
     int lowres;
1977 1978

    /**
diego's avatar
diego committed
1979 1980
     * Bitstream width / height, may be different from width/height if lowres
     * or other things are used.
1981
     * - encoding: unused
diego's avatar
diego committed
1982
     * - decoding: Set by user before init if known. Codec should override / dynamically change if needed.
1983 1984
     */
    int coded_width, coded_height;
michael's avatar
michael committed
1985 1986 1987

    /**
     * frame skip threshold
diego's avatar
diego committed
1988
     * - encoding: Set by user.
michael's avatar
michael committed
1989 1990 1991 1992 1993 1994
     * - decoding: unused
     */
    int frame_skip_threshold;

    /**
     * frame skip factor
diego's avatar
diego committed
1995
     * - encoding: Set by user.
michael's avatar
michael committed
1996 1997 1998
     * - decoding: unused
     */
    int frame_skip_factor;
michael's avatar
michael committed
1999 2000 2001

    /**
     * frame skip exponent
diego's avatar
diego committed
2002
     * - encoding: Set by user.
michael's avatar
michael committed
2003 2004 2005 2006 2007
     * - decoding: unused
     */
    int frame_skip_exp;

    /**
diego's avatar
diego committed
2008 2009
     * frame skip comparison function
     * - encoding: Set by user.
michael's avatar
michael committed
2010 2011 2012
     * - decoding: unused
     */
    int frame_skip_cmp;
2013 2014

    /**
diego's avatar
diego committed
2015
     * Border processing masking, raises the quantizer for mbs on the borders
2016
     * of the picture.
diego's avatar
diego committed
2017
     * - encoding: Set by user.
2018 2019 2020
     * - decoding: unused
     */
    float border_masking;
2021 2022

    /**
diego's avatar
diego committed
2023 2024
     * minimum MB lagrange multipler
     * - encoding: Set by user.
2025 2026 2027 2028 2029
     * - decoding: unused
     */
    int mb_lmin;

    /**
diego's avatar
diego committed
2030 2031
     * maximum MB lagrange multipler
     * - encoding: Set by user.
2032 2033 2034
     * - decoding: unused
     */
    int mb_lmax;
2035 2036

    /**
2037
     *
diego's avatar
diego committed
2038
     * - encoding: Set by user.
2039 2040 2041
     * - decoding: unused
     */
    int me_penalty_compensation;
michael's avatar
michael committed
2042 2043

    /**
2044
     *
michael's avatar
michael committed
2045
     * - encoding: unused
diego's avatar
diego committed
2046
     * - decoding: Set by user.
michael's avatar
michael committed
2047 2048 2049 2050
     */
    enum AVDiscard skip_loop_filter;

    /**
2051
     *
michael's avatar
michael committed
2052
     * - encoding: unused
diego's avatar
diego committed
2053
     * - decoding: Set by user.
michael's avatar
michael committed
2054 2055 2056 2057
     */
    enum AVDiscard skip_idct;

    /**
2058
     *
michael's avatar
michael committed
2059
     * - encoding: unused
diego's avatar
diego committed
2060
     * - decoding: Set by user.
michael's avatar
michael committed
2061 2062
     */
    enum AVDiscard skip_frame;
michael's avatar
michael committed
2063 2064 2065

    /**
     *
diego's avatar
diego committed
2066
     * - encoding: Set by user.
michael's avatar
michael committed
2067 2068 2069
     * - decoding: unused
     */
    int bidir_refine;
2070 2071 2072

    /**
     *
diego's avatar
diego committed
2073
     * - encoding: Set by user.
2074 2075 2076
     * - decoding: unused
     */
    int brd_scale;
lorenm's avatar
lorenm committed
2077 2078 2079

    /**
     * constant rate factor - quality-based VBR - values ~correspond to qps
diego's avatar
diego committed
2080
     * - encoding: Set by user.
lorenm's avatar
lorenm committed
2081 2082
     * - decoding: unused
     */
lu_zero's avatar
lu_zero committed
2083
    float crf;
lorenm's avatar
lorenm committed
2084 2085 2086

    /**
     * constant quantization parameter rate control method
diego's avatar
diego committed
2087
     * - encoding: Set by user.
lorenm's avatar
lorenm committed
2088 2089 2090 2091 2092
     * - decoding: unused
     */
    int cqp;

    /**
diego's avatar
diego committed
2093 2094
     * minimum GOP size
     * - encoding: Set by user.
lorenm's avatar
lorenm committed
2095 2096 2097 2098 2099 2100
     * - decoding: unused
     */
    int keyint_min;

    /**
     * number of reference frames
diego's avatar
diego committed
2101
     * - encoding: Set by user.
2102
     * - decoding: Set by lavc.
lorenm's avatar
lorenm committed
2103 2104 2105 2106 2107
     */
    int refs;

    /**
     * chroma qp offset from luma
diego's avatar
diego committed
2108
     * - encoding: Set by user.
lorenm's avatar
lorenm committed
2109 2110 2111 2112 2113
     * - decoding: unused
     */
    int chromaoffset;

    /**
diego's avatar
diego committed
2114 2115
     * Influences how often B-frames are used.
     * - encoding: Set by user.
lorenm's avatar
lorenm committed
2116 2117 2118 2119 2120 2121
     * - decoding: unused
     */
    int bframebias;

    /**
     * trellis RD quantization
diego's avatar
diego committed
2122
     * - encoding: Set by user.
lorenm's avatar
lorenm committed
2123 2124 2125 2126 2127
     * - decoding: unused
     */
    int trellis;

    /**
diego's avatar
diego committed
2128 2129
     * Reduce fluctuations in qp (before curve compression).
     * - encoding: Set by user.
lorenm's avatar
lorenm committed
2130 2131 2132 2133 2134 2135 2136
     * - decoding: unused
     */
    float complexityblur;

    /**
     * in-loop deblocking filter alphac0 parameter
     * alpha is in the range -6...6
diego's avatar
diego committed
2137
     * - encoding: Set by user.
lorenm's avatar
lorenm committed
2138 2139 2140 2141 2142 2143 2144
     * - decoding: unused
     */
    int deblockalpha;

    /**
     * in-loop deblocking filter beta parameter
     * beta is in the range -6...6
diego's avatar
diego committed
2145
     * - encoding: Set by user.
lorenm's avatar
lorenm committed
2146 2147 2148 2149 2150 2151
     * - decoding: unused
     */
    int deblockbeta;

    /**
     * macroblock subpartition sizes to consider - p8x8, p4x4, b8x8, i8x8, i4x4
diego's avatar
diego committed
2152
     * - encoding: Set by user.
lorenm's avatar
lorenm committed
2153 2154 2155
     * - decoding: unused
     */
    int partitions;
2156 2157 2158 2159 2160
#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
2161 2162

    /**
2163
     * direct MV prediction mode - 0 (none), 1 (spatial), 2 (temporal), 3 (auto)
diego's avatar
diego committed
2164
     * - encoding: Set by user.
lorenm's avatar
lorenm committed
2165 2166 2167
     * - decoding: unused
     */
    int directpred;
2168

2169
    /**
2170
     * Audio cutoff bandwidth (0 means "automatic")
diego's avatar
diego committed
2171
     * - encoding: Set by user.
2172 2173 2174
     * - decoding: unused
     */
    int cutoff;
corey's avatar
corey committed
2175 2176

    /**
diego's avatar
diego committed
2177 2178
     * Multiplied by qscale for each frame and added to scene_change_score.
     * - encoding: Set by user.
corey's avatar
corey committed
2179 2180 2181
     * - decoding: unused
     */
    int scenechange_factor;
2182 2183 2184

    /**
     *
diego's avatar
diego committed
2185 2186
     * Note: Value depends upon the compare function used for fullpel ME.
     * - encoding: Set by user.
2187 2188 2189
     * - decoding: unused
     */
    int mv0_threshold;
2190 2191

    /**
diego's avatar
diego committed
2192 2193
     * Adjusts sensitivity of b_frame_strategy 1.
     * - encoding: Set by user.
2194 2195 2196
     * - decoding: unused
     */
    int b_sensitivity;
2197 2198

    /**
diego's avatar
diego committed
2199
     * - encoding: Set by user.
2200 2201 2202 2203 2204 2205
     * - decoding: unused
     */
    int compression_level;
#define FF_COMPRESSION_DEFAULT -1

    /**
diego's avatar
diego committed
2206 2207 2208
     * Sets whether to use LPC mode - used by FLAC encoder.
     * - encoding: Set by user.
     * - decoding: unused
2209 2210 2211 2212 2213
     */
    int use_lpc;

    /**
     * LPC coefficient precision - used by FLAC encoder
diego's avatar
diego committed
2214 2215
     * - encoding: Set by user.
     * - decoding: unused
2216 2217 2218 2219
     */
    int lpc_coeff_precision;

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

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

    /**
     * search method for selecting prediction order
diego's avatar
diego committed
2233 2234
     * - encoding: Set by user.
     * - decoding: unused
2235 2236 2237 2238
     */
    int prediction_order_method;

    /**
diego's avatar
diego committed
2239 2240
     * - encoding: Set by user.
     * - decoding: unused
2241 2242 2243 2244
     */
    int min_partition_order;

    /**
diego's avatar
diego committed
2245 2246
     * - encoding: Set by user.
     * - decoding: unused
2247 2248
     */
    int max_partition_order;
2249 2250 2251

    /**
     * GOP timecode frame start number, in non drop frame format
diego's avatar
diego committed
2252 2253
     * - encoding: Set by user.
     * - decoding: unused
2254 2255
     */
    int64_t timecode_frame_start;
2256

2257
#if LIBAVCODEC_VERSION_MAJOR < 53
2258 2259 2260 2261
    /**
     * Decoder should decode to this many channels if it can (0 for default)
     * - encoding: unused
     * - decoding: Set by user.
2262
     * @deprecated Deprecated in favor of request_channel_layout.
2263 2264
     */
    int request_channels;
2265
#endif
2266 2267 2268 2269 2270 2271 2272 2273

    /**
     * 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;
2274 2275 2276 2277 2278 2279 2280 2281

    /**
     * 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;
2282 2283 2284 2285 2286 2287 2288 2289

    /**
     * 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;
2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303

    /**
     * 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;
2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317

    /**
     * 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;
2318 2319 2320 2321 2322 2323 2324

    /**
     * Hardware accelerator in use
     * - encoding: unused.
     * - decoding: Set by libavcodec
     */
    struct AVHWAccel *hwaccel;
glantau's avatar
glantau committed
2325 2326
} AVCodecContext;

2327 2328 2329
/**
 * AVCodec.
 */
glantau's avatar
glantau committed
2330
typedef struct AVCodec {
benoit's avatar
benoit committed
2331 2332 2333 2334 2335 2336
    /**
     * 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
2337
    const char *name;
kabi's avatar
kabi committed
2338
    enum CodecType type;
michael's avatar
michael committed
2339
    enum CodecID id;
glantau's avatar
glantau committed
2340 2341
    int priv_data_size;
    int (*init)(AVCodecContext *);
kabi's avatar
kabi committed
2342
    int (*encode)(AVCodecContext *, uint8_t *buf, int buf_size, void *data);
glantau's avatar
glantau committed
2343
    int (*close)(AVCodecContext *);
michaelni's avatar
michaelni committed
2344
    int (*decode)(AVCodecContext *, void *outdata, int *outdata_size,
2345
                  const uint8_t *buf, int buf_size);
michael's avatar
michael committed
2346 2347 2348 2349
    /**
     * Codec capabilities.
     * see CODEC_CAP_*
     */
glantau's avatar
glantau committed
2350
    int capabilities;
glantau's avatar
glantau committed
2351
    struct AVCodec *next;
michael's avatar
michael committed
2352 2353 2354 2355
    /**
     * Flush buffers.
     * Will be called when seeking
     */
michaelni's avatar
michaelni committed
2356
    void (*flush)(AVCodecContext *);
2357
    const AVRational *supported_framerates; ///< array of supported framerates, or NULL if any, array is terminated by {0,0}
benoit's avatar
benoit committed
2358
    const enum PixelFormat *pix_fmts;       ///< array of supported pixel formats, or NULL if unknown, array is terminated by -1
2359 2360 2361 2362 2363
    /**
     * Descriptive name for the codec, meant to be more human readable than \p name.
     * You \e should use the NULL_IF_CONFIG_SMALL() macro to define it.
     */
    const char *long_name;
2364
    const int *supported_samplerates;       ///< array of supported audio samplerates, or NULL if unknown, array is terminated by 0
2365
    const enum SampleFormat *sample_fmts;   ///< array of supported sample formats, or NULL if unknown, array is terminated by -1
2366
    const int64_t *channel_layouts;         ///< array of support channel layouts, or NULL if unknown. array is terminated by 0
glantau's avatar
glantau committed
2367 2368
} AVCodec;

2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449
/**
 * 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.
     *
     * Note that \p buf can be NULL along with \p buf_size set to 0.
     * 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);
} AVHWAccel;

kabi's avatar
kabi committed
2450
/**
2451 2452 2453
 * four components are given, that's all.
 * the last component is alpha
 */
glantau's avatar
glantau committed
2454
typedef struct AVPicture {
kabi's avatar
kabi committed
2455
    uint8_t *data[4];
michaelni's avatar
michaelni committed
2456
    int linesize[4];       ///< number of bytes per line
glantau's avatar
glantau committed
2457 2458
} AVPicture;

tmmm's avatar
tmmm committed
2459 2460 2461 2462
/**
 * AVPaletteControl
 * This structure defines a method for communicating palette changes
 * between and demuxer and a decoder.
benoit's avatar
 
benoit committed
2463 2464 2465
 *
 * @deprecated Use AVPacket to send palette changes instead.
 * This is totally broken.
tmmm's avatar
tmmm committed
2466
 */
2467
#define AVPALETTE_SIZE 1024
michael's avatar
michael committed
2468
#define AVPALETTE_COUNT 256
tmmm's avatar
tmmm committed
2469 2470
typedef struct AVPaletteControl {

diego's avatar
diego committed
2471 2472
    /* Demuxer sets this to 1 to indicate the palette has changed;
     * decoder resets to 0. */
tmmm's avatar
tmmm committed
2473 2474
    int palette_changed;

2475 2476
    /* 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
2477 2478
     * the palette data comes from an IBM VGA native format, the component
     * data is probably 6 bits in size and needs to be scaled. */
2479
    unsigned int palette[AVPALETTE_COUNT];
tmmm's avatar
tmmm committed
2480

2481
} AVPaletteControl attribute_deprecated;
tmmm's avatar
tmmm committed
2482

michael's avatar
michael committed
2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500
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,
};

2501
typedef struct AVSubtitleRect {
2502 2503 2504 2505 2506
    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
2507 2508 2509 2510 2511 2512

    /**
     * data+linesize for the bitmap of this subtitle.
     * can be set for text/ass as well once they where rendered
     */
    AVPicture pict;
2513 2514 2515 2516 2517 2518 2519 2520 2521 2522
    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;
2523 2524 2525 2526 2527 2528
} 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 */
2529
    unsigned num_rects;
2530
    AVSubtitleRect **rects;
bellard's avatar
bellard committed
2531 2532 2533
} AVSubtitle;


glantau's avatar
glantau committed
2534 2535 2536
/* resample.c */

struct ReSampleContext;
2537
struct AVResampleContext;
glantau's avatar
glantau committed
2538 2539 2540

typedef struct ReSampleContext ReSampleContext;

2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570
#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
2571 2572 2573
int audio_resample(ReSampleContext *s, short *output, short *input, int nb_samples);
void audio_resample_close(ReSampleContext *s);

2574 2575 2576 2577

/**
 * Initializes an audio resampler.
 * Note, if either rate is not an integer then simply scale both rates up so they are.
2578 2579 2580 2581 2582
 * @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
2583
 */
michael's avatar
michael committed
2584
struct AVResampleContext *av_resample_init(int out_rate, int in_rate, int filter_length, int log2_phase_count, int linear, double cutoff);
2585 2586 2587 2588 2589 2590 2591 2592 2593 2594

/**
 * 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
 */
2595
int av_resample(struct AVResampleContext *c, short *dst, short *src, int *consumed, int src_size, int dst_size, int update_ctx);
2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609


/**
 * 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
2610
void av_resample_compensate(struct AVResampleContext *c, int sample_delta, int compensation_distance);
2611
void av_resample_close(struct AVResampleContext *c);
2612

michael's avatar
michael committed
2613 2614 2615
/**
 * Allocate memory for a picture.  Call avpicture_free to free it.
 *
diego's avatar
diego committed
2616 2617 2618 2619 2620
 * @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
2621 2622 2623
 */
int avpicture_alloc(AVPicture *picture, int pix_fmt, int width, int height);

2624 2625 2626
/**
 * Free a picture previously allocated by avpicture_alloc().
 *
diego's avatar
diego committed
2627
 * @param picture the AVPicture to be freed
2628
 */
michael's avatar
michael committed
2629 2630
void avpicture_free(AVPicture *picture);

2631
/**
diego's avatar
diego committed
2632
 * Fill in the AVPicture fields.
2633 2634 2635 2636 2637 2638 2639
 * 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.
 *
diego's avatar
diego committed
2640
 * @param picture AVPicture whose fields are to be filled in
2641
 * @param ptr Buffer which will contain or contains the actual image data
diego's avatar
diego committed
2642 2643 2644 2645
 * @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
2646
 */
kabi's avatar
kabi committed
2647
int avpicture_fill(AVPicture *picture, uint8_t *ptr,
2648
                   int pix_fmt, int width, int height);
2649
int avpicture_layout(const AVPicture* src, int pix_fmt, int width, int height,
romansh's avatar
 
romansh committed
2650
                     unsigned char *dest, int dest_size);
2651 2652 2653 2654 2655

/**
 * Calculate the size in bytes that a picture of the given width and height
 * would occupy if stored in the given picture format.
 *
diego's avatar
diego committed
2656 2657 2658
 * @param pix_fmt the given picture format
 * @param width the width of the image
 * @param height the height of the image
2659 2660
 * @return Image data size in bytes
 */
2661
int avpicture_get_size(int pix_fmt, int width, int height);
2662 2663
void avcodec_get_chroma_sub_sample(int pix_fmt, int *h_shift, int *v_shift);
const char *avcodec_get_pix_fmt_name(int pix_fmt);
2664
void avcodec_set_dimensions(AVCodecContext *s, int width, int height);
romansh's avatar
 
romansh committed
2665
enum PixelFormat avcodec_get_pix_fmt(const char* name);
michael's avatar
michael committed
2666
unsigned int avcodec_pix_fmt_to_codec_tag(enum PixelFormat p);
2667

2668 2669 2670 2671 2672 2673
#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) */
2674

2675
/**
2676 2677 2678 2679 2680 2681 2682 2683
 * 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
2684 2685
 * avcodec_get_fix_fmt_loss() informs you about the various types of losses
 * which will occur when converting from one pixel format to another.
2686
 *
diego's avatar
diego committed
2687 2688
 * @param[in] dst_pix_fmt destination pixel format
 * @param[in] src_pix_fmt source pixel format
2689 2690
 * @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.
2691
 */
2692 2693
int avcodec_get_pix_fmt_loss(int dst_pix_fmt, int src_pix_fmt,
                             int has_alpha);
2694 2695

/**
2696 2697 2698 2699 2700
 * 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
2701 2702
 * 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
2703 2704 2705 2706 2707 2708 2709 2710
 * \p pix_fmt_mask parameter.
 *
 * @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
2711 2712
 * @param[in] pix_fmt_mask bitmask determining which pixel format to choose from
 * @param[in] src_pix_fmt source pixel format
2713 2714 2715
 * @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.
2716
 */
2717
int avcodec_find_best_pix_fmt(int64_t pix_fmt_mask, int src_pix_fmt,
2718 2719
                              int has_alpha, int *loss_ptr);

benoit's avatar
 
benoit committed
2720 2721 2722 2723 2724

/**
 * Print in buf the string corresponding to the pixel format with
 * number pix_fmt, or an header if pix_fmt is negative.
 *
2725 2726 2727
 * @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
2728 2729 2730 2731 2732
 * a negative value to print the corresponding header.
 * Meaningful values for obtaining a pixel format info vary from 0 to PIX_FMT_NB -1.
 */
void avcodec_pix_fmt_string (char *buf, int buf_size, int pix_fmt);

bellard's avatar
bellard committed
2733 2734
#define FF_ALPHA_TRANSP       0x0001 /* image has some totally transparent pixels */
#define FF_ALPHA_SEMI_TRANSP  0x0002 /* image has some transparent pixels */
2735 2736 2737 2738 2739

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

2743
/* deinterlace a picture */
2744
/* deinterlace - if not supported return -1 */
2745
int avpicture_deinterlace(AVPicture *dst, const AVPicture *src,
glantau's avatar
glantau committed
2746 2747 2748 2749
                          int pix_fmt, int width, int height);

/* external high level API */

stefano's avatar
stefano committed
2750 2751
/**
 * If c is NULL, returns the first registered codec,
2752
 * if c is non-NULL, returns the next registered codec after c,
stefano's avatar
stefano committed
2753 2754
 * or NULL if c is the last one.
 */
michael's avatar
michael committed
2755
AVCodec *av_codec_next(AVCodec *c);
glantau's avatar
glantau committed
2756

stefano's avatar
stefano committed
2757 2758 2759
/**
 * Returns the LIBAVCODEC_VERSION_INT constant.
 */
2760
unsigned avcodec_version(void);
stefano's avatar
stefano committed
2761

takis's avatar
takis committed
2762 2763 2764 2765 2766 2767
/**
 * Initializes libavcodec.
 *
 * @warning This function \e must be called before any other libavcodec
 * function.
 */
glantau's avatar
glantau committed
2768 2769
void avcodec_init(void);

2770
#if LIBAVCODEC_VERSION_MAJOR < 53
2771 2772 2773 2774
/**
 * @deprecated Deprecated in favor of avcodec_register().
 */
attribute_deprecated void register_avcodec(AVCodec *codec);
2775
#endif
2776

stefano's avatar
stefano committed
2777 2778 2779 2780 2781
/**
 * Register the codec \p codec and initialize libavcodec.
 *
 * @see avcodec_init()
 */
2782
void avcodec_register(AVCodec *codec);
takis's avatar
takis committed
2783 2784

/**
2785
 * Finds a registered encoder with a matching codec ID.
takis's avatar
takis committed
2786
 *
diego's avatar
diego committed
2787
 * @param id CodecID of the requested encoder
takis's avatar
takis committed
2788 2789
 * @return An encoder if one was found, NULL otherwise.
 */
glantau's avatar
glantau committed
2790
AVCodec *avcodec_find_encoder(enum CodecID id);
takis's avatar
takis committed
2791 2792

/**
2793
 * Finds a registered encoder with the specified name.
takis's avatar
takis committed
2794
 *
diego's avatar
diego committed
2795
 * @param name name of the requested encoder
takis's avatar
takis committed
2796 2797
 * @return An encoder if one was found, NULL otherwise.
 */
2798
AVCodec *avcodec_find_encoder_by_name(const char *name);
takis's avatar
takis committed
2799 2800

/**
2801
 * Finds a registered decoder with a matching codec ID.
takis's avatar
takis committed
2802
 *
diego's avatar
diego committed
2803
 * @param id CodecID of the requested decoder
takis's avatar
takis committed
2804 2805
 * @return A decoder if one was found, NULL otherwise.
 */
glantau's avatar
glantau committed
2806
AVCodec *avcodec_find_decoder(enum CodecID id);
takis's avatar
takis committed
2807 2808

/**
2809
 * Finds a registered decoder with the specified name.
takis's avatar
takis committed
2810
 *
diego's avatar
diego committed
2811
 * @param name name of the requested decoder
takis's avatar
takis committed
2812 2813
 * @return A decoder if one was found, NULL otherwise.
 */
glantau's avatar
glantau committed
2814 2815 2816
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
2817 2818 2819 2820 2821
/**
 * 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
2822
void avcodec_get_context_defaults(AVCodecContext *s);
takis's avatar
takis committed
2823

2824 2825 2826 2827
/** 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
2828 2829 2830 2831 2832 2833 2834
/**
 * 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
2835
AVCodecContext *avcodec_alloc_context(void);
takis's avatar
takis committed
2836

2837 2838 2839 2840
/** 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
2841 2842 2843 2844 2845
/**
 * 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
2846
void avcodec_get_frame_defaults(AVFrame *pic);
takis's avatar
takis committed
2847 2848 2849 2850 2851 2852 2853 2854

/**
 * 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
2855
AVFrame *avcodec_alloc_frame(void);
michaelni's avatar
michaelni committed
2856

michaelni's avatar
michaelni committed
2857 2858
int avcodec_default_get_buffer(AVCodecContext *s, AVFrame *pic);
void avcodec_default_release_buffer(AVCodecContext *s, AVFrame *pic);
michael's avatar
michael committed
2859 2860
int avcodec_default_reget_buffer(AVCodecContext *s, AVFrame *pic);
void avcodec_align_dimensions(AVCodecContext *s, int *width, int *height);
takis's avatar
takis committed
2861 2862 2863 2864 2865 2866 2867 2868 2869

/**
 * 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.
 */
2870
int avcodec_check_dimensions(void *av_log_ctx, unsigned int w, unsigned int h);
michael's avatar
michael committed
2871
enum PixelFormat avcodec_default_get_format(struct AVCodecContext *s, const enum PixelFormat * fmt);
michaelni's avatar
michaelni committed
2872

michael's avatar
1l  
michael committed
2873 2874
int avcodec_thread_init(AVCodecContext *s, int thread_count);
void avcodec_thread_free(AVCodecContext *s);
2875 2876
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);
2877 2878
//FIXME func typedef

michaelni's avatar
michaelni committed
2879
/**
takis's avatar
takis committed
2880 2881 2882 2883 2884 2885 2886
 * 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
2887
 * @warning This function is not thread safe!
takis's avatar
takis committed
2888 2889
 *
 * @code
2890
 * avcodec_register_all();
takis's avatar
takis committed
2891 2892 2893 2894 2895 2896 2897 2898 2899 2900
 * 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
2901
 * @param avctx The context which will be set up to use the given codec.
takis's avatar
takis committed
2902
 * @param codec The codec to use within the context.
diego's avatar
diego committed
2903
 * @return zero on success, a negative value on error
takis's avatar
takis committed
2904
 * @see avcodec_alloc_context, avcodec_find_decoder, avcodec_find_encoder
michaelni's avatar
michaelni committed
2905
 */
glantau's avatar
glantau committed
2906
int avcodec_open(AVCodecContext *avctx, AVCodec *codec);
michaelni's avatar
michaelni committed
2907

2908
/**
takis's avatar
takis committed
2909
 * Decodes an audio frame from \p buf into \p samples.
diego's avatar
diego committed
2910
 * The avcodec_decode_audio2() function decodes an audio frame from the input
takis's avatar
takis committed
2911
 * buffer \p buf of size \p buf_size. To decode it, it makes use of the
diego's avatar
diego committed
2912
 * audio codec which was coupled with \p avctx using avcodec_open(). The
takis's avatar
takis committed
2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925
 * resulting decoded frame is stored in output buffer \p samples.  If no frame
 * could be decompressed, \p frame_size_ptr is zero. Otherwise, it is the
 * decompressed frame size in \e bytes.
 *
 * @warning You \e must set \p frame_size_ptr to the allocated size of the
 * output buffer before calling avcodec_decode_audio2().
 *
 * @warning The input buffer must be \c FF_INPUT_BUFFER_PADDING_SIZE larger than
 * the actual read bytes because some optimized bitstream readers read 32 or 64
 * bits at once and could read over the end.
 *
 * @warning The end of the input buffer \p buf should be set to 0 to ensure that
 * no overreading happens for damaged MPEG streams.
2926
 *
takis's avatar
takis committed
2927
 * @note You might have to align the input buffer \p buf and output buffer \p
diego's avatar
diego committed
2928
 * samples. The alignment requirements depend on the CPU: On some CPUs it isn't
takis's avatar
takis committed
2929 2930 2931 2932 2933 2934 2935
 * necessary at all, on others it won't work at all if not aligned and on others
 * it will work but it will have an impact on performance. In practice, the
 * bitstream should have 4 byte alignment at minimum and all sample data should
 * be 16 byte aligned unless the CPU doesn't need it (AltiVec and SSE do). If
 * the linesize is not a multiple of 16 then there's no sense in aligning the
 * start of the buffer to 16.
 *
diego's avatar
diego committed
2936 2937 2938 2939 2940
 * @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
takis's avatar
takis committed
2941 2942
 * @return On error a negative value is returned, otherwise the number of bytes
 * used or zero if no frame could be decompressed.
2943
 */
michael's avatar
michael committed
2944
int avcodec_decode_audio2(AVCodecContext *avctx, int16_t *samples,
glantau's avatar
glantau committed
2945
                         int *frame_size_ptr,
2946
                         const uint8_t *buf, int buf_size);
takis's avatar
takis committed
2947 2948 2949

/**
 * Decodes a video frame from \p buf into \p picture.
diego's avatar
diego committed
2950
 * The avcodec_decode_video() function decodes a video frame from the input
takis's avatar
takis committed
2951
 * buffer \p buf of size \p buf_size. To decode it, it makes use of the
diego's avatar
diego committed
2952
 * video codec which was coupled with \p avctx using avcodec_open(). The
takis's avatar
takis committed
2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970
 * resulting decoded frame is stored in \p picture.
 *
 * @warning The input buffer must be \c FF_INPUT_BUFFER_PADDING_SIZE larger than
 * the actual read bytes because some optimized bitstream readers read 32 or 64
 * bits at once and could read over the end.
 *
 * @warning The end of the input buffer \p buf should be set to 0 to ensure that
 * no overreading happens for damaged MPEG streams.
 *
 * @note You might have to align the input buffer \p buf and output buffer \p
 * samples. The alignment requirements depend on the CPU: on some CPUs it isn't
 * necessary at all, on others it won't work at all if not aligned and on others
 * it will work but it will have an impact on performance. In practice, the
 * bitstream should have 4 byte alignment at minimum and all sample data should
 * be 16 byte aligned unless the CPU doesn't need it (AltiVec and SSE do). If
 * the linesize is not a multiple of 16 then there's no sense in aligning the
 * start of the buffer to 16.
 *
2971 2972 2973
 * @note Some codecs have a delay between input and output, these need to be
 * feeded with buf=NULL, buf_size=0 at the end to return the remaining frames.
 *
diego's avatar
diego committed
2974
 * @param avctx the codec context
takis's avatar
takis committed
2975
 * @param[out] picture The AVFrame in which the decoded video frame will be stored.
diego's avatar
diego committed
2976 2977 2978
 * @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.
takis's avatar
takis committed
2979 2980 2981
 * @return On error a negative value is returned, otherwise the number of bytes
 * used or zero if no frame could be decompressed.
 */
2982
int avcodec_decode_video(AVCodecContext *avctx, AVFrame *picture,
glantau's avatar
glantau committed
2983
                         int *got_picture_ptr,
2984
                         const uint8_t *buf, int buf_size);
2985

diego's avatar
diego committed
2986 2987 2988
/* 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. */
bellard's avatar
bellard committed
2989 2990 2991
int avcodec_decode_subtitle(AVCodecContext *avctx, AVSubtitle *sub,
                            int *got_sub_ptr,
                            const uint8_t *buf, int buf_size);
2992
int avcodec_parse_frame(AVCodecContext *avctx, uint8_t **pdata,
2993
                        int *data_size_ptr,
kabi's avatar
kabi committed
2994
                        uint8_t *buf, int buf_size);
takis's avatar
takis committed
2995 2996 2997

/**
 * Encodes an audio frame from \p samples into \p buf.
diego's avatar
diego committed
2998 2999
 * The avcodec_encode_audio() function encodes an audio frame from the input
 * buffer \p samples. To encode it, it makes use of the audio codec which was
takis's avatar
takis committed
3000 3001 3002 3003 3004
 * coupled with \p avctx using avcodec_open(). The resulting encoded frame is
 * stored in output buffer \p buf.
 *
 * @note The output buffer should be at least \c FF_MIN_BUFFER_SIZE bytes large.
 *
diego's avatar
diego committed
3005 3006 3007 3008
 * @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
3009 3010
 * The number of samples read from this buffer is frame_size*channels,
 * both of which are defined in \p avctx.
3011 3012
 * For PCM audio the number of samples read from \p samples is equal to
 * \p buf_size * input_sample_size / output_sample_size.
diego's avatar
diego committed
3013
 * @return On error a negative value is returned, on success zero or the number
3014
 * of bytes used to encode the data read from the input buffer.
takis's avatar
takis committed
3015
 */
3016
int avcodec_encode_audio(AVCodecContext *avctx, uint8_t *buf, int buf_size,
glantau's avatar
glantau committed
3017
                         const short *samples);
takis's avatar
takis committed
3018 3019 3020

/**
 * Encodes a video frame from \p pict into \p buf.
diego's avatar
diego committed
3021 3022
 * The avcodec_encode_video() function encodes a video frame from the input
 * \p pict. To encode it, it makes use of the video codec which was coupled with
takis's avatar
takis committed
3023 3024 3025 3026
 * \p avctx using avcodec_open(). The resulting encoded bytes representing the
 * frame are stored in the output buffer \p buf. The input picture should be
 * stored using a specific format, namely \c avctx.pix_fmt.
 *
diego's avatar
diego committed
3027 3028 3029 3030
 * @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
3031
 * @return On error a negative value is returned, on success zero or the number
3032
 * of bytes used from the output buffer.
takis's avatar
takis committed
3033
 */
3034
int avcodec_encode_video(AVCodecContext *avctx, uint8_t *buf, int buf_size,
michaelni's avatar
michaelni committed
3035
                         const AVFrame *pict);
3036
int avcodec_encode_subtitle(AVCodecContext *avctx, uint8_t *buf, int buf_size,
bellard's avatar
bellard committed
3037
                            const AVSubtitle *sub);
glantau's avatar
glantau committed
3038 3039 3040

int avcodec_close(AVCodecContext *avctx);

3041 3042 3043 3044 3045 3046
/**
 * 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.
 *
3047
 * @see avcodec_register
3048 3049 3050
 * @see av_register_codec_parser
 * @see av_register_bitstream_filter
 */
glantau's avatar
glantau committed
3051
void avcodec_register_all(void);
glantau's avatar
glantau committed
3052

3053 3054 3055
/**
 * Flush buffers, should be called when seeking or when switching to a different stream.
 */
michaelni's avatar
michaelni committed
3056 3057
void avcodec_flush_buffers(AVCodecContext *avctx);

3058 3059
void avcodec_default_free_buffers(AVCodecContext *s);

takis's avatar
takis committed
3060
/* misc useful functions */
michaelni's avatar
michaelni committed
3061 3062

/**
3063 3064
 * Returns a single letter to describe the given picture type \p pict_type.
 *
diego's avatar
diego committed
3065
 * @param[in] pict_type the picture type
3066
 * @return A single character representing the picture type.
michaelni's avatar
michaelni committed
3067 3068 3069
 */
char av_get_pict_type_char(int pict_type);

3070
/**
3071 3072
 * Returns codec bits per sample.
 *
diego's avatar
diego committed
3073
 * @param[in] codec_id the codec
3074
 * @return Number of bits per sample or zero if unknown for the given codec.
3075 3076
 */
int av_get_bits_per_sample(enum CodecID codec_id);
3077

conrad's avatar
conrad committed
3078 3079 3080 3081 3082 3083 3084 3085
/**
 * 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
3086 3087 3088 3089 3090
/* frame parsing */
typedef struct AVCodecParserContext {
    void *priv_data;
    struct AVCodecParser *parser;
    int64_t frame_offset; /* offset of the current frame */
3091
    int64_t cur_offset; /* current offset
bellard's avatar
bellard committed
3092
                           (incremented by each av_parser_parse()) */
3093
    int64_t next_frame_offset; /* offset of the next frame */
bellard's avatar
bellard committed
3094
    /* video info */
diego's avatar
diego committed
3095
    int pict_type; /* XXX: Put it back in AVCodecContext. */
3096 3097 3098 3099 3100
    /**
     * 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.
     *
3101
     * frame_duration = (1 + repeat_pict) * time_base
3102 3103 3104
     *
     * It is used by codecs like H.264 to display telecined material.
     */
diego's avatar
diego committed
3105
    int repeat_pict; /* XXX: Put it back in AVCodecContext. */
bellard's avatar
bellard committed
3106 3107 3108 3109 3110 3111
    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
3112
    int fetch_timestamp;
bellard's avatar
bellard committed
3113 3114 3115 3116 3117 3118

#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];
3119

michael's avatar
michael committed
3120 3121
    int flags;
#define PARSER_FLAG_COMPLETE_FRAMES           0x0001
benoit's avatar
 
benoit committed
3122 3123

    int64_t offset;      ///< byte offset from starting packet start
3124
    int64_t cur_frame_end[AV_PARSER_PTS_NB];
3125 3126 3127 3128 3129 3130 3131 3132

    /*!
     * 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;
3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149

    /**
     * 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;
bellard's avatar
bellard committed
3150 3151 3152
} AVCodecParserContext;

typedef struct AVCodecParser {
michael's avatar
michael committed
3153
    int codec_ids[5]; /* several codec IDs are permitted */
bellard's avatar
bellard committed
3154 3155
    int priv_data_size;
    int (*parser_init)(AVCodecParserContext *s);
3156
    int (*parser_parse)(AVCodecParserContext *s,
bellard's avatar
bellard committed
3157
                        AVCodecContext *avctx,
3158
                        const uint8_t **poutbuf, int *poutbuf_size,
bellard's avatar
bellard committed
3159 3160
                        const uint8_t *buf, int buf_size);
    void (*parser_close)(AVCodecParserContext *s);
3161
    int (*split)(AVCodecContext *avctx, const uint8_t *buf, int buf_size);
bellard's avatar
bellard committed
3162 3163 3164
    struct AVCodecParser *next;
} AVCodecParser;

michael's avatar
michael committed
3165
AVCodecParser *av_parser_next(AVCodecParser *c);
bellard's avatar
bellard committed
3166 3167 3168

void av_register_codec_parser(AVCodecParser *parser);
AVCodecParserContext *av_parser_init(int codec_id);
3169
int av_parser_parse(AVCodecParserContext *s,
bellard's avatar
bellard committed
3170
                    AVCodecContext *avctx,
3171
                    uint8_t **poutbuf, int *poutbuf_size,
bellard's avatar
bellard committed
3172 3173
                    const uint8_t *buf, int buf_size,
                    int64_t pts, int64_t dts);
3174 3175
int av_parser_change(AVCodecParserContext *s,
                     AVCodecContext *avctx,
3176
                     uint8_t **poutbuf, int *poutbuf_size,
3177
                     const uint8_t *buf, int buf_size, int keyframe);
bellard's avatar
bellard committed
3178 3179
void av_parser_close(AVCodecParserContext *s);

3180 3181

typedef struct AVBitStreamFilterContext {
michael's avatar
michael committed
3182
    void *priv_data;
3183 3184 3185 3186 3187 3188 3189 3190
    struct AVBitStreamFilter *filter;
    AVCodecParserContext *parser;
    struct AVBitStreamFilterContext *next;
} AVBitStreamFilterContext;


typedef struct AVBitStreamFilter {
    const char *name;
michael's avatar
michael committed
3191
    int priv_data_size;
3192 3193 3194 3195
    int (*filter)(AVBitStreamFilterContext *bsfc,
                  AVCodecContext *avctx, const char *args,
                  uint8_t **poutbuf, int *poutbuf_size,
                  const uint8_t *buf, int buf_size, int keyframe);
3196
    void (*close)(AVBitStreamFilterContext *bsfc);
3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207
    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
3208
AVBitStreamFilter *av_bitstream_filter_next(AVBitStreamFilter *f);
3209

bellard's avatar
bellard committed
3210
/* memory */
3211 3212

/**
3213 3214 3215 3216
 * Reallocates the given block if it is not large enough, otherwise it
 * does nothing.
 *
 * @see av_realloc
3217
 */
kabi's avatar
kabi committed
3218
void *av_fast_realloc(void *ptr, unsigned int *size, unsigned int min_size);
3219

3220 3221 3222
/**
 * Copy image 'src' to 'dst'.
 */
3223
void av_picture_copy(AVPicture *dst, const AVPicture *src,
3224 3225
              int pix_fmt, int width, int height);

3226
/**
diego's avatar
diego committed
3227
 * Crop image top and left side.
3228
 */
3229
int av_picture_crop(AVPicture *dst, const AVPicture *src,
3230 3231
             int pix_fmt, int top_band, int left_band);

3232
/**
diego's avatar
diego committed
3233
 * Pad image.
3234
 */
3235
int av_picture_pad(AVPicture *dst, const AVPicture *src, int height, int width, int pix_fmt,
3236 3237
            int padtop, int padbottom, int padleft, int padright, int *color);

3238
unsigned int av_xiphlacing(unsigned char *s, unsigned int v);
mru's avatar
mru committed
3239

3240 3241 3242
/**
 * Parses \p str and put in \p width_ptr and \p height_ptr the detected values.
 *
diego's avatar
diego committed
3243
 * @return 0 in case of a successful parsing, a negative value otherwise
3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255
 * @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);

/**
 * Parses \p str and put in \p frame_rate the detected values.
 *
diego's avatar
diego committed
3256
 * @return 0 in case of a successful parsing, a negative value otherwise
3257
 * @param[in] str the string to parse: it has to be a string in the format
3258
 * <frame_rate_num>/<frame_rate_den>, a float number or a valid video rate abbreviation
3259 3260 3261 3262 3263
 * @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);

3264 3265
/* error handling */
#if EINVAL > 0
diego's avatar
diego committed
3266 3267
#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. */
3268
#else
diego's avatar
diego committed
3269
/* Some platforms have E* and errno already negated. */
3270 3271 3272 3273
#define AVERROR(e) (e)
#define AVUNERROR(e) (e)
#endif
#define AVERROR_UNKNOWN     AVERROR(EINVAL)  /**< unknown error */
diego's avatar
diego committed
3274 3275
#define AVERROR_IO          AVERROR(EIO)     /**< I/O error */
#define AVERROR_NUMEXPECTED AVERROR(EDOM)    /**< Number syntax expected in filename. */
3276 3277 3278
#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
3279
#define AVERROR_NOTSUPP     AVERROR(ENOSYS)  /**< Operation not supported. */
benoit's avatar
 
benoit committed
3280
#define AVERROR_NOENT       AVERROR(ENOENT)  /**< No such file or directory. */
pross's avatar
pross committed
3281
#define AVERROR_EOF         AVERROR(EPIPE)   /**< End of file. */
ramiro's avatar
ramiro committed
3282
#define AVERROR_PATCHWELCOME    -MKTAG('P','A','W','E') /**< Not yet implemented in FFmpeg. Patches welcome. */
3283

3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295
/**
 * Registers the hardware accelerator \p hwaccel.
 */
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);

3296
#endif /* AVCODEC_AVCODEC_H */