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