]> git.sesse.net Git - ffmpeg/blob - libavcodec/avcodec.h
Merge remote-tracking branch 'qatar/master'
[ffmpeg] / libavcodec / avcodec.h
1 /*
2  * copyright (c) 2001 Fabrice Bellard
3  *
4  * This file is part of FFmpeg.
5  *
6  * FFmpeg is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * FFmpeg is distributed in the hope that it will be useful,
12  * 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
17  * License along with FFmpeg; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19  */
20
21 #ifndef AVCODEC_AVCODEC_H
22 #define AVCODEC_AVCODEC_H
23
24 /**
25  * @file
26  * external API header
27  */
28
29 #include <errno.h>
30 #include "libavutil/samplefmt.h"
31 #include "libavutil/avutil.h"
32 #include "libavutil/cpu.h"
33 #include "libavutil/channel_layout.h"
34 #include "libavutil/dict.h"
35 #include "libavutil/log.h"
36 #include "libavutil/pixfmt.h"
37 #include "libavutil/rational.h"
38
39 #include "libavcodec/version.h"
40 /**
41  * @defgroup libavc Encoding/Decoding Library
42  * @{
43  *
44  * @defgroup lavc_decoding Decoding
45  * @{
46  * @}
47  *
48  * @defgroup lavc_encoding Encoding
49  * @{
50  * @}
51  *
52  * @defgroup lavc_codec Codecs
53  * @{
54  * @defgroup lavc_codec_native Native Codecs
55  * @{
56  * @}
57  * @defgroup lavc_codec_wrappers External library wrappers
58  * @{
59  * @}
60  * @defgroup lavc_codec_hwaccel Hardware Accelerators bridge
61  * @{
62  * @}
63  * @}
64  * @defgroup lavc_internal Internal
65  * @{
66  * @}
67  * @}
68  *
69  */
70
71 /**
72  * @defgroup lavc_core Core functions/structures.
73  * @ingroup libavc
74  *
75  * Basic definitions, functions for querying libavcodec capabilities,
76  * allocating core structures, etc.
77  * @{
78  */
79
80
81 /**
82  * Identify the syntax and semantics of the bitstream.
83  * The principle is roughly:
84  * Two decoders with the same ID can decode the same streams.
85  * Two encoders with the same ID can encode compatible streams.
86  * There may be slight deviations from the principle due to implementation
87  * details.
88  *
89  * If you add a codec ID to this list, add it so that
90  * 1. no value of a existing codec ID changes (that would break ABI),
91  * 2. Give it a value which when taken as ASCII is recognized uniquely by a human as this specific codec.
92  *    This ensures that 2 forks can independently add AVCodecIDs without producing conflicts.
93  *
94  * After adding new codec IDs, do not forget to add an entry to the codec
95  * descriptor list and bump libavcodec minor version.
96  */
97 enum AVCodecID {
98     AV_CODEC_ID_NONE,
99
100     /* video codecs */
101     AV_CODEC_ID_MPEG1VIDEO,
102     AV_CODEC_ID_MPEG2VIDEO, ///< preferred ID for MPEG-1/2 video decoding
103     AV_CODEC_ID_MPEG2VIDEO_XVMC,
104     AV_CODEC_ID_H261,
105     AV_CODEC_ID_H263,
106     AV_CODEC_ID_RV10,
107     AV_CODEC_ID_RV20,
108     AV_CODEC_ID_MJPEG,
109     AV_CODEC_ID_MJPEGB,
110     AV_CODEC_ID_LJPEG,
111     AV_CODEC_ID_SP5X,
112     AV_CODEC_ID_JPEGLS,
113     AV_CODEC_ID_MPEG4,
114     AV_CODEC_ID_RAWVIDEO,
115     AV_CODEC_ID_MSMPEG4V1,
116     AV_CODEC_ID_MSMPEG4V2,
117     AV_CODEC_ID_MSMPEG4V3,
118     AV_CODEC_ID_WMV1,
119     AV_CODEC_ID_WMV2,
120     AV_CODEC_ID_H263P,
121     AV_CODEC_ID_H263I,
122     AV_CODEC_ID_FLV1,
123     AV_CODEC_ID_SVQ1,
124     AV_CODEC_ID_SVQ3,
125     AV_CODEC_ID_DVVIDEO,
126     AV_CODEC_ID_HUFFYUV,
127     AV_CODEC_ID_CYUV,
128     AV_CODEC_ID_H264,
129     AV_CODEC_ID_INDEO3,
130     AV_CODEC_ID_VP3,
131     AV_CODEC_ID_THEORA,
132     AV_CODEC_ID_ASV1,
133     AV_CODEC_ID_ASV2,
134     AV_CODEC_ID_FFV1,
135     AV_CODEC_ID_4XM,
136     AV_CODEC_ID_VCR1,
137     AV_CODEC_ID_CLJR,
138     AV_CODEC_ID_MDEC,
139     AV_CODEC_ID_ROQ,
140     AV_CODEC_ID_INTERPLAY_VIDEO,
141     AV_CODEC_ID_XAN_WC3,
142     AV_CODEC_ID_XAN_WC4,
143     AV_CODEC_ID_RPZA,
144     AV_CODEC_ID_CINEPAK,
145     AV_CODEC_ID_WS_VQA,
146     AV_CODEC_ID_MSRLE,
147     AV_CODEC_ID_MSVIDEO1,
148     AV_CODEC_ID_IDCIN,
149     AV_CODEC_ID_8BPS,
150     AV_CODEC_ID_SMC,
151     AV_CODEC_ID_FLIC,
152     AV_CODEC_ID_TRUEMOTION1,
153     AV_CODEC_ID_VMDVIDEO,
154     AV_CODEC_ID_MSZH,
155     AV_CODEC_ID_ZLIB,
156     AV_CODEC_ID_QTRLE,
157     AV_CODEC_ID_SNOW,
158     AV_CODEC_ID_TSCC,
159     AV_CODEC_ID_ULTI,
160     AV_CODEC_ID_QDRAW,
161     AV_CODEC_ID_VIXL,
162     AV_CODEC_ID_QPEG,
163     AV_CODEC_ID_PNG,
164     AV_CODEC_ID_PPM,
165     AV_CODEC_ID_PBM,
166     AV_CODEC_ID_PGM,
167     AV_CODEC_ID_PGMYUV,
168     AV_CODEC_ID_PAM,
169     AV_CODEC_ID_FFVHUFF,
170     AV_CODEC_ID_RV30,
171     AV_CODEC_ID_RV40,
172     AV_CODEC_ID_VC1,
173     AV_CODEC_ID_WMV3,
174     AV_CODEC_ID_LOCO,
175     AV_CODEC_ID_WNV1,
176     AV_CODEC_ID_AASC,
177     AV_CODEC_ID_INDEO2,
178     AV_CODEC_ID_FRAPS,
179     AV_CODEC_ID_TRUEMOTION2,
180     AV_CODEC_ID_BMP,
181     AV_CODEC_ID_CSCD,
182     AV_CODEC_ID_MMVIDEO,
183     AV_CODEC_ID_ZMBV,
184     AV_CODEC_ID_AVS,
185     AV_CODEC_ID_SMACKVIDEO,
186     AV_CODEC_ID_NUV,
187     AV_CODEC_ID_KMVC,
188     AV_CODEC_ID_FLASHSV,
189     AV_CODEC_ID_CAVS,
190     AV_CODEC_ID_JPEG2000,
191     AV_CODEC_ID_VMNC,
192     AV_CODEC_ID_VP5,
193     AV_CODEC_ID_VP6,
194     AV_CODEC_ID_VP6F,
195     AV_CODEC_ID_TARGA,
196     AV_CODEC_ID_DSICINVIDEO,
197     AV_CODEC_ID_TIERTEXSEQVIDEO,
198     AV_CODEC_ID_TIFF,
199     AV_CODEC_ID_GIF,
200     AV_CODEC_ID_DXA,
201     AV_CODEC_ID_DNXHD,
202     AV_CODEC_ID_THP,
203     AV_CODEC_ID_SGI,
204     AV_CODEC_ID_C93,
205     AV_CODEC_ID_BETHSOFTVID,
206     AV_CODEC_ID_PTX,
207     AV_CODEC_ID_TXD,
208     AV_CODEC_ID_VP6A,
209     AV_CODEC_ID_AMV,
210     AV_CODEC_ID_VB,
211     AV_CODEC_ID_PCX,
212     AV_CODEC_ID_SUNRAST,
213     AV_CODEC_ID_INDEO4,
214     AV_CODEC_ID_INDEO5,
215     AV_CODEC_ID_MIMIC,
216     AV_CODEC_ID_RL2,
217     AV_CODEC_ID_ESCAPE124,
218     AV_CODEC_ID_DIRAC,
219     AV_CODEC_ID_BFI,
220     AV_CODEC_ID_CMV,
221     AV_CODEC_ID_MOTIONPIXELS,
222     AV_CODEC_ID_TGV,
223     AV_CODEC_ID_TGQ,
224     AV_CODEC_ID_TQI,
225     AV_CODEC_ID_AURA,
226     AV_CODEC_ID_AURA2,
227     AV_CODEC_ID_V210X,
228     AV_CODEC_ID_TMV,
229     AV_CODEC_ID_V210,
230     AV_CODEC_ID_DPX,
231     AV_CODEC_ID_MAD,
232     AV_CODEC_ID_FRWU,
233     AV_CODEC_ID_FLASHSV2,
234     AV_CODEC_ID_CDGRAPHICS,
235     AV_CODEC_ID_R210,
236     AV_CODEC_ID_ANM,
237     AV_CODEC_ID_BINKVIDEO,
238     AV_CODEC_ID_IFF_ILBM,
239     AV_CODEC_ID_IFF_BYTERUN1,
240     AV_CODEC_ID_KGV1,
241     AV_CODEC_ID_YOP,
242     AV_CODEC_ID_VP8,
243     AV_CODEC_ID_PICTOR,
244     AV_CODEC_ID_ANSI,
245     AV_CODEC_ID_A64_MULTI,
246     AV_CODEC_ID_A64_MULTI5,
247     AV_CODEC_ID_R10K,
248     AV_CODEC_ID_MXPEG,
249     AV_CODEC_ID_LAGARITH,
250     AV_CODEC_ID_PRORES,
251     AV_CODEC_ID_JV,
252     AV_CODEC_ID_DFA,
253     AV_CODEC_ID_WMV3IMAGE,
254     AV_CODEC_ID_VC1IMAGE,
255     AV_CODEC_ID_UTVIDEO,
256     AV_CODEC_ID_BMV_VIDEO,
257     AV_CODEC_ID_VBLE,
258     AV_CODEC_ID_DXTORY,
259     AV_CODEC_ID_V410,
260     AV_CODEC_ID_XWD,
261     AV_CODEC_ID_CDXL,
262     AV_CODEC_ID_XBM,
263     AV_CODEC_ID_ZEROCODEC,
264     AV_CODEC_ID_MSS1,
265     AV_CODEC_ID_MSA1,
266     AV_CODEC_ID_TSCC2,
267     AV_CODEC_ID_MTS2,
268     AV_CODEC_ID_CLLC,
269     AV_CODEC_ID_MSS2,
270     AV_CODEC_ID_Y41P       = MKBETAG('Y','4','1','P'),
271     AV_CODEC_ID_ESCAPE130  = MKBETAG('E','1','3','0'),
272     AV_CODEC_ID_EXR        = MKBETAG('0','E','X','R'),
273     AV_CODEC_ID_AVRP       = MKBETAG('A','V','R','P'),
274
275     AV_CODEC_ID_G2M        = MKBETAG( 0 ,'G','2','M'),
276     AV_CODEC_ID_AVUI       = MKBETAG('A','V','U','I'),
277     AV_CODEC_ID_AYUV       = MKBETAG('A','Y','U','V'),
278     AV_CODEC_ID_TARGA_Y216 = MKBETAG('T','2','1','6'),
279     AV_CODEC_ID_V308       = MKBETAG('V','3','0','8'),
280     AV_CODEC_ID_V408       = MKBETAG('V','4','0','8'),
281     AV_CODEC_ID_YUV4       = MKBETAG('Y','U','V','4'),
282     AV_CODEC_ID_SANM       = MKBETAG('S','A','N','M'),
283     AV_CODEC_ID_PAF_VIDEO  = MKBETAG('P','A','F','V'),
284     AV_CODEC_ID_AVRN       = MKBETAG('A','V','R','n'),
285     AV_CODEC_ID_CPIA       = MKBETAG('C','P','I','A'),
286     AV_CODEC_ID_XFACE      = MKBETAG('X','F','A','C'),
287
288     /* various PCM "codecs" */
289     AV_CODEC_ID_FIRST_AUDIO = 0x10000,     ///< A dummy id pointing at the start of audio codecs
290     AV_CODEC_ID_PCM_S16LE = 0x10000,
291     AV_CODEC_ID_PCM_S16BE,
292     AV_CODEC_ID_PCM_U16LE,
293     AV_CODEC_ID_PCM_U16BE,
294     AV_CODEC_ID_PCM_S8,
295     AV_CODEC_ID_PCM_U8,
296     AV_CODEC_ID_PCM_MULAW,
297     AV_CODEC_ID_PCM_ALAW,
298     AV_CODEC_ID_PCM_S32LE,
299     AV_CODEC_ID_PCM_S32BE,
300     AV_CODEC_ID_PCM_U32LE,
301     AV_CODEC_ID_PCM_U32BE,
302     AV_CODEC_ID_PCM_S24LE,
303     AV_CODEC_ID_PCM_S24BE,
304     AV_CODEC_ID_PCM_U24LE,
305     AV_CODEC_ID_PCM_U24BE,
306     AV_CODEC_ID_PCM_S24DAUD,
307     AV_CODEC_ID_PCM_ZORK,
308     AV_CODEC_ID_PCM_S16LE_PLANAR,
309     AV_CODEC_ID_PCM_DVD,
310     AV_CODEC_ID_PCM_F32BE,
311     AV_CODEC_ID_PCM_F32LE,
312     AV_CODEC_ID_PCM_F64BE,
313     AV_CODEC_ID_PCM_F64LE,
314     AV_CODEC_ID_PCM_BLURAY,
315     AV_CODEC_ID_PCM_LXF,
316     AV_CODEC_ID_S302M,
317     AV_CODEC_ID_PCM_S8_PLANAR,
318     AV_CODEC_ID_PCM_S24LE_PLANAR = MKBETAG(24,'P','S','P'),
319     AV_CODEC_ID_PCM_S32LE_PLANAR = MKBETAG(32,'P','S','P'),
320     AV_CODEC_ID_PCM_S16BE_PLANAR = MKBETAG('P','S','P',16),
321
322     /* various ADPCM codecs */
323     AV_CODEC_ID_ADPCM_IMA_QT = 0x11000,
324     AV_CODEC_ID_ADPCM_IMA_WAV,
325     AV_CODEC_ID_ADPCM_IMA_DK3,
326     AV_CODEC_ID_ADPCM_IMA_DK4,
327     AV_CODEC_ID_ADPCM_IMA_WS,
328     AV_CODEC_ID_ADPCM_IMA_SMJPEG,
329     AV_CODEC_ID_ADPCM_MS,
330     AV_CODEC_ID_ADPCM_4XM,
331     AV_CODEC_ID_ADPCM_XA,
332     AV_CODEC_ID_ADPCM_ADX,
333     AV_CODEC_ID_ADPCM_EA,
334     AV_CODEC_ID_ADPCM_G726,
335     AV_CODEC_ID_ADPCM_CT,
336     AV_CODEC_ID_ADPCM_SWF,
337     AV_CODEC_ID_ADPCM_YAMAHA,
338     AV_CODEC_ID_ADPCM_SBPRO_4,
339     AV_CODEC_ID_ADPCM_SBPRO_3,
340     AV_CODEC_ID_ADPCM_SBPRO_2,
341     AV_CODEC_ID_ADPCM_THP,
342     AV_CODEC_ID_ADPCM_IMA_AMV,
343     AV_CODEC_ID_ADPCM_EA_R1,
344     AV_CODEC_ID_ADPCM_EA_R3,
345     AV_CODEC_ID_ADPCM_EA_R2,
346     AV_CODEC_ID_ADPCM_IMA_EA_SEAD,
347     AV_CODEC_ID_ADPCM_IMA_EA_EACS,
348     AV_CODEC_ID_ADPCM_EA_XAS,
349     AV_CODEC_ID_ADPCM_EA_MAXIS_XA,
350     AV_CODEC_ID_ADPCM_IMA_ISS,
351     AV_CODEC_ID_ADPCM_G722,
352     AV_CODEC_ID_ADPCM_IMA_APC,
353     AV_CODEC_ID_VIMA       = MKBETAG('V','I','M','A'),
354
355     /* AMR */
356     AV_CODEC_ID_AMR_NB = 0x12000,
357     AV_CODEC_ID_AMR_WB,
358
359     /* RealAudio codecs*/
360     AV_CODEC_ID_RA_144 = 0x13000,
361     AV_CODEC_ID_RA_288,
362
363     /* various DPCM codecs */
364     AV_CODEC_ID_ROQ_DPCM = 0x14000,
365     AV_CODEC_ID_INTERPLAY_DPCM,
366     AV_CODEC_ID_XAN_DPCM,
367     AV_CODEC_ID_SOL_DPCM,
368
369     /* audio codecs */
370     AV_CODEC_ID_MP2 = 0x15000,
371     AV_CODEC_ID_MP3, ///< preferred ID for decoding MPEG audio layer 1, 2 or 3
372     AV_CODEC_ID_AAC,
373     AV_CODEC_ID_AC3,
374     AV_CODEC_ID_DTS,
375     AV_CODEC_ID_VORBIS,
376     AV_CODEC_ID_DVAUDIO,
377     AV_CODEC_ID_WMAV1,
378     AV_CODEC_ID_WMAV2,
379     AV_CODEC_ID_MACE3,
380     AV_CODEC_ID_MACE6,
381     AV_CODEC_ID_VMDAUDIO,
382     AV_CODEC_ID_FLAC,
383     AV_CODEC_ID_MP3ADU,
384     AV_CODEC_ID_MP3ON4,
385     AV_CODEC_ID_SHORTEN,
386     AV_CODEC_ID_ALAC,
387     AV_CODEC_ID_WESTWOOD_SND1,
388     AV_CODEC_ID_GSM, ///< as in Berlin toast format
389     AV_CODEC_ID_QDM2,
390     AV_CODEC_ID_COOK,
391     AV_CODEC_ID_TRUESPEECH,
392     AV_CODEC_ID_TTA,
393     AV_CODEC_ID_SMACKAUDIO,
394     AV_CODEC_ID_QCELP,
395     AV_CODEC_ID_WAVPACK,
396     AV_CODEC_ID_DSICINAUDIO,
397     AV_CODEC_ID_IMC,
398     AV_CODEC_ID_MUSEPACK7,
399     AV_CODEC_ID_MLP,
400     AV_CODEC_ID_GSM_MS, /* as found in WAV */
401     AV_CODEC_ID_ATRAC3,
402     AV_CODEC_ID_VOXWARE,
403     AV_CODEC_ID_APE,
404     AV_CODEC_ID_NELLYMOSER,
405     AV_CODEC_ID_MUSEPACK8,
406     AV_CODEC_ID_SPEEX,
407     AV_CODEC_ID_WMAVOICE,
408     AV_CODEC_ID_WMAPRO,
409     AV_CODEC_ID_WMALOSSLESS,
410     AV_CODEC_ID_ATRAC3P,
411     AV_CODEC_ID_EAC3,
412     AV_CODEC_ID_SIPR,
413     AV_CODEC_ID_MP1,
414     AV_CODEC_ID_TWINVQ,
415     AV_CODEC_ID_TRUEHD,
416     AV_CODEC_ID_MP4ALS,
417     AV_CODEC_ID_ATRAC1,
418     AV_CODEC_ID_BINKAUDIO_RDFT,
419     AV_CODEC_ID_BINKAUDIO_DCT,
420     AV_CODEC_ID_AAC_LATM,
421     AV_CODEC_ID_QDMC,
422     AV_CODEC_ID_CELT,
423     AV_CODEC_ID_G723_1,
424     AV_CODEC_ID_G729,
425     AV_CODEC_ID_8SVX_EXP,
426     AV_CODEC_ID_8SVX_FIB,
427     AV_CODEC_ID_BMV_AUDIO,
428     AV_CODEC_ID_RALF,
429     AV_CODEC_ID_IAC,
430     AV_CODEC_ID_ILBC,
431     AV_CODEC_ID_OPUS_DEPRECATED,
432     AV_CODEC_ID_COMFORT_NOISE,
433     AV_CODEC_ID_FFWAVESYNTH = MKBETAG('F','F','W','S'),
434     AV_CODEC_ID_8SVX_RAW    = MKBETAG('8','S','V','X'),
435     AV_CODEC_ID_SONIC       = MKBETAG('S','O','N','C'),
436     AV_CODEC_ID_SONIC_LS    = MKBETAG('S','O','N','L'),
437     AV_CODEC_ID_PAF_AUDIO   = MKBETAG('P','A','F','A'),
438     AV_CODEC_ID_OPUS        = MKBETAG('O','P','U','S'),
439     AV_CODEC_ID_TAK         = MKBETAG('t','B','a','K'),
440
441     /* subtitle codecs */
442     AV_CODEC_ID_FIRST_SUBTITLE = 0x17000,          ///< A dummy ID pointing at the start of subtitle codecs.
443     AV_CODEC_ID_DVD_SUBTITLE = 0x17000,
444     AV_CODEC_ID_DVB_SUBTITLE,
445     AV_CODEC_ID_TEXT,  ///< raw UTF-8 text
446     AV_CODEC_ID_XSUB,
447     AV_CODEC_ID_SSA,
448     AV_CODEC_ID_MOV_TEXT,
449     AV_CODEC_ID_HDMV_PGS_SUBTITLE,
450     AV_CODEC_ID_DVB_TELETEXT,
451     AV_CODEC_ID_SRT,
452     AV_CODEC_ID_MICRODVD   = MKBETAG('m','D','V','D'),
453     AV_CODEC_ID_EIA_608    = MKBETAG('c','6','0','8'),
454     AV_CODEC_ID_JACOSUB    = MKBETAG('J','S','U','B'),
455     AV_CODEC_ID_SAMI       = MKBETAG('S','A','M','I'),
456     AV_CODEC_ID_REALTEXT   = MKBETAG('R','T','X','T'),
457     AV_CODEC_ID_SUBVIEWER  = MKBETAG('S','u','b','V'),
458     AV_CODEC_ID_SUBRIP     = MKBETAG('S','R','i','p'),
459     AV_CODEC_ID_WEBVTT     = MKBETAG('W','V','T','T'),
460
461     /* other specific kind of codecs (generally used for attachments) */
462     AV_CODEC_ID_FIRST_UNKNOWN = 0x18000,           ///< A dummy ID pointing at the start of various fake codecs.
463     AV_CODEC_ID_TTF = 0x18000,
464     AV_CODEC_ID_BINTEXT    = MKBETAG('B','T','X','T'),
465     AV_CODEC_ID_XBIN       = MKBETAG('X','B','I','N'),
466     AV_CODEC_ID_IDF        = MKBETAG( 0 ,'I','D','F'),
467     AV_CODEC_ID_OTF        = MKBETAG( 0 ,'O','T','F'),
468
469     AV_CODEC_ID_PROBE = 0x19000, ///< codec_id is not known (like AV_CODEC_ID_NONE) but lavf should attempt to identify it
470
471     AV_CODEC_ID_MPEG2TS = 0x20000, /**< _FAKE_ codec to indicate a raw MPEG-2 TS
472                                 * stream (only used by libavformat) */
473     AV_CODEC_ID_MPEG4SYSTEMS = 0x20001, /**< _FAKE_ codec to indicate a MPEG-4 Systems
474                                 * stream (only used by libavformat) */
475     AV_CODEC_ID_FFMETADATA = 0x21000,   ///< Dummy codec for streams containing only metadata information.
476
477 #if FF_API_CODEC_ID
478 #include "old_codec_ids.h"
479 #endif
480 };
481
482 #if FF_API_CODEC_ID
483 #define CodecID AVCodecID
484 #endif
485
486 /**
487  * This struct describes the properties of a single codec described by an
488  * AVCodecID.
489  * @see avcodec_get_descriptor()
490  */
491 typedef struct AVCodecDescriptor {
492     enum AVCodecID     id;
493     enum AVMediaType type;
494     /**
495      * Name of the codec described by this descriptor. It is non-empty and
496      * unique for each codec descriptor. It should contain alphanumeric
497      * characters and '_' only.
498      */
499     const char      *name;
500     /**
501      * A more descriptive name for this codec. May be NULL.
502      */
503     const char *long_name;
504     /**
505      * Codec properties, a combination of AV_CODEC_PROP_* flags.
506      */
507     int             props;
508 } AVCodecDescriptor;
509
510 /**
511  * Codec uses only intra compression.
512  * Video codecs only.
513  */
514 #define AV_CODEC_PROP_INTRA_ONLY    (1 << 0)
515 /**
516  * Codec supports lossy compression. Audio and video codecs only.
517  * @note a codec may support both lossy and lossless
518  * compression modes
519  */
520 #define AV_CODEC_PROP_LOSSY         (1 << 1)
521 /**
522  * Codec supports lossless compression. Audio and video codecs only.
523  */
524 #define AV_CODEC_PROP_LOSSLESS      (1 << 2)
525
526 #if FF_API_OLD_DECODE_AUDIO
527 /* in bytes */
528 #define AVCODEC_MAX_AUDIO_FRAME_SIZE 192000 // 1 second of 48khz 32bit audio
529 #endif
530
531 /**
532  * @ingroup lavc_decoding
533  * Required number of additionally allocated bytes at the end of the input bitstream for decoding.
534  * This is mainly needed because some optimized bitstream readers read
535  * 32 or 64 bit at once and could read over the end.<br>
536  * Note: If the first 23 bits of the additional bytes are not 0, then damaged
537  * MPEG bitstreams could cause overread and segfault.
538  */
539 #define FF_INPUT_BUFFER_PADDING_SIZE 16
540
541 /**
542  * @ingroup lavc_encoding
543  * minimum encoding buffer size
544  * Used to avoid some checks during header writing.
545  */
546 #define FF_MIN_BUFFER_SIZE 16384
547
548
549 /**
550  * @ingroup lavc_encoding
551  * motion estimation type.
552  */
553 enum Motion_Est_ID {
554     ME_ZERO = 1,    ///< no search, that is use 0,0 vector whenever one is needed
555     ME_FULL,
556     ME_LOG,
557     ME_PHODS,
558     ME_EPZS,        ///< enhanced predictive zonal search
559     ME_X1,          ///< reserved for experiments
560     ME_HEX,         ///< hexagon based search
561     ME_UMH,         ///< uneven multi-hexagon search
562     ME_ITER,        ///< iterative search
563     ME_TESA,        ///< transformed exhaustive search algorithm
564 };
565
566 /**
567  * @ingroup lavc_decoding
568  */
569 enum AVDiscard{
570     /* We leave some space between them for extensions (drop some
571      * keyframes for intra-only or drop just some bidir frames). */
572     AVDISCARD_NONE    =-16, ///< discard nothing
573     AVDISCARD_DEFAULT =  0, ///< discard useless packets like 0 size packets in avi
574     AVDISCARD_NONREF  =  8, ///< discard all non reference
575     AVDISCARD_BIDIR   = 16, ///< discard all bidirectional frames
576     AVDISCARD_NONKEY  = 32, ///< discard all frames except keyframes
577     AVDISCARD_ALL     = 48, ///< discard all
578 };
579
580 enum AVColorPrimaries{
581     AVCOL_PRI_BT709       = 1, ///< also ITU-R BT1361 / IEC 61966-2-4 / SMPTE RP177 Annex B
582     AVCOL_PRI_UNSPECIFIED = 2,
583     AVCOL_PRI_BT470M      = 4,
584     AVCOL_PRI_BT470BG     = 5, ///< also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM
585     AVCOL_PRI_SMPTE170M   = 6, ///< also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC
586     AVCOL_PRI_SMPTE240M   = 7, ///< functionally identical to above
587     AVCOL_PRI_FILM        = 8,
588     AVCOL_PRI_NB             , ///< Not part of ABI
589 };
590
591 enum AVColorTransferCharacteristic{
592     AVCOL_TRC_BT709       = 1, ///< also ITU-R BT1361
593     AVCOL_TRC_UNSPECIFIED = 2,
594     AVCOL_TRC_GAMMA22     = 4, ///< also ITU-R BT470M / ITU-R BT1700 625 PAL & SECAM
595     AVCOL_TRC_GAMMA28     = 5, ///< also ITU-R BT470BG
596     AVCOL_TRC_SMPTE240M   = 7,
597     AVCOL_TRC_NB             , ///< Not part of ABI
598 };
599
600 enum AVColorSpace{
601     AVCOL_SPC_RGB         = 0,
602     AVCOL_SPC_BT709       = 1, ///< also ITU-R BT1361 / IEC 61966-2-4 xvYCC709 / SMPTE RP177 Annex B
603     AVCOL_SPC_UNSPECIFIED = 2,
604     AVCOL_SPC_FCC         = 4,
605     AVCOL_SPC_BT470BG     = 5, ///< also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM / IEC 61966-2-4 xvYCC601
606     AVCOL_SPC_SMPTE170M   = 6, ///< also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC / functionally identical to above
607     AVCOL_SPC_SMPTE240M   = 7,
608     AVCOL_SPC_YCOCG       = 8, ///< Used by Dirac / VC-2 and H.264 FRext, see ITU-T SG16
609     AVCOL_SPC_NB             , ///< Not part of ABI
610 };
611 #define AVCOL_SPC_YCGCO AVCOL_SPC_YCOCG
612
613 enum AVColorRange{
614     AVCOL_RANGE_UNSPECIFIED = 0,
615     AVCOL_RANGE_MPEG        = 1, ///< the normal 219*2^(n-8) "MPEG" YUV ranges
616     AVCOL_RANGE_JPEG        = 2, ///< the normal     2^n-1   "JPEG" YUV ranges
617     AVCOL_RANGE_NB             , ///< Not part of ABI
618 };
619
620 /**
621  *  X   X      3 4 X      X are luma samples,
622  *             1 2        1-6 are possible chroma positions
623  *  X   X      5 6 X      0 is undefined/unknown position
624  */
625 enum AVChromaLocation{
626     AVCHROMA_LOC_UNSPECIFIED = 0,
627     AVCHROMA_LOC_LEFT        = 1, ///< mpeg2/4, h264 default
628     AVCHROMA_LOC_CENTER      = 2, ///< mpeg1, jpeg, h263
629     AVCHROMA_LOC_TOPLEFT     = 3, ///< DV
630     AVCHROMA_LOC_TOP         = 4,
631     AVCHROMA_LOC_BOTTOMLEFT  = 5,
632     AVCHROMA_LOC_BOTTOM      = 6,
633     AVCHROMA_LOC_NB             , ///< Not part of ABI
634 };
635
636 enum AVAudioServiceType {
637     AV_AUDIO_SERVICE_TYPE_MAIN              = 0,
638     AV_AUDIO_SERVICE_TYPE_EFFECTS           = 1,
639     AV_AUDIO_SERVICE_TYPE_VISUALLY_IMPAIRED = 2,
640     AV_AUDIO_SERVICE_TYPE_HEARING_IMPAIRED  = 3,
641     AV_AUDIO_SERVICE_TYPE_DIALOGUE          = 4,
642     AV_AUDIO_SERVICE_TYPE_COMMENTARY        = 5,
643     AV_AUDIO_SERVICE_TYPE_EMERGENCY         = 6,
644     AV_AUDIO_SERVICE_TYPE_VOICE_OVER        = 7,
645     AV_AUDIO_SERVICE_TYPE_KARAOKE           = 8,
646     AV_AUDIO_SERVICE_TYPE_NB                   , ///< Not part of ABI
647 };
648
649 /**
650  * @ingroup lavc_encoding
651  */
652 typedef struct RcOverride{
653     int start_frame;
654     int end_frame;
655     int qscale; // If this is 0 then quality_factor will be used instead.
656     float quality_factor;
657 } RcOverride;
658
659 #define FF_MAX_B_FRAMES 16
660
661 /* encoding support
662    These flags can be passed in AVCodecContext.flags before initialization.
663    Note: Not everything is supported yet.
664 */
665
666 #define CODEC_FLAG_QSCALE 0x0002  ///< Use fixed qscale.
667 #define CODEC_FLAG_4MV    0x0004  ///< 4 MV per MB allowed / advanced prediction for H.263.
668 #define CODEC_FLAG_QPEL   0x0010  ///< Use qpel MC.
669 #define CODEC_FLAG_GMC    0x0020  ///< Use GMC.
670 #define CODEC_FLAG_MV0    0x0040  ///< Always try a MB with MV=<0,0>.
671 /**
672  * The parent program guarantees that the input for B-frames containing
673  * streams is not written to for at least s->max_b_frames+1 frames, if
674  * this is not set the input will be copied.
675  */
676 #define CODEC_FLAG_INPUT_PRESERVED 0x0100
677 #define CODEC_FLAG_PASS1           0x0200   ///< Use internal 2pass ratecontrol in first pass mode.
678 #define CODEC_FLAG_PASS2           0x0400   ///< Use internal 2pass ratecontrol in second pass mode.
679 #define CODEC_FLAG_GRAY            0x2000   ///< Only decode/encode grayscale.
680 #define CODEC_FLAG_EMU_EDGE        0x4000   ///< Don't draw edges.
681 #define CODEC_FLAG_PSNR            0x8000   ///< error[?] variables will be set during encoding.
682 #define CODEC_FLAG_TRUNCATED       0x00010000 /** Input bitstream might be truncated at a random
683                                                   location instead of only at frame boundaries. */
684 #define CODEC_FLAG_NORMALIZE_AQP  0x00020000 ///< Normalize adaptive quantization.
685 #define CODEC_FLAG_INTERLACED_DCT 0x00040000 ///< Use interlaced DCT.
686 #define CODEC_FLAG_LOW_DELAY      0x00080000 ///< Force low delay.
687 #define CODEC_FLAG_GLOBAL_HEADER  0x00400000 ///< Place global headers in extradata instead of every keyframe.
688 #define CODEC_FLAG_BITEXACT       0x00800000 ///< Use only bitexact stuff (except (I)DCT).
689 /* Fx : Flag for h263+ extra options */
690 #define CODEC_FLAG_AC_PRED        0x01000000 ///< H.263 advanced intra coding / MPEG-4 AC prediction
691 #define CODEC_FLAG_LOOP_FILTER    0x00000800 ///< loop filter
692 #define CODEC_FLAG_INTERLACED_ME  0x20000000 ///< interlaced motion estimation
693 #define CODEC_FLAG_CLOSED_GOP     0x80000000
694 #define CODEC_FLAG2_FAST          0x00000001 ///< Allow non spec compliant speedup tricks.
695 #define CODEC_FLAG2_NO_OUTPUT     0x00000004 ///< Skip bitstream encoding.
696 #define CODEC_FLAG2_LOCAL_HEADER  0x00000008 ///< Place global headers at every keyframe instead of in extradata.
697 #define CODEC_FLAG2_DROP_FRAME_TIMECODE 0x00002000 ///< timecode is in drop frame format. DEPRECATED!!!!
698 #if FF_API_MPV_GLOBAL_OPTS
699 #define CODEC_FLAG_CBP_RD         0x04000000 ///< Use rate distortion optimization for cbp.
700 #define CODEC_FLAG_QP_RD          0x08000000 ///< Use rate distortion optimization for qp selectioon.
701 #define CODEC_FLAG2_STRICT_GOP    0x00000002 ///< Strictly enforce GOP size.
702 #define CODEC_FLAG2_SKIP_RD       0x00004000 ///< RD optimal MB level residual skipping
703 #endif
704 #define CODEC_FLAG2_CHUNKS        0x00008000 ///< Input bitstream might be truncated at a packet boundaries instead of only at frame boundaries.
705 #define CODEC_FLAG2_SHOW_ALL      0x00400000 ///< Show all frames before the first keyframe
706
707 /* Unsupported options :
708  *              Syntax Arithmetic coding (SAC)
709  *              Reference Picture Selection
710  *              Independent Segment Decoding */
711 /* /Fx */
712 /* codec capabilities */
713
714 #define CODEC_CAP_DRAW_HORIZ_BAND 0x0001 ///< Decoder can use draw_horiz_band callback.
715 /**
716  * Codec uses get_buffer() for allocating buffers and supports custom allocators.
717  * If not set, it might not use get_buffer() at all or use operations that
718  * assume the buffer was allocated by avcodec_default_get_buffer.
719  */
720 #define CODEC_CAP_DR1             0x0002
721 #define CODEC_CAP_TRUNCATED       0x0008
722 /* Codec can export data for HW decoding (XvMC). */
723 #define CODEC_CAP_HWACCEL         0x0010
724 /**
725  * Encoder or decoder requires flushing with NULL input at the end in order to
726  * give the complete and correct output.
727  *
728  * NOTE: If this flag is not set, the codec is guaranteed to never be fed with
729  *       with NULL data. The user can still send NULL data to the public encode
730  *       or decode function, but libavcodec will not pass it along to the codec
731  *       unless this flag is set.
732  *
733  * Decoders:
734  * The decoder has a non-zero delay and needs to be fed with avpkt->data=NULL,
735  * avpkt->size=0 at the end to get the delayed data until the decoder no longer
736  * returns frames.
737  *
738  * Encoders:
739  * The encoder needs to be fed with NULL data at the end of encoding until the
740  * encoder no longer returns data.
741  *
742  * NOTE: For encoders implementing the AVCodec.encode2() function, setting this
743  *       flag also means that the encoder must set the pts and duration for
744  *       each output packet. If this flag is not set, the pts and duration will
745  *       be determined by libavcodec from the input frame.
746  */
747 #define CODEC_CAP_DELAY           0x0020
748 /**
749  * Codec can be fed a final frame with a smaller size.
750  * This can be used to prevent truncation of the last audio samples.
751  */
752 #define CODEC_CAP_SMALL_LAST_FRAME 0x0040
753 /**
754  * Codec can export data for HW decoding (VDPAU).
755  */
756 #define CODEC_CAP_HWACCEL_VDPAU    0x0080
757 /**
758  * Codec can output multiple frames per AVPacket
759  * Normally demuxers return one frame at a time, demuxers which do not do
760  * are connected to a parser to split what they return into proper frames.
761  * This flag is reserved to the very rare category of codecs which have a
762  * bitstream that cannot be split into frames without timeconsuming
763  * operations like full decoding. Demuxers carring such bitstreams thus
764  * may return multiple frames in a packet. This has many disadvantages like
765  * prohibiting stream copy in many cases thus it should only be considered
766  * as a last resort.
767  */
768 #define CODEC_CAP_SUBFRAMES        0x0100
769 /**
770  * Codec is experimental and is thus avoided in favor of non experimental
771  * encoders
772  */
773 #define CODEC_CAP_EXPERIMENTAL     0x0200
774 /**
775  * Codec should fill in channel configuration and samplerate instead of container
776  */
777 #define CODEC_CAP_CHANNEL_CONF     0x0400
778
779 /**
780  * Codec is able to deal with negative linesizes
781  */
782 #define CODEC_CAP_NEG_LINESIZES    0x0800
783
784 /**
785  * Codec supports frame-level multithreading.
786  */
787 #define CODEC_CAP_FRAME_THREADS    0x1000
788 /**
789  * Codec supports slice-based (or partition-based) multithreading.
790  */
791 #define CODEC_CAP_SLICE_THREADS    0x2000
792 /**
793  * Codec supports changed parameters at any point.
794  */
795 #define CODEC_CAP_PARAM_CHANGE     0x4000
796 /**
797  * Codec supports avctx->thread_count == 0 (auto).
798  */
799 #define CODEC_CAP_AUTO_THREADS     0x8000
800 /**
801  * Audio encoder supports receiving a different number of samples in each call.
802  */
803 #define CODEC_CAP_VARIABLE_FRAME_SIZE 0x10000
804 /**
805  * Codec is intra only.
806  */
807 #define CODEC_CAP_INTRA_ONLY       0x40000000
808 /**
809  * Codec is lossless.
810  */
811 #define CODEC_CAP_LOSSLESS         0x80000000
812
813 //The following defines may change, don't expect compatibility if you use them.
814 #define MB_TYPE_INTRA4x4   0x0001
815 #define MB_TYPE_INTRA16x16 0x0002 //FIXME H.264-specific
816 #define MB_TYPE_INTRA_PCM  0x0004 //FIXME H.264-specific
817 #define MB_TYPE_16x16      0x0008
818 #define MB_TYPE_16x8       0x0010
819 #define MB_TYPE_8x16       0x0020
820 #define MB_TYPE_8x8        0x0040
821 #define MB_TYPE_INTERLACED 0x0080
822 #define MB_TYPE_DIRECT2    0x0100 //FIXME
823 #define MB_TYPE_ACPRED     0x0200
824 #define MB_TYPE_GMC        0x0400
825 #define MB_TYPE_SKIP       0x0800
826 #define MB_TYPE_P0L0       0x1000
827 #define MB_TYPE_P1L0       0x2000
828 #define MB_TYPE_P0L1       0x4000
829 #define MB_TYPE_P1L1       0x8000
830 #define MB_TYPE_L0         (MB_TYPE_P0L0 | MB_TYPE_P1L0)
831 #define MB_TYPE_L1         (MB_TYPE_P0L1 | MB_TYPE_P1L1)
832 #define MB_TYPE_L0L1       (MB_TYPE_L0   | MB_TYPE_L1)
833 #define MB_TYPE_QUANT      0x00010000
834 #define MB_TYPE_CBP        0x00020000
835 //Note bits 24-31 are reserved for codec specific use (h264 ref0, mpeg1 0mv, ...)
836
837 /**
838  * Pan Scan area.
839  * This specifies the area which should be displayed.
840  * Note there may be multiple such areas for one frame.
841  */
842 typedef struct AVPanScan{
843     /**
844      * id
845      * - encoding: Set by user.
846      * - decoding: Set by libavcodec.
847      */
848     int id;
849
850     /**
851      * width and height in 1/16 pel
852      * - encoding: Set by user.
853      * - decoding: Set by libavcodec.
854      */
855     int width;
856     int height;
857
858     /**
859      * position of the top left corner in 1/16 pel for up to 3 fields/frames
860      * - encoding: Set by user.
861      * - decoding: Set by libavcodec.
862      */
863     int16_t position[3][2];
864 }AVPanScan;
865
866 #define FF_QSCALE_TYPE_MPEG1 0
867 #define FF_QSCALE_TYPE_MPEG2 1
868 #define FF_QSCALE_TYPE_H264  2
869 #define FF_QSCALE_TYPE_VP56  3
870
871 #define FF_BUFFER_TYPE_INTERNAL 1
872 #define FF_BUFFER_TYPE_USER     2 ///< direct rendering buffers (image is (de)allocated by user)
873 #define FF_BUFFER_TYPE_SHARED   4 ///< Buffer from somewhere else; don't deallocate image (data/base), all other tables are not shared.
874 #define FF_BUFFER_TYPE_COPY     8 ///< Just a (modified) copy of some other buffer, don't deallocate anything.
875
876 #define FF_BUFFER_HINTS_VALID    0x01 // Buffer hints value is meaningful (if 0 ignore).
877 #define FF_BUFFER_HINTS_READABLE 0x02 // Codec will read from buffer.
878 #define FF_BUFFER_HINTS_PRESERVE 0x04 // User must not alter buffer content.
879 #define FF_BUFFER_HINTS_REUSABLE 0x08 // Codec will reuse the buffer (update).
880
881 /**
882  * @defgroup lavc_packet AVPacket
883  *
884  * Types and functions for working with AVPacket.
885  * @{
886  */
887 enum AVPacketSideDataType {
888     AV_PKT_DATA_PALETTE,
889     AV_PKT_DATA_NEW_EXTRADATA,
890
891     /**
892      * An AV_PKT_DATA_PARAM_CHANGE side data packet is laid out as follows:
893      * @code
894      * u32le param_flags
895      * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_COUNT)
896      *     s32le channel_count
897      * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_LAYOUT)
898      *     u64le channel_layout
899      * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE)
900      *     s32le sample_rate
901      * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_DIMENSIONS)
902      *     s32le width
903      *     s32le height
904      * @endcode
905      */
906     AV_PKT_DATA_PARAM_CHANGE,
907
908     /**
909      * An AV_PKT_DATA_H263_MB_INFO side data packet contains a number of
910      * structures with info about macroblocks relevant to splitting the
911      * packet into smaller packets on macroblock edges (e.g. as for RFC 2190).
912      * That is, it does not necessarily contain info about all macroblocks,
913      * as long as the distance between macroblocks in the info is smaller
914      * than the target payload size.
915      * Each MB info structure is 12 bytes, and is laid out as follows:
916      * @code
917      * u32le bit offset from the start of the packet
918      * u8    current quantizer at the start of the macroblock
919      * u8    GOB number
920      * u16le macroblock address within the GOB
921      * u8    horizontal MV predictor
922      * u8    vertical MV predictor
923      * u8    horizontal MV predictor for block number 3
924      * u8    vertical MV predictor for block number 3
925      * @endcode
926      */
927     AV_PKT_DATA_H263_MB_INFO,
928
929     /**
930      * Recommmends skipping the specified number of samples
931      * @code
932      * u32le number of samples to skip from start of this packet
933      * u32le number of samples to skip from end of this packet
934      * u8    reason for start skip
935      * u8    reason for end   skip (0=padding silence, 1=convergence)
936      * @endcode
937      */
938     AV_PKT_DATA_SKIP_SAMPLES=70,
939
940     /**
941      * An AV_PKT_DATA_JP_DUALMONO side data packet indicates that
942      * the packet may contain "dual mono" audio specific to Japanese DTV
943      * and if it is true, recommends only the selected channel to be used.
944      * @code
945      * u8    selected channels (0=mail/left, 1=sub/right, 2=both)
946      * @endcode
947      */
948     AV_PKT_DATA_JP_DUALMONO,
949
950     /**
951      * A list of zero terminated key/value strings. There is no end marker for
952      * the list, so it is required to rely on the side data size to stop.
953      */
954     AV_PKT_DATA_STRINGS_METADATA,
955
956     /**
957      * Subtitle event position
958      * @code
959      * u32le x1
960      * u32le y1
961      * u32le x2
962      * u32le y2
963      * @endcode
964      */
965     AV_PKT_DATA_SUBTITLE_POSITION,
966 };
967
968 /**
969  * This structure stores compressed data. It is typically exported by demuxers
970  * and then passed as input to decoders, or received as output from encoders and
971  * then passed to muxers.
972  *
973  * For video, it should typically contain one compressed frame. For audio it may
974  * contain several compressed frames.
975  *
976  * AVPacket is one of the few structs in FFmpeg, whose size is a part of public
977  * ABI. Thus it may be allocated on stack and no new fields can be added to it
978  * without libavcodec and libavformat major bump.
979  *
980  * The semantics of data ownership depends on the destruct field.
981  * If it is set, the packet data is dynamically allocated and is valid
982  * indefinitely until av_free_packet() is called (which in turn calls the
983  * destruct callback to free the data). If destruct is not set, the packet data
984  * is typically backed by some static buffer somewhere and is only valid for a
985  * limited time (e.g. until the next read call when demuxing).
986  *
987  * The side data is always allocated with av_malloc() and is freed in
988  * av_free_packet().
989  */
990 typedef struct AVPacket {
991     /**
992      * Presentation timestamp in AVStream->time_base units; the time at which
993      * the decompressed packet will be presented to the user.
994      * Can be AV_NOPTS_VALUE if it is not stored in the file.
995      * pts MUST be larger or equal to dts as presentation cannot happen before
996      * decompression, unless one wants to view hex dumps. Some formats misuse
997      * the terms dts and pts/cts to mean something different. Such timestamps
998      * must be converted to true pts/dts before they are stored in AVPacket.
999      */
1000     int64_t pts;
1001     /**
1002      * Decompression timestamp in AVStream->time_base units; the time at which
1003      * the packet is decompressed.
1004      * Can be AV_NOPTS_VALUE if it is not stored in the file.
1005      */
1006     int64_t dts;
1007     uint8_t *data;
1008     int   size;
1009     int   stream_index;
1010     /**
1011      * A combination of AV_PKT_FLAG values
1012      */
1013     int   flags;
1014     /**
1015      * Additional packet data that can be provided by the container.
1016      * Packet can contain several types of side information.
1017      */
1018     struct {
1019         uint8_t *data;
1020         int      size;
1021         enum AVPacketSideDataType type;
1022     } *side_data;
1023     int side_data_elems;
1024
1025     /**
1026      * Duration of this packet in AVStream->time_base units, 0 if unknown.
1027      * Equals next_pts - this_pts in presentation order.
1028      */
1029     int   duration;
1030     void  (*destruct)(struct AVPacket *);
1031     void  *priv;
1032     int64_t pos;                            ///< byte position in stream, -1 if unknown
1033
1034     /**
1035      * Time difference in AVStream->time_base units from the pts of this
1036      * packet to the point at which the output from the decoder has converged
1037      * independent from the availability of previous frames. That is, the
1038      * frames are virtually identical no matter if decoding started from
1039      * the very first frame or from this keyframe.
1040      * Is AV_NOPTS_VALUE if unknown.
1041      * This field is not the display duration of the current packet.
1042      * This field has no meaning if the packet does not have AV_PKT_FLAG_KEY
1043      * set.
1044      *
1045      * The purpose of this field is to allow seeking in streams that have no
1046      * keyframes in the conventional sense. It corresponds to the
1047      * recovery point SEI in H.264 and match_time_delta in NUT. It is also
1048      * essential for some types of subtitle streams to ensure that all
1049      * subtitles are correctly displayed after seeking.
1050      */
1051     int64_t convergence_duration;
1052 } AVPacket;
1053 #define AV_PKT_FLAG_KEY     0x0001 ///< The packet contains a keyframe
1054 #define AV_PKT_FLAG_CORRUPT 0x0002 ///< The packet content is corrupted
1055
1056 enum AVSideDataParamChangeFlags {
1057     AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_COUNT  = 0x0001,
1058     AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_LAYOUT = 0x0002,
1059     AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE    = 0x0004,
1060     AV_SIDE_DATA_PARAM_CHANGE_DIMENSIONS     = 0x0008,
1061 };
1062 /**
1063  * @}
1064  */
1065
1066 /**
1067  * Audio Video Frame.
1068  * New fields can be added to the end of AVFRAME with minor version
1069  * bumps. Similarly fields that are marked as to be only accessed by
1070  * av_opt_ptr() can be reordered. This allows 2 forks to add fields
1071  * without breaking compatibility with each other.
1072  * Removal, reordering and changes in the remaining cases require
1073  * a major version bump.
1074  * sizeof(AVFrame) must not be used outside libavcodec.
1075  */
1076 typedef struct AVFrame {
1077 #define AV_NUM_DATA_POINTERS 8
1078     /**
1079      * pointer to the picture/channel planes.
1080      * This might be different from the first allocated byte
1081      * - encoding: Set by user
1082      * - decoding: set by AVCodecContext.get_buffer()
1083      */
1084     uint8_t *data[AV_NUM_DATA_POINTERS];
1085
1086     /**
1087      * Size, in bytes, of the data for each picture/channel plane.
1088      *
1089      * For audio, only linesize[0] may be set. For planar audio, each channel
1090      * plane must be the same size.
1091      *
1092      * - encoding: Set by user
1093      * - decoding: set by AVCodecContext.get_buffer()
1094      */
1095     int linesize[AV_NUM_DATA_POINTERS];
1096
1097     /**
1098      * pointers to the data planes/channels.
1099      *
1100      * For video, this should simply point to data[].
1101      *
1102      * For planar audio, each channel has a separate data pointer, and
1103      * linesize[0] contains the size of each channel buffer.
1104      * For packed audio, there is just one data pointer, and linesize[0]
1105      * contains the total size of the buffer for all channels.
1106      *
1107      * Note: Both data and extended_data will always be set by get_buffer(),
1108      * but for planar audio with more channels that can fit in data,
1109      * extended_data must be used by the decoder in order to access all
1110      * channels.
1111      *
1112      * encoding: set by user
1113      * decoding: set by AVCodecContext.get_buffer()
1114      */
1115     uint8_t **extended_data;
1116
1117     /**
1118      * width and height of the video frame
1119      * - encoding: unused
1120      * - decoding: Read by user.
1121      */
1122     int width, height;
1123
1124     /**
1125      * number of audio samples (per channel) described by this frame
1126      * - encoding: Set by user
1127      * - decoding: Set by libavcodec
1128      */
1129     int nb_samples;
1130
1131     /**
1132      * format of the frame, -1 if unknown or unset
1133      * Values correspond to enum AVPixelFormat for video frames,
1134      * enum AVSampleFormat for audio)
1135      * - encoding: unused
1136      * - decoding: Read by user.
1137      */
1138     int format;
1139
1140     /**
1141      * 1 -> keyframe, 0-> not
1142      * - encoding: Set by libavcodec.
1143      * - decoding: Set by libavcodec.
1144      */
1145     int key_frame;
1146
1147     /**
1148      * Picture type of the frame, see ?_TYPE below.
1149      * - encoding: Set by libavcodec. for coded_picture (and set by user for input).
1150      * - decoding: Set by libavcodec.
1151      */
1152     enum AVPictureType pict_type;
1153
1154     /**
1155      * pointer to the first allocated byte of the picture. Can be used in get_buffer/release_buffer.
1156      * This isn't used by libavcodec unless the default get/release_buffer() is used.
1157      * - encoding:
1158      * - decoding:
1159      */
1160     uint8_t *base[AV_NUM_DATA_POINTERS];
1161
1162     /**
1163      * sample aspect ratio for the video frame, 0/1 if unknown/unspecified
1164      * - encoding: unused
1165      * - decoding: Read by user.
1166      */
1167     AVRational sample_aspect_ratio;
1168
1169     /**
1170      * presentation timestamp in time_base units (time when frame should be shown to user)
1171      * If AV_NOPTS_VALUE then frame_rate = 1/time_base will be assumed.
1172      * - encoding: MUST be set by user.
1173      * - decoding: Set by libavcodec.
1174      */
1175     int64_t pts;
1176
1177     /**
1178      * reordered pts from the last AVPacket that has been input into the decoder
1179      * - encoding: unused
1180      * - decoding: Read by user.
1181      */
1182     int64_t pkt_pts;
1183
1184     /**
1185      * dts from the last AVPacket that has been input into the decoder
1186      * - encoding: unused
1187      * - decoding: Read by user.
1188      */
1189     int64_t pkt_dts;
1190
1191     /**
1192      * picture number in bitstream order
1193      * - encoding: set by
1194      * - decoding: Set by libavcodec.
1195      */
1196     int coded_picture_number;
1197     /**
1198      * picture number in display order
1199      * - encoding: set by
1200      * - decoding: Set by libavcodec.
1201      */
1202     int display_picture_number;
1203
1204     /**
1205      * quality (between 1 (good) and FF_LAMBDA_MAX (bad))
1206      * - encoding: Set by libavcodec. for coded_picture (and set by user for input).
1207      * - decoding: Set by libavcodec.
1208      */
1209     int quality;
1210
1211     /**
1212      * is this picture used as reference
1213      * The values for this are the same as the MpegEncContext.picture_structure
1214      * variable, that is 1->top field, 2->bottom field, 3->frame/both fields.
1215      * Set to 4 for delayed, non-reference frames.
1216      * - encoding: unused
1217      * - decoding: Set by libavcodec. (before get_buffer() call)).
1218      */
1219     int reference;
1220
1221     /**
1222      * QP table
1223      * - encoding: unused
1224      * - decoding: Set by libavcodec.
1225      */
1226     int8_t *qscale_table;
1227     /**
1228      * QP store stride
1229      * - encoding: unused
1230      * - decoding: Set by libavcodec.
1231      */
1232     int qstride;
1233
1234     /**
1235      *
1236      */
1237     int qscale_type;
1238
1239     /**
1240      * mbskip_table[mb]>=1 if MB didn't change
1241      * stride= mb_width = (width+15)>>4
1242      * - encoding: unused
1243      * - decoding: Set by libavcodec.
1244      */
1245     uint8_t *mbskip_table;
1246
1247     /**
1248      * motion vector table
1249      * @code
1250      * example:
1251      * int mv_sample_log2= 4 - motion_subsample_log2;
1252      * int mb_width= (width+15)>>4;
1253      * int mv_stride= (mb_width << mv_sample_log2) + 1;
1254      * motion_val[direction][x + y*mv_stride][0->mv_x, 1->mv_y];
1255      * @endcode
1256      * - encoding: Set by user.
1257      * - decoding: Set by libavcodec.
1258      */
1259     int16_t (*motion_val[2])[2];
1260
1261     /**
1262      * macroblock type table
1263      * mb_type_base + mb_width + 2
1264      * - encoding: Set by user.
1265      * - decoding: Set by libavcodec.
1266      */
1267     uint32_t *mb_type;
1268
1269     /**
1270      * DCT coefficients
1271      * - encoding: unused
1272      * - decoding: Set by libavcodec.
1273      */
1274     short *dct_coeff;
1275
1276     /**
1277      * motion reference frame index
1278      * the order in which these are stored can depend on the codec.
1279      * - encoding: Set by user.
1280      * - decoding: Set by libavcodec.
1281      */
1282     int8_t *ref_index[2];
1283
1284     /**
1285      * for some private data of the user
1286      * - encoding: unused
1287      * - decoding: Set by user.
1288      */
1289     void *opaque;
1290
1291     /**
1292      * error
1293      * - encoding: Set by libavcodec. if flags&CODEC_FLAG_PSNR.
1294      * - decoding: unused
1295      */
1296     uint64_t error[AV_NUM_DATA_POINTERS];
1297
1298     /**
1299      * type of the buffer (to keep track of who has to deallocate data[*])
1300      * - encoding: Set by the one who allocates it.
1301      * - decoding: Set by the one who allocates it.
1302      * Note: User allocated (direct rendering) & internal buffers cannot coexist currently.
1303      */
1304     int type;
1305
1306     /**
1307      * When decoding, this signals how much the picture must be delayed.
1308      * extra_delay = repeat_pict / (2*fps)
1309      * - encoding: unused
1310      * - decoding: Set by libavcodec.
1311      */
1312     int repeat_pict;
1313
1314     /**
1315      * The content of the picture is interlaced.
1316      * - encoding: Set by user.
1317      * - decoding: Set by libavcodec. (default 0)
1318      */
1319     int interlaced_frame;
1320
1321     /**
1322      * If the content is interlaced, is top field displayed first.
1323      * - encoding: Set by user.
1324      * - decoding: Set by libavcodec.
1325      */
1326     int top_field_first;
1327
1328     /**
1329      * Tell user application that palette has changed from previous frame.
1330      * - encoding: ??? (no palette-enabled encoder yet)
1331      * - decoding: Set by libavcodec. (default 0).
1332      */
1333     int palette_has_changed;
1334
1335     /**
1336      * codec suggestion on buffer type if != 0
1337      * - encoding: unused
1338      * - decoding: Set by libavcodec. (before get_buffer() call)).
1339      */
1340     int buffer_hints;
1341
1342     /**
1343      * Pan scan.
1344      * - encoding: Set by user.
1345      * - decoding: Set by libavcodec.
1346      */
1347     AVPanScan *pan_scan;
1348
1349     /**
1350      * reordered opaque 64bit (generally an integer or a double precision float
1351      * PTS but can be anything).
1352      * The user sets AVCodecContext.reordered_opaque to represent the input at
1353      * that time,
1354      * the decoder reorders values as needed and sets AVFrame.reordered_opaque
1355      * to exactly one of the values provided by the user through AVCodecContext.reordered_opaque
1356      * @deprecated in favor of pkt_pts
1357      * - encoding: unused
1358      * - decoding: Read by user.
1359      */
1360     int64_t reordered_opaque;
1361
1362     /**
1363      * hardware accelerator private data (FFmpeg-allocated)
1364      * - encoding: unused
1365      * - decoding: Set by libavcodec
1366      */
1367     void *hwaccel_picture_private;
1368
1369     /**
1370      * the AVCodecContext which ff_thread_get_buffer() was last called on
1371      * - encoding: Set by libavcodec.
1372      * - decoding: Set by libavcodec.
1373      */
1374     struct AVCodecContext *owner;
1375
1376     /**
1377      * used by multithreading to store frame-specific info
1378      * - encoding: Set by libavcodec.
1379      * - decoding: Set by libavcodec.
1380      */
1381     void *thread_opaque;
1382
1383     /**
1384      * log2 of the size of the block which a single vector in motion_val represents:
1385      * (4->16x16, 3->8x8, 2-> 4x4, 1-> 2x2)
1386      * - encoding: unused
1387      * - decoding: Set by libavcodec.
1388      */
1389     uint8_t motion_subsample_log2;
1390
1391     /**
1392      * Sample rate of the audio data.
1393      *
1394      * - encoding: unused
1395      * - decoding: read by user
1396      */
1397     int sample_rate;
1398
1399     /**
1400      * Channel layout of the audio data.
1401      *
1402      * - encoding: unused
1403      * - decoding: read by user.
1404      */
1405     uint64_t channel_layout;
1406
1407     /**
1408      * frame timestamp estimated using various heuristics, in stream time base
1409      * Code outside libavcodec should access this field using:
1410      * av_frame_get_best_effort_timestamp(frame)
1411      * - encoding: unused
1412      * - decoding: set by libavcodec, read by user.
1413      */
1414     int64_t best_effort_timestamp;
1415
1416     /**
1417      * reordered pos from the last AVPacket that has been input into the decoder
1418      * Code outside libavcodec should access this field using:
1419      * av_frame_get_pkt_pos(frame)
1420      * - encoding: unused
1421      * - decoding: Read by user.
1422      */
1423     int64_t pkt_pos;
1424
1425     /**
1426      * duration of the corresponding packet, expressed in
1427      * AVStream->time_base units, 0 if unknown.
1428      * Code outside libavcodec should access this field using:
1429      * av_frame_get_pkt_duration(frame)
1430      * - encoding: unused
1431      * - decoding: Read by user.
1432      */
1433     int64_t pkt_duration;
1434
1435     /**
1436      * metadata.
1437      * Code outside libavcodec should access this field using:
1438      * av_frame_get_metadata(frame)
1439      * - encoding: Set by user.
1440      * - decoding: Set by libavcodec.
1441      */
1442     AVDictionary *metadata;
1443
1444     /**
1445      * decode error flags of the frame, set to a combination of
1446      * FF_DECODE_ERROR_xxx flags if the decoder produced a frame, but there
1447      * were errors during the decoding.
1448      * Code outside libavcodec should access this field using:
1449      * av_frame_get_decode_error_flags(frame)
1450      * - encoding: unused
1451      * - decoding: set by libavcodec, read by user.
1452      */
1453     int decode_error_flags;
1454 #define FF_DECODE_ERROR_INVALID_BITSTREAM   1
1455 #define FF_DECODE_ERROR_MISSING_REFERENCE   2
1456
1457     /**
1458      * number of audio channels, only used for audio.
1459      * Code outside libavcodec should access this field using:
1460      * av_frame_get_channels(frame)
1461      * - encoding: unused
1462      * - decoding: Read by user.
1463      */
1464     int64_t channels;
1465 } AVFrame;
1466
1467 /**
1468  * Accessors for some AVFrame fields.
1469  * The position of these field in the structure is not part of the ABI,
1470  * they should not be accessed directly outside libavcodec.
1471  */
1472 int64_t av_frame_get_best_effort_timestamp(const AVFrame *frame);
1473 void    av_frame_set_best_effort_timestamp(AVFrame *frame, int64_t val);
1474 int64_t av_frame_get_pkt_duration         (const AVFrame *frame);
1475 void    av_frame_set_pkt_duration         (AVFrame *frame, int64_t val);
1476 int64_t av_frame_get_pkt_pos              (const AVFrame *frame);
1477 void    av_frame_set_pkt_pos              (AVFrame *frame, int64_t val);
1478 int64_t av_frame_get_channel_layout       (const AVFrame *frame);
1479 void    av_frame_set_channel_layout       (AVFrame *frame, int64_t val);
1480 int     av_frame_get_channels             (const AVFrame *frame);
1481 void    av_frame_set_channels             (AVFrame *frame, int     val);
1482 int     av_frame_get_sample_rate          (const AVFrame *frame);
1483 void    av_frame_set_sample_rate          (AVFrame *frame, int     val);
1484 AVDictionary *av_frame_get_metadata       (const AVFrame *frame);
1485 void          av_frame_set_metadata       (AVFrame *frame, AVDictionary *val);
1486 int     av_frame_get_decode_error_flags   (const AVFrame *frame);
1487 void    av_frame_set_decode_error_flags   (AVFrame *frame, int     val);
1488
1489 struct AVCodecInternal;
1490
1491 enum AVFieldOrder {
1492     AV_FIELD_UNKNOWN,
1493     AV_FIELD_PROGRESSIVE,
1494     AV_FIELD_TT,          //< Top coded_first, top displayed first
1495     AV_FIELD_BB,          //< Bottom coded first, bottom displayed first
1496     AV_FIELD_TB,          //< Top coded first, bottom displayed first
1497     AV_FIELD_BT,          //< Bottom coded first, top displayed first
1498 };
1499
1500 /**
1501  * main external API structure.
1502  * New fields can be added to the end with minor version bumps.
1503  * Removal, reordering and changes to existing fields require a major
1504  * version bump.
1505  * Please use AVOptions (av_opt* / av_set/get*()) to access these fields from user
1506  * applications.
1507  * sizeof(AVCodecContext) must not be used outside libav*.
1508  */
1509 typedef struct AVCodecContext {
1510     /**
1511      * information on struct for av_log
1512      * - set by avcodec_alloc_context3
1513      */
1514     const AVClass *av_class;
1515     int log_level_offset;
1516
1517     enum AVMediaType codec_type; /* see AVMEDIA_TYPE_xxx */
1518     const struct AVCodec  *codec;
1519     char             codec_name[32];
1520     enum AVCodecID     codec_id; /* see AV_CODEC_ID_xxx */
1521
1522     /**
1523      * fourcc (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A').
1524      * This is used to work around some encoder bugs.
1525      * A demuxer should set this to what is stored in the field used to identify the codec.
1526      * If there are multiple such fields in a container then the demuxer should choose the one
1527      * which maximizes the information about the used codec.
1528      * If the codec tag field in a container is larger than 32 bits then the demuxer should
1529      * remap the longer ID to 32 bits with a table or other structure. Alternatively a new
1530      * extra_codec_tag + size could be added but for this a clear advantage must be demonstrated
1531      * first.
1532      * - encoding: Set by user, if not then the default based on codec_id will be used.
1533      * - decoding: Set by user, will be converted to uppercase by libavcodec during init.
1534      */
1535     unsigned int codec_tag;
1536
1537     /**
1538      * fourcc from the AVI stream header (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A').
1539      * This is used to work around some encoder bugs.
1540      * - encoding: unused
1541      * - decoding: Set by user, will be converted to uppercase by libavcodec during init.
1542      */
1543     unsigned int stream_codec_tag;
1544
1545 #if FF_API_SUB_ID
1546     /**
1547      * @deprecated this field is unused
1548      */
1549     attribute_deprecated int sub_id;
1550 #endif
1551
1552     void *priv_data;
1553
1554     /**
1555      * Private context used for internal data.
1556      *
1557      * Unlike priv_data, this is not codec-specific. It is used in general
1558      * libavcodec functions.
1559      */
1560     struct AVCodecInternal *internal;
1561
1562     /**
1563      * Private data of the user, can be used to carry app specific stuff.
1564      * - encoding: Set by user.
1565      * - decoding: Set by user.
1566      */
1567     void *opaque;
1568
1569     /**
1570      * the average bitrate
1571      * - encoding: Set by user; unused for constant quantizer encoding.
1572      * - decoding: Set by libavcodec. 0 or some bitrate if this info is available in the stream.
1573      */
1574     int bit_rate;
1575
1576     /**
1577      * number of bits the bitstream is allowed to diverge from the reference.
1578      *           the reference can be CBR (for CBR pass1) or VBR (for pass2)
1579      * - encoding: Set by user; unused for constant quantizer encoding.
1580      * - decoding: unused
1581      */
1582     int bit_rate_tolerance;
1583
1584     /**
1585      * Global quality for codecs which cannot change it per frame.
1586      * This should be proportional to MPEG-1/2/4 qscale.
1587      * - encoding: Set by user.
1588      * - decoding: unused
1589      */
1590     int global_quality;
1591
1592     /**
1593      * - encoding: Set by user.
1594      * - decoding: unused
1595      */
1596     int compression_level;
1597 #define FF_COMPRESSION_DEFAULT -1
1598
1599     /**
1600      * CODEC_FLAG_*.
1601      * - encoding: Set by user.
1602      * - decoding: Set by user.
1603      */
1604     int flags;
1605
1606     /**
1607      * CODEC_FLAG2_*
1608      * - encoding: Set by user.
1609      * - decoding: Set by user.
1610      */
1611     int flags2;
1612
1613     /**
1614      * some codecs need / can use extradata like Huffman tables.
1615      * mjpeg: Huffman tables
1616      * rv10: additional flags
1617      * mpeg4: global headers (they can be in the bitstream or here)
1618      * The allocated memory should be FF_INPUT_BUFFER_PADDING_SIZE bytes larger
1619      * than extradata_size to avoid prolems if it is read with the bitstream reader.
1620      * The bytewise contents of extradata must not depend on the architecture or CPU endianness.
1621      * - encoding: Set/allocated/freed by libavcodec.
1622      * - decoding: Set/allocated/freed by user.
1623      */
1624     uint8_t *extradata;
1625     int extradata_size;
1626
1627     /**
1628      * This is the fundamental unit of time (in seconds) in terms
1629      * of which frame timestamps are represented. For fixed-fps content,
1630      * timebase should be 1/framerate and timestamp increments should be
1631      * identically 1.
1632      * - encoding: MUST be set by user.
1633      * - decoding: Set by libavcodec.
1634      */
1635     AVRational time_base;
1636
1637     /**
1638      * For some codecs, the time base is closer to the field rate than the frame rate.
1639      * Most notably, H.264 and MPEG-2 specify time_base as half of frame duration
1640      * if no telecine is used ...
1641      *
1642      * Set to time_base ticks per frame. Default 1, e.g., H.264/MPEG-2 set it to 2.
1643      */
1644     int ticks_per_frame;
1645
1646     /**
1647      * Codec delay.
1648      *
1649      * Encoding: Number of frames delay there will be from the encoder input to
1650      *           the decoder output. (we assume the decoder matches the spec)
1651      * Decoding: Number of frames delay in addition to what a standard decoder
1652      *           as specified in the spec would produce.
1653      *
1654      * Video:
1655      *   Number of frames the decoded output will be delayed relative to the
1656      *   encoded input.
1657      *
1658      * Audio:
1659      *   For encoding, this is the number of "priming" samples added to the
1660      *   beginning of the stream. The decoded output will be delayed by this
1661      *   many samples relative to the input to the encoder. Note that this
1662      *   field is purely informational and does not directly affect the pts
1663      *   output by the encoder, which should always be based on the actual
1664      *   presentation time, including any delay.
1665      *   For decoding, this is the number of samples the decoder needs to
1666      *   output before the decoder's output is valid. When seeking, you should
1667      *   start decoding this many samples prior to your desired seek point.
1668      *
1669      * - encoding: Set by libavcodec.
1670      * - decoding: Set by libavcodec.
1671      */
1672     int delay;
1673
1674
1675     /* video only */
1676     /**
1677      * picture width / height.
1678      * - encoding: MUST be set by user.
1679      * - decoding: Set by libavcodec.
1680      * Note: For compatibility it is possible to set this instead of
1681      * coded_width/height before decoding.
1682      */
1683     int width, height;
1684
1685     /**
1686      * Bitstream width / height, may be different from width/height if lowres enabled.
1687      * - encoding: unused
1688      * - decoding: Set by user before init if known. Codec should override / dynamically change if needed.
1689      */
1690     int coded_width, coded_height;
1691
1692 #define FF_ASPECT_EXTENDED 15
1693
1694     /**
1695      * the number of pictures in a group of pictures, or 0 for intra_only
1696      * - encoding: Set by user.
1697      * - decoding: unused
1698      */
1699     int gop_size;
1700
1701     /**
1702      * Pixel format, see AV_PIX_FMT_xxx.
1703      * May be set by the demuxer if known from headers.
1704      * May be overridden by the decoder if it knows better.
1705      * - encoding: Set by user.
1706      * - decoding: Set by user if known, overridden by libavcodec if known
1707      */
1708     enum AVPixelFormat pix_fmt;
1709
1710     /**
1711      * Motion estimation algorithm used for video coding.
1712      * 1 (zero), 2 (full), 3 (log), 4 (phods), 5 (epzs), 6 (x1), 7 (hex),
1713      * 8 (umh), 9 (iter), 10 (tesa) [7, 8, 10 are x264 specific, 9 is snow specific]
1714      * - encoding: MUST be set by user.
1715      * - decoding: unused
1716      */
1717     int me_method;
1718
1719     /**
1720      * If non NULL, 'draw_horiz_band' is called by the libavcodec
1721      * decoder to draw a horizontal band. It improves cache usage. Not
1722      * all codecs can do that. You must check the codec capabilities
1723      * beforehand.
1724      * When multithreading is used, it may be called from multiple threads
1725      * at the same time; threads might draw different parts of the same AVFrame,
1726      * or multiple AVFrames, and there is no guarantee that slices will be drawn
1727      * in order.
1728      * The function is also used by hardware acceleration APIs.
1729      * It is called at least once during frame decoding to pass
1730      * the data needed for hardware render.
1731      * In that mode instead of pixel data, AVFrame points to
1732      * a structure specific to the acceleration API. The application
1733      * reads the structure and can change some fields to indicate progress
1734      * or mark state.
1735      * - encoding: unused
1736      * - decoding: Set by user.
1737      * @param height the height of the slice
1738      * @param y the y position of the slice
1739      * @param type 1->top field, 2->bottom field, 3->frame
1740      * @param offset offset into the AVFrame.data from which the slice should be read
1741      */
1742     void (*draw_horiz_band)(struct AVCodecContext *s,
1743                             const AVFrame *src, int offset[AV_NUM_DATA_POINTERS],
1744                             int y, int type, int height);
1745
1746     /**
1747      * callback to negotiate the pixelFormat
1748      * @param fmt is the list of formats which are supported by the codec,
1749      * it is terminated by -1 as 0 is a valid format, the formats are ordered by quality.
1750      * The first is always the native one.
1751      * @return the chosen format
1752      * - encoding: unused
1753      * - decoding: Set by user, if not set the native format will be chosen.
1754      */
1755     enum AVPixelFormat (*get_format)(struct AVCodecContext *s, const enum AVPixelFormat * fmt);
1756
1757     /**
1758      * maximum number of B-frames between non-B-frames
1759      * Note: The output will be delayed by max_b_frames+1 relative to the input.
1760      * - encoding: Set by user.
1761      * - decoding: unused
1762      */
1763     int max_b_frames;
1764
1765     /**
1766      * qscale factor between IP and B-frames
1767      * If > 0 then the last P-frame quantizer will be used (q= lastp_q*factor+offset).
1768      * If < 0 then normal ratecontrol will be done (q= -normal_q*factor+offset).
1769      * - encoding: Set by user.
1770      * - decoding: unused
1771      */
1772     float b_quant_factor;
1773
1774     /** obsolete FIXME remove */
1775     int rc_strategy;
1776 #define FF_RC_STRATEGY_XVID 1
1777
1778     int b_frame_strategy;
1779
1780 #if FF_API_MPV_GLOBAL_OPTS
1781     /**
1782      * luma single coefficient elimination threshold
1783      * - encoding: Set by user.
1784      * - decoding: unused
1785      */
1786     attribute_deprecated int luma_elim_threshold;
1787
1788     /**
1789      * chroma single coeff elimination threshold
1790      * - encoding: Set by user.
1791      * - decoding: unused
1792      */
1793     attribute_deprecated int chroma_elim_threshold;
1794 #endif
1795
1796     /**
1797      * qscale offset between IP and B-frames
1798      * - encoding: Set by user.
1799      * - decoding: unused
1800      */
1801     float b_quant_offset;
1802
1803     /**
1804      * Size of the frame reordering buffer in the decoder.
1805      * For MPEG-2 it is 1 IPB or 0 low delay IP.
1806      * - encoding: Set by libavcodec.
1807      * - decoding: Set by libavcodec.
1808      */
1809     int has_b_frames;
1810
1811     /**
1812      * 0-> h263 quant 1-> mpeg quant
1813      * - encoding: Set by user.
1814      * - decoding: unused
1815      */
1816     int mpeg_quant;
1817
1818     /**
1819      * qscale factor between P and I-frames
1820      * If > 0 then the last p frame quantizer will be used (q= lastp_q*factor+offset).
1821      * If < 0 then normal ratecontrol will be done (q= -normal_q*factor+offset).
1822      * - encoding: Set by user.
1823      * - decoding: unused
1824      */
1825     float i_quant_factor;
1826
1827     /**
1828      * qscale offset between P and I-frames
1829      * - encoding: Set by user.
1830      * - decoding: unused
1831      */
1832     float i_quant_offset;
1833
1834     /**
1835      * luminance masking (0-> disabled)
1836      * - encoding: Set by user.
1837      * - decoding: unused
1838      */
1839     float lumi_masking;
1840
1841     /**
1842      * temporary complexity masking (0-> disabled)
1843      * - encoding: Set by user.
1844      * - decoding: unused
1845      */
1846     float temporal_cplx_masking;
1847
1848     /**
1849      * spatial complexity masking (0-> disabled)
1850      * - encoding: Set by user.
1851      * - decoding: unused
1852      */
1853     float spatial_cplx_masking;
1854
1855     /**
1856      * p block masking (0-> disabled)
1857      * - encoding: Set by user.
1858      * - decoding: unused
1859      */
1860     float p_masking;
1861
1862     /**
1863      * darkness masking (0-> disabled)
1864      * - encoding: Set by user.
1865      * - decoding: unused
1866      */
1867     float dark_masking;
1868
1869     /**
1870      * slice count
1871      * - encoding: Set by libavcodec.
1872      * - decoding: Set by user (or 0).
1873      */
1874     int slice_count;
1875     /**
1876      * prediction method (needed for huffyuv)
1877      * - encoding: Set by user.
1878      * - decoding: unused
1879      */
1880      int prediction_method;
1881 #define FF_PRED_LEFT   0
1882 #define FF_PRED_PLANE  1
1883 #define FF_PRED_MEDIAN 2
1884
1885     /**
1886      * slice offsets in the frame in bytes
1887      * - encoding: Set/allocated by libavcodec.
1888      * - decoding: Set/allocated by user (or NULL).
1889      */
1890     int *slice_offset;
1891
1892     /**
1893      * sample aspect ratio (0 if unknown)
1894      * That is the width of a pixel divided by the height of the pixel.
1895      * Numerator and denominator must be relatively prime and smaller than 256 for some video standards.
1896      * - encoding: Set by user.
1897      * - decoding: Set by libavcodec.
1898      */
1899     AVRational sample_aspect_ratio;
1900
1901     /**
1902      * motion estimation comparison function
1903      * - encoding: Set by user.
1904      * - decoding: unused
1905      */
1906     int me_cmp;
1907     /**
1908      * subpixel motion estimation comparison function
1909      * - encoding: Set by user.
1910      * - decoding: unused
1911      */
1912     int me_sub_cmp;
1913     /**
1914      * macroblock comparison function (not supported yet)
1915      * - encoding: Set by user.
1916      * - decoding: unused
1917      */
1918     int mb_cmp;
1919     /**
1920      * interlaced DCT comparison function
1921      * - encoding: Set by user.
1922      * - decoding: unused
1923      */
1924     int ildct_cmp;
1925 #define FF_CMP_SAD    0
1926 #define FF_CMP_SSE    1
1927 #define FF_CMP_SATD   2
1928 #define FF_CMP_DCT    3
1929 #define FF_CMP_PSNR   4
1930 #define FF_CMP_BIT    5
1931 #define FF_CMP_RD     6
1932 #define FF_CMP_ZERO   7
1933 #define FF_CMP_VSAD   8
1934 #define FF_CMP_VSSE   9
1935 #define FF_CMP_NSSE   10
1936 #define FF_CMP_W53    11
1937 #define FF_CMP_W97    12
1938 #define FF_CMP_DCTMAX 13
1939 #define FF_CMP_DCT264 14
1940 #define FF_CMP_CHROMA 256
1941
1942     /**
1943      * ME diamond size & shape
1944      * - encoding: Set by user.
1945      * - decoding: unused
1946      */
1947     int dia_size;
1948
1949     /**
1950      * amount of previous MV predictors (2a+1 x 2a+1 square)
1951      * - encoding: Set by user.
1952      * - decoding: unused
1953      */
1954     int last_predictor_count;
1955
1956     /**
1957      * prepass for motion estimation
1958      * - encoding: Set by user.
1959      * - decoding: unused
1960      */
1961     int pre_me;
1962
1963     /**
1964      * motion estimation prepass comparison function
1965      * - encoding: Set by user.
1966      * - decoding: unused
1967      */
1968     int me_pre_cmp;
1969
1970     /**
1971      * ME prepass diamond size & shape
1972      * - encoding: Set by user.
1973      * - decoding: unused
1974      */
1975     int pre_dia_size;
1976
1977     /**
1978      * subpel ME quality
1979      * - encoding: Set by user.
1980      * - decoding: unused
1981      */
1982     int me_subpel_quality;
1983
1984     /**
1985      * DTG active format information (additional aspect ratio
1986      * information only used in DVB MPEG-2 transport streams)
1987      * 0 if not set.
1988      *
1989      * - encoding: unused
1990      * - decoding: Set by decoder.
1991      */
1992     int dtg_active_format;
1993 #define FF_DTG_AFD_SAME         8
1994 #define FF_DTG_AFD_4_3          9
1995 #define FF_DTG_AFD_16_9         10
1996 #define FF_DTG_AFD_14_9         11
1997 #define FF_DTG_AFD_4_3_SP_14_9  13
1998 #define FF_DTG_AFD_16_9_SP_14_9 14
1999 #define FF_DTG_AFD_SP_4_3       15
2000
2001     /**
2002      * maximum motion estimation search range in subpel units
2003      * If 0 then no limit.
2004      *
2005      * - encoding: Set by user.
2006      * - decoding: unused
2007      */
2008     int me_range;
2009
2010     /**
2011      * intra quantizer bias
2012      * - encoding: Set by user.
2013      * - decoding: unused
2014      */
2015     int intra_quant_bias;
2016 #define FF_DEFAULT_QUANT_BIAS 999999
2017
2018     /**
2019      * inter quantizer bias
2020      * - encoding: Set by user.
2021      * - decoding: unused
2022      */
2023     int inter_quant_bias;
2024
2025 #if FF_API_COLOR_TABLE_ID
2026     /**
2027      * color table ID
2028      * - encoding: unused
2029      * - decoding: Which clrtable should be used for 8bit RGB images.
2030      *             Tables have to be stored somewhere. FIXME
2031      */
2032     attribute_deprecated int color_table_id;
2033 #endif
2034
2035     /**
2036      * slice flags
2037      * - encoding: unused
2038      * - decoding: Set by user.
2039      */
2040     int slice_flags;
2041 #define SLICE_FLAG_CODED_ORDER    0x0001 ///< draw_horiz_band() is called in coded order instead of display
2042 #define SLICE_FLAG_ALLOW_FIELD    0x0002 ///< allow draw_horiz_band() with field slices (MPEG2 field pics)
2043 #define SLICE_FLAG_ALLOW_PLANE    0x0004 ///< allow draw_horiz_band() with 1 component at a time (SVQ1)
2044
2045     /**
2046      * XVideo Motion Acceleration
2047      * - encoding: forbidden
2048      * - decoding: set by decoder
2049      */
2050     int xvmc_acceleration;
2051
2052     /**
2053      * macroblock decision mode
2054      * - encoding: Set by user.
2055      * - decoding: unused
2056      */
2057     int mb_decision;
2058 #define FF_MB_DECISION_SIMPLE 0        ///< uses mb_cmp
2059 #define FF_MB_DECISION_BITS   1        ///< chooses the one which needs the fewest bits
2060 #define FF_MB_DECISION_RD     2        ///< rate distortion
2061
2062     /**
2063      * custom intra quantization matrix
2064      * - encoding: Set by user, can be NULL.
2065      * - decoding: Set by libavcodec.
2066      */
2067     uint16_t *intra_matrix;
2068
2069     /**
2070      * custom inter quantization matrix
2071      * - encoding: Set by user, can be NULL.
2072      * - decoding: Set by libavcodec.
2073      */
2074     uint16_t *inter_matrix;
2075
2076     /**
2077      * scene change detection threshold
2078      * 0 is default, larger means fewer detected scene changes.
2079      * - encoding: Set by user.
2080      * - decoding: unused
2081      */
2082     int scenechange_threshold;
2083
2084     /**
2085      * noise reduction strength
2086      * - encoding: Set by user.
2087      * - decoding: unused
2088      */
2089     int noise_reduction;
2090
2091 #if FF_API_INTER_THRESHOLD
2092     /**
2093      * @deprecated this field is unused
2094      */
2095     attribute_deprecated int inter_threshold;
2096 #endif
2097
2098 #if FF_API_MPV_GLOBAL_OPTS
2099     /**
2100      * @deprecated use mpegvideo private options instead
2101      */
2102     attribute_deprecated int quantizer_noise_shaping;
2103 #endif
2104
2105     /**
2106      * Motion estimation threshold below which no motion estimation is
2107      * performed, but instead the user specified motion vectors are used.
2108      *
2109      * - encoding: Set by user.
2110      * - decoding: unused
2111      */
2112     int me_threshold;
2113
2114     /**
2115      * Macroblock threshold below which the user specified macroblock types will be used.
2116      * - encoding: Set by user.
2117      * - decoding: unused
2118      */
2119     int mb_threshold;
2120
2121     /**
2122      * precision of the intra DC coefficient - 8
2123      * - encoding: Set by user.
2124      * - decoding: unused
2125      */
2126     int intra_dc_precision;
2127
2128     /**
2129      * Number of macroblock rows at the top which are skipped.
2130      * - encoding: unused
2131      * - decoding: Set by user.
2132      */
2133     int skip_top;
2134
2135     /**
2136      * Number of macroblock rows at the bottom which are skipped.
2137      * - encoding: unused
2138      * - decoding: Set by user.
2139      */
2140     int skip_bottom;
2141
2142     /**
2143      * Border processing masking, raises the quantizer for mbs on the borders
2144      * of the picture.
2145      * - encoding: Set by user.
2146      * - decoding: unused
2147      */
2148     float border_masking;
2149
2150     /**
2151      * minimum MB lagrange multipler
2152      * - encoding: Set by user.
2153      * - decoding: unused
2154      */
2155     int mb_lmin;
2156
2157     /**
2158      * maximum MB lagrange multipler
2159      * - encoding: Set by user.
2160      * - decoding: unused
2161      */
2162     int mb_lmax;
2163
2164     /**
2165      *
2166      * - encoding: Set by user.
2167      * - decoding: unused
2168      */
2169     int me_penalty_compensation;
2170
2171     /**
2172      *
2173      * - encoding: Set by user.
2174      * - decoding: unused
2175      */
2176     int bidir_refine;
2177
2178     /**
2179      *
2180      * - encoding: Set by user.
2181      * - decoding: unused
2182      */
2183     int brd_scale;
2184
2185     /**
2186      * minimum GOP size
2187      * - encoding: Set by user.
2188      * - decoding: unused
2189      */
2190     int keyint_min;
2191
2192     /**
2193      * number of reference frames
2194      * - encoding: Set by user.
2195      * - decoding: Set by lavc.
2196      */
2197     int refs;
2198
2199     /**
2200      * chroma qp offset from luma
2201      * - encoding: Set by user.
2202      * - decoding: unused
2203      */
2204     int chromaoffset;
2205
2206     /**
2207      * Multiplied by qscale for each frame and added to scene_change_score.
2208      * - encoding: Set by user.
2209      * - decoding: unused
2210      */
2211     int scenechange_factor;
2212
2213     /**
2214      *
2215      * Note: Value depends upon the compare function used for fullpel ME.
2216      * - encoding: Set by user.
2217      * - decoding: unused
2218      */
2219     int mv0_threshold;
2220
2221     /**
2222      * Adjust sensitivity of b_frame_strategy 1.
2223      * - encoding: Set by user.
2224      * - decoding: unused
2225      */
2226     int b_sensitivity;
2227
2228     /**
2229      * Chromaticity coordinates of the source primaries.
2230      * - encoding: Set by user
2231      * - decoding: Set by libavcodec
2232      */
2233     enum AVColorPrimaries color_primaries;
2234
2235     /**
2236      * Color Transfer Characteristic.
2237      * - encoding: Set by user
2238      * - decoding: Set by libavcodec
2239      */
2240     enum AVColorTransferCharacteristic color_trc;
2241
2242     /**
2243      * YUV colorspace type.
2244      * - encoding: Set by user
2245      * - decoding: Set by libavcodec
2246      */
2247     enum AVColorSpace colorspace;
2248
2249     /**
2250      * MPEG vs JPEG YUV range.
2251      * - encoding: Set by user
2252      * - decoding: Set by libavcodec
2253      */
2254     enum AVColorRange color_range;
2255
2256     /**
2257      * This defines the location of chroma samples.
2258      * - encoding: Set by user
2259      * - decoding: Set by libavcodec
2260      */
2261     enum AVChromaLocation chroma_sample_location;
2262
2263     /**
2264      * Number of slices.
2265      * Indicates number of picture subdivisions. Used for parallelized
2266      * decoding.
2267      * - encoding: Set by user
2268      * - decoding: unused
2269      */
2270     int slices;
2271
2272     /** Field order
2273      * - encoding: set by libavcodec
2274      * - decoding: Set by user.
2275      */
2276     enum AVFieldOrder field_order;
2277
2278     /* audio only */
2279     int sample_rate; ///< samples per second
2280     int channels;    ///< number of audio channels
2281
2282     /**
2283      * audio sample format
2284      * - encoding: Set by user.
2285      * - decoding: Set by libavcodec.
2286      */
2287     enum AVSampleFormat sample_fmt;  ///< sample format
2288
2289     /* The following data should not be initialized. */
2290     /**
2291      * Number of samples per channel in an audio frame.
2292      *
2293      * - encoding: set by libavcodec in avcodec_open2(). Each submitted frame
2294      *   except the last must contain exactly frame_size samples per channel.
2295      *   May be 0 when the codec has CODEC_CAP_VARIABLE_FRAME_SIZE set, then the
2296      *   frame size is not restricted.
2297      * - decoding: may be set by some decoders to indicate constant frame size
2298      */
2299     int frame_size;
2300
2301     /**
2302      * Frame counter, set by libavcodec.
2303      *
2304      * - decoding: total number of frames returned from the decoder so far.
2305      * - encoding: total number of frames passed to the encoder so far.
2306      *
2307      *   @note the counter is not incremented if encoding/decoding resulted in
2308      *   an error.
2309      */
2310     int frame_number;
2311
2312     /**
2313      * number of bytes per packet if constant and known or 0
2314      * Used by some WAV based audio codecs.
2315      */
2316     int block_align;
2317
2318     /**
2319      * Audio cutoff bandwidth (0 means "automatic")
2320      * - encoding: Set by user.
2321      * - decoding: unused
2322      */
2323     int cutoff;
2324
2325 #if FF_API_REQUEST_CHANNELS
2326     /**
2327      * Decoder should decode to this many channels if it can (0 for default)
2328      * - encoding: unused
2329      * - decoding: Set by user.
2330      * @deprecated Deprecated in favor of request_channel_layout.
2331      */
2332     int request_channels;
2333 #endif
2334
2335     /**
2336      * Audio channel layout.
2337      * - encoding: set by user.
2338      * - decoding: set by user, may be overwritten by libavcodec.
2339      */
2340     uint64_t channel_layout;
2341
2342     /**
2343      * Request decoder to use this channel layout if it can (0 for default)
2344      * - encoding: unused
2345      * - decoding: Set by user.
2346      */
2347     uint64_t request_channel_layout;
2348
2349     /**
2350      * Type of service that the audio stream conveys.
2351      * - encoding: Set by user.
2352      * - decoding: Set by libavcodec.
2353      */
2354     enum AVAudioServiceType audio_service_type;
2355
2356     /**
2357      * desired sample format
2358      * - encoding: Not used.
2359      * - decoding: Set by user.
2360      * Decoder will decode to this format if it can.
2361      */
2362     enum AVSampleFormat request_sample_fmt;
2363
2364     /**
2365      * Called at the beginning of each frame to get a buffer for it.
2366      *
2367      * The function will set AVFrame.data[], AVFrame.linesize[].
2368      * AVFrame.extended_data[] must also be set, but it should be the same as
2369      * AVFrame.data[] except for planar audio with more channels than can fit
2370      * in AVFrame.data[]. In that case, AVFrame.data[] shall still contain as
2371      * many data pointers as it can hold.
2372      *
2373      * if CODEC_CAP_DR1 is not set then get_buffer() must call
2374      * avcodec_default_get_buffer() instead of providing buffers allocated by
2375      * some other means.
2376      *
2377      * AVFrame.data[] should be 32- or 16-byte-aligned unless the CPU doesn't
2378      * need it. avcodec_default_get_buffer() aligns the output buffer properly,
2379      * but if get_buffer() is overridden then alignment considerations should
2380      * be taken into account.
2381      *
2382      * @see avcodec_default_get_buffer()
2383      *
2384      * Video:
2385      *
2386      * If pic.reference is set then the frame will be read later by libavcodec.
2387      * avcodec_align_dimensions2() should be used to find the required width and
2388      * height, as they normally need to be rounded up to the next multiple of 16.
2389      *
2390      * If frame multithreading is used and thread_safe_callbacks is set,
2391      * it may be called from a different thread, but not from more than one at
2392      * once. Does not need to be reentrant.
2393      *
2394      * @see release_buffer(), reget_buffer()
2395      * @see avcodec_align_dimensions2()
2396      *
2397      * Audio:
2398      *
2399      * Decoders request a buffer of a particular size by setting
2400      * AVFrame.nb_samples prior to calling get_buffer(). The decoder may,
2401      * however, utilize only part of the buffer by setting AVFrame.nb_samples
2402      * to a smaller value in the output frame.
2403      *
2404      * Decoders cannot use the buffer after returning from
2405      * avcodec_decode_audio4(), so they will not call release_buffer(), as it
2406      * is assumed to be released immediately upon return.
2407      *
2408      * As a convenience, av_samples_get_buffer_size() and
2409      * av_samples_fill_arrays() in libavutil may be used by custom get_buffer()
2410      * functions to find the required data size and to fill data pointers and
2411      * linesize. In AVFrame.linesize, only linesize[0] may be set for audio
2412      * since all planes must be the same size.
2413      *
2414      * @see av_samples_get_buffer_size(), av_samples_fill_arrays()
2415      *
2416      * - encoding: unused
2417      * - decoding: Set by libavcodec, user can override.
2418      */
2419     int (*get_buffer)(struct AVCodecContext *c, AVFrame *pic);
2420
2421     /**
2422      * Called to release buffers which were allocated with get_buffer.
2423      * A released buffer can be reused in get_buffer().
2424      * pic.data[*] must be set to NULL.
2425      * May be called from a different thread if frame multithreading is used,
2426      * but not by more than one thread at once, so does not need to be reentrant.
2427      * - encoding: unused
2428      * - decoding: Set by libavcodec, user can override.
2429      */
2430     void (*release_buffer)(struct AVCodecContext *c, AVFrame *pic);
2431
2432     /**
2433      * Called at the beginning of a frame to get cr buffer for it.
2434      * Buffer type (size, hints) must be the same. libavcodec won't check it.
2435      * libavcodec will pass previous buffer in pic, function should return
2436      * same buffer or new buffer with old frame "painted" into it.
2437      * If pic.data[0] == NULL must behave like get_buffer().
2438      * if CODEC_CAP_DR1 is not set then reget_buffer() must call
2439      * avcodec_default_reget_buffer() instead of providing buffers allocated by
2440      * some other means.
2441      * - encoding: unused
2442      * - decoding: Set by libavcodec, user can override.
2443      */
2444     int (*reget_buffer)(struct AVCodecContext *c, AVFrame *pic);
2445
2446
2447     /* - encoding parameters */
2448     float qcompress;  ///< amount of qscale change between easy & hard scenes (0.0-1.0)
2449     float qblur;      ///< amount of qscale smoothing over time (0.0-1.0)
2450
2451     /**
2452      * minimum quantizer
2453      * - encoding: Set by user.
2454      * - decoding: unused
2455      */
2456     int qmin;
2457
2458     /**
2459      * maximum quantizer
2460      * - encoding: Set by user.
2461      * - decoding: unused
2462      */
2463     int qmax;
2464
2465     /**
2466      * maximum quantizer difference between frames
2467      * - encoding: Set by user.
2468      * - decoding: unused
2469      */
2470     int max_qdiff;
2471
2472     /**
2473      * ratecontrol qmin qmax limiting method
2474      * 0-> clipping, 1-> use a nice continuous function to limit qscale wthin qmin/qmax.
2475      * - encoding: Set by user.
2476      * - decoding: unused
2477      */
2478     float rc_qsquish;
2479
2480     float rc_qmod_amp;
2481     int rc_qmod_freq;
2482
2483     /**
2484      * decoder bitstream buffer size
2485      * - encoding: Set by user.
2486      * - decoding: unused
2487      */
2488     int rc_buffer_size;
2489
2490     /**
2491      * ratecontrol override, see RcOverride
2492      * - encoding: Allocated/set/freed by user.
2493      * - decoding: unused
2494      */
2495     int rc_override_count;
2496     RcOverride *rc_override;
2497
2498     /**
2499      * rate control equation
2500      * - encoding: Set by user
2501      * - decoding: unused
2502      */
2503     const char *rc_eq;
2504
2505     /**
2506      * maximum bitrate
2507      * - encoding: Set by user.
2508      * - decoding: unused
2509      */
2510     int rc_max_rate;
2511
2512     /**
2513      * minimum bitrate
2514      * - encoding: Set by user.
2515      * - decoding: unused
2516      */
2517     int rc_min_rate;
2518
2519     float rc_buffer_aggressivity;
2520
2521     /**
2522      * initial complexity for pass1 ratecontrol
2523      * - encoding: Set by user.
2524      * - decoding: unused
2525      */
2526     float rc_initial_cplx;
2527
2528     /**
2529      * Ratecontrol attempt to use, at maximum, <value> of what can be used without an underflow.
2530      * - encoding: Set by user.
2531      * - decoding: unused.
2532      */
2533     float rc_max_available_vbv_use;
2534
2535     /**
2536      * Ratecontrol attempt to use, at least, <value> times the amount needed to prevent a vbv overflow.
2537      * - encoding: Set by user.
2538      * - decoding: unused.
2539      */
2540     float rc_min_vbv_overflow_use;
2541
2542     /**
2543      * Number of bits which should be loaded into the rc buffer before decoding starts.
2544      * - encoding: Set by user.
2545      * - decoding: unused
2546      */
2547     int rc_initial_buffer_occupancy;
2548
2549 #define FF_CODER_TYPE_VLC       0
2550 #define FF_CODER_TYPE_AC        1
2551 #define FF_CODER_TYPE_RAW       2
2552 #define FF_CODER_TYPE_RLE       3
2553 #define FF_CODER_TYPE_DEFLATE   4
2554     /**
2555      * coder type
2556      * - encoding: Set by user.
2557      * - decoding: unused
2558      */
2559     int coder_type;
2560
2561     /**
2562      * context model
2563      * - encoding: Set by user.
2564      * - decoding: unused
2565      */
2566     int context_model;
2567
2568     /**
2569      * minimum Lagrange multipler
2570      * - encoding: Set by user.
2571      * - decoding: unused
2572      */
2573     int lmin;
2574
2575     /**
2576      * maximum Lagrange multipler
2577      * - encoding: Set by user.
2578      * - decoding: unused
2579      */
2580     int lmax;
2581
2582     /**
2583      * frame skip threshold
2584      * - encoding: Set by user.
2585      * - decoding: unused
2586      */
2587     int frame_skip_threshold;
2588
2589     /**
2590      * frame skip factor
2591      * - encoding: Set by user.
2592      * - decoding: unused
2593      */
2594     int frame_skip_factor;
2595
2596     /**
2597      * frame skip exponent
2598      * - encoding: Set by user.
2599      * - decoding: unused
2600      */
2601     int frame_skip_exp;
2602
2603     /**
2604      * frame skip comparison function
2605      * - encoding: Set by user.
2606      * - decoding: unused
2607      */
2608     int frame_skip_cmp;
2609
2610     /**
2611      * trellis RD quantization
2612      * - encoding: Set by user.
2613      * - decoding: unused
2614      */
2615     int trellis;
2616
2617     /**
2618      * - encoding: Set by user.
2619      * - decoding: unused
2620      */
2621     int min_prediction_order;
2622
2623     /**
2624      * - encoding: Set by user.
2625      * - decoding: unused
2626      */
2627     int max_prediction_order;
2628
2629     /**
2630      * GOP timecode frame start number
2631      * - encoding: Set by user, in non drop frame format
2632      * - decoding: Set by libavcodec (timecode in the 25 bits format, -1 if unset)
2633      */
2634     int64_t timecode_frame_start;
2635
2636     /* The RTP callback: This function is called    */
2637     /* every time the encoder has a packet to send. */
2638     /* It depends on the encoder if the data starts */
2639     /* with a Start Code (it should). H.263 does.   */
2640     /* mb_nb contains the number of macroblocks     */
2641     /* encoded in the RTP payload.                  */
2642     void (*rtp_callback)(struct AVCodecContext *avctx, void *data, int size, int mb_nb);
2643
2644     int rtp_payload_size;   /* The size of the RTP payload: the coder will  */
2645                             /* do its best to deliver a chunk with size     */
2646                             /* below rtp_payload_size, the chunk will start */
2647                             /* with a start code on some codecs like H.263. */
2648                             /* This doesn't take account of any particular  */
2649                             /* headers inside the transmitted RTP payload.  */
2650
2651     /* statistics, used for 2-pass encoding */
2652     int mv_bits;
2653     int header_bits;
2654     int i_tex_bits;
2655     int p_tex_bits;
2656     int i_count;
2657     int p_count;
2658     int skip_count;
2659     int misc_bits;
2660
2661     /**
2662      * number of bits used for the previously encoded frame
2663      * - encoding: Set by libavcodec.
2664      * - decoding: unused
2665      */
2666     int frame_bits;
2667
2668     /**
2669      * pass1 encoding statistics output buffer
2670      * - encoding: Set by libavcodec.
2671      * - decoding: unused
2672      */
2673     char *stats_out;
2674
2675     /**
2676      * pass2 encoding statistics input buffer
2677      * Concatenated stuff from stats_out of pass1 should be placed here.
2678      * - encoding: Allocated/set/freed by user.
2679      * - decoding: unused
2680      */
2681     char *stats_in;
2682
2683     /**
2684      * Work around bugs in encoders which sometimes cannot be detected automatically.
2685      * - encoding: Set by user
2686      * - decoding: Set by user
2687      */
2688     int workaround_bugs;
2689 #define FF_BUG_AUTODETECT       1  ///< autodetection
2690 #define FF_BUG_OLD_MSMPEG4      2
2691 #define FF_BUG_XVID_ILACE       4
2692 #define FF_BUG_UMP4             8
2693 #define FF_BUG_NO_PADDING       16
2694 #define FF_BUG_AMV              32
2695 #define FF_BUG_AC_VLC           0  ///< Will be removed, libavcodec can now handle these non-compliant files by default.
2696 #define FF_BUG_QPEL_CHROMA      64
2697 #define FF_BUG_STD_QPEL         128
2698 #define FF_BUG_QPEL_CHROMA2     256
2699 #define FF_BUG_DIRECT_BLOCKSIZE 512
2700 #define FF_BUG_EDGE             1024
2701 #define FF_BUG_HPEL_CHROMA      2048
2702 #define FF_BUG_DC_CLIP          4096
2703 #define FF_BUG_MS               8192 ///< Work around various bugs in Microsoft's broken decoders.
2704 #define FF_BUG_TRUNCATED       16384
2705
2706     /**
2707      * strictly follow the standard (MPEG4, ...).
2708      * - encoding: Set by user.
2709      * - decoding: Set by user.
2710      * Setting this to STRICT or higher means the encoder and decoder will
2711      * generally do stupid things, whereas setting it to unofficial or lower
2712      * will mean the encoder might produce output that is not supported by all
2713      * spec-compliant decoders. Decoders don't differentiate between normal,
2714      * unofficial and experimental (that is, they always try to decode things
2715      * when they can) unless they are explicitly asked to behave stupidly
2716      * (=strictly conform to the specs)
2717      */
2718     int strict_std_compliance;
2719 #define FF_COMPLIANCE_VERY_STRICT   2 ///< Strictly conform to an older more strict version of the spec or reference software.
2720 #define FF_COMPLIANCE_STRICT        1 ///< Strictly conform to all the things in the spec no matter what consequences.
2721 #define FF_COMPLIANCE_NORMAL        0
2722 #define FF_COMPLIANCE_UNOFFICIAL   -1 ///< Allow unofficial extensions
2723 #define FF_COMPLIANCE_EXPERIMENTAL -2 ///< Allow nonstandardized experimental things.
2724
2725     /**
2726      * error concealment flags
2727      * - encoding: unused
2728      * - decoding: Set by user.
2729      */
2730     int error_concealment;
2731 #define FF_EC_GUESS_MVS   1
2732 #define FF_EC_DEBLOCK     2
2733
2734     /**
2735      * debug
2736      * - encoding: Set by user.
2737      * - decoding: Set by user.
2738      */
2739     int debug;
2740 #define FF_DEBUG_PICT_INFO   1
2741 #define FF_DEBUG_RC          2
2742 #define FF_DEBUG_BITSTREAM   4
2743 #define FF_DEBUG_MB_TYPE     8
2744 #define FF_DEBUG_QP          16
2745 #define FF_DEBUG_MV          32
2746 #define FF_DEBUG_DCT_COEFF   0x00000040
2747 #define FF_DEBUG_SKIP        0x00000080
2748 #define FF_DEBUG_STARTCODE   0x00000100
2749 #define FF_DEBUG_PTS         0x00000200
2750 #define FF_DEBUG_ER          0x00000400
2751 #define FF_DEBUG_MMCO        0x00000800
2752 #define FF_DEBUG_BUGS        0x00001000
2753 #define FF_DEBUG_VIS_QP      0x00002000
2754 #define FF_DEBUG_VIS_MB_TYPE 0x00004000
2755 #define FF_DEBUG_BUFFERS     0x00008000
2756 #define FF_DEBUG_THREADS     0x00010000
2757
2758     /**
2759      * debug
2760      * - encoding: Set by user.
2761      * - decoding: Set by user.
2762      */
2763     int debug_mv;
2764 #define FF_DEBUG_VIS_MV_P_FOR  0x00000001 //visualize forward predicted MVs of P frames
2765 #define FF_DEBUG_VIS_MV_B_FOR  0x00000002 //visualize forward predicted MVs of B frames
2766 #define FF_DEBUG_VIS_MV_B_BACK 0x00000004 //visualize backward predicted MVs of B frames
2767
2768     /**
2769      * Error recognition; may misdetect some more or less valid parts as errors.
2770      * - encoding: unused
2771      * - decoding: Set by user.
2772      */
2773     int err_recognition;
2774 #define AV_EF_CRCCHECK  (1<<0)
2775 #define AV_EF_BITSTREAM (1<<1)
2776 #define AV_EF_BUFFER    (1<<2)
2777 #define AV_EF_EXPLODE   (1<<3)
2778
2779 #define AV_EF_CAREFUL    (1<<16)
2780 #define AV_EF_COMPLIANT  (1<<17)
2781 #define AV_EF_AGGRESSIVE (1<<18)
2782
2783
2784     /**
2785      * opaque 64bit number (generally a PTS) that will be reordered and
2786      * output in AVFrame.reordered_opaque
2787      * @deprecated in favor of pkt_pts
2788      * - encoding: unused
2789      * - decoding: Set by user.
2790      */
2791     int64_t reordered_opaque;
2792
2793     /**
2794      * Hardware accelerator in use
2795      * - encoding: unused.
2796      * - decoding: Set by libavcodec
2797      */
2798     struct AVHWAccel *hwaccel;
2799
2800     /**
2801      * Hardware accelerator context.
2802      * For some hardware accelerators, a global context needs to be
2803      * provided by the user. In that case, this holds display-dependent
2804      * data FFmpeg cannot instantiate itself. Please refer to the
2805      * FFmpeg HW accelerator documentation to know how to fill this
2806      * is. e.g. for VA API, this is a struct vaapi_context.
2807      * - encoding: unused
2808      * - decoding: Set by user
2809      */
2810     void *hwaccel_context;
2811
2812     /**
2813      * error
2814      * - encoding: Set by libavcodec if flags&CODEC_FLAG_PSNR.
2815      * - decoding: unused
2816      */
2817     uint64_t error[AV_NUM_DATA_POINTERS];
2818
2819     /**
2820      * DCT algorithm, see FF_DCT_* below
2821      * - encoding: Set by user.
2822      * - decoding: unused
2823      */
2824     int dct_algo;
2825 #define FF_DCT_AUTO    0
2826 #define FF_DCT_FASTINT 1
2827 #define FF_DCT_INT     2
2828 #define FF_DCT_MMX     3
2829 #define FF_DCT_ALTIVEC 5
2830 #define FF_DCT_FAAN    6
2831
2832     /**
2833      * IDCT algorithm, see FF_IDCT_* below.
2834      * - encoding: Set by user.
2835      * - decoding: Set by user.
2836      */
2837     int idct_algo;
2838 #define FF_IDCT_AUTO          0
2839 #define FF_IDCT_INT           1
2840 #define FF_IDCT_SIMPLE        2
2841 #define FF_IDCT_SIMPLEMMX     3
2842 #define FF_IDCT_LIBMPEG2MMX   4
2843 #if FF_API_MMI
2844 #define FF_IDCT_MMI           5
2845 #endif
2846 #define FF_IDCT_ARM           7
2847 #define FF_IDCT_ALTIVEC       8
2848 #define FF_IDCT_SH4           9
2849 #define FF_IDCT_SIMPLEARM     10
2850 #define FF_IDCT_H264          11
2851 #define FF_IDCT_VP3           12
2852 #define FF_IDCT_IPP           13
2853 #define FF_IDCT_XVIDMMX       14
2854 #define FF_IDCT_CAVS          15
2855 #define FF_IDCT_SIMPLEARMV5TE 16
2856 #define FF_IDCT_SIMPLEARMV6   17
2857 #define FF_IDCT_SIMPLEVIS     18
2858 #define FF_IDCT_WMV2          19
2859 #define FF_IDCT_FAAN          20
2860 #define FF_IDCT_EA            21
2861 #define FF_IDCT_SIMPLENEON    22
2862 #define FF_IDCT_SIMPLEALPHA   23
2863 #define FF_IDCT_BINK          24
2864
2865 #if FF_API_DSP_MASK
2866     /**
2867      * Unused.
2868      * @deprecated use av_set_cpu_flags_mask() instead.
2869      */
2870     attribute_deprecated unsigned dsp_mask;
2871 #endif
2872
2873     /**
2874      * bits per sample/pixel from the demuxer (needed for huffyuv).
2875      * - encoding: Set by libavcodec.
2876      * - decoding: Set by user.
2877      */
2878      int bits_per_coded_sample;
2879
2880     /**
2881      * Bits per sample/pixel of internal libavcodec pixel/sample format.
2882      * - encoding: set by user.
2883      * - decoding: set by libavcodec.
2884      */
2885     int bits_per_raw_sample;
2886
2887     /**
2888      * low resolution decoding, 1-> 1/2 size, 2->1/4 size
2889      * - encoding: unused
2890      * - decoding: Set by user.
2891      */
2892      int lowres;
2893
2894     /**
2895      * the picture in the bitstream
2896      * - encoding: Set by libavcodec.
2897      * - decoding: Set by libavcodec.
2898      */
2899     AVFrame *coded_frame;
2900
2901     /**
2902      * thread count
2903      * is used to decide how many independent tasks should be passed to execute()
2904      * - encoding: Set by user.
2905      * - decoding: Set by user.
2906      */
2907     int thread_count;
2908
2909     /**
2910      * Which multithreading methods to use.
2911      * Use of FF_THREAD_FRAME will increase decoding delay by one frame per thread,
2912      * so clients which cannot provide future frames should not use it.
2913      *
2914      * - encoding: Set by user, otherwise the default is used.
2915      * - decoding: Set by user, otherwise the default is used.
2916      */
2917     int thread_type;
2918 #define FF_THREAD_FRAME   1 ///< Decode more than one frame at once
2919 #define FF_THREAD_SLICE   2 ///< Decode more than one part of a single frame at once
2920
2921     /**
2922      * Which multithreading methods are in use by the codec.
2923      * - encoding: Set by libavcodec.
2924      * - decoding: Set by libavcodec.
2925      */
2926     int active_thread_type;
2927
2928     /**
2929      * Set by the client if its custom get_buffer() callback can be called
2930      * synchronously from another thread, which allows faster multithreaded decoding.
2931      * draw_horiz_band() will be called from other threads regardless of this setting.
2932      * Ignored if the default get_buffer() is used.
2933      * - encoding: Set by user.
2934      * - decoding: Set by user.
2935      */
2936     int thread_safe_callbacks;
2937
2938     /**
2939      * The codec may call this to execute several independent things.
2940      * It will return only after finishing all tasks.
2941      * The user may replace this with some multithreaded implementation,
2942      * the default implementation will execute the parts serially.
2943      * @param count the number of things to execute
2944      * - encoding: Set by libavcodec, user can override.
2945      * - decoding: Set by libavcodec, user can override.
2946      */
2947     int (*execute)(struct AVCodecContext *c, int (*func)(struct AVCodecContext *c2, void *arg), void *arg2, int *ret, int count, int size);
2948
2949     /**
2950      * The codec may call this to execute several independent things.
2951      * It will return only after finishing all tasks.
2952      * The user may replace this with some multithreaded implementation,
2953      * the default implementation will execute the parts serially.
2954      * Also see avcodec_thread_init and e.g. the --enable-pthread configure option.
2955      * @param c context passed also to func
2956      * @param count the number of things to execute
2957      * @param arg2 argument passed unchanged to func
2958      * @param ret return values of executed functions, must have space for "count" values. May be NULL.
2959      * @param func function that will be called count times, with jobnr from 0 to count-1.
2960      *             threadnr will be in the range 0 to c->thread_count-1 < MAX_THREADS and so that no
2961      *             two instances of func executing at the same time will have the same threadnr.
2962      * @return always 0 currently, but code should handle a future improvement where when any call to func
2963      *         returns < 0 no further calls to func may be done and < 0 is returned.
2964      * - encoding: Set by libavcodec, user can override.
2965      * - decoding: Set by libavcodec, user can override.
2966      */
2967     int (*execute2)(struct AVCodecContext *c, int (*func)(struct AVCodecContext *c2, void *arg, int jobnr, int threadnr), void *arg2, int *ret, int count);
2968
2969     /**
2970      * thread opaque
2971      * Can be used by execute() to store some per AVCodecContext stuff.
2972      * - encoding: set by execute()
2973      * - decoding: set by execute()
2974      */
2975     void *thread_opaque;
2976
2977     /**
2978      * noise vs. sse weight for the nsse comparsion function
2979      * - encoding: Set by user.
2980      * - decoding: unused
2981      */
2982      int nsse_weight;
2983
2984     /**
2985      * profile
2986      * - encoding: Set by user.
2987      * - decoding: Set by libavcodec.
2988      */
2989      int profile;
2990 #define FF_PROFILE_UNKNOWN -99
2991 #define FF_PROFILE_RESERVED -100
2992
2993 #define FF_PROFILE_AAC_MAIN 0
2994 #define FF_PROFILE_AAC_LOW  1
2995 #define FF_PROFILE_AAC_SSR  2
2996 #define FF_PROFILE_AAC_LTP  3
2997 #define FF_PROFILE_AAC_HE   4
2998 #define FF_PROFILE_AAC_HE_V2 28
2999 #define FF_PROFILE_AAC_LD   22
3000 #define FF_PROFILE_AAC_ELD  38
3001
3002 #define FF_PROFILE_DTS         20
3003 #define FF_PROFILE_DTS_ES      30
3004 #define FF_PROFILE_DTS_96_24   40
3005 #define FF_PROFILE_DTS_HD_HRA  50
3006 #define FF_PROFILE_DTS_HD_MA   60
3007
3008 #define FF_PROFILE_MPEG2_422    0
3009 #define FF_PROFILE_MPEG2_HIGH   1
3010 #define FF_PROFILE_MPEG2_SS     2
3011 #define FF_PROFILE_MPEG2_SNR_SCALABLE  3
3012 #define FF_PROFILE_MPEG2_MAIN   4
3013 #define FF_PROFILE_MPEG2_SIMPLE 5
3014
3015 #define FF_PROFILE_H264_CONSTRAINED  (1<<9)  // 8+1; constraint_set1_flag
3016 #define FF_PROFILE_H264_INTRA        (1<<11) // 8+3; constraint_set3_flag
3017
3018 #define FF_PROFILE_H264_BASELINE             66
3019 #define FF_PROFILE_H264_CONSTRAINED_BASELINE (66|FF_PROFILE_H264_CONSTRAINED)
3020 #define FF_PROFILE_H264_MAIN                 77
3021 #define FF_PROFILE_H264_EXTENDED             88
3022 #define FF_PROFILE_H264_HIGH                 100
3023 #define FF_PROFILE_H264_HIGH_10              110
3024 #define FF_PROFILE_H264_HIGH_10_INTRA        (110|FF_PROFILE_H264_INTRA)
3025 #define FF_PROFILE_H264_HIGH_422             122
3026 #define FF_PROFILE_H264_HIGH_422_INTRA       (122|FF_PROFILE_H264_INTRA)
3027 #define FF_PROFILE_H264_HIGH_444             144
3028 #define FF_PROFILE_H264_HIGH_444_PREDICTIVE  244
3029 #define FF_PROFILE_H264_HIGH_444_INTRA       (244|FF_PROFILE_H264_INTRA)
3030 #define FF_PROFILE_H264_CAVLC_444            44
3031
3032 #define FF_PROFILE_VC1_SIMPLE   0
3033 #define FF_PROFILE_VC1_MAIN     1
3034 #define FF_PROFILE_VC1_COMPLEX  2
3035 #define FF_PROFILE_VC1_ADVANCED 3
3036
3037 #define FF_PROFILE_MPEG4_SIMPLE                     0
3038 #define FF_PROFILE_MPEG4_SIMPLE_SCALABLE            1
3039 #define FF_PROFILE_MPEG4_CORE                       2
3040 #define FF_PROFILE_MPEG4_MAIN                       3
3041 #define FF_PROFILE_MPEG4_N_BIT                      4
3042 #define FF_PROFILE_MPEG4_SCALABLE_TEXTURE           5
3043 #define FF_PROFILE_MPEG4_SIMPLE_FACE_ANIMATION      6
3044 #define FF_PROFILE_MPEG4_BASIC_ANIMATED_TEXTURE     7
3045 #define FF_PROFILE_MPEG4_HYBRID                     8
3046 #define FF_PROFILE_MPEG4_ADVANCED_REAL_TIME         9
3047 #define FF_PROFILE_MPEG4_CORE_SCALABLE             10
3048 #define FF_PROFILE_MPEG4_ADVANCED_CODING           11
3049 #define FF_PROFILE_MPEG4_ADVANCED_CORE             12
3050 #define FF_PROFILE_MPEG4_ADVANCED_SCALABLE_TEXTURE 13
3051 #define FF_PROFILE_MPEG4_SIMPLE_STUDIO             14
3052 #define FF_PROFILE_MPEG4_ADVANCED_SIMPLE           15
3053
3054     /**
3055      * level
3056      * - encoding: Set by user.
3057      * - decoding: Set by libavcodec.
3058      */
3059      int level;
3060 #define FF_LEVEL_UNKNOWN -99
3061
3062     /**
3063      *
3064      * - encoding: unused
3065      * - decoding: Set by user.
3066      */
3067     enum AVDiscard skip_loop_filter;
3068
3069     /**
3070      *
3071      * - encoding: unused
3072      * - decoding: Set by user.
3073      */
3074     enum AVDiscard skip_idct;
3075
3076     /**
3077      *
3078      * - encoding: unused
3079      * - decoding: Set by user.
3080      */
3081     enum AVDiscard skip_frame;
3082
3083     /**
3084      * Header containing style information for text subtitles.
3085      * For SUBTITLE_ASS subtitle type, it should contain the whole ASS
3086      * [Script Info] and [V4+ Styles] section, plus the [Events] line and
3087      * the Format line following. It shouldn't include any Dialogue line.
3088      * - encoding: Set/allocated/freed by user (before avcodec_open2())
3089      * - decoding: Set/allocated/freed by libavcodec (by avcodec_open2())
3090      */
3091     uint8_t *subtitle_header;
3092     int subtitle_header_size;
3093
3094     /**
3095      * Simulates errors in the bitstream to test error concealment.
3096      * - encoding: Set by user.
3097      * - decoding: unused
3098      */
3099     int error_rate;
3100
3101     /**
3102      * Current packet as passed into the decoder, to avoid having
3103      * to pass the packet into every function. Currently only valid
3104      * inside lavc and get/release_buffer callbacks.
3105      * - decoding: set by avcodec_decode_*, read by get_buffer() for setting pkt_pts
3106      * - encoding: unused
3107      */
3108     AVPacket *pkt;
3109
3110     /**
3111      * VBV delay coded in the last frame (in periods of a 27 MHz clock).
3112      * Used for compliant TS muxing.
3113      * - encoding: Set by libavcodec.
3114      * - decoding: unused.
3115      */
3116     uint64_t vbv_delay;
3117
3118     /**
3119      * Timebase in which pkt_dts/pts and AVPacket.dts/pts are.
3120      * Code outside libavcodec should access this field using:
3121      * avcodec_set_pkt_timebase(avctx)
3122      * - encoding unused.
3123      * - decodimg set by user
3124      */
3125     AVRational pkt_timebase;
3126
3127     /**
3128      * AVCodecDescriptor
3129      * Code outside libavcodec should access this field using:
3130      * avcodec_get_codec_descriptior(avctx)
3131      * - encoding: unused.
3132      * - decoding: set by libavcodec.
3133      */
3134     const AVCodecDescriptor *codec_descriptor;
3135
3136     /**
3137      * Current statistics for PTS correction.
3138      * - decoding: maintained and used by libavcodec, not intended to be used by user apps
3139      * - encoding: unused
3140      */
3141     int64_t pts_correction_num_faulty_pts; /// Number of incorrect PTS values so far
3142     int64_t pts_correction_num_faulty_dts; /// Number of incorrect DTS values so far
3143     int64_t pts_correction_last_pts;       /// PTS of the last frame
3144     int64_t pts_correction_last_dts;       /// DTS of the last frame
3145
3146     /**
3147      * Current frame metadata.
3148      * - decoding: maintained and used by libavcodec, not intended to be used by user apps
3149      * - encoding: unused
3150      */
3151     AVDictionary *metadata;
3152 } AVCodecContext;
3153
3154 AVRational av_codec_get_pkt_timebase         (const AVCodecContext *avctx);
3155 void       av_codec_set_pkt_timebase         (AVCodecContext *avctx, AVRational val);
3156
3157 const AVCodecDescriptor *av_codec_get_codec_descriptor(const AVCodecContext *avctx);
3158 void                     av_codec_set_codec_descriptor(AVCodecContext *avctx, const AVCodecDescriptor *desc);
3159
3160 /**
3161  * AVProfile.
3162  */
3163 typedef struct AVProfile {
3164     int profile;
3165     const char *name; ///< short name for the profile
3166 } AVProfile;
3167
3168 typedef struct AVCodecDefault AVCodecDefault;
3169
3170 struct AVSubtitle;
3171
3172 /**
3173  * AVCodec.
3174  */
3175 typedef struct AVCodec {
3176     /**
3177      * Name of the codec implementation.
3178      * The name is globally unique among encoders and among decoders (but an
3179      * encoder and a decoder can share the same name).
3180      * This is the primary way to find a codec from the user perspective.
3181      */
3182     const char *name;
3183     /**
3184      * Descriptive name for the codec, meant to be more human readable than name.
3185      * You should use the NULL_IF_CONFIG_SMALL() macro to define it.
3186      */
3187     const char *long_name;
3188     enum AVMediaType type;
3189     enum AVCodecID id;
3190     /**
3191      * Codec capabilities.
3192      * see CODEC_CAP_*
3193      */
3194     int capabilities;
3195     const AVRational *supported_framerates; ///< array of supported framerates, or NULL if any, array is terminated by {0,0}
3196     const enum AVPixelFormat *pix_fmts;     ///< array of supported pixel formats, or NULL if unknown, array is terminated by -1
3197     const int *supported_samplerates;       ///< array of supported audio samplerates, or NULL if unknown, array is terminated by 0
3198     const enum AVSampleFormat *sample_fmts; ///< array of supported sample formats, or NULL if unknown, array is terminated by -1
3199     const uint64_t *channel_layouts;         ///< array of support channel layouts, or NULL if unknown. array is terminated by 0
3200     uint8_t max_lowres;                     ///< maximum value for lowres supported by the decoder
3201     const AVClass *priv_class;              ///< AVClass for the private context
3202     const AVProfile *profiles;              ///< array of recognized profiles, or NULL if unknown, array is terminated by {FF_PROFILE_UNKNOWN}
3203
3204     /*****************************************************************
3205      * No fields below this line are part of the public API. They
3206      * may not be used outside of libavcodec and can be changed and
3207      * removed at will.
3208      * New public fields should be added right above.
3209      *****************************************************************
3210      */
3211     int priv_data_size;
3212     struct AVCodec *next;
3213     /**
3214      * @name Frame-level threading support functions
3215      * @{
3216      */
3217     /**
3218      * If defined, called on thread contexts when they are created.
3219      * If the codec allocates writable tables in init(), re-allocate them here.
3220      * priv_data will be set to a copy of the original.
3221      */
3222     int (*init_thread_copy)(AVCodecContext *);
3223     /**
3224      * Copy necessary context variables from a previous thread context to the current one.
3225      * If not defined, the next thread will start automatically; otherwise, the codec
3226      * must call ff_thread_finish_setup().
3227      *
3228      * dst and src will (rarely) point to the same context, in which case memcpy should be skipped.
3229      */
3230     int (*update_thread_context)(AVCodecContext *dst, const AVCodecContext *src);
3231     /** @} */
3232
3233     /**
3234      * Private codec-specific defaults.
3235      */
3236     const AVCodecDefault *defaults;
3237
3238     /**
3239      * Initialize codec static data, called from avcodec_register().
3240      */
3241     void (*init_static_data)(struct AVCodec *codec);
3242
3243     int (*init)(AVCodecContext *);
3244     int (*encode_sub)(AVCodecContext *, uint8_t *buf, int buf_size,
3245                       const struct AVSubtitle *sub);
3246     /**
3247      * Encode data to an AVPacket.
3248      *
3249      * @param      avctx          codec context
3250      * @param      avpkt          output AVPacket (may contain a user-provided buffer)
3251      * @param[in]  frame          AVFrame containing the raw data to be encoded
3252      * @param[out] got_packet_ptr encoder sets to 0 or 1 to indicate that a
3253      *                            non-empty packet was returned in avpkt.
3254      * @return 0 on success, negative error code on failure
3255      */
3256     int (*encode2)(AVCodecContext *avctx, AVPacket *avpkt, const AVFrame *frame,
3257                    int *got_packet_ptr);
3258     int (*decode)(AVCodecContext *, void *outdata, int *outdata_size, AVPacket *avpkt);
3259     int (*close)(AVCodecContext *);
3260     /**
3261      * Flush buffers.
3262      * Will be called when seeking
3263      */
3264     void (*flush)(AVCodecContext *);
3265 } AVCodec;
3266
3267 /**
3268  * AVHWAccel.
3269  */
3270 typedef struct AVHWAccel {
3271     /**
3272      * Name of the hardware accelerated codec.
3273      * The name is globally unique among encoders and among decoders (but an
3274      * encoder and a decoder can share the same name).
3275      */
3276     const char *name;
3277
3278     /**
3279      * Type of codec implemented by the hardware accelerator.
3280      *
3281      * See AVMEDIA_TYPE_xxx
3282      */
3283     enum AVMediaType type;
3284
3285     /**
3286      * Codec implemented by the hardware accelerator.
3287      *
3288      * See AV_CODEC_ID_xxx
3289      */
3290     enum AVCodecID id;
3291
3292     /**
3293      * Supported pixel format.
3294      *
3295      * Only hardware accelerated formats are supported here.
3296      */
3297     enum AVPixelFormat pix_fmt;
3298
3299     /**
3300      * Hardware accelerated codec capabilities.
3301      * see FF_HWACCEL_CODEC_CAP_*
3302      */
3303     int capabilities;
3304
3305     struct AVHWAccel *next;
3306
3307     /**
3308      * Called at the beginning of each frame or field picture.
3309      *
3310      * Meaningful frame information (codec specific) is guaranteed to
3311      * be parsed at this point. This function is mandatory.
3312      *
3313      * Note that buf can be NULL along with buf_size set to 0.
3314      * Otherwise, this means the whole frame is available at this point.
3315      *
3316      * @param avctx the codec context
3317      * @param buf the frame data buffer base
3318      * @param buf_size the size of the frame in bytes
3319      * @return zero if successful, a negative value otherwise
3320      */
3321     int (*start_frame)(AVCodecContext *avctx, const uint8_t *buf, uint32_t buf_size);
3322
3323     /**
3324      * Callback for each slice.
3325      *
3326      * Meaningful slice information (codec specific) is guaranteed to
3327      * be parsed at this point. This function is mandatory.
3328      *
3329      * @param avctx the codec context
3330      * @param buf the slice data buffer base
3331      * @param buf_size the size of the slice in bytes
3332      * @return zero if successful, a negative value otherwise
3333      */
3334     int (*decode_slice)(AVCodecContext *avctx, const uint8_t *buf, uint32_t buf_size);
3335
3336     /**
3337      * Called at the end of each frame or field picture.
3338      *
3339      * The whole picture is parsed at this point and can now be sent
3340      * to the hardware accelerator. This function is mandatory.
3341      *
3342      * @param avctx the codec context
3343      * @return zero if successful, a negative value otherwise
3344      */
3345     int (*end_frame)(AVCodecContext *avctx);
3346
3347     /**
3348      * Size of HW accelerator private data.
3349      *
3350      * Private data is allocated with av_mallocz() before
3351      * AVCodecContext.get_buffer() and deallocated after
3352      * AVCodecContext.release_buffer().
3353      */
3354     int priv_data_size;
3355 } AVHWAccel;
3356
3357 /**
3358  * @defgroup lavc_picture AVPicture
3359  *
3360  * Functions for working with AVPicture
3361  * @{
3362  */
3363
3364 /**
3365  * four components are given, that's all.
3366  * the last component is alpha
3367  */
3368 typedef struct AVPicture {
3369     uint8_t *data[AV_NUM_DATA_POINTERS];
3370     int linesize[AV_NUM_DATA_POINTERS];     ///< number of bytes per line
3371 } AVPicture;
3372
3373 /**
3374  * @}
3375  */
3376
3377 enum AVSubtitleType {
3378     SUBTITLE_NONE,
3379
3380     SUBTITLE_BITMAP,                ///< A bitmap, pict will be set
3381
3382     /**
3383      * Plain text, the text field must be set by the decoder and is
3384      * authoritative. ass and pict fields may contain approximations.
3385      */
3386     SUBTITLE_TEXT,
3387
3388     /**
3389      * Formatted text, the ass field must be set by the decoder and is
3390      * authoritative. pict and text fields may contain approximations.
3391      */
3392     SUBTITLE_ASS,
3393 };
3394
3395 #define AV_SUBTITLE_FLAG_FORCED 0x00000001
3396
3397 typedef struct AVSubtitleRect {
3398     int x;         ///< top left corner  of pict, undefined when pict is not set
3399     int y;         ///< top left corner  of pict, undefined when pict is not set
3400     int w;         ///< width            of pict, undefined when pict is not set
3401     int h;         ///< height           of pict, undefined when pict is not set
3402     int nb_colors; ///< number of colors in pict, undefined when pict is not set
3403
3404     /**
3405      * data+linesize for the bitmap of this subtitle.
3406      * can be set for text/ass as well once they where rendered
3407      */
3408     AVPicture pict;
3409     enum AVSubtitleType type;
3410
3411     char *text;                     ///< 0 terminated plain UTF-8 text
3412
3413     /**
3414      * 0 terminated ASS/SSA compatible event line.
3415      * The presentation of this is unaffected by the other values in this
3416      * struct.
3417      */
3418     char *ass;
3419
3420     int flags;
3421 } AVSubtitleRect;
3422
3423 typedef struct AVSubtitle {
3424     uint16_t format; /* 0 = graphics */
3425     uint32_t start_display_time; /* relative to packet pts, in ms */
3426     uint32_t end_display_time; /* relative to packet pts, in ms */
3427     unsigned num_rects;
3428     AVSubtitleRect **rects;
3429     int64_t pts;    ///< Same as packet pts, in AV_TIME_BASE
3430 } AVSubtitle;
3431
3432 /**
3433  * If c is NULL, returns the first registered codec,
3434  * if c is non-NULL, returns the next registered codec after c,
3435  * or NULL if c is the last one.
3436  */
3437 AVCodec *av_codec_next(const AVCodec *c);
3438
3439 /**
3440  * Return the LIBAVCODEC_VERSION_INT constant.
3441  */
3442 unsigned avcodec_version(void);
3443
3444 /**
3445  * Return the libavcodec build-time configuration.
3446  */
3447 const char *avcodec_configuration(void);
3448
3449 /**
3450  * Return the libavcodec license.
3451  */
3452 const char *avcodec_license(void);
3453
3454 /**
3455  * Register the codec codec and initialize libavcodec.
3456  *
3457  * @warning either this function or avcodec_register_all() must be called
3458  * before any other libavcodec functions.
3459  *
3460  * @see avcodec_register_all()
3461  */
3462 void avcodec_register(AVCodec *codec);
3463
3464 /**
3465  * Register all the codecs, parsers and bitstream filters which were enabled at
3466  * configuration time. If you do not call this function you can select exactly
3467  * which formats you want to support, by using the individual registration
3468  * functions.
3469  *
3470  * @see avcodec_register
3471  * @see av_register_codec_parser
3472  * @see av_register_bitstream_filter
3473  */
3474 void avcodec_register_all(void);
3475
3476
3477 #if FF_API_ALLOC_CONTEXT
3478 /**
3479  * Allocate an AVCodecContext and set its fields to default values.  The
3480  * resulting struct can be deallocated by simply calling av_free().
3481  *
3482  * @return An AVCodecContext filled with default values or NULL on failure.
3483  * @see avcodec_get_context_defaults
3484  *
3485  * @deprecated use avcodec_alloc_context3()
3486  */
3487 attribute_deprecated
3488 AVCodecContext *avcodec_alloc_context(void);
3489
3490 /** THIS FUNCTION IS NOT YET PART OF THE PUBLIC API!
3491  *  we WILL change its arguments and name a few times! */
3492 attribute_deprecated
3493 AVCodecContext *avcodec_alloc_context2(enum AVMediaType);
3494
3495 /**
3496  * Set the fields of the given AVCodecContext to default values.
3497  *
3498  * @param s The AVCodecContext of which the fields should be set to default values.
3499  * @deprecated use avcodec_get_context_defaults3
3500  */
3501 attribute_deprecated
3502 void avcodec_get_context_defaults(AVCodecContext *s);
3503
3504 /** THIS FUNCTION IS NOT YET PART OF THE PUBLIC API!
3505  *  we WILL change its arguments and name a few times! */
3506 attribute_deprecated
3507 void avcodec_get_context_defaults2(AVCodecContext *s, enum AVMediaType);
3508 #endif
3509
3510 /**
3511  * Allocate an AVCodecContext and set its fields to default values.  The
3512  * resulting struct can be deallocated by calling avcodec_close() on it followed
3513  * by av_free().
3514  *
3515  * @param codec if non-NULL, allocate private data and initialize defaults
3516  *              for the given codec. It is illegal to then call avcodec_open2()
3517  *              with a different codec.
3518  *              If NULL, then the codec-specific defaults won't be initialized,
3519  *              which may result in suboptimal default settings (this is
3520  *              important mainly for encoders, e.g. libx264).
3521  *
3522  * @return An AVCodecContext filled with default values or NULL on failure.
3523  * @see avcodec_get_context_defaults
3524  */
3525 AVCodecContext *avcodec_alloc_context3(const AVCodec *codec);
3526
3527 /**
3528  * Set the fields of the given AVCodecContext to default values corresponding
3529  * to the given codec (defaults may be codec-dependent).
3530  *
3531  * Do not call this function if a non-NULL codec has been passed
3532  * to avcodec_alloc_context3() that allocated this AVCodecContext.
3533  * If codec is non-NULL, it is illegal to call avcodec_open2() with a
3534  * different codec on this AVCodecContext.
3535  */
3536 int avcodec_get_context_defaults3(AVCodecContext *s, const AVCodec *codec);
3537
3538 /**
3539  * Get the AVClass for AVCodecContext. It can be used in combination with
3540  * AV_OPT_SEARCH_FAKE_OBJ for examining options.
3541  *
3542  * @see av_opt_find().
3543  */
3544 const AVClass *avcodec_get_class(void);
3545
3546 /**
3547  * Get the AVClass for AVFrame. It can be used in combination with
3548  * AV_OPT_SEARCH_FAKE_OBJ for examining options.
3549  *
3550  * @see av_opt_find().
3551  */
3552 const AVClass *avcodec_get_frame_class(void);
3553
3554 /**
3555  * Get the AVClass for AVSubtitleRect. It can be used in combination with
3556  * AV_OPT_SEARCH_FAKE_OBJ for examining options.
3557  *
3558  * @see av_opt_find().
3559  */
3560 const AVClass *avcodec_get_subtitle_rect_class(void);
3561
3562 /**
3563  * Copy the settings of the source AVCodecContext into the destination
3564  * AVCodecContext. The resulting destination codec context will be
3565  * unopened, i.e. you are required to call avcodec_open2() before you
3566  * can use this AVCodecContext to decode/encode video/audio data.
3567  *
3568  * @param dest target codec context, should be initialized with
3569  *             avcodec_alloc_context3(), but otherwise uninitialized
3570  * @param src source codec context
3571  * @return AVERROR() on error (e.g. memory allocation error), 0 on success
3572  */
3573 int avcodec_copy_context(AVCodecContext *dest, const AVCodecContext *src);
3574
3575 /**
3576  * Allocate an AVFrame and set its fields to default values.  The resulting
3577  * struct must be freed using avcodec_free_frame().
3578  *
3579  * @return An AVFrame filled with default values or NULL on failure.
3580  * @see avcodec_get_frame_defaults
3581  */
3582 AVFrame *avcodec_alloc_frame(void);
3583
3584 /**
3585  * Set the fields of the given AVFrame to default values.
3586  *
3587  * @param frame The AVFrame of which the fields should be set to default values.
3588  */
3589 void avcodec_get_frame_defaults(AVFrame *frame);
3590
3591 /**
3592  * Free the frame and any dynamically allocated objects in it,
3593  * e.g. extended_data.
3594  *
3595  * @param frame frame to be freed. The pointer will be set to NULL.
3596  *
3597  * @warning this function does NOT free the data buffers themselves
3598  * (it does not know how, since they might have been allocated with
3599  *  a custom get_buffer()).
3600  */
3601 void avcodec_free_frame(AVFrame **frame);
3602
3603 #if FF_API_AVCODEC_OPEN
3604 /**
3605  * Initialize the AVCodecContext to use the given AVCodec. Prior to using this
3606  * function the context has to be allocated.
3607  *
3608  * The functions avcodec_find_decoder_by_name(), avcodec_find_encoder_by_name(),
3609  * avcodec_find_decoder() and avcodec_find_encoder() provide an easy way for
3610  * retrieving a codec.
3611  *
3612  * @warning This function is not thread safe!
3613  *
3614  * @code
3615  * avcodec_register_all();
3616  * codec = avcodec_find_decoder(AV_CODEC_ID_H264);
3617  * if (!codec)
3618  *     exit(1);
3619  *
3620  * context = avcodec_alloc_context3(codec);
3621  *
3622  * if (avcodec_open(context, codec) < 0)
3623  *     exit(1);
3624  * @endcode
3625  *
3626  * @param avctx The context which will be set up to use the given codec.
3627  * @param codec The codec to use within the context.
3628  * @return zero on success, a negative value on error
3629  * @see avcodec_alloc_context3, avcodec_find_decoder, avcodec_find_encoder, avcodec_close
3630  *
3631  * @deprecated use avcodec_open2
3632  */
3633 attribute_deprecated
3634 int avcodec_open(AVCodecContext *avctx, AVCodec *codec);
3635 #endif
3636
3637 /**
3638  * Initialize the AVCodecContext to use the given AVCodec. Prior to using this
3639  * function the context has to be allocated with avcodec_alloc_context3().
3640  *
3641  * The functions avcodec_find_decoder_by_name(), avcodec_find_encoder_by_name(),
3642  * avcodec_find_decoder() and avcodec_find_encoder() provide an easy way for
3643  * retrieving a codec.
3644  *
3645  * @warning This function is not thread safe!
3646  *
3647  * @code
3648  * avcodec_register_all();
3649  * av_dict_set(&opts, "b", "2.5M", 0);
3650  * codec = avcodec_find_decoder(AV_CODEC_ID_H264);
3651  * if (!codec)
3652  *     exit(1);
3653  *
3654  * context = avcodec_alloc_context3(codec);
3655  *
3656  * if (avcodec_open2(context, codec, opts) < 0)
3657  *     exit(1);
3658  * @endcode
3659  *
3660  * @param avctx The context to initialize.
3661  * @param codec The codec to open this context for. If a non-NULL codec has been
3662  *              previously passed to avcodec_alloc_context3() or
3663  *              avcodec_get_context_defaults3() for this context, then this
3664  *              parameter MUST be either NULL or equal to the previously passed
3665  *              codec.
3666  * @param options A dictionary filled with AVCodecContext and codec-private options.
3667  *                On return this object will be filled with options that were not found.
3668  *
3669  * @return zero on success, a negative value on error
3670  * @see avcodec_alloc_context3(), avcodec_find_decoder(), avcodec_find_encoder(),
3671  *      av_dict_set(), av_opt_find().
3672  */
3673 int avcodec_open2(AVCodecContext *avctx, const AVCodec *codec, AVDictionary **options);
3674
3675 /**
3676  * Close a given AVCodecContext and free all the data associated with it
3677  * (but not the AVCodecContext itself).
3678  *
3679  * Calling this function on an AVCodecContext that hasn't been opened will free
3680  * the codec-specific data allocated in avcodec_alloc_context3() /
3681  * avcodec_get_context_defaults3() with a non-NULL codec. Subsequent calls will
3682  * do nothing.
3683  */
3684 int avcodec_close(AVCodecContext *avctx);
3685
3686 /**
3687  * Free all allocated data in the given subtitle struct.
3688  *
3689  * @param sub AVSubtitle to free.
3690  */
3691 void avsubtitle_free(AVSubtitle *sub);
3692
3693 /**
3694  * @}
3695  */
3696
3697 /**
3698  * @addtogroup lavc_packet
3699  * @{
3700  */
3701
3702 /**
3703  * Default packet destructor.
3704  */
3705 void av_destruct_packet(AVPacket *pkt);
3706
3707 /**
3708  * Initialize optional fields of a packet with default values.
3709  *
3710  * Note, this does not touch the data and size members, which have to be
3711  * initialized separately.
3712  *
3713  * @param pkt packet
3714  */
3715 void av_init_packet(AVPacket *pkt);
3716
3717 /**
3718  * Allocate the payload of a packet and initialize its fields with
3719  * default values.
3720  *
3721  * @param pkt packet
3722  * @param size wanted payload size
3723  * @return 0 if OK, AVERROR_xxx otherwise
3724  */
3725 int av_new_packet(AVPacket *pkt, int size);
3726
3727 /**
3728  * Reduce packet size, correctly zeroing padding
3729  *
3730  * @param pkt packet
3731  * @param size new size
3732  */
3733 void av_shrink_packet(AVPacket *pkt, int size);
3734
3735 /**
3736  * Increase packet size, correctly zeroing padding
3737  *
3738  * @param pkt packet
3739  * @param grow_by number of bytes by which to increase the size of the packet
3740  */
3741 int av_grow_packet(AVPacket *pkt, int grow_by);
3742
3743 /**
3744  * @warning This is a hack - the packet memory allocation stuff is broken. The
3745  * packet is allocated if it was not really allocated.
3746  */
3747 int av_dup_packet(AVPacket *pkt);
3748
3749 /**
3750  * Copy packet, including contents
3751  *
3752  * @return 0 on success, negative AVERROR on fail
3753  */
3754 int av_copy_packet(AVPacket *dst, AVPacket *src);
3755
3756 /**
3757  * Free a packet.
3758  *
3759  * @param pkt packet to free
3760  */
3761 void av_free_packet(AVPacket *pkt);
3762
3763 /**
3764  * Allocate new information of a packet.
3765  *
3766  * @param pkt packet
3767  * @param type side information type
3768  * @param size side information size
3769  * @return pointer to fresh allocated data or NULL otherwise
3770  */
3771 uint8_t* av_packet_new_side_data(AVPacket *pkt, enum AVPacketSideDataType type,
3772                                  int size);
3773
3774 /**
3775  * Shrink the already allocated side data buffer
3776  *
3777  * @param pkt packet
3778  * @param type side information type
3779  * @param size new side information size
3780  * @return 0 on success, < 0 on failure
3781  */
3782 int av_packet_shrink_side_data(AVPacket *pkt, enum AVPacketSideDataType type,
3783                                int size);
3784
3785 /**
3786  * Get side information from packet.
3787  *
3788  * @param pkt packet
3789  * @param type desired side information type
3790  * @param size pointer for side information size to store (optional)
3791  * @return pointer to data if present or NULL otherwise
3792  */
3793 uint8_t* av_packet_get_side_data(AVPacket *pkt, enum AVPacketSideDataType type,
3794                                  int *size);
3795
3796 int av_packet_merge_side_data(AVPacket *pkt);
3797
3798 int av_packet_split_side_data(AVPacket *pkt);
3799
3800
3801 /**
3802  * @}
3803  */
3804
3805 /**
3806  * @addtogroup lavc_decoding
3807  * @{
3808  */
3809
3810 /**
3811  * Find a registered decoder with a matching codec ID.
3812  *
3813  * @param id AVCodecID of the requested decoder
3814  * @return A decoder if one was found, NULL otherwise.
3815  */
3816 AVCodec *avcodec_find_decoder(enum AVCodecID id);
3817
3818 /**
3819  * Find a registered decoder with the specified name.
3820  *
3821  * @param name name of the requested decoder
3822  * @return A decoder if one was found, NULL otherwise.
3823  */
3824 AVCodec *avcodec_find_decoder_by_name(const char *name);
3825
3826 int avcodec_default_get_buffer(AVCodecContext *s, AVFrame *pic);
3827 void avcodec_default_release_buffer(AVCodecContext *s, AVFrame *pic);
3828 int avcodec_default_reget_buffer(AVCodecContext *s, AVFrame *pic);
3829
3830 /**
3831  * Return the amount of padding in pixels which the get_buffer callback must
3832  * provide around the edge of the image for codecs which do not have the
3833  * CODEC_FLAG_EMU_EDGE flag.
3834  *
3835  * @return Required padding in pixels.
3836  */
3837 unsigned avcodec_get_edge_width(void);
3838
3839 /**
3840  * Modify width and height values so that they will result in a memory
3841  * buffer that is acceptable for the codec if you do not use any horizontal
3842  * padding.
3843  *
3844  * May only be used if a codec with CODEC_CAP_DR1 has been opened.
3845  * If CODEC_FLAG_EMU_EDGE is not set, the dimensions must have been increased
3846  * according to avcodec_get_edge_width() before.
3847  */
3848 void avcodec_align_dimensions(AVCodecContext *s, int *width, int *height);
3849
3850 /**
3851  * Modify width and height values so that they will result in a memory
3852  * buffer that is acceptable for the codec if you also ensure that all
3853  * line sizes are a multiple of the respective linesize_align[i].
3854  *
3855  * May only be used if a codec with CODEC_CAP_DR1 has been opened.
3856  * If CODEC_FLAG_EMU_EDGE is not set, the dimensions must have been increased
3857  * according to avcodec_get_edge_width() before.
3858  */
3859 void avcodec_align_dimensions2(AVCodecContext *s, int *width, int *height,
3860                                int linesize_align[AV_NUM_DATA_POINTERS]);
3861
3862 #if FF_API_OLD_DECODE_AUDIO
3863 /**
3864  * Wrapper function which calls avcodec_decode_audio4.
3865  *
3866  * @deprecated Use avcodec_decode_audio4 instead.
3867  *
3868  * Decode the audio frame of size avpkt->size from avpkt->data into samples.
3869  * Some decoders may support multiple frames in a single AVPacket, such
3870  * decoders would then just decode the first frame. In this case,
3871  * avcodec_decode_audio3 has to be called again with an AVPacket that contains
3872  * the remaining data in order to decode the second frame etc.
3873  * If no frame
3874  * could be outputted, frame_size_ptr is zero. Otherwise, it is the
3875  * decompressed frame size in bytes.
3876  *
3877  * @warning You must set frame_size_ptr to the allocated size of the
3878  * output buffer before calling avcodec_decode_audio3().
3879  *
3880  * @warning The input buffer must be FF_INPUT_BUFFER_PADDING_SIZE larger than
3881  * the actual read bytes because some optimized bitstream readers read 32 or 64
3882  * bits at once and could read over the end.
3883  *
3884  * @warning The end of the input buffer avpkt->data should be set to 0 to ensure that
3885  * no overreading happens for damaged MPEG streams.
3886  *
3887  * @warning You must not provide a custom get_buffer() when using
3888  * avcodec_decode_audio3().  Doing so will override it with
3889  * avcodec_default_get_buffer.  Use avcodec_decode_audio4() instead,
3890  * which does allow the application to provide a custom get_buffer().
3891  *
3892  * @note You might have to align the input buffer avpkt->data and output buffer
3893  * samples. The alignment requirements depend on the CPU: On some CPUs it isn't
3894  * necessary at all, on others it won't work at all if not aligned and on others
3895  * it will work but it will have an impact on performance.
3896  *
3897  * In practice, avpkt->data should have 4 byte alignment at minimum and
3898  * samples should be 16 byte aligned unless the CPU doesn't need it
3899  * (AltiVec and SSE do).
3900  *
3901  * @note Codecs which have the CODEC_CAP_DELAY capability set have a delay
3902  * between input and output, these need to be fed with avpkt->data=NULL,
3903  * avpkt->size=0 at the end to return the remaining frames.
3904  *
3905  * @param avctx the codec context
3906  * @param[out] samples the output buffer, sample type in avctx->sample_fmt
3907  *                     If the sample format is planar, each channel plane will
3908  *                     be the same size, with no padding between channels.
3909  * @param[in,out] frame_size_ptr the output buffer size in bytes
3910  * @param[in] avpkt The input AVPacket containing the input buffer.
3911  *            You can create such packet with av_init_packet() and by then setting
3912  *            data and size, some decoders might in addition need other fields.
3913  *            All decoders are designed to use the least fields possible though.
3914  * @return On error a negative value is returned, otherwise the number of bytes
3915  * used or zero if no frame data was decompressed (used) from the input AVPacket.
3916  */
3917 attribute_deprecated int avcodec_decode_audio3(AVCodecContext *avctx, int16_t *samples,
3918                          int *frame_size_ptr,
3919                          AVPacket *avpkt);
3920 #endif
3921
3922 /**
3923  * Decode the audio frame of size avpkt->size from avpkt->data into frame.
3924  *
3925  * Some decoders may support multiple frames in a single AVPacket. Such
3926  * decoders would then just decode the first frame. In this case,
3927  * avcodec_decode_audio4 has to be called again with an AVPacket containing
3928  * the remaining data in order to decode the second frame, etc...
3929  * Even if no frames are returned, the packet needs to be fed to the decoder
3930  * with remaining data until it is completely consumed or an error occurs.
3931  *
3932  * @warning The input buffer, avpkt->data must be FF_INPUT_BUFFER_PADDING_SIZE
3933  *          larger than the actual read bytes because some optimized bitstream
3934  *          readers read 32 or 64 bits at once and could read over the end.
3935  *
3936  * @note You might have to align the input buffer. The alignment requirements
3937  *       depend on the CPU and the decoder.
3938  *
3939  * @param      avctx the codec context
3940  * @param[out] frame The AVFrame in which to store decoded audio samples.
3941  *                   Decoders request a buffer of a particular size by setting
3942  *                   AVFrame.nb_samples prior to calling get_buffer(). The
3943  *                   decoder may, however, only utilize part of the buffer by
3944  *                   setting AVFrame.nb_samples to a smaller value in the
3945  *                   output frame.
3946  * @param[out] got_frame_ptr Zero if no frame could be decoded, otherwise it is
3947  *                           non-zero.
3948  * @param[in]  avpkt The input AVPacket containing the input buffer.
3949  *                   At least avpkt->data and avpkt->size should be set. Some
3950  *                   decoders might also require additional fields to be set.
3951  * @return A negative error code is returned if an error occurred during
3952  *         decoding, otherwise the number of bytes consumed from the input
3953  *         AVPacket is returned.
3954  */
3955 int avcodec_decode_audio4(AVCodecContext *avctx, AVFrame *frame,
3956                           int *got_frame_ptr, const AVPacket *avpkt);
3957
3958 /**
3959  * Decode the video frame of size avpkt->size from avpkt->data into picture.
3960  * Some decoders may support multiple frames in a single AVPacket, such
3961  * decoders would then just decode the first frame.
3962  *
3963  * @warning The input buffer must be FF_INPUT_BUFFER_PADDING_SIZE larger than
3964  * the actual read bytes because some optimized bitstream readers read 32 or 64
3965  * bits at once and could read over the end.
3966  *
3967  * @warning The end of the input buffer buf should be set to 0 to ensure that
3968  * no overreading happens for damaged MPEG streams.
3969  *
3970  * @note You might have to align the input buffer avpkt->data.
3971  * The alignment requirements depend on the CPU: on some CPUs it isn't
3972  * necessary at all, on others it won't work at all if not aligned and on others
3973  * it will work but it will have an impact on performance.
3974  *
3975  * In practice, avpkt->data should have 4 byte alignment at minimum.
3976  *
3977  * @note Codecs which have the CODEC_CAP_DELAY capability set have a delay
3978  * between input and output, these need to be fed with avpkt->data=NULL,
3979  * avpkt->size=0 at the end to return the remaining frames.
3980  *
3981  * @param avctx the codec context
3982  * @param[out] picture The AVFrame in which the decoded video frame will be stored.
3983  *             Use avcodec_alloc_frame to get an AVFrame, the codec will
3984  *             allocate memory for the actual bitmap.
3985  *             with default get/release_buffer(), the decoder frees/reuses the bitmap as it sees fit.
3986  *             with overridden get/release_buffer() (needs CODEC_CAP_DR1) the user decides into what buffer the decoder
3987  *                   decodes and the decoder tells the user once it does not need the data anymore,
3988  *                   the user app can at this point free/reuse/keep the memory as it sees fit.
3989  *
3990  * @param[in] avpkt The input AVpacket containing the input buffer.
3991  *            You can create such packet with av_init_packet() and by then setting
3992  *            data and size, some decoders might in addition need other fields like
3993  *            flags&AV_PKT_FLAG_KEY. All decoders are designed to use the least
3994  *            fields possible.
3995  * @param[in,out] got_picture_ptr Zero if no frame could be decompressed, otherwise, it is nonzero.
3996  * @return On error a negative value is returned, otherwise the number of bytes
3997  * used or zero if no frame could be decompressed.
3998  */
3999 int avcodec_decode_video2(AVCodecContext *avctx, AVFrame *picture,
4000                          int *got_picture_ptr,
4001                          const AVPacket *avpkt);
4002
4003 /**
4004  * Decode a subtitle message.
4005  * Return a negative value on error, otherwise return the number of bytes used.
4006  * If no subtitle could be decompressed, got_sub_ptr is zero.
4007  * Otherwise, the subtitle is stored in *sub.
4008  * Note that CODEC_CAP_DR1 is not available for subtitle codecs. This is for
4009  * simplicity, because the performance difference is expect to be negligible
4010  * and reusing a get_buffer written for video codecs would probably perform badly
4011  * due to a potentially very different allocation pattern.
4012  *
4013  * @param avctx the codec context
4014  * @param[out] sub The AVSubtitle in which the decoded subtitle will be stored, must be
4015                    freed with avsubtitle_free if *got_sub_ptr is set.
4016  * @param[in,out] got_sub_ptr Zero if no subtitle could be decompressed, otherwise, it is nonzero.
4017  * @param[in] avpkt The input AVPacket containing the input buffer.
4018  */
4019 int avcodec_decode_subtitle2(AVCodecContext *avctx, AVSubtitle *sub,
4020                             int *got_sub_ptr,
4021                             AVPacket *avpkt);
4022
4023 /**
4024  * @defgroup lavc_parsing Frame parsing
4025  * @{
4026  */
4027
4028 typedef struct AVCodecParserContext {
4029     void *priv_data;
4030     struct AVCodecParser *parser;
4031     int64_t frame_offset; /* offset of the current frame */
4032     int64_t cur_offset; /* current offset
4033                            (incremented by each av_parser_parse()) */
4034     int64_t next_frame_offset; /* offset of the next frame */
4035     /* video info */
4036     int pict_type; /* XXX: Put it back in AVCodecContext. */
4037     /**
4038      * This field is used for proper frame duration computation in lavf.
4039      * It signals, how much longer the frame duration of the current frame
4040      * is compared to normal frame duration.
4041      *
4042      * frame_duration = (1 + repeat_pict) * time_base
4043      *
4044      * It is used by codecs like H.264 to display telecined material.
4045      */
4046     int repeat_pict; /* XXX: Put it back in AVCodecContext. */
4047     int64_t pts;     /* pts of the current frame */
4048     int64_t dts;     /* dts of the current frame */
4049
4050     /* private data */
4051     int64_t last_pts;
4052     int64_t last_dts;
4053     int fetch_timestamp;
4054
4055 #define AV_PARSER_PTS_NB 4
4056     int cur_frame_start_index;
4057     int64_t cur_frame_offset[AV_PARSER_PTS_NB];
4058     int64_t cur_frame_pts[AV_PARSER_PTS_NB];
4059     int64_t cur_frame_dts[AV_PARSER_PTS_NB];
4060
4061     int flags;
4062 #define PARSER_FLAG_COMPLETE_FRAMES           0x0001
4063 #define PARSER_FLAG_ONCE                      0x0002
4064 /// Set if the parser has a valid file offset
4065 #define PARSER_FLAG_FETCHED_OFFSET            0x0004
4066 #define PARSER_FLAG_USE_CODEC_TS              0x1000
4067
4068     int64_t offset;      ///< byte offset from starting packet start
4069     int64_t cur_frame_end[AV_PARSER_PTS_NB];
4070
4071     /**
4072      * Set by parser to 1 for key frames and 0 for non-key frames.
4073      * It is initialized to -1, so if the parser doesn't set this flag,
4074      * old-style fallback using AV_PICTURE_TYPE_I picture type as key frames
4075      * will be used.
4076      */
4077     int key_frame;
4078
4079     /**
4080      * Time difference in stream time base units from the pts of this
4081      * packet to the point at which the output from the decoder has converged
4082      * independent from the availability of previous frames. That is, the
4083      * frames are virtually identical no matter if decoding started from
4084      * the very first frame or from this keyframe.
4085      * Is AV_NOPTS_VALUE if unknown.
4086      * This field is not the display duration of the current frame.
4087      * This field has no meaning if the packet does not have AV_PKT_FLAG_KEY
4088      * set.
4089      *
4090      * The purpose of this field is to allow seeking in streams that have no
4091      * keyframes in the conventional sense. It corresponds to the
4092      * recovery point SEI in H.264 and match_time_delta in NUT. It is also
4093      * essential for some types of subtitle streams to ensure that all
4094      * subtitles are correctly displayed after seeking.
4095      */
4096     int64_t convergence_duration;
4097
4098     // Timestamp generation support:
4099     /**
4100      * Synchronization point for start of timestamp generation.
4101      *
4102      * Set to >0 for sync point, 0 for no sync point and <0 for undefined
4103      * (default).
4104      *
4105      * For example, this corresponds to presence of H.264 buffering period
4106      * SEI message.
4107      */
4108     int dts_sync_point;
4109
4110     /**
4111      * Offset of the current timestamp against last timestamp sync point in
4112      * units of AVCodecContext.time_base.
4113      *
4114      * Set to INT_MIN when dts_sync_point unused. Otherwise, it must
4115      * contain a valid timestamp offset.
4116      *
4117      * Note that the timestamp of sync point has usually a nonzero
4118      * dts_ref_dts_delta, which refers to the previous sync point. Offset of
4119      * the next frame after timestamp sync point will be usually 1.
4120      *
4121      * For example, this corresponds to H.264 cpb_removal_delay.
4122      */
4123     int dts_ref_dts_delta;
4124
4125     /**
4126      * Presentation delay of current frame in units of AVCodecContext.time_base.
4127      *
4128      * Set to INT_MIN when dts_sync_point unused. Otherwise, it must
4129      * contain valid non-negative timestamp delta (presentation time of a frame
4130      * must not lie in the past).
4131      *
4132      * This delay represents the difference between decoding and presentation
4133      * time of the frame.
4134      *
4135      * For example, this corresponds to H.264 dpb_output_delay.
4136      */
4137     int pts_dts_delta;
4138
4139     /**
4140      * Position of the packet in file.
4141      *
4142      * Analogous to cur_frame_pts/dts
4143      */
4144     int64_t cur_frame_pos[AV_PARSER_PTS_NB];
4145
4146     /**
4147      * Byte position of currently parsed frame in stream.
4148      */
4149     int64_t pos;
4150
4151     /**
4152      * Previous frame byte position.
4153      */
4154     int64_t last_pos;
4155
4156     /**
4157      * Duration of the current frame.
4158      * For audio, this is in units of 1 / AVCodecContext.sample_rate.
4159      * For all other types, this is in units of AVCodecContext.time_base.
4160      */
4161     int duration;
4162 } AVCodecParserContext;
4163
4164 typedef struct AVCodecParser {
4165     int codec_ids[5]; /* several codec IDs are permitted */
4166     int priv_data_size;
4167     int (*parser_init)(AVCodecParserContext *s);
4168     int (*parser_parse)(AVCodecParserContext *s,
4169                         AVCodecContext *avctx,
4170                         const uint8_t **poutbuf, int *poutbuf_size,
4171                         const uint8_t *buf, int buf_size);
4172     void (*parser_close)(AVCodecParserContext *s);
4173     int (*split)(AVCodecContext *avctx, const uint8_t *buf, int buf_size);
4174     struct AVCodecParser *next;
4175 } AVCodecParser;
4176
4177 AVCodecParser *av_parser_next(AVCodecParser *c);
4178
4179 void av_register_codec_parser(AVCodecParser *parser);
4180 AVCodecParserContext *av_parser_init(int codec_id);
4181
4182 /**
4183  * Parse a packet.
4184  *
4185  * @param s             parser context.
4186  * @param avctx         codec context.
4187  * @param poutbuf       set to pointer to parsed buffer or NULL if not yet finished.
4188  * @param poutbuf_size  set to size of parsed buffer or zero if not yet finished.
4189  * @param buf           input buffer.
4190  * @param buf_size      input length, to signal EOF, this should be 0 (so that the last frame can be output).
4191  * @param pts           input presentation timestamp.
4192  * @param dts           input decoding timestamp.
4193  * @param pos           input byte position in stream.
4194  * @return the number of bytes of the input bitstream used.
4195  *
4196  * Example:
4197  * @code
4198  *   while(in_len){
4199  *       len = av_parser_parse2(myparser, AVCodecContext, &data, &size,
4200  *                                        in_data, in_len,
4201  *                                        pts, dts, pos);
4202  *       in_data += len;
4203  *       in_len  -= len;
4204  *
4205  *       if(size)
4206  *          decode_frame(data, size);
4207  *   }
4208  * @endcode
4209  */
4210 int av_parser_parse2(AVCodecParserContext *s,
4211                      AVCodecContext *avctx,
4212                      uint8_t **poutbuf, int *poutbuf_size,
4213                      const uint8_t *buf, int buf_size,
4214                      int64_t pts, int64_t dts,
4215                      int64_t pos);
4216
4217 /**
4218  * @return 0 if the output buffer is a subset of the input, 1 if it is allocated and must be freed
4219  * @deprecated use AVBitstreamFilter
4220  */
4221 int av_parser_change(AVCodecParserContext *s,
4222                      AVCodecContext *avctx,
4223                      uint8_t **poutbuf, int *poutbuf_size,
4224                      const uint8_t *buf, int buf_size, int keyframe);
4225 void av_parser_close(AVCodecParserContext *s);
4226
4227 /**
4228  * @}
4229  * @}
4230  */
4231
4232 /**
4233  * @addtogroup lavc_encoding
4234  * @{
4235  */
4236
4237 /**
4238  * Find a registered encoder with a matching codec ID.
4239  *
4240  * @param id AVCodecID of the requested encoder
4241  * @return An encoder if one was found, NULL otherwise.
4242  */
4243 AVCodec *avcodec_find_encoder(enum AVCodecID id);
4244
4245 /**
4246  * Find a registered encoder with the specified name.
4247  *
4248  * @param name name of the requested encoder
4249  * @return An encoder if one was found, NULL otherwise.
4250  */
4251 AVCodec *avcodec_find_encoder_by_name(const char *name);
4252
4253 #if FF_API_OLD_ENCODE_AUDIO
4254 /**
4255  * Encode an audio frame from samples into buf.
4256  *
4257  * @deprecated Use avcodec_encode_audio2 instead.
4258  *
4259  * @note The output buffer should be at least FF_MIN_BUFFER_SIZE bytes large.
4260  * However, for codecs with avctx->frame_size equal to 0 (e.g. PCM) the user
4261  * will know how much space is needed because it depends on the value passed
4262  * in buf_size as described below. In that case a lower value can be used.
4263  *
4264  * @param avctx the codec context
4265  * @param[out] buf the output buffer
4266  * @param[in] buf_size the output buffer size
4267  * @param[in] samples the input buffer containing the samples
4268  * The number of samples read from this buffer is frame_size*channels,
4269  * both of which are defined in avctx.
4270  * For codecs which have avctx->frame_size equal to 0 (e.g. PCM) the number of
4271  * samples read from samples is equal to:
4272  * buf_size * 8 / (avctx->channels * av_get_bits_per_sample(avctx->codec_id))
4273  * This also implies that av_get_bits_per_sample() must not return 0 for these
4274  * codecs.
4275  * @return On error a negative value is returned, on success zero or the number
4276  * of bytes used to encode the data read from the input buffer.
4277  */
4278 int attribute_deprecated avcodec_encode_audio(AVCodecContext *avctx,
4279                                               uint8_t *buf, int buf_size,
4280                                               const short *samples);
4281 #endif
4282
4283 /**
4284  * Encode a frame of audio.
4285  *
4286  * Takes input samples from frame and writes the next output packet, if
4287  * available, to avpkt. The output packet does not necessarily contain data for
4288  * the most recent frame, as encoders can delay, split, and combine input frames
4289  * internally as needed.
4290  *
4291  * @param avctx     codec context
4292  * @param avpkt     output AVPacket.
4293  *                  The user can supply an output buffer by setting
4294  *                  avpkt->data and avpkt->size prior to calling the
4295  *                  function, but if the size of the user-provided data is not
4296  *                  large enough, encoding will fail. If avpkt->data and
4297  *                  avpkt->size are set, avpkt->destruct must also be set. All
4298  *                  other AVPacket fields will be reset by the encoder using
4299  *                  av_init_packet(). If avpkt->data is NULL, the encoder will
4300  *                  allocate it. The encoder will set avpkt->size to the size
4301  *                  of the output packet.
4302  *
4303  *                  If this function fails or produces no output, avpkt will be
4304  *                  freed using av_free_packet() (i.e. avpkt->destruct will be
4305  *                  called to free the user supplied buffer).
4306  * @param[in] frame AVFrame containing the raw audio data to be encoded.
4307  *                  May be NULL when flushing an encoder that has the
4308  *                  CODEC_CAP_DELAY capability set.
4309  *                  If CODEC_CAP_VARIABLE_FRAME_SIZE is set, then each frame
4310  *                  can have any number of samples.
4311  *                  If it is not set, frame->nb_samples must be equal to
4312  *                  avctx->frame_size for all frames except the last.
4313  *                  The final frame may be smaller than avctx->frame_size.
4314  * @param[out] got_packet_ptr This field is set to 1 by libavcodec if the
4315  *                            output packet is non-empty, and to 0 if it is
4316  *                            empty. If the function returns an error, the
4317  *                            packet can be assumed to be invalid, and the
4318  *                            value of got_packet_ptr is undefined and should
4319  *                            not be used.
4320  * @return          0 on success, negative error code on failure
4321  */
4322 int avcodec_encode_audio2(AVCodecContext *avctx, AVPacket *avpkt,
4323                           const AVFrame *frame, int *got_packet_ptr);
4324
4325 #if FF_API_OLD_ENCODE_VIDEO
4326 /**
4327  * @deprecated use avcodec_encode_video2() instead.
4328  *
4329  * Encode a video frame from pict into buf.
4330  * The input picture should be
4331  * stored using a specific format, namely avctx.pix_fmt.
4332  *
4333  * @param avctx the codec context
4334  * @param[out] buf the output buffer for the bitstream of encoded frame
4335  * @param[in] buf_size the size of the output buffer in bytes
4336  * @param[in] pict the input picture to encode
4337  * @return On error a negative value is returned, on success zero or the number
4338  * of bytes used from the output buffer.
4339  */
4340 attribute_deprecated
4341 int avcodec_encode_video(AVCodecContext *avctx, uint8_t *buf, int buf_size,
4342                          const AVFrame *pict);
4343 #endif
4344
4345 /**
4346  * Encode a frame of video.
4347  *
4348  * Takes input raw video data from frame and writes the next output packet, if
4349  * available, to avpkt. The output packet does not necessarily contain data for
4350  * the most recent frame, as encoders can delay and reorder input frames
4351  * internally as needed.
4352  *
4353  * @param avctx     codec context
4354  * @param avpkt     output AVPacket.
4355  *                  The user can supply an output buffer by setting
4356  *                  avpkt->data and avpkt->size prior to calling the
4357  *                  function, but if the size of the user-provided data is not
4358  *                  large enough, encoding will fail. All other AVPacket fields
4359  *                  will be reset by the encoder using av_init_packet(). If
4360  *                  avpkt->data is NULL, the encoder will allocate it.
4361  *                  The encoder will set avpkt->size to the size of the
4362  *                  output packet. The returned data (if any) belongs to the
4363  *                  caller, he is responsible for freeing it.
4364  *
4365  *                  If this function fails or produces no output, avpkt will be
4366  *                  freed using av_free_packet() (i.e. avpkt->destruct will be
4367  *                  called to free the user supplied buffer).
4368  * @param[in] frame AVFrame containing the raw video data to be encoded.
4369  *                  May be NULL when flushing an encoder that has the
4370  *                  CODEC_CAP_DELAY capability set.
4371  * @param[out] got_packet_ptr This field is set to 1 by libavcodec if the
4372  *                            output packet is non-empty, and to 0 if it is
4373  *                            empty. If the function returns an error, the
4374  *                            packet can be assumed to be invalid, and the
4375  *                            value of got_packet_ptr is undefined and should
4376  *                            not be used.
4377  * @return          0 on success, negative error code on failure
4378  */
4379 int avcodec_encode_video2(AVCodecContext *avctx, AVPacket *avpkt,
4380                           const AVFrame *frame, int *got_packet_ptr);
4381
4382 int avcodec_encode_subtitle(AVCodecContext *avctx, uint8_t *buf, int buf_size,
4383                             const AVSubtitle *sub);
4384
4385
4386 /**
4387  * @}
4388  */
4389
4390 #if FF_API_AVCODEC_RESAMPLE
4391 /**
4392  * @defgroup lavc_resample Audio resampling
4393  * @ingroup libavc
4394  * @deprecated use libswresample instead
4395  *
4396  * @{
4397  */
4398 struct ReSampleContext;
4399 struct AVResampleContext;
4400
4401 typedef struct ReSampleContext ReSampleContext;
4402
4403 /**
4404  *  Initialize audio resampling context.
4405  *
4406  * @param output_channels  number of output channels
4407  * @param input_channels   number of input channels
4408  * @param output_rate      output sample rate
4409  * @param input_rate       input sample rate
4410  * @param sample_fmt_out   requested output sample format
4411  * @param sample_fmt_in    input sample format
4412  * @param filter_length    length of each FIR filter in the filterbank relative to the cutoff frequency
4413  * @param log2_phase_count log2 of the number of entries in the polyphase filterbank
4414  * @param linear           if 1 then the used FIR filter will be linearly interpolated
4415                            between the 2 closest, if 0 the closest will be used
4416  * @param cutoff           cutoff frequency, 1.0 corresponds to half the output sampling rate
4417  * @return allocated ReSampleContext, NULL if error occurred
4418  */
4419 attribute_deprecated
4420 ReSampleContext *av_audio_resample_init(int output_channels, int input_channels,
4421                                         int output_rate, int input_rate,
4422                                         enum AVSampleFormat sample_fmt_out,
4423                                         enum AVSampleFormat sample_fmt_in,
4424                                         int filter_length, int log2_phase_count,
4425                                         int linear, double cutoff);
4426
4427 attribute_deprecated
4428 int audio_resample(ReSampleContext *s, short *output, short *input, int nb_samples);
4429
4430 /**
4431  * Free resample context.
4432  *
4433  * @param s a non-NULL pointer to a resample context previously
4434  *          created with av_audio_resample_init()
4435  */
4436 attribute_deprecated
4437 void audio_resample_close(ReSampleContext *s);
4438
4439
4440 /**
4441  * Initialize an audio resampler.
4442  * Note, if either rate is not an integer then simply scale both rates up so they are.
4443  * @param filter_length length of each FIR filter in the filterbank relative to the cutoff freq
4444  * @param log2_phase_count log2 of the number of entries in the polyphase filterbank
4445  * @param linear If 1 then the used FIR filter will be linearly interpolated
4446                  between the 2 closest, if 0 the closest will be used
4447  * @param cutoff cutoff frequency, 1.0 corresponds to half the output sampling rate
4448  */
4449 attribute_deprecated
4450 struct AVResampleContext *av_resample_init(int out_rate, int in_rate, int filter_length, int log2_phase_count, int linear, double cutoff);
4451
4452 /**
4453  * Resample an array of samples using a previously configured context.
4454  * @param src an array of unconsumed samples
4455  * @param consumed the number of samples of src which have been consumed are returned here
4456  * @param src_size the number of unconsumed samples available
4457  * @param dst_size the amount of space in samples available in dst
4458  * @param update_ctx If this is 0 then the context will not be modified, that way several channels can be resampled with the same context.
4459  * @return the number of samples written in dst or -1 if an error occurred
4460  */
4461 attribute_deprecated
4462 int av_resample(struct AVResampleContext *c, short *dst, short *src, int *consumed, int src_size, int dst_size, int update_ctx);
4463
4464
4465 /**
4466  * Compensate samplerate/timestamp drift. The compensation is done by changing
4467  * the resampler parameters, so no audible clicks or similar distortions occur
4468  * @param compensation_distance distance in output samples over which the compensation should be performed
4469  * @param sample_delta number of output samples which should be output less
4470  *
4471  * example: av_resample_compensate(c, 10, 500)
4472  * here instead of 510 samples only 500 samples would be output
4473  *
4474  * note, due to rounding the actual compensation might be slightly different,
4475  * especially if the compensation_distance is large and the in_rate used during init is small
4476  */
4477 attribute_deprecated
4478 void av_resample_compensate(struct AVResampleContext *c, int sample_delta, int compensation_distance);
4479 attribute_deprecated
4480 void av_resample_close(struct AVResampleContext *c);
4481
4482 /**
4483  * @}
4484  */
4485 #endif
4486
4487 /**
4488  * @addtogroup lavc_picture
4489  * @{
4490  */
4491
4492 /**
4493  * Allocate memory for a picture.  Call avpicture_free() to free it.
4494  *
4495  * @see avpicture_fill()
4496  *
4497  * @param picture the picture to be filled in
4498  * @param pix_fmt the format of the picture
4499  * @param width the width of the picture
4500  * @param height the height of the picture
4501  * @return zero if successful, a negative value if not
4502  */
4503 int avpicture_alloc(AVPicture *picture, enum AVPixelFormat pix_fmt, int width, int height);
4504
4505 /**
4506  * Free a picture previously allocated by avpicture_alloc().
4507  * The data buffer used by the AVPicture is freed, but the AVPicture structure
4508  * itself is not.
4509  *
4510  * @param picture the AVPicture to be freed
4511  */
4512 void avpicture_free(AVPicture *picture);
4513
4514 /**
4515  * Fill in the AVPicture fields, always assume a linesize alignment of
4516  * 1.
4517  *
4518  * @see av_image_fill_arrays()
4519  */
4520 int avpicture_fill(AVPicture *picture, const uint8_t *ptr,
4521                    enum AVPixelFormat pix_fmt, int width, int height);
4522
4523 /**
4524  * Copy pixel data from an AVPicture into a buffer, always assume a
4525  * linesize alignment of 1.
4526  *
4527  * @see av_image_copy_to_buffer()
4528  */
4529 int avpicture_layout(const AVPicture* src, enum AVPixelFormat pix_fmt,
4530                      int width, int height,
4531                      unsigned char *dest, int dest_size);
4532
4533 /**
4534  * Calculate the size in bytes that a picture of the given width and height
4535  * would occupy if stored in the given picture format.
4536  * Always assume a linesize alignment of 1.
4537  *
4538  * @see av_image_get_buffer_size().
4539  */
4540 int avpicture_get_size(enum AVPixelFormat pix_fmt, int width, int height);
4541
4542 /**
4543  *  deinterlace - if not supported return -1
4544  */
4545 int avpicture_deinterlace(AVPicture *dst, const AVPicture *src,
4546                           enum AVPixelFormat pix_fmt, int width, int height);
4547 /**
4548  * Copy image src to dst. Wraps av_image_copy().
4549  */
4550 void av_picture_copy(AVPicture *dst, const AVPicture *src,
4551                      enum AVPixelFormat pix_fmt, int width, int height);
4552
4553 /**
4554  * Crop image top and left side.
4555  */
4556 int av_picture_crop(AVPicture *dst, const AVPicture *src,
4557                     enum AVPixelFormat pix_fmt, int top_band, int left_band);
4558
4559 /**
4560  * Pad image.
4561  */
4562 int av_picture_pad(AVPicture *dst, const AVPicture *src, int height, int width, enum AVPixelFormat pix_fmt,
4563             int padtop, int padbottom, int padleft, int padright, int *color);
4564
4565 /**
4566  * @}
4567  */
4568
4569 /**
4570  * @defgroup lavc_misc Utility functions
4571  * @ingroup libavc
4572  *
4573  * Miscellaneous utility functions related to both encoding and decoding
4574  * (or neither).
4575  * @{
4576  */
4577
4578 /**
4579  * @defgroup lavc_misc_pixfmt Pixel formats
4580  *
4581  * Functions for working with pixel formats.
4582  * @{
4583  */
4584
4585 /**
4586  * Utility function to access log2_chroma_w log2_chroma_h from
4587  * the pixel format AVPixFmtDescriptor.
4588  *
4589  * This function asserts that pix_fmt is valid. See av_pix_fmt_get_chroma_sub_sample
4590  * for one that returns a failure code and continues in case of invalid
4591  * pix_fmts.
4592  *
4593  * @param[in]  pix_fmt the pixel format
4594  * @param[out] h_shift store log2_chroma_h
4595  * @param[out] v_shift store log2_chroma_w
4596  *
4597  * @see av_pix_fmt_get_chroma_sub_sample
4598  */
4599
4600 void avcodec_get_chroma_sub_sample(enum AVPixelFormat pix_fmt, int *h_shift, int *v_shift);
4601
4602 /**
4603  * Return a value representing the fourCC code associated to the
4604  * pixel format pix_fmt, or 0 if no associated fourCC code can be
4605  * found.
4606  */
4607 unsigned int avcodec_pix_fmt_to_codec_tag(enum AVPixelFormat pix_fmt);
4608
4609 #define FF_LOSS_RESOLUTION  0x0001 /**< loss due to resolution change */
4610 #define FF_LOSS_DEPTH       0x0002 /**< loss due to color depth change */
4611 #define FF_LOSS_COLORSPACE  0x0004 /**< loss due to color space conversion */
4612 #define FF_LOSS_ALPHA       0x0008 /**< loss of alpha bits */
4613 #define FF_LOSS_COLORQUANT  0x0010 /**< loss due to color quantization */
4614 #define FF_LOSS_CHROMA      0x0020 /**< loss of chroma (e.g. RGB to gray conversion) */
4615
4616 /**
4617  * Compute what kind of losses will occur when converting from one specific
4618  * pixel format to another.
4619  * When converting from one pixel format to another, information loss may occur.
4620  * For example, when converting from RGB24 to GRAY, the color information will
4621  * be lost. Similarly, other losses occur when converting from some formats to
4622  * other formats. These losses can involve loss of chroma, but also loss of
4623  * resolution, loss of color depth, loss due to the color space conversion, loss
4624  * of the alpha bits or loss due to color quantization.
4625  * avcodec_get_fix_fmt_loss() informs you about the various types of losses
4626  * which will occur when converting from one pixel format to another.
4627  *
4628  * @param[in] dst_pix_fmt destination pixel format
4629  * @param[in] src_pix_fmt source pixel format
4630  * @param[in] has_alpha Whether the source pixel format alpha channel is used.
4631  * @return Combination of flags informing you what kind of losses will occur
4632  * (maximum loss for an invalid dst_pix_fmt).
4633  */
4634 int avcodec_get_pix_fmt_loss(enum AVPixelFormat dst_pix_fmt, enum AVPixelFormat src_pix_fmt,
4635                              int has_alpha);
4636
4637 #if FF_API_FIND_BEST_PIX_FMT
4638 /**
4639  * @deprecated use avcodec_find_best_pix_fmt_of_2() instead.
4640  *
4641  * Find the best pixel format to convert to given a certain source pixel
4642  * format.  When converting from one pixel format to another, information loss
4643  * may occur.  For example, when converting from RGB24 to GRAY, the color
4644  * information will be lost. Similarly, other losses occur when converting from
4645  * some formats to other formats. avcodec_find_best_pix_fmt() searches which of
4646  * the given pixel formats should be used to suffer the least amount of loss.
4647  * The pixel formats from which it chooses one, are determined by the
4648  * pix_fmt_mask parameter.
4649  *
4650  * Note, only the first 64 pixel formats will fit in pix_fmt_mask.
4651  *
4652  * @code
4653  * src_pix_fmt = AV_PIX_FMT_YUV420P;
4654  * pix_fmt_mask = (1 << AV_PIX_FMT_YUV422P) | (1 << AV_PIX_FMT_RGB24);
4655  * dst_pix_fmt = avcodec_find_best_pix_fmt(pix_fmt_mask, src_pix_fmt, alpha, &loss);
4656  * @endcode
4657  *
4658  * @param[in] pix_fmt_mask bitmask determining which pixel format to choose from
4659  * @param[in] src_pix_fmt source pixel format
4660  * @param[in] has_alpha Whether the source pixel format alpha channel is used.
4661  * @param[out] loss_ptr Combination of flags informing you what kind of losses will occur.
4662  * @return The best pixel format to convert to or -1 if none was found.
4663  */
4664 attribute_deprecated
4665 enum AVPixelFormat avcodec_find_best_pix_fmt(int64_t pix_fmt_mask, enum AVPixelFormat src_pix_fmt,
4666                               int has_alpha, int *loss_ptr);
4667 #endif /* FF_API_FIND_BEST_PIX_FMT */
4668
4669 /**
4670  * Find the best pixel format to convert to given a certain source pixel
4671  * format.  When converting from one pixel format to another, information loss
4672  * may occur.  For example, when converting from RGB24 to GRAY, the color
4673  * information will be lost. Similarly, other losses occur when converting from
4674  * some formats to other formats. avcodec_find_best_pix_fmt_of_2() searches which of
4675  * the given pixel formats should be used to suffer the least amount of loss.
4676  * The pixel formats from which it chooses one, are determined by the
4677  * pix_fmt_list parameter.
4678  *
4679  *
4680  * @param[in] pix_fmt_list AV_PIX_FMT_NONE terminated array of pixel formats to choose from
4681  * @param[in] src_pix_fmt source pixel format
4682  * @param[in] has_alpha Whether the source pixel format alpha channel is used.
4683  * @param[out] loss_ptr Combination of flags informing you what kind of losses will occur.
4684  * @return The best pixel format to convert to or -1 if none was found.
4685  */
4686 enum AVPixelFormat avcodec_find_best_pix_fmt_of_list(enum AVPixelFormat *pix_fmt_list,
4687                                             enum AVPixelFormat src_pix_fmt,
4688                                             int has_alpha, int *loss_ptr);
4689
4690 /**
4691  * Find the best pixel format to convert to given a certain source pixel
4692  * format and a selection of two destination pixel formats. When converting from
4693  * one pixel format to another, information loss may occur.  For example, when converting
4694  * from RGB24 to GRAY, the color information will be lost. Similarly, other losses occur when
4695  * converting from some formats to other formats. avcodec_find_best_pix_fmt_of_2() selects which of
4696  * the given pixel formats should be used to suffer the least amount of loss.
4697  *
4698  * If one of the destination formats is AV_PIX_FMT_NONE the other pixel format (if valid) will be
4699  * returned.
4700  *
4701  * @code
4702  * src_pix_fmt = AV_PIX_FMT_YUV420P;
4703  * dst_pix_fmt1= AV_PIX_FMT_RGB24;
4704  * dst_pix_fmt2= AV_PIX_FMT_GRAY8;
4705  * dst_pix_fmt3= AV_PIX_FMT_RGB8;
4706  * loss= FF_LOSS_CHROMA; // don't care about chroma loss, so chroma loss will be ignored.
4707  * dst_pix_fmt = avcodec_find_best_pix_fmt_of_2(dst_pix_fmt1, dst_pix_fmt2, src_pix_fmt, alpha, &loss);
4708  * dst_pix_fmt = avcodec_find_best_pix_fmt_of_2(dst_pix_fmt, dst_pix_fmt3, src_pix_fmt, alpha, &loss);
4709  * @endcode
4710  *
4711  * @param[in] dst_pix_fmt1 One of the two destination pixel formats to choose from
4712  * @param[in] dst_pix_fmt2 The other of the two destination pixel formats to choose from
4713  * @param[in] src_pix_fmt Source pixel format
4714  * @param[in] has_alpha Whether the source pixel format alpha channel is used.
4715  * @param[in, out] loss_ptr Combination of loss flags. In: selects which of the losses to ignore, i.e.
4716  *                               NULL or value of zero means we care about all losses. Out: the loss
4717  *                               that occurs when converting from src to selected dst pixel format.
4718  * @return The best pixel format to convert to or -1 if none was found.
4719  */
4720 enum AVPixelFormat avcodec_find_best_pix_fmt_of_2(enum AVPixelFormat dst_pix_fmt1, enum AVPixelFormat dst_pix_fmt2,
4721                                             enum AVPixelFormat src_pix_fmt, int has_alpha, int *loss_ptr);
4722
4723 attribute_deprecated
4724 #if AV_HAVE_INCOMPATIBLE_FORK_ABI
4725 enum AVPixelFormat avcodec_find_best_pix_fmt2(enum AVPixelFormat *pix_fmt_list,
4726                                               enum AVPixelFormat src_pix_fmt,
4727                                               int has_alpha, int *loss_ptr);
4728 #else
4729 enum AVPixelFormat avcodec_find_best_pix_fmt2(enum AVPixelFormat dst_pix_fmt1, enum AVPixelFormat dst_pix_fmt2,
4730                                             enum AVPixelFormat src_pix_fmt, int has_alpha, int *loss_ptr);
4731 #endif
4732
4733
4734 enum AVPixelFormat avcodec_default_get_format(struct AVCodecContext *s, const enum AVPixelFormat * fmt);
4735
4736 /**
4737  * @}
4738  */
4739
4740 void avcodec_set_dimensions(AVCodecContext *s, int width, int height);
4741
4742 /**
4743  * Put a string representing the codec tag codec_tag in buf.
4744  *
4745  * @param buf_size size in bytes of buf
4746  * @return the length of the string that would have been generated if
4747  * enough space had been available, excluding the trailing null
4748  */
4749 size_t av_get_codec_tag_string(char *buf, size_t buf_size, unsigned int codec_tag);
4750
4751 void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode);
4752
4753 /**
4754  * Return a name for the specified profile, if available.
4755  *
4756  * @param codec the codec that is searched for the given profile
4757  * @param profile the profile value for which a name is requested
4758  * @return A name for the profile if found, NULL otherwise.
4759  */
4760 const char *av_get_profile_name(const AVCodec *codec, int profile);
4761
4762 int avcodec_default_execute(AVCodecContext *c, int (*func)(AVCodecContext *c2, void *arg2),void *arg, int *ret, int count, int size);
4763 int avcodec_default_execute2(AVCodecContext *c, int (*func)(AVCodecContext *c2, void *arg2, int, int),void *arg, int *ret, int count);
4764 //FIXME func typedef
4765
4766 /**
4767  * Fill audio frame data and linesize.
4768  * AVFrame extended_data channel pointers are allocated if necessary for
4769  * planar audio.
4770  *
4771  * @param frame       the AVFrame
4772  *                    frame->nb_samples must be set prior to calling the
4773  *                    function. This function fills in frame->data,
4774  *                    frame->extended_data, frame->linesize[0].
4775  * @param nb_channels channel count
4776  * @param sample_fmt  sample format
4777  * @param buf         buffer to use for frame data
4778  * @param buf_size    size of buffer
4779  * @param align       plane size sample alignment (0 = default)
4780  * @return            0 on success, negative error code on failure
4781  */
4782 int avcodec_fill_audio_frame(AVFrame *frame, int nb_channels,
4783                              enum AVSampleFormat sample_fmt, const uint8_t *buf,
4784                              int buf_size, int align);
4785
4786 /**
4787  * Flush buffers, should be called when seeking or when switching to a different stream.
4788  */
4789 void avcodec_flush_buffers(AVCodecContext *avctx);
4790
4791 void avcodec_default_free_buffers(AVCodecContext *s);
4792
4793 /**
4794  * Return codec bits per sample.
4795  *
4796  * @param[in] codec_id the codec
4797  * @return Number of bits per sample or zero if unknown for the given codec.
4798  */
4799 int av_get_bits_per_sample(enum AVCodecID codec_id);
4800
4801 /**
4802  * Return the PCM codec associated with a sample format.
4803  * @param be  endianness, 0 for little, 1 for big,
4804  *            -1 (or anything else) for native
4805  * @return  AV_CODEC_ID_PCM_* or AV_CODEC_ID_NONE
4806  */
4807 enum AVCodecID av_get_pcm_codec(enum AVSampleFormat fmt, int be);
4808
4809 /**
4810  * Return codec bits per sample.
4811  * Only return non-zero if the bits per sample is exactly correct, not an
4812  * approximation.
4813  *
4814  * @param[in] codec_id the codec
4815  * @return Number of bits per sample or zero if unknown for the given codec.
4816  */
4817 int av_get_exact_bits_per_sample(enum AVCodecID codec_id);
4818
4819 /**
4820  * Return audio frame duration.
4821  *
4822  * @param avctx        codec context
4823  * @param frame_bytes  size of the frame, or 0 if unknown
4824  * @return             frame duration, in samples, if known. 0 if not able to
4825  *                     determine.
4826  */
4827 int av_get_audio_frame_duration(AVCodecContext *avctx, int frame_bytes);
4828
4829
4830 typedef struct AVBitStreamFilterContext {
4831     void *priv_data;
4832     struct AVBitStreamFilter *filter;
4833     AVCodecParserContext *parser;
4834     struct AVBitStreamFilterContext *next;
4835 } AVBitStreamFilterContext;
4836
4837
4838 typedef struct AVBitStreamFilter {
4839     const char *name;
4840     int priv_data_size;
4841     int (*filter)(AVBitStreamFilterContext *bsfc,
4842                   AVCodecContext *avctx, const char *args,
4843                   uint8_t **poutbuf, int *poutbuf_size,
4844                   const uint8_t *buf, int buf_size, int keyframe);
4845     void (*close)(AVBitStreamFilterContext *bsfc);
4846     struct AVBitStreamFilter *next;
4847 } AVBitStreamFilter;
4848
4849 void av_register_bitstream_filter(AVBitStreamFilter *bsf);
4850 AVBitStreamFilterContext *av_bitstream_filter_init(const char *name);
4851 int av_bitstream_filter_filter(AVBitStreamFilterContext *bsfc,
4852                                AVCodecContext *avctx, const char *args,
4853                                uint8_t **poutbuf, int *poutbuf_size,
4854                                const uint8_t *buf, int buf_size, int keyframe);
4855 void av_bitstream_filter_close(AVBitStreamFilterContext *bsf);
4856
4857 AVBitStreamFilter *av_bitstream_filter_next(AVBitStreamFilter *f);
4858
4859 /* memory */
4860
4861 /**
4862  * Reallocate the given block if it is not large enough, otherwise do nothing.
4863  *
4864  * @see av_realloc
4865  */
4866 void *av_fast_realloc(void *ptr, unsigned int *size, size_t min_size);
4867
4868 /**
4869  * Allocate a buffer, reusing the given one if large enough.
4870  *
4871  * Contrary to av_fast_realloc the current buffer contents might not be
4872  * preserved and on error the old buffer is freed, thus no special
4873  * handling to avoid memleaks is necessary.
4874  *
4875  * @param ptr pointer to pointer to already allocated buffer, overwritten with pointer to new buffer
4876  * @param size size of the buffer *ptr points to
4877  * @param min_size minimum size of *ptr buffer after returning, *ptr will be NULL and
4878  *                 *size 0 if an error occurred.
4879  */
4880 void av_fast_malloc(void *ptr, unsigned int *size, size_t min_size);
4881
4882 /**
4883  * Same behaviour av_fast_malloc but the buffer has additional
4884  * FF_INPUT_PADDING_SIZE at the end which will will always be 0.
4885  *
4886  * In addition the whole buffer will initially and after resizes
4887  * be 0-initialized so that no uninitialized data will ever appear.
4888  */
4889 void av_fast_padded_malloc(void *ptr, unsigned int *size, size_t min_size);
4890
4891 /**
4892  * Same behaviour av_fast_padded_malloc except that buffer will always
4893  * be 0-initialized after call.
4894  */
4895 void av_fast_padded_mallocz(void *ptr, unsigned int *size, size_t min_size);
4896
4897 /**
4898  * Encode extradata length to a buffer. Used by xiph codecs.
4899  *
4900  * @param s buffer to write to; must be at least (v/255+1) bytes long
4901  * @param v size of extradata in bytes
4902  * @return number of bytes written to the buffer.
4903  */
4904 unsigned int av_xiphlacing(unsigned char *s, unsigned int v);
4905
4906 /**
4907  * Log a generic warning message about a missing feature. This function is
4908  * intended to be used internally by FFmpeg (libavcodec, libavformat, etc.)
4909  * only, and would normally not be used by applications.
4910  * @param[in] avc a pointer to an arbitrary struct of which the first field is
4911  * a pointer to an AVClass struct
4912  * @param[in] feature string containing the name of the missing feature
4913  * @param[in] want_sample indicates if samples are wanted which exhibit this feature.
4914  * If want_sample is non-zero, additional verbage will be added to the log
4915  * message which tells the user how to report samples to the development
4916  * mailing list.
4917  */
4918 void av_log_missing_feature(void *avc, const char *feature, int want_sample);
4919
4920 /**
4921  * Log a generic warning message asking for a sample. This function is
4922  * intended to be used internally by FFmpeg (libavcodec, libavformat, etc.)
4923  * only, and would normally not be used by applications.
4924  * @param[in] avc a pointer to an arbitrary struct of which the first field is
4925  * a pointer to an AVClass struct
4926  * @param[in] msg string containing an optional message, or NULL if no message
4927  */
4928 void av_log_ask_for_sample(void *avc, const char *msg, ...) av_printf_format(2, 3);
4929
4930 /**
4931  * Register the hardware accelerator hwaccel.
4932  */
4933 void av_register_hwaccel(AVHWAccel *hwaccel);
4934
4935 /**
4936  * If hwaccel is NULL, returns the first registered hardware accelerator,
4937  * if hwaccel is non-NULL, returns the next registered hardware accelerator
4938  * after hwaccel, or NULL if hwaccel is the last one.
4939  */
4940 AVHWAccel *av_hwaccel_next(AVHWAccel *hwaccel);
4941
4942
4943 /**
4944  * Lock operation used by lockmgr
4945  */
4946 enum AVLockOp {
4947   AV_LOCK_CREATE,  ///< Create a mutex
4948   AV_LOCK_OBTAIN,  ///< Lock the mutex
4949   AV_LOCK_RELEASE, ///< Unlock the mutex
4950   AV_LOCK_DESTROY, ///< Free mutex resources
4951 };
4952
4953 /**
4954  * Register a user provided lock manager supporting the operations
4955  * specified by AVLockOp. mutex points to a (void *) where the
4956  * lockmgr should store/get a pointer to a user allocated mutex. It's
4957  * NULL upon AV_LOCK_CREATE and != NULL for all other ops.
4958  *
4959  * @param cb User defined callback. Note: FFmpeg may invoke calls to this
4960  *           callback during the call to av_lockmgr_register().
4961  *           Thus, the application must be prepared to handle that.
4962  *           If cb is set to NULL the lockmgr will be unregistered.
4963  *           Also note that during unregistration the previously registered
4964  *           lockmgr callback may also be invoked.
4965  */
4966 int av_lockmgr_register(int (*cb)(void **mutex, enum AVLockOp op));
4967
4968 /**
4969  * Get the type of the given codec.
4970  */
4971 enum AVMediaType avcodec_get_type(enum AVCodecID codec_id);
4972
4973 /**
4974  * Get the name of a codec.
4975  * @return  a static string identifying the codec; never NULL
4976  */
4977 const char *avcodec_get_name(enum AVCodecID id);
4978
4979 /**
4980  * @return a positive value if s is open (i.e. avcodec_open2() was called on it
4981  * with no corresponding avcodec_close()), 0 otherwise.
4982  */
4983 int avcodec_is_open(AVCodecContext *s);
4984
4985 /**
4986  * @return a non-zero number if codec is an encoder, zero otherwise
4987  */
4988 int av_codec_is_encoder(const AVCodec *codec);
4989
4990 /**
4991  * @return a non-zero number if codec is a decoder, zero otherwise
4992  */
4993 int av_codec_is_decoder(const AVCodec *codec);
4994
4995 /**
4996  * @return descriptor for given codec ID or NULL if no descriptor exists.
4997  */
4998 const AVCodecDescriptor *avcodec_descriptor_get(enum AVCodecID id);
4999
5000 /**
5001  * Iterate over all codec descriptors known to libavcodec.
5002  *
5003  * @param prev previous descriptor. NULL to get the first descriptor.
5004  *
5005  * @return next descriptor or NULL after the last descriptor
5006  */
5007 const AVCodecDescriptor *avcodec_descriptor_next(const AVCodecDescriptor *prev);
5008
5009 /**
5010  * @return codec descriptor with the given name or NULL if no such descriptor
5011  *         exists.
5012  */
5013 const AVCodecDescriptor *avcodec_descriptor_get_by_name(const char *name);
5014
5015 /**
5016  * @}
5017  */
5018
5019 #endif /* AVCODEC_AVCODEC_H */