flv: Use the correct type to hold the file offset
[libav.git] / libavcodec / avcodec.h
CommitLineData
04d7f601
DB
1/*
2 * copyright (c) 2001 Fabrice Bellard
3 *
2912e87a 4 * This file is part of Libav.
b78e7197 5 *
2912e87a 6 * Libav is free software; you can redistribute it and/or
04d7f601
DB
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
b78e7197 9 * version 2.1 of the License, or (at your option) any later version.
04d7f601 10 *
2912e87a 11 * Libav is distributed in the hope that it will be useful,
04d7f601
DB
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public
2912e87a 17 * License along with Libav; if not, write to the Free Software
e5a389a1 18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
04d7f601
DB
19 */
20
98790382
SS
21#ifndef AVCODEC_AVCODEC_H
22#define AVCODEC_AVCODEC_H
a96b68b7 23
36df8805 24/**
ba87f080 25 * @file
f0cebf51
AK
26 * @ingroup libavc
27 * Libavcodec external API header
36df8805
MN
28 */
29
c60208e7 30#include <errno.h>
737eb597 31#include "libavutil/samplefmt.h"
bf4b0ed1 32#include "libavutil/attributes.h"
76a448ed 33#include "libavutil/avutil.h"
1afddbe5 34#include "libavutil/buffer.h"
7160bb71 35#include "libavutil/cpu.h"
0b950fe2 36#include "libavutil/dict.h"
7ecc2d40 37#include "libavutil/frame.h"
abc78a5a 38#include "libavutil/log.h"
d49ea4af 39#include "libavutil/pixfmt.h"
e91709ca 40#include "libavutil/rational.h"
de6d9b64 41
a0b901a3
DB
42#include "version.h"
43
6f1ec8ed
VG
44#if FF_API_FAST_MALLOC
45// to provide fast_*alloc
46#include "libavutil/mem.h"
47#endif
48
e97e5a2e
LB
49/**
50 * @defgroup libavc Encoding/Decoding Library
51 * @{
52 *
53 * @defgroup lavc_decoding Decoding
54 * @{
55 * @}
56 *
57 * @defgroup lavc_encoding Encoding
58 * @{
59 * @}
60 *
61 * @defgroup lavc_codec Codecs
62 * @{
63 * @defgroup lavc_codec_native Native Codecs
64 * @{
65 * @}
66 * @defgroup lavc_codec_wrappers External library wrappers
67 * @{
68 * @}
69 * @defgroup lavc_codec_hwaccel Hardware Accelerators bridge
70 * @{
71 * @}
72 * @}
73 * @defgroup lavc_internal Internal
74 * @{
75 * @}
76 * @}
77 *
78 */
79
294b3a50
AK
80/**
81 * @defgroup lavc_core Core functions/structures.
82 * @ingroup libavc
83 *
84 * Basic definitions, functions for querying libavcodec capabilities,
85 * allocating core structures, etc.
86 * @{
87 */
eda7c983 88
104e10fb 89
7ebf5927 90/**
48966b02 91 * Identify the syntax and semantics of the bitstream.
6b0cdb6e
NG
92 * The principle is roughly:
93 * Two decoders with the same ID can decode the same streams.
94 * Two encoders with the same ID can encode compatible streams.
95 * There may be slight deviations from the principle due to implementation
96 * details.
7ebf5927 97 *
f5bccd85
DB
98 * If you add a codec ID to this list, add it so that
99 * 1. no value of a existing codec ID changes (that would break ABI),
100 * 2. it is as close as possible to similar codecs.
bbabeb56
AK
101 *
102 * After adding new codec IDs, do not forget to add an entry to the codec
103 * descriptor list and bump libavcodec minor version.
7ebf5927 104 */
104e10fb
AK
105enum AVCodecID {
106 AV_CODEC_ID_NONE,
ba0dabbf
DB
107
108 /* video codecs */
104e10fb
AK
109 AV_CODEC_ID_MPEG1VIDEO,
110 AV_CODEC_ID_MPEG2VIDEO, ///< preferred ID for MPEG-1/2 video decoding
19e30a58 111#if FF_API_XVMC
104e10fb 112 AV_CODEC_ID_MPEG2VIDEO_XVMC,
19e30a58 113#endif /* FF_API_XVMC */
104e10fb
AK
114 AV_CODEC_ID_H261,
115 AV_CODEC_ID_H263,
116 AV_CODEC_ID_RV10,
117 AV_CODEC_ID_RV20,
118 AV_CODEC_ID_MJPEG,
119 AV_CODEC_ID_MJPEGB,
120 AV_CODEC_ID_LJPEG,
121 AV_CODEC_ID_SP5X,
122 AV_CODEC_ID_JPEGLS,
123 AV_CODEC_ID_MPEG4,
124 AV_CODEC_ID_RAWVIDEO,
125 AV_CODEC_ID_MSMPEG4V1,
126 AV_CODEC_ID_MSMPEG4V2,
127 AV_CODEC_ID_MSMPEG4V3,
128 AV_CODEC_ID_WMV1,
129 AV_CODEC_ID_WMV2,
130 AV_CODEC_ID_H263P,
131 AV_CODEC_ID_H263I,
132 AV_CODEC_ID_FLV1,
133 AV_CODEC_ID_SVQ1,
134 AV_CODEC_ID_SVQ3,
135 AV_CODEC_ID_DVVIDEO,
136 AV_CODEC_ID_HUFFYUV,
137 AV_CODEC_ID_CYUV,
138 AV_CODEC_ID_H264,
139 AV_CODEC_ID_INDEO3,
140 AV_CODEC_ID_VP3,
141 AV_CODEC_ID_THEORA,
142 AV_CODEC_ID_ASV1,
143 AV_CODEC_ID_ASV2,
144 AV_CODEC_ID_FFV1,
145 AV_CODEC_ID_4XM,
146 AV_CODEC_ID_VCR1,
147 AV_CODEC_ID_CLJR,
148 AV_CODEC_ID_MDEC,
149 AV_CODEC_ID_ROQ,
150 AV_CODEC_ID_INTERPLAY_VIDEO,
151 AV_CODEC_ID_XAN_WC3,
152 AV_CODEC_ID_XAN_WC4,
153 AV_CODEC_ID_RPZA,
154 AV_CODEC_ID_CINEPAK,
155 AV_CODEC_ID_WS_VQA,
156 AV_CODEC_ID_MSRLE,
157 AV_CODEC_ID_MSVIDEO1,
158 AV_CODEC_ID_IDCIN,
159 AV_CODEC_ID_8BPS,
160 AV_CODEC_ID_SMC,
161 AV_CODEC_ID_FLIC,
162 AV_CODEC_ID_TRUEMOTION1,
163 AV_CODEC_ID_VMDVIDEO,
164 AV_CODEC_ID_MSZH,
165 AV_CODEC_ID_ZLIB,
166 AV_CODEC_ID_QTRLE,
104e10fb
AK
167 AV_CODEC_ID_TSCC,
168 AV_CODEC_ID_ULTI,
169 AV_CODEC_ID_QDRAW,
170 AV_CODEC_ID_VIXL,
171 AV_CODEC_ID_QPEG,
172 AV_CODEC_ID_PNG,
173 AV_CODEC_ID_PPM,
174 AV_CODEC_ID_PBM,
175 AV_CODEC_ID_PGM,
176 AV_CODEC_ID_PGMYUV,
177 AV_CODEC_ID_PAM,
178 AV_CODEC_ID_FFVHUFF,
179 AV_CODEC_ID_RV30,
180 AV_CODEC_ID_RV40,
181 AV_CODEC_ID_VC1,
182 AV_CODEC_ID_WMV3,
183 AV_CODEC_ID_LOCO,
184 AV_CODEC_ID_WNV1,
185 AV_CODEC_ID_AASC,
186 AV_CODEC_ID_INDEO2,
187 AV_CODEC_ID_FRAPS,
188 AV_CODEC_ID_TRUEMOTION2,
189 AV_CODEC_ID_BMP,
190 AV_CODEC_ID_CSCD,
191 AV_CODEC_ID_MMVIDEO,
192 AV_CODEC_ID_ZMBV,
193 AV_CODEC_ID_AVS,
194 AV_CODEC_ID_SMACKVIDEO,
195 AV_CODEC_ID_NUV,
196 AV_CODEC_ID_KMVC,
197 AV_CODEC_ID_FLASHSV,
198 AV_CODEC_ID_CAVS,
199 AV_CODEC_ID_JPEG2000,
200 AV_CODEC_ID_VMNC,
201 AV_CODEC_ID_VP5,
202 AV_CODEC_ID_VP6,
203 AV_CODEC_ID_VP6F,
204 AV_CODEC_ID_TARGA,
205 AV_CODEC_ID_DSICINVIDEO,
206 AV_CODEC_ID_TIERTEXSEQVIDEO,
207 AV_CODEC_ID_TIFF,
208 AV_CODEC_ID_GIF,
209 AV_CODEC_ID_DXA,
210 AV_CODEC_ID_DNXHD,
211 AV_CODEC_ID_THP,
212 AV_CODEC_ID_SGI,
213 AV_CODEC_ID_C93,
214 AV_CODEC_ID_BETHSOFTVID,
215 AV_CODEC_ID_PTX,
216 AV_CODEC_ID_TXD,
217 AV_CODEC_ID_VP6A,
218 AV_CODEC_ID_AMV,
219 AV_CODEC_ID_VB,
220 AV_CODEC_ID_PCX,
221 AV_CODEC_ID_SUNRAST,
222 AV_CODEC_ID_INDEO4,
223 AV_CODEC_ID_INDEO5,
224 AV_CODEC_ID_MIMIC,
225 AV_CODEC_ID_RL2,
226 AV_CODEC_ID_ESCAPE124,
227 AV_CODEC_ID_DIRAC,
228 AV_CODEC_ID_BFI,
229 AV_CODEC_ID_CMV,
230 AV_CODEC_ID_MOTIONPIXELS,
231 AV_CODEC_ID_TGV,
232 AV_CODEC_ID_TGQ,
233 AV_CODEC_ID_TQI,
234 AV_CODEC_ID_AURA,
235 AV_CODEC_ID_AURA2,
236 AV_CODEC_ID_V210X,
237 AV_CODEC_ID_TMV,
238 AV_CODEC_ID_V210,
239 AV_CODEC_ID_DPX,
240 AV_CODEC_ID_MAD,
241 AV_CODEC_ID_FRWU,
242 AV_CODEC_ID_FLASHSV2,
243 AV_CODEC_ID_CDGRAPHICS,
244 AV_CODEC_ID_R210,
245 AV_CODEC_ID_ANM,
246 AV_CODEC_ID_BINKVIDEO,
247 AV_CODEC_ID_IFF_ILBM,
248 AV_CODEC_ID_IFF_BYTERUN1,
249 AV_CODEC_ID_KGV1,
250 AV_CODEC_ID_YOP,
251 AV_CODEC_ID_VP8,
252 AV_CODEC_ID_PICTOR,
253 AV_CODEC_ID_ANSI,
254 AV_CODEC_ID_A64_MULTI,
255 AV_CODEC_ID_A64_MULTI5,
256 AV_CODEC_ID_R10K,
257 AV_CODEC_ID_MXPEG,
258 AV_CODEC_ID_LAGARITH,
259 AV_CODEC_ID_PRORES,
260 AV_CODEC_ID_JV,
261 AV_CODEC_ID_DFA,
262 AV_CODEC_ID_WMV3IMAGE,
263 AV_CODEC_ID_VC1IMAGE,
264 AV_CODEC_ID_UTVIDEO,
265 AV_CODEC_ID_BMV_VIDEO,
266 AV_CODEC_ID_VBLE,
267 AV_CODEC_ID_DXTORY,
268 AV_CODEC_ID_V410,
269 AV_CODEC_ID_XWD,
270 AV_CODEC_ID_CDXL,
271 AV_CODEC_ID_XBM,
272 AV_CODEC_ID_ZEROCODEC,
273 AV_CODEC_ID_MSS1,
274 AV_CODEC_ID_MSA1,
275 AV_CODEC_ID_TSCC2,
276 AV_CODEC_ID_MTS2,
277 AV_CODEC_ID_CLLC,
ee769c6a 278 AV_CODEC_ID_MSS2,
66aabd76 279 AV_CODEC_ID_VP9,
1232a164 280 AV_CODEC_ID_AIC,
350914fc 281 AV_CODEC_ID_ESCAPE130,
2d66a58c 282 AV_CODEC_ID_G2M,
c4bfa098 283 AV_CODEC_ID_WEBP,
9af7a852 284 AV_CODEC_ID_HNM4_VIDEO,
064698d3 285 AV_CODEC_ID_HEVC,
40c5ee99 286
f5bccd85 287 /* various PCM "codecs" */
104e10fb
AK
288 AV_CODEC_ID_FIRST_AUDIO = 0x10000, ///< A dummy id pointing at the start of audio codecs
289 AV_CODEC_ID_PCM_S16LE = 0x10000,
290 AV_CODEC_ID_PCM_S16BE,
291 AV_CODEC_ID_PCM_U16LE,
292 AV_CODEC_ID_PCM_U16BE,
293 AV_CODEC_ID_PCM_S8,
294 AV_CODEC_ID_PCM_U8,
295 AV_CODEC_ID_PCM_MULAW,
296 AV_CODEC_ID_PCM_ALAW,
297 AV_CODEC_ID_PCM_S32LE,
298 AV_CODEC_ID_PCM_S32BE,
299 AV_CODEC_ID_PCM_U32LE,
300 AV_CODEC_ID_PCM_U32BE,
301 AV_CODEC_ID_PCM_S24LE,
302 AV_CODEC_ID_PCM_S24BE,
303 AV_CODEC_ID_PCM_U24LE,
304 AV_CODEC_ID_PCM_U24BE,
305 AV_CODEC_ID_PCM_S24DAUD,
306 AV_CODEC_ID_PCM_ZORK,
307 AV_CODEC_ID_PCM_S16LE_PLANAR,
308 AV_CODEC_ID_PCM_DVD,
309 AV_CODEC_ID_PCM_F32BE,
310 AV_CODEC_ID_PCM_F32LE,
311 AV_CODEC_ID_PCM_F64BE,
312 AV_CODEC_ID_PCM_F64LE,
313 AV_CODEC_ID_PCM_BLURAY,
314 AV_CODEC_ID_PCM_LXF,
315 AV_CODEC_ID_S302M,
316 AV_CODEC_ID_PCM_S8_PLANAR,
7e52080c
PM
317 AV_CODEC_ID_PCM_S24LE_PLANAR,
318 AV_CODEC_ID_PCM_S32LE_PLANAR,
0147f198 319
f5bccd85 320 /* various ADPCM codecs */
104e10fb
AK
321 AV_CODEC_ID_ADPCM_IMA_QT = 0x11000,
322 AV_CODEC_ID_ADPCM_IMA_WAV,
323 AV_CODEC_ID_ADPCM_IMA_DK3,
324 AV_CODEC_ID_ADPCM_IMA_DK4,
325 AV_CODEC_ID_ADPCM_IMA_WS,
326 AV_CODEC_ID_ADPCM_IMA_SMJPEG,
327 AV_CODEC_ID_ADPCM_MS,
328 AV_CODEC_ID_ADPCM_4XM,
329 AV_CODEC_ID_ADPCM_XA,
330 AV_CODEC_ID_ADPCM_ADX,
331 AV_CODEC_ID_ADPCM_EA,
332 AV_CODEC_ID_ADPCM_G726,
333 AV_CODEC_ID_ADPCM_CT,
334 AV_CODEC_ID_ADPCM_SWF,
335 AV_CODEC_ID_ADPCM_YAMAHA,
336 AV_CODEC_ID_ADPCM_SBPRO_4,
337 AV_CODEC_ID_ADPCM_SBPRO_3,
338 AV_CODEC_ID_ADPCM_SBPRO_2,
339 AV_CODEC_ID_ADPCM_THP,
340 AV_CODEC_ID_ADPCM_IMA_AMV,
341 AV_CODEC_ID_ADPCM_EA_R1,
342 AV_CODEC_ID_ADPCM_EA_R3,
343 AV_CODEC_ID_ADPCM_EA_R2,
344 AV_CODEC_ID_ADPCM_IMA_EA_SEAD,
345 AV_CODEC_ID_ADPCM_IMA_EA_EACS,
346 AV_CODEC_ID_ADPCM_EA_XAS,
347 AV_CODEC_ID_ADPCM_EA_MAXIS_XA,
348 AV_CODEC_ID_ADPCM_IMA_ISS,
349 AV_CODEC_ID_ADPCM_G722,
350 AV_CODEC_ID_ADPCM_IMA_APC,
891f64b3 351
17179d2d 352 /* AMR */
104e10fb
AK
353 AV_CODEC_ID_AMR_NB = 0x12000,
354 AV_CODEC_ID_AMR_WB,
d663a1fd 355
b8414bbd 356 /* RealAudio codecs*/
104e10fb
AK
357 AV_CODEC_ID_RA_144 = 0x13000,
358 AV_CODEC_ID_RA_288,
3ef8be2b
MM
359
360 /* various DPCM codecs */
104e10fb
AK
361 AV_CODEC_ID_ROQ_DPCM = 0x14000,
362 AV_CODEC_ID_INTERPLAY_DPCM,
363 AV_CODEC_ID_XAN_DPCM,
364 AV_CODEC_ID_SOL_DPCM,
115329f1 365
ba0dabbf 366 /* audio codecs */
104e10fb
AK
367 AV_CODEC_ID_MP2 = 0x15000,
368 AV_CODEC_ID_MP3, ///< preferred ID for decoding MPEG audio layer 1, 2 or 3
369 AV_CODEC_ID_AAC,
370 AV_CODEC_ID_AC3,
371 AV_CODEC_ID_DTS,
372 AV_CODEC_ID_VORBIS,
373 AV_CODEC_ID_DVAUDIO,
374 AV_CODEC_ID_WMAV1,
375 AV_CODEC_ID_WMAV2,
376 AV_CODEC_ID_MACE3,
377 AV_CODEC_ID_MACE6,
378 AV_CODEC_ID_VMDAUDIO,
379 AV_CODEC_ID_FLAC,
380 AV_CODEC_ID_MP3ADU,
381 AV_CODEC_ID_MP3ON4,
382 AV_CODEC_ID_SHORTEN,
383 AV_CODEC_ID_ALAC,
384 AV_CODEC_ID_WESTWOOD_SND1,
385 AV_CODEC_ID_GSM, ///< as in Berlin toast format
386 AV_CODEC_ID_QDM2,
387 AV_CODEC_ID_COOK,
388 AV_CODEC_ID_TRUESPEECH,
389 AV_CODEC_ID_TTA,
390 AV_CODEC_ID_SMACKAUDIO,
391 AV_CODEC_ID_QCELP,
392 AV_CODEC_ID_WAVPACK,
393 AV_CODEC_ID_DSICINAUDIO,
394 AV_CODEC_ID_IMC,
395 AV_CODEC_ID_MUSEPACK7,
396 AV_CODEC_ID_MLP,
397 AV_CODEC_ID_GSM_MS, /* as found in WAV */
398 AV_CODEC_ID_ATRAC3,
f544c586 399#if FF_API_VOXWARE
104e10fb 400 AV_CODEC_ID_VOXWARE,
f544c586 401#endif
104e10fb
AK
402 AV_CODEC_ID_APE,
403 AV_CODEC_ID_NELLYMOSER,
404 AV_CODEC_ID_MUSEPACK8,
405 AV_CODEC_ID_SPEEX,
406 AV_CODEC_ID_WMAVOICE,
407 AV_CODEC_ID_WMAPRO,
408 AV_CODEC_ID_WMALOSSLESS,
409 AV_CODEC_ID_ATRAC3P,
410 AV_CODEC_ID_EAC3,
411 AV_CODEC_ID_SIPR,
412 AV_CODEC_ID_MP1,
413 AV_CODEC_ID_TWINVQ,
414 AV_CODEC_ID_TRUEHD,
415 AV_CODEC_ID_MP4ALS,
416 AV_CODEC_ID_ATRAC1,
417 AV_CODEC_ID_BINKAUDIO_RDFT,
418 AV_CODEC_ID_BINKAUDIO_DCT,
419 AV_CODEC_ID_AAC_LATM,
420 AV_CODEC_ID_QDMC,
421 AV_CODEC_ID_CELT,
422 AV_CODEC_ID_G723_1,
423 AV_CODEC_ID_G729,
424 AV_CODEC_ID_8SVX_EXP,
425 AV_CODEC_ID_8SVX_FIB,
426 AV_CODEC_ID_BMV_AUDIO,
427 AV_CODEC_ID_RALF,
428 AV_CODEC_ID_IAC,
429 AV_CODEC_ID_ILBC,
2a3d82ab 430 AV_CODEC_ID_OPUS,
9b500b8f 431 AV_CODEC_ID_COMFORT_NOISE,
57231e4d 432 AV_CODEC_ID_TAK,
f544c586 433 AV_CODEC_ID_METASOUND,
115329f1 434
240c1657 435 /* subtitle codecs */
104e10fb
AK
436 AV_CODEC_ID_FIRST_SUBTITLE = 0x17000, ///< A dummy ID pointing at the start of subtitle codecs.
437 AV_CODEC_ID_DVD_SUBTITLE = 0x17000,
438 AV_CODEC_ID_DVB_SUBTITLE,
439 AV_CODEC_ID_TEXT, ///< raw UTF-8 text
440 AV_CODEC_ID_XSUB,
441 AV_CODEC_ID_SSA,
442 AV_CODEC_ID_MOV_TEXT,
443 AV_CODEC_ID_HDMV_PGS_SUBTITLE,
444 AV_CODEC_ID_DVB_TELETEXT,
445 AV_CODEC_ID_SRT,
115329f1 446
7ce68923 447 /* other specific kind of codecs (generally used for attachments) */
104e10fb
AK
448 AV_CODEC_ID_FIRST_UNKNOWN = 0x18000, ///< A dummy ID pointing at the start of various fake codecs.
449 AV_CODEC_ID_TTF = 0x18000,
f8d7c9d3 450
104e10fb 451 AV_CODEC_ID_PROBE = 0x19000, ///< codec_id is not known (like AV_CODEC_ID_NONE) but lavf should attempt to identify it
0bef08e5 452
104e10fb 453 AV_CODEC_ID_MPEG2TS = 0x20000, /**< _FAKE_ codec to indicate a raw MPEG-2 TS
f5bccd85 454 * stream (only used by libavformat) */
104e10fb 455 AV_CODEC_ID_MPEG4SYSTEMS = 0x20001, /**< _FAKE_ codec to indicate a MPEG-4 Systems
77b5c82b 456 * stream (only used by libavformat) */
104e10fb 457 AV_CODEC_ID_FFMETADATA = 0x21000, ///< Dummy codec for streams containing only metadata information.
de6d9b64 458};
dcedf586 459
c223d799
AK
460/**
461 * This struct describes the properties of a single codec described by an
462 * AVCodecID.
463 * @see avcodec_get_descriptor()
464 */
465typedef struct AVCodecDescriptor {
466 enum AVCodecID id;
467 enum AVMediaType type;
468 /**
469 * Name of the codec described by this descriptor. It is non-empty and
470 * unique for each codec descriptor. It should contain alphanumeric
471 * characters and '_' only.
472 */
473 const char *name;
474 /**
475 * A more descriptive name for this codec. May be NULL.
476 */
477 const char *long_name;
51efed15
AK
478 /**
479 * Codec properties, a combination of AV_CODEC_PROP_* flags.
480 */
481 int props;
c223d799
AK
482} AVCodecDescriptor;
483
51efed15
AK
484/**
485 * Codec uses only intra compression.
486 * Video codecs only.
487 */
488#define AV_CODEC_PROP_INTRA_ONLY (1 << 0)
a2318326
AK
489/**
490 * Codec supports lossy compression. Audio and video codecs only.
491 * @note a codec may support both lossy and lossless
492 * compression modes
493 */
494#define AV_CODEC_PROP_LOSSY (1 << 1)
495/**
496 * Codec supports lossless compression. Audio and video codecs only.
497 */
498#define AV_CODEC_PROP_LOSSLESS (1 << 2)
51efed15 499
d7425f59 500/**
c8ef8464 501 * @ingroup lavc_decoding
cf713bb8 502 * Required number of additionally allocated bytes at the end of the input bitstream for decoding.
171b7b91
AC
503 * This is mainly needed because some optimized bitstream readers read
504 * 32 or 64 bit at once and could read over the end.<br>
f5bccd85
DB
505 * Note: If the first 23 bits of the additional bytes are not 0, then damaged
506 * MPEG bitstreams could cause overread and segfault.
d7425f59 507 */
171b7b91 508#define FF_INPUT_BUFFER_PADDING_SIZE 8
d7425f59 509
0ecca7a4 510/**
f038515f 511 * @ingroup lavc_encoding
f5bccd85
DB
512 * minimum encoding buffer size
513 * Used to avoid some checks during header writing.
0ecca7a4
MN
514 */
515#define FF_MIN_BUFFER_SIZE 16384
516
47146dfb 517
0e373b95 518/**
f038515f 519 * @ingroup lavc_encoding
bafc102b 520 * motion estimation type.
0e373b95 521 */
e4986da9 522enum Motion_Est_ID {
9b4dd1b8 523 ME_ZERO = 1, ///< no search, that is use 0,0 vector whenever one is needed
e4986da9
J
524 ME_FULL,
525 ME_LOG,
526 ME_PHODS,
9b4dd1b8
MN
527 ME_EPZS, ///< enhanced predictive zonal search
528 ME_X1, ///< reserved for experiments
529 ME_HEX, ///< hexagon based search
530 ME_UMH, ///< uneven multi-hexagon search
359bbdab 531 ME_TESA, ///< transformed exhaustive search algorithm
e4986da9
J
532};
533
c8ef8464
AK
534/**
535 * @ingroup lavc_decoding
536 */
8c3eba7c 537enum AVDiscard{
f5bccd85
DB
538 /* We leave some space between them for extensions (drop some
539 * keyframes for intra-only or drop just some bidir frames). */
ccc2dfbc
LB
540 AVDISCARD_NONE =-16, ///< discard nothing
541 AVDISCARD_DEFAULT = 0, ///< discard useless packets like 0 size packets in avi
542 AVDISCARD_NONREF = 8, ///< discard all non reference
543 AVDISCARD_BIDIR = 16, ///< discard all bidirectional frames
544 AVDISCARD_NONKEY = 32, ///< discard all frames except keyframes
545 AVDISCARD_ALL = 48, ///< discard all
8c3eba7c
MN
546};
547
4ee6a5c1 548enum AVColorPrimaries{
ccc2dfbc
LB
549 AVCOL_PRI_BT709 = 1, ///< also ITU-R BT1361 / IEC 61966-2-4 / SMPTE RP177 Annex B
550 AVCOL_PRI_UNSPECIFIED = 2,
551 AVCOL_PRI_BT470M = 4,
552 AVCOL_PRI_BT470BG = 5, ///< also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM
553 AVCOL_PRI_SMPTE170M = 6, ///< also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC
554 AVCOL_PRI_SMPTE240M = 7, ///< functionally identical to above
555 AVCOL_PRI_FILM = 8,
cd8f772d 556 AVCOL_PRI_BT2020 = 9, ///< ITU-R BT2020
ccc2dfbc 557 AVCOL_PRI_NB , ///< Not part of ABI
4ee6a5c1
MN
558};
559
560enum AVColorTransferCharacteristic{
cd8f772d
JE
561 AVCOL_TRC_BT709 = 1, ///< also ITU-R BT1361
562 AVCOL_TRC_UNSPECIFIED = 2,
563 AVCOL_TRC_GAMMA22 = 4, ///< also ITU-R BT470M / ITU-R BT1700 625 PAL & SECAM
564 AVCOL_TRC_GAMMA28 = 5, ///< also ITU-R BT470BG
565 AVCOL_TRC_SMPTE170M = 6, ///< also ITU-R BT601-6 525 or 625 / ITU-R BT1358 525 or 625 / ITU-R BT1700 NTSC
566 AVCOL_TRC_SMPTE240M = 7,
567 AVCOL_TRC_LINEAR = 8, ///< "Linear transfer characteristics"
568 AVCOL_TRC_LOG = 9, ///< "Logarithmic transfer characteristic (100:1 range)"
569 AVCOL_TRC_LOG_SQRT = 10, ///< "Logarithmic transfer characteristic (100 * Sqrt( 10 ) : 1 range)"
570 AVCOL_TRC_IEC61966_2_4 = 11, ///< IEC 61966-2-4
571 AVCOL_TRC_BT1361_ECG = 12, ///< ITU-R BT1361 Extended Colour Gamut
572 AVCOL_TRC_IEC61966_2_1 = 13, ///< IEC 61966-2-1 (sRGB or sYCC)
573 AVCOL_TRC_BT2020_10 = 14, ///< ITU-R BT2020 for 10 bit system
574 AVCOL_TRC_BT2020_12 = 15, ///< ITU-R BT2020 for 12 bit system
575 AVCOL_TRC_NB , ///< Not part of ABI
4ee6a5c1
MN
576};
577
578enum AVColorSpace{
cd8f772d
JE
579 AVCOL_SPC_RGB = 0,
580 AVCOL_SPC_BT709 = 1, ///< also ITU-R BT1361 / IEC 61966-2-4 xvYCC709 / SMPTE RP177 Annex B
581 AVCOL_SPC_UNSPECIFIED = 2,
582 AVCOL_SPC_FCC = 4,
583 AVCOL_SPC_BT470BG = 5, ///< also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM / IEC 61966-2-4 xvYCC601
584 AVCOL_SPC_SMPTE170M = 6, ///< also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC / functionally identical to above
585 AVCOL_SPC_SMPTE240M = 7,
586 AVCOL_SPC_YCOCG = 8, ///< Used by Dirac / VC-2 and H.264 FRext, see ITU-T SG16
587 AVCOL_SPC_BT2020_NCL = 9, ///< ITU-R BT2020 non-constant luminance system
588 AVCOL_SPC_BT2020_CL = 10, ///< ITU-R BT2020 constant luminance system
589 AVCOL_SPC_NB , ///< Not part of ABI
4ee6a5c1
MN
590};
591
592enum AVColorRange{
ccc2dfbc
LB
593 AVCOL_RANGE_UNSPECIFIED = 0,
594 AVCOL_RANGE_MPEG = 1, ///< the normal 219*2^(n-8) "MPEG" YUV ranges
595 AVCOL_RANGE_JPEG = 2, ///< the normal 2^n-1 "JPEG" YUV ranges
596 AVCOL_RANGE_NB , ///< Not part of ABI
4ee6a5c1
MN
597};
598
580a7465
DC
599/**
600 * X X 3 4 X X are luma samples,
601 * 1 2 1-6 are possible chroma positions
602 * X X 5 6 X 0 is undefined/unknown position
603 */
604enum AVChromaLocation{
ccc2dfbc
LB
605 AVCHROMA_LOC_UNSPECIFIED = 0,
606 AVCHROMA_LOC_LEFT = 1, ///< mpeg2/4, h264 default
607 AVCHROMA_LOC_CENTER = 2, ///< mpeg1, jpeg, h263
608 AVCHROMA_LOC_TOPLEFT = 3, ///< DV
609 AVCHROMA_LOC_TOP = 4,
610 AVCHROMA_LOC_BOTTOMLEFT = 5,
611 AVCHROMA_LOC_BOTTOM = 6,
612 AVCHROMA_LOC_NB , ///< Not part of ABI
580a7465
DC
613};
614
34b47d7c
JR
615enum AVAudioServiceType {
616 AV_AUDIO_SERVICE_TYPE_MAIN = 0,
617 AV_AUDIO_SERVICE_TYPE_EFFECTS = 1,
618 AV_AUDIO_SERVICE_TYPE_VISUALLY_IMPAIRED = 2,
619 AV_AUDIO_SERVICE_TYPE_HEARING_IMPAIRED = 3,
620 AV_AUDIO_SERVICE_TYPE_DIALOGUE = 4,
621 AV_AUDIO_SERVICE_TYPE_COMMENTARY = 5,
622 AV_AUDIO_SERVICE_TYPE_EMERGENCY = 6,
623 AV_AUDIO_SERVICE_TYPE_VOICE_OVER = 7,
624 AV_AUDIO_SERVICE_TYPE_KARAOKE = 8,
625 AV_AUDIO_SERVICE_TYPE_NB , ///< Not part of ABI
626};
627
f038515f
AK
628/**
629 * @ingroup lavc_encoding
630 */
ce980a95
MN
631typedef struct RcOverride{
632 int start_frame;
633 int end_frame;
f5bccd85 634 int qscale; // If this is 0 then quality_factor will be used instead.
ce980a95
MN
635 float quality_factor;
636} RcOverride;
637
aa241229
AK
638#if FF_API_MAX_BFRAMES
639/**
640 * @deprecated there is no libavcodec-wide limit on the number of B-frames
641 */
b0ec9efd 642#define FF_MAX_B_FRAMES 16
aa241229 643#endif
9dbcbd92 644
a949d72e 645/* encoding support
f5bccd85
DB
646 These flags can be passed in AVCodecContext.flags before initialization.
647 Note: Not everything is supported yet.
a949d72e 648*/
de6d9b64 649
5e83d9ac
AK
650/**
651 * Allow decoders to produce frames with data planes that are not aligned
652 * to CPU requirements (e.g. due to cropping).
653 */
654#define CODEC_FLAG_UNALIGNED 0x0001
f5bccd85
DB
655#define CODEC_FLAG_QSCALE 0x0002 ///< Use fixed qscale.
656#define CODEC_FLAG_4MV 0x0004 ///< 4 MV per MB allowed / advanced prediction for H.263.
28096e0a 657#define CODEC_FLAG_OUTPUT_CORRUPT 0x0008 ///< Output even those frames that might be corrupted
f5bccd85
DB
658#define CODEC_FLAG_QPEL 0x0010 ///< Use qpel MC.
659#define CODEC_FLAG_GMC 0x0020 ///< Use GMC.
660#define CODEC_FLAG_MV0 0x0040 ///< Always try a MB with MV=<0,0>.
1ba8f5eb
MN
661/**
662 * The parent program guarantees that the input for B-frames containing
f5bccd85 663 * streams is not written to for at least s->max_b_frames+1 frames, if
1ba8f5eb
MN
664 * this is not set the input will be copied.
665 */
8b4c7dbc 666#define CODEC_FLAG_INPUT_PRESERVED 0x0100
273b0cd3
DB
667#define CODEC_FLAG_PASS1 0x0200 ///< Use internal 2pass ratecontrol in first pass mode.
668#define CODEC_FLAG_PASS2 0x0400 ///< Use internal 2pass ratecontrol in second pass mode.
273b0cd3
DB
669#define CODEC_FLAG_GRAY 0x2000 ///< Only decode/encode grayscale.
670#define CODEC_FLAG_EMU_EDGE 0x4000 ///< Don't draw edges.
671#define CODEC_FLAG_PSNR 0x8000 ///< error[?] variables will be set during encoding.
672#define CODEC_FLAG_TRUNCATED 0x00010000 /** Input bitstream might be truncated at a random
673 location instead of only at frame boundaries. */
f5bccd85
DB
674#define CODEC_FLAG_NORMALIZE_AQP 0x00020000 ///< Normalize adaptive quantization.
675#define CODEC_FLAG_INTERLACED_DCT 0x00040000 ///< Use interlaced DCT.
676#define CODEC_FLAG_LOW_DELAY 0x00080000 ///< Force low delay.
f5bccd85
DB
677#define CODEC_FLAG_GLOBAL_HEADER 0x00400000 ///< Place global headers in extradata instead of every keyframe.
678#define CODEC_FLAG_BITEXACT 0x00800000 ///< Use only bitexact stuff (except (I)DCT).
21e59552 679/* Fx : Flag for h263+ extra options */
f5bccd85 680#define CODEC_FLAG_AC_PRED 0x01000000 ///< H.263 advanced intra coding / MPEG-4 AC prediction
332f9ac4 681#define CODEC_FLAG_LOOP_FILTER 0x00000800 ///< loop filter
bb198e19 682#define CODEC_FLAG_INTERLACED_ME 0x20000000 ///< interlaced motion estimation
f3eec1cf 683#define CODEC_FLAG_CLOSED_GOP 0x80000000
f5bccd85 684#define CODEC_FLAG2_FAST 0x00000001 ///< Allow non spec compliant speedup tricks.
f5bccd85
DB
685#define CODEC_FLAG2_NO_OUTPUT 0x00000004 ///< Skip bitstream encoding.
686#define CODEC_FLAG2_LOCAL_HEADER 0x00000008 ///< Place global headers at every keyframe instead of in extradata.
a84fb6e0
VG
687#define CODEC_FLAG2_IGNORE_CROP 0x00010000 ///< Discard cropping information from SPS.
688
f013cb81 689#define CODEC_FLAG2_CHUNKS 0x00008000 ///< Input bitstream might be truncated at a packet boundaries instead of only at frame boundaries.
6fc5b059 690
21e59552 691/* Unsupported options :
bb270c08
DB
692 * Syntax Arithmetic coding (SAC)
693 * Reference Picture Selection
eafcac6a 694 * Independent Segment Decoding */
21e59552 695/* /Fx */
bf89e6b1
FB
696/* codec capabilities */
697
f5bccd85 698#define CODEC_CAP_DRAW_HORIZ_BAND 0x0001 ///< Decoder can use draw_horiz_band callback.
6814a25c 699/**
9b489e02
RD
700 * Codec uses get_buffer() for allocating buffers and supports custom allocators.
701 * If not set, it might not use get_buffer() at all or use operations that
702 * assume the buffer was allocated by avcodec_default_get_buffer.
6814a25c
MN
703 */
704#define CODEC_CAP_DR1 0x0002
d7425f59 705#define CODEC_CAP_TRUNCATED 0x0008
19e30a58 706#if FF_API_XVMC
f5bccd85 707/* Codec can export data for HW decoding (XvMC). */
5e5c247a 708#define CODEC_CAP_HWACCEL 0x0010
19e30a58 709#endif /* FF_API_XVMC */
115329f1 710/**
3f6aa85e
JR
711 * Encoder or decoder requires flushing with NULL input at the end in order to
712 * give the complete and correct output.
713 *
714 * NOTE: If this flag is not set, the codec is guaranteed to never be fed with
715 * with NULL data. The user can still send NULL data to the public encode
716 * or decode function, but libavcodec will not pass it along to the codec
717 * unless this flag is set.
718 *
719 * Decoders:
720 * The decoder has a non-zero delay and needs to be fed with avpkt->data=NULL,
ffeeae92 721 * avpkt->size=0 at the end to get the delayed data until the decoder no longer
3f6aa85e
JR
722 * returns frames.
723 *
724 * Encoders:
725 * The encoder needs to be fed with NULL data at the end of encoding until the
726 * encoder no longer returns data.
b2c75b6e
JR
727 *
728 * NOTE: For encoders implementing the AVCodec.encode2() function, setting this
729 * flag also means that the encoder must set the pts and duration for
730 * each output packet. If this flag is not set, the pts and duration will
731 * be determined by libavcodec from the input frame.
934982c4 732 */
6f824977 733#define CODEC_CAP_DELAY 0x0020
cef7cc72
JR
734/**
735 * Codec can be fed a final frame with a smaller size.
736 * This can be used to prevent truncation of the last audio samples.
737 */
738#define CODEC_CAP_SMALL_LAST_FRAME 0x0040
549294fb 739#if FF_API_CAP_VDPAU
369122dd
NC
740/**
741 * Codec can export data for HW decoding (VDPAU).
742 */
743#define CODEC_CAP_HWACCEL_VDPAU 0x0080
549294fb 744#endif
d859bb1d
SS
745/**
746 * Codec can output multiple frames per AVPacket
e9e949cf
MN
747 * Normally demuxers return one frame at a time, demuxers which do not do
748 * are connected to a parser to split what they return into proper frames.
749 * This flag is reserved to the very rare category of codecs which have a
750 * bitstream that cannot be split into frames without timeconsuming
751 * operations like full decoding. Demuxers carring such bitstreams thus
752 * may return multiple frames in a packet. This has many disadvantages like
753 * prohibiting stream copy in many cases thus it should only be considered
754 * as a last resort.
d859bb1d
SS
755 */
756#define CODEC_CAP_SUBFRAMES 0x0100
93ebfeea
JG
757/**
758 * Codec is experimental and is thus avoided in favor of non experimental
759 * encoders
760 */
761#define CODEC_CAP_EXPERIMENTAL 0x0200
62784e37
BL
762/**
763 * Codec should fill in channel configuration and samplerate instead of container
764 */
765#define CODEC_CAP_CHANNEL_CONF 0x0400
b068660f 766#if FF_API_NEG_LINESIZES
16cfc961 767/**
b068660f 768 * @deprecated no codecs use this capability
16cfc961
SS
769 */
770#define CODEC_CAP_NEG_LINESIZES 0x0800
b068660f 771#endif
37b00b47
AS
772/**
773 * Codec supports frame-level multithreading.
774 */
775#define CODEC_CAP_FRAME_THREADS 0x1000
94f7451a
RB
776/**
777 * Codec supports slice-based (or partition-based) multithreading.
778 */
779#define CODEC_CAP_SLICE_THREADS 0x2000
fe75dc85
MS
780/**
781 * Codec supports changed parameters at any point.
782 */
783#define CODEC_CAP_PARAM_CHANGE 0x4000
b4d44a45
JG
784/**
785 * Codec supports avctx->thread_count == 0 (auto).
786 */
787#define CODEC_CAP_AUTO_THREADS 0x8000
b2c75b6e
JR
788/**
789 * Audio encoder supports receiving a different number of samples in each call.
790 */
791#define CODEC_CAP_VARIABLE_FRAME_SIZE 0x10000
bf89e6b1 792
b6094811 793#if FF_API_MB_TYPE
f5bccd85 794//The following defines may change, don't expect compatibility if you use them.
8d7ec294 795#define MB_TYPE_INTRA4x4 0x0001
f5bccd85
DB
796#define MB_TYPE_INTRA16x16 0x0002 //FIXME H.264-specific
797#define MB_TYPE_INTRA_PCM 0x0004 //FIXME H.264-specific
8d7ec294
WH
798#define MB_TYPE_16x16 0x0008
799#define MB_TYPE_16x8 0x0010
800#define MB_TYPE_8x16 0x0020
801#define MB_TYPE_8x8 0x0040
802#define MB_TYPE_INTERLACED 0x0080
273b0cd3 803#define MB_TYPE_DIRECT2 0x0100 //FIXME
8d7ec294
WH
804#define MB_TYPE_ACPRED 0x0200
805#define MB_TYPE_GMC 0x0400
806#define MB_TYPE_SKIP 0x0800
807#define MB_TYPE_P0L0 0x1000
808#define MB_TYPE_P1L0 0x2000
809#define MB_TYPE_P0L1 0x4000
810#define MB_TYPE_P1L1 0x8000
811#define MB_TYPE_L0 (MB_TYPE_P0L0 | MB_TYPE_P1L0)
812#define MB_TYPE_L1 (MB_TYPE_P0L1 | MB_TYPE_P1L1)
813#define MB_TYPE_L0L1 (MB_TYPE_L0 | MB_TYPE_L1)
814#define MB_TYPE_QUANT 0x00010000
815#define MB_TYPE_CBP 0x00020000
816//Note bits 24-31 are reserved for codec specific use (h264 ref0, mpeg1 0mv, ...)
b6094811 817#endif
8d7ec294 818
fa384dcc
MN
819/**
820 * Pan Scan area.
f5bccd85
DB
821 * This specifies the area which should be displayed.
822 * Note there may be multiple such areas for one frame.
fa384dcc
MN
823 */
824typedef struct AVPanScan{
825 /**
f5bccd85
DB
826 * id
827 * - encoding: Set by user.
828 * - decoding: Set by libavcodec.
fa384dcc
MN
829 */
830 int id;
831
832 /**
833 * width and height in 1/16 pel
f5bccd85
DB
834 * - encoding: Set by user.
835 * - decoding: Set by libavcodec.
fa384dcc
MN
836 */
837 int width;
838 int height;
839
840 /**
f5bccd85
DB
841 * position of the top left corner in 1/16 pel for up to 3 fields/frames
842 * - encoding: Set by user.
843 * - decoding: Set by libavcodec.
fa384dcc
MN
844 */
845 int16_t position[3][2];
846}AVPanScan;
847
b45c8708 848#if FF_API_QSCALE_TYPE
bb270c08
DB
849#define FF_QSCALE_TYPE_MPEG1 0
850#define FF_QSCALE_TYPE_MPEG2 1
851#define FF_QSCALE_TYPE_H264 2
800274f8 852#define FF_QSCALE_TYPE_VP56 3
b45c8708 853#endif
4e00e76b 854
759001c5 855#if FF_API_GET_BUFFER
4e00e76b 856#define FF_BUFFER_TYPE_INTERNAL 1
f5bccd85
DB
857#define FF_BUFFER_TYPE_USER 2 ///< direct rendering buffers (image is (de)allocated by user)
858#define FF_BUFFER_TYPE_SHARED 4 ///< Buffer from somewhere else; don't deallocate image (data/base), all other tables are not shared.
859#define FF_BUFFER_TYPE_COPY 8 ///< Just a (modified) copy of some other buffer, don't deallocate anything.
4e00e76b 860
f5bccd85
DB
861#define FF_BUFFER_HINTS_VALID 0x01 // Buffer hints value is meaningful (if 0 ignore).
862#define FF_BUFFER_HINTS_READABLE 0x02 // Codec will read from buffer.
863#define FF_BUFFER_HINTS_PRESERVE 0x04 // User must not alter buffer content.
864#define FF_BUFFER_HINTS_REUSABLE 0x08 // Codec will reuse the buffer (update).
759001c5
AK
865#endif
866
867/**
868 * The decoder will keep a reference to the frame and may reuse it later.
869 */
870#define AV_GET_BUFFER_FLAG_REF (1 << 0)
074c4ca7 871
30f3f625
AK
872/**
873 * @defgroup lavc_packet AVPacket
874 *
875 * Types and functions for working with AVPacket.
876 * @{
877 */
4de339e2
KS
878enum AVPacketSideDataType {
879 AV_PKT_DATA_PALETTE,
195c123c 880 AV_PKT_DATA_NEW_EXTRADATA,
30f3f625
AK
881
882 /**
883 * An AV_PKT_DATA_PARAM_CHANGE side data packet is laid out as follows:
199ada49 884 * @code
30f3f625
AK
885 * u32le param_flags
886 * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_COUNT)
887 * s32le channel_count
888 * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_LAYOUT)
889 * u64le channel_layout
890 * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE)
891 * s32le sample_rate
892 * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_DIMENSIONS)
893 * s32le width
894 * s32le height
199ada49 895 * @endcode
30f3f625 896 */
fe75dc85 897 AV_PKT_DATA_PARAM_CHANGE,
30f3f625
AK
898
899 /**
900 * An AV_PKT_DATA_H263_MB_INFO side data packet contains a number of
901 * structures with info about macroblocks relevant to splitting the
902 * packet into smaller packets on macroblock edges (e.g. as for RFC 2190).
903 * That is, it does not necessarily contain info about all macroblocks,
904 * as long as the distance between macroblocks in the info is smaller
905 * than the target payload size.
906 * Each MB info structure is 12 bytes, and is laid out as follows:
199ada49 907 * @code
30f3f625
AK
908 * u32le bit offset from the start of the packet
909 * u8 current quantizer at the start of the macroblock
910 * u8 GOB number
911 * u16le macroblock address within the GOB
912 * u8 horizontal MV predictor
913 * u8 vertical MV predictor
914 * u8 horizontal MV predictor for block number 3
915 * u8 vertical MV predictor for block number 3
199ada49 916 * @endcode
30f3f625 917 */
bdc1220e 918 AV_PKT_DATA_H263_MB_INFO,
4de339e2
KS
919};
920
0876c280
AK
921/**
922 * This structure stores compressed data. It is typically exported by demuxers
923 * and then passed as input to decoders, or received as output from encoders and
924 * then passed to muxers.
925 *
926 * For video, it should typically contain one compressed frame. For audio it may
927 * contain several compressed frames.
928 *
929 * AVPacket is one of the few structs in Libav, whose size is a part of public
930 * ABI. Thus it may be allocated on stack and no new fields can be added to it
931 * without libavcodec and libavformat major bump.
932 *
1afddbe5
AK
933 * The semantics of data ownership depends on the buf or destruct (deprecated)
934 * fields. If either is set, the packet data is dynamically allocated and is
935 * valid indefinitely until av_free_packet() is called (which in turn calls
936 * av_buffer_unref()/the destruct callback to free the data). If neither is set,
937 * the packet data is typically backed by some static buffer somewhere and is
938 * only valid for a limited time (e.g. until the next read call when demuxing).
0876c280
AK
939 *
940 * The side data is always allocated with av_malloc() and is freed in
941 * av_free_packet().
942 */
18c915ee
TB
943typedef struct AVPacket {
944 /**
1afddbe5
AK
945 * A reference to the reference-counted buffer where the packet data is
946 * stored.
947 * May be NULL, then the packet data is not reference-counted.
948 */
949 AVBufferRef *buf;
950 /**
7b356d39
RS
951 * Presentation timestamp in AVStream->time_base units; the time at which
952 * the decompressed packet will be presented to the user.
18c915ee
TB
953 * Can be AV_NOPTS_VALUE if it is not stored in the file.
954 * pts MUST be larger or equal to dts as presentation cannot happen before
955 * decompression, unless one wants to view hex dumps. Some formats misuse
956 * the terms dts and pts/cts to mean something different. Such timestamps
957 * must be converted to true pts/dts before they are stored in AVPacket.
958 */
959 int64_t pts;
960 /**
7b356d39
RS
961 * Decompression timestamp in AVStream->time_base units; the time at which
962 * the packet is decompressed.
18c915ee
TB
963 * Can be AV_NOPTS_VALUE if it is not stored in the file.
964 */
965 int64_t dts;
966 uint8_t *data;
967 int size;
968 int stream_index;
9d39cbf6
LB
969 /**
970 * A combination of AV_PKT_FLAG values
971 */
18c915ee
TB
972 int flags;
973 /**
4de339e2
KS
974 * Additional packet data that can be provided by the container.
975 * Packet can contain several types of side information.
976 */
977 struct {
978 uint8_t *data;
979 int size;
980 enum AVPacketSideDataType type;
981 } *side_data;
982 int side_data_elems;
983
984 /**
7b356d39 985 * Duration of this packet in AVStream->time_base units, 0 if unknown.
18c915ee
TB
986 * Equals next_pts - this_pts in presentation order.
987 */
988 int duration;
1afddbe5
AK
989#if FF_API_DESTRUCT_PACKET
990 attribute_deprecated
18c915ee 991 void (*destruct)(struct AVPacket *);
1afddbe5 992 attribute_deprecated
18c915ee 993 void *priv;
1afddbe5 994#endif
18c915ee
TB
995 int64_t pos; ///< byte position in stream, -1 if unknown
996
997 /**
7b356d39 998 * Time difference in AVStream->time_base units from the pts of this
18c915ee
TB
999 * packet to the point at which the output from the decoder has converged
1000 * independent from the availability of previous frames. That is, the
1001 * frames are virtually identical no matter if decoding started from
1002 * the very first frame or from this keyframe.
1003 * Is AV_NOPTS_VALUE if unknown.
1004 * This field is not the display duration of the current packet.
8ee82f40
AJ
1005 * This field has no meaning if the packet does not have AV_PKT_FLAG_KEY
1006 * set.
18c915ee
TB
1007 *
1008 * The purpose of this field is to allow seeking in streams that have no
1009 * keyframes in the conventional sense. It corresponds to the
1010 * recovery point SEI in H.264 and match_time_delta in NUT. It is also
1011 * essential for some types of subtitle streams to ensure that all
1012 * subtitles are correctly displayed after seeking.
1013 */
1014 int64_t convergence_duration;
1015} AVPacket;
9d39cbf6
LB
1016#define AV_PKT_FLAG_KEY 0x0001 ///< The packet contains a keyframe
1017#define AV_PKT_FLAG_CORRUPT 0x0002 ///< The packet content is corrupted
18c915ee 1018
fe75dc85
MS
1019enum AVSideDataParamChangeFlags {
1020 AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_COUNT = 0x0001,
1021 AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_LAYOUT = 0x0002,
1022 AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE = 0x0004,
1023 AV_SIDE_DATA_PARAM_CHANGE_DIMENSIONS = 0x0008,
1024};
30f3f625
AK
1025/**
1026 * @}
1027 */
fe75dc85 1028
f3a29b75
JR
1029struct AVCodecInternal;
1030
4bf3c8f2
AC
1031enum AVFieldOrder {
1032 AV_FIELD_UNKNOWN,
1033 AV_FIELD_PROGRESSIVE,
1034 AV_FIELD_TT, //< Top coded_first, top displayed first
1035 AV_FIELD_BB, //< Bottom coded first, bottom displayed first
1036 AV_FIELD_TB, //< Top coded first, bottom displayed first
1037 AV_FIELD_BT, //< Bottom coded first, top displayed first
1038};
1039
d33c949c 1040/**
252f17e2
MN
1041 * main external API structure.
1042 * New fields can be added to the end with minor version bumps.
8bfb108b 1043 * Removal, reordering and changes to existing fields require a major
252f17e2 1044 * version bump.
8bfb108b 1045 * sizeof(AVCodecContext) must not be used outside libav*.
d33c949c 1046 */
de6d9b64 1047typedef struct AVCodecContext {
b71901e6 1048 /**
f5bccd85 1049 * information on struct for av_log
488eec10 1050 * - set by avcodec_alloc_context3
bc874dae 1051 */
d42a814e 1052 const AVClass *av_class;
b1edfce0
AK
1053 int log_level_offset;
1054
1055 enum AVMediaType codec_type; /* see AVMEDIA_TYPE_xxx */
0a0f19b5 1056 const struct AVCodec *codec;
b1edfce0 1057 char codec_name[32];
36ef5369 1058 enum AVCodecID codec_id; /* see AV_CODEC_ID_xxx */
b1edfce0
AK
1059
1060 /**
1061 * fourcc (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A').
1062 * This is used to work around some encoder bugs.
1063 * A demuxer should set this to what is stored in the field used to identify the codec.
1064 * If there are multiple such fields in a container then the demuxer should choose the one
1065 * which maximizes the information about the used codec.
1066 * If the codec tag field in a container is larger than 32 bits then the demuxer should
1067 * remap the longer ID to 32 bits with a table or other structure. Alternatively a new
1068 * extra_codec_tag + size could be added but for this a clear advantage must be demonstrated
1069 * first.
1070 * - encoding: Set by user, if not then the default based on codec_id will be used.
1071 * - decoding: Set by user, will be converted to uppercase by libavcodec during init.
1072 */
1073 unsigned int codec_tag;
1074
1075 /**
1076 * fourcc from the AVI stream header (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A').
1077 * This is used to work around some encoder bugs.
1078 * - encoding: unused
1079 * - decoding: Set by user, will be converted to uppercase by libavcodec during init.
1080 */
1081 unsigned int stream_codec_tag;
1082
b1edfce0
AK
1083 void *priv_data;
1084
1085 /**
1086 * Private context used for internal data.
1087 *
1088 * Unlike priv_data, this is not codec-specific. It is used in general
1089 * libavcodec functions.
1090 */
1091 struct AVCodecInternal *internal;
1092
1093 /**
1094 * Private data of the user, can be used to carry app specific stuff.
1095 * - encoding: Set by user.
1096 * - decoding: Set by user.
1097 */
1098 void *opaque;
1099
bc874dae 1100 /**
f5bccd85
DB
1101 * the average bitrate
1102 * - encoding: Set by user; unused for constant quantizer encoding.
1103 * - decoding: Set by libavcodec. 0 or some bitrate if this info is available in the stream.
b71901e6 1104 */
de6d9b64 1105 int bit_rate;
b71901e6
MN
1106
1107 /**
64863965 1108 * number of bits the bitstream is allowed to diverge from the reference.
b71901e6 1109 * the reference can be CBR (for CBR pass1) or VBR (for pass2)
f5bccd85 1110 * - encoding: Set by user; unused for constant quantizer encoding.
64863965 1111 * - decoding: unused
b71901e6 1112 */
115329f1 1113 int bit_rate_tolerance;
b71901e6
MN
1114
1115 /**
b1edfce0
AK
1116 * Global quality for codecs which cannot change it per frame.
1117 * This should be proportional to MPEG-1/2/4 qscale.
f5bccd85 1118 * - encoding: Set by user.
b1edfce0 1119 * - decoding: unused
b71901e6 1120 */
b1edfce0 1121 int global_quality;
b71901e6
MN
1122
1123 /**
b1edfce0
AK
1124 * - encoding: Set by user.
1125 * - decoding: unused
b71901e6 1126 */
b1edfce0
AK
1127 int compression_level;
1128#define FF_COMPRESSION_DEFAULT -1
b71901e6
MN
1129
1130 /**
b1edfce0
AK
1131 * CODEC_FLAG_*.
1132 * - encoding: Set by user.
1133 * - decoding: Set by user.
b71901e6 1134 */
b1edfce0
AK
1135 int flags;
1136
1137 /**
1138 * CODEC_FLAG2_*
1139 * - encoding: Set by user.
1140 * - decoding: Set by user.
1141 */
1142 int flags2;
b71901e6
MN
1143
1144 /**
f5bccd85
DB
1145 * some codecs need / can use extradata like Huffman tables.
1146 * mjpeg: Huffman tables
b71901e6 1147 * rv10: additional flags
b704e742 1148 * mpeg4: global headers (they can be in the bitstream or here)
f5bccd85
DB
1149 * The allocated memory should be FF_INPUT_BUFFER_PADDING_SIZE bytes larger
1150 * than extradata_size to avoid prolems if it is read with the bitstream reader.
1151 * The bytewise contents of extradata must not depend on the architecture or CPU endianness.
1152 * - encoding: Set/allocated/freed by libavcodec.
1153 * - decoding: Set/allocated/freed by user.
b71901e6 1154 */
58f2a4b0 1155 uint8_t *extradata;
e84c31dc 1156 int extradata_size;
115329f1 1157
b71901e6 1158 /**
f5bccd85
DB
1159 * This is the fundamental unit of time (in seconds) in terms
1160 * of which frame timestamps are represented. For fixed-fps content,
5b28c8c3
MN
1161 * timebase should be 1/framerate and timestamp increments should be
1162 * identically 1.
f5bccd85
DB
1163 * - encoding: MUST be set by user.
1164 * - decoding: Set by libavcodec.
b71901e6 1165 */
c0df9d75 1166 AVRational time_base;
115329f1 1167
b1edfce0
AK
1168 /**
1169 * For some codecs, the time base is closer to the field rate than the frame rate.
1170 * Most notably, H.264 and MPEG-2 specify time_base as half of frame duration
1171 * if no telecine is used ...
1172 *
1173 * Set to time_base ticks per frame. Default 1, e.g., H.264/MPEG-2 set it to 2.
1174 */
1175 int ticks_per_frame;
1176
1177 /**
c68317eb 1178 * Codec delay.
b1edfce0
AK
1179 *
1180 * Video:
1181 * Number of frames the decoded output will be delayed relative to the
1182 * encoded input.
1183 *
1184 * Audio:
e4aa3831
NC
1185 * For encoding, this is the number of "priming" samples added to the
1186 * beginning of the stream. The decoded output will be delayed by this
1187 * many samples relative to the input to the encoder. Note that this
1188 * field is purely informational and does not directly affect the pts
1189 * output by the encoder, which should always be based on the actual
1190 * presentation time, including any delay.
1191 * For decoding, this is the number of samples the decoder needs to
1192 * output before the decoder's output is valid. When seeking, you should
1193 * start decoding this many samples prior to your desired seek point.
b1edfce0
AK
1194 *
1195 * - encoding: Set by libavcodec.
e4aa3831 1196 * - decoding: Set by libavcodec.
b1edfce0
AK
1197 */
1198 int delay;
1199
1200
5b28c8c3 1201 /* video only */
14bea432 1202 /**
21adafec 1203 * picture width / height.
115329f1 1204 * - encoding: MUST be set by user.
2d6edb2b
AK
1205 * - decoding: May be set by the user before opening the decoder if known e.g.
1206 * from the container. Some decoders will require the dimensions
1207 * to be set by the caller. During decoding, the decoder may
1208 * overwrite those values as required.
b71901e6 1209 */
de6d9b64 1210 int width, height;
115329f1 1211
b1edfce0 1212 /**
2d6edb2b
AK
1213 * Bitstream width / height, may be different from width/height e.g. when
1214 * the decoded frame is cropped before being output.
b1edfce0 1215 * - encoding: unused
2d6edb2b
AK
1216 * - decoding: May be set by the user before opening the decoder if known
1217 * e.g. from the container. During decoding, the decoder may
1218 * overwrite those values as required.
b1edfce0
AK
1219 */
1220 int coded_width, coded_height;
1221
28240a60 1222#if FF_API_ASPECT_EXTENDED
e769f053 1223#define FF_ASPECT_EXTENDED 15
28240a60 1224#endif
b71901e6
MN
1225
1226 /**
f5bccd85
DB
1227 * the number of pictures in a group of pictures, or 0 for intra_only
1228 * - encoding: Set by user.
64863965 1229 * - decoding: unused
b71901e6
MN
1230 */
1231 int gop_size;
1232
1233 /**
716d413c 1234 * Pixel format, see AV_PIX_FMT_xxx.
c1bdc930
TH
1235 * May be set by the demuxer if known from headers.
1236 * May be overriden by the decoder if it knows better.
f5bccd85 1237 * - encoding: Set by user.
c1bdc930 1238 * - decoding: Set by user if known, overridden by libavcodec if known
b71901e6 1239 */
716d413c 1240 enum AVPixelFormat pix_fmt;
115329f1 1241
b71901e6 1242 /**
b1edfce0
AK
1243 * Motion estimation algorithm used for video coding.
1244 * 1 (zero), 2 (full), 3 (log), 4 (phods), 5 (epzs), 6 (x1), 7 (hex),
a0c5917f 1245 * 8 (umh), 10 (tesa) [7, 8, 10 are x264 specific]
b1edfce0
AK
1246 * - encoding: MUST be set by user.
1247 * - decoding: unused
1248 */
1249 int me_method;
1250
1251 /**
f5bccd85
DB
1252 * If non NULL, 'draw_horiz_band' is called by the libavcodec
1253 * decoder to draw a horizontal band. It improves cache usage. Not
b71901e6 1254 * all codecs can do that. You must check the codec capabilities
f5bccd85 1255 * beforehand.
37b00b47
AS
1256 * When multithreading is used, it may be called from multiple threads
1257 * at the same time; threads might draw different parts of the same AVFrame,
1258 * or multiple AVFrames, and there is no guarantee that slices will be drawn
1259 * in order.
24b1583a
IK
1260 * The function is also used by hardware acceleration APIs.
1261 * It is called at least once during frame decoding to pass
1262 * the data needed for hardware render.
1263 * In that mode instead of pixel data, AVFrame points to
1264 * a structure specific to the acceleration API. The application
1265 * reads the structure and can change some fields to indicate progress
1266 * or mark state.
64863965 1267 * - encoding: unused
f5bccd85 1268 * - decoding: Set by user.
3bb07d61
MN
1269 * @param height the height of the slice
1270 * @param y the y position of the slice
1271 * @param type 1->top field, 2->bottom field, 3->frame
1272 * @param offset offset into the AVFrame.data from which the slice should be read
b71901e6 1273 */
bf89e6b1 1274 void (*draw_horiz_band)(struct AVCodecContext *s,
560f773c 1275 const AVFrame *src, int offset[AV_NUM_DATA_POINTERS],
3bb07d61 1276 int y, int type, int height);
bf89e6b1 1277
a3a5f4d6 1278 /**
b1edfce0
AK
1279 * callback to negotiate the pixelFormat
1280 * @param fmt is the list of formats which are supported by the codec,
1281 * it is terminated by -1 as 0 is a valid format, the formats are ordered by quality.
1282 * The first is always the native one.
1283 * @return the chosen format
1284 * - encoding: unused
1285 * - decoding: Set by user, if not set the native format will be chosen.
a3a5f4d6 1286 */
716d413c 1287 enum AVPixelFormat (*get_format)(struct AVCodecContext *s, const enum AVPixelFormat * fmt);
de6d9b64 1288
718b27a7 1289 /**
b1edfce0
AK
1290 * maximum number of B-frames between non-B-frames
1291 * Note: The output will be delayed by max_b_frames+1 relative to the input.
1292 * - encoding: Set by user.
1293 * - decoding: unused
718b27a7 1294 */
b1edfce0 1295 int max_b_frames;
115329f1 1296
b71901e6 1297 /**
b1edfce0
AK
1298 * qscale factor between IP and B-frames
1299 * If > 0 then the last P-frame quantizer will be used (q= lastp_q*factor+offset).
1300 * If < 0 then normal ratecontrol will be done (q= -normal_q*factor+offset).
1301 * - encoding: Set by user.
64863965 1302 * - decoding: unused
b71901e6 1303 */
b1edfce0 1304 float b_quant_factor;
115329f1 1305
b1edfce0
AK
1306 /** obsolete FIXME remove */
1307 int rc_strategy;
1308#define FF_RC_STRATEGY_XVID 1
1309
1310 int b_frame_strategy;
115329f1 1311
b71901e6 1312 /**
b1edfce0 1313 * qscale offset between IP and B-frames
f5bccd85 1314 * - encoding: Set by user.
64863965 1315 * - decoding: unused
b71901e6 1316 */
b1edfce0 1317 float b_quant_offset;
b71901e6
MN
1318
1319 /**
b1edfce0
AK
1320 * Size of the frame reordering buffer in the decoder.
1321 * For MPEG-2 it is 1 IPB or 0 low delay IP.
1322 * - encoding: Set by libavcodec.
1323 * - decoding: Set by libavcodec.
1324 */
1325 int has_b_frames;
1326
1327 /**
1328 * 0-> h263 quant 1-> mpeg quant
f5bccd85 1329 * - encoding: Set by user.
64863965 1330 * - decoding: unused
b71901e6 1331 */
b1edfce0 1332 int mpeg_quant;
b71901e6
MN
1333
1334 /**
b1edfce0
AK
1335 * qscale factor between P and I-frames
1336 * If > 0 then the last p frame quantizer will be used (q= lastp_q*factor+offset).
662e5411 1337 * If < 0 then normal ratecontrol will be done (q= -normal_q*factor+offset).
f5bccd85 1338 * - encoding: Set by user.
64863965 1339 * - decoding: unused
b71901e6 1340 */
b1edfce0 1341 float i_quant_factor;
64b7c5b6 1342
b1edfce0
AK
1343 /**
1344 * qscale offset between P and I-frames
1345 * - encoding: Set by user.
1346 * - decoding: unused
1347 */
1348 float i_quant_offset;
9dbcbd92 1349
b1edfce0
AK
1350 /**
1351 * luminance masking (0-> disabled)
1352 * - encoding: Set by user.
1353 * - decoding: unused
1354 */
1355 float lumi_masking;
115329f1 1356
b1edfce0
AK
1357 /**
1358 * temporary complexity masking (0-> disabled)
1359 * - encoding: Set by user.
1360 * - decoding: unused
1361 */
1362 float temporal_cplx_masking;
de6d9b64 1363
b1edfce0
AK
1364 /**
1365 * spatial complexity masking (0-> disabled)
1366 * - encoding: Set by user.
1367 * - decoding: unused
1368 */
1369 float spatial_cplx_masking;
115329f1 1370
b71901e6 1371 /**
b1edfce0 1372 * p block masking (0-> disabled)
f5bccd85 1373 * - encoding: Set by user.
64863965 1374 * - decoding: unused
b71901e6 1375 */
b1edfce0 1376 float p_masking;
115329f1 1377
b71901e6 1378 /**
b1edfce0 1379 * darkness masking (0-> disabled)
f5bccd85 1380 * - encoding: Set by user.
64863965 1381 * - decoding: unused
b71901e6 1382 */
b1edfce0 1383 float dark_masking;
115329f1 1384
b71901e6 1385 /**
b1edfce0
AK
1386 * slice count
1387 * - encoding: Set by libavcodec.
1388 * - decoding: Set by user (or 0).
b71901e6 1389 */
b1edfce0 1390 int slice_count;
b71901e6 1391 /**
b1edfce0 1392 * prediction method (needed for huffyuv)
f5bccd85 1393 * - encoding: Set by user.
64863965 1394 * - decoding: unused
b71901e6 1395 */
b1edfce0
AK
1396 int prediction_method;
1397#define FF_PRED_LEFT 0
1398#define FF_PRED_PLANE 1
1399#define FF_PRED_MEDIAN 2
115329f1 1400
b71901e6 1401 /**
b1edfce0
AK
1402 * slice offsets in the frame in bytes
1403 * - encoding: Set/allocated by libavcodec.
1404 * - decoding: Set/allocated by user (or NULL).
b71901e6 1405 */
b1edfce0 1406 int *slice_offset;
0fd90455 1407
b71901e6 1408 /**
b1edfce0
AK
1409 * sample aspect ratio (0 if unknown)
1410 * That is the width of a pixel divided by the height of the pixel.
1411 * Numerator and denominator must be relatively prime and smaller than 256 for some video standards.
1412 * - encoding: Set by user.
f5bccd85 1413 * - decoding: Set by libavcodec.
b71901e6 1414 */
b1edfce0 1415 AVRational sample_aspect_ratio;
115329f1 1416
b71901e6 1417 /**
b1edfce0 1418 * motion estimation comparison function
f5bccd85 1419 * - encoding: Set by user.
64863965 1420 * - decoding: unused
b71901e6 1421 */
b1edfce0 1422 int me_cmp;
b71901e6 1423 /**
b1edfce0 1424 * subpixel motion estimation comparison function
f5bccd85 1425 * - encoding: Set by user.
64863965 1426 * - decoding: unused
b71901e6 1427 */
b1edfce0 1428 int me_sub_cmp;
b71901e6 1429 /**
b1edfce0 1430 * macroblock comparison function (not supported yet)
f5bccd85 1431 * - encoding: Set by user.
64863965 1432 * - decoding: unused
b71901e6 1433 */
b1edfce0 1434 int mb_cmp;
b71901e6 1435 /**
b1edfce0 1436 * interlaced DCT comparison function
f5bccd85 1437 * - encoding: Set by user.
64863965 1438 * - decoding: unused
b71901e6 1439 */
b1edfce0
AK
1440 int ildct_cmp;
1441#define FF_CMP_SAD 0
1442#define FF_CMP_SSE 1
1443#define FF_CMP_SATD 2
1444#define FF_CMP_DCT 3
1445#define FF_CMP_PSNR 4
1446#define FF_CMP_BIT 5
1447#define FF_CMP_RD 6
1448#define FF_CMP_ZERO 7
1449#define FF_CMP_VSAD 8
1450#define FF_CMP_VSSE 9
1451#define FF_CMP_NSSE 10
b1edfce0
AK
1452#define FF_CMP_DCTMAX 13
1453#define FF_CMP_DCT264 14
1454#define FF_CMP_CHROMA 256
115329f1 1455
b71901e6 1456 /**
b1edfce0 1457 * ME diamond size & shape
f5bccd85 1458 * - encoding: Set by user.
64863965 1459 * - decoding: unused
b71901e6 1460 */
b1edfce0 1461 int dia_size;
b71901e6
MN
1462
1463 /**
b1edfce0 1464 * amount of previous MV predictors (2a+1 x 2a+1 square)
f5bccd85 1465 * - encoding: Set by user.
64863965 1466 * - decoding: unused
b71901e6 1467 */
b1edfce0 1468 int last_predictor_count;
115329f1 1469
b71901e6 1470 /**
b1edfce0 1471 * prepass for motion estimation
f5bccd85 1472 * - encoding: Set by user.
64863965 1473 * - decoding: unused
b71901e6 1474 */
b1edfce0 1475 int pre_me;
115329f1 1476
b71901e6 1477 /**
b1edfce0 1478 * motion estimation prepass comparison function
f5bccd85 1479 * - encoding: Set by user.
64863965 1480 * - decoding: unused
b71901e6 1481 */
b1edfce0 1482 int me_pre_cmp;
917e06c8 1483
b71901e6 1484 /**
b1edfce0 1485 * ME prepass diamond size & shape
f5bccd85 1486 * - encoding: Set by user.
64863965 1487 * - decoding: unused
b71901e6 1488 */
b1edfce0 1489 int pre_dia_size;
115329f1 1490
c5d309f2 1491 /**
b1edfce0 1492 * subpel ME quality
f5bccd85 1493 * - encoding: Set by user.
64863965 1494 * - decoding: unused
c5d309f2 1495 */
b1edfce0 1496 int me_subpel_quality;
115329f1 1497
c5d309f2 1498 /**
b1edfce0
AK
1499 * DTG active format information (additional aspect ratio
1500 * information only used in DVB MPEG-2 transport streams)
1501 * 0 if not set.
1502 *
1503 * - encoding: unused
1504 * - decoding: Set by decoder.
c5d309f2 1505 */
b1edfce0
AK
1506 int dtg_active_format;
1507#define FF_DTG_AFD_SAME 8
1508#define FF_DTG_AFD_4_3 9
1509#define FF_DTG_AFD_16_9 10
1510#define FF_DTG_AFD_14_9 11
1511#define FF_DTG_AFD_4_3_SP_14_9 13
1512#define FF_DTG_AFD_16_9_SP_14_9 14
1513#define FF_DTG_AFD_SP_4_3 15
115329f1 1514
c5d309f2 1515 /**
b1edfce0
AK
1516 * maximum motion estimation search range in subpel units
1517 * If 0 then no limit.
1518 *
f5bccd85 1519 * - encoding: Set by user.
64863965 1520 * - decoding: unused
c5d309f2 1521 */
b1edfce0 1522 int me_range;
115329f1 1523
c5d309f2 1524 /**
b1edfce0 1525 * intra quantizer bias
f5bccd85 1526 * - encoding: Set by user.
64863965 1527 * - decoding: unused
c5d309f2 1528 */
b1edfce0
AK
1529 int intra_quant_bias;
1530#define FF_DEFAULT_QUANT_BIAS 999999
15415af4 1531
5e746b99 1532 /**
b1edfce0 1533 * inter quantizer bias
f5bccd85 1534 * - encoding: Set by user.
64863965 1535 * - decoding: unused
5e746b99 1536 */
b1edfce0 1537 int inter_quant_bias;
115329f1 1538
144f0625 1539 /**
b1edfce0
AK
1540 * slice flags
1541 * - encoding: unused
1542 * - decoding: Set by user.
144f0625 1543 */
b1edfce0
AK
1544 int slice_flags;
1545#define SLICE_FLAG_CODED_ORDER 0x0001 ///< draw_horiz_band() is called in coded order instead of display
1546#define SLICE_FLAG_ALLOW_FIELD 0x0002 ///< allow draw_horiz_band() with field slices (MPEG2 field pics)
1547#define SLICE_FLAG_ALLOW_PLANE 0x0004 ///< allow draw_horiz_band() with 1 component at a time (SVQ1)
1548
19e30a58 1549#if FF_API_XVMC
144f0625 1550 /**
b1edfce0
AK
1551 * XVideo Motion Acceleration
1552 * - encoding: forbidden
1553 * - decoding: set by decoder
19e30a58 1554 * @deprecated XvMC support is slated for removal.
144f0625 1555 */
19e30a58
DB
1556 attribute_deprecated int xvmc_acceleration;
1557#endif /* FF_API_XVMC */
144f0625 1558
4d2858de 1559 /**
b1edfce0
AK
1560 * macroblock decision mode
1561 * - encoding: Set by user.
1562 * - decoding: unused
4d2858de 1563 */
b1edfce0
AK
1564 int mb_decision;
1565#define FF_MB_DECISION_SIMPLE 0 ///< uses mb_cmp
1566#define FF_MB_DECISION_BITS 1 ///< chooses the one which needs the fewest bits
1567#define FF_MB_DECISION_RD 2 ///< rate distortion
4d2858de 1568
6b72ac63 1569 /**
b1edfce0
AK
1570 * custom intra quantization matrix
1571 * - encoding: Set by user, can be NULL.
1572 * - decoding: Set by libavcodec.
bec89a84 1573 */
b1edfce0 1574 uint16_t *intra_matrix;
7160bb71 1575
11f18faf 1576 /**
b1edfce0
AK
1577 * custom inter quantization matrix
1578 * - encoding: Set by user, can be NULL.
1579 * - decoding: Set by libavcodec.
11f18faf 1580 */
b1edfce0 1581 uint16_t *inter_matrix;
115329f1 1582
11f18faf 1583 /**
b1edfce0
AK
1584 * scene change detection threshold
1585 * 0 is default, larger means fewer detected scene changes.
f5bccd85 1586 * - encoding: Set by user.
64863965 1587 * - decoding: unused
11f18faf 1588 */
b1edfce0 1589 int scenechange_threshold;
115329f1 1590
5d3cea3a 1591 /**
b1edfce0 1592 * noise reduction strength
f5bccd85 1593 * - encoding: Set by user.
b1edfce0 1594 * - decoding: unused
5d3cea3a 1595 */
b1edfce0 1596 int noise_reduction;
1e491e29 1597
140cb663 1598 /**
b1edfce0
AK
1599 * Motion estimation threshold below which no motion estimation is
1600 * performed, but instead the user specified motion vectors are used.
1601 *
f5bccd85 1602 * - encoding: Set by user.
b1edfce0 1603 * - decoding: unused
0c9bbaec 1604 */
b1edfce0 1605 int me_threshold;
0c9bbaec
WH
1606
1607 /**
b1edfce0
AK
1608 * Macroblock threshold below which the user specified macroblock types will be used.
1609 * - encoding: Set by user.
64863965 1610 * - decoding: unused
140cb663 1611 */
b1edfce0 1612 int mb_threshold;
115329f1 1613
1457ab52 1614 /**
b1edfce0 1615 * precision of the intra DC coefficient - 8
f5bccd85 1616 * - encoding: Set by user.
64863965 1617 * - decoding: unused
1457ab52 1618 */
b1edfce0
AK
1619 int intra_dc_precision;
1620
1457ab52 1621 /**
b1edfce0
AK
1622 * Number of macroblock rows at the top which are skipped.
1623 * - encoding: unused
1624 * - decoding: Set by user.
1457ab52 1625 */
b1edfce0
AK
1626 int skip_top;
1627
1457ab52 1628 /**
b1edfce0
AK
1629 * Number of macroblock rows at the bottom which are skipped.
1630 * - encoding: unused
1631 * - decoding: Set by user.
1457ab52 1632 */
b1edfce0
AK
1633 int skip_bottom;
1634
622348f9 1635 /**
b1edfce0
AK
1636 * Border processing masking, raises the quantizer for mbs on the borders
1637 * of the picture.
f5bccd85 1638 * - encoding: Set by user.
622348f9
MN
1639 * - decoding: unused
1640 */
b1edfce0 1641 float border_masking;
115329f1 1642
1457ab52 1643 /**
b1edfce0 1644 * minimum MB lagrange multipler
f5bccd85 1645 * - encoding: Set by user.
64863965 1646 * - decoding: unused
1457ab52 1647 */
b1edfce0 1648 int mb_lmin;
b07a5980
MN
1649
1650 /**
b1edfce0 1651 * maximum MB lagrange multipler
f5bccd85 1652 * - encoding: Set by user.
64863965 1653 * - decoding: unused
b07a5980 1654 */
b1edfce0 1655 int mb_lmax;
70ac76c0 1656
f5fb6b34 1657 /**
b1edfce0 1658 *
f5bccd85 1659 * - encoding: Set by user.
64863965 1660 * - decoding: unused
f5fb6b34 1661 */
b1edfce0 1662 int me_penalty_compensation;
b07a5980 1663
70ac76c0 1664 /**
b1edfce0 1665 *
f5bccd85 1666 * - encoding: Set by user.
64863965 1667 * - decoding: unused
70ac76c0 1668 */
b1edfce0 1669 int bidir_refine;
826f429a 1670
70ac76c0 1671 /**
b1edfce0 1672 *
f5bccd85 1673 * - encoding: Set by user.
64863965 1674 * - decoding: unused
70ac76c0 1675 */
b1edfce0 1676 int brd_scale;
70ac76c0 1677
826f429a 1678 /**
b1edfce0 1679 * minimum GOP size
f5bccd85 1680 * - encoding: Set by user.
64863965 1681 * - decoding: unused
826f429a 1682 */
b1edfce0 1683 int keyint_min;
826f429a 1684
a33c7159 1685 /**
b1edfce0
AK
1686 * number of reference frames
1687 * - encoding: Set by user.
1688 * - decoding: Set by lavc.
a33c7159 1689 */
b1edfce0 1690 int refs;
e2f9490e
FB
1691
1692 /**
b1edfce0
AK
1693 * chroma qp offset from luma
1694 * - encoding: Set by user.
1695 * - decoding: unused
e2f9490e 1696 */
b1edfce0 1697 int chromaoffset;
e2f9490e 1698
ebbcdc9a 1699 /**
b1edfce0 1700 * Multiplied by qscale for each frame and added to scene_change_score.
f5bccd85
DB
1701 * - encoding: Set by user.
1702 * - decoding: unused
ebbcdc9a 1703 */
b1edfce0 1704 int scenechange_factor;
ebbcdc9a 1705
65f7062d 1706 /**
b1edfce0
AK
1707 *
1708 * Note: Value depends upon the compare function used for fullpel ME.
f5bccd85 1709 * - encoding: Set by user.
1984f635
MN
1710 * - decoding: unused
1711 */
b1edfce0 1712 int mv0_threshold;
115329f1 1713
1984f635 1714 /**
b1edfce0 1715 * Adjust sensitivity of b_frame_strategy 1.
f5bccd85 1716 * - encoding: Set by user.
1984f635
MN
1717 * - decoding: unused
1718 */
b1edfce0 1719 int b_sensitivity;
5cd62665
ZK
1720
1721 /**
b1edfce0
AK
1722 * Chromaticity coordinates of the source primaries.
1723 * - encoding: Set by user
1724 * - decoding: Set by libavcodec
5cd62665 1725 */
b1edfce0 1726 enum AVColorPrimaries color_primaries;
115329f1 1727
3d2e8cce 1728 /**
b1edfce0
AK
1729 * Color Transfer Characteristic.
1730 * - encoding: Set by user
1731 * - decoding: Set by libavcodec
3d2e8cce 1732 */
b1edfce0 1733 enum AVColorTransferCharacteristic color_trc;
115329f1 1734
11e659c2 1735 /**
b1edfce0
AK
1736 * YUV colorspace type.
1737 * - encoding: Set by user
1738 * - decoding: Set by libavcodec
1739 */
1740 enum AVColorSpace colorspace;
1741
1742 /**
1743 * MPEG vs JPEG YUV range.
1744 * - encoding: Set by user
1745 * - decoding: Set by libavcodec
1746 */
1747 enum AVColorRange color_range;
1748
1749 /**
1750 * This defines the location of chroma samples.
1751 * - encoding: Set by user
1752 * - decoding: Set by libavcodec
1753 */
1754 enum AVChromaLocation chroma_sample_location;
1755
1756 /**
1757 * Number of slices.
1758 * Indicates number of picture subdivisions. Used for parallelized
1759 * decoding.
1760 * - encoding: Set by user
11e659c2
MN
1761 * - decoding: unused
1762 */
b1edfce0
AK
1763 int slices;
1764
1765 /** Field order
1766 * - encoding: set by libavcodec
1767 * - decoding: Set by libavcodec
1768 */
1769 enum AVFieldOrder field_order;
1770
1771 /* audio only */
1772 int sample_rate; ///< samples per second
1773 int channels; ///< number of audio channels
11e659c2
MN
1774
1775 /**
b1edfce0 1776 * audio sample format
f5bccd85 1777 * - encoding: Set by user.
b1edfce0 1778 * - decoding: Set by libavcodec.
11e659c2 1779 */
b1edfce0 1780 enum AVSampleFormat sample_fmt; ///< sample format
115329f1 1781
b1edfce0 1782 /* The following data should not be initialized. */
3bb07d61 1783 /**
d6f4fe68
AK
1784 * Number of samples per channel in an audio frame.
1785 *
1786 * - encoding: set by libavcodec in avcodec_open2(). Each submitted frame
1787 * except the last must contain exactly frame_size samples per channel.
1788 * May be 0 when the codec has CODEC_CAP_VARIABLE_FRAME_SIZE set, then the
1789 * frame size is not restricted.
1790 * - decoding: may be set by some decoders to indicate constant frame size
3bb07d61 1791 */
b1edfce0 1792 int frame_size;
c179c9e1
AK
1793
1794 /**
1795 * Frame counter, set by libavcodec.
1796 *
1797 * - decoding: total number of frames returned from the decoder so far.
1798 * - encoding: total number of frames passed to the encoder so far.
1799 *
1800 * @note the counter is not incremented if encoding/decoding resulted in
1801 * an error.
1802 */
1803 int frame_number;
3bb07d61 1804
fb364ada 1805 /**
b1edfce0
AK
1806 * number of bytes per packet if constant and known or 0
1807 * Used by some WAV based audio codecs.
fb364ada 1808 */
b1edfce0 1809 int block_align;
115329f1 1810
7d1c3fc1 1811 /**
b1edfce0 1812 * Audio cutoff bandwidth (0 means "automatic")
f5bccd85 1813 * - encoding: Set by user.
7d1c3fc1
MN
1814 * - decoding: unused
1815 */
b1edfce0 1816 int cutoff;
d6eb3c50 1817
b1edfce0 1818#if FF_API_REQUEST_CHANNELS
d6eb3c50 1819 /**
b1edfce0
AK
1820 * Decoder should decode to this many channels if it can (0 for default)
1821 * - encoding: unused
1822 * - decoding: Set by user.
1823 * @deprecated Deprecated in favor of request_channel_layout.
d6eb3c50 1824 */
bf4b0ed1 1825 attribute_deprecated int request_channels;
b1edfce0 1826#endif
d6eb3c50
MN
1827
1828 /**
b1edfce0
AK
1829 * Audio channel layout.
1830 * - encoding: set by user.
1831 * - decoding: set by libavcodec.
d6eb3c50 1832 */
b1edfce0 1833 uint64_t channel_layout;
115329f1 1834
541ae140 1835 /**
b1edfce0 1836 * Request decoder to use this channel layout if it can (0 for default)
541ae140 1837 * - encoding: unused
b1edfce0 1838 * - decoding: Set by user.
541ae140 1839 */
b1edfce0 1840 uint64_t request_channel_layout;
05fbd0a2
MN
1841
1842 /**
b1edfce0 1843 * Type of service that the audio stream conveys.
f5bccd85 1844 * - encoding: Set by user.
b1edfce0 1845 * - decoding: Set by libavcodec.
05fbd0a2 1846 */
b1edfce0 1847 enum AVAudioServiceType audio_service_type;
158c7f05
MN
1848
1849 /**
b1edfce0
AK
1850 * Used to request a sample format from the decoder.
1851 * - encoding: unused.
1852 * - decoding: Set by user.
158c7f05 1853 */
b1edfce0 1854 enum AVSampleFormat request_sample_fmt;
158c7f05 1855
759001c5 1856#if FF_API_GET_BUFFER
158c7f05 1857 /**
b1edfce0
AK
1858 * Called at the beginning of each frame to get a buffer for it.
1859 *
1860 * The function will set AVFrame.data[], AVFrame.linesize[].
1861 * AVFrame.extended_data[] must also be set, but it should be the same as
1862 * AVFrame.data[] except for planar audio with more channels than can fit
1863 * in AVFrame.data[]. In that case, AVFrame.data[] shall still contain as
1864 * many data pointers as it can hold.
1865 *
1866 * if CODEC_CAP_DR1 is not set then get_buffer() must call
1867 * avcodec_default_get_buffer() instead of providing buffers allocated by
1868 * some other means.
1869 *
1870 * AVFrame.data[] should be 32- or 16-byte-aligned unless the CPU doesn't
1871 * need it. avcodec_default_get_buffer() aligns the output buffer properly,
1872 * but if get_buffer() is overridden then alignment considerations should
1873 * be taken into account.
1874 *
1875 * @see avcodec_default_get_buffer()
1876 *
1877 * Video:
1878 *
1879 * If pic.reference is set then the frame will be read later by libavcodec.
1880 * avcodec_align_dimensions2() should be used to find the required width and
1881 * height, as they normally need to be rounded up to the next multiple of 16.
1882 *
1883 * If frame multithreading is used and thread_safe_callbacks is set,
1884 * it may be called from a different thread, but not from more than one at
1885 * once. Does not need to be reentrant.
1886 *
1887 * @see release_buffer(), reget_buffer()
1888 * @see avcodec_align_dimensions2()
1889 *
1890 * Audio:
1891 *
1892 * Decoders request a buffer of a particular size by setting
1893 * AVFrame.nb_samples prior to calling get_buffer(). The decoder may,
1894 * however, utilize only part of the buffer by setting AVFrame.nb_samples
1895 * to a smaller value in the output frame.
1896 *
1897 * Decoders cannot use the buffer after returning from
1898 * avcodec_decode_audio4(), so they will not call release_buffer(), as it
8e134e51
JR
1899 * is assumed to be released immediately upon return. In some rare cases,
1900 * a decoder may need to call get_buffer() more than once in a single
1901 * call to avcodec_decode_audio4(). In that case, when get_buffer() is
1902 * called again after it has already been called once, the previously
1903 * acquired buffer is assumed to be released at that time and may not be
1904 * reused by the decoder.
b1edfce0
AK
1905 *
1906 * As a convenience, av_samples_get_buffer_size() and
1907 * av_samples_fill_arrays() in libavutil may be used by custom get_buffer()
1908 * functions to find the required data size and to fill data pointers and
1909 * linesize. In AVFrame.linesize, only linesize[0] may be set for audio
1910 * since all planes must be the same size.
1911 *
1912 * @see av_samples_get_buffer_size(), av_samples_fill_arrays()
1913 *
1914 * - encoding: unused
1915 * - decoding: Set by libavcodec, user can override.
759001c5
AK
1916 *
1917 * @deprecated use get_buffer2()
158c7f05 1918 */
759001c5 1919 attribute_deprecated
b1edfce0 1920 int (*get_buffer)(struct AVCodecContext *c, AVFrame *pic);
2a2bbcb0 1921
821cb11f 1922 /**
b1edfce0
AK
1923 * Called to release buffers which were allocated with get_buffer.
1924 * A released buffer can be reused in get_buffer().
1925 * pic.data[*] must be set to NULL.
1926 * May be called from a different thread if frame multithreading is used,
1927 * but not by more than one thread at once, so does not need to be reentrant.
1928 * - encoding: unused
1929 * - decoding: Set by libavcodec, user can override.
759001c5
AK
1930 *
1931 * @deprecated custom freeing callbacks should be set from get_buffer2()
821cb11f 1932 */
759001c5 1933 attribute_deprecated
b1edfce0 1934 void (*release_buffer)(struct AVCodecContext *c, AVFrame *pic);
115329f1 1935
074c4ca7 1936 /**
f5bccd85
DB
1937 * Called at the beginning of a frame to get cr buffer for it.
1938 * Buffer type (size, hints) must be the same. libavcodec won't check it.
1939 * libavcodec will pass previous buffer in pic, function should return
e1c2a5a0 1940 * same buffer or new buffer with old frame "painted" into it.
f5bccd85 1941 * If pic.data[0] == NULL must behave like get_buffer().
f1b99cc6
MN
1942 * if CODEC_CAP_DR1 is not set then reget_buffer() must call
1943 * avcodec_default_reget_buffer() instead of providing buffers allocated by
1944 * some other means.
074c4ca7 1945 * - encoding: unused
53128bc3 1946 * - decoding: Set by libavcodec, user can override.
074c4ca7 1947 */
759001c5 1948 attribute_deprecated
e1c2a5a0 1949 int (*reget_buffer)(struct AVCodecContext *c, AVFrame *pic);
759001c5 1950#endif
ba58dabc 1951
759001c5
AK
1952 /**
1953 * This callback is called at the beginning of each frame to get data
1954 * buffer(s) for it. There may be one contiguous buffer for all the data or
00b8e650
DB
1955 * there may be a buffer per each data plane or anything in between. What
1956 * this means is, you may set however many entries in buf[] you feel necessary.
1957 * Each buffer must be reference-counted using the AVBuffer API (see description
1958 * of buf[] below).
759001c5
AK
1959 *
1960 * The following fields will be set in the frame before this callback is
1961 * called:
1962 * - format
1963 * - width, height (video only)
1964 * - sample_rate, channel_layout, nb_samples (audio only)
1965 * Their values may differ from the corresponding values in
1966 * AVCodecContext. This callback must use the frame values, not the codec
1967 * context values, to calculate the required buffer size.
1968 *
1969 * This callback must fill the following fields in the frame:
1970 * - data[]
1971 * - linesize[]
1972 * - extended_data:
1973 * * if the data is planar audio with more than 8 channels, then this
1974 * callback must allocate and fill extended_data to contain all pointers
1975 * to all data planes. data[] must hold as many pointers as it can.
1976 * extended_data must be allocated with av_malloc() and will be freed in
1977 * av_frame_unref().
1978 * * otherwise exended_data must point to data
4cdb3c50
DB
1979 * - buf[] must contain one or more pointers to AVBufferRef structures. Each of
1980 * the frame's data and extended_data pointers must be contained in these. That
1981 * is, one AVBufferRef for each allocated chunk of memory, not necessarily one
1982 * AVBufferRef per data[] entry. See: av_buffer_create(), av_buffer_alloc(),
1983 * and av_buffer_ref().
759001c5
AK
1984 * - extended_buf and nb_extended_buf must be allocated with av_malloc() by
1985 * this callback and filled with the extra buffers if there are more
1986 * buffers than buf[] can hold. extended_buf will be freed in
1987 * av_frame_unref().
1988 *
1989 * If CODEC_CAP_DR1 is not set then get_buffer2() must call
1990 * avcodec_default_get_buffer2() instead of providing buffers allocated by
1991 * some other means.
1992 *
1993 * Each data plane must be aligned to the maximum required by the target
1994 * CPU.
1995 *
1996 * @see avcodec_default_get_buffer2()
1997 *
1998 * Video:
1999 *
2000 * If AV_GET_BUFFER_FLAG_REF is set in flags then the frame may be reused
2001 * (read and/or written to if it is writable) later by libavcodec.
2002 *
2003 * If CODEC_FLAG_EMU_EDGE is not set in s->flags, the buffer must contain an
2004 * edge of the size returned by avcodec_get_edge_width() on all sides.
2005 *
2006 * avcodec_align_dimensions2() should be used to find the required width and
2007 * height, as they normally need to be rounded up to the next multiple of 16.
2008 *
2009 * If frame multithreading is used and thread_safe_callbacks is set,
2010 * this callback may be called from a different thread, but not from more
2011 * than one at once. Does not need to be reentrant.
2012 *
2013 * @see avcodec_align_dimensions2()
2014 *
2015 * Audio:
2016 *
2017 * Decoders request a buffer of a particular size by setting
2018 * AVFrame.nb_samples prior to calling get_buffer2(). The decoder may,
2019 * however, utilize only part of the buffer by setting AVFrame.nb_samples
2020 * to a smaller value in the output frame.
2021 *
2022 * As a convenience, av_samples_get_buffer_size() and
2023 * av_samples_fill_arrays() in libavutil may be used by custom get_buffer2()
2024 * functions to find the required data size and to fill data pointers and
2025 * linesize. In AVFrame.linesize, only linesize[0] may be set for audio
2026 * since all planes must be the same size.
2027 *
2028 * @see av_samples_get_buffer_size(), av_samples_fill_arrays()
2029 *
2030 * - encoding: unused
2031 * - decoding: Set by libavcodec, user can override.
2032 */
2033 int (*get_buffer2)(struct AVCodecContext *s, AVFrame *frame, int flags);
2034
2035 /**
2036 * If non-zero, the decoded audio and video frames returned from
2037 * avcodec_decode_video2() and avcodec_decode_audio4() are reference-counted
2038 * and are valid indefinitely. The caller must free them with
2039 * av_frame_unref() when they are not needed anymore.
2040 * Otherwise, the decoded frames must not be freed by the caller and are
2041 * only valid until the next decode call.
2042 *
2043 * - encoding: unused
2044 * - decoding: set by the caller before avcodec_open2().
2045 */
2046 int refcounted_frames;
ba58dabc 2047
b1edfce0
AK
2048 /* - encoding parameters */
2049 float qcompress; ///< amount of qscale change between easy & hard scenes (0.0-1.0)
2050 float qblur; ///< amount of qscale smoothing over time (0.0-1.0)
ba58dabc
MN
2051
2052 /**
b1edfce0 2053 * minimum quantizer
f5bccd85 2054 * - encoding: Set by user.
b1edfce0 2055 * - decoding: unused
ba58dabc 2056 */
b1edfce0 2057 int qmin;
7ebfc0ea
MN
2058
2059 /**
b1edfce0 2060 * maximum quantizer
f5bccd85
DB
2061 * - encoding: Set by user.
2062 * - decoding: unused
7ebfc0ea 2063 */
b1edfce0 2064 int qmax;
115329f1 2065
77ea0d4b 2066 /**
b1edfce0 2067 * maximum quantizer difference between frames
f5bccd85 2068 * - encoding: Set by user.
77ea0d4b
MN
2069 * - decoding: unused
2070 */
b1edfce0 2071 int max_qdiff;
9c3d33d6
MN
2072
2073 /**
b1edfce0 2074 * ratecontrol qmin qmax limiting method
511cf612 2075 * 0-> clipping, 1-> use a nice continuous function to limit qscale wthin qmin/qmax.
f5bccd85 2076 * - encoding: Set by user.
b1edfce0 2077 * - decoding: unused
9c3d33d6 2078 */
b1edfce0 2079 float rc_qsquish;
115329f1 2080
b1edfce0
AK
2081 float rc_qmod_amp;
2082 int rc_qmod_freq;
a4d36c11
MN
2083
2084 /**
b1edfce0 2085 * decoder bitstream buffer size
f5bccd85 2086 * - encoding: Set by user.
f20f8a8b 2087 * - decoding: unused
a4d36c11 2088 */
b1edfce0 2089 int rc_buffer_size;
f20f8a8b
MN
2090
2091 /**
b1edfce0
AK
2092 * ratecontrol override, see RcOverride
2093 * - encoding: Allocated/set/freed by user.
f20f8a8b
MN
2094 * - decoding: unused
2095 */
b1edfce0
AK
2096 int rc_override_count;
2097 RcOverride *rc_override;
bf266e19
MN
2098
2099 /**
b1edfce0
AK
2100 * rate control equation
2101 * - encoding: Set by user
bf266e19
MN
2102 * - decoding: unused
2103 */
b1edfce0 2104 const char *rc_eq;
d4c5d2ad
MN
2105
2106 /**
b1edfce0 2107 * maximum bitrate
f5bccd85 2108 * - encoding: Set by user.
d4c5d2ad
MN
2109 * - decoding: unused
2110 */
b1edfce0 2111 int rc_max_rate;
baced9f5
MN
2112
2113 /**
b1edfce0 2114 * minimum bitrate
f5bccd85 2115 * - encoding: Set by user.
b1edfce0 2116 * - decoding: unused
baced9f5 2117 */
b1edfce0 2118 int rc_min_rate;
0215006a 2119
b1edfce0 2120 float rc_buffer_aggressivity;
c4ab43ff 2121
baced9f5 2122 /**
b1edfce0 2123 * initial complexity for pass1 ratecontrol
f5bccd85 2124 * - encoding: Set by user.
b1edfce0 2125 * - decoding: unused
178fcca8 2126 */
b1edfce0 2127 float rc_initial_cplx;
21adafec
MN
2128
2129 /**
b1edfce0
AK
2130 * Ratecontrol attempt to use, at maximum, <value> of what can be used without an underflow.
2131 * - encoding: Set by user.
2132 * - decoding: unused.
21adafec 2133 */
b1edfce0 2134 float rc_max_available_vbv_use;
bbf18b21
MN
2135
2136 /**
b1edfce0 2137 * Ratecontrol attempt to use, at least, <value> times the amount needed to prevent a vbv overflow.
f5bccd85 2138 * - encoding: Set by user.
b1edfce0 2139 * - decoding: unused.
bbf18b21 2140 */
b1edfce0 2141 float rc_min_vbv_overflow_use;
bbf18b21
MN
2142
2143 /**
b1edfce0 2144 * Number of bits which should be loaded into the rc buffer before decoding starts.
f5bccd85 2145 * - encoding: Set by user.
bbf18b21
MN
2146 * - decoding: unused
2147 */
b1edfce0 2148 int rc_initial_buffer_occupancy;
0fd6aea1 2149
b1edfce0
AK
2150#define FF_CODER_TYPE_VLC 0
2151#define FF_CODER_TYPE_AC 1
2152#define FF_CODER_TYPE_RAW 2
2153#define FF_CODER_TYPE_RLE 3
2154#define FF_CODER_TYPE_DEFLATE 4
0fd6aea1 2155 /**
b1edfce0 2156 * coder type
f5bccd85 2157 * - encoding: Set by user.
0fd6aea1
MN
2158 * - decoding: unused
2159 */
b1edfce0 2160 int coder_type;
0fd6aea1
MN
2161
2162 /**
b1edfce0 2163 * context model
f5bccd85 2164 * - encoding: Set by user.
0fd6aea1
MN
2165 * - decoding: unused
2166 */
b1edfce0 2167 int context_model;
957c743a
CM
2168
2169 /**
b1edfce0 2170 * minimum Lagrange multipler
f5bccd85 2171 * - encoding: Set by user.
957c743a
CM
2172 * - decoding: unused
2173 */
b1edfce0 2174 int lmin;
6e0d8c06
MN
2175
2176 /**
b1edfce0 2177 * maximum Lagrange multipler
f5bccd85 2178 * - encoding: Set by user.
6e0d8c06
MN
2179 * - decoding: unused
2180 */
b1edfce0 2181 int lmax;
6e0d8c06
MN
2182
2183 /**
b1edfce0 2184 * frame skip threshold
f5bccd85 2185 * - encoding: Set by user.
6e0d8c06
MN
2186 * - decoding: unused
2187 */
b1edfce0 2188 int frame_skip_threshold;
09c3e44e
MN
2189
2190 /**
b1edfce0 2191 * frame skip factor
f5bccd85 2192 * - encoding: Set by user.
09c3e44e
MN
2193 * - decoding: unused
2194 */
b1edfce0 2195 int frame_skip_factor;
316a2ec8
MN
2196
2197 /**
b1edfce0 2198 * frame skip exponent
f5bccd85 2199 * - encoding: Set by user.
316a2ec8
MN
2200 * - decoding: unused
2201 */
b1edfce0 2202 int frame_skip_exp;
e8501c93
MN
2203
2204 /**
b1edfce0 2205 * frame skip comparison function
f5bccd85 2206 * - encoding: Set by user.
e8501c93
MN
2207 * - decoding: unused
2208 */
b1edfce0 2209 int frame_skip_cmp;
58f7833e 2210
58f7833e 2211 /**
b1edfce0 2212 * trellis RD quantization
f5bccd85 2213 * - encoding: Set by user.
58f7833e
RS
2214 * - decoding: unused
2215 */
b1edfce0 2216 int trellis;
58f7833e
RS
2217
2218 /**
f5bccd85 2219 * - encoding: Set by user.
b1edfce0 2220 * - decoding: unused
58f7833e 2221 */
b1edfce0 2222 int min_prediction_order;
58f7833e
RS
2223
2224 /**
f5bccd85 2225 * - encoding: Set by user.
58f7833e
RS
2226 * - decoding: unused
2227 */
b1edfce0 2228 int max_prediction_order;
58f7833e 2229
58f7833e 2230 /**
b1edfce0 2231 * GOP timecode frame start number, in non drop frame format
f5bccd85 2232 * - encoding: Set by user.
58f7833e
RS
2233 * - decoding: unused
2234 */
b1edfce0
AK
2235 int64_t timecode_frame_start;
2236
2237 /* The RTP callback: This function is called */
2238 /* every time the encoder has a packet to send. */
2239 /* It depends on the encoder if the data starts */
2240 /* with a Start Code (it should). H.263 does. */
2241 /* mb_nb contains the number of macroblocks */
2242 /* encoded in the RTP payload. */
2243 void (*rtp_callback)(struct AVCodecContext *avctx, void *data, int size, int mb_nb);
2244
2245 int rtp_payload_size; /* The size of the RTP payload: the coder will */
2246 /* do its best to deliver a chunk with size */
2247 /* below rtp_payload_size, the chunk will start */
2248 /* with a start code on some codecs like H.263. */
2249 /* This doesn't take account of any particular */
2250 /* headers inside the transmitted RTP payload. */
2251
2252 /* statistics, used for 2-pass encoding */
2253 int mv_bits;
2254 int header_bits;
2255 int i_tex_bits;
2256 int p_tex_bits;
2257 int i_count;
2258 int p_count;
2259 int skip_count;
2260 int misc_bits;
58f7833e 2261
14f0c8e2 2262 /**
b1edfce0
AK
2263 * number of bits used for the previously encoded frame
2264 * - encoding: Set by libavcodec.
14f0c8e2
LA
2265 * - decoding: unused
2266 */
b1edfce0 2267 int frame_bits;
39a64e30
CH
2268
2269 /**
b1edfce0
AK
2270 * pass1 encoding statistics output buffer
2271 * - encoding: Set by libavcodec.
39a64e30
CH
2272 * - decoding: unused
2273 */
b1edfce0 2274 char *stats_out;
1dd509b1
MN
2275
2276 /**
b1edfce0
AK
2277 * pass2 encoding statistics input buffer
2278 * Concatenated stuff from stats_out of pass1 should be placed here.
2279 * - encoding: Allocated/set/freed by user.
1dd509b1
MN
2280 * - decoding: unused
2281 */
b1edfce0 2282 char *stats_in;
f9243d34
CH
2283
2284 /**
b1edfce0
AK
2285 * Work around bugs in encoders which sometimes cannot be detected automatically.
2286 * - encoding: Set by user
2287 * - decoding: Set by user
f9243d34 2288 */
b1edfce0
AK
2289 int workaround_bugs;
2290#define FF_BUG_AUTODETECT 1 ///< autodetection
eb5920c1 2291#if FF_API_OLD_MSMPEG4
b1edfce0 2292#define FF_BUG_OLD_MSMPEG4 2
eb5920c1 2293#endif
b1edfce0
AK
2294#define FF_BUG_XVID_ILACE 4
2295#define FF_BUG_UMP4 8
2296#define FF_BUG_NO_PADDING 16
2297#define FF_BUG_AMV 32
0300962b 2298#if FF_API_AC_VLC
b1edfce0 2299#define FF_BUG_AC_VLC 0 ///< Will be removed, libavcodec can now handle these non-compliant files by default.
0300962b 2300#endif
b1edfce0
AK
2301#define FF_BUG_QPEL_CHROMA 64
2302#define FF_BUG_STD_QPEL 128
2303#define FF_BUG_QPEL_CHROMA2 256
2304#define FF_BUG_DIRECT_BLOCKSIZE 512
2305#define FF_BUG_EDGE 1024
2306#define FF_BUG_HPEL_CHROMA 2048
2307#define FF_BUG_DC_CLIP 4096
2308#define FF_BUG_MS 8192 ///< Work around various bugs in Microsoft's broken decoders.
2309#define FF_BUG_TRUNCATED 16384
a403fc03
JR
2310
2311 /**
b1edfce0 2312 * strictly follow the standard (MPEG4, ...).
f5bccd85 2313 * - encoding: Set by user.
b1edfce0
AK
2314 * - decoding: Set by user.
2315 * Setting this to STRICT or higher means the encoder and decoder will
2316 * generally do stupid things, whereas setting it to unofficial or lower
2317 * will mean the encoder might produce output that is not supported by all
2318 * spec-compliant decoders. Decoders don't differentiate between normal,
2319 * unofficial and experimental (that is, they always try to decode things
2320 * when they can) unless they are explicitly asked to behave stupidly
2321 * (=strictly conform to the specs)
a403fc03 2322 */
b1edfce0
AK
2323 int strict_std_compliance;
2324#define FF_COMPLIANCE_VERY_STRICT 2 ///< Strictly conform to an older more strict version of the spec or reference software.
2325#define FF_COMPLIANCE_STRICT 1 ///< Strictly conform to all the things in the spec no matter what consequences.
2326#define FF_COMPLIANCE_NORMAL 0
2327#define FF_COMPLIANCE_UNOFFICIAL -1 ///< Allow unofficial extensions
2328#define FF_COMPLIANCE_EXPERIMENTAL -2 ///< Allow nonstandardized experimental things.
a403fc03 2329
a403fc03 2330 /**
b1edfce0
AK
2331 * error concealment flags
2332 * - encoding: unused
2333 * - decoding: Set by user.
a403fc03 2334 */
b1edfce0
AK
2335 int error_concealment;
2336#define FF_EC_GUESS_MVS 1
2337#define FF_EC_DEBLOCK 2
a403fc03
JR
2338
2339 /**
b1edfce0 2340 * debug
f5bccd85 2341 * - encoding: Set by user.
b1edfce0 2342 * - decoding: Set by user.
a403fc03 2343 */
b1edfce0
AK
2344 int debug;
2345#define FF_DEBUG_PICT_INFO 1
2346#define FF_DEBUG_RC 2
2347#define FF_DEBUG_BITSTREAM 4
2348#define FF_DEBUG_MB_TYPE 8
2349#define FF_DEBUG_QP 16
ccc71298
AK
2350#if FF_API_DEBUG_MV
2351/**
2352 * @deprecated this option does nothing
2353 */
b1edfce0 2354#define FF_DEBUG_MV 32
ccc71298 2355#endif
b1edfce0
AK
2356#define FF_DEBUG_DCT_COEFF 0x00000040
2357#define FF_DEBUG_SKIP 0x00000080
2358#define FF_DEBUG_STARTCODE 0x00000100
2359#define FF_DEBUG_PTS 0x00000200
2360#define FF_DEBUG_ER 0x00000400
2361#define FF_DEBUG_MMCO 0x00000800
2362#define FF_DEBUG_BUGS 0x00001000
f8b2bcd2 2363#if FF_API_DEBUG_MV
b1edfce0
AK
2364#define FF_DEBUG_VIS_QP 0x00002000
2365#define FF_DEBUG_VIS_MB_TYPE 0x00004000
f8b2bcd2 2366#endif
b1edfce0
AK
2367#define FF_DEBUG_BUFFERS 0x00008000
2368#define FF_DEBUG_THREADS 0x00010000
188dea1d 2369
a1504eee 2370#if FF_API_DEBUG_MV
80d617f5 2371 /**
a1504eee 2372 * @deprecated this option does not have any effect
80d617f5 2373 */
a1504eee 2374 attribute_deprecated
b1edfce0
AK
2375 int debug_mv;
2376#define FF_DEBUG_VIS_MV_P_FOR 0x00000001 //visualize forward predicted MVs of P frames
2377#define FF_DEBUG_VIS_MV_B_FOR 0x00000002 //visualize forward predicted MVs of B frames
2378#define FF_DEBUG_VIS_MV_B_BACK 0x00000004 //visualize backward predicted MVs of B frames
a1504eee 2379#endif
b1ec601f
RD
2380
2381 /**
b1edfce0 2382 * Error recognition; may misdetect some more or less valid parts as errors.
85947156
VS
2383 * - encoding: unused
2384 * - decoding: Set by user.
b1ec601f 2385 */
b1edfce0 2386 int err_recognition;
23a211cb
AK
2387
2388/**
2389 * Verify checksums embedded in the bitstream (could be of either encoded or
2390 * decoded data, depending on the codec) and print an error message on mismatch.
2391 * If AV_EF_EXPLODE is also set, a mismatching checksum will result in the
2392 * decoder returning an error.
2393 */
b1edfce0
AK
2394#define AV_EF_CRCCHECK (1<<0)
2395#define AV_EF_BITSTREAM (1<<1)
2396#define AV_EF_BUFFER (1<<2)
2397#define AV_EF_EXPLODE (1<<3)
1408352a 2398
79de84f2
MN
2399 /**
2400 * opaque 64bit number (generally a PTS) that will be reordered and
2401 * output in AVFrame.reordered_opaque
81c623fa 2402 * @deprecated in favor of pkt_pts
79de84f2
MN
2403 * - encoding: unused
2404 * - decoding: Set by user.
2405 */
2406 int64_t reordered_opaque;
312420f3
PR
2407
2408 /**
b1edfce0
AK
2409 * Hardware accelerator in use
2410 * - encoding: unused.
2411 * - decoding: Set by libavcodec
312420f3 2412 */
b1edfce0 2413 struct AVHWAccel *hwaccel;
0d72e7d0
PR
2414
2415 /**
b1edfce0
AK
2416 * Hardware accelerator context.
2417 * For some hardware accelerators, a global context needs to be
2418 * provided by the user. In that case, this holds display-dependent
2419 * data Libav cannot instantiate itself. Please refer to the
2420 * Libav HW accelerator documentation to know how to fill this
2421 * is. e.g. for VA API, this is a struct vaapi_context.
2422 * - encoding: unused
2423 * - decoding: Set by user
0d72e7d0 2424 */
b1edfce0 2425 void *hwaccel_context;
0d72e7d0
PR
2426
2427 /**
b1edfce0
AK
2428 * error
2429 * - encoding: Set by libavcodec if flags&CODEC_FLAG_PSNR.
2430 * - decoding: unused
0d72e7d0 2431 */
b1edfce0 2432 uint64_t error[AV_NUM_DATA_POINTERS];
3bff4d8b
BC
2433
2434 /**
b1edfce0 2435 * DCT algorithm, see FF_DCT_* below
3bff4d8b 2436 * - encoding: Set by user.
b1edfce0 2437 * - decoding: unused
3bff4d8b 2438 */
b1edfce0
AK
2439 int dct_algo;
2440#define FF_DCT_AUTO 0
2441#define FF_DCT_FASTINT 1
2442#define FF_DCT_INT 2
2443#define FF_DCT_MMX 3
2444#define FF_DCT_ALTIVEC 5
2445#define FF_DCT_FAAN 6
3bff4d8b
BC
2446
2447 /**
b1edfce0 2448 * IDCT algorithm, see FF_IDCT_* below.
3bff4d8b 2449 * - encoding: Set by user.
b1edfce0 2450 * - decoding: Set by user.
3bff4d8b 2451 */
b1edfce0
AK
2452 int idct_algo;
2453#define FF_IDCT_AUTO 0
2454#define FF_IDCT_INT 1
2455#define FF_IDCT_SIMPLE 2
2456#define FF_IDCT_SIMPLEMMX 3
b1edfce0
AK
2457#define FF_IDCT_ARM 7
2458#define FF_IDCT_ALTIVEC 8
2459#define FF_IDCT_SH4 9
2460#define FF_IDCT_SIMPLEARM 10
b1edfce0
AK
2461#define FF_IDCT_IPP 13
2462#define FF_IDCT_XVIDMMX 14
b1edfce0
AK
2463#define FF_IDCT_SIMPLEARMV5TE 16
2464#define FF_IDCT_SIMPLEARMV6 17
2465#define FF_IDCT_SIMPLEVIS 18
b1edfce0 2466#define FF_IDCT_FAAN 20
b1edfce0 2467#define FF_IDCT_SIMPLENEON 22
c7f7bfc9 2468#if FF_API_ARCH_ALPHA
b1edfce0 2469#define FF_IDCT_SIMPLEALPHA 23
c7f7bfc9 2470#endif
40e5d31b 2471
b1edfce0
AK
2472 /**
2473 * bits per sample/pixel from the demuxer (needed for huffyuv).
2474 * - encoding: Set by libavcodec.
2475 * - decoding: Set by user.
2476 */
2477 int bits_per_coded_sample;
2478
2479 /**
2480 * Bits per sample/pixel of internal libavcodec pixel/sample format.
2481 * - encoding: set by user.
2482 * - decoding: set by libavcodec.
2483 */
2484 int bits_per_raw_sample;
3797c74b 2485
803d21f3 2486#if FF_API_LOWRES
3797c74b 2487 /**
b1edfce0
AK
2488 * low resolution decoding, 1-> 1/2 size, 2->1/4 size
2489 * - encoding: unused
2490 * - decoding: Set by user.
803d21f3
AK
2491 *
2492 * @deprecated use decoder private options instead
3797c74b 2493 */
2bcbd984 2494 attribute_deprecated int lowres;
803d21f3 2495#endif
1aea7018
GB
2496
2497 /**
b1edfce0
AK
2498 * the picture in the bitstream
2499 * - encoding: Set by libavcodec.
2ff302cb 2500 * - decoding: unused
1aea7018 2501 */
b1edfce0 2502 AVFrame *coded_frame;
4ee6a5c1
MN
2503
2504 /**
b1edfce0
AK
2505 * thread count
2506 * is used to decide how many independent tasks should be passed to execute()
2507 * - encoding: Set by user.
2508 * - decoding: Set by user.
4ee6a5c1 2509 */
b1edfce0 2510 int thread_count;
4ee6a5c1
MN
2511
2512 /**
b1edfce0
AK
2513 * Which multithreading methods to use.
2514 * Use of FF_THREAD_FRAME will increase decoding delay by one frame per thread,
2515 * so clients which cannot provide future frames should not use it.
2516 *
2517 * - encoding: Set by user, otherwise the default is used.
2518 * - decoding: Set by user, otherwise the default is used.
4ee6a5c1 2519 */
b1edfce0
AK
2520 int thread_type;
2521#define FF_THREAD_FRAME 1 ///< Decode more than one frame at once
2522#define FF_THREAD_SLICE 2 ///< Decode more than one part of a single frame at once
4ee6a5c1
MN
2523
2524 /**
b1edfce0
AK
2525 * Which multithreading methods are in use by the codec.
2526 * - encoding: Set by libavcodec.
2527 * - decoding: Set by libavcodec.
4ee6a5c1 2528 */
b1edfce0 2529 int active_thread_type;
4ee6a5c1
MN
2530
2531 /**
b1edfce0 2532 * Set by the client if its custom get_buffer() callback can be called
ad027866 2533 * synchronously from another thread, which allows faster multithreaded decoding.
b1edfce0
AK
2534 * draw_horiz_band() will be called from other threads regardless of this setting.
2535 * Ignored if the default get_buffer() is used.
2536 * - encoding: Set by user.
2537 * - decoding: Set by user.
4ee6a5c1 2538 */
b1edfce0 2539 int thread_safe_callbacks;
580a7465
DC
2540
2541 /**
b1edfce0
AK
2542 * The codec may call this to execute several independent things.
2543 * It will return only after finishing all tasks.
2544 * The user may replace this with some multithreaded implementation,
2545 * the default implementation will execute the parts serially.
2546 * @param count the number of things to execute
2547 * - encoding: Set by libavcodec, user can override.
2548 * - decoding: Set by libavcodec, user can override.
580a7465 2549 */
b1edfce0 2550 int (*execute)(struct AVCodecContext *c, int (*func)(struct AVCodecContext *c2, void *arg), void *arg2, int *ret, int count, int size);
8d23a86f
RD
2551
2552 /**
2553 * The codec may call this to execute several independent things.
2554 * It will return only after finishing all tasks.
2555 * The user may replace this with some multithreaded implementation,
2556 * the default implementation will execute the parts serially.
2557 * Also see avcodec_thread_init and e.g. the --enable-pthread configure option.
2558 * @param c context passed also to func
2559 * @param count the number of things to execute
2560 * @param arg2 argument passed unchanged to func
2561 * @param ret return values of executed functions, must have space for "count" values. May be NULL.
2562 * @param func function that will be called count times, with jobnr from 0 to count-1.
2563 * threadnr will be in the range 0 to c->thread_count-1 < MAX_THREADS and so that no
2564 * two instances of func executing at the same time will have the same threadnr.
2565 * @return always 0 currently, but code should handle a future improvement where when any call to func
2566 * returns < 0 no further calls to func may be done and < 0 is returned.
2567 * - encoding: Set by libavcodec, user can override.
2568 * - decoding: Set by libavcodec, user can override.
2569 */
2570 int (*execute2)(struct AVCodecContext *c, int (*func)(struct AVCodecContext *c2, void *arg, int jobnr, int threadnr), void *arg2, int *ret, int count);
096c87f6 2571
38ecc370 2572#if FF_API_THREAD_OPAQUE
b1edfce0 2573 /**
38ecc370 2574 * @deprecated this field should not be used from outside of lavc
b1edfce0 2575 */
38ecc370 2576 attribute_deprecated
b1edfce0 2577 void *thread_opaque;
38ecc370 2578#endif
23940f14 2579
2aa72ecc 2580 /**
b1edfce0
AK
2581 * noise vs. sse weight for the nsse comparsion function
2582 * - encoding: Set by user.
2aa72ecc
JZ
2583 * - decoding: unused
2584 */
b1edfce0 2585 int nsse_weight;
cb2c971d
AJ
2586
2587 /**
b1edfce0
AK
2588 * profile
2589 * - encoding: Set by user.
2590 * - decoding: Set by libavcodec.
cb2c971d 2591 */
b1edfce0
AK
2592 int profile;
2593#define FF_PROFILE_UNKNOWN -99
2594#define FF_PROFILE_RESERVED -100
2595
2596#define FF_PROFILE_AAC_MAIN 0
2597#define FF_PROFILE_AAC_LOW 1
2598#define FF_PROFILE_AAC_SSR 2
2599#define FF_PROFILE_AAC_LTP 3
372597e5
MS
2600#define FF_PROFILE_AAC_HE 4
2601#define FF_PROFILE_AAC_HE_V2 28
2602#define FF_PROFILE_AAC_LD 22
2603#define FF_PROFILE_AAC_ELD 38
95d52464
KK
2604#define FF_PROFILE_MPEG2_AAC_LOW 128
2605#define FF_PROFILE_MPEG2_AAC_HE 131
b1edfce0
AK
2606
2607#define FF_PROFILE_DTS 20
2608#define FF_PROFILE_DTS_ES 30
2609#define FF_PROFILE_DTS_96_24 40
2610#define FF_PROFILE_DTS_HD_HRA 50
2611#define FF_PROFILE_DTS_HD_MA 60
2612
2613#define FF_PROFILE_MPEG2_422 0
2614#define FF_PROFILE_MPEG2_HIGH 1
2615#define FF_PROFILE_MPEG2_SS 2
2616#define FF_PROFILE_MPEG2_SNR_SCALABLE 3
2617#define FF_PROFILE_MPEG2_MAIN 4
2618#define FF_PROFILE_MPEG2_SIMPLE 5
2619
2620#define FF_PROFILE_H264_CONSTRAINED (1<<9) // 8+1; constraint_set1_flag
2621#define FF_PROFILE_H264_INTRA (1<<11) // 8+3; constraint_set3_flag
2622
2623#define FF_PROFILE_H264_BASELINE 66
2624#define FF_PROFILE_H264_CONSTRAINED_BASELINE (66|FF_PROFILE_H264_CONSTRAINED)
2625#define FF_PROFILE_H264_MAIN 77
2626#define FF_PROFILE_H264_EXTENDED 88
2627#define FF_PROFILE_H264_HIGH 100
2628#define FF_PROFILE_H264_HIGH_10 110
2629#define FF_PROFILE_H264_HIGH_10_INTRA (110|FF_PROFILE_H264_INTRA)
2630#define FF_PROFILE_H264_HIGH_422 122
2631#define FF_PROFILE_H264_HIGH_422_INTRA (122|FF_PROFILE_H264_INTRA)
2632#define FF_PROFILE_H264_HIGH_444 144
2633#define FF_PROFILE_H264_HIGH_444_PREDICTIVE 244
2634#define FF_PROFILE_H264_HIGH_444_INTRA (244|FF_PROFILE_H264_INTRA)
2635#define FF_PROFILE_H264_CAVLC_444 44
2636
2637#define FF_PROFILE_VC1_SIMPLE 0
2638#define FF_PROFILE_VC1_MAIN 1
2639#define FF_PROFILE_VC1_COMPLEX 2
2640#define FF_PROFILE_VC1_ADVANCED 3
2641
2642#define FF_PROFILE_MPEG4_SIMPLE 0
2643#define FF_PROFILE_MPEG4_SIMPLE_SCALABLE 1
2644#define FF_PROFILE_MPEG4_CORE 2
2645#define FF_PROFILE_MPEG4_MAIN 3
2646#define FF_PROFILE_MPEG4_N_BIT 4
2647#define FF_PROFILE_MPEG4_SCALABLE_TEXTURE 5
2648#define FF_PROFILE_MPEG4_SIMPLE_FACE_ANIMATION 6
2649#define FF_PROFILE_MPEG4_BASIC_ANIMATED_TEXTURE 7
2650#define FF_PROFILE_MPEG4_HYBRID 8
2651#define FF_PROFILE_MPEG4_ADVANCED_REAL_TIME 9
2652#define FF_PROFILE_MPEG4_CORE_SCALABLE 10
2653#define FF_PROFILE_MPEG4_ADVANCED_CODING 11
2654#define FF_PROFILE_MPEG4_ADVANCED_CORE 12
2655#define FF_PROFILE_MPEG4_ADVANCED_SCALABLE_TEXTURE 13
2656#define FF_PROFILE_MPEG4_SIMPLE_STUDIO 14
2657#define FF_PROFILE_MPEG4_ADVANCED_SIMPLE 15
393cbb96 2658
c81a7063
NB
2659#define FF_PROFILE_JPEG2000_CSTREAM_RESTRICTION_0 0
2660#define FF_PROFILE_JPEG2000_CSTREAM_RESTRICTION_1 1
2661#define FF_PROFILE_JPEG2000_CSTREAM_NO_RESTRICTION 2
2662#define FF_PROFILE_JPEG2000_DCINEMA_2K 3
2663#define FF_PROFILE_JPEG2000_DCINEMA_4K 4
2664
393cbb96 2665 /**
b1edfce0
AK
2666 * level
2667 * - encoding: Set by user.
2668 * - decoding: Set by libavcodec.
393cbb96 2669 */
b1edfce0
AK
2670 int level;
2671#define FF_LEVEL_UNKNOWN -99
37b00b47 2672
37b00b47 2673 /**
37b00b47 2674 *
b1edfce0
AK
2675 * - encoding: unused
2676 * - decoding: Set by user.
37b00b47 2677 */
b1edfce0 2678 enum AVDiscard skip_loop_filter;
37b00b47
AS
2679
2680 /**
b1edfce0
AK
2681 *
2682 * - encoding: unused
2683 * - decoding: Set by user.
37b00b47 2684 */
b1edfce0 2685 enum AVDiscard skip_idct;
37b00b47
AS
2686
2687 /**
b1edfce0
AK
2688 *
2689 * - encoding: unused
37b00b47
AS
2690 * - decoding: Set by user.
2691 */
b1edfce0 2692 enum AVDiscard skip_frame;
55bad0c6
CM
2693
2694 /**
b1edfce0
AK
2695 * Header containing style information for text subtitles.
2696 * For SUBTITLE_ASS subtitle type, it should contain the whole ASS
2697 * [Script Info] and [V4+ Styles] section, plus the [Events] line and
2698 * the Format line following. It shouldn't include any Dialogue line.
2699 * - encoding: Set/allocated/freed by user (before avcodec_open2())
2700 * - decoding: Set/allocated/freed by libavcodec (by avcodec_open2())
55bad0c6 2701 */
b1edfce0
AK
2702 uint8_t *subtitle_header;
2703 int subtitle_header_size;
34b47d7c 2704
8941971a 2705#if FF_API_ERROR_RATE
34b47d7c 2706 /**
8941971a
AK
2707 * @deprecated use the 'error_rate' private AVOption of the mpegvideo
2708 * encoders
64150ff0 2709 */
8941971a 2710 attribute_deprecated
b1edfce0 2711 int error_rate;
8941971a 2712#endif
582f2311 2713
da6506c6 2714#if FF_API_CODEC_PKT
582f2311 2715 /**
da6506c6 2716 * @deprecated this field is not supposed to be accessed from outside lavc
582f2311 2717 */
da6506c6 2718 attribute_deprecated
b1edfce0 2719 AVPacket *pkt;
da6506c6 2720#endif
f3a29b75
JR
2721
2722 /**
b1edfce0
AK
2723 * VBV delay coded in the last frame (in periods of a 27 MHz clock).
2724 * Used for compliant TS muxing.
2725 * - encoding: Set by libavcodec.
2726 * - decoding: unused.
4bf3c8f2 2727 */
b1edfce0 2728 uint64_t vbv_delay;
de6d9b64
FB
2729} AVCodecContext;
2730
64863965 2731/**
060ec0a8
AH
2732 * AVProfile.
2733 */
2734typedef struct AVProfile {
2735 int profile;
2736 const char *name; ///< short name for the profile
2737} AVProfile;
2738
84626b36
AK
2739typedef struct AVCodecDefault AVCodecDefault;
2740
466b39ef
AK
2741struct AVSubtitle;
2742
060ec0a8 2743/**
64863965
MN
2744 * AVCodec.
2745 */
de6d9b64 2746typedef struct AVCodec {
6b0cdb6e
NG
2747 /**
2748 * Name of the codec implementation.
2749 * The name is globally unique among encoders and among decoders (but an
2750 * encoder and a decoder can share the same name).
2751 * This is the primary way to find a codec from the user perspective.
2752 */
18f77016 2753 const char *name;
f5f49a66
AK
2754 /**
2755 * Descriptive name for the codec, meant to be more human readable than name.
2756 * You should use the NULL_IF_CONFIG_SMALL() macro to define it.
2757 */
2758 const char *long_name;
72415b2a 2759 enum AVMediaType type;
36ef5369 2760 enum AVCodecID id;
a2d11246
MN
2761 /**
2762 * Codec capabilities.
2763 * see CODEC_CAP_*
2764 */
bf89e6b1 2765 int capabilities;
716e31ea 2766 const AVRational *supported_framerates; ///< array of supported framerates, or NULL if any, array is terminated by {0,0}
716d413c 2767 const enum AVPixelFormat *pix_fmts; ///< array of supported pixel formats, or NULL if unknown, array is terminated by -1
3ade5d56 2768 const int *supported_samplerates; ///< array of supported audio samplerates, or NULL if unknown, array is terminated by 0
5d6e4c16 2769 const enum AVSampleFormat *sample_fmts; ///< array of supported sample formats, or NULL if unknown, array is terminated by -1
cc276c85 2770 const uint64_t *channel_layouts; ///< array of support channel layouts, or NULL if unknown. array is terminated by 0
451606f7 2771#if FF_API_LOWRES
2bcbd984 2772 attribute_deprecated uint8_t max_lowres; ///< maximum value for lowres supported by the decoder
451606f7 2773#endif
567ad0e3 2774 const AVClass *priv_class; ///< AVClass for the private context
060ec0a8 2775 const AVProfile *profiles; ///< array of recognized profiles, or NULL if unknown, array is terminated by {FF_PROFILE_UNKNOWN}
37b00b47 2776
f5f49a66
AK
2777 /*****************************************************************
2778 * No fields below this line are part of the public API. They
2779 * may not be used outside of libavcodec and can be changed and
2780 * removed at will.
2781 * New public fields should be added right above.
2782 *****************************************************************
2783 */
2784 int priv_data_size;
2785 struct AVCodec *next;
37b00b47 2786 /**
21a19b79 2787 * @name Frame-level threading support functions
37b00b47
AS
2788 * @{
2789 */
2790 /**
2791 * If defined, called on thread contexts when they are created.
2792 * If the codec allocates writable tables in init(), re-allocate them here.
2793 * priv_data will be set to a copy of the original.
2794 */
2795 int (*init_thread_copy)(AVCodecContext *);
2796 /**
2797 * Copy necessary context variables from a previous thread context to the current one.
2798 * If not defined, the next thread will start automatically; otherwise, the codec
2799 * must call ff_thread_finish_setup().
2800 *
2801 * dst and src will (rarely) point to the same context, in which case memcpy should be skipped.
2802 */
2803 int (*update_thread_context)(AVCodecContext *dst, const AVCodecContext *src);
2804 /** @} */
84626b36
AK
2805
2806 /**
2807 * Private codec-specific defaults.
2808 */
2809 const AVCodecDefault *defaults;
d97efd7f
AK
2810
2811 /**
2812 * Initialize codec static data, called from avcodec_register().
2813 */
2814 void (*init_static_data)(struct AVCodec *codec);
b2c75b6e 2815
f5f49a66 2816 int (*init)(AVCodecContext *);
466b39ef
AK
2817 int (*encode_sub)(AVCodecContext *, uint8_t *buf, int buf_size,
2818 const struct AVSubtitle *sub);
b2c75b6e
JR
2819 /**
2820 * Encode data to an AVPacket.
2821 *
2822 * @param avctx codec context
2823 * @param avpkt output AVPacket (may contain a user-provided buffer)
2824 * @param[in] frame AVFrame containing the raw data to be encoded
2825 * @param[out] got_packet_ptr encoder sets to 0 or 1 to indicate that a
2826 * non-empty packet was returned in avpkt.
2827 * @return 0 on success, negative error code on failure
2828 */
2829 int (*encode2)(AVCodecContext *avctx, AVPacket *avpkt, const AVFrame *frame,
2830 int *got_packet_ptr);
f5f49a66
AK
2831 int (*decode)(AVCodecContext *, void *outdata, int *outdata_size, AVPacket *avpkt);
2832 int (*close)(AVCodecContext *);
2833 /**
2834 * Flush buffers.
2835 * Will be called when seeking
2836 */
2837 void (*flush)(AVCodecContext *);
de6d9b64
FB
2838} AVCodec;
2839
97d96aaa 2840/**
40e5d31b
GB
2841 * AVHWAccel.
2842 */
2843typedef struct AVHWAccel {
2844 /**
2845 * Name of the hardware accelerated codec.
2846 * The name is globally unique among encoders and among decoders (but an
2847 * encoder and a decoder can share the same name).
2848 */
2849 const char *name;
2850
2851 /**
2852 * Type of codec implemented by the hardware accelerator.
2853 *
72415b2a 2854 * See AVMEDIA_TYPE_xxx
40e5d31b 2855 */
72415b2a 2856 enum AVMediaType type;
40e5d31b
GB
2857
2858 /**
2859 * Codec implemented by the hardware accelerator.
2860 *
36ef5369 2861 * See AV_CODEC_ID_xxx
40e5d31b 2862 */
36ef5369 2863 enum AVCodecID id;
40e5d31b
GB
2864
2865 /**
2866 * Supported pixel format.
2867 *
2868 * Only hardware accelerated formats are supported here.
2869 */
716d413c 2870 enum AVPixelFormat pix_fmt;
40e5d31b
GB
2871
2872 /**
2873 * Hardware accelerated codec capabilities.
2874 * see FF_HWACCEL_CODEC_CAP_*
2875 */
2876 int capabilities;
2877
2878 struct AVHWAccel *next;
2879
2880 /**
2881 * Called at the beginning of each frame or field picture.
2882 *
2883 * Meaningful frame information (codec specific) is guaranteed to
2884 * be parsed at this point. This function is mandatory.
2885 *
bf7e799c 2886 * Note that buf can be NULL along with buf_size set to 0.
40e5d31b
GB
2887 * Otherwise, this means the whole frame is available at this point.
2888 *
2889 * @param avctx the codec context
2890 * @param buf the frame data buffer base
2891 * @param buf_size the size of the frame in bytes
2892 * @return zero if successful, a negative value otherwise
2893 */
2894 int (*start_frame)(AVCodecContext *avctx, const uint8_t *buf, uint32_t buf_size);
2895
2896 /**
2897 * Callback for each slice.
2898 *
2899 * Meaningful slice information (codec specific) is guaranteed to
2900 * be parsed at this point. This function is mandatory.
2901 *
2902 * @param avctx the codec context
2903 * @param buf the slice data buffer base
2904 * @param buf_size the size of the slice in bytes
2905 * @return zero if successful, a negative value otherwise
2906 */
2907 int (*decode_slice)(AVCodecContext *avctx, const uint8_t *buf, uint32_t buf_size);
2908
2909 /**
2910 * Called at the end of each frame or field picture.
2911 *
2912 * The whole picture is parsed at this point and can now be sent
2913 * to the hardware accelerator. This function is mandatory.
2914 *
2915 * @param avctx the codec context
2916 * @return zero if successful, a negative value otherwise
2917 */
2918 int (*end_frame)(AVCodecContext *avctx);
68e5d523
GB
2919
2920 /**
2921 * Size of HW accelerator private data.
2922 *
cd823ff9
GB
2923 * Private data is allocated with av_mallocz() before
2924 * AVCodecContext.get_buffer() and deallocated after
2925 * AVCodecContext.release_buffer().
68e5d523
GB
2926 */
2927 int priv_data_size;
40e5d31b
GB
2928} AVHWAccel;
2929
2930/**
6aadfbda
AK
2931 * @defgroup lavc_picture AVPicture
2932 *
2933 * Functions for working with AVPicture
2934 * @{
2935 */
2936
2937/**
d7425f59
MN
2938 * four components are given, that's all.
2939 * the last component is alpha
2940 */
de6d9b64 2941typedef struct AVPicture {
560f773c
JR
2942 uint8_t *data[AV_NUM_DATA_POINTERS];
2943 int linesize[AV_NUM_DATA_POINTERS]; ///< number of bytes per line
de6d9b64
FB
2944} AVPicture;
2945
6aadfbda
AK
2946/**
2947 * @}
2948 */
2949
63e4c8a6
AK
2950#define AVPALETTE_SIZE 1024
2951#define AVPALETTE_COUNT 256
ba118447 2952
c66216ed
MN
2953enum AVSubtitleType {
2954 SUBTITLE_NONE,
2955
2956 SUBTITLE_BITMAP, ///< A bitmap, pict will be set
2957
2958 /**
2959 * Plain text, the text field must be set by the decoder and is
2960 * authoritative. ass and pict fields may contain approximations.
2961 */
2962 SUBTITLE_TEXT,
2963
2964 /**
2965 * Formatted text, the ass field must be set by the decoder and is
2966 * authoritative. pict and text fields may contain approximations.
2967 */
2968 SUBTITLE_ASS,
2969};
2970
85f67c48
JS
2971#define AV_SUBTITLE_FLAG_FORCED 0x00000001
2972
c6ec28b1 2973typedef struct AVSubtitleRect {
ebc466bb
MN
2974 int x; ///< top left corner of pict, undefined when pict is not set
2975 int y; ///< top left corner of pict, undefined when pict is not set
2976 int w; ///< width of pict, undefined when pict is not set
2977 int h; ///< height of pict, undefined when pict is not set
2978 int nb_colors; ///< number of colors in pict, undefined when pict is not set
25b4c651
MN
2979
2980 /**
2981 * data+linesize for the bitmap of this subtitle.
2982 * can be set for text/ass as well once they where rendered
2983 */
2984 AVPicture pict;
f656106f
MN
2985 enum AVSubtitleType type;
2986
2987 char *text; ///< 0 terminated plain UTF-8 text
2988
2989 /**
2990 * 0 terminated ASS/SSA compatible event line.
2991 * The pressentation of this is unaffected by the other values in this
2992 * struct.
2993 */
2994 char *ass;
85f67c48 2995 int flags;
c6ec28b1
MN
2996} AVSubtitleRect;
2997
2998typedef struct AVSubtitle {
2999 uint16_t format; /* 0 = graphics */
3000 uint32_t start_display_time; /* relative to packet pts, in ms */
3001 uint32_t end_display_time; /* relative to packet pts, in ms */
ebc466bb 3002 unsigned num_rects;
db4fac64 3003 AVSubtitleRect **rects;
4bbe788a 3004 int64_t pts; ///< Same as packet pts, in AV_TIME_BASE
240c1657
FB
3005} AVSubtitle;
3006
294b3a50
AK
3007/**
3008 * If c is NULL, returns the first registered codec,
3009 * if c is non-NULL, returns the next registered codec after c,
3010 * or NULL if c is the last one.
3011 */
0a0f19b5 3012AVCodec *av_codec_next(const AVCodec *c);
294b3a50
AK
3013
3014/**
3015 * Return the LIBAVCODEC_VERSION_INT constant.
3016 */
3017unsigned avcodec_version(void);
3018
3019/**
3020 * Return the libavcodec build-time configuration.
3021 */
3022const char *avcodec_configuration(void);
3023
3024/**
3025 * Return the libavcodec license.
3026 */
3027const char *avcodec_license(void);
3028
3029/**
3030 * Register the codec codec and initialize libavcodec.
3031 *
3032 * @warning either this function or avcodec_register_all() must be called
3033 * before any other libavcodec functions.
3034 *
3035 * @see avcodec_register_all()
3036 */
3037void avcodec_register(AVCodec *codec);
3038
3039/**
3040 * Register all the codecs, parsers and bitstream filters which were enabled at
3041 * configuration time. If you do not call this function you can select exactly
3042 * which formats you want to support, by using the individual registration
3043 * functions.
3044 *
3045 * @see avcodec_register
3046 * @see av_register_codec_parser
3047 * @see av_register_bitstream_filter
3048 */
3049void avcodec_register_all(void);
3050
3051/**
3052 * Allocate an AVCodecContext and set its fields to default values. The
3053 * resulting struct can be deallocated by calling avcodec_close() on it followed
3054 * by av_free().
3055 *
3056 * @param codec if non-NULL, allocate private data and initialize defaults
3057 * for the given codec. It is illegal to then call avcodec_open2()
3058 * with a different codec.
3059 * If NULL, then the codec-specific defaults won't be initialized,
3060 * which may result in suboptimal default settings (this is
3061 * important mainly for encoders, e.g. libx264).
3062 *
3063 * @return An AVCodecContext filled with default values or NULL on failure.
3064 * @see avcodec_get_context_defaults
3065 */
0a0f19b5 3066AVCodecContext *avcodec_alloc_context3(const AVCodec *codec);
294b3a50
AK
3067
3068/**
3069 * Set the fields of the given AVCodecContext to default values corresponding
3070 * to the given codec (defaults may be codec-dependent).
3071 *
3072 * Do not call this function if a non-NULL codec has been passed
3073 * to avcodec_alloc_context3() that allocated this AVCodecContext.
3074 * If codec is non-NULL, it is illegal to call avcodec_open2() with a
3075 * different codec on this AVCodecContext.
3076 */
0a0f19b5 3077int avcodec_get_context_defaults3(AVCodecContext *s, const AVCodec *codec);
294b3a50
AK
3078
3079/**
3080 * Get the AVClass for AVCodecContext. It can be used in combination with
3081 * AV_OPT_SEARCH_FAKE_OBJ for examining options.
3082 *
3083 * @see av_opt_find().
3084 */
3085const AVClass *avcodec_get_class(void);
3086
3087/**
3088 * Copy the settings of the source AVCodecContext into the destination
3089 * AVCodecContext. The resulting destination codec context will be
3090 * unopened, i.e. you are required to call avcodec_open2() before you
3091 * can use this AVCodecContext to decode/encode video/audio data.
3092 *
3093 * @param dest target codec context, should be initialized with
3094 * avcodec_alloc_context3(), but otherwise uninitialized
3095 * @param src source codec context
3096 * @return AVERROR() on error (e.g. memory allocation error), 0 on success
3097 */
3098int avcodec_copy_context(AVCodecContext *dest, const AVCodecContext *src);
3099
b9fb59d2 3100#if FF_API_AVFRAME_LAVC
294b3a50 3101/**
b9fb59d2 3102 * @deprecated use av_frame_alloc()
294b3a50 3103 */
b9fb59d2 3104attribute_deprecated
294b3a50
AK
3105AVFrame *avcodec_alloc_frame(void);
3106
3107/**
3108 * Set the fields of the given AVFrame to default values.
3109 *
a83499b1 3110 * @param frame The AVFrame of which the fields should be set to default values.
d7b3ee9a
AK
3111 *
3112 * @deprecated use av_frame_unref()
294b3a50 3113 */
d7b3ee9a 3114attribute_deprecated
a83499b1 3115void avcodec_get_frame_defaults(AVFrame *frame);
294b3a50
AK
3116
3117/**
a42aadab
AK
3118 * Free the frame and any dynamically allocated objects in it,
3119 * e.g. extended_data.
3120 *
3121 * @param frame frame to be freed. The pointer will be set to NULL.
3122 *
3123 * @warning this function does NOT free the data buffers themselves
3124 * (it does not know how, since they might have been allocated with
3125 * a custom get_buffer()).
94313562
AK
3126 *
3127 * @deprecated use av_frame_free()
a42aadab 3128 */
94313562 3129attribute_deprecated
a42aadab 3130void avcodec_free_frame(AVFrame **frame);
94313562 3131#endif
a42aadab
AK
3132
3133/**
294b3a50
AK
3134 * Initialize the AVCodecContext to use the given AVCodec. Prior to using this
3135 * function the context has to be allocated with avcodec_alloc_context3().
3136 *
3137 * The functions avcodec_find_decoder_by_name(), avcodec_find_encoder_by_name(),
3138 * avcodec_find_decoder() and avcodec_find_encoder() provide an easy way for
3139 * retrieving a codec.
3140 *
3141 * @warning This function is not thread safe!
3142 *
3143 * @code
3144 * avcodec_register_all();
3145 * av_dict_set(&opts, "b", "2.5M", 0);
104e10fb 3146 * codec = avcodec_find_decoder(AV_CODEC_ID_H264);
294b3a50
AK
3147 * if (!codec)
3148 * exit(1);
3149 *
3150 * context = avcodec_alloc_context3(codec);
3151 *
3152 * if (avcodec_open2(context, codec, opts) < 0)
3153 * exit(1);
3154 * @endcode
3155 *
3156 * @param avctx The context to initialize.
3157 * @param codec The codec to open this context for. If a non-NULL codec has been
3158 * previously passed to avcodec_alloc_context3() or
3159 * avcodec_get_context_defaults3() for this context, then this
3160 * parameter MUST be either NULL or equal to the previously passed
3161 * codec.
3162 * @param options A dictionary filled with AVCodecContext and codec-private options.
3163 * On return this object will be filled with options that were not found.
3164 *
3165 * @return zero on success, a negative value on error
3166 * @see avcodec_alloc_context3(), avcodec_find_decoder(), avcodec_find_encoder(),
3167 * av_dict_set(), av_opt_find().
3168 */
0a0f19b5 3169int avcodec_open2(AVCodecContext *avctx, const AVCodec *codec, AVDictionary **options);
294b3a50
AK
3170
3171/**
3172 * Close a given AVCodecContext and free all the data associated with it
3173 * (but not the AVCodecContext itself).
3174 *
3175 * Calling this function on an AVCodecContext that hasn't been opened will free
3176 * the codec-specific data allocated in avcodec_alloc_context3() /
3177 * avcodec_get_context_defaults3() with a non-NULL codec. Subsequent calls will
3178 * do nothing.
3179 */
3180int avcodec_close(AVCodecContext *avctx);
3181
3182/**
3183 * Free all allocated data in the given subtitle struct.
3184 *
3185 * @param sub AVSubtitle to free.
3186 */
3187void avsubtitle_free(AVSubtitle *sub);
3188
3189/**
3190 * @}
3191 */
3192
30f3f625
AK
3193/**
3194 * @addtogroup lavc_packet
3195 * @{
3196 */
cdd8930e 3197
1afddbe5 3198#if FF_API_DESTRUCT_PACKET
80d403fc 3199/**
cdd8930e 3200 * Default packet destructor.
1afddbe5 3201 * @deprecated use the AVBuffer API instead
cdd8930e 3202 */
1afddbe5 3203attribute_deprecated
cdd8930e 3204void av_destruct_packet(AVPacket *pkt);
1afddbe5 3205#endif
cdd8930e
TB
3206
3207/**
3208 * Initialize optional fields of a packet with default values.
3209 *
7146177d
SE
3210 * Note, this does not touch the data and size members, which have to be
3211 * initialized separately.
3212 *
cdd8930e
TB
3213 * @param pkt packet
3214 */
3215void av_init_packet(AVPacket *pkt);
3216
3217/**
3218 * Allocate the payload of a packet and initialize its fields with
3219 * default values.
3220 *
3221 * @param pkt packet
3222 * @param size wanted payload size
3223 * @return 0 if OK, AVERROR_xxx otherwise
3224 */
3225int av_new_packet(AVPacket *pkt, int size);
3226
3227/**
feb993e5
RD
3228 * Reduce packet size, correctly zeroing padding
3229 *
3230 * @param pkt packet
3231 * @param size new size
3232 */
3233void av_shrink_packet(AVPacket *pkt, int size);
3234
3235/**
a08d918e
RD
3236 * Increase packet size, correctly zeroing padding
3237 *
3238 * @param pkt packet
3239 * @param grow_by number of bytes by which to increase the size of the packet
3240 */
3241int av_grow_packet(AVPacket *pkt, int grow_by);
3242
3243/**
1afddbe5
AK
3244 * Initialize a reference-counted packet from av_malloc()ed data.
3245 *
3246 * @param pkt packet to be initialized. This function will set the data, size,
3247 * buf and destruct fields, all others are left untouched.
3248 * @param data Data allocated by av_malloc() to be used as packet data. If this
3249 * function returns successfully, the data is owned by the underlying AVBuffer.
3250 * The caller may not access the data through other means.
3251 * @param size size of data in bytes, without the padding. I.e. the full buffer
3252 * size is assumed to be size + FF_INPUT_BUFFER_PADDING_SIZE.
3253 *
3254 * @return 0 on success, a negative AVERROR on error
3255 */
3256int av_packet_from_data(AVPacket *pkt, uint8_t *data, int size);
3257
3258/**
cdd8930e
TB
3259 * @warning This is a hack - the packet memory allocation stuff is broken. The
3260 * packet is allocated if it was not really allocated.
3261 */
3262int av_dup_packet(AVPacket *pkt);
3263
3264/**
3265 * Free a packet.
3266 *
3267 * @param pkt packet to free
3268 */
ce1d9c85 3269void av_free_packet(AVPacket *pkt);
240c1657 3270
4de339e2
KS
3271/**
3272 * Allocate new information of a packet.
3273 *
3274 * @param pkt packet
3275 * @param type side information type
3276 * @param size side information size
3277 * @return pointer to fresh allocated data or NULL otherwise
3278 */
3279uint8_t* av_packet_new_side_data(AVPacket *pkt, enum AVPacketSideDataType type,
3280 int size);
3281
3282/**
442c1320
MS
3283 * Shrink the already allocated side data buffer
3284 *
3285 * @param pkt packet
3286 * @param type side information type
3287 * @param size new side information size
3288 * @return 0 on success, < 0 on failure
3289 */
3290int av_packet_shrink_side_data(AVPacket *pkt, enum AVPacketSideDataType type,
3291 int size);
3292
3293/**
4de339e2
KS
3294 * Get side information from packet.
3295 *
3296 * @param pkt packet
3297 * @param type desired side information type
3298 * @param size pointer for side information size to store (optional)
3299 * @return pointer to data if present or NULL otherwise
3300 */
3301uint8_t* av_packet_get_side_data(AVPacket *pkt, enum AVPacketSideDataType type,
3302 int *size);
3303
30f3f625 3304/**
5a9a9d4a
LB
3305 * Convenience function to free all the side data stored.
3306 * All the other fields stay untouched.
3307 *
3308 * @param pkt packet
3309 */
3310void av_packet_free_side_data(AVPacket *pkt);
3311
3312/**
3313 * Setup a new reference to the data described by a given packet
3314 *
3315 * If src is reference-counted, setup dst as a new reference to the
3316 * buffer in src. Otherwise allocate a new buffer in dst and copy the
3317 * data from src into it.