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