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 module ffmpeg.libavcodec.avcodec;
22 
23 
24 
25 import std.stdint;
26 import core.vararg;
27 
28 //#include <errno.h>
29 import ffmpeg.libavutil.samplefmt;
30 //#include "libavutil/attributes.h"
31 import ffmpeg.libavutil.avutil;
32 import ffmpeg.libavutil.buffer;
33 //#include "libavutil/cpu.h"
34 import ffmpeg.libavutil.channel_layout;
35 import ffmpeg.libavutil.dict;
36 import ffmpeg.libavutil.frame;
37 import ffmpeg.libavutil.log;
38 import ffmpeg.libavutil.pixfmt;
39 import ffmpeg.libavutil.rational;
40 
41 import ffmpeg.libavcodec.avcodec_version;
42 
43 @nogc nothrow extern(C):
44 
45 /**
46  * @defgroup libavc Encoding/Decoding Library
47  * @{
48  *
49  * @defgroup lavc_decoding Decoding
50  * @{
51  * @}
52  *
53  * @defgroup lavc_encoding Encoding
54  * @{
55  * @}
56  *
57  * @defgroup lavc_codec Codecs
58  * @{
59  * @defgroup lavc_codec_native Native Codecs
60  * @{
61  * @}
62  * @defgroup lavc_codec_wrappers External library wrappers
63  * @{
64  * @}
65  * @defgroup lavc_codec_hwaccel Hardware Accelerators bridge
66  * @{
67  * @}
68  * @}
69  * @defgroup lavc_internal Internal
70  * @{
71  * @}
72  * @}
73  */
74 
75 /**
76  * @ingroup libavc
77  * @defgroup lavc_encdec send/receive encoding and decoding API overview
78  * @{
79  *
80  * The avcodec_send_packet()/avcodec_receive_frame()/avcodec_send_frame()/
81  * avcodec_receive_packet() functions provide an encode/decode API, which
82  * decouples input and output.
83  *
84  * The API is very similar for encoding/decoding and audio/video, and works as
85  * follows:
86  * - Set up and open the AVCodecContext as usual.
87  * - Send valid input:
88  *   - For decoding, call avcodec_send_packet() to give the decoder raw
89  *     compressed data in an AVPacket.
90  *   - For encoding, call avcodec_send_frame() to give the decoder an AVFrame
91  *     containing uncompressed audio or video.
92  *   In both cases, it is recommended that AVPackets and AVFrames are
93  *   refcounted, or libavcodec might have to copy the input data. (libavformat
94  *   always returns refcounted AVPackets, and av_frame_get_buffer() allocates
95  *   refcounted AVFrames.)
96  * - Receive output in a loop. Periodically call one of the avcodec_receive_*()
97  *   functions and process their output:
98  *   - For decoding, call avcodec_receive_frame(). On success, it will return
99  *     an AVFrame containing uncompressed audio or video data.
100  *   - For encoding, call avcodec_receive_packet(). On success, it will return
101  *     an AVPacket with a compressed frame.
102  *   Repeat this call until it returns AVERROR(EAGAIN) or an error. The
103  *   AVERROR(EAGAIN) return value means that new input data is required to
104  *   return new output. In this case, continue with sending input. For each
105  *   input frame/packet, the codec will typically return 1 output frame/packet,
106  *   but it can also be 0 or more than 1.
107  *
108  * At the beginning of decoding or encoding, the codec might accept multiple
109  * input frames/packets without returning a frame, until its internal buffers
110  * are filled. This situation is handled transparently if you follow the steps
111  * outlined above.
112  *
113  * End of stream situations. These require "flushing" (aka draining) the codec,
114  * as the codec might buffer multiple frames or packets internally for
115  * performance or out of necessity (consider B-frames).
116  * This is handled as follows:
117  * - Instead of valid input, send NULL to the avcodec_send_packet() (decoding)
118  *   or avcodec_send_frame() (encoding) functions. This will enter draining
119  *   mode.
120  * - Call avcodec_receive_frame() (decoding) or avcodec_receive_packet()
121  *   (encoding) in a loop until AVERROR_EOF is returned. The functions will
122  *   not return AVERROR(EAGAIN), unless you forgot to enter draining mode.
123  * - Before decoding can be resumed again, the codec has to be reset with
124  *   avcodec_flush_buffers().
125  *
126  * Using the API as outlined above is highly recommended. But it is also
127  * possible to call functions outside of this rigid schema. For example, you can
128  * call avcodec_send_packet() repeatedly without calling
129  * avcodec_receive_frame(). In this case, avcodec_send_packet() will succeed
130  * until the codec's internal buffer has been filled up (which is typically of
131  * size 1 per output frame, after initial input), and then reject input with
132  * AVERROR(EAGAIN). Once it starts rejecting input, you have no choice but to
133  * read at least some output.
134  *
135  * Not all codecs will follow a rigid and predictable dataflow; the only
136  * guarantee is that an AVERROR(EAGAIN) return value on a send/receive call on
137  * one end implies that a receive/send call on the other end will succeed. In
138  * general, no codec will permit unlimited buffering of input or output.
139  *
140  * This API replaces the following legacy functions:
141  * - avcodec_decode_video2() and avcodec_decode_audio4():
142  *   Use avcodec_send_packet() to feed input to the decoder, then use
143  *   avcodec_receive_frame() to receive decoded frames after each packet.
144  *   Unlike with the old video decoding API, multiple frames might result from
145  *   a packet. For audio, splitting the input packet into frames by partially
146  *   decoding packets becomes transparent to the API user. You never need to
147  *   feed an AVPacket to the API twice.
148  *   Additionally, sending a flush/draining packet is required only once.
149  * - avcodec_encode_video2()/avcodec_encode_audio2():
150  *   Use avcodec_send_frame() to feed input to the encoder, then use
151  *   avcodec_receive_packet() to receive encoded packets.
152  *   Providing user-allocated buffers for avcodec_receive_packet() is not
153  *   possible.
154  * - The new API does not handle subtitles yet.
155  *
156  * Mixing new and old function calls on the same AVCodecContext is not allowed,
157  * and will result in undefined behavior.
158  *
159  * Some codecs might require using the new API; using the old API will return
160  * an error when calling it.
161  * @}
162  */
163 
164 /**
165  * @defgroup lavc_core Core functions/structures.
166  * @ingroup libavc
167  *
168  * Basic definitions, functions for querying libavcodec capabilities,
169  * allocating core structures, etc.
170  * @{
171  */
172 
173 
174 /**
175  * Identify the syntax and semantics of the bitstream.
176  * The principle is roughly:
177  * Two decoders with the same ID can decode the same streams.
178  * Two encoders with the same ID can encode compatible streams.
179  * There may be slight deviations from the principle due to implementation
180  * details.
181  *
182  * If you add a codec ID to this list, add it so that
183  * 1. no value of an existing codec ID changes (that would break ABI),
184  * 2. it is as close as possible to similar codecs
185  *
186  * After adding new codec IDs, do not forget to add an entry to the codec
187  * descriptor list and bump libavcodec minor version.
188  */
189 enum AVCodecID {
190     AV_CODEC_ID_NONE,
191 
192     /* video codecs */
193     AV_CODEC_ID_MPEG1VIDEO,
194     AV_CODEC_ID_MPEG2VIDEO, ///< preferred ID for MPEG-1/2 video decoding
195 //if(FF_API_XVMC) { - Always assume XVMC is available
196     AV_CODEC_ID_MPEG2VIDEO_XVMC,
197 //}
198     AV_CODEC_ID_H261,
199     AV_CODEC_ID_H263,
200     AV_CODEC_ID_RV10,
201     AV_CODEC_ID_RV20,
202     AV_CODEC_ID_MJPEG,
203     AV_CODEC_ID_MJPEGB,
204     AV_CODEC_ID_LJPEG,
205     AV_CODEC_ID_SP5X,
206     AV_CODEC_ID_JPEGLS,
207     AV_CODEC_ID_MPEG4,
208     AV_CODEC_ID_RAWVIDEO,
209     AV_CODEC_ID_MSMPEG4V1,
210     AV_CODEC_ID_MSMPEG4V2,
211     AV_CODEC_ID_MSMPEG4V3,
212     AV_CODEC_ID_WMV1,
213     AV_CODEC_ID_WMV2,
214     AV_CODEC_ID_H263P,
215     AV_CODEC_ID_H263I,
216     AV_CODEC_ID_FLV1,
217     AV_CODEC_ID_SVQ1,
218     AV_CODEC_ID_SVQ3,
219     AV_CODEC_ID_DVVIDEO,
220     AV_CODEC_ID_HUFFYUV,
221     AV_CODEC_ID_CYUV,
222     AV_CODEC_ID_H264,
223     AV_CODEC_ID_INDEO3,
224     AV_CODEC_ID_VP3,
225     AV_CODEC_ID_THEORA,
226     AV_CODEC_ID_ASV1,
227     AV_CODEC_ID_ASV2,
228     AV_CODEC_ID_FFV1,
229     AV_CODEC_ID_4XM,
230     AV_CODEC_ID_VCR1,
231     AV_CODEC_ID_CLJR,
232     AV_CODEC_ID_MDEC,
233     AV_CODEC_ID_ROQ,
234     AV_CODEC_ID_INTERPLAY_VIDEO,
235     AV_CODEC_ID_XAN_WC3,
236     AV_CODEC_ID_XAN_WC4,
237     AV_CODEC_ID_RPZA,
238     AV_CODEC_ID_CINEPAK,
239     AV_CODEC_ID_WS_VQA,
240     AV_CODEC_ID_MSRLE,
241     AV_CODEC_ID_MSVIDEO1,
242     AV_CODEC_ID_IDCIN,
243     AV_CODEC_ID_8BPS,
244     AV_CODEC_ID_SMC,
245     AV_CODEC_ID_FLIC,
246     AV_CODEC_ID_TRUEMOTION1,
247     AV_CODEC_ID_VMDVIDEO,
248     AV_CODEC_ID_MSZH,
249     AV_CODEC_ID_ZLIB,
250     AV_CODEC_ID_QTRLE,
251     AV_CODEC_ID_TSCC,
252     AV_CODEC_ID_ULTI,
253     AV_CODEC_ID_QDRAW,
254     AV_CODEC_ID_VIXL,
255     AV_CODEC_ID_QPEG,
256     AV_CODEC_ID_PNG,
257     AV_CODEC_ID_PPM,
258     AV_CODEC_ID_PBM,
259     AV_CODEC_ID_PGM,
260     AV_CODEC_ID_PGMYUV,
261     AV_CODEC_ID_PAM,
262     AV_CODEC_ID_FFVHUFF,
263     AV_CODEC_ID_RV30,
264     AV_CODEC_ID_RV40,
265     AV_CODEC_ID_VC1,
266     AV_CODEC_ID_WMV3,
267     AV_CODEC_ID_LOCO,
268     AV_CODEC_ID_WNV1,
269     AV_CODEC_ID_AASC,
270     AV_CODEC_ID_INDEO2,
271     AV_CODEC_ID_FRAPS,
272     AV_CODEC_ID_TRUEMOTION2,
273     AV_CODEC_ID_BMP,
274     AV_CODEC_ID_CSCD,
275     AV_CODEC_ID_MMVIDEO,
276     AV_CODEC_ID_ZMBV,
277     AV_CODEC_ID_AVS,
278     AV_CODEC_ID_SMACKVIDEO,
279     AV_CODEC_ID_NUV,
280     AV_CODEC_ID_KMVC,
281     AV_CODEC_ID_FLASHSV,
282     AV_CODEC_ID_CAVS,
283     AV_CODEC_ID_JPEG2000,
284     AV_CODEC_ID_VMNC,
285     AV_CODEC_ID_VP5,
286     AV_CODEC_ID_VP6,
287     AV_CODEC_ID_VP6F,
288     AV_CODEC_ID_TARGA,
289     AV_CODEC_ID_DSICINVIDEO,
290     AV_CODEC_ID_TIERTEXSEQVIDEO,
291     AV_CODEC_ID_TIFF,
292     AV_CODEC_ID_GIF,
293     AV_CODEC_ID_DXA,
294     AV_CODEC_ID_DNXHD,
295     AV_CODEC_ID_THP,
296     AV_CODEC_ID_SGI,
297     AV_CODEC_ID_C93,
298     AV_CODEC_ID_BETHSOFTVID,
299     AV_CODEC_ID_PTX,
300     AV_CODEC_ID_TXD,
301     AV_CODEC_ID_VP6A,
302     AV_CODEC_ID_AMV,
303     AV_CODEC_ID_VB,
304     AV_CODEC_ID_PCX,
305     AV_CODEC_ID_SUNRAST,
306     AV_CODEC_ID_INDEO4,
307     AV_CODEC_ID_INDEO5,
308     AV_CODEC_ID_MIMIC,
309     AV_CODEC_ID_RL2,
310     AV_CODEC_ID_ESCAPE124,
311     AV_CODEC_ID_DIRAC,
312     AV_CODEC_ID_BFI,
313     AV_CODEC_ID_CMV,
314     AV_CODEC_ID_MOTIONPIXELS,
315     AV_CODEC_ID_TGV,
316     AV_CODEC_ID_TGQ,
317     AV_CODEC_ID_TQI,
318     AV_CODEC_ID_AURA,
319     AV_CODEC_ID_AURA2,
320     AV_CODEC_ID_V210X,
321     AV_CODEC_ID_TMV,
322     AV_CODEC_ID_V210,
323     AV_CODEC_ID_DPX,
324     AV_CODEC_ID_MAD,
325     AV_CODEC_ID_FRWU,
326     AV_CODEC_ID_FLASHSV2,
327     AV_CODEC_ID_CDGRAPHICS,
328     AV_CODEC_ID_R210,
329     AV_CODEC_ID_ANM,
330     AV_CODEC_ID_BINKVIDEO,
331     AV_CODEC_ID_IFF_ILBM,
332 //#define AV_CODEC_ID_IFF_BYTERUN1 AV_CODEC_ID_IFF_ILBM
333     AV_CODEC_ID_KGV1,
334     AV_CODEC_ID_YOP,
335     AV_CODEC_ID_VP8,
336     AV_CODEC_ID_PICTOR,
337     AV_CODEC_ID_ANSI,
338     AV_CODEC_ID_A64_MULTI,
339     AV_CODEC_ID_A64_MULTI5,
340     AV_CODEC_ID_R10K,
341     AV_CODEC_ID_MXPEG,
342     AV_CODEC_ID_LAGARITH,
343     AV_CODEC_ID_PRORES,
344     AV_CODEC_ID_JV,
345     AV_CODEC_ID_DFA,
346     AV_CODEC_ID_WMV3IMAGE,
347     AV_CODEC_ID_VC1IMAGE,
348     AV_CODEC_ID_UTVIDEO,
349     AV_CODEC_ID_BMV_VIDEO,
350     AV_CODEC_ID_VBLE,
351     AV_CODEC_ID_DXTORY,
352     AV_CODEC_ID_V410,
353     AV_CODEC_ID_XWD,
354     AV_CODEC_ID_CDXL,
355     AV_CODEC_ID_XBM,
356     AV_CODEC_ID_ZEROCODEC,
357     AV_CODEC_ID_MSS1,
358     AV_CODEC_ID_MSA1,
359     AV_CODEC_ID_TSCC2,
360     AV_CODEC_ID_MTS2,
361     AV_CODEC_ID_CLLC,
362     AV_CODEC_ID_MSS2,
363     AV_CODEC_ID_VP9,
364     AV_CODEC_ID_AIC,
365     AV_CODEC_ID_ESCAPE130,
366     AV_CODEC_ID_G2M,
367     AV_CODEC_ID_WEBP,
368     AV_CODEC_ID_HNM4_VIDEO,
369     AV_CODEC_ID_HEVC,
370 //#define AV_CODEC_ID_H265 AV_CODEC_ID_HEVC
371     AV_CODEC_ID_FIC,
372     AV_CODEC_ID_ALIAS_PIX,
373     AV_CODEC_ID_BRENDER_PIX,
374     AV_CODEC_ID_PAF_VIDEO,
375     AV_CODEC_ID_EXR,
376     AV_CODEC_ID_VP7,
377     AV_CODEC_ID_SANM,
378     AV_CODEC_ID_SGIRLE,
379     AV_CODEC_ID_MVC1,
380     AV_CODEC_ID_MVC2,
381     AV_CODEC_ID_HQX,
382     AV_CODEC_ID_TDSC,
383     AV_CODEC_ID_HQ_HQA,
384     AV_CODEC_ID_HAP,
385     AV_CODEC_ID_DDS,
386     AV_CODEC_ID_DXV,
387     AV_CODEC_ID_SCREENPRESSO,
388     AV_CODEC_ID_RSCC,
389 
390     AV_CODEC_ID_Y41P = 0x8000,
391     AV_CODEC_ID_AVRP,
392     AV_CODEC_ID_012V,
393     AV_CODEC_ID_AVUI,
394     AV_CODEC_ID_AYUV,
395     AV_CODEC_ID_TARGA_Y216,
396     AV_CODEC_ID_V308,
397     AV_CODEC_ID_V408,
398     AV_CODEC_ID_YUV4,
399     AV_CODEC_ID_AVRN,
400     AV_CODEC_ID_CPIA,
401     AV_CODEC_ID_XFACE,
402     AV_CODEC_ID_SNOW,
403     AV_CODEC_ID_SMVJPEG,
404     AV_CODEC_ID_APNG,
405     AV_CODEC_ID_DAALA,
406     AV_CODEC_ID_CFHD,
407     AV_CODEC_ID_TRUEMOTION2RT,
408     AV_CODEC_ID_M101,
409     AV_CODEC_ID_MAGICYUV,
410     AV_CODEC_ID_SHEERVIDEO,
411     AV_CODEC_ID_YLC,
412 
413     /* various PCM "codecs" */
414     AV_CODEC_ID_FIRST_AUDIO = 0x10000,     ///< A dummy id pointing at the start of audio codecs
415     AV_CODEC_ID_PCM_S16LE = 0x10000,
416     AV_CODEC_ID_PCM_S16BE,
417     AV_CODEC_ID_PCM_U16LE,
418     AV_CODEC_ID_PCM_U16BE,
419     AV_CODEC_ID_PCM_S8,
420     AV_CODEC_ID_PCM_U8,
421     AV_CODEC_ID_PCM_MULAW,
422     AV_CODEC_ID_PCM_ALAW,
423     AV_CODEC_ID_PCM_S32LE,
424     AV_CODEC_ID_PCM_S32BE,
425     AV_CODEC_ID_PCM_U32LE,
426     AV_CODEC_ID_PCM_U32BE,
427     AV_CODEC_ID_PCM_S24LE,
428     AV_CODEC_ID_PCM_S24BE,
429     AV_CODEC_ID_PCM_U24LE,
430     AV_CODEC_ID_PCM_U24BE,
431     AV_CODEC_ID_PCM_S24DAUD,
432     AV_CODEC_ID_PCM_ZORK,
433     AV_CODEC_ID_PCM_S16LE_PLANAR,
434     AV_CODEC_ID_PCM_DVD,
435     AV_CODEC_ID_PCM_F32BE,
436     AV_CODEC_ID_PCM_F32LE,
437     AV_CODEC_ID_PCM_F64BE,
438     AV_CODEC_ID_PCM_F64LE,
439     AV_CODEC_ID_PCM_BLURAY,
440     AV_CODEC_ID_PCM_LXF,
441     AV_CODEC_ID_S302M,
442     AV_CODEC_ID_PCM_S8_PLANAR,
443     AV_CODEC_ID_PCM_S24LE_PLANAR,
444     AV_CODEC_ID_PCM_S32LE_PLANAR,
445     AV_CODEC_ID_PCM_S16BE_PLANAR,
446     /* new PCM "codecs" should be added right below this line starting with
447      * an explicit value of for example 0x10800
448      */
449 
450     /* various ADPCM codecs */
451     AV_CODEC_ID_ADPCM_IMA_QT = 0x11000,
452     AV_CODEC_ID_ADPCM_IMA_WAV,
453     AV_CODEC_ID_ADPCM_IMA_DK3,
454     AV_CODEC_ID_ADPCM_IMA_DK4,
455     AV_CODEC_ID_ADPCM_IMA_WS,
456     AV_CODEC_ID_ADPCM_IMA_SMJPEG,
457     AV_CODEC_ID_ADPCM_MS,
458     AV_CODEC_ID_ADPCM_4XM,
459     AV_CODEC_ID_ADPCM_XA,
460     AV_CODEC_ID_ADPCM_ADX,
461     AV_CODEC_ID_ADPCM_EA,
462     AV_CODEC_ID_ADPCM_G726,
463     AV_CODEC_ID_ADPCM_CT,
464     AV_CODEC_ID_ADPCM_SWF,
465     AV_CODEC_ID_ADPCM_YAMAHA,
466     AV_CODEC_ID_ADPCM_SBPRO_4,
467     AV_CODEC_ID_ADPCM_SBPRO_3,
468     AV_CODEC_ID_ADPCM_SBPRO_2,
469     AV_CODEC_ID_ADPCM_THP,
470     AV_CODEC_ID_ADPCM_IMA_AMV,
471     AV_CODEC_ID_ADPCM_EA_R1,
472     AV_CODEC_ID_ADPCM_EA_R3,
473     AV_CODEC_ID_ADPCM_EA_R2,
474     AV_CODEC_ID_ADPCM_IMA_EA_SEAD,
475     AV_CODEC_ID_ADPCM_IMA_EA_EACS,
476     AV_CODEC_ID_ADPCM_EA_XAS,
477     AV_CODEC_ID_ADPCM_EA_MAXIS_XA,
478     AV_CODEC_ID_ADPCM_IMA_ISS,
479     AV_CODEC_ID_ADPCM_G722,
480     AV_CODEC_ID_ADPCM_IMA_APC,
481     AV_CODEC_ID_ADPCM_VIMA,
482 //#if FF_API_VIMA_DECODER // - Always assume VIMA is available
483     AV_CODEC_ID_VIMA = AV_CODEC_ID_ADPCM_VIMA,
484 //#endif
485 
486     AV_CODEC_ID_ADPCM_AFC = 0x11800,
487     AV_CODEC_ID_ADPCM_IMA_OKI,
488     AV_CODEC_ID_ADPCM_DTK,
489     AV_CODEC_ID_ADPCM_IMA_RAD,
490     AV_CODEC_ID_ADPCM_G726LE,
491     AV_CODEC_ID_ADPCM_THP_LE,
492     AV_CODEC_ID_ADPCM_PSX,
493     AV_CODEC_ID_ADPCM_AICA,
494     AV_CODEC_ID_ADPCM_IMA_DAT4,
495     AV_CODEC_ID_ADPCM_MTAF,
496 
497     /* AMR */
498     AV_CODEC_ID_AMR_NB = 0x12000,
499     AV_CODEC_ID_AMR_WB,
500 
501     /* RealAudio codecs*/
502     AV_CODEC_ID_RA_144 = 0x13000,
503     AV_CODEC_ID_RA_288,
504 
505     /* various DPCM codecs */
506     AV_CODEC_ID_ROQ_DPCM = 0x14000,
507     AV_CODEC_ID_INTERPLAY_DPCM,
508     AV_CODEC_ID_XAN_DPCM,
509     AV_CODEC_ID_SOL_DPCM,
510 
511     AV_CODEC_ID_SDX2_DPCM = 0x14800,
512 
513     /* audio codecs */
514     AV_CODEC_ID_MP2 = 0x15000,
515     AV_CODEC_ID_MP3, ///< preferred ID for decoding MPEG audio layer 1, 2 or 3
516     AV_CODEC_ID_AAC,
517     AV_CODEC_ID_AC3,
518     AV_CODEC_ID_DTS,
519     AV_CODEC_ID_VORBIS,
520     AV_CODEC_ID_DVAUDIO,
521     AV_CODEC_ID_WMAV1,
522     AV_CODEC_ID_WMAV2,
523     AV_CODEC_ID_MACE3,
524     AV_CODEC_ID_MACE6,
525     AV_CODEC_ID_VMDAUDIO,
526     AV_CODEC_ID_FLAC,
527     AV_CODEC_ID_MP3ADU,
528     AV_CODEC_ID_MP3ON4,
529     AV_CODEC_ID_SHORTEN,
530     AV_CODEC_ID_ALAC,
531     AV_CODEC_ID_WESTWOOD_SND1,
532     AV_CODEC_ID_GSM, ///< as in Berlin toast format
533     AV_CODEC_ID_QDM2,
534     AV_CODEC_ID_COOK,
535     AV_CODEC_ID_TRUESPEECH,
536     AV_CODEC_ID_TTA,
537     AV_CODEC_ID_SMACKAUDIO,
538     AV_CODEC_ID_QCELP,
539     AV_CODEC_ID_WAVPACK,
540     AV_CODEC_ID_DSICINAUDIO,
541     AV_CODEC_ID_IMC,
542     AV_CODEC_ID_MUSEPACK7,
543     AV_CODEC_ID_MLP,
544     AV_CODEC_ID_GSM_MS, /* as found in WAV */
545     AV_CODEC_ID_ATRAC3,
546 //#if FF_API_VOXWARE // - Always assume VOXWARE is available
547     AV_CODEC_ID_VOXWARE,
548 //#endif
549     AV_CODEC_ID_APE,
550     AV_CODEC_ID_NELLYMOSER,
551     AV_CODEC_ID_MUSEPACK8,
552     AV_CODEC_ID_SPEEX,
553     AV_CODEC_ID_WMAVOICE,
554     AV_CODEC_ID_WMAPRO,
555     AV_CODEC_ID_WMALOSSLESS,
556     AV_CODEC_ID_ATRAC3P,
557     AV_CODEC_ID_EAC3,
558     AV_CODEC_ID_SIPR,
559     AV_CODEC_ID_MP1,
560     AV_CODEC_ID_TWINVQ,
561     AV_CODEC_ID_TRUEHD,
562     AV_CODEC_ID_MP4ALS,
563     AV_CODEC_ID_ATRAC1,
564     AV_CODEC_ID_BINKAUDIO_RDFT,
565     AV_CODEC_ID_BINKAUDIO_DCT,
566     AV_CODEC_ID_AAC_LATM,
567     AV_CODEC_ID_QDMC,
568     AV_CODEC_ID_CELT,
569     AV_CODEC_ID_G723_1,
570     AV_CODEC_ID_G729,
571     AV_CODEC_ID_8SVX_EXP,
572     AV_CODEC_ID_8SVX_FIB,
573     AV_CODEC_ID_BMV_AUDIO,
574     AV_CODEC_ID_RALF,
575     AV_CODEC_ID_IAC,
576     AV_CODEC_ID_ILBC,
577     AV_CODEC_ID_OPUS,
578     AV_CODEC_ID_COMFORT_NOISE,
579     AV_CODEC_ID_TAK,
580     AV_CODEC_ID_METASOUND,
581     AV_CODEC_ID_PAF_AUDIO,
582     AV_CODEC_ID_ON2AVC,
583     AV_CODEC_ID_DSS_SP,
584 
585     AV_CODEC_ID_FFWAVESYNTH = 0x15800,
586     AV_CODEC_ID_SONIC,
587     AV_CODEC_ID_SONIC_LS,
588     AV_CODEC_ID_EVRC,
589     AV_CODEC_ID_SMV,
590     AV_CODEC_ID_DSD_LSBF,
591     AV_CODEC_ID_DSD_MSBF,
592     AV_CODEC_ID_DSD_LSBF_PLANAR,
593     AV_CODEC_ID_DSD_MSBF_PLANAR,
594     AV_CODEC_ID_4GV,
595     AV_CODEC_ID_INTERPLAY_ACM,
596     AV_CODEC_ID_XMA1,
597     AV_CODEC_ID_XMA2,
598     AV_CODEC_ID_DST,
599 
600     /* subtitle codecs */
601     AV_CODEC_ID_FIRST_SUBTITLE = 0x17000,          ///< A dummy ID pointing at the start of subtitle codecs.
602     AV_CODEC_ID_DVD_SUBTITLE = 0x17000,
603     AV_CODEC_ID_DVB_SUBTITLE,
604     AV_CODEC_ID_TEXT,  ///< raw UTF-8 text
605     AV_CODEC_ID_XSUB,
606     AV_CODEC_ID_SSA,
607     AV_CODEC_ID_MOV_TEXT,
608     AV_CODEC_ID_HDMV_PGS_SUBTITLE,
609     AV_CODEC_ID_DVB_TELETEXT,
610     AV_CODEC_ID_SRT,
611 
612     AV_CODEC_ID_MICRODVD   = 0x17800,
613     AV_CODEC_ID_EIA_608,
614     AV_CODEC_ID_JACOSUB,
615     AV_CODEC_ID_SAMI,
616     AV_CODEC_ID_REALTEXT,
617     AV_CODEC_ID_STL,
618     AV_CODEC_ID_SUBVIEWER1,
619     AV_CODEC_ID_SUBVIEWER,
620     AV_CODEC_ID_SUBRIP,
621     AV_CODEC_ID_WEBVTT,
622     AV_CODEC_ID_MPL2,
623     AV_CODEC_ID_VPLAYER,
624     AV_CODEC_ID_PJS,
625     AV_CODEC_ID_ASS,
626     AV_CODEC_ID_HDMV_TEXT_SUBTITLE,
627 
628     /* other specific kind of codecs (generally used for attachments) */
629     AV_CODEC_ID_FIRST_UNKNOWN = 0x18000,           ///< A dummy ID pointing at the start of various fake codecs.
630     AV_CODEC_ID_TTF = 0x18000,
631 
632     AV_CODEC_ID_BINTEXT    = 0x18800,
633     AV_CODEC_ID_XBIN,
634     AV_CODEC_ID_IDF,
635     AV_CODEC_ID_OTF,
636     AV_CODEC_ID_SMPTE_KLV,
637     AV_CODEC_ID_DVD_NAV,
638     AV_CODEC_ID_TIMED_ID3,
639     AV_CODEC_ID_BIN_DATA,
640 
641 
642     AV_CODEC_ID_PROBE = 0x19000, ///< codec_id is not known (like AV_CODEC_ID_NONE) but lavf should attempt to identify it
643 
644     AV_CODEC_ID_MPEG2TS = 0x20000, /**< _FAKE_ codec to indicate a raw MPEG-2 TS
645                                 * stream (only used by libavformat) */
646     AV_CODEC_ID_MPEG4SYSTEMS = 0x20001, /**< _FAKE_ codec to indicate a MPEG-4 Systems
647                                 * stream (only used by libavformat) */
648     AV_CODEC_ID_FFMETADATA = 0x21000,   ///< Dummy codec for streams containing only metadata information.
649     AV_CODEC_ID_WRAPPED_AVFRAME = 0x21001, ///< Passthrough codec, AVFrames wrapped in AVPacket
650 }
651 
652 /**
653  * This struct describes the properties of a single codec described by an
654  * AVCodecID.
655  * @see avcodec_get_descriptor()
656  */
657 struct AVCodecDescriptor {
658     AVCodecID     id;
659     AVMediaType type;
660     /**
661      * Name of the codec described by this descriptor. It is non-empty and
662      * unique for each codec descriptor. It should contain alphanumeric
663      * characters and '_' only.
664      */
665     const char      *name;
666     /**
667      * A more descriptive name for this codec. May be NULL.
668      */
669     const char *long_name;
670     /**
671      * Codec properties, a combination of AV_CODEC_PROP_* flags.
672      */
673     int             props;
674     /**
675      * MIME type(s) associated with the codec.
676      * May be NULL; if not, a NULL-terminated array of MIME types.
677      * The first item is always non-NULL and is the preferred MIME type.
678      */
679     const char *mime_types;
680     /**
681      * If non-NULL, an array of profiles recognized for this codec.
682      * Terminated with FF_PROFILE_UNKNOWN.
683      */
684     const AVProfile *profiles;
685 } 
686 
687 /**
688  * Codec uses only intra compression.
689  * Video codecs only.
690  */
691 enum AV_CODEC_PROP_INTRA_ONLY =  (1 << 0);
692 /**
693  * Codec supports lossy compression. Audio and video codecs only.
694  * @note a codec may support both lossy and lossless
695  * compression modes
696  */
697 enum AV_CODEC_PROP_LOSSY   =     (1 << 1);
698 /**
699  * Codec supports lossless compression. Audio and video codecs only.
700  */
701 enum AV_CODEC_PROP_LOSSLESS  =   (1 << 2);
702 /**
703  * Codec supports frame reordering. That is, the coded order (the order in which
704  * the encoded packets are output by the encoders / stored / input to the
705  * decoders) may be different from the presentation order of the corresponding
706  * frames.
707  *
708  * For codecs that do not have this property set, PTS and DTS should always be
709  * equal.
710  */
711 enum AV_CODEC_PROP_REORDER   =   (1 << 3);
712 /**
713  * Subtitle codec is bitmap based
714  * Decoded AVSubtitle data can be read from the AVSubtitleRect->pict field.
715  */
716 enum AV_CODEC_PROP_BITMAP_SUB =  (1 << 16);
717 /**
718  * Subtitle codec is text based.
719  * Decoded AVSubtitle data can be read from the AVSubtitleRect->ass field.
720  */
721 enum AV_CODEC_PROP_TEXT_SUB   =  (1 << 17);
722 
723 /**
724  * @ingroup lavc_decoding
725  * Required number of additionally allocated bytes at the end of the input bitstream for decoding.
726  * This is mainly needed because some optimized bitstream readers read
727  * 32 or 64 bit at once and could read over the end.<br>
728  * Note: If the first 23 bits of the additional bytes are not 0, then damaged
729  * MPEG bitstreams could cause overread and segfault.
730  */
731 enum AV_INPUT_BUFFER_PADDING_SIZE = 32;
732 
733 /**
734  * @ingroup lavc_encoding
735  * minimum encoding buffer size
736  * Used to avoid some checks during header writing.
737  */
738 enum AV_INPUT_BUFFER_MIN_SIZE = 16_384;
739 
740 static if(FF_API_WITHOUT_PREFIX){
741     /**
742      * @deprecated use AV_INPUT_BUFFER_PADDING_SIZE instead
743      */
744     enum FF_INPUT_BUFFER_PADDING_SIZE = 32;
745 
746     /**
747      * @deprecated use AV_INPUT_BUFFER_MIN_SIZE instead
748      */
749     enum FF_MIN_BUFFER_SIZE = 16_384;
750 }
751 
752 /**
753  * @ingroup lavc_encoding
754  * motion estimation type.
755  * @deprecated use codec private option instead
756  */
757 static if(FF_API_MOTION_EST){
758     enum Motion_Est_ID {
759         ME_ZERO = 1,    ///< no search, that is use 0,0 vector whenever one is needed
760         ME_FULL,
761         ME_LOG,
762         ME_PHODS,
763         ME_EPZS,        ///< enhanced predictive zonal search
764         ME_X1,          ///< reserved for experiments
765         ME_HEX,         ///< hexagon based search
766         ME_UMH,         ///< uneven multi-hexagon search
767         ME_TESA,        ///< transformed exhaustive search algorithm
768         ME_ITER=50,     ///< iterative search
769     };
770 }
771 
772 /**
773  * @ingroup lavc_decoding
774  */
775 enum AVDiscard{
776     /* We leave some space between them for extensions (drop some
777      * keyframes for intra-only or drop just some bidir frames). */
778     AVDISCARD_NONE    =-16, ///< discard nothing
779     AVDISCARD_DEFAULT =  0, ///< discard useless packets like 0 size packets in avi
780     AVDISCARD_NONREF  =  8, ///< discard all non reference
781     AVDISCARD_BIDIR   = 16, ///< discard all bidirectional frames
782     AVDISCARD_NONINTRA= 24, ///< discard all non intra frames
783     AVDISCARD_NONKEY  = 32, ///< discard all frames except keyframes
784     AVDISCARD_ALL     = 48, ///< discard all
785 }
786 
787 enum AVAudioServiceType {
788     AV_AUDIO_SERVICE_TYPE_MAIN              = 0,
789     AV_AUDIO_SERVICE_TYPE_EFFECTS           = 1,
790     AV_AUDIO_SERVICE_TYPE_VISUALLY_IMPAIRED = 2,
791     AV_AUDIO_SERVICE_TYPE_HEARING_IMPAIRED  = 3,
792     AV_AUDIO_SERVICE_TYPE_DIALOGUE          = 4,
793     AV_AUDIO_SERVICE_TYPE_COMMENTARY        = 5,
794     AV_AUDIO_SERVICE_TYPE_EMERGENCY         = 6,
795     AV_AUDIO_SERVICE_TYPE_VOICE_OVER        = 7,
796     AV_AUDIO_SERVICE_TYPE_KARAOKE           = 8,
797     AV_AUDIO_SERVICE_TYPE_NB                   , ///< Not part of ABI
798 }
799 
800 /**
801  * @ingroup lavc_encoding
802  */
803 struct RcOverride{
804     int start_frame;
805     int end_frame;
806     int qscale; // If this is 0 then quality_factor will be used instead.
807     float quality_factor;
808 }
809 
810 static if (FF_API_MAX_BFRAMES) {
811     /**
812      * @deprecated there is no libavcodec-wide limit on the number of B-frames
813      */
814         enum FF_MAX_B_FRAMES = 16;
815 }
816 
817 /* encoding support
818    These flags can be passed in AVCodecContext.flags before initialization.
819    Note: Not everything is supported yet.
820 */
821 
822 /**
823  * Allow decoders to produce frames with data planes that are not aligned
824  * to CPU requirements (e.g. due to cropping).
825  */
826 enum AV_CODEC_FLAG_UNALIGNED      = (1 <<  0);
827 /**
828  * Use fixed qscale.
829  */
830 enum AV_CODEC_FLAG_QSCALE         = (1 <<  1);
831 /**
832  * 4 MV per MB allowed / advanced prediction for H.263.
833  */
834 enum AV_CODEC_FLAG_4MV            = (1 <<  2);
835 /**
836  * Output even those frames that might be corrupted.
837  */
838 enum AV_CODEC_FLAG_OUTPUT_CORRUPT = (1 <<  3);
839 /**
840  * Use qpel MC.
841  */
842 enum AV_CODEC_FLAG_QPEL           = (1 <<  4);
843 /**
844  * Use internal 2pass ratecontrol in first pass mode.
845  */
846 enum AV_CODEC_FLAG_PASS1          = (1 <<  9);
847 /**
848  * Use internal 2pass ratecontrol in second pass mode.
849  */
850 enum AV_CODEC_FLAG_PASS2          = (1 << 10);
851 /**
852  * loop filter.
853  */
854 enum AV_CODEC_FLAG_LOOP_FILTER    = (1 << 11);
855 /**
856  * Only decode/encode grayscale.
857  */
858 enum AV_CODEC_FLAG_GRAY           = (1 << 13);
859 /**
860  * error[?] variables will be set during encoding.
861  */
862 enum AV_CODEC_FLAG_PSNR           = (1 << 15);
863 /**
864  * Input bitstream might be truncated at a random location
865  * instead of only at frame boundaries.
866  */
867 enum AV_CODEC_FLAG_TRUNCATED      = (1 << 16);
868 /**
869  * Use interlaced DCT.
870  */
871 enum AV_CODEC_FLAG_INTERLACED_DCT = (1 << 18);
872 /**
873  * Force low delay.
874  */
875 enum AV_CODEC_FLAG_LOW_DELAY      = (1 << 19);
876 /**
877  * Place global headers in extradata instead of every keyframe.
878  */
879 enum AV_CODEC_FLAG_GLOBAL_HEADER  = (1 << 22);
880 /**
881  * Use only bitexact stuff (except (I)DCT).
882  */
883 enum AV_CODEC_FLAG_BITEXACT       = (1 << 23);
884 /* Fx : Flag for H.263+ extra options */
885 /**
886  * H.263 advanced intra coding / MPEG-4 AC prediction
887  */
888 enum AV_CODEC_FLAG_AC_PRED        = (1 << 24);
889 /**
890  * interlaced motion estimation
891  */
892 enum AV_CODEC_FLAG_INTERLACED_ME  = (1 << 29);
893 enum AV_CODEC_FLAG_CLOSED_GOP     = (1U << 31);
894 
895 /**
896  * Allow non spec compliant speedup tricks.
897  */
898 enum AV_CODEC_FLAG2_FAST          = (1 <<  0);
899 /**
900  * Skip bitstream encoding.
901  */
902 enum AV_CODEC_FLAG2_NO_OUTPUT     = (1 <<  2);
903 /**
904  * Place global headers at every keyframe instead of in extradata.
905  */
906 enum AV_CODEC_FLAG2_LOCAL_HEADER  = (1 <<  3);
907 
908 /**
909  * timecode is in drop frame format. DEPRECATED!!!!
910  */
911 enum AV_CODEC_FLAG2_DROP_FRAME_TIMECODE = (1 << 13);
912 
913 /**
914  * Input bitstream might be truncated at a packet boundaries
915  * instead of only at frame boundaries.
916  */
917 enum AV_CODEC_FLAG2_CHUNKS        = (1 << 15);
918 /**
919  * Discard cropping information from SPS.
920  */
921 enum AV_CODEC_FLAG2_IGNORE_CROP   = (1 << 16);
922 
923 /**
924  * Show all frames before the first keyframe
925  */
926 enum AV_CODEC_FLAG2_SHOW_ALL      = (1 << 22);
927 /**
928  * Export motion vectors through frame side data
929  */
930 enum AV_CODEC_FLAG2_EXPORT_MVS    = (1 << 28);
931 /**
932  * Do not skip samples and export skip information as frame side data
933  */
934 enum AV_CODEC_FLAG2_SKIP_MANUAL   = (1 << 29);
935 /**
936  * Do not reset ASS ReadOrder field on flush (subtitles decoding)
937  */
938 enum AV_CODEC_FLAG2_RO_FLUSH_NOOP = (1 << 30);
939 
940 /* Unsupported options :
941  *              Syntax Arithmetic coding (SAC)
942  *              Reference Picture Selection
943  *              Independent Segment Decoding */
944 /* /Fx */
945 /* codec capabilities */
946 
947 /**
948  * Decoder can use draw_horiz_band callback.
949  */
950 enum AV_CODEC_CAP_DRAW_HORIZ_BAND    = (1 <<  0);
951 /**
952  * Codec uses get_buffer() for allocating buffers and supports custom allocators.
953  * If not set, it might not use get_buffer() at all or use operations that
954  * assume the buffer was allocated by avcodec_default_get_buffer.
955  */
956 enum AV_CODEC_CAP_DR1                = (1 <<  1);
957 enum AV_CODEC_CAP_TRUNCATED          = (1 <<  3);
958 /**
959  * Encoder or decoder requires flushing with NULL input at the end in order to
960  * give the complete and correct output.
961  *
962  * NOTE: If this flag is not set, the codec is guaranteed to never be fed with
963  *       with NULL data. The user can still send NULL data to the public encode
964  *       or decode function, but libavcodec will not pass it along to the codec
965  *       unless this flag is set.
966  *
967  * Decoders:
968  * The decoder has a non-zero delay and needs to be fed with avpkt->data=NULL,
969  * avpkt->size=0 at the end to get the delayed data until the decoder no longer
970  * returns frames.
971  *
972  * Encoders:
973  * The encoder needs to be fed with NULL data at the end of encoding until the
974  * encoder no longer returns data.
975  *
976  * NOTE: For encoders implementing the AVCodec.encode2() function, setting this
977  *       flag also means that the encoder must set the pts and duration for
978  *       each output packet. If this flag is not set, the pts and duration will
979  *       be determined by libavcodec from the input frame.
980  */
981 enum AV_CODEC_CAP_DELAY              = (1 <<  5);
982 /**
983  * Codec can be fed a final frame with a smaller size.
984  * This can be used to prevent truncation of the last audio samples.
985  */
986 enum AV_CODEC_CAP_SMALL_LAST_FRAME   = (1 <<  6);
987 
988 static if (FF_API_CAP_VDPAU){
989     /**
990      * Codec can export data for HW decoding (VDPAU).
991      */
992     enum AV_CODEC_CAP_HWACCEL_VDPAU      = (1 <<  7);
993 }
994 
995 /**
996  * Codec can output multiple frames per AVPacket
997  * Normally demuxers return one frame at a time, demuxers which do not do
998  * are connected to a parser to split what they return into proper frames.
999  * This flag is reserved to the very rare category of codecs which have a
1000  * bitstream that cannot be split into frames without timeconsuming
1001  * operations like full decoding. Demuxers carrying such bitstreams thus
1002  * may return multiple frames in a packet. This has many disadvantages like
1003  * prohibiting stream copy in many cases thus it should only be considered
1004  * as a last resort.
1005  */
1006 enum AV_CODEC_CAP_SUBFRAMES          = (1 <<  8);
1007 /**
1008  * Codec is experimental and is thus avoided in favor of non experimental
1009  * encoders
1010  */
1011 enum AV_CODEC_CAP_EXPERIMENTAL       = (1 <<  9);
1012 /**
1013  * Codec should fill in channel configuration and samplerate instead of container
1014  */
1015 enum AV_CODEC_CAP_CHANNEL_CONF       = (1 << 10);
1016 /**
1017  * Codec supports frame-level multithreading.
1018  */
1019 enum AV_CODEC_CAP_FRAME_THREADS      = (1 << 12);
1020 /**
1021  * Codec supports slice-based (or partition-based) multithreading.
1022  */
1023 enum AV_CODEC_CAP_SLICE_THREADS      = (1 << 13);
1024 /**
1025  * Codec supports changed parameters at any point.
1026  */
1027 enum AV_CODEC_CAP_PARAM_CHANGE       = (1 << 14);
1028 /**
1029  * Codec supports avctx->thread_count == 0 (auto).
1030  */
1031 enum AV_CODEC_CAP_AUTO_THREADS       = (1 << 15);
1032 /**
1033  * Audio encoder supports receiving a different number of samples in each call.
1034  */
1035 enum AV_CODEC_CAP_VARIABLE_FRAME_SIZE= (1 << 16);
1036 /**
1037  * Codec is intra only.
1038  */
1039 enum AV_CODEC_CAP_INTRA_ONLY      = 0x40000000;
1040 /**
1041  * Codec is lossless.
1042  */
1043 enum AV_CODEC_CAP_LOSSLESS        = 0x80000000;
1044 
1045 
1046 static if (FF_API_WITHOUT_PREFIX) {
1047     /**
1048      * Allow decoders to produce frames with data planes that are not aligned
1049      * to CPU requirements (e.g. due to cropping).
1050      */
1051     enum CODEC_FLAG_UNALIGNED   = AV_CODEC_FLAG_UNALIGNED;
1052     enum CODEC_FLAG_QSCALE      = AV_CODEC_FLAG_QSCALE;
1053     enum CODEC_FLAG_4MV         = AV_CODEC_FLAG_4MV;
1054     enum CODEC_FLAG_OUTPUT_CORRUPT=AV_CODEC_FLAG_OUTPUT_CORRUPT;
1055     enum CODEC_FLAG_QPEL        = AV_CODEC_FLAG_QPEL;
1056     static if (FF_API_GMC) {
1057         /**
1058          * @deprecated use the "gmc" private option of the libxvid encoder
1059          */
1060         enum CODEC_FLAG_GMC =  0x0020;  ///< Use GMC.
1061     }
1062     static if (FF_API_MV0) {
1063         /**
1064          * @deprecated use the flag "mv0" in the "mpv_flags" private option of the
1065          * mpegvideo encoders
1066          */
1067         enum CODEC_FLAG_MV0 =  0x0040;
1068     }
1069     static if (FF_API_INPUT_PRESERVED) {
1070         /**
1071          * @deprecated passing reference-counted frames to the encoders replaces this
1072          * flag
1073          */
1074         enum CODEC_FLAG_INPUT_PRESERVED=0x0100;
1075     }
1076     enum CODEC_FLAG_PASS1     =     AV_CODEC_FLAG_PASS1;
1077     enum CODEC_FLAG_PASS2     =     AV_CODEC_FLAG_PASS2;
1078     enum CODEC_FLAG_GRAY      =     AV_CODEC_FLAG_GRAY;
1079     static if (FF_API_EMU_EDGE) {
1080         /**
1081          * @deprecated edges are not used/required anymore. I.e. this flag is now always
1082          * set.
1083          */
1084         enum CODEC_FLAG_EMU_EDGE   =    0x4000;
1085     }
1086     enum CODEC_FLAG_PSNR       =    AV_CODEC_FLAG_PSNR;
1087     enum CODEC_FLAG_TRUNCATED  =    AV_CODEC_FLAG_TRUNCATED;
1088 
1089     static if (FF_API_NORMALIZE_AQP) {
1090         /**
1091          * @deprecated use the flag "naq" in the "mpv_flags" private option of the
1092          * mpegvideo encoders
1093          */
1094         enum CODEC_FLAG_NORMALIZE_AQP= 0x00020000;
1095     }
1096     enum CODEC_FLAG_INTERLACED_DCT=AV_CODEC_FLAG_INTERLACED_DCT;
1097     enum CODEC_FLAG_LOW_DELAY     =AV_CODEC_FLAG_LOW_DELAY;
1098     enum CODEC_FLAG_GLOBAL_HEADER =AV_CODEC_FLAG_GLOBAL_HEADER;
1099     enum CODEC_FLAG_BITEXACT      =AV_CODEC_FLAG_BITEXACT;
1100     enum CODEC_FLAG_AC_PRED       =AV_CODEC_FLAG_AC_PRED;
1101     enum CODEC_FLAG_LOOP_FILTER  = AV_CODEC_FLAG_LOOP_FILTER;
1102     enum CODEC_FLAG_INTERLACED_ME =AV_CODEC_FLAG_INTERLACED_ME;
1103     enum CODEC_FLAG_CLOSED_GOP  =  AV_CODEC_FLAG_CLOSED_GOP;
1104     enum CODEC_FLAG2_FAST       =  AV_CODEC_FLAG2_FAST;
1105     enum CODEC_FLAG2_NO_OUTPUT  =  AV_CODEC_FLAG2_NO_OUTPUT;
1106     enum CODEC_FLAG2_LOCAL_HEADER= AV_CODEC_FLAG2_LOCAL_HEADER;
1107     enum CODEC_FLAG2_DROP_FRAME_TIMECODE=AV_CODEC_FLAG2_DROP_FRAME_TIMECODE;
1108     enum CODEC_FLAG2_IGNORE_CROP = AV_CODEC_FLAG2_IGNORE_CROP;
1109 
1110     enum CODEC_FLAG2_CHUNKS    =   AV_CODEC_FLAG2_CHUNKS;
1111     enum CODEC_FLAG2_SHOW_ALL  =   AV_CODEC_FLAG2_SHOW_ALL;
1112     enum CODEC_FLAG2_EXPORT_MVS  = AV_CODEC_FLAG2_EXPORT_MVS;
1113     enum CODEC_FLAG2_SKIP_MANUAL = AV_CODEC_FLAG2_SKIP_MANUAL;
1114 
1115     /* Unsupported options :
1116      *              Syntax Arithmetic coding (SAC)
1117      *              Reference Picture Selection
1118      *              Independent Segment Decoding */
1119     /* /Fx */
1120     /* codec capabilities */
1121 
1122     const uint CODEC_CAP_DRAW_HORIZ_BAND = AV_CODEC_CAP_DRAW_HORIZ_BAND; ///< Decoder can use draw_horiz_band callback.
1123     /**
1124      * Codec uses get_buffer() for allocating buffers and supports custom allocators.
1125      * If not set, it might not use get_buffer() at all or use operations that
1126      * assume the buffer was allocated by avcodec_default_get_buffer.
1127      */
1128     const uint CODEC_CAP_DR1 =           AV_CODEC_CAP_DR1;
1129     const uint CODEC_CAP_TRUNCATED =     AV_CODEC_CAP_TRUNCATED;
1130     //#if FF_API_XVMC // always assume XVMC
1131     /* Codec can export data for HW decoding. This flag indicates that
1132      * the codec would call get_format() with list that might contain HW accelerated
1133      * pixel formats (XvMC, VDPAU, VAAPI, etc). The application can pick any of them
1134      * including raw image format.
1135      * The application can use the passed context to determine bitstream version,
1136      * chroma format, resolution etc.
1137      */
1138     const uint CODEC_CAP_HWACCEL =       0x0010;
1139     //#endif /* FF_API_XVMC */
1140     /**
1141      * Encoder or decoder requires flushing with NULL input at the end in order to
1142      * give the complete and correct output.
1143      *
1144      * NOTE: If this flag is not set, the codec is guaranteed to never be fed with
1145      *       with NULL data. The user can still send NULL data to the public encode
1146      *       or decode function, but libavcodec will not pass it along to the codec
1147      *       unless this flag is set.
1148      *
1149      * Decoders:
1150      * The decoder has a non-zero delay and needs to be fed with avpkt->data=NULL,
1151      * avpkt->size=0 at the end to get the delayed data until the decoder no longer
1152      * returns frames.
1153      *
1154      * Encoders:
1155      * The encoder needs to be fed with NULL data at the end of encoding until the
1156      * encoder no longer returns data.
1157      *
1158      * NOTE: For encoders implementing the AVCodec.encode2() function, setting this
1159      *       flag also means that the encoder must set the pts and duration for
1160      *       each output packet. If this flag is not set, the pts and duration will
1161      *       be determined by libavcodec from the input frame.
1162      */
1163     const uint CODEC_CAP_DELAY =         AV_CODEC_CAP_DELAY;
1164     /**
1165      * Codec can be fed a final frame with a smaller size.
1166      * This can be used to prevent truncation of the last audio samples.
1167      */
1168     const uint CODEC_CAP_SMALL_LAST_FRAME = AV_CODEC_CAP_SMALL_LAST_FRAME;
1169     static if(FF_API_CAP_VDPAU) {
1170         /**
1171          * Codec can export data for HW decoding (VDPAU).
1172          */
1173         const uint CODEC_CAP_HWACCEL_VDPAU =  AV_CODEC_CAP_HWACCEL_VDPAU;
1174     }
1175     /**
1176      * Codec can output multiple frames per AVPacket
1177      * Normally demuxers return one frame at a time, demuxers which do not do
1178      * are connected to a parser to split what they return into proper frames.
1179      * This flag is reserved to the very rare category of codecs which have a
1180      * bitstream that cannot be split into frames without timeconsuming
1181      * operations like full decoding. Demuxers carring such bitstreams thus
1182      * may return multiple frames in a packet. This has many disadvantages like
1183      * prohibiting stream copy in many cases thus it should only be considered
1184      * as a last resort.
1185      */
1186     const uint CODEC_CAP_SUBFRAMES =      AV_CODEC_CAP_SUBFRAMES;
1187     /**
1188      * Codec is experimental and is thus avoided in favor of non experimental
1189      * encoders
1190      */
1191     const uint CODEC_CAP_EXPERIMENTAL =   AV_CODEC_CAP_EXPERIMENTAL;
1192     /**
1193      * Codec should fill in channel configuration and samplerate instead of container
1194      */
1195     const uint CODEC_CAP_CHANNEL_CONF =   AV_CODEC_CAP_CHANNEL_CONF;
1196     static if(FF_API_NEG_LINESIZES) {
1197         /**
1198          * @deprecated no codecs use this capability
1199          */
1200         const uint CODEC_CAP_NEG_LINESIZES =  0x0800;
1201     }
1202     /**
1203      * Codec supports frame-level multithreading.
1204      */
1205     const uint CODEC_CAP_FRAME_THREADS =  AV_CODEC_CAP_FRAME_THREADS;
1206     /**
1207      * Codec supports slice-based (or partition-based) multithreading.
1208      */
1209     const uint CODEC_CAP_SLICE_THREADS =  AV_CODEC_CAP_SLICE_THREADS;
1210     /**
1211      * Codec supports changed parameters at any point.
1212      */
1213     const uint CODEC_CAP_PARAM_CHANGE =   AV_CODEC_CAP_PARAM_CHANGE;
1214     /**
1215      * Codec supports avctx->thread_count == 0 (auto).
1216      */
1217     const uint CODEC_CAP_AUTO_THREADS =   AV_CODEC_CAP_AUTO_THREADS;
1218     /**
1219      * Audio encoder supports receiving a different number of samples in each call.
1220      */
1221     const uint CODEC_CAP_VARIABLE_FRAME_SIZE = AV_CODEC_CAP_VARIABLE_FRAME_SIZE;
1222     /**
1223      * Codec is intra only.
1224      */
1225     enum CODEC_CAP_INTRA_ONLY   =   AV_CODEC_CAP_INTRA_ONLY;
1226     /**
1227      * Codec is lossless.
1228      */
1229     enum CODEC_CAP_LOSSLESS =       AV_CODEC_CAP_LOSSLESS;
1230 
1231     /**
1232      * HWAccel is experimental and is thus avoided in favor of non experimental
1233      * codecs
1234      */
1235     enum HWACCEL_CODEC_CAP_EXPERIMENTAL =    0x0200;
1236 }
1237 
1238 static if (FF_API_MB_TYPE) {
1239 //The following defines may change, don't expect compatibility if you use them.
1240 enum MB_TYPE_INTRA4x4 =  0x0001;
1241 enum MB_TYPE_INTRA16x16 = 0x0002; //FIXME H.264-specific
1242 enum MB_TYPE_INTRA_PCM = 0x0004; //FIXME H.264-specific
1243 enum MB_TYPE_16x16 =    0x0008;
1244 enum MB_TYPE_16x8 =     0x0010;
1245 enum MB_TYPE_8x16 =     0x0020;
1246 enum MB_TYPE_8x8 =      0x0040;
1247 enum MB_TYPE_INTERLACED = 0x0080;
1248 enum MB_TYPE_DIRECT2 =  0x0100; //FIXME
1249 enum MB_TYPE_ACPRED =   0x0200;
1250 enum MB_TYPE_GMC =      0x0400;
1251 enum MB_TYPE_SKIP =     0x0800;
1252 enum MB_TYPE_P0L0 =     0x1000;
1253 enum MB_TYPE_P1L0 =     0x2000;
1254 enum MB_TYPE_P0L1 =     0x4000;
1255 enum MB_TYPE_P1L1 =     0x8000;
1256 enum MB_TYPE_L0  =      (MB_TYPE_P0L0 | MB_TYPE_P1L0);
1257 enum MB_TYPE_L1  =      (MB_TYPE_P0L1 | MB_TYPE_P1L1);
1258 enum MB_TYPE_L0L1 =     (MB_TYPE_L0   | MB_TYPE_L1);
1259 enum MB_TYPE_QUANT =    0x00010000;
1260 enum MB_TYPE_CBP =      0x00020000;
1261 //Note bits 24-31 are reserved for codec specific use (h264 ref0, mpeg1 0mv, ...)
1262 }
1263 
1264 /**
1265  * Pan Scan area.
1266  * This specifies the area which should be displayed.
1267  * Note there may be multiple such areas for one frame.
1268  */
1269 struct AVPanScan {
1270     /**
1271      * id
1272      * - encoding: Set by user.
1273      * - decoding: Set by libavcodec.
1274      */
1275     int id;
1276 
1277     /**
1278      * width and height in 1/16 pel
1279      * - encoding: Set by user.
1280      * - decoding: Set by libavcodec.
1281      */
1282     int width;
1283     int height;
1284 
1285     /**
1286      * position of the top left corner in 1/16 pel for up to 3 fields/frames
1287      * - encoding: Set by user.
1288      * - decoding: Set by libavcodec.
1289      */
1290     int16_t [3][2]position;
1291 }
1292 
1293 /**
1294  * This structure describes the bitrate properties of an encoded bitstream. It
1295  * roughly corresponds to a subset the VBV parameters for MPEG-2 or HRD
1296  * parameters for H.264/HEVC.
1297  */
1298 struct AVCPBProperties {
1299     /**
1300      * Maximum bitrate of the stream, in bits per second.
1301      * Zero if unknown or unspecified.
1302      */
1303     int max_bitrate;
1304     /**
1305      * Minimum bitrate of the stream, in bits per second.
1306      * Zero if unknown or unspecified.
1307      */
1308     int min_bitrate;
1309     /**
1310      * Average bitrate of the stream, in bits per second.
1311      * Zero if unknown or unspecified.
1312      */
1313     int avg_bitrate;
1314 
1315     /**
1316      * The size of the buffer to which the ratecontrol is applied, in bits.
1317      * Zero if unknown or unspecified.
1318      */
1319     int buffer_size;
1320 
1321     /**
1322      * The delay between the time the packet this structure is associated with
1323      * is received and the time when it should be decoded, in periods of a 27MHz
1324      * clock.
1325      *
1326      * UINT64_MAX when unknown or unspecified.
1327      */
1328     uint64_t vbv_delay;
1329 }
1330 
1331 static if (FF_API_QSCALE_TYPE) {
1332 enum FF_QSCALE_TYPE_MPEG1 = 0;
1333 enum FF_QSCALE_TYPE_MPEG2 = 1;
1334 enum FF_QSCALE_TYPE_H264  = 2;
1335 enum FF_QSCALE_TYPE_VP56 = 3;
1336 }
1337 
1338 /**
1339  * The decoder will keep a reference to the frame and may reuse it later.
1340  */
1341 enum AV_GET_BUFFER_FLAG_REF = (1 << 0);
1342 
1343 /**
1344  * @defgroup lavc_packet AVPacket
1345  *
1346  * Types and functions for working with AVPacket.
1347  * @{
1348  */
1349 enum AVPacketSideDataType {
1350     AV_PKT_DATA_PALETTE,
1351     AV_PKT_DATA_NEW_EXTRADATA,
1352 
1353     /**
1354      * An AV_PKT_DATA_PARAM_CHANGE side data packet is laid out as follows:
1355      * @code
1356      * u32le param_flags
1357      * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_COUNT)
1358      *     s32le channel_count
1359      * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_LAYOUT)
1360      *     u64le channel_layout
1361      * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE)
1362      *     s32le sample_rate
1363      * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_DIMENSIONS)
1364      *     s32le width
1365      *     s32le height
1366      * @endcode
1367      */
1368     AV_PKT_DATA_PARAM_CHANGE,
1369 
1370     /**
1371      * An AV_PKT_DATA_H263_MB_INFO side data packet contains a number of
1372      * structures with info about macroblocks relevant to splitting the
1373      * packet into smaller packets on macroblock edges (e.g. as for RFC 2190).
1374      * That is, it does not necessarily contain info about all macroblocks,
1375      * as long as the distance between macroblocks in the info is smaller
1376      * than the target payload size.
1377      * Each MB info structure is 12 bytes, and is laid out as follows:
1378      * @code
1379      * u32le bit offset from the start of the packet
1380      * u8    current quantizer at the start of the macroblock
1381      * u8    GOB number
1382      * u16le macroblock address within the GOB
1383      * u8    horizontal MV predictor
1384      * u8    vertical MV predictor
1385      * u8    horizontal MV predictor for block number 3
1386      * u8    vertical MV predictor for block number 3
1387      * @endcode
1388      */
1389     AV_PKT_DATA_H263_MB_INFO,
1390 
1391     /**
1392      * This side data should be associated with an audio stream and contains
1393      * ReplayGain information in form of the AVReplayGain struct.
1394      */
1395     AV_PKT_DATA_REPLAYGAIN,
1396 
1397     /**
1398      * This side data contains a 3x3 transformation matrix describing an affine
1399      * transformation that needs to be applied to the decoded video frames for
1400      * correct presentation.
1401      *
1402      * See libavutil/display.h for a detailed description of the data.
1403      */
1404     AV_PKT_DATA_DISPLAYMATRIX,
1405 
1406     /**
1407      * This side data should be associated with a video stream and contains
1408      * Stereoscopic 3D information in form of the AVStereo3D struct.
1409      */
1410     AV_PKT_DATA_STEREO3D,
1411 
1412     /**
1413      * This side data should be associated with an audio stream and corresponds
1414      * to enum AVAudioServiceType.
1415      */
1416     AV_PKT_DATA_AUDIO_SERVICE_TYPE,
1417 
1418     /**
1419      * This side data contains quality related information from the encoder.
1420      * @code
1421      * u32le quality factor of the compressed frame. Allowed range is between 1 (good) and FF_LAMBDA_MAX (bad).
1422      * u8    picture type
1423      * u8    error count
1424      * u16   reserved
1425      * u64le[error count] sum of squared differences between encoder in and output
1426      * @endcode
1427      */
1428     AV_PKT_DATA_QUALITY_STATS,
1429 
1430     /**
1431      * This side data contains an integer value representing the stream index
1432      * of a "fallback" track.  A fallback track indicates an alternate
1433      * track to use when the current track can not be decoded for some reason.
1434      * e.g. no decoder available for codec.
1435      */
1436     AV_PKT_DATA_FALLBACK_TRACK,
1437 
1438     /**
1439      * This side data corresponds to the AVCPBProperties struct.
1440      */
1441     AV_PKT_DATA_CPB_PROPERTIES,
1442 
1443     /**
1444      * Recommmends skipping the specified number of samples
1445      * @code
1446      * u32le number of samples to skip from start of this packet
1447      * u32le number of samples to skip from end of this packet
1448      * u8    reason for start skip
1449      * u8    reason for end   skip (0=padding silence, 1=convergence)
1450      * @endcode
1451      */
1452     AV_PKT_DATA_SKIP_SAMPLES=70,
1453 
1454     /**
1455      * An AV_PKT_DATA_JP_DUALMONO side data packet indicates that
1456      * the packet may contain "dual mono" audio specific to Japanese DTV
1457      * and if it is true, recommends only the selected channel to be used.
1458      * @code
1459      * u8    selected channels (0=mail/left, 1=sub/right, 2=both)
1460      * @endcode
1461      */
1462     AV_PKT_DATA_JP_DUALMONO,
1463 
1464     /**
1465      * A list of zero terminated key/value strings. There is no end marker for
1466      * the list, so it is required to rely on the side data size to stop.
1467      */
1468     AV_PKT_DATA_STRINGS_METADATA,
1469 
1470     /**
1471      * Subtitle event position
1472      * @code
1473      * u32le x1
1474      * u32le y1
1475      * u32le x2
1476      * u32le y2
1477      * @endcode
1478      */
1479     AV_PKT_DATA_SUBTITLE_POSITION,
1480 
1481     /**
1482      * Data found in BlockAdditional element of matroska container. There is
1483      * no end marker for the data, so it is required to rely on the side data
1484      * size to recognize the end. 8 byte id (as found in BlockAddId) followed
1485      * by data.
1486      */
1487     AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL,
1488 
1489     /**
1490      * The optional first identifier line of a WebVTT cue.
1491      */
1492     AV_PKT_DATA_WEBVTT_IDENTIFIER,
1493 
1494     /**
1495      * The optional settings (rendering instructions) that immediately
1496      * follow the timestamp specifier of a WebVTT cue.
1497      */
1498     AV_PKT_DATA_WEBVTT_SETTINGS,
1499 
1500     /**
1501      * A list of zero terminated key/value strings. There is no end marker for
1502      * the list, so it is required to rely on the side data size to stop. This
1503      * side data includes updated metadata which appeared in the stream.
1504      */
1505     AV_PKT_DATA_METADATA_UPDATE,
1506 
1507     /**
1508      * MPEGTS stream ID, this is required to pass the stream ID
1509      * information from the demuxer to the corresponding muxer.
1510      */
1511     AV_PKT_DATA_MPEGTS_STREAM_ID,
1512 
1513     /**
1514      * Mastering display metadata (based on SMPTE-2086:2014). This metadata
1515      * should be associated with a video stream and containts data in the form
1516      * of the AVMasteringDisplayMetadata struct.
1517      */
1518     AV_PKT_DATA_MASTERING_DISPLAY_METADATA,
1519 
1520     /**
1521      * The number of side data elements (in fact a bit more than it).
1522      * This is not part of the public API/ABI in the sense that it may
1523      * change when new side data types are added.
1524      * This must stay the last enum value.
1525      * If its value becomes huge, some code using it
1526      * needs to be updated as it assumes it to be smaller than other limits.
1527      */
1528     AV_PKT_DATA_NB
1529 }
1530 
1531 enum AV_PKT_DATA_QUALITY_FACTOR = AVPacketSideDataType.AV_PKT_DATA_QUALITY_STATS; //DEPRECATED
1532 
1533 struct AVPacketSideData {
1534     uint8_t *data;
1535     int      size;
1536     AVPacketSideDataType type;
1537 }
1538 
1539 /**
1540  * This structure stores compressed data. It is typically exported by demuxers
1541  * and then passed as input to decoders, or received as output from encoders and
1542  * then passed to muxers.
1543  *
1544  * For video, it should typically contain one compressed frame. For audio it may
1545  * contain several compressed frames. Encoders are allowed to output empty
1546  * packets, with no compressed data, containing only side data
1547  * (e.g. to update some stream parameters at the end of encoding).
1548  *
1549  * AVPacket is one of the few structs in FFmpeg, whose size is a part of public
1550  * ABI. Thus it may be allocated on stack and no new fields can be added to it
1551  * without libavcodec and libavformat major bump.
1552  *
1553  * The semantics of data ownership depends on the buf field.
1554  * If it is set, the packet data is dynamically allocated and is
1555  * valid indefinitely until a call to av_packet_unref() reduces the
1556  * reference count to 0.
1557  *
1558  * If the buf field is not set av_packet_ref() would make a copy instead
1559  * of increasing the reference count.
1560  *
1561  * The side data is always allocated with av_malloc(), copied by
1562  * av_packet_ref() and freed by av_packet_unref().
1563  *
1564  * @see av_packet_ref
1565  * @see av_packet_unref
1566  */
1567 struct AVPacket {
1568     /**
1569      * A reference to the reference-counted buffer where the packet data is
1570      * stored.
1571      * May be NULL, then the packet data is not reference-counted.
1572      */
1573     AVBufferRef *buf;
1574     /**
1575      * Presentation timestamp in AVStream->time_base units; the time at which
1576      * the decompressed packet will be presented to the user.
1577      * Can be AV_NOPTS_VALUE if it is not stored in the file.
1578      * pts MUST be larger or equal to dts as presentation cannot happen before
1579      * decompression, unless one wants to view hex dumps. Some formats misuse
1580      * the terms dts and pts/cts to mean something different. Such timestamps
1581      * must be converted to true pts/dts before they are stored in AVPacket.
1582      */
1583     int64_t pts;
1584     /**
1585      * Decompression timestamp in AVStream->time_base units; the time at which
1586      * the packet is decompressed.
1587      * Can be AV_NOPTS_VALUE if it is not stored in the file.
1588      */
1589     int64_t dts;
1590     uint8_t *data;
1591     int   size;
1592     int   stream_index;
1593     /**
1594      * A combination of AV_PKT_FLAG values
1595      */
1596     int   flags;
1597     /**
1598      * Additional packet data that can be provided by the container.
1599      * Packet can contain several types of side information.
1600      */
1601     AVPacketSideData *side_data;
1602     int side_data_elems;
1603 
1604     /**
1605      * Duration of this packet in AVStream->time_base units, 0 if unknown.
1606      * Equals next_pts - this_pts in presentation order.
1607      */
1608     int64_t duration;
1609 
1610     int64_t pos;                            ///< byte position in stream, -1 if unknown
1611 
1612 static if(FF_API_CONVERGENCE_DURATION){
1613     /**
1614      * @deprecated Same as the duration field, but as int64_t. This was required
1615      * for Matroska subtitles, whose duration values could overflow when the
1616      * duration field was still an int.
1617      */
1618     deprecated
1619         int64_t convergence_duration;
1620 }
1621 }
1622 enum AV_PKT_FLAG_KEY =   0x0001; ///< The packet contains a keyframe
1623 enum AV_PKT_FLAG_CORRUPT = 0x0002; ///< The packet content is corrupted
1624 
1625 enum AVSideDataParamChangeFlags {
1626     AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_COUNT  = 0x0001,
1627     AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_LAYOUT = 0x0002,
1628     AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE    = 0x0004,
1629     AV_SIDE_DATA_PARAM_CHANGE_DIMENSIONS     = 0x0008,
1630 }
1631 /**
1632  * @}
1633  */
1634 
1635 struct AVCodecInternal;
1636 
1637 enum AVFieldOrder {
1638     AV_FIELD_UNKNOWN,
1639     AV_FIELD_PROGRESSIVE,
1640     AV_FIELD_TT,          //< Top coded_first, top displayed first
1641     AV_FIELD_BB,          //< Bottom coded first, bottom displayed first
1642     AV_FIELD_TB,          //< Top coded first, bottom displayed first
1643     AV_FIELD_BT,          //< Bottom coded first, top displayed first
1644 }
1645 
1646 /**
1647  * main external API structure.
1648  * New fields can be added to the end with minor version bumps.
1649  * Removal, reordering and changes to existing fields require a major
1650  * version bump.
1651  * Please use AVOptions (av_opt* / av_set/get*()) to access these fields from user
1652  * applications.
1653  * The name string for AVOptions options matches the associated command line
1654  * parameter name and can be found in libavcodec/options_table.h
1655  * The AVOption/command line parameter names differ in some cases from the C
1656  * structure field names for historic reasons or brevity.
1657  * sizeof(AVCodecContext) must not be used outside libav*.
1658  */
1659 struct AVCodecContext {
1660     /**
1661      * information on struct for av_log
1662      * - set by avcodec_alloc_context3
1663      */
1664     const AVClass *av_class;
1665     int log_level_offset;
1666 
1667     AVMediaType codec_type;  /* see AVMEDIA_TYPE_xxx */
1668     const AVCodec *codec;
1669 static if (FF_API_CODEC_NAME) {
1670     /**
1671      * @deprecated this field is not used for anything in libavcodec
1672      */
1673     deprecated
1674         char            [32] codec_name;
1675 }
1676     AVCodecID     codec_id; /* see AV_CODEC_ID_xxx */
1677 
1678     /**
1679      * fourcc (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A').
1680      * This is used to work around some encoder bugs.
1681      * A demuxer should set this to what is stored in the field used to identify the codec.
1682      * If there are multiple such fields in a container then the demuxer should choose the one
1683      * which maximizes the information about the used codec.
1684      * If the codec tag field in a container is larger than 32 bits then the demuxer should
1685      * remap the longer ID to 32 bits with a table or other structure. Alternatively a new
1686      * extra_codec_tag + size could be added but for this a clear advantage must be demonstrated
1687      * first.
1688      * - encoding: Set by user, if not then the default based on codec_id will be used.
1689      * - decoding: Set by user, will be converted to uppercase by libavcodec during init.
1690      */
1691     uint codec_tag;
1692 
1693 static if (FF_API_STREAM_CODEC_TAG) {
1694     /**
1695      * @deprecated this field is unused
1696      */
1697     deprecated
1698         uint stream_codec_tag;
1699 }
1700 
1701     void *priv_data;
1702 
1703     /**
1704      * Private context used for internal data.
1705      *
1706      * Unlike priv_data, this is not codec-specific. It is used in general
1707      * libavcodec functions.
1708      */
1709     AVCodecInternal *internal;
1710 
1711     /**
1712      * Private data of the user, can be used to carry app specific stuff.
1713      * - encoding: Set by user.
1714      * - decoding: Set by user.
1715      */
1716     void *opaque;
1717 
1718     /**
1719      * the average bitrate
1720      * - encoding: Set by user; unused for constant quantizer encoding.
1721      * - decoding: Set by user, may be overwritten by libavcodec
1722      *             if this info is available in the stream
1723      */
1724     int64_t bit_rate;
1725 
1726     /**
1727      * number of bits the bitstream is allowed to diverge from the reference.
1728      *           the reference can be CBR (for CBR pass1) or VBR (for pass2)
1729      * - encoding: Set by user; unused for constant quantizer encoding.
1730      * - decoding: unused
1731      */
1732     int bit_rate_tolerance;
1733 
1734     /**
1735      * Global quality for codecs which cannot change it per frame.
1736      * This should be proportional to MPEG-1/2/4 qscale.
1737      * - encoding: Set by user.
1738      * - decoding: unused
1739      */
1740     int global_quality;
1741 
1742     /**
1743      * - encoding: Set by user.
1744      * - decoding: unused
1745      */
1746     int compression_level;
1747 //#define FF_COMPRESSION_DEFAULT -1
1748 
1749     /**
1750      * CODEC_FLAG_*.
1751      * - encoding: Set by user.
1752      * - decoding: Set by user.
1753      */
1754     int flags;
1755 
1756     /**
1757      * CODEC_FLAG2_*
1758      * - encoding: Set by user.
1759      * - decoding: Set by user.
1760      */
1761     int flags2;
1762 
1763     /**
1764      * some codecs need / can use extradata like Huffman tables.
1765      * mjpeg: Huffman tables
1766      * rv10: additional flags
1767      * mpeg4: global headers (they can be in the bitstream or here)
1768      * The allocated memory should be FF_INPUT_BUFFER_PADDING_SIZE bytes larger
1769      * than extradata_size to avoid problems if it is read with the bitstream reader.
1770      * The bytewise contents of extradata must not depend on the architecture or CPU endianness.
1771      * - encoding: Set/allocated/freed by libavcodec.
1772      * - decoding: Set/allocated/freed by user.
1773      */
1774     uint8_t *extradata;
1775     int extradata_size;
1776 
1777     /**
1778      * This is the fundamental unit of time (in seconds) in terms
1779      * of which frame timestamps are represented. For fixed-fps content,
1780      * timebase should be 1/framerate and timestamp increments should be
1781      * identically 1.
1782      * This often, but not always is the inverse of the frame rate or field rate
1783      * for video. 1/time_base is not the average frame rate if the frame rate is not
1784      * constant.
1785      *
1786      * Like containers, elementary streams also can store timestamps, 1/time_base
1787      * is the unit in which these timestamps are specified.
1788      * As example of such codec time base see ISO/IEC 14496-2:2001(E)
1789      * vop_time_increment_resolution and fixed_vop_rate
1790      * (fixed_vop_rate == 0 implies that it is different from the framerate)
1791      *
1792      * - encoding: MUST be set by user.
1793      * - decoding: the use of this field for decoding is deprecated.
1794      *             Use framerate instead.
1795      */
1796     AVRational time_base;
1797 
1798     /**
1799      * For some codecs, the time base is closer to the field rate than the frame rate.
1800      * Most notably, H.264 and MPEG-2 specify time_base as half of frame duration
1801      * if no telecine is used ...
1802      *
1803      * Set to time_base ticks per frame. Default 1, e.g., H.264/MPEG-2 set it to 2.
1804      */
1805     int ticks_per_frame;
1806 
1807     /**
1808      * Codec delay.
1809      *
1810      * Encoding: Number of frames delay there will be from the encoder input to
1811      *           the decoder output. (we assume the decoder matches the spec)
1812      * Decoding: Number of frames delay in addition to what a standard decoder
1813      *           as specified in the spec would produce.
1814      *
1815      * Video:
1816      *   Number of frames the decoded output will be delayed relative to the
1817      *   encoded input.
1818      *
1819      * Audio:
1820      *   For encoding, this field is unused (see initial_padding).
1821      *
1822      *   For decoding, this is the number of samples the decoder needs to
1823      *   output before the decoder's output is valid. When seeking, you should
1824      *   start decoding this many samples prior to your desired seek point.
1825      *
1826      * - encoding: Set by libavcodec.
1827      * - decoding: Set by libavcodec.
1828      */
1829     int delay;
1830 
1831 
1832     /* video only */
1833     /**
1834      * picture width / height.
1835      *
1836      * @note Those fields may not match the values of the last
1837      * AVFrame outputted by avcodec_decode_video2 due frame
1838      * reordering.
1839      *
1840      * - encoding: MUST be set by user.
1841      * - decoding: May be set by the user before opening the decoder if known e.g.
1842      *             from the container. Some decoders will require the dimensions
1843      *             to be set by the caller. During decoding, the decoder may
1844      *             overwrite those values as required while parsing the data.
1845      */
1846     int width, height;
1847 
1848     /**
1849      * Bitstream width / height, may be different from width/height e.g. when
1850      * the decoded frame is cropped before being output or lowres is enabled.
1851      *
1852      * @note Those field may not match the value of the last
1853      * AVFrame outputted by avcodec_decode_video2 due frame
1854      * reordering.
1855      *
1856      * - encoding: unused
1857      * - decoding: May be set by the user before opening the decoder if known
1858      *             e.g. from the container. During decoding, the decoder may
1859      *             overwrite those values as required while parsing the data.
1860      */
1861     int coded_width, coded_height;
1862 
1863 //#if FF_API_ASPECT_EXTENDED
1864 //#define FF_ASPECT_EXTENDED 15
1865 //#endif
1866 
1867     /**
1868      * the number of pictures in a group of pictures, or 0 for intra_only
1869      * - encoding: Set by user.
1870      * - decoding: unused
1871      */
1872     int gop_size;
1873 
1874     /**
1875      * Pixel format, see AV_PIX_FMT_xxx.
1876      * May be set by the demuxer if known from headers.
1877      * May be overridden by the decoder if it knows better.
1878      *
1879      * @note This field may not match the value of the last
1880      * AVFrame outputted by avcodec_decode_video2 due frame
1881      * reordering.
1882      *
1883      * - encoding: Set by user.
1884      * - decoding: Set by user if known, overridden by libavcodec while
1885      *             parsing the data.
1886      */
1887     AVPixelFormat pix_fmt;
1888 
1889 static if (FF_API_MOTION_EST) {
1890     /**
1891      * This option does nothing
1892      * @deprecated use codec private options instead
1893      */
1894     deprecated int me_method;
1895 }
1896 
1897     /**
1898      * If non NULL, 'draw_horiz_band' is called by the libavcodec
1899      * decoder to draw a horizontal band. It improves cache usage. Not
1900      * all codecs can do that. You must check the codec capabilities
1901      * beforehand.
1902      * When multithreading is used, it may be called from multiple threads
1903      * at the same time; threads might draw different parts of the same AVFrame,
1904      * or multiple AVFrames, and there is no guarantee that slices will be drawn
1905      * in order.
1906      * The function is also used by hardware acceleration APIs.
1907      * It is called at least once during frame decoding to pass
1908      * the data needed for hardware render.
1909      * In that mode instead of pixel data, AVFrame points to
1910      * a structure specific to the acceleration API. The application
1911      * reads the structure and can change some fields to indicate progress
1912      * or mark state.
1913      * - encoding: unused
1914      * - decoding: Set by user.
1915      * @param height the height of the slice
1916      * @param y the y position of the slice
1917      * @param type 1->top field, 2->bottom field, 3->frame
1918      * @param offset offset into the AVFrame.data from which the slice should be read
1919      */
1920     void function(AVCodecContext *s, 
1921                             const AVFrame *src, int [AV_NUM_DATA_POINTERS]offset, 
1922                             int y, int type, int height) draw_horiz_band;
1923 
1924     /**
1925      * callback to negotiate the pixelFormat
1926      * @param fmt is the list of formats which are supported by the codec,
1927      * it is terminated by -1 as 0 is a valid format, the formats are ordered by quality.
1928      * The first is always the native one.
1929      * @note The callback may be called again immediately if initialization for
1930      * the selected (hardware-accelerated) pixel format failed.
1931      * @warning Behavior is undefined if the callback returns a value not
1932      * in the fmt list of formats.
1933      * @return the chosen format
1934      * - encoding: unused
1935      * - decoding: Set by user, if not set the native format will be chosen.
1936      */
1937     AVPixelFormat function(AVCodecContext *s, const  AVPixelFormat * fmt) get_format;
1938 
1939     /**
1940      * maximum number of B-frames between non-B-frames
1941      * Note: The output will be delayed by max_b_frames+1 relative to the input.
1942      * - encoding: Set by user.
1943      * - decoding: unused
1944      */
1945     int max_b_frames;
1946 
1947     /**
1948      * qscale factor between IP and B-frames
1949      * If > 0 then the last P-frame quantizer will be used (q= lastp_q*factor+offset).
1950      * If < 0 then normal ratecontrol will be done (q= -normal_q*factor+offset).
1951      * - encoding: Set by user.
1952      * - decoding: unused
1953      */
1954     float b_quant_factor;
1955 
1956 static if (FF_API_RC_STRATEGY) {
1957     /** @deprecated use codec private option instead */
1958     deprecated int rc_strategy;
1959     //#define FF_RC_STRATEGY_XVID 1
1960 }
1961 
1962 static if (FF_API_PRIVATE_OPT) {
1963     /** @deprecated use encoder private options instead */
1964     deprecated
1965         int b_frame_strategy;
1966 }
1967 
1968     /**
1969      * qscale offset between IP and B-frames
1970      * - encoding: Set by user.
1971      * - decoding: unused
1972      */
1973     float b_quant_offset;
1974 
1975     /**
1976      * Size of the frame reordering buffer in the decoder.
1977      * For MPEG-2 it is 1 IPB or 0 low delay IP.
1978      * - encoding: Set by libavcodec.
1979      * - decoding: Set by libavcodec.
1980      */
1981     int has_b_frames;
1982 
1983 static if (FF_API_PRIVATE_OPT) {
1984     /** @deprecated use encoder private options instead */
1985     deprecated
1986         int mpeg_quant;
1987 }
1988 
1989     /**
1990      * qscale factor between P and I-frames
1991      * If > 0 then the last p frame quantizer will be used (q= lastp_q*factor+offset).
1992      * If < 0 then normal ratecontrol will be done (q= -normal_q*factor+offset).
1993      * - encoding: Set by user.
1994      * - decoding: unused
1995      */
1996     float i_quant_factor;
1997 
1998     /**
1999      * qscale offset between P and I-frames
2000      * - encoding: Set by user.
2001      * - decoding: unused
2002      */
2003     float i_quant_offset;
2004 
2005     /**
2006      * luminance masking (0-> disabled)
2007      * - encoding: Set by user.
2008      * - decoding: unused
2009      */
2010     float lumi_masking;
2011 
2012     /**
2013      * temporary complexity masking (0-> disabled)
2014      * - encoding: Set by user.
2015      * - decoding: unused
2016      */
2017     float temporal_cplx_masking;
2018 
2019     /**
2020      * spatial complexity masking (0-> disabled)
2021      * - encoding: Set by user.
2022      * - decoding: unused
2023      */
2024     float spatial_cplx_masking;
2025 
2026     /**
2027      * p block masking (0-> disabled)
2028      * - encoding: Set by user.
2029      * - decoding: unused
2030      */
2031     float p_masking;
2032 
2033     /**
2034      * darkness masking (0-> disabled)
2035      * - encoding: Set by user.
2036      * - decoding: unused
2037      */
2038     float dark_masking;
2039 
2040     /**
2041      * slice count
2042      * - encoding: Set by libavcodec.
2043      * - decoding: Set by user (or 0).
2044      */
2045     int slice_count;
2046 
2047 static if (FF_API_PRIVATE_OPT) {
2048     /** @deprecated use encoder private options instead */
2049     deprecated
2050         int prediction_method;
2051 //#define FF_PRED_LEFT   0
2052 //#define FF_PRED_PLANE  1
2053 //#define FF_PRED_MEDIAN 2
2054 }
2055 
2056     /**
2057      * slice offsets in the frame in bytes
2058      * - encoding: Set/allocated by libavcodec.
2059      * - decoding: Set/allocated by user (or NULL).
2060      */
2061     int *slice_offset;
2062 
2063     /**
2064      * sample aspect ratio (0 if unknown)
2065      * That is the width of a pixel divided by the height of the pixel.
2066      * Numerator and denominator must be relatively prime and smaller than 256 for some video standards.
2067      * - encoding: Set by user.
2068      * - decoding: Set by libavcodec.
2069      */
2070     AVRational sample_aspect_ratio;
2071 
2072     /**
2073      * motion estimation comparison function
2074      * - encoding: Set by user.
2075      * - decoding: unused
2076      */
2077     int me_cmp;
2078     /**
2079      * subpixel motion estimation comparison function
2080      * - encoding: Set by user.
2081      * - decoding: unused
2082      */
2083     int me_sub_cmp;
2084     /**
2085      * macroblock comparison function (not supported yet)
2086      * - encoding: Set by user.
2087      * - decoding: unused
2088      */
2089     int mb_cmp;
2090     /**
2091      * interlaced DCT comparison function
2092      * - encoding: Set by user.
2093      * - decoding: unused
2094      */
2095     int ildct_cmp;
2096 //#define FF_CMP_SAD    0
2097 //#define FF_CMP_SSE    1
2098 //#define FF_CMP_SATD   2
2099 //#define FF_CMP_DCT    3
2100 //#define FF_CMP_PSNR   4
2101 //#define FF_CMP_BIT    5
2102 //#define FF_CMP_RD     6
2103 //#define FF_CMP_ZERO   7
2104 //#define FF_CMP_VSAD   8
2105 //#define FF_CMP_VSSE   9
2106 //#define FF_CMP_NSSE   10
2107 //#define FF_CMP_W53    11
2108 //#define FF_CMP_W97    12
2109 //#define FF_CMP_DCTMAX 13
2110 //#define FF_CMP_DCT264 14
2111 //#define FF_CMP_CHROMA 256
2112 
2113     /**
2114      * ME diamond size & shape
2115      * - encoding: Set by user.
2116      * - decoding: unused
2117      */
2118     int dia_size;
2119 
2120     /**
2121      * amount of previous MV predictors (2a+1 x 2a+1 square)
2122      * - encoding: Set by user.
2123      * - decoding: unused
2124      */
2125     int last_predictor_count;
2126 
2127 static if (FF_API_PRIVATE_OPT) {
2128     /** @deprecated use encoder private options instead */
2129     deprecated
2130         int pre_me;
2131 }
2132 
2133     /**
2134      * motion estimation prepass comparison function
2135      * - encoding: Set by user.
2136      * - decoding: unused
2137      */
2138     int me_pre_cmp;
2139 
2140     /**
2141      * ME prepass diamond size & shape
2142      * - encoding: Set by user.
2143      * - decoding: unused
2144      */
2145     int pre_dia_size;
2146 
2147     /**
2148      * subpel ME quality
2149      * - encoding: Set by user.
2150      * - decoding: unused
2151      */
2152     int me_subpel_quality;
2153 
2154 static if (FF_API_AFD) {
2155     /**
2156      * DTG active format information (additional aspect ratio
2157      * information only used in DVB MPEG-2 transport streams)
2158      * 0 if not set.
2159      *
2160      * - encoding: unused
2161      * - decoding: Set by decoder.
2162      * @deprecated Deprecated in favor of AVSideData
2163      */
2164     deprecated int dtg_active_format;
2165 //#define FF_DTG_AFD_SAME         8
2166 //#define FF_DTG_AFD_4_3          9
2167 //#define FF_DTG_AFD_16_9         10
2168 //#define FF_DTG_AFD_14_9         11
2169 //#define FF_DTG_AFD_4_3_SP_14_9  13
2170 //#define FF_DTG_AFD_16_9_SP_14_9 14
2171 //#define FF_DTG_AFD_SP_4_3       15
2172 }
2173 
2174     /**
2175      * maximum motion estimation search range in subpel units
2176      * If 0 then no limit.
2177      *
2178      * - encoding: Set by user.
2179      * - decoding: unused
2180      */
2181     int me_range;
2182 
2183 static if (FF_API_QUANT_BIAS) {
2184     /**
2185      * @deprecated use encoder private option instead
2186      */
2187     deprecated int intra_quant_bias;
2188 //#define FF_DEFAULT_QUANT_BIAS 999999
2189 
2190     /**
2191      * @deprecated use encoder private option instead
2192      */
2193     deprecated int inter_quant_bias;
2194 }
2195 
2196     /**
2197      * slice flags
2198      * - encoding: unused
2199      * - decoding: Set by user.
2200      */
2201     int slice_flags;
2202 //#define SLICE_FLAG_CODED_ORDER    0x0001 ///< draw_horiz_band() is called in coded order instead of display
2203 //#define SLICE_FLAG_ALLOW_FIELD    0x0002 ///< allow draw_horiz_band() with field slices (MPEG2 field pics)
2204 //#define SLICE_FLAG_ALLOW_PLANE    0x0004 ///< allow draw_horiz_band() with 1 component at a time (SVQ1)
2205 
2206 static if (ffmpeg.libavcodec.avcodec_version.FF_API_XVMC) {
2207     /**
2208      * XVideo Motion Acceleration
2209      * - encoding: forbidden
2210      * - decoding: set by decoder
2211      * @deprecated XvMC doesn't need it anymore.
2212      */
2213    deprecated int xvmc_acceleration;
2214 }
2215 
2216     /**
2217      * macroblock decision mode
2218      * - encoding: Set by user.
2219      * - decoding: unused
2220      */
2221     int mb_decision;
2222 //#define FF_MB_DECISION_SIMPLE 0        ///< uses mb_cmp
2223 //#define FF_MB_DECISION_BITS   1        ///< chooses the one which needs the fewest bits
2224 //#define FF_MB_DECISION_RD     2        ///< rate distortion
2225 
2226     /**
2227      * custom intra quantization matrix
2228      * - encoding: Set by user, can be NULL.
2229      * - decoding: Set by libavcodec.
2230      */
2231     uint16_t *intra_matrix;
2232 
2233     /**
2234      * custom inter quantization matrix
2235      * - encoding: Set by user, can be NULL.
2236      * - decoding: Set by libavcodec.
2237      */
2238     uint16_t *inter_matrix;
2239 
2240 static if (FF_API_PRIVATE_OPT) {
2241     /** @deprecated use encoder private options instead */
2242     deprecated
2243         int scenechange_threshold;
2244 
2245     /** @deprecated use encoder private options instead */
2246     deprecated
2247         int noise_reduction;
2248 }
2249 
2250 static if (FF_API_MPV_OPT) {
2251     /**
2252      * @deprecated this field is unused
2253      */
2254     deprecated
2255         int me_threshold;
2256 
2257     /**
2258      * @deprecated this field is unused
2259      */
2260     deprecated
2261         int mb_threshold;
2262 }
2263 
2264     /**
2265      * precision of the intra DC coefficient - 8
2266      * - encoding: Set by user.
2267      * - decoding: unused
2268      */
2269     int intra_dc_precision;
2270 
2271     /**
2272      * Number of macroblock rows at the top which are skipped.
2273      * - encoding: unused
2274      * - decoding: Set by user.
2275      */
2276     int skip_top;
2277 
2278     /**
2279      * Number of macroblock rows at the bottom which are skipped.
2280      * - encoding: unused
2281      * - decoding: Set by user.
2282      */
2283     int skip_bottom;
2284 
2285 static if (FF_API_MPV_OPT) {
2286     /**
2287      * @deprecated use encoder private options instead
2288      */
2289     deprecated
2290         float border_masking;
2291 }
2292 
2293     /**
2294      * minimum MB lagrange multipler
2295      * - encoding: Set by user.
2296      * - decoding: unused
2297      */
2298     int mb_lmin;
2299 
2300     /**
2301      * maximum MB lagrange multipler
2302      * - encoding: Set by user.
2303      * - decoding: unused
2304      */
2305     int mb_lmax;
2306 
2307 static if (FF_API_PRIVATE_OPT) {
2308     /**
2309      * @deprecated use encoder private options instead
2310      */
2311     deprecated
2312         int me_penalty_compensation;
2313 }
2314 
2315     /**
2316      * - encoding: Set by user.
2317      * - decoding: unused
2318      */
2319     int bidir_refine;
2320 
2321 static if (FF_API_PRIVATE_OPT) {
2322     /** @deprecated use encoder private options instead */
2323     deprecated
2324         int brd_scale;
2325 }
2326 
2327     /**
2328      * minimum GOP size
2329      * - encoding: Set by user.
2330      * - decoding: unused
2331      */
2332     int keyint_min;
2333 
2334     /**
2335      * number of reference frames
2336      * - encoding: Set by user.
2337      * - decoding: Set by lavc.
2338      */
2339     int refs;
2340 
2341 static if (FF_API_PRIVATE_OPT) {
2342     /** @deprecated use encoder private options instead */
2343     deprecated
2344         int chromaoffset;
2345 }
2346 
2347 static if (FF_API_UNUSED_MEMBERS) {
2348     /**
2349      * Multiplied by qscale for each frame and added to scene_change_score.
2350      * - encoding: Set by user.
2351      * - decoding: unused
2352      */
2353     deprecated int scenechange_factor;
2354 }
2355 
2356     /**
2357      * Note: Value depends upon the compare function used for fullpel ME.
2358      * - encoding: Set by user.
2359      * - decoding: unused
2360      */
2361     int mv0_threshold;
2362 
2363 static if (FF_API_PRIVATE_OPT) {
2364     /** @deprecated use encoder private options instead */
2365     deprecated
2366         int b_sensitivity;
2367 }
2368 
2369     /**
2370      * Chromaticity coordinates of the source primaries.
2371      * - encoding: Set by user
2372      * - decoding: Set by libavcodec
2373      */
2374     AVColorPrimaries color_primaries;
2375 
2376     /**
2377      * Color Transfer Characteristic.
2378      * - encoding: Set by user
2379      * - decoding: Set by libavcodec
2380      */
2381     AVColorTransferCharacteristic color_trc;
2382 
2383     /**
2384      * YUV colorspace type.
2385      * - encoding: Set by user
2386      * - decoding: Set by libavcodec
2387      */
2388     AVColorSpace colorspace;
2389 
2390     /**
2391      * MPEG vs JPEG YUV range.
2392      * - encoding: Set by user
2393      * - decoding: Set by libavcodec
2394      */
2395     AVColorRange color_range;
2396 
2397     /**
2398      * This defines the location of chroma samples.
2399      * - encoding: Set by user
2400      * - decoding: Set by libavcodec
2401      */
2402     AVChromaLocation chroma_sample_location;
2403 
2404     /**
2405      * Number of slices.
2406      * Indicates number of picture subdivisions. Used for parallelized
2407      * decoding.
2408      * - encoding: Set by user
2409      * - decoding: unused
2410      */
2411     int slices;
2412 
2413     /** Field order
2414      * - encoding: set by libavcodec
2415      * - decoding: Set by user.
2416      */
2417     AVFieldOrder field_order;
2418 
2419     /* audio only */
2420     int sample_rate; ///< samples per second
2421     int channels;    ///< number of audio channels
2422 
2423     /**
2424      * audio sample format
2425      * - encoding: Set by user.
2426      * - decoding: Set by libavcodec.
2427      */
2428     AVSampleFormat sample_fmt;  ///< sample format
2429 
2430     /* The following data should not be initialized. */
2431     /**
2432      * Number of samples per channel in an audio frame.
2433      *
2434      * - encoding: set by libavcodec in avcodec_open2(). Each submitted frame
2435      *   except the last must contain exactly frame_size samples per channel.
2436      *   May be 0 when the codec has CODEC_CAP_VARIABLE_FRAME_SIZE set, then the
2437      *   frame size is not restricted.
2438      * - decoding: may be set by some decoders to indicate constant frame size
2439      */
2440     int frame_size;
2441 
2442     /**
2443      * Frame counter, set by libavcodec.
2444      *
2445      * - decoding: total number of frames returned from the decoder so far.
2446      * - encoding: total number of frames passed to the encoder so far.
2447      *
2448      *   @note the counter is not incremented if encoding/decoding resulted in
2449      *   an error.
2450      */
2451     int frame_number;
2452 
2453     /**
2454      * number of bytes per packet if constant and known or 0
2455      * Used by some WAV based audio codecs.
2456      */
2457     int block_align;
2458 
2459     /**
2460      * Audio cutoff bandwidth (0 means "automatic")
2461      * - encoding: Set by user.
2462      * - decoding: unused
2463      */
2464     int cutoff;
2465 
2466     /**
2467      * Audio channel layout.
2468      * - encoding: set by user.
2469      * - decoding: set by user, may be overwritten by libavcodec.
2470      */
2471     uint64_t channel_layout;
2472 
2473     /**
2474      * Request decoder to use this channel layout if it can (0 for default)
2475      * - encoding: unused
2476      * - decoding: Set by user.
2477      */
2478     uint64_t request_channel_layout;
2479 
2480     /**
2481      * Type of service that the audio stream conveys.
2482      * - encoding: Set by user.
2483      * - decoding: Set by libavcodec.
2484      */
2485     AVAudioServiceType audio_service_type;
2486 
2487     /**
2488      * desired sample format
2489      * - encoding: Not used.
2490      * - decoding: Set by user.
2491      * Decoder will decode to this format if it can.
2492      */
2493     AVSampleFormat request_sample_fmt;
2494 
2495     /**
2496      * This callback is called at the beginning of each frame to get data
2497      * buffer(s) for it. There may be one contiguous buffer for all the data or
2498      * there may be a buffer per each data plane or anything in between. What
2499      * this means is, you may set however many entries in buf[] you feel necessary.
2500      * Each buffer must be reference-counted using the AVBuffer API (see description
2501      * of buf[] below).
2502      *
2503      * The following fields will be set in the frame before this callback is
2504      * called:
2505      * - format
2506      * - width, height (video only)
2507      * - sample_rate, channel_layout, nb_samples (audio only)
2508      * Their values may differ from the corresponding values in
2509      * AVCodecContext. This callback must use the frame values, not the codec
2510      * context values, to calculate the required buffer size.
2511      *
2512      * This callback must fill the following fields in the frame:
2513      * - data[]
2514      * - linesize[]
2515      * - extended_data:
2516      *   * if the data is planar audio with more than 8 channels, then this
2517      *     callback must allocate and fill extended_data to contain all pointers
2518      *     to all data planes. data[] must hold as many pointers as it can.
2519      *     extended_data must be allocated with av_malloc() and will be freed in
2520      *     av_frame_unref().
2521      *   * otherwise exended_data must point to data
2522      * - buf[] must contain one or more pointers to AVBufferRef structures. Each of
2523      *   the frame's data and extended_data pointers must be contained in these. That
2524      *   is, one AVBufferRef for each allocated chunk of memory, not necessarily one
2525      *   AVBufferRef per data[] entry. See: av_buffer_create(), av_buffer_alloc(),
2526      *   and av_buffer_ref().
2527      * - extended_buf and nb_extended_buf must be allocated with av_malloc() by
2528      *   this callback and filled with the extra buffers if there are more
2529      *   buffers than buf[] can hold. extended_buf will be freed in
2530      *   av_frame_unref().
2531      *
2532      * If CODEC_CAP_DR1 is not set then get_buffer2() must call
2533      * avcodec_default_get_buffer2() instead of providing buffers allocated by
2534      * some other means.
2535      *
2536      * Each data plane must be aligned to the maximum required by the target
2537      * CPU.
2538      *
2539      * @see avcodec_default_get_buffer2()
2540      *
2541      * Video:
2542      *
2543      * If AV_GET_BUFFER_FLAG_REF is set in flags then the frame may be reused
2544      * (read and/or written to if it is writable) later by libavcodec.
2545      *
2546      * avcodec_align_dimensions2() should be used to find the required width and
2547      * height, as they normally need to be rounded up to the next multiple of 16.
2548      *
2549      * Some decoders do not support linesizes changing between frames.
2550      *
2551      * If frame multithreading is used and thread_safe_callbacks is set,
2552      * this callback may be called from a different thread, but not from more
2553      * than one at once. Does not need to be reentrant.
2554      *
2555      * @see avcodec_align_dimensions2()
2556      *
2557      * Audio:
2558      *
2559      * Decoders request a buffer of a particular size by setting
2560      * AVFrame.nb_samples prior to calling get_buffer2(). The decoder may,
2561      * however, utilize only part of the buffer by setting AVFrame.nb_samples
2562      * to a smaller value in the output frame.
2563      *
2564      * As a convenience, av_samples_get_buffer_size() and
2565      * av_samples_fill_arrays() in libavutil may be used by custom get_buffer2()
2566      * functions to find the required data size and to fill data pointers and
2567      * linesize. In AVFrame.linesize, only linesize[0] may be set for audio
2568      * since all planes must be the same size.
2569      *
2570      * @see av_samples_get_buffer_size(), av_samples_fill_arrays()
2571      *
2572      * - encoding: unused
2573      * - decoding: Set by libavcodec, user can override.
2574      */
2575     int function(AVCodecContext *s, AVFrame *frame, int flags) get_buffer2;
2576 
2577     /**
2578      * If non-zero, the decoded audio and video frames returned from
2579      * avcodec_decode_video2() and avcodec_decode_audio4() are reference-counted
2580      * and are valid indefinitely. The caller must free them with
2581      * av_frame_unref() when they are not needed anymore.
2582      * Otherwise, the decoded frames must not be freed by the caller and are
2583      * only valid until the next decode call.
2584      *
2585      * This is always automatically enabled if avcodec_receive_frame() is used.
2586      *
2587      * - encoding: unused
2588      * - decoding: set by the caller before avcodec_open2().
2589      */
2590     int refcounted_frames;
2591 
2592     /* - encoding parameters */
2593     float qcompress;  ///< amount of qscale change between easy & hard scenes (0.0-1.0)
2594     float qblur;      ///< amount of qscale smoothing over time (0.0-1.0)
2595 
2596     /**
2597      * minimum quantizer
2598      * - encoding: Set by user.
2599      * - decoding: unused
2600      */
2601     int qmin;
2602 
2603     /**
2604      * maximum quantizer
2605      * - encoding: Set by user.
2606      * - decoding: unused
2607      */
2608     int qmax;
2609 
2610     /**
2611      * maximum quantizer difference between frames
2612      * - encoding: Set by user.
2613      * - decoding: unused
2614      */
2615     int max_qdiff;
2616 
2617 static if (FF_API_MPV_OPT) {
2618     /**
2619      * @deprecated use encoder private options instead
2620      */
2621     deprecated
2622         float rc_qsquish;
2623 
2624     deprecated
2625         float rc_qmod_amp;
2626     deprecated
2627         int rc_qmod_freq;
2628 }
2629 
2630     /**
2631      * decoder bitstream buffer size
2632      * - encoding: Set by user.
2633      * - decoding: unused
2634      */
2635     int rc_buffer_size;
2636 
2637     /**
2638      * ratecontrol override, see RcOverride
2639      * - encoding: Allocated/set/freed by user.
2640      * - decoding: unused
2641      */
2642     int rc_override_count;
2643     RcOverride *rc_override;
2644 
2645 static if (FF_API_MPV_OPT) {
2646     /**
2647      * @deprecated use encoder private options instead
2648      */
2649     deprecated
2650         const char *rc_eq;
2651 }
2652 
2653     /**
2654      * maximum bitrate
2655      * - encoding: Set by user.
2656      * - decoding: Set by libavcodec.
2657      */
2658     int rc_max_rate;
2659 
2660     /**
2661      * minimum bitrate
2662      * - encoding: Set by user.
2663      * - decoding: unused
2664      */
2665     int rc_min_rate;
2666 
2667 static if (FF_API_MPV_OPT) {
2668     /**
2669      * @deprecated use encoder private options instead
2670      */
2671     deprecated
2672         float rc_buffer_aggressivity;
2673 
2674     deprecated
2675         float rc_initial_cplx;
2676 }
2677 
2678     /**
2679      * Ratecontrol attempt to use, at maximum, <value> of what can be used without an underflow.
2680      * - encoding: Set by user.
2681      * - decoding: unused.
2682      */
2683     float rc_max_available_vbv_use;
2684 
2685     /**
2686      * Ratecontrol attempt to use, at least, <value> times the amount needed to prevent a vbv overflow.
2687      * - encoding: Set by user.
2688      * - decoding: unused.
2689      */
2690     float rc_min_vbv_overflow_use;
2691 
2692     /**
2693      * Number of bits which should be loaded into the rc buffer before decoding starts.
2694      * - encoding: Set by user.
2695      * - decoding: unused
2696      */
2697     int rc_initial_buffer_occupancy;
2698 
2699 static if (FF_API_CODER_TYPE) {
2700 //#define FF_CODER_TYPE_VLC       0
2701 //#define FF_CODER_TYPE_AC        1
2702 //#define FF_CODER_TYPE_RAW       2
2703 //#define FF_CODER_TYPE_RLE       3
2704 //#if FF_API_UNUSED_MEMBERS
2705 //#define FF_CODER_TYPE_DEFLATE   4
2706 //#endif /* FF_API_UNUSED_MEMBERS */
2707     /**
2708      * @deprecated use encoder private options instead
2709      */
2710     deprecated
2711         int coder_type;
2712 }
2713 
2714 static if (FF_API_PRIVATE_OPT) {
2715     /** @deprecated use encoder private options instead */
2716     deprecated
2717         int context_model;
2718 }
2719 
2720 static if (FF_API_MPV_OPT) {
2721     /**
2722      * @deprecated use encoder private options instead
2723      */
2724     deprecated
2725         int lmin;
2726 
2727     /**
2728       * @deprecated use encoder private options instead
2729       */
2730     deprecated
2731         int lmax;
2732 }
2733 
2734 static if (FF_API_PRIVATE_OPT) {
2735     /** @deprecated use encoder private options instead */
2736     deprecated
2737         int frame_skip_threshold;
2738 
2739     /** @deprecated use encoder private options instead */
2740     deprecated
2741         int frame_skip_factor;
2742 
2743     /** @deprecated use encoder private options instead */
2744     deprecated
2745         int frame_skip_exp;
2746 
2747     /** @deprecated use encoder private options instead */
2748     deprecated
2749         int frame_skip_cmp;
2750 }
2751 
2752     /**
2753      * trellis RD quantization
2754      * - encoding: Set by user.
2755      * - decoding: unused
2756      */
2757     int trellis;
2758 
2759 static if (FF_API_PRIVATE_OPT) {
2760     /** @deprecated use encoder private options instead */
2761     deprecated
2762         int min_prediction_order;
2763 
2764     /** @deprecated use encoder private options instead */
2765     deprecated
2766         int max_prediction_order;
2767 
2768     /** @deprecated use encoder private options instead */
2769     deprecated
2770         int64_t timecode_frame_start;
2771 }
2772 
2773 static if (FF_API_RTP_CALLBACK) {
2774     /**
2775      * @deprecated unused
2776      */
2777     /* The RTP callback: This function is called    */
2778     /* every time the encoder has a packet to send. */
2779     /* It depends on the encoder if the data starts */
2780     /* with a Start Code (it should). H.263 does.   */
2781     /* mb_nb contains the number of macroblocks     */
2782     /* encoded in the RTP payload.                  */
2783     deprecated
2784         void function(AVCodecContext *avctx, void *data, int size, int mb_nb) rtp_callback;
2785 }
2786 
2787 static if (FF_API_PRIVATE_OPT) {
2788     /** @deprecated use encoder private options instead */
2789     deprecated
2790       int rtp_payload_size; /* The size of the RTP payload: the coder will  */
2791                             /* do its best to deliver a chunk with size     */
2792                             /* below rtp_payload_size, the chunk will start */
2793                             /* with a start code on some codecs like H.263. */
2794                             /* This doesn't take account of any particular  */
2795                             /* headers inside the transmitted RTP payload.  */
2796 }
2797 
2798 static if (FF_API_STAT_BITS) {
2799     /* statistics, used for 2-pass encoding */
2800     deprecated
2801         int mv_bits;
2802     deprecated
2803         int header_bits;
2804     deprecated
2805         int i_tex_bits;
2806     deprecated
2807         int p_tex_bits;
2808     deprecated
2809         int i_count;
2810     deprecated
2811         int p_count;
2812     deprecated
2813         int skip_count;
2814     deprecated
2815         int misc_bits;
2816 
2817     /** @deprecated this field is unused */
2818     deprecated
2819         int frame_bits;
2820 }
2821 
2822     /**
2823      * pass1 encoding statistics output buffer
2824      * - encoding: Set by libavcodec.
2825      * - decoding: unused
2826      */
2827     char *stats_out;
2828 
2829     /**
2830      * pass2 encoding statistics input buffer
2831      * Concatenated stuff from stats_out of pass1 should be placed here.
2832      * - encoding: Allocated/set/freed by user.
2833      * - decoding: unused
2834      */
2835     char *stats_in;
2836 
2837     /**
2838      * Work around bugs in encoders which sometimes cannot be detected automatically.
2839      * - encoding: Set by user
2840      * - decoding: Set by user
2841      */
2842     int workaround_bugs;
2843 //#define FF_BUG_AUTODETECT       1  ///< autodetection
2844 //#if FF_API_OLD_MSMPEG4
2845 //#define FF_BUG_OLD_MSMPEG4      2
2846 //#endif
2847 //#define FF_BUG_XVID_ILACE       4
2848 //#define FF_BUG_UMP4             8
2849 //#define FF_BUG_NO_PADDING       16
2850 //#define FF_BUG_AMV              32
2851 //#if FF_API_AC_VLC
2852 //#define FF_BUG_AC_VLC           0  ///< Will be removed, libavcodec can now handle these non-compliant files by default.
2853 //#endif
2854 //#define FF_BUG_QPEL_CHROMA      64
2855 //#define FF_BUG_STD_QPEL         128
2856 //#define FF_BUG_QPEL_CHROMA2     256
2857 //#define FF_BUG_DIRECT_BLOCKSIZE 512
2858 //#define FF_BUG_EDGE             1024
2859 //#define FF_BUG_HPEL_CHROMA      2048
2860 //#define FF_BUG_DC_CLIP          4096
2861 //#define FF_BUG_MS               8192 ///< Work around various bugs in Microsoft's broken decoders.
2862 //#define FF_BUG_TRUNCATED       16384
2863 
2864     /**
2865      * strictly follow the standard (MPEG4, ...).
2866      * - encoding: Set by user.
2867      * - decoding: Set by user.
2868      * Setting this to STRICT or higher means the encoder and decoder will
2869      * generally do stupid things, whereas setting it to unofficial or lower
2870      * will mean the encoder might produce output that is not supported by all
2871      * spec-compliant decoders. Decoders don't differentiate between normal,
2872      * unofficial and experimental (that is, they always try to decode things
2873      * when they can) unless they are explicitly asked to behave stupidly
2874      * (=strictly conform to the specs)
2875      */
2876     int strict_std_compliance;
2877 //#define FF_COMPLIANCE_VERY_STRICT   2 ///< Strictly conform to an older more strict version of the spec or reference software.
2878 //#define FF_COMPLIANCE_STRICT        1 ///< Strictly conform to all the things in the spec no matter what consequences.
2879 //#define FF_COMPLIANCE_NORMAL        0
2880 //#define FF_COMPLIANCE_UNOFFICIAL   -1 ///< Allow unofficial extensions
2881 //#define FF_COMPLIANCE_EXPERIMENTAL -2 ///< Allow nonstandardized experimental things.
2882 
2883     /**
2884      * error concealment flags
2885      * - encoding: unused
2886      * - decoding: Set by user.
2887      */
2888     int error_concealment;
2889 //#define FF_EC_GUESS_MVS   1
2890 //#define FF_EC_DEBLOCK     2
2891 //#define FF_EC_FAVOR_INTER 256
2892 
2893     /**
2894      * debug
2895      * - encoding: Set by user.
2896      * - decoding: Set by user.
2897      */
2898     int _debug;
2899 //#define FF_DEBUG_PICT_INFO   1
2900 //#define FF_DEBUG_RC          2
2901 //#define FF_DEBUG_BITSTREAM   4
2902 //#define FF_DEBUG_MB_TYPE     8
2903 //#define FF_DEBUG_QP          16
2904 //#if FF_API_DEBUG_MV
2905 /**
2906  * @deprecated this option does nothing
2907  */
2908 //#define FF_DEBUG_MV          32
2909 //#endif
2910 //#define FF_DEBUG_DCT_COEFF   0x00000040
2911 //#define FF_DEBUG_SKIP        0x00000080
2912 //#define FF_DEBUG_STARTCODE   0x00000100
2913 //#if FF_API_UNUSED_MEMBERS
2914 //#define FF_DEBUG_PTS         0x00000200
2915 //#endif /* FF_API_UNUSED_MEMBERS */
2916 //#define FF_DEBUG_ER          0x00000400
2917 //#define FF_DEBUG_MMCO        0x00000800
2918 //#define FF_DEBUG_BUGS        0x00001000
2919 //#if FF_API_DEBUG_MV
2920 //#define FF_DEBUG_VIS_QP      0x00002000 ///< only access through AVOptions from outside libavcodec
2921 //#define FF_DEBUG_VIS_MB_TYPE 0x00004000 ///< only access through AVOptions from outside libavcodec
2922 //#endif
2923 //#define FF_DEBUG_BUFFERS     0x00008000
2924 //#define FF_DEBUG_THREADS     0x00010000
2925 //#define FF_DEBUG_GREEN_MD    0x00800000
2926 //#define FF_DEBUG_NOMC        0x01000000
2927 
2928 static if (FF_API_DEBUG_MV) {
2929     /**
2930      * debug
2931      * Code outside libavcodec should access this field using AVOptions
2932      * - encoding: Set by user.
2933      * - decoding: Set by user.
2934      */
2935     int debug_mv;
2936 //#define FF_DEBUG_VIS_MV_P_FOR  0x00000001 //visualize forward predicted MVs of P frames
2937 //#define FF_DEBUG_VIS_MV_B_FOR  0x00000002 //visualize forward predicted MVs of B frames
2938 //#define FF_DEBUG_VIS_MV_B_BACK 0x00000004 //visualize backward predicted MVs of B frames
2939 }
2940 
2941     /**
2942      * Error recognition; may misdetect some more or less valid parts as errors.
2943      * - encoding: unused
2944      * - decoding: Set by user.
2945      */
2946     int err_recognition;
2947 
2948 /**
2949  * Verify checksums embedded in the bitstream (could be of either encoded or
2950  * decoded data, depending on the codec) and print an error message on mismatch.
2951  * If AV_EF_EXPLODE is also set, a mismatching checksum will result in the
2952  * decoder returning an error.
2953  */
2954 //#define AV_EF_CRCCHECK  (1<<0)
2955 //#define AV_EF_BITSTREAM (1<<1)
2956 //#define AV_EF_BUFFER    (1<<2)
2957 //#define AV_EF_EXPLODE   (1<<3)
2958 
2959 //#define AV_EF_IGNORE_ERR (1<<15)        ///< ignore errors and continue
2960 //#define AV_EF_CAREFUL    (1<<16)
2961 //#define AV_EF_COMPLIANT  (1<<17)
2962 //#define AV_EF_AGGRESSIVE (1<<18)
2963 
2964 
2965     /**
2966      * opaque 64bit number (generally a PTS) that will be reordered and
2967      * output in AVFrame.reordered_opaque
2968      * - encoding: unused
2969      * - decoding: Set by user.
2970      */
2971     int64_t reordered_opaque;
2972 
2973     /**
2974      * Hardware accelerator in use
2975      * - encoding: unused.
2976      * - decoding: Set by libavcodec
2977      */
2978     AVHWAccel *hwaccel;
2979 
2980     /**
2981      * Hardware accelerator context.
2982      * For some hardware accelerators, a global context needs to be
2983      * provided by the user. In that case, this holds display-dependent
2984      * data FFmpeg cannot instantiate itself. Please refer to the
2985      * FFmpeg HW accelerator documentation to know how to fill this
2986      * is. e.g. for VA API, this is a struct vaapi_context.
2987      * - encoding: unused
2988      * - decoding: Set by user
2989      */
2990     void *hwaccel_context;
2991 
2992     /**
2993      * error
2994      * - encoding: Set by libavcodec if flags&CODEC_FLAG_PSNR.
2995      * - decoding: unused
2996      */
2997     uint64_t [AV_NUM_DATA_POINTERS]error;
2998 
2999     /**
3000      * DCT algorithm, see FF_DCT_* below
3001      * - encoding: Set by user.
3002      * - decoding: unused
3003      */
3004     int dct_algo;
3005 //#define FF_DCT_AUTO    0
3006 //#define FF_DCT_FASTINT 1
3007 //#define FF_DCT_INT     2
3008 //#define FF_DCT_MMX     3
3009 //#define FF_DCT_ALTIVEC 5
3010 //#define FF_DCT_FAAN    6
3011 
3012     /**
3013      * IDCT algorithm, see FF_IDCT_* below.
3014      * - encoding: Set by user.
3015      * - decoding: Set by user.
3016      */
3017     int idct_algo;
3018 //#define FF_IDCT_AUTO          0
3019 //#define FF_IDCT_INT           1
3020 //#define FF_IDCT_SIMPLE        2
3021 //#define FF_IDCT_SIMPLEMMX     3
3022 //#define FF_IDCT_ARM           7
3023 //#define FF_IDCT_ALTIVEC       8
3024 //#if FF_API_ARCH_SH4
3025 //#define FF_IDCT_SH4           9
3026 //#endif
3027 //#define FF_IDCT_SIMPLEARM     10
3028 //#if FF_API_UNUSED_MEMBERS
3029 //#define FF_IDCT_IPP           13
3030 //#endif /* FF_API_UNUSED_MEMBERS */
3031 //#define FF_IDCT_XVID          14
3032 //#if FF_API_IDCT_XVIDMMX
3033 //#define FF_IDCT_XVIDMMX       14
3034 //#endif /* FF_API_IDCT_XVIDMMX */
3035 //#define FF_IDCT_SIMPLEARMV5TE 16
3036 //#define FF_IDCT_SIMPLEARMV6   17
3037 //#if FF_API_ARCH_SPARC
3038 //#define FF_IDCT_SIMPLEVIS     18
3039 //#endif
3040 //#define FF_IDCT_FAAN          20
3041 //#define FF_IDCT_SIMPLENEON    22
3042 //#if FF_API_ARCH_ALPHA
3043 //#define FF_IDCT_SIMPLEALPHA   23
3044 //#endif
3045 //#define FF_IDCT_SIMPLEAUTO    128
3046 
3047     /**
3048      * bits per sample/pixel from the demuxer (needed for huffyuv).
3049      * - encoding: Set by libavcodec.
3050      * - decoding: Set by user.
3051      */
3052      int bits_per_coded_sample;
3053 
3054     /**
3055      * Bits per sample/pixel of internal libavcodec pixel/sample format.
3056      * - encoding: set by user.
3057      * - decoding: set by libavcodec.
3058      */
3059     int bits_per_raw_sample;
3060 
3061 static if (FF_API_LOWRES) {
3062     /**
3063      * low resolution decoding, 1-> 1/2 size, 2->1/4 size
3064      * - encoding: unused
3065      * - decoding: Set by user.
3066      * Code outside libavcodec should access this field using:
3067      * av_codec_{get,set}_lowres(avctx)
3068      */
3069      int lowres;
3070 }
3071 
3072 static if (FF_API_CODED_FRAME) {
3073     /**
3074      * the picture in the bitstream
3075      * - encoding: Set by libavcodec.
3076      * - decoding: unused
3077      *
3078      * @deprecated use the quality factor packet side data instead
3079      */
3080     deprecated AVFrame *coded_frame;
3081 }
3082 
3083     /**
3084      * thread count
3085      * is used to decide how many independent tasks should be passed to execute()
3086      * - encoding: Set by user.
3087      * - decoding: Set by user.
3088      */
3089     int thread_count;
3090 
3091     /**
3092      * Which multithreading methods to use.
3093      * Use of FF_THREAD_FRAME will increase decoding delay by one frame per thread,
3094      * so clients which cannot provide future frames should not use it.
3095      *
3096      * - encoding: Set by user, otherwise the default is used.
3097      * - decoding: Set by user, otherwise the default is used.
3098      */
3099     int thread_type;
3100 //#define FF_THREAD_FRAME   1 ///< Decode more than one frame at once
3101 //#define FF_THREAD_SLICE   2 ///< Decode more than one part of a single frame at once
3102 
3103     /**
3104      * Which multithreading methods are in use by the codec.
3105      * - encoding: Set by libavcodec.
3106      * - decoding: Set by libavcodec.
3107      */
3108     int active_thread_type;
3109 
3110     /**
3111      * Set by the client if its custom get_buffer() callback can be called
3112      * synchronously from another thread, which allows faster multithreaded decoding.
3113      * draw_horiz_band() will be called from other threads regardless of this setting.
3114      * Ignored if the default get_buffer() is used.
3115      * - encoding: Set by user.
3116      * - decoding: Set by user.
3117      */
3118     int thread_safe_callbacks;
3119 
3120     /**
3121      * The codec may call this to execute several independent things.
3122      * It will return only after finishing all tasks.
3123      * The user may replace this with some multithreaded implementation,
3124      * the default implementation will execute the parts serially.
3125      * @param count the number of things to execute
3126      * - encoding: Set by libavcodec, user can override.
3127      * - decoding: Set by libavcodec, user can override.
3128      */
3129     int function(AVCodecContext *c, int function(AVCodecContext *c2, void *arg) func, void *arg2, int *ret, int count, int size) execute;
3130 
3131     /**
3132      * The codec may call this to execute several independent things.
3133      * It will return only after finishing all tasks.
3134      * The user may replace this with some multithreaded implementation,
3135      * the default implementation will execute the parts serially.
3136      * Also see avcodec_thread_init and e.g. the --enable-pthread configure option.
3137      * @param c context passed also to func
3138      * @param count the number of things to execute
3139      * @param arg2 argument passed unchanged to func
3140      * @param ret return values of executed functions, must have space for "count" values. May be NULL.
3141      * @param func function that will be called count times, with jobnr from 0 to count-1.
3142      *             threadnr will be in the range 0 to c->thread_count-1 < MAX_THREADS and so that no
3143      *             two instances of func executing at the same time will have the same threadnr.
3144      * @return always 0 currently, but code should handle a future improvement where when any call to func
3145      *         returns < 0 no further calls to func may be done and < 0 is returned.
3146      * - encoding: Set by libavcodec, user can override.
3147      * - decoding: Set by libavcodec, user can override.
3148      */
3149     int function(AVCodecContext *c, int function(AVCodecContext *c2, void *arg, int jobnr, int threadnr) func, void *arg2, int *ret, int count) execute2;
3150 
3151     /**
3152      * noise vs. sse weight for the nsse comparison function
3153      * - encoding: Set by user.
3154      * - decoding: unused
3155      */
3156      int nsse_weight;
3157 
3158     /**
3159      * profile
3160      * - encoding: Set by user.
3161      * - decoding: Set by libavcodec.
3162      */
3163      int profile;
3164 //#define FF_PROFILE_UNKNOWN -99
3165 //#define FF_PROFILE_RESERVED -100
3166 
3167 //#define FF_PROFILE_AAC_MAIN 0
3168 //#define FF_PROFILE_AAC_LOW  1
3169 //#define FF_PROFILE_AAC_SSR  2
3170 //#define FF_PROFILE_AAC_LTP  3
3171 //#define FF_PROFILE_AAC_HE   4
3172 //#define FF_PROFILE_AAC_HE_V2 28
3173 //#define FF_PROFILE_AAC_LD   22
3174 //#define FF_PROFILE_AAC_ELD  38
3175 //#define FF_PROFILE_MPEG2_AAC_LOW 128
3176 //#define FF_PROFILE_MPEG2_AAC_HE  131
3177 
3178 //#define FF_PROFILE_DTS         20
3179 //#define FF_PROFILE_DTS_ES      30
3180 //#define FF_PROFILE_DTS_96_24   40
3181 //#define FF_PROFILE_DTS_HD_HRA  50
3182 //#define FF_PROFILE_DTS_HD_MA   60
3183 //#define FF_PROFILE_DTS_EXPRESS 70
3184 
3185 //#define FF_PROFILE_MPEG2_422    0
3186 //#define FF_PROFILE_MPEG2_HIGH   1
3187 //#define FF_PROFILE_MPEG2_SS     2
3188 //#define FF_PROFILE_MPEG2_SNR_SCALABLE  3
3189 //#define FF_PROFILE_MPEG2_MAIN   4
3190 //#define FF_PROFILE_MPEG2_SIMPLE 5
3191 
3192 //#define FF_PROFILE_H264_CONSTRAINED  (1<<9)  // 8+1; constraint_set1_flag
3193 //#define FF_PROFILE_H264_INTRA        (1<<11) // 8+3; constraint_set3_flag
3194 
3195 //#define FF_PROFILE_H264_BASELINE             66
3196 //#define FF_PROFILE_H264_CONSTRAINED_BASELINE (66|FF_PROFILE_H264_CONSTRAINED)
3197 //#define FF_PROFILE_H264_MAIN                 77
3198 //#define FF_PROFILE_H264_EXTENDED             88
3199 //#define FF_PROFILE_H264_HIGH                 100
3200 //#define FF_PROFILE_H264_HIGH_10              110
3201 //#define FF_PROFILE_H264_HIGH_10_INTRA        (110|FF_PROFILE_H264_INTRA)
3202 //#define FF_PROFILE_H264_HIGH_422             122
3203 //#define FF_PROFILE_H264_HIGH_422_INTRA       (122|FF_PROFILE_H264_INTRA)
3204 //#define FF_PROFILE_H264_HIGH_444             144
3205 //#define FF_PROFILE_H264_HIGH_444_PREDICTIVE  244
3206 //#define FF_PROFILE_H264_HIGH_444_INTRA       (244|FF_PROFILE_H264_INTRA)
3207 //#define FF_PROFILE_H264_CAVLC_444            44
3208 
3209 //#define FF_PROFILE_VC1_SIMPLE   0
3210 //#define FF_PROFILE_VC1_MAIN     1
3211 //#define FF_PROFILE_VC1_COMPLEX  2
3212 //#define FF_PROFILE_VC1_ADVANCED 3
3213 
3214 //#define FF_PROFILE_MPEG4_SIMPLE                     0
3215 //#define FF_PROFILE_MPEG4_SIMPLE_SCALABLE            1
3216 //#define FF_PROFILE_MPEG4_CORE                       2
3217 //#define FF_PROFILE_MPEG4_MAIN                       3
3218 //#define FF_PROFILE_MPEG4_N_BIT                      4
3219 //#define FF_PROFILE_MPEG4_SCALABLE_TEXTURE           5
3220 //#define FF_PROFILE_MPEG4_SIMPLE_FACE_ANIMATION      6
3221 //#define FF_PROFILE_MPEG4_BASIC_ANIMATED_TEXTURE     7
3222 //#define FF_PROFILE_MPEG4_HYBRID                     8
3223 //#define FF_PROFILE_MPEG4_ADVANCED_REAL_TIME         9
3224 //#define FF_PROFILE_MPEG4_CORE_SCALABLE             10
3225 //#define FF_PROFILE_MPEG4_ADVANCED_CODING           11
3226 //#define FF_PROFILE_MPEG4_ADVANCED_CORE             12
3227 //#define FF_PROFILE_MPEG4_ADVANCED_SCALABLE_TEXTURE 13
3228 //#define FF_PROFILE_MPEG4_SIMPLE_STUDIO             14
3229 //#define FF_PROFILE_MPEG4_ADVANCED_SIMPLE           15
3230 
3231 //#define FF_PROFILE_JPEG2000_CSTREAM_RESTRICTION_0   0
3232 //#define FF_PROFILE_JPEG2000_CSTREAM_RESTRICTION_1   1
3233 //#define FF_PROFILE_JPEG2000_CSTREAM_NO_RESTRICTION  2
3234 //#define FF_PROFILE_JPEG2000_DCINEMA_2K              3
3235 //#define FF_PROFILE_JPEG2000_DCINEMA_4K              4
3236 
3237 //#define FF_PROFILE_VP9_0                            0
3238 //#define FF_PROFILE_VP9_1                            1
3239 //#define FF_PROFILE_VP9_2                            2
3240 //#define FF_PROFILE_VP9_3                            3
3241 
3242 //#define FF_PROFILE_HEVC_MAIN                        1
3243 //#define FF_PROFILE_HEVC_MAIN_10                     2
3244 //#define FF_PROFILE_HEVC_MAIN_STILL_PICTURE          3
3245 //#define FF_PROFILE_HEVC_REXT                        4
3246 
3247     /**
3248      * level
3249      * - encoding: Set by user.
3250      * - decoding: Set by libavcodec.
3251      */
3252      int level;
3253 //#define FF_LEVEL_UNKNOWN -99
3254 
3255     /**
3256      * Skip loop filtering for selected frames.
3257      * - encoding: unused
3258      * - decoding: Set by user.
3259      */
3260     AVDiscard skip_loop_filter;
3261 
3262     /**
3263      * Skip IDCT/dequantization for selected frames.
3264      * - encoding: unused
3265      * - decoding: Set by user.
3266      */
3267     AVDiscard skip_idct;
3268 
3269     /**
3270      * Skip decoding for selected frames.
3271      * - encoding: unused
3272      * - decoding: Set by user.
3273      */
3274     AVDiscard skip_frame;
3275 
3276     /**
3277      * Header containing style information for text subtitles.
3278      * For SUBTITLE_ASS subtitle type, it should contain the whole ASS
3279      * [Script Info] and [V4+ Styles] section, plus the [Events] line and
3280      * the Format line following. It shouldn't include any Dialogue line.
3281      * - encoding: Set/allocated/freed by user (before avcodec_open2())
3282      * - decoding: Set/allocated/freed by libavcodec (by avcodec_open2())
3283      */
3284     uint8_t *subtitle_header;
3285     int subtitle_header_size;
3286 
3287 static if (FF_API_ERROR_RATE) {
3288     /**
3289      * @deprecated use the 'error_rate' private AVOption of the mpegvideo
3290      * encoders
3291      */
3292     deprecated
3293     int error_rate;
3294 }
3295 
3296 static if (FF_API_VBV_DELAY) {
3297     /**
3298      * VBV delay coded in the last frame (in periods of a 27 MHz clock).
3299      * Used for compliant TS muxing.
3300      * - encoding: Set by libavcodec.
3301      * - decoding: unused.
3302      * @deprecated this value is now exported as a part of
3303      * AV_PKT_DATA_CPB_PROPERTIES packet side data
3304      */
3305     deprecated
3306         uint64_t vbv_delay;
3307 }
3308 
3309 static if (FF_API_SIDEDATA_ONLY_PKT) {
3310     /**
3311      * Encoding only and set by default. Allow encoders to output packets
3312      * that do not contain any encoded data, only side data.
3313      *
3314      * Some encoders need to output such packets, e.g. to update some stream
3315      * parameters at the end of encoding.
3316      *
3317      * @deprecated this field disables the default behaviour and
3318      *             it is kept only for compatibility.
3319      */
3320     deprecated
3321         int side_data_only_packets;
3322 }
3323 
3324     /**
3325      * Audio only. The number of "priming" samples (padding) inserted by the
3326      * encoder at the beginning of the audio. I.e. this number of leading
3327      * decoded samples must be discarded by the caller to get the original audio
3328      * without leading padding.
3329      *
3330      * - decoding: unused
3331      * - encoding: Set by libavcodec. The timestamps on the output packets are
3332      *             adjusted by the encoder so that they always refer to the
3333      *             first sample of the data actually contained in the packet,
3334      *             including any added padding.  E.g. if the timebase is
3335      *             1/samplerate and the timestamp of the first input sample is
3336      *             0, the timestamp of the first output packet will be
3337      *             -initial_padding.
3338      */
3339     int initial_padding;
3340 
3341     /**
3342      * - decoding: For codecs that store a framerate value in the compressed
3343      *             bitstream, the decoder may export it here. { 0, 1} when
3344      *             unknown.
3345      * - encoding: May be used to signal the framerate of CFR content to an
3346      *             encoder.
3347      */
3348     AVRational framerate;
3349 
3350     /**
3351      * Nominal unaccelerated pixel format, see AV_PIX_FMT_xxx.
3352      * - encoding: unused.
3353      * - decoding: Set by libavcodec before calling get_format()
3354      */
3355     AVPixelFormat sw_pix_fmt;
3356 
3357     /**
3358      * Timebase in which pkt_dts/pts and AVPacket.dts/pts are.
3359      * Code outside libavcodec should access this field using:
3360      * av_codec_{get,set}_pkt_timebase(avctx)
3361      * - encoding unused.
3362      * - decoding set by user.
3363      */
3364     AVRational pkt_timebase;
3365 
3366     /**
3367      * AVCodecDescriptor
3368      * Code outside libavcodec should access this field using:
3369      * av_codec_{get,set}_codec_descriptor(avctx)
3370      * - encoding: unused.
3371      * - decoding: set by libavcodec.
3372      */
3373     const AVCodecDescriptor *codec_descriptor;
3374 
3375 static if (!FF_API_LOWRES) {
3376     /**
3377      * low resolution decoding, 1-> 1/2 size, 2->1/4 size
3378      * - encoding: unused
3379      * - decoding: Set by user.
3380      * Code outside libavcodec should access this field using:
3381      * av_codec_{get,set}_lowres(avctx)
3382      */
3383      int lowres;
3384 }
3385 
3386     /**
3387      * Current statistics for PTS correction.
3388      * - decoding: maintained and used by libavcodec, not intended to be used by user apps
3389      * - encoding: unused
3390      */
3391     int64_t pts_correction_num_faulty_pts; /// Number of incorrect PTS values so far
3392     int64_t pts_correction_num_faulty_dts; /// Number of incorrect DTS values so far
3393     int64_t pts_correction_last_pts;       /// PTS of the last frame
3394     int64_t pts_correction_last_dts;       /// DTS of the last frame
3395 
3396     /**
3397      * Character encoding of the input subtitles file.
3398      * - decoding: set by user
3399      * - encoding: unused
3400      */
3401     char *sub_charenc;
3402 
3403     /**
3404      * Subtitles character encoding mode. Formats or codecs might be adjusting
3405      * this setting (if they are doing the conversion themselves for instance).
3406      * - decoding: set by libavcodec
3407      * - encoding: unused
3408      */
3409     int sub_charenc_mode;
3410 //#define FF_SUB_CHARENC_MODE_DO_NOTHING  -1  ///< do nothing (demuxer outputs a stream supposed to be already in UTF-8, or the codec is bitmap for instance)
3411 //#define FF_SUB_CHARENC_MODE_AUTOMATIC    0  ///< libavcodec will select the mode itself
3412 //#define FF_SUB_CHARENC_MODE_PRE_DECODER  1  ///< the AVPacket data needs to be recoded to UTF-8 before being fed to the decoder, requires iconv
3413 
3414     /**
3415      * Skip processing alpha if supported by codec.
3416      * Note that if the format uses pre-multiplied alpha (common with VP6,
3417      * and recommended due to better video quality/compression)
3418      * the image will look as if alpha-blended onto a black background.
3419      * However for formats that do not use pre-multiplied alpha
3420      * there might be serious artefacts (though e.g. libswscale currently
3421      * assumes pre-multiplied alpha anyway).
3422      * Code outside libavcodec should access this field using AVOptions
3423      *
3424      * - decoding: set by user
3425      * - encoding: unused
3426      */
3427     int skip_alpha;
3428 
3429     /**
3430      * Number of samples to skip after a discontinuity
3431      * - decoding: unused
3432      * - encoding: set by libavcodec
3433      */
3434     int seek_preroll;
3435 
3436 static if (!FF_API_DEBUG_MV) {
3437     /**
3438      * debug motion vectors
3439      * Code outside libavcodec should access this field using AVOptions
3440      * - encoding: Set by user.
3441      * - decoding: Set by user.
3442      */
3443     int debug_mv;
3444 //#define FF_DEBUG_VIS_MV_P_FOR  0x00000001 //visualize forward predicted MVs of P frames
3445 //#define FF_DEBUG_VIS_MV_B_FOR  0x00000002 //visualize forward predicted MVs of B frames
3446 //#define FF_DEBUG_VIS_MV_B_BACK 0x00000004 //visualize backward predicted MVs of B frames
3447 }
3448 
3449     /**
3450      * custom intra quantization matrix
3451      * Code outside libavcodec should access this field using av_codec_g/set_chroma_intra_matrix()
3452      * - encoding: Set by user, can be NULL.
3453      * - decoding: unused.
3454      */
3455     uint16_t *chroma_intra_matrix;
3456 
3457     /**
3458      * dump format separator.
3459      * can be ", " or "\n      " or anything else
3460      * Code outside libavcodec should access this field using AVOptions
3461      * (NO direct access).
3462      * - encoding: Set by user.
3463      * - decoding: Set by user.
3464      */
3465     uint8_t *dump_separator;
3466 
3467     /**
3468      * ',' separated list of allowed decoders.
3469      * If NULL then all are allowed
3470      * - encoding: unused
3471      * - decoding: set by user through AVOPtions (NO direct access)
3472      */
3473     char *codec_whitelist;
3474 
3475     /*
3476      * Properties of the stream that gets decoded
3477      * To be accessed through av_codec_get_properties() (NO direct access)
3478      * - encoding: unused
3479      * - decoding: set by libavcodec
3480      */
3481     uint properties;
3482 //#define FF_CODEC_PROPERTY_LOSSLESS        0x00000001
3483 //#define FF_CODEC_PROPERTY_CLOSED_CAPTIONS 0x00000002
3484 
3485     /**
3486      * Additional data associated with the entire coded stream.
3487      *
3488      * - decoding: unused
3489      * - encoding: may be set by libavcodec after avcodec_open2().
3490      */
3491     AVPacketSideData *coded_side_data;
3492     int            nb_coded_side_data;
3493 
3494 /**
3495      * Encoding only.
3496      *
3497      * For hardware encoders configured to use a hwaccel pixel format, this
3498      * field should be set by the caller to a reference to the AVHWFramesContext
3499      * describing input frames. AVHWFramesContext.format must be equal to
3500      * AVCodecContext.pix_fmt.
3501      *
3502      * This field should be set before avcodec_open2() is called and is
3503      * afterwards owned and managed by libavcodec.
3504      */
3505     AVBufferRef *hw_frames_ctx;
3506 
3507     /**
3508      * Control the form of AVSubtitle.rects[N]->ass
3509      * - decoding: set by user
3510      * - encoding: unused
3511      */
3512     int sub_text_format;
3513 //#define FF_SUB_TEXT_FMT_ASS              0
3514 //#if FF_API_ASS_TIMING
3515 //#define FF_SUB_TEXT_FMT_ASS_WITH_TIMINGS 1
3516 //#endif
3517 
3518 }
3519 
3520 AVRational av_codec_get_pkt_timebase         (const AVCodecContext *avctx);
3521 void       av_codec_set_pkt_timebase         (AVCodecContext *avctx, AVRational val);
3522 
3523 AVCodecDescriptor *av_codec_get_codec_descriptor(const AVCodecContext *avctx);
3524 void                     av_codec_set_codec_descriptor(AVCodecContext *avctx, const AVCodecDescriptor *desc);
3525 
3526 uint av_codec_get_codec_properties(const AVCodecContext *avctx);
3527 
3528 int  av_codec_get_lowres(const AVCodecContext *avctx);
3529 void av_codec_set_lowres(AVCodecContext *avctx, int val);
3530 
3531 int  av_codec_get_seek_preroll(const AVCodecContext *avctx);
3532 void av_codec_set_seek_preroll(AVCodecContext *avctx, int val);
3533 
3534 uint16_t *av_codec_get_chroma_intra_matrix(const AVCodecContext *avctx);
3535 void av_codec_set_chroma_intra_matrix(AVCodecContext *avctx, uint16_t *val);
3536 
3537 /**
3538  * AVProfile.
3539  */
3540 struct AVProfile {
3541     int profile;
3542     const char *name; ///< short name for the profile
3543 }
3544 
3545 struct AVCodecDefault;
3546 
3547 //struct AVSubtitle;
3548 
3549 /**
3550  * AVCodec.
3551  */
3552 struct AVCodec {
3553     /**
3554      * Name of the codec implementation.
3555      * The name is globally unique among encoders and among decoders (but an
3556      * encoder and a decoder can share the same name).
3557      * This is the primary way to find a codec from the user perspective.
3558      */
3559     const char *name;
3560     /**
3561      * Descriptive name for the codec, meant to be more human readable than name.
3562      * You should use the NULL_IF_CONFIG_SMALL() macro to define it.
3563      */
3564     const char *long_name;
3565     AVMediaType type;
3566     AVCodecID id;
3567     /**
3568      * Codec capabilities.
3569      * see CODEC_CAP_*
3570      */
3571     int capabilities;
3572     const AVRational *supported_framerates; ///< array of supported framerates, or NULL if any, array is terminated by {0,0}
3573     const AVPixelFormat *pix_fmts;       ///< array of supported pixel formats, or NULL if unknown, array is terminated by -1
3574     const int *supported_samplerates;       ///< array of supported audio samplerates, or NULL if unknown, array is terminated by 0
3575     const AVSampleFormat *sample_fmts; ///< array of supported sample formats, or NULL if unknown, array is terminated by -1
3576     const uint64_t *channel_layouts;         ///< array of support channel layouts, or NULL if unknown. array is terminated by 0
3577     uint8_t max_lowres;                     ///< maximum value for lowres supported by the decoder, no direct access, use av_codec_get_max_lowres()
3578     const AVClass *priv_class;              ///< AVClass for the private context
3579     const AVProfile *profiles;              ///< array of recognized profiles, or NULL if unknown, array is terminated by {FF_PROFILE_UNKNOWN}
3580 
3581     /*****************************************************************
3582      * No fields below this line are part of the public API. They
3583      * may not be used outside of libavcodec and can be changed and
3584      * removed at will.
3585      * New public fields should be added right above.
3586      *****************************************************************
3587      */
3588     int priv_data_size;
3589     AVCodec *next;
3590     /**
3591      * @name Frame-level threading support functions
3592      * @{
3593      */
3594     /**
3595      * If defined, called on thread contexts when they are created.
3596      * If the codec allocates writable tables in init(), re-allocate them here.
3597      * priv_data will be set to a copy of the original.
3598      */
3599     int function (AVCodecContext *) init_thread_copy;
3600     /**
3601      * Copy necessary context variables from a previous thread context to the current one.
3602      * If not defined, the next thread will start automatically; otherwise, the codec
3603      * must call ff_thread_finish_setup().
3604      *
3605      * dst and src will (rarely) point to the same context, in which case memcpy should be skipped.
3606      */
3607     int function(AVCodecContext *dst, const AVCodecContext *src) update_thread_context;
3608     /** @} */
3609 
3610     /**
3611      * Private codec-specific defaults.
3612      */
3613     const AVCodecDefault *defaults;
3614 
3615     /**
3616      * Initialize codec static data, called from avcodec_register().
3617      */
3618     void function(AVCodec *codec) init_static_data;
3619 
3620     int function(AVCodecContext *) init;
3621     int function(AVCodecContext *, uint8_t *buf, int buf_size,
3622                       const AVSubtitle *sub) encode_sub;
3623     /**
3624      * Encode data to an AVPacket.
3625      *
3626      * @param      avctx          codec context
3627      * @param      avpkt          output AVPacket (may contain a user-provided buffer)
3628      * @param[in]  frame          AVFrame containing the raw data to be encoded
3629      * @param[out] got_packet_ptr encoder sets to 0 or 1 to indicate that a
3630      *                            non-empty packet was returned in avpkt.
3631      * @return 0 on success, negative error code on failure
3632      */
3633     int function(AVCodecContext *avctx, AVPacket *avpkt, const AVFrame *frame, 
3634                    int *got_packet_ptr) encode2;
3635     int function(AVCodecContext *, void *outdata, int *outdata_size, AVPacket *avpkt) decode;
3636     int function(AVCodecContext *) close;
3637     /**
3638      * Decode/encode API with decoupled packet/frame dataflow. The API is the
3639      * same as the avcodec_ prefixed APIs (avcodec_send_frame() etc.), except
3640      * that:
3641      * - never called if the codec is closed or the wrong type,
3642      * - AVPacket parameter change side data is applied right before calling
3643      *   AVCodec->send_packet,
3644      * - if AV_CODEC_CAP_DELAY is not set, drain packets or frames are never sent,
3645      * - only one drain packet is ever passed down (until the next flush()),
3646      * - a drain AVPacket is always NULL (no need to check for avpkt->size).
3647      */
3648     int function(AVCodecContext *avctx, const AVFrame *frame) send_frame;
3649     int function(AVCodecContext *avctx, const AVPacket *avpkt) send_packet;
3650     int function(AVCodecContext *avctx, AVFrame *frame) receive_frame;
3651     int function(AVCodecContext *avctx, AVPacket *avpkt) receive_packet;
3652     /**
3653      * Flush buffers.
3654      * Will be called when seeking
3655      */
3656     void function(AVCodecContext *) flush;
3657     /**
3658      * Internal codec capabilities.
3659      * See FF_CODEC_CAP_* in internal.h
3660      */
3661     int caps_internal;
3662 }
3663 
3664 int av_codec_get_max_lowres(const AVCodec *codec);
3665 
3666 struct MpegEncContext;
3667 
3668 /**
3669  * @defgroup lavc_hwaccel AVHWAccel
3670  * @{
3671  */
3672 struct AVHWAccel {
3673     /**
3674      * Name of the hardware accelerated codec.
3675      * The name is globally unique among encoders and among decoders (but an
3676      * encoder and a decoder can share the same name).
3677      */
3678     const char *name;
3679 
3680     /**
3681      * Type of codec implemented by the hardware accelerator.
3682      *
3683      * See AVMEDIA_TYPE_xxx
3684      */
3685     AVMediaType type;
3686 
3687     /**
3688      * Codec implemented by the hardware accelerator.
3689      *
3690      * See AV_CODEC_ID_xxx
3691      */
3692     AVCodecID id;
3693 
3694     /**
3695      * Supported pixel format.
3696      *
3697      * Only hardware accelerated formats are supported here.
3698      */
3699     AVPixelFormat pix_fmt;
3700 
3701     /**
3702      * Hardware accelerated codec capabilities.
3703      * see FF_HWACCEL_CODEC_CAP_*
3704      */
3705     int capabilities;
3706 
3707     /*****************************************************************
3708      * No fields below this line are part of the public API. They
3709      * may not be used outside of libavcodec and can be changed and
3710      * removed at will.
3711      * New public fields should be added right above.
3712      *****************************************************************
3713      */
3714     AVHWAccel *next;
3715 
3716     /**
3717      * Allocate a custom buffer
3718      */
3719     int function(AVCodecContext *avctx, AVFrame *frame) alloc_frame;
3720 
3721     /**
3722      * Called at the beginning of each frame or field picture.
3723      *
3724      * Meaningful frame information (codec specific) is guaranteed to
3725      * be parsed at this point. This function is mandatory.
3726      *
3727      * Note that buf can be NULL along with buf_size set to 0.
3728      * Otherwise, this means the whole frame is available at this point.
3729      *
3730      * @param avctx the codec context
3731      * @param buf the frame data buffer base
3732      * @param buf_size the size of the frame in bytes
3733      * @return zero if successful, a negative value otherwise
3734      */
3735     int function(AVCodecContext *avctx, const uint8_t *buf, uint32_t buf_size) start_frame;
3736 
3737     /**
3738      * Callback for each slice.
3739      *
3740      * Meaningful slice information (codec specific) is guaranteed to
3741      * be parsed at this point. This function is mandatory.
3742      * The only exception is XvMC, that works on MB level.
3743      *
3744      * @param avctx the codec context
3745      * @param buf the slice data buffer base
3746      * @param buf_size the size of the slice in bytes
3747      * @return zero if successful, a negative value otherwise
3748      */
3749     int function(AVCodecContext *avctx, const uint8_t *buf, uint32_t buf_size) decode_slice;
3750 
3751     /**
3752      * Called at the end of each frame or field picture.
3753      *
3754      * The whole picture is parsed at this point and can now be sent
3755      * to the hardware accelerator. This function is mandatory.
3756      *
3757      * @param avctx the codec context
3758      * @return zero if successful, a negative value otherwise
3759      */
3760     int function(AVCodecContext *avctx) end_frame;
3761 
3762     /**
3763      * Size of per-frame hardware accelerator private data.
3764      *
3765      * Private data is allocated with av_mallocz() before
3766      * AVCodecContext.get_buffer() and deallocated after
3767      * AVCodecContext.release_buffer().
3768      */
3769     int frame_priv_data_size;
3770 
3771     /**
3772      * Called for every Macroblock in a slice.
3773      *
3774      * XvMC uses it to replace the ff_mpv_decode_mb().
3775      * Instead of decoding to raw picture, MB parameters are
3776      * stored in an array provided by the video driver.
3777      *
3778      * @param s the mpeg context
3779      */
3780     void function(MpegEncContext *s) decode_mb;
3781 
3782     /**
3783      * Initialize the hwaccel private data.
3784      *
3785      * This will be called from ff_get_format(), after hwaccel and
3786      * hwaccel_context are set and the hwaccel private data in AVCodecInternal
3787      * is allocated.
3788      */
3789     int function (AVCodecContext *avctx) init;
3790 
3791     /**
3792      * Uninitialize the hwaccel private data.
3793      *
3794      * This will be called from get_format() or avcodec_close(), after hwaccel
3795      * and hwaccel_context are already uninitialized.
3796      */
3797         int function(AVCodecContext *avctx) uninit;
3798 
3799     /**
3800      * Size of the private data to allocate in
3801      * AVCodecInternal.hwaccel_priv_data.
3802      */
3803     int priv_data_size;
3804 }
3805 
3806 /**
3807  * Hardware acceleration should be used for decoding even if the codec level
3808  * used is unknown or higher than the maximum supported level reported by the
3809  * hardware driver.
3810  *
3811  * It's generally a good idea to pass this flag unless you have a specific
3812  * reason not to, as hardware tends to under-report supported levels.
3813  */
3814 enum AV_HWACCEL_FLAG_IGNORE_LEVEL = (1 << 0);
3815 
3816 /**
3817  * Hardware acceleration can output YUV pixel formats with a different chroma
3818  * sampling than 4:2:0 and/or other than 8 bits per component.
3819  */
3820 enum AV_HWACCEL_FLAG_ALLOW_HIGH_DEPTH = (1 << 1);
3821 
3822 /**
3823  * @}
3824  */
3825 
3826 static if(FF_API_AVPICTURE){
3827     /**
3828      * @defgroup lavc_picture AVPicture
3829      *
3830      * Functions for working with AVPicture
3831      * @{
3832      */
3833 
3834     /**
3835      * Picture data structure.
3836      *
3837      * Up to four components can be stored into it, the last component is
3838      * alpha.
3839      * @deprecated use AVFrame or imgutils functions instead
3840      */
3841     struct AVPicture {
3842         deprecated
3843             uint8_t *[AV_NUM_DATA_POINTERS]data;    ///< pointers to the image data planes
3844         deprecated
3845             int [AV_NUM_DATA_POINTERS]linesize;     ///< number of bytes per line
3846     }
3847 
3848     /**
3849      * @}
3850      */
3851 }
3852 
3853 enum AVSubtitleType {
3854     SUBTITLE_NONE,
3855 
3856     SUBTITLE_BITMAP,                ///< A bitmap, pict will be set
3857 
3858     /**
3859      * Plain text, the text field must be set by the decoder and is
3860      * authoritative. ass and pict fields may contain approximations.
3861      */
3862     SUBTITLE_TEXT,
3863 
3864     /**
3865      * Formatted text, the ass field must be set by the decoder and is
3866      * authoritative. pict and text fields may contain approximations.
3867      */
3868     SUBTITLE_ASS,
3869 }
3870 
3871 enum AV_SUBTITLE_FLAG_FORCED=0x00000001;
3872 
3873 struct AVSubtitleRect {
3874     int x;         ///< top left corner  of pict, undefined when pict is not set
3875     int y;         ///< top left corner  of pict, undefined when pict is not set
3876     int w;         ///< width            of pict, undefined when pict is not set
3877     int h;         ///< height           of pict, undefined when pict is not set
3878     int nb_colors; ///< number of colors in pict, undefined when pict is not set
3879 
3880 static if(FF_API_AVPICTURE){
3881     /**
3882      * @deprecated unused
3883      */
3884     deprecated
3885         AVPicture pict;
3886 }
3887     /**
3888      * data+linesize for the bitmap of this subtitle.
3889      * Can be set for text/ass as well once they are rendered.
3890      */
3891     uint8_t [4]*data;
3892     int [4]linesize;
3893 
3894     AVSubtitleType type;
3895 
3896     char *text;                     ///< 0 terminated plain UTF-8 text
3897 
3898     /**
3899      * 0 terminated ASS/SSA compatible event line.
3900      * The presentation of this is unaffected by the other values in this
3901      * struct.
3902      */
3903     char *ass;
3904 
3905     int flags;
3906 }
3907 
3908 struct AVSubtitle {
3909     uint16_t format; /* 0 = graphics */
3910     uint32_t start_display_time; /* relative to packet pts, in ms */
3911     uint32_t end_display_time; /* relative to packet pts, in ms */
3912     uint num_rects;
3913     AVSubtitleRect **rects;
3914     int64_t pts;    ///< Same as packet pts, in AV_TIME_BASE
3915 }
3916 
3917 /**
3918  * This struct describes the properties of an encoded stream.
3919  *
3920  * sizeof(AVCodecParameters) is not a part of the public ABI, this struct must
3921  * be allocated with avcodec_parameters_alloc() and freed with
3922  * avcodec_parameters_free().
3923  */
3924 struct AVCodecParameters {
3925     /**
3926      * General type of the encoded data.
3927      */
3928     AVMediaType codec_type;
3929     /**
3930      * Specific type of the encoded data (the codec used).
3931      */
3932     AVCodecID   codec_id;
3933     /**
3934      * Additional information about the codec (corresponds to the AVI FOURCC).
3935      */
3936     uint32_t         codec_tag;
3937 
3938     /**
3939      * Extra binary data needed for initializing the decoder, codec-dependent.
3940      *
3941      * Must be allocated with av_malloc() and will be freed by
3942      * avcodec_parameters_free(). The allocated size of extradata must be at
3943      * least extradata_size + AV_INPUT_BUFFER_PADDING_SIZE, with the padding
3944      * bytes zeroed.
3945      */
3946     uint8_t *extradata;
3947     /**
3948      * Size of the extradata content in bytes.
3949      */
3950     int      extradata_size;
3951 
3952     /**
3953      * - video: the pixel format, the value corresponds to enum AVPixelFormat.
3954      * - audio: the sample format, the value corresponds to enum AVSampleFormat.
3955      */
3956     int format;
3957 
3958     /**
3959      * The average bitrate of the encoded data (in bits per second).
3960      */
3961     int64_t bit_rate;
3962 
3963     /**
3964      * The number of bits per sample in the codedwords.
3965      *
3966      * This is basically the bitrate per sample. It is mandatory for a bunch of
3967      * formats to actually decode them. It's the number of bits for one sample in
3968      * the actual coded bitstream.
3969      *
3970      * This could be for example 4 for ADPCM
3971      * For PCM formats this matches bits_per_raw_sample
3972      * Can be 0
3973      */
3974     int bits_per_coded_sample;
3975 
3976     /**
3977      * This is the number of valid bits in each output sample. If the
3978      * sample format has more bits, the least significant bits are additional
3979      * padding bits, which are always 0. Use right shifts to reduce the sample
3980      * to its actual size. For example, audio formats with 24 bit samples will
3981      * have bits_per_raw_sample set to 24, and format set to AV_SAMPLE_FMT_S32.
3982      * To get the original sample use "(int32_t)sample >> 8"."
3983      *
3984      * For ADPCM this might be 12 or 16 or similar
3985      * Can be 0
3986      */
3987     int bits_per_raw_sample;
3988 
3989     /**
3990      * Codec-specific bitstream restrictions that the stream conforms to.
3991      */
3992     int profile;
3993     int level;
3994 
3995     /**
3996      * Video only. The dimensions of the video frame in pixels.
3997      */
3998     int width;
3999     int height;
4000 
4001     /**
4002      * Video only. The aspect ratio (width / height) which a single pixel
4003      * should have when displayed.
4004      *
4005      * When the aspect ratio is unknown / undefined, the numerator should be
4006      * set to 0 (the denominator may have any value).
4007      */
4008     AVRational sample_aspect_ratio;
4009 
4010     /**
4011      * Video only. The order of the fields in interlaced video.
4012      */
4013     AVFieldOrder                  field_order;
4014 
4015     /**
4016      * Video only. Additional colorspace characteristics.
4017      */
4018     AVColorRange                  color_range;
4019     AVColorPrimaries              color_primaries;
4020     AVColorTransferCharacteristic color_trc;
4021     AVColorSpace                  color_space;
4022     AVChromaLocation              chroma_location;
4023 
4024     /**
4025      * Video only. Number of delayed frames.
4026      */
4027     int video_delay;
4028 
4029     /**
4030      * Audio only. The channel layout bitmask. May be 0 if the channel layout is
4031      * unknown or unspecified, otherwise the number of bits set must be equal to
4032      * the channels field.
4033      */
4034     uint64_t channel_layout;
4035     /**
4036      * Audio only. The number of audio channels.
4037      */
4038     int      channels;
4039     /**
4040      * Audio only. The number of audio samples per second.
4041      */
4042     int      sample_rate;
4043     /**
4044      * Audio only. The number of bytes per coded audio frame, required by some
4045      * formats.
4046      *
4047      * Corresponds to nBlockAlign in WAVEFORMATEX.
4048      */
4049     int      block_align;
4050     /**
4051      * Audio only. Audio frame size, if known. Required by some formats to be static.
4052      */
4053     int      frame_size;
4054 
4055     /**
4056      * Audio only. The amount of padding (in samples) inserted by the encoder at
4057      * the beginning of the audio. I.e. this number of leading decoded samples
4058      * must be discarded by the caller to get the original audio without leading
4059      * padding.
4060      */
4061     int initial_padding;
4062     /**
4063      * Audio only. The amount of padding (in samples) appended by the encoder to
4064      * the end of the audio. I.e. this number of decoded samples must be
4065      * discarded by the caller from the end of the stream to get the original
4066      * audio without any trailing padding.
4067      */
4068     int trailing_padding;
4069     /**
4070      * Audio only. Number of samples to skip after a discontinuity.
4071      */
4072     int seek_preroll;
4073 }
4074 
4075 /**
4076  * If c is NULL, returns the first registered codec,
4077  * if c is non-NULL, returns the next registered codec after c,
4078  * or NULL if c is the last one.
4079  */
4080 AVCodec *av_codec_next(AVCodec *c);
4081 
4082 /**
4083  * Return the LIBAVCODEC_VERSION_INT constant.
4084  */
4085 uint avcodec_version();
4086 
4087 /**
4088  * Return the libavcodec build-time configuration.
4089  */
4090 const (char) *avcodec_configuration();
4091 
4092 /**
4093  * Return the libavcodec license.
4094  */
4095 char *avcodec_license();
4096 
4097 /**
4098  * Register the codec codec and initialize libavcodec.
4099  *
4100  * @warning either this function or avcodec_register_all() must be called
4101  * before any other libavcodec functions.
4102  *
4103  * @see avcodec_register_all()
4104  */
4105 void avcodec_register(AVCodec *codec);
4106 
4107 /**
4108  * Register all the codecs, parsers and bitstream filters which were enabled at
4109  * configuration time. If you do not call this function you can select exactly
4110  * which formats you want to support, by using the individual registration
4111  * functions.
4112  *
4113  * @see avcodec_register
4114  * @see av_register_codec_parser
4115  * @see av_register_bitstream_filter
4116  */
4117 void avcodec_register_all();
4118 
4119 /**
4120  * Allocate an AVCodecContext and set its fields to default values. The
4121  * resulting struct should be freed with avcodec_free_context().
4122  *
4123  * @param codec if non-NULL, allocate private data and initialize defaults
4124  *              for the given codec. It is illegal to then call avcodec_open2()
4125  *              with a different codec.
4126  *              If NULL, then the codec-specific defaults won't be initialized,
4127  *              which may result in suboptimal default settings (this is
4128  *              important mainly for encoders, e.g. libx264).
4129  *
4130  * @return An AVCodecContext filled with default values or NULL on failure.
4131  */
4132 AVCodecContext *avcodec_alloc_context3(const AVCodec *codec);
4133 
4134 /**
4135  * Free the codec context and everything associated with it and write NULL to
4136  * the provided pointer.
4137  */
4138 void avcodec_free_context(AVCodecContext **avctx);
4139 
4140 static if(FF_API_GET_CONTEXT_DEFAULTS){
4141     /**
4142      * @deprecated This function should not be used, as closing and opening a codec
4143      * context multiple time is not supported. A new codec context should be
4144      * allocated for each new use.
4145      */
4146     int avcodec_get_context_defaults3(AVCodecContext *s, AVCodec *codec);
4147 }
4148 
4149 /**
4150  * Get the AVClass for AVCodecContext. It can be used in combination with
4151  * AV_OPT_SEARCH_FAKE_OBJ for examining options.
4152  *
4153  * @see av_opt_find().
4154  */
4155 AVClass *avcodec_get_class();
4156 
4157 static if(FF_API_COPY_CONTEXT){
4158     /**
4159      * Get the AVClass for AVFrame. It can be used in combination with
4160      * AV_OPT_SEARCH_FAKE_OBJ for examining options.
4161      *
4162      * @see av_opt_find().
4163      */
4164     AVClass *avcodec_get_frame_class();
4165 
4166     /**
4167      * Get the AVClass for AVSubtitleRect. It can be used in combination with
4168      * AV_OPT_SEARCH_FAKE_OBJ for examining options.
4169      *
4170      * @see av_opt_find().
4171      */
4172     AVClass *avcodec_get_subtitle_rect_class();
4173 
4174     /**
4175      * Copy the settings of the source AVCodecContext into the destination
4176      * AVCodecContext. The resulting destination codec context will be
4177      * unopened, i.e. you are required to call avcodec_open2() before you
4178      * can use this AVCodecContext to decode/encode video/audio data.
4179      *
4180      * @param dest target codec context, should be initialized with
4181      *             avcodec_alloc_context3(NULL), but otherwise uninitialized
4182      * @param src source codec context
4183      * @return AVERROR() on error (e.g. memory allocation error), 0 on success
4184      *
4185      * @deprecated The semantics of this function are ill-defined and it should not
4186      * be used. If you need to transfer the stream parameters from one codec context
4187      * to another, use an intermediate AVCodecParameters instance and the
4188      * avcodec_parameters_from_context() / avcodec_parameters_to_context()
4189      * functions.
4190      */
4191     deprecated
4192         int avcodec_copy_context(AVCodecContext *dest, const AVCodecContext *src);
4193 }
4194 
4195 /**
4196  * Allocate a new AVCodecParameters and set its fields to default values
4197  * (unknown/invalid/0). The returned struct must be freed with
4198  * avcodec_parameters_free().
4199  */
4200 AVCodecParameters *avcodec_parameters_alloc();
4201 
4202 /**
4203  * Free an AVCodecParameters instance and everything associated with it and
4204  * write NULL to the supplied pointer.
4205  */
4206 void avcodec_parameters_free(AVCodecParameters **par);
4207 
4208 /**
4209  * Copy the contents of src to dst. Any allocated fields in dst are freed and
4210  * replaced with newly allocated duplicates of the corresponding fields in src.
4211  *
4212  * @return >= 0 on success, a negative AVERROR code on failure.
4213  */
4214 int avcodec_parameters_copy(AVCodecParameters *dst, AVCodecParameters *src);
4215 
4216 /**
4217  * Fill the parameters struct based on the values from the supplied codec
4218  * context. Any allocated fields in par are freed and replaced with duplicates
4219  * of the corresponding fields in codec.
4220  *
4221  * @return >= 0 on success, a negative AVERROR code on failure
4222  */
4223 int avcodec_parameters_from_context(AVCodecParameters *par,
4224                                     AVCodecContext *codec);
4225 
4226 /**
4227  * Fill the codec context based on the values from the supplied codec
4228  * parameters. Any allocated fields in codec that have a corresponding field in
4229  * par are freed and replaced with duplicates of the corresponding field in par.
4230  * Fields in codec that do not have a counterpart in par are not touched.
4231  *
4232  * @return >= 0 on success, a negative AVERROR code on failure.
4233  */
4234 int avcodec_parameters_to_context(AVCodecContext *codec,
4235                                   AVCodecParameters *par);
4236 
4237 /**
4238  * Initialize the AVCodecContext to use the given AVCodec. Prior to using this
4239  * function the context has to be allocated with avcodec_alloc_context3().
4240  *
4241  * The functions avcodec_find_decoder_by_name(), avcodec_find_encoder_by_name(),
4242  * avcodec_find_decoder() and avcodec_find_encoder() provide an easy way for
4243  * retrieving a codec.
4244  *
4245  * @warning This function is not thread safe!
4246  *
4247  * @note Always call this function before using decoding routines (such as
4248  * @ref avcodec_receive_frame()).
4249  *
4250  * @code
4251  * avcodec_register_all();
4252  * av_dict_set(&opts, "b", "2.5M", 0);
4253  * codec = avcodec_find_decoder(AV_CODEC_ID_H264);
4254  * if (!codec)
4255  *     exit(1);
4256  *
4257  * context = avcodec_alloc_context3(codec);
4258  *
4259  * if (avcodec_open2(context, codec, opts) < 0)
4260  *     exit(1);
4261  * @endcode
4262  *
4263  * @param avctx The context to initialize.
4264  * @param codec The codec to open this context for. If a non-NULL codec has been
4265  *              previously passed to avcodec_alloc_context3() or
4266  *              for this context, then this parameter MUST be either NULL or
4267  *              equal to the previously passed codec.
4268  * @param options A dictionary filled with AVCodecContext and codec-private options.
4269  *                On return this object will be filled with options that were not found.
4270  *
4271  * @return zero on success, a negative value on error
4272  * @see avcodec_alloc_context3(), avcodec_find_decoder(), avcodec_find_encoder(),
4273  *      av_dict_set(), av_opt_find().
4274  */
4275 int avcodec_open2(AVCodecContext *avctx, AVCodec *codec, AVDictionary **options);
4276 
4277 /**
4278  * Close a given AVCodecContext and free all the data associated with it
4279  * (but not the AVCodecContext itself).
4280  *
4281  * Calling this function on an AVCodecContext that hasn't been opened will free
4282  * the codec-specific data allocated in avcodec_alloc_context3() with a non-NULL
4283  * codec. Subsequent calls will do nothing.
4284  *
4285  * @note Do not use this function. Use avcodec_free_context() to destroy a
4286  * codec context (either open or closed). Opening and closing a codec context
4287  * multiple times is not supported anymore -- use multiple codec contexts
4288  * instead.
4289  */
4290 int avcodec_close(AVCodecContext *avctx);
4291 
4292 /**
4293  * Free all allocated data in the given subtitle struct.
4294  *
4295  * @param sub AVSubtitle to free.
4296  */
4297 void avsubtitle_free(AVSubtitle *sub);
4298 
4299 /**
4300  * @}
4301  */
4302 
4303 /**
4304  * @addtogroup lavc_packet
4305  * @{
4306  */
4307 
4308 /**
4309  * Allocate an AVPacket and set its fields to default values.  The resulting
4310  * struct must be freed using av_packet_free().
4311  *
4312  * @return An AVPacket filled with default values or NULL on failure.
4313  *
4314  * @note this only allocates the AVPacket itself, not the data buffers. Those
4315  * must be allocated through other means such as av_new_packet.
4316  *
4317  * @see av_new_packet
4318  */
4319 AVPacket *av_packet_alloc();
4320 
4321 /**
4322  * Create a new packet that references the same data as src.
4323  *
4324  * This is a shortcut for av_packet_alloc()+av_packet_ref().
4325  *
4326  * @return newly created AVPacket on success, NULL on error.
4327  *
4328  * @see av_packet_alloc
4329  * @see av_packet_ref
4330  */
4331 AVPacket *av_packet_clone(AVPacket *src);
4332 
4333 /**
4334  * Free the packet, if the packet is reference counted, it will be
4335  * unreferenced first.
4336  *
4337  * @param packet packet to be freed. The pointer will be set to NULL.
4338  * @note passing NULL is a no-op.
4339  */
4340 void av_packet_free(AVPacket **pkt);
4341 
4342 /**
4343  * Initialize optional fields of a packet with default values.
4344  *
4345  * Note, this does not touch the data and size members, which have to be
4346  * initialized separately.
4347  *
4348  * @param pkt packet
4349  */
4350 void av_init_packet(AVPacket *pkt);
4351 
4352 /**
4353  * Allocate the payload of a packet and initialize its fields with
4354  * default values.
4355  *
4356  * @param pkt packet
4357  * @param size wanted payload size
4358  * @return 0 if OK, AVERROR_xxx otherwise
4359  */
4360 int av_new_packet(AVPacket *pkt, int size);
4361 
4362 /**
4363  * Reduce packet size, correctly zeroing padding
4364  *
4365  * @param pkt packet
4366  * @param size new size
4367  */
4368 void av_shrink_packet(AVPacket *pkt, int size);
4369 
4370 /**
4371  * Increase packet size, correctly zeroing padding
4372  *
4373  * @param pkt packet
4374  * @param grow_by number of bytes by which to increase the size of the packet
4375  */
4376 int av_grow_packet(AVPacket *pkt, int grow_by);
4377 
4378 /**
4379  * Initialize a reference-counted packet from av_malloc()ed data.
4380  *
4381  * @param pkt packet to be initialized. This function will set the data, size,
4382  *        buf and destruct fields, all others are left untouched.
4383  * @param data Data allocated by av_malloc() to be used as packet data. If this
4384  *        function returns successfully, the data is owned by the underlying AVBuffer.
4385  *        The caller may not access the data through other means.
4386  * @param size size of data in bytes, without the padding. I.e. the full buffer
4387  *        size is assumed to be size + FF_INPUT_BUFFER_PADDING_SIZE.
4388  *
4389  * @return 0 on success, a negative AVERROR on error
4390  */
4391 int av_packet_from_data(AVPacket *pkt, uint8_t *data, int size);
4392 
4393 static if(FF_API_AVPACKET_OLD_API){
4394     /**
4395      * @warning This is a hack - the packet memory allocation stuff is broken. The
4396      * packet is allocated if it was not really allocated.
4397      *
4398      * @deprecated Use av_packet_ref
4399      */
4400     deprecated
4401         int av_dup_packet(AVPacket *pkt);
4402     /**
4403      * Copy packet, including contents
4404      *
4405      * @return 0 on success, negative AVERROR on fail
4406      */
4407     int av_copy_packet(AVPacket *dst, AVPacket *src);
4408 
4409     /**
4410      * Copy packet side data
4411      *
4412      * @return 0 on success, negative AVERROR on fail
4413      */
4414     int av_copy_packet_side_data(AVPacket *dst, AVPacket *src);
4415 
4416     /**
4417      * Free a packet.
4418      *
4419      * @deprecated Use av_packet_unref
4420      *
4421      * @param pkt packet to free
4422      */
4423     deprecated
4424         void av_free_packet(AVPacket *pkt);
4425 }
4426 /**
4427  * Allocate new information of a packet.
4428  *
4429  * @param pkt packet
4430  * @param type side information type
4431  * @param size side information size
4432  * @return pointer to fresh allocated data or NULL otherwise
4433  */
4434 uint8_t* av_packet_new_side_data(AVPacket *pkt, AVPacketSideDataType type,
4435                                  int size);
4436 
4437 /**
4438  * Wrap an existing array as a packet side data.
4439  *
4440  * @param pkt packet
4441  * @param type side information type
4442  * @param data the side data array. It must be allocated with the av_malloc()
4443  *             family of functions. The ownership of the data is transferred to
4444  *             pkt.
4445  * @param size side information size
4446  * @return a non-negative number on success, a negative AVERROR code on
4447  *         failure. On failure, the packet is unchanged and the data remains
4448  *         owned by the caller.
4449  */
4450 int av_packet_add_side_data(AVPacket *pkt, AVPacketSideDataType type,
4451                             uint8_t *data, size_t size);
4452 
4453 /**
4454  * Shrink the already allocated side data buffer
4455  *
4456  * @param pkt packet
4457  * @param type side information type
4458  * @param size new side information size
4459  * @return 0 on success, < 0 on failure
4460  */
4461 int av_packet_shrink_side_data(AVPacket *pkt, AVPacketSideDataType type,
4462                                int size);
4463 
4464 /**
4465  * Get side information from packet.
4466  *
4467  * @param pkt packet
4468  * @param type desired side information type
4469  * @param size pointer for side information size to store (optional)
4470  * @return pointer to data if present or NULL otherwise
4471  */
4472 uint8_t* av_packet_get_side_data(AVPacket *pkt, AVPacketSideDataType type,
4473                                  int *size);
4474 
4475 int av_packet_merge_side_data(AVPacket *pkt);
4476 
4477 int av_packet_split_side_data(AVPacket *pkt);
4478 
4479 char *av_packet_side_data_name(AVPacketSideDataType type);
4480 
4481 /**
4482  * Pack a dictionary for use in side_data.
4483  *
4484  * @param dict The dictionary to pack.
4485  * @param size pointer to store the size of the returned data
4486  * @return pointer to data if successful, NULL otherwise
4487  */
4488 uint8_t *av_packet_pack_dictionary(AVDictionary *dict, int *size);
4489 /**
4490  * Unpack a dictionary from side_data.
4491  *
4492  * @param data data from side_data
4493  * @param size size of the data
4494  * @param dict the metadata storage dictionary
4495  * @return 0 on success, < 0 on failure
4496  */
4497 int av_packet_unpack_dictionary(const uint8_t *data, int size, AVDictionary **dict);
4498 
4499 
4500 /**
4501  * Convenience function to free all the side data stored.
4502  * All the other fields stay untouched.
4503  *
4504  * @param pkt packet
4505  */
4506 void av_packet_free_side_data(AVPacket *pkt);
4507 
4508 /**
4509  * Setup a new reference to the data described by a given packet
4510  *
4511  * If src is reference-counted, setup dst as a new reference to the
4512  * buffer in src. Otherwise allocate a new buffer in dst and copy the
4513  * data from src into it.
4514  *
4515  * All the other fields are copied from src.
4516  *
4517  * @see av_packet_unref
4518  *
4519  * @param dst Destination packet
4520  * @param src Source packet
4521  *
4522  * @return 0 on success, a negative AVERROR on error.
4523  */
4524 int av_packet_ref(AVPacket *dst, const AVPacket *src);
4525 
4526 /**
4527  * Wipe the packet.
4528  *
4529  * Unreference the buffer referenced by the packet and reset the
4530  * remaining packet fields to their default values.
4531  *
4532  * @param pkt The packet to be unreferenced.
4533  */
4534 void av_packet_unref(AVPacket *pkt);
4535 
4536 /**
4537  * Move every field in src to dst and reset src.
4538  *
4539  * @see av_packet_unref
4540  *
4541  * @param src Source packet, will be reset
4542  * @param dst Destination packet
4543  */
4544 void av_packet_move_ref(AVPacket *dst, AVPacket *src);
4545 
4546 /**
4547  * Copy only "properties" fields from src to dst.
4548  *
4549  * Properties for the purpose of this function are all the fields
4550  * beside those related to the packet data (buf, data, size)
4551  *
4552  * @param dst Destination packet
4553  * @param src Source packet
4554  *
4555  * @return 0 on success AVERROR on failure.
4556  */
4557 int av_packet_copy_props(AVPacket *dst, const AVPacket *src);
4558 
4559 /**
4560  * Convert valid timing fields (timestamps / durations) in a packet from one
4561  * timebase to another. Timestamps with unknown values (AV_NOPTS_VALUE) will be
4562  * ignored.
4563  *
4564  * @param pkt packet on which the conversion will be performed
4565  * @param tb_src source timebase, in which the timing fields in pkt are
4566  *               expressed
4567  * @param tb_dst destination timebase, to which the timing fields will be
4568  *               converted
4569  */
4570 void av_packet_rescale_ts(AVPacket *pkt, AVRational tb_src, AVRational tb_dst);
4571 
4572 /**
4573  * @}
4574  */
4575 
4576 /**
4577  * @addtogroup lavc_decoding
4578  * @{
4579  */
4580 
4581 /**
4582  * Find a registered decoder with a matching codec ID.
4583  *
4584  * @param id AVCodecID of the requested decoder
4585  * @return A decoder if one was found, NULL otherwise.
4586  */
4587 AVCodec *avcodec_find_decoder(AVCodecID id);
4588 
4589 /**
4590  * Find a registered decoder with the specified name.
4591  *
4592  * @param name name of the requested decoder
4593  * @return A decoder if one was found, NULL otherwise.
4594  */
4595 AVCodec *avcodec_find_decoder_by_name(const char *name);
4596 
4597 /**
4598  * The default callback for AVCodecContext.get_buffer2(). It is made public so
4599  * it can be called by custom get_buffer2() implementations for decoders without
4600  * CODEC_CAP_DR1 set.
4601  */
4602 int avcodec_default_get_buffer2(AVCodecContext *s, AVFrame *frame, int flags);
4603 
4604 static if (FF_API_EMU_EDGE) {
4605     /**
4606      * Return the amount of padding in pixels which the get_buffer callback must
4607      * provide around the edge of the image for codecs which do not have the
4608      * CODEC_FLAG_EMU_EDGE flag.
4609      *
4610      * @return Required padding in pixels.
4611      *
4612      * @deprecated CODEC_FLAG_EMU_EDGE is deprecated, so this function is no longer
4613      * needed
4614      */
4615     deprecated
4616         uint avcodec_get_edge_width();
4617 }
4618 
4619 /**
4620  * Modify width and height values so that they will result in a memory
4621  * buffer that is acceptable for the codec if you do not use any horizontal
4622  * padding.
4623  *
4624  * May only be used if a codec with CODEC_CAP_DR1 has been opened.
4625  */
4626 void avcodec_align_dimensions(AVCodecContext *s, int *width, int *height);
4627 
4628 /**
4629  * Modify width and height values so that they will result in a memory
4630  * buffer that is acceptable for the codec if you also ensure that all
4631  * line sizes are a multiple of the respective linesize_align[i].
4632  *
4633  * May only be used if a codec with CODEC_CAP_DR1 has been opened.
4634  */
4635 void avcodec_align_dimensions2(AVCodecContext *s, int *width, int *height,
4636                                int [AV_NUM_DATA_POINTERS]linesize_align);
4637 
4638 /**
4639  * Converts AVChromaLocation to swscale x/y chroma position.
4640  *
4641  * The positions represent the chroma (0,0) position in a coordinates system
4642  * with luma (0,0) representing the origin and luma(1,1) representing 256,256
4643  *
4644  * @param xpos  horizontal chroma sample position
4645  * @param ypos  vertical   chroma sample position
4646  */
4647 int avcodec_enum_to_chroma_pos(int *xpos, int *ypos, AVChromaLocation pos);
4648 
4649 /**
4650  * Converts swscale x/y chroma position to AVChromaLocation.
4651  *
4652  * The positions represent the chroma (0,0) position in a coordinates system
4653  * with luma (0,0) representing the origin and luma(1,1) representing 256,256
4654  *
4655  * @param xpos  horizontal chroma sample position
4656  * @param ypos  vertical   chroma sample position
4657  */
4658 AVChromaLocation avcodec_chroma_pos_to_enum(int xpos, int ypos);
4659 
4660 /**
4661  * Decode the audio frame of size avpkt->size from avpkt->data into frame.
4662  *
4663  * Some decoders may support multiple frames in a single AVPacket. Such
4664  * decoders would then just decode the first frame and the return value would be
4665  * less than the packet size. In this case, avcodec_decode_audio4 has to be
4666  * called again with an AVPacket containing the remaining data in order to
4667  * decode the second frame, etc...  Even if no frames are returned, the packet
4668  * needs to be fed to the decoder with remaining data until it is completely
4669  * consumed or an error occurs.
4670  *
4671  * Some decoders (those marked with AV_CODEC_CAP_DELAY) have a delay between input
4672  * and output. This means that for some packets they will not immediately
4673  * produce decoded output and need to be flushed at the end of decoding to get
4674  * all the decoded data. Flushing is done by calling this function with packets
4675  * with avpkt->data set to NULL and avpkt->size set to 0 until it stops
4676  * returning samples. It is safe to flush even those decoders that are not
4677  * marked with AV_CODEC_CAP_DELAY, then no samples will be returned.
4678  *
4679  * @warning The input buffer, avpkt->data must be AV_INPUT_BUFFER_PADDING_SIZE
4680  *          larger than the actual read bytes because some optimized bitstream
4681  *          readers read 32 or 64 bits at once and could read over the end.
4682  *
4683  * @note The AVCodecContext MUST have been opened with @ref avcodec_open2()
4684  * before packets may be fed to the decoder.
4685  *
4686  * @param      avctx the codec context
4687  * @param[out] frame The AVFrame in which to store decoded audio samples.
4688  *                   The decoder will allocate a buffer for the decoded frame by
4689  *                   calling the AVCodecContext.get_buffer2() callback.
4690  *                   When AVCodecContext.refcounted_frames is set to 1, the frame is
4691  *                   reference counted and the returned reference belongs to the
4692  *                   caller. The caller must release the frame using av_frame_unref()
4693  *                   when the frame is no longer needed. The caller may safely write
4694  *                   to the frame if av_frame_is_writable() returns 1.
4695  *                   When AVCodecContext.refcounted_frames is set to 0, the returned
4696  *                   reference belongs to the decoder and is valid only until the
4697  *                   next call to this function or until closing or flushing the
4698  *                   decoder. The caller may not write to it.
4699  * @param[out] got_frame_ptr Zero if no frame could be decoded, otherwise it is
4700  *                           non-zero. Note that this field being set to zero
4701  *                           does not mean that an error has occurred. For
4702  *                           decoders with AV_CODEC_CAP_DELAY set, no given decode
4703  *                           call is guaranteed to produce a frame.
4704  * @param[in]  avpkt The input AVPacket containing the input buffer.
4705  *                   At least avpkt->data and avpkt->size should be set. Some
4706  *                   decoders might also require additional fields to be set.
4707  * @return A negative error code is returned if an error occurred during
4708  *         decoding, otherwise the number of bytes consumed from the input
4709  *         AVPacket is returned.
4710  *
4711 * @deprecated Use avcodec_send_packet() and avcodec_receive_frame().
4712  */
4713 deprecated
4714     int avcodec_decode_audio4(AVCodecContext *avctx, AVFrame *frame,
4715                               int *got_frame_ptr, const AVPacket *avpkt);
4716 
4717 /**
4718  * Decode the video frame of size avpkt->size from avpkt->data into picture.
4719  * Some decoders may support multiple frames in a single AVPacket, such
4720  * decoders would then just decode the first frame.
4721  *
4722  * @warning The input buffer must be AV_INPUT_BUFFER_PADDING_SIZE larger than
4723  * the actual read bytes because some optimized bitstream readers read 32 or 64
4724  * bits at once and could read over the end.
4725  *
4726  * @warning The end of the input buffer buf should be set to 0 to ensure that
4727  * no overreading happens for damaged MPEG streams.
4728  *
4729  * @note Codecs which have the AV_CODEC_CAP_DELAY capability set have a delay
4730  * between input and output, these need to be fed with avpkt->data=NULL,
4731  * avpkt->size=0 at the end to return the remaining frames.
4732  *
4733  * @note The AVCodecContext MUST have been opened with @ref avcodec_open2()
4734  * before packets may be fed to the decoder.
4735  *
4736  * @param avctx the codec context
4737  * @param[out] picture The AVFrame in which the decoded video frame will be stored.
4738  *             Use av_frame_alloc() to get an AVFrame. The codec will
4739  *             allocate memory for the actual bitmap by calling the
4740  *             AVCodecContext.get_buffer2() callback.
4741  *             When AVCodecContext.refcounted_frames is set to 1, the frame is
4742  *             reference counted and the returned reference belongs to the
4743  *             caller. The caller must release the frame using av_frame_unref()
4744  *             when the frame is no longer needed. The caller may safely write
4745  *             to the frame if av_frame_is_writable() returns 1.
4746  *             When AVCodecContext.refcounted_frames is set to 0, the returned
4747  *             reference belongs to the decoder and is valid only until the
4748  *             next call to this function or until closing or flushing the
4749  *             decoder. The caller may not write to it.
4750  *
4751  * @param[in] avpkt The input AVPacket containing the input buffer.
4752  *            You can create such packet with av_init_packet() and by then setting
4753  *            data and size, some decoders might in addition need other fields like
4754  *            flags&AV_PKT_FLAG_KEY. All decoders are designed to use the least
4755  *            fields possible.
4756  * @param[in,out] got_picture_ptr Zero if no frame could be decompressed, otherwise, it is nonzero.
4757  * @return On error a negative value is returned, otherwise the number of bytes
4758  * used or zero if no frame could be decompressed.
4759  *
4760  * @deprecated Use avcodec_send_packet() and avcodec_receive_frame().
4761  */
4762 deprecated
4763     int avcodec_decode_video2(AVCodecContext *avctx, AVFrame *picture,
4764                              int *got_picture_ptr,
4765                              const AVPacket *avpkt);
4766 
4767 /**
4768  * Decode a subtitle message.
4769  * Return a negative value on error, otherwise return the number of bytes used.
4770  * If no subtitle could be decompressed, got_sub_ptr is zero.
4771  * Otherwise, the subtitle is stored in *sub.
4772  * Note that AV_CODEC_CAP_DR1 is not available for subtitle codecs. This is for
4773  * simplicity, because the performance difference is expect to be negligible
4774  * and reusing a get_buffer written for video codecs would probably perform badly
4775  * due to a potentially very different allocation pattern.
4776  *
4777  * Some decoders (those marked with CODEC_CAP_DELAY) have a delay between input
4778  * and output. This means that for some packets they will not immediately
4779  * produce decoded output and need to be flushed at the end of decoding to get
4780  * all the decoded data. Flushing is done by calling this function with packets
4781  * with avpkt->data set to NULL and avpkt->size set to 0 until it stops
4782  * returning subtitles. It is safe to flush even those decoders that are not
4783  * marked with CODEC_CAP_DELAY, then no subtitles will be returned.
4784  *
4785  * @note The AVCodecContext MUST have been opened with @ref avcodec_open2()
4786  * before packets may be fed to the decoder.
4787  *
4788  * @param avctx the codec context
4789  * @param[out] sub The Preallocated AVSubtitle in which the decoded subtitle will be stored,
4790  *                 must be freed with avsubtitle_free if *got_sub_ptr is set.
4791  * @param[in,out] got_sub_ptr Zero if no subtitle could be decompressed, otherwise, it is nonzero.
4792  * @param[in] avpkt The input AVPacket containing the input buffer.
4793  */
4794 int avcodec_decode_subtitle2(AVCodecContext *avctx, AVSubtitle *sub,
4795                             int *got_sub_ptr,
4796                             AVPacket *avpkt);
4797 
4798 /**
4799  * Supply raw packet data as input to a decoder.
4800  *
4801  * Internally, this call will copy relevant AVCodecContext fields, which can
4802  * influence decoding per-packet, and apply them when the packet is actually
4803  * decoded. (For example AVCodecContext.skip_frame, which might direct the
4804  * decoder to drop the frame contained by the packet sent with this function.)
4805  *
4806  * @warning The input buffer, avpkt->data must be AV_INPUT_BUFFER_PADDING_SIZE
4807  *          larger than the actual read bytes because some optimized bitstream
4808  *          readers read 32 or 64 bits at once and could read over the end.
4809  *
4810  * @warning Do not mix this API with the legacy API (like avcodec_decode_video2())
4811  *          on the same AVCodecContext. It will return unexpected results now
4812  *          or in future libavcodec versions.
4813  *
4814  * @note The AVCodecContext MUST have been opened with @ref avcodec_open2()
4815  *       before packets may be fed to the decoder.
4816  *
4817  * @param avctx codec context
4818  * @param[in] avpkt The input AVPacket. Usually, this will be a single video
4819  *                  frame, or several complete audio frames.
4820  *                  Ownership of the packet remains with the caller, and the
4821  *                  decoder will not write to the packet. The decoder may create
4822  *                  a reference to the packet data (or copy it if the packet is
4823  *                  not reference-counted).
4824  *                  Unlike with older APIs, the packet is always fully consumed,
4825  *                  and if it contains multiple frames (e.g. some audio codecs),
4826  *                  will require you to call avcodec_receive_frame() multiple
4827  *                  times afterwards before you can send a new packet.
4828  *                  It can be NULL (or an AVPacket with data set to NULL and
4829  *                  size set to 0); in this case, it is considered a flush
4830  *                  packet, which signals the end of the stream. Sending the
4831  *                  first flush packet will return success. Subsequent ones are
4832  *                  unnecessary and will return AVERROR_EOF. If the decoder
4833  *                  still has frames buffered, it will return them after sending
4834  *                  a flush packet.
4835  *
4836  * @return 0 on success, otherwise negative error code:
4837  *      AVERROR(EAGAIN):   input is not accepted right now - the packet must be
4838  *                         resent after trying to read output
4839  *      AVERROR_EOF:       the decoder has been flushed, and no new packets can
4840  *                         be sent to it (also returned if more than 1 flush
4841  *                         packet is sent)
4842  *      AVERROR(EINVAL):   codec not opened, it is an encoder, or requires flush
4843  *      AVERROR(ENOMEM):   failed to add packet to internal queue, or similar
4844  *      other errors: legitimate decoding errors
4845  */
4846 int avcodec_send_packet(AVCodecContext *avctx, const AVPacket *avpkt);
4847 
4848 /**
4849  * Return decoded output data from a decoder.
4850  *
4851  * @param avctx codec context
4852  * @param frame This will be set to a reference-counted video or audio
4853  *              frame (depending on the decoder type) allocated by the
4854  *              decoder. Note that the function will always call
4855  *              av_frame_unref(frame) before doing anything else.
4856  *
4857  * @return
4858  *      0:                 success, a frame was returned
4859  *      AVERROR(EAGAIN):   output is not available right now - user must try
4860  *                         to send new input
4861  *      AVERROR_EOF:       the decoder has been fully flushed, and there will be
4862  *                         no more output frames
4863  *      AVERROR(EINVAL):   codec not opened, or it is an encoder
4864  *      other negative values: legitimate decoding errors
4865  */
4866 int avcodec_receive_frame(AVCodecContext *avctx, AVFrame *frame);
4867 
4868 /**
4869  * Supply a raw video or audio frame to the encoder. Use avcodec_receive_packet()
4870  * to retrieve buffered output packets.
4871  *
4872  * @param avctx     codec context
4873  * @param[in] frame AVFrame containing the raw audio or video frame to be encoded.
4874  *                  Ownership of the frame remains with the caller, and the
4875  *                  encoder will not write to the frame. The encoder may create
4876  *                  a reference to the frame data (or copy it if the frame is
4877  *                  not reference-counted).
4878  *                  It can be NULL, in which case it is considered a flush
4879  *                  packet.  This signals the end of the stream. If the encoder
4880  *                  still has packets buffered, it will return them after this
4881  *                  call. Once flushing mode has been entered, additional flush
4882  *                  packets are ignored, and sending frames will return
4883  *                  AVERROR_EOF.
4884  *
4885  *                  For audio:
4886  *                  If AV_CODEC_CAP_VARIABLE_FRAME_SIZE is set, then each frame
4887  *                  can have any number of samples.
4888  *                  If it is not set, frame->nb_samples must be equal to
4889  *                  avctx->frame_size for all frames except the last.
4890  *                  The final frame may be smaller than avctx->frame_size.
4891  * @return 0 on success, otherwise negative error code:
4892  *      AVERROR(EAGAIN):   input is not accepted right now - the frame must be
4893  *                         resent after trying to read output packets
4894  *      AVERROR_EOF:       the encoder has been flushed, and no new frames can
4895  *                         be sent to it
4896  *      AVERROR(EINVAL):   codec not opened, refcounted_frames not set, it is a
4897  *                         decoder, or requires flush
4898  *      AVERROR(ENOMEM):   failed to add packet to internal queue, or similar
4899  *      other errors: legitimate decoding errors
4900  */
4901 int avcodec_send_frame(AVCodecContext *avctx, const AVFrame *frame);
4902 
4903 /**
4904  * Read encoded data from the encoder.
4905  *
4906  * @param avctx codec context
4907  * @param avpkt This will be set to a reference-counted packet allocated by the
4908  *              encoder. Note that the function will always call
4909  *              av_frame_unref(frame) before doing anything else.
4910  * @return 0 on success, otherwise negative error code:
4911  *      AVERROR(EAGAIN):   output is not available right now - user must try
4912  *                         to send input
4913  *      AVERROR_EOF:       the encoder has been fully flushed, and there will be
4914  *                         no more output packets
4915  *      AVERROR(EINVAL):   codec not opened, or it is an encoder
4916  *      other errors: legitimate decoding errors
4917  */
4918 int avcodec_receive_packet(AVCodecContext *avctx, AVPacket *avpkt);
4919 
4920 
4921 /**
4922  * @defgroup lavc_parsing Frame parsing
4923  * @{
4924  */
4925 
4926 enum AVPictureStructure {
4927     AV_PICTURE_STRUCTURE_UNKNOWN,      //< unknown
4928     AV_PICTURE_STRUCTURE_TOP_FIELD,    //< coded as top field
4929     AV_PICTURE_STRUCTURE_BOTTOM_FIELD, //< coded as bottom field
4930     AV_PICTURE_STRUCTURE_FRAME,        //< coded as frame
4931 }
4932 
4933 struct AVCodecParserContext {
4934     void *priv_data;
4935     AVCodecParser *parser;
4936     int64_t frame_offset; /* offset of the current frame */
4937     int64_t cur_offset; /* current offset
4938                            (incremented by each av_parser_parse()) */
4939     int64_t next_frame_offset; /* offset of the next frame */
4940     /* video info */
4941     int pict_type; /* XXX: Put it back in AVCodecContext. */
4942     /**
4943      * This field is used for proper frame duration computation in lavf.
4944      * It signals, how much longer the frame duration of the current frame
4945      * is compared to normal frame duration.
4946      *
4947      * frame_duration = (1 + repeat_pict) * time_base
4948      *
4949      * It is used by codecs like H.264 to display telecined material.
4950      */
4951     int repeat_pict; /* XXX: Put it back in AVCodecContext. */
4952     int64_t pts;     /* pts of the current frame */
4953     int64_t dts;     /* dts of the current frame */
4954 
4955     /* private data */
4956     int64_t last_pts;
4957     int64_t last_dts;
4958     int fetch_timestamp;
4959 
4960 //#define AV_PARSER_PTS_NB 4
4961     int cur_frame_start_index;
4962     int64_t [AV_PARSER_PTS_NB]cur_frame_offset;
4963     int64_t [AV_PARSER_PTS_NB]cur_frame_pts;
4964     int64_t [AV_PARSER_PTS_NB]cur_frame_dts;
4965 
4966     int flags;
4967 //#define PARSER_FLAG_COMPLETE_FRAMES           0x0001
4968 //#define PARSER_FLAG_ONCE                      0x0002
4969 /// Set if the parser has a valid file offset
4970 //#define PARSER_FLAG_FETCHED_OFFSET            0x0004
4971 //#define PARSER_FLAG_USE_CODEC_TS              0x1000
4972 
4973     int64_t offset;      ///< byte offset from starting packet start
4974     int64_t [AV_PARSER_PTS_NB]cur_frame_end;
4975 
4976     /**
4977      * Set by parser to 1 for key frames and 0 for non-key frames.
4978      * It is initialized to -1, so if the parser doesn't set this flag,
4979      * old-style fallback using AV_PICTURE_TYPE_I picture type as key frames
4980      * will be used.
4981      */
4982     int key_frame;
4983 
4984 static if(FF_API_CONVERGENCE_DURATION){
4985     /**
4986      * @deprecated unused
4987      */
4988     deprecated
4989         int64_t convergence_duration;
4990 }
4991 
4992     // Timestamp generation support:
4993     /**
4994      * Synchronization point for start of timestamp generation.
4995      *
4996      * Set to >0 for sync point, 0 for no sync point and <0 for undefined
4997      * (default).
4998      *
4999      * For example, this corresponds to presence of H.264 buffering period
5000      * SEI message.
5001      */
5002     int dts_sync_point;
5003 
5004     /**
5005      * Offset of the current timestamp against last timestamp sync point in
5006      * units of AVCodecContext.time_base.
5007      *
5008      * Set to INT_MIN when dts_sync_point unused. Otherwise, it must
5009      * contain a valid timestamp offset.
5010      *
5011      * Note that the timestamp of sync point has usually a nonzero
5012      * dts_ref_dts_delta, which refers to the previous sync point. Offset of
5013      * the next frame after timestamp sync point will be usually 1.
5014      *
5015      * For example, this corresponds to H.264 cpb_removal_delay.
5016      */
5017     int dts_ref_dts_delta;
5018 
5019     /**
5020      * Presentation delay of current frame in units of AVCodecContext.time_base.
5021      *
5022      * Set to INT_MIN when dts_sync_point unused. Otherwise, it must
5023      * contain valid non-negative timestamp delta (presentation time of a frame
5024      * must not lie in the past).
5025      *
5026      * This delay represents the difference between decoding and presentation
5027      * time of the frame.
5028      *
5029      * For example, this corresponds to H.264 dpb_output_delay.
5030      */
5031     int pts_dts_delta;
5032 
5033     /**
5034      * Position of the packet in file.
5035      *
5036      * Analogous to cur_frame_pts/dts
5037      */
5038     int64_t [AV_PARSER_PTS_NB]cur_frame_pos;
5039 
5040     /**
5041      * Byte position of currently parsed frame in stream.
5042      */
5043     int64_t pos;
5044 
5045     /**
5046      * Previous frame byte position.
5047      */
5048     int64_t last_pos;
5049 
5050     /**
5051      * Duration of the current frame.
5052      * For audio, this is in units of 1 / AVCodecContext.sample_rate.
5053      * For all other types, this is in units of AVCodecContext.time_base.
5054      */
5055     int duration;
5056 
5057     AVFieldOrder field_order;
5058 
5059     /**
5060      * Indicate whether a picture is coded as a frame, top field or bottom field.
5061      *
5062      * For example, H.264 field_pic_flag equal to 0 corresponds to
5063      * AV_PICTURE_STRUCTURE_FRAME. An H.264 picture with field_pic_flag
5064      * equal to 1 and bottom_field_flag equal to 0 corresponds to
5065      * AV_PICTURE_STRUCTURE_TOP_FIELD.
5066      */
5067     AVPictureStructure picture_structure;
5068 
5069     /**
5070      * Picture number incremented in presentation or output order.
5071      * This field may be reinitialized at the first picture of a new sequence.
5072      *
5073      * For example, this corresponds to H.264 PicOrderCnt.
5074      */
5075     int output_picture_number;
5076 
5077     /**
5078      * Dimensions of the decoded video intended for presentation.
5079      */
5080     int width;
5081     int height;
5082 
5083     /**
5084      * Dimensions of the coded video.
5085      */
5086     int coded_width;
5087     int coded_height;
5088 
5089     /**
5090      * The format of the coded data, corresponds to enum AVPixelFormat for video
5091      * and for enum AVSampleFormat for audio.
5092      *
5093      * Note that a decoder can have considerable freedom in how exactly it
5094      * decodes the data, so the format reported here might be different from the
5095      * one returned by a decoder.
5096      */
5097     int format;
5098 }
5099 
5100 struct AVCodecParser {
5101     int [5]codec_ids; /* several codec IDs are permitted */
5102     int priv_data_size;
5103     int function(AVCodecParserContext *s) parser_init;
5104     /* This callback never returns an error, a negative value means that
5105          * the frame start was in a previous packet. */
5106     int function(AVCodecParserContext *s,
5107                         AVCodecContext *avctx,
5108                         const uint8_t **poutbuf, int *poutbuf_size,
5109                         const uint8_t *buf, int buf_size) parser_parse;
5110     void function(AVCodecParserContext *s) parser_close;
5111     int function(AVCodecContext *avctx, const uint8_t *buf, int buf_size) split;
5112     AVCodecParser *next;
5113 }
5114 
5115 AVCodecParser *av_parser_next(AVCodecParser *c);
5116 
5117 void av_register_codec_parser(AVCodecParser *parser);
5118 AVCodecParserContext *av_parser_init(int codec_id);
5119 
5120 /**
5121  * Parse a packet.
5122  *
5123  * @param s             parser context.
5124  * @param avctx         codec context.
5125  * @param poutbuf       set to pointer to parsed buffer or NULL if not yet finished.
5126  * @param poutbuf_size  set to size of parsed buffer or zero if not yet finished.
5127  * @param buf           input buffer.
5128  * @param buf_size      input length, to signal EOF, this should be 0 (so that the last frame can be output).
5129  * @param pts           input presentation timestamp.
5130  * @param dts           input decoding timestamp.
5131  * @param pos           input byte position in stream.
5132  * @return the number of bytes of the input bitstream used.
5133  *
5134  * Example:
5135  * @code
5136  *   while(in_len){
5137  *       len = av_parser_parse2(myparser, AVCodecContext, &data, &size,
5138  *                                        in_data, in_len,
5139  *                                        pts, dts, pos);
5140  *       in_data += len;
5141  *       in_len  -= len;
5142  *
5143  *       if(size)
5144  *          decode_frame(data, size);
5145  *   }
5146  * @endcode
5147  */
5148 int av_parser_parse2(AVCodecParserContext *s,
5149                      AVCodecContext *avctx,
5150                      uint8_t **poutbuf, int *poutbuf_size,
5151                      const uint8_t *buf, int buf_size,
5152                      int64_t pts, int64_t dts,
5153                      int64_t pos);
5154 
5155 /**
5156  * @return 0 if the output buffer is a subset of the input, 1 if it is allocated and must be freed
5157  * @deprecated use AVBitStreamFilter
5158  */
5159 int av_parser_change(AVCodecParserContext *s,
5160                      AVCodecContext *avctx,
5161                      uint8_t **poutbuf, int *poutbuf_size,
5162                      const uint8_t *buf, int buf_size, int keyframe);
5163 void av_parser_close(AVCodecParserContext *s);
5164 
5165 /**
5166  * @}
5167  * @}
5168  */
5169 
5170 /**
5171  * @addtogroup lavc_encoding
5172  * @{
5173  */
5174 
5175 /**
5176  * Find a registered encoder with a matching codec ID.
5177  *
5178  * @param id AVCodecID of the requested encoder
5179  * @return An encoder if one was found, NULL otherwise.
5180  */
5181 AVCodec *avcodec_find_encoder(AVCodecID id);
5182 
5183 /**
5184  * Find a registered encoder with the specified name.
5185  *
5186  * @param name name of the requested encoder
5187  * @return An encoder if one was found, NULL otherwise.
5188  */
5189 AVCodec *avcodec_find_encoder_by_name(const char *name);
5190 
5191 /**
5192  * Encode a frame of audio.
5193  *
5194  * Takes input samples from frame and writes the next output packet, if
5195  * available, to avpkt. The output packet does not necessarily contain data for
5196  * the most recent frame, as encoders can delay, split, and combine input frames
5197  * internally as needed.
5198  *
5199  * @param avctx     codec context
5200  * @param avpkt     output AVPacket.
5201  *                  The user can supply an output buffer by setting
5202  *                  avpkt->data and avpkt->size prior to calling the
5203  *                  function, but if the size of the user-provided data is not
5204  *                  large enough, encoding will fail. If avpkt->data and
5205  *                  avpkt->size are set, avpkt->destruct must also be set. All
5206  *                  other AVPacket fields will be reset by the encoder using
5207  *                  av_init_packet(). If avpkt->data is NULL, the encoder will
5208  *                  allocate it. The encoder will set avpkt->size to the size
5209  *                  of the output packet.
5210  *
5211  *                  If this function fails or produces no output, avpkt will be
5212  *                  freed using av_packet_unref().
5213  * @param[in] frame AVFrame containing the raw audio data to be encoded.
5214  *                  May be NULL when flushing an encoder that has the
5215  *                  AV_CODEC_CAP_DELAY capability set.
5216  *                  If AV_CODEC_CAP_VARIABLE_FRAME_SIZE is set, then each frame
5217  *                  can have any number of samples.
5218  *                  If it is not set, frame->nb_samples must be equal to
5219  *                  avctx->frame_size for all frames except the last.
5220  *                  The final frame may be smaller than avctx->frame_size.
5221  * @param[out] got_packet_ptr This field is set to 1 by libavcodec if the
5222  *                            output packet is non-empty, and to 0 if it is
5223  *                            empty. If the function returns an error, the
5224  *                            packet can be assumed to be invalid, and the
5225  *                            value of got_packet_ptr is undefined and should
5226  *                            not be used.
5227  * @return          0 on success, negative error code on failure
5228  *
5229  * @deprecated use avcodec_send_frame()/avcodec_receive_packet() instead
5230  */
5231 deprecated
5232     int avcodec_encode_audio2(AVCodecContext *avctx, AVPacket *avpkt,
5233                               const AVFrame *frame, int *got_packet_ptr);
5234 
5235 /**
5236  * Encode a frame of video.
5237  *
5238  * Takes input raw video data from frame and writes the next output packet, if
5239  * available, to avpkt. The output packet does not necessarily contain data for
5240  * the most recent frame, as encoders can delay and reorder input frames
5241  * internally as needed.
5242  *
5243  * @param avctx     codec context
5244  * @param avpkt     output AVPacket.
5245  *                  The user can supply an output buffer by setting
5246  *                  avpkt->data and avpkt->size prior to calling the
5247  *                  function, but if the size of the user-provided data is not
5248  *                  large enough, encoding will fail. All other AVPacket fields
5249  *                  will be reset by the encoder using av_init_packet(). If
5250  *                  avpkt->data is NULL, the encoder will allocate it.
5251  *                  The encoder will set avpkt->size to the size of the
5252  *                  output packet. The returned data (if any) belongs to the
5253  *                  caller, he is responsible for freeing it.
5254  *
5255  *                  If this function fails or produces no output, avpkt will be
5256  *                  freed using av_packet_unref().
5257  * @param[in] frame AVFrame containing the raw video data to be encoded.
5258  *                  May be NULL when flushing an encoder that has the
5259  *                  AV_CODEC_CAP_DELAY capability set.
5260  * @param[out] got_packet_ptr This field is set to 1 by libavcodec if the
5261  *                            output packet is non-empty, and to 0 if it is
5262  *                            empty. If the function returns an error, the
5263  *                            packet can be assumed to be invalid, and the
5264  *                            value of got_packet_ptr is undefined and should
5265  *                            not be used.
5266  * @return          0 on success, negative error code on failure
5267  *
5268  * @deprecated use avcodec_send_frame()/avcodec_receive_packet() instead
5269  */
5270 deprecated
5271     int avcodec_encode_video2(AVCodecContext *avctx, AVPacket *avpkt,
5272                               const AVFrame *frame, int *got_packet_ptr);
5273 
5274 int avcodec_encode_subtitle(AVCodecContext *avctx, uint8_t *buf, int buf_size,
5275                             const AVSubtitle *sub);
5276 
5277 
5278 /**
5279  * @}
5280  */
5281 
5282 static if (FF_API_AVCODEC_RESAMPLE) {
5283 /**
5284  * @defgroup lavc_resample Audio resampling
5285  * @ingroup libavc
5286  * @deprecated use libswresample instead
5287  *
5288  * @{
5289  */
5290 struct ReSampleContext;
5291 struct AVResampleContext;
5292 
5293 //typedef struct ReSampleContext ReSampleContext;
5294 
5295 /**
5296  *  Initialize audio resampling context.
5297  *
5298  * @param output_channels  number of output channels
5299  * @param input_channels   number of input channels
5300  * @param output_rate      output sample rate
5301  * @param input_rate       input sample rate
5302  * @param sample_fmt_out   requested output sample format
5303  * @param sample_fmt_in    input sample format
5304  * @param filter_length    length of each FIR filter in the filterbank relative to the cutoff frequency
5305  * @param log2_phase_count log2 of the number of entries in the polyphase filterbank
5306  * @param linear           if 1 then the used FIR filter will be linearly interpolated
5307                            between the 2 closest, if 0 the closest will be used
5308  * @param cutoff           cutoff frequency, 1.0 corresponds to half the output sampling rate
5309  * @return allocated ReSampleContext, NULL if error occurred
5310  */
5311 deprecated
5312     ReSampleContext *av_audio_resample_init(int output_channels, int input_channels,
5313                                             int output_rate, int input_rate,
5314                                             AVSampleFormat sample_fmt_out,
5315                                             AVSampleFormat sample_fmt_in,
5316                                             int filter_length, int log2_phase_count,
5317                                             int linear, double cutoff);
5318 
5319 deprecated
5320     int audio_resample(ReSampleContext *s, short *output, short *input, int nb_samples);
5321 
5322 /**
5323  * Free resample context.
5324  *
5325  * @param s a non-NULL pointer to a resample context previously
5326  *          created with av_audio_resample_init()
5327  */
5328 deprecated
5329     void audio_resample_close(ReSampleContext *s);
5330 
5331 
5332 /**
5333  * Initialize an audio resampler.
5334  * Note, if either rate is not an integer then simply scale both rates up so they are.
5335  * @param filter_length length of each FIR filter in the filterbank relative to the cutoff freq
5336  * @param log2_phase_count log2 of the number of entries in the polyphase filterbank
5337  * @param linear If 1 then the used FIR filter will be linearly interpolated
5338                  between the 2 closest, if 0 the closest will be used
5339  * @param cutoff cutoff frequency, 1.0 corresponds to half the output sampling rate
5340  */
5341 deprecated
5342     AVResampleContext *av_resample_init(int out_rate, int in_rate, int filter_length, int log2_phase_count, int linear, double cutoff);
5343 
5344 /**
5345  * Resample an array of samples using a previously configured context.
5346  * @param src an array of unconsumed samples
5347  * @param consumed the number of samples of src which have been consumed are returned here
5348  * @param src_size the number of unconsumed samples available
5349  * @param dst_size the amount of space in samples available in dst
5350  * @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.
5351  * @return the number of samples written in dst or -1 if an error occurred
5352  */
5353 deprecated
5354     int av_resample(AVResampleContext *c, short *dst, short *src, int *consumed, int src_size, int dst_size, int update_ctx);
5355 
5356 
5357 /**
5358  * Compensate samplerate/timestamp drift. The compensation is done by changing
5359  * the resampler parameters, so no audible clicks or similar distortions occur
5360  * @param compensation_distance distance in output samples over which the compensation should be performed
5361  * @param sample_delta number of output samples which should be output less
5362  *
5363  * example: av_resample_compensate(c, 10, 500)
5364  * here instead of 510 samples only 500 samples would be output
5365  *
5366  * note, due to rounding the actual compensation might be slightly different,
5367  * especially if the compensation_distance is large and the in_rate used during init is small
5368  */
5369 deprecated
5370     void av_resample_compensate(AVResampleContext *c, int sample_delta, int compensation_distance);
5371 deprecated
5372     void av_resample_close(AVResampleContext *c);
5373 
5374 /**
5375  * @}
5376  */
5377 }
5378 
5379 static if(FF_API_AVPICTURE){
5380     /**
5381      * @addtogroup lavc_picture
5382      * @{
5383      */
5384 
5385     /**
5386      * @deprecated unused
5387      */
5388     deprecated
5389         int avpicture_alloc(AVPicture *picture, AVPixelFormat pix_fmt, int width, int height);
5390 
5391     /**
5392      * @deprecated unused
5393      */
5394     deprecated
5395         void avpicture_free(AVPicture *picture);
5396 
5397     /**
5398      * @deprecated use av_image_fill_arrays() instead.
5399      */
5400     deprecated
5401         int avpicture_fill(AVPicture *picture, const uint8_t *ptr,
5402                         AVPixelFormat pix_fmt, int width, int height);
5403 
5404     /**
5405      * @deprecated use av_image_copy_to_buffer() instead.
5406      */
5407     deprecated
5408         int avpicture_layout(const AVPicture *src, AVPixelFormat pix_fmt,
5409                              int width, int height,
5410                              ubyte *dest, int dest_size);
5411 
5412     /**
5413      * @deprecated use av_image_get_buffer_size() instead.
5414      */
5415     deprecated
5416         int avpicture_get_size(AVPixelFormat pix_fmt, int width, int height);
5417 
5418     /**
5419      * @deprecated av_image_copy() instead.
5420      */
5421     deprecated
5422         void av_picture_copy(AVPicture *dst, const AVPicture *src,
5423                             AVPixelFormat pix_fmt, int width, int height);
5424 
5425     /**
5426      * @deprecated unused
5427      */
5428     deprecated
5429         int av_picture_crop(AVPicture *dst, const AVPicture *src,
5430                             AVPixelFormat pix_fmt, int top_band, int left_band);
5431 
5432     /**
5433      * @deprecated unused
5434      */
5435     deprecated
5436         int av_picture_pad(AVPicture *dst, const AVPicture *src, int height, int width, AVPixelFormat pix_fmt,
5437                            int padtop, int padbottom, int padleft, int padright, int *color);
5438 
5439     /**
5440      * @}
5441      */
5442 }
5443 
5444 /**
5445  * @defgroup lavc_misc Utility functions
5446  * @ingroup libavc
5447  *
5448  * Miscellaneous utility functions related to both encoding and decoding
5449  * (or neither).
5450  * @{
5451  */
5452 
5453 /**
5454  * @defgroup lavc_misc_pixfmt Pixel formats
5455  *
5456  * Functions for working with pixel formats.
5457  * @{
5458  */
5459 
5460 /**
5461  * Utility function to access log2_chroma_w log2_chroma_h from
5462  * the pixel format AVPixFmtDescriptor.
5463  *
5464  * This function asserts that pix_fmt is valid. See av_pix_fmt_get_chroma_sub_sample
5465  * for one that returns a failure code and continues in case of invalid
5466  * pix_fmts.
5467  *
5468  * @param[in]  pix_fmt the pixel format
5469  * @param[out] h_shift store log2_chroma_h
5470  * @param[out] v_shift store log2_chroma_w
5471  *
5472  * @see av_pix_fmt_get_chroma_sub_sample
5473  */
5474 
5475 void avcodec_get_chroma_sub_sample(AVPixelFormat pix_fmt, int *h_shift, int *v_shift);
5476 
5477 /**
5478  * Return a value representing the fourCC code associated to the
5479  * pixel format pix_fmt, or 0 if no associated fourCC code can be
5480  * found.
5481  */
5482 uint avcodec_pix_fmt_to_codec_tag(AVPixelFormat pix_fmt);
5483 
5484 /**
5485  * @deprecated see av_get_pix_fmt_loss()
5486  */
5487 int avcodec_get_pix_fmt_loss(AVPixelFormat dst_pix_fmt, AVPixelFormat src_pix_fmt,
5488                              int has_alpha);
5489 
5490 /**
5491  * Find the best pixel format to convert to given a certain source pixel
5492  * format.  When converting from one pixel format to another, information loss
5493  * may occur.  For example, when converting from RGB24 to GRAY, the color
5494  * information will be lost. Similarly, other losses occur when converting from
5495  * some formats to other formats. avcodec_find_best_pix_fmt_of_2() searches which of
5496  * the given pixel formats should be used to suffer the least amount of loss.
5497  * The pixel formats from which it chooses one, are determined by the
5498  * pix_fmt_list parameter.
5499  *
5500  *
5501  * @param[in] pix_fmt_list AV_PIX_FMT_NONE terminated array of pixel formats to choose from
5502  * @param[in] src_pix_fmt source pixel format
5503  * @param[in] has_alpha Whether the source pixel format alpha channel is used.
5504  * @param[out] loss_ptr Combination of flags informing you what kind of losses will occur.
5505  * @return The best pixel format to convert to or -1 if none was found.
5506  */
5507 AVPixelFormat avcodec_find_best_pix_fmt_of_list(AVPixelFormat *pix_fmt_list,
5508                                             AVPixelFormat src_pix_fmt,
5509                                             int has_alpha, int *loss_ptr);
5510 
5511 /**
5512  * @deprecated see av_find_best_pix_fmt_of_2()
5513  */
5514 AVPixelFormat avcodec_find_best_pix_fmt_of_2(AVPixelFormat dst_pix_fmt1, AVPixelFormat dst_pix_fmt2,
5515                                              AVPixelFormat src_pix_fmt, int has_alpha, int *loss_ptr);
5516 
5517 static if (AV_HAVE_INCOMPATIBLE_LIBAV_ABI) {
5518 deprecated
5519     AVPixelFormat avcodec_find_best_pix_fmt2(AVPixelFormat *pix_fmt_list,
5520                                              AVPixelFormat src_pix_fmt,
5521                                              int has_alpha, int *loss_ptr);
5522 } else {
5523     AVPixelFormat avcodec_find_best_pix_fmt2(AVPixelFormat dst_pix_fmt1, AVPixelFormat dst_pix_fmt2,
5524                                             AVPixelFormat src_pix_fmt, int has_alpha, int *loss_ptr);
5525 }
5526 
5527 
5528 AVPixelFormat avcodec_default_get_format(AVCodecContext *s, const AVPixelFormat * fmt);
5529 
5530 /**
5531  * @}
5532  */
5533 
5534 static if (FF_API_SET_DIMENSIONS) {
5535 /**
5536  * @deprecated this function is not supposed to be used from outside of lavc
5537  */
5538 deprecated
5539     void avcodec_set_dimensions(AVCodecContext *s, int width, int height);
5540 }
5541 
5542 /**
5543  * Put a string representing the codec tag codec_tag in buf.
5544  *
5545  * @param buf       buffer to place codec tag in
5546  * @param buf_size size in bytes of buf
5547  * @param codec_tag codec tag to assign
5548  * @return the length of the string that would have been generated if
5549  * enough space had been available, excluding the trailing null
5550  */
5551 size_t av_get_codec_tag_string(char *buf, size_t buf_size, uint codec_tag);
5552 
5553 void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode);
5554 
5555 /**
5556  * Return a name for the specified profile, if available.
5557  *
5558  * @param codec the codec that is searched for the given profile
5559  * @param profile the profile value for which a name is requested
5560  * @return A name for the profile if found, NULL otherwise.
5561  */
5562 char *av_get_profile_name(const AVCodec *codec, int profile);
5563 
5564 /**
5565  * Return a name for the specified profile, if available.
5566  *
5567  * @param codec_id the ID of the codec to which the requested profile belongs
5568  * @param profile the profile value for which a name is requested
5569  * @return A name for the profile if found, NULL otherwise.
5570  *
5571  * @note unlike av_get_profile_name(), which searches a list of profiles
5572  *       supported by a specific decoder or encoder implementation, this
5573  *       function searches the list of profiles from the AVCodecDescriptor
5574  */
5575 char *avcodec_profile_name(AVCodecID codec_id, int profile);
5576 
5577 int avcodec_default_execute(AVCodecContext *c, int function(AVCodecContext *c2, void *arg2) func,void *arg, int *ret, int count, int size);
5578 int avcodec_default_execute2(AVCodecContext *c, int function(AVCodecContext *c2, void *arg2, int, int) func,void *arg, int *ret, int count);
5579 //
5580 
5581 /**
5582  * Fill AVFrame audio data and linesize pointers.
5583  *
5584  * The buffer buf must be a preallocated buffer with a size big enough
5585  * to contain the specified samples amount. The filled AVFrame data
5586  * pointers will point to this buffer.
5587  *
5588  * AVFrame extended_data channel pointers are allocated if necessary for
5589  * planar audio.
5590  *
5591  * @param frame       the AVFrame
5592  *                    frame->nb_samples must be set prior to calling the
5593  *                    function. This function fills in frame->data,
5594  *                    frame->extended_data, frame->linesize[0].
5595  * @param nb_channels channel count
5596  * @param sample_fmt  sample format
5597  * @param buf         buffer to use for frame data
5598  * @param buf_size    size of buffer
5599  * @param align       plane size sample alignment (0 = default)
5600  * @return            >=0 on success, negative error code on failure
5601  * @todo return the size in bytes required to store the samples in
5602  * case of success, at the next libavutil bump
5603  */
5604 int avcodec_fill_audio_frame(AVFrame *frame, int nb_channels,
5605                              AVSampleFormat sample_fmt, const uint8_t *buf,
5606                              int buf_size, int _align);
5607 
5608 /**
5609  * Reset the internal decoder state / flush internal buffers. Should be called
5610  * e.g. when seeking or when switching to a different stream.
5611  *
5612  * @note when refcounted frames are not used (i.e. avctx->refcounted_frames is 0),
5613  * this invalidates the frames previously returned from the decoder. When
5614  * refcounted frames are used, the decoder just releases any references it might
5615  * keep internally, but the caller's reference remains valid.
5616  */
5617 void avcodec_flush_buffers(AVCodecContext *avctx);
5618 
5619 /**
5620  * Return codec bits per sample.
5621  *
5622  * @param[in] codec_id the codec
5623  * @return Number of bits per sample or zero if unknown for the given codec.
5624  */
5625 int av_get_bits_per_sample(AVCodecID codec_id);
5626 
5627 /**
5628  * Return the PCM codec associated with a sample format.
5629  * @param be  endianness, 0 for little, 1 for big,
5630  *            -1 (or anything else) for native
5631  * @return  AV_CODEC_ID_PCM_* or AV_CODEC_ID_NONE
5632  */
5633 AVCodecID av_get_pcm_codec(AVSampleFormat fmt, int be);
5634 
5635 /**
5636  * Return codec bits per sample.
5637  * Only return non-zero if the bits per sample is exactly correct, not an
5638  * approximation.
5639  *
5640  * @param[in] codec_id the codec
5641  * @return Number of bits per sample or zero if unknown for the given codec.
5642  */
5643 int av_get_exact_bits_per_sample(AVCodecID codec_id);
5644 
5645 /**
5646  * Return audio frame duration.
5647  *
5648  * @param avctx        codec context
5649  * @param frame_bytes  size of the frame, or 0 if unknown
5650  * @return             frame duration, in samples, if known. 0 if not able to
5651  *                     determine.
5652  */
5653 int av_get_audio_frame_duration(AVCodecContext *avctx, int frame_bytes);
5654 
5655 /**
5656  * This function is the same as av_get_audio_frame_duration(), except it works
5657  * with AVCodecParameters instead of an AVCodecContext.
5658  */
5659 int av_get_audio_frame_duration2(AVCodecParameters *par, int frame_bytes);
5660 
5661 //static if(FF_API_OLD_BSF){ // Bug in D??
5662     struct AVBitStreamFilterContext {
5663         void *priv_data;
5664         AVBitStreamFilter *filter;
5665         AVCodecParserContext *parser;
5666         AVBitStreamFilterContext *next;
5667         /**
5668          * Internal default arguments, used if NULL is passed to av_bitstream_filter_filter().
5669          * Not for access by library users.
5670          */
5671         char *args;
5672     }
5673 //}
5674 
5675 struct AVBSFInternal;
5676 
5677 /**
5678  * The bitstream filter state.
5679  *
5680  * This struct must be allocated with av_bsf_alloc() and freed with
5681  * av_bsf_free().
5682  *
5683  * The fields in the struct will only be changed (by the caller or by the
5684  * filter) as described in their documentation, and are to be considered
5685  * immutable otherwise.
5686  */
5687 struct AVBSFContext {
5688     /**
5689      * A class for logging and AVOptions
5690      */
5691     const AVClass *av_class;
5692 
5693     /**
5694      * The bitstream filter this context is an instance of.
5695      */
5696     const AVBitStreamFilter *filter;
5697 
5698     /**
5699      * Opaque libavcodec internal data. Must not be touched by the caller in any
5700      * way.
5701      */
5702     AVBSFInternal *internal;
5703 
5704     /**
5705      * Opaque filter-specific private data. If filter->priv_class is non-NULL,
5706      * this is an AVOptions-enabled struct.
5707      */
5708     void *priv_data;
5709 
5710     /**
5711      * Parameters of the input stream. Set by the caller before av_bsf_init().
5712      */
5713     AVCodecParameters *par_in;
5714 
5715     /**
5716      * Parameters of the output stream. Set by the filter in av_bsf_init().
5717      */
5718     AVCodecParameters *par_out;
5719 
5720     /**
5721      * The timebase used for the timestamps of the input packets. Set by the
5722      * caller before av_bsf_init().
5723      */
5724     AVRational time_base_in;
5725 
5726     /**
5727      * The timebase used for the timestamps of the output packets. Set by the
5728      * filter in av_bsf_init().
5729      */
5730     AVRational time_base_out;
5731 }
5732 
5733 struct AVBitStreamFilter {
5734     const char *name;
5735 
5736     /**
5737      * A list of codec ids supported by the filter, terminated by
5738      * AV_CODEC_ID_NONE.
5739      * May be NULL, in that case the bitstream filter works with any codec id.
5740      */
5741     const AVCodecID *codec_ids;
5742 
5743     /**
5744      * A class for the private data, used to declare bitstream filter private
5745      * AVOptions. This field is NULL for bitstream filters that do not declare
5746      * any options.
5747      *
5748      * If this field is non-NULL, the first member of the filter private data
5749      * must be a pointer to AVClass, which will be set by libavcodec generic
5750      * code to this class.
5751      */
5752     const AVClass *priv_class;
5753 
5754     /*****************************************************************
5755      * No fields below this line are part of the public API. They
5756      * may not be used outside of libavcodec and can be changed and
5757      * removed at will.
5758      * New public fields should be added right above.
5759      *****************************************************************
5760      */
5761 
5762     int priv_data_size;
5763     int function(AVBSFContext *ctx) init;
5764     int function(AVBSFContext *ctx, AVPacket *pkt) filter;
5765     void function(AVBSFContext *ctx) close;
5766 }
5767 
5768 static if(FF_API_OLD_BSF){
5769     /**
5770      * Register a bitstream filter.
5771      *
5772      * The filter will be accessible to the application code through
5773      * av_bitstream_filter_next() or can be directly initialized with
5774      * av_bitstream_filter_init().
5775      *
5776      * @see avcodec_register_all()
5777      */
5778     deprecated
5779         void av_register_bitstream_filter(AVBitStreamFilter *bsf);
5780 
5781     /**
5782      * Create and initialize a bitstream filter context given a bitstream
5783      * filter name.
5784      *
5785      * The returned context must be freed with av_bitstream_filter_close().
5786      *
5787      * @param name    the name of the bitstream filter
5788      * @return a bitstream filter context if a matching filter was found
5789      * and successfully initialized, NULL otherwise
5790      */
5791     deprecated
5792         AVBitStreamFilterContext *av_bitstream_filter_init(const char *name);
5793 
5794     /**
5795      * Filter bitstream.
5796      *
5797      * This function filters the buffer buf with size buf_size, and places the
5798      * filtered buffer in the buffer pointed to by poutbuf.
5799      *
5800      * The output buffer must be freed by the caller.
5801      *
5802      * @param bsfc            bitstream filter context created by av_bitstream_filter_init()
5803      * @param avctx           AVCodecContext accessed by the filter, may be NULL.
5804      *                        If specified, this must point to the encoder context of the
5805      *                        output stream the packet is sent to.
5806      * @param args            arguments which specify the filter configuration, may be NULL
5807      * @param poutbuf         pointer which is updated to point to the filtered buffer
5808      * @param poutbuf_size    pointer which is updated to the filtered buffer size in bytes
5809      * @param buf             buffer containing the data to filter
5810      * @param buf_size        size in bytes of buf
5811      * @param keyframe        set to non-zero if the buffer to filter corresponds to a key-frame packet data
5812      * @return >= 0 in case of success, or a negative error code in case of failure
5813      *
5814      * If the return value is positive, an output buffer is allocated and
5815      * is available in *poutbuf, and is distinct from the input buffer.
5816      *
5817      * If the return value is 0, the output buffer is not allocated and
5818      * should be considered identical to the input buffer, or in case
5819      * *poutbuf was set it points to the input buffer (not necessarily to
5820      * its starting address). A special case is if *poutbuf was set to NULL and
5821      * *poutbuf_size was set to 0, which indicates the packet should be dropped.
5822      */
5823     deprecated
5824         int av_bitstream_filter_filter(AVBitStreamFilterContext *bsfc,
5825                                    AVCodecContext *avctx, const char *args,
5826                                    uint8_t **poutbuf, int *poutbuf_size,
5827                                    const uint8_t *buf, int buf_size, int keyframe);
5828 
5829     /**
5830      * Release bitstream filter context.
5831      *
5832      * @param bsf the bitstream filter context created with
5833      * av_bitstream_filter_init(), can be NULL
5834      */
5835     deprecated
5836         void av_bitstream_filter_close(AVBitStreamFilterContext *bsf);
5837 
5838     /**
5839      * If f is NULL, return the first registered bitstream filter,
5840      * if f is non-NULL, return the next registered bitstream filter
5841      * after f, or NULL if f is the last one.
5842      *
5843      * This function can be used to iterate over all registered bitstream
5844      * filters.
5845      */
5846     deprecated
5847         AVBitStreamFilter *av_bitstream_filter_next(const AVBitStreamFilter *f);
5848 }
5849 
5850 /**
5851  * @return a bitstream filter with the specified name or NULL if no such
5852  *         bitstream filter exists.
5853  */
5854 AVBitStreamFilter *av_bsf_get_by_name(const char *name);
5855 
5856 /**
5857  * Iterate over all registered bitstream filters.
5858  *
5859  * @param opaque a pointer where libavcodec will store the iteration state. Must
5860  *               point to NULL to start the iteration.
5861  *
5862  * @return the next registered bitstream filter or NULL when the iteration is
5863  *         finished
5864  */
5865 AVBitStreamFilter *av_bsf_next(void **opaque);
5866 
5867 /**
5868  * Allocate a context for a given bitstream filter. The caller must fill in the
5869  * context parameters as described in the documentation and then call
5870  * av_bsf_init() before sending any data to the filter.
5871  *
5872  * @param filter the filter for which to allocate an instance.
5873  * @param ctx a pointer into which the pointer to the newly-allocated context
5874  *            will be written. It must be freed with av_bsf_free() after the
5875  *            filtering is done.
5876  *
5877  * @return 0 on success, a negative AVERROR code on failure
5878  */
5879 int av_bsf_alloc(const AVBitStreamFilter *filter, AVBSFContext **ctx);
5880 
5881 /**
5882  * Prepare the filter for use, after all the parameters and options have been
5883  * set.
5884  */
5885 int av_bsf_init(AVBSFContext *ctx);
5886 
5887 /**
5888  * Submit a packet for filtering.
5889  *
5890  * After sending each packet, the filter must be completely drained by calling
5891  * av_bsf_receive_packet() repeatedly until it returns AVERROR(EAGAIN) or
5892  * AVERROR_EOF.
5893  *
5894  * @param pkt the packet to filter. The bitstream filter will take ownership of
5895  * the packet and reset the contents of pkt. pkt is not touched if an error occurs.
5896  * This parameter may be NULL, which signals the end of the stream (i.e. no more
5897  * packets will be sent). That will cause the filter to output any packets it
5898  * may have buffered internally.
5899  *
5900  * @return 0 on success, a negative AVERROR on error.
5901  */
5902 int av_bsf_send_packet(AVBSFContext *ctx, AVPacket *pkt);
5903 
5904 /**
5905  * Retrieve a filtered packet.
5906  *
5907  * @param[out] pkt this struct will be filled with the contents of the filtered
5908  *                 packet. It is owned by the caller and must be freed using
5909  *                 av_packet_unref() when it is no longer needed.
5910  *                 This parameter should be "clean" (i.e. freshly allocated
5911  *                 with av_packet_alloc() or unreffed with av_packet_unref())
5912  *                 when this function is called. If this function returns
5913  *                 successfully, the contents of pkt will be completely
5914  *                 overwritten by the returned data. On failure, pkt is not
5915  *                 touched.
5916  *
5917  * @return 0 on success. AVERROR(EAGAIN) if more packets need to be sent to the
5918  * filter (using av_bsf_send_packet()) to get more output. AVERROR_EOF if there
5919  * will be no further output from the filter. Another negative AVERROR value if
5920  * an error occurs.
5921  *
5922  * @note one input packet may result in several output packets, so after sending
5923  * a packet with av_bsf_send_packet(), this function needs to be called
5924  * repeatedly until it stops returning 0. It is also possible for a filter to
5925  * output fewer packets than were sent to it, so this function may return
5926  * AVERROR(EAGAIN) immediately after a successful av_bsf_send_packet() call.
5927  */
5928 int av_bsf_receive_packet(AVBSFContext *ctx, AVPacket *pkt);
5929 
5930 /**
5931  * Free a bitstream filter context and everything associated with it; write NULL
5932  * into the supplied pointer.
5933  */
5934 void av_bsf_free(AVBSFContext **ctx);
5935 
5936 /**
5937  * Get the AVClass for AVBSFContext. It can be used in combination with
5938  * AV_OPT_SEARCH_FAKE_OBJ for examining options.
5939  *
5940  * @see av_opt_find().
5941  */
5942 AVClass *av_bsf_get_class();
5943 
5944 /* memory */
5945 
5946 /**
5947  * Same behaviour av_fast_malloc but the buffer has additional
5948  * FF_INPUT_BUFFER_PADDING_SIZE at the end which will always be 0.
5949  *
5950  * In addition the whole buffer will initially and after resizes
5951  * be 0-initialized so that no uninitialized data will ever appear.
5952  */
5953 void av_fast_padded_malloc(void *ptr, uint *size, size_t min_size);
5954 
5955 /**
5956  * Same behaviour av_fast_padded_malloc except that buffer will always
5957  * be 0-initialized after call.
5958  */
5959 void av_fast_padded_mallocz(void *ptr, uint *size, size_t min_size);
5960 
5961 /**
5962  * Encode extradata length to a buffer. Used by xiph codecs.
5963  *
5964  * @param s buffer to write to; must be at least (v/255+1) bytes long
5965  * @param v size of extradata in bytes
5966  * @return number of bytes written to the buffer.
5967  */
5968 uint av_xiphlacing(ubyte *s, uint v);
5969 
5970 static if (FF_API_MISSING_SAMPLE) {
5971 /**
5972  * Log a generic warning message about a missing feature. This function is
5973  * intended to be used internally by FFmpeg (libavcodec, libavformat, etc.)
5974  * only, and would normally not be used by applications.
5975  * @param[in] avc a pointer to an arbitrary struct of which the first field is
5976  * a pointer to an AVClass struct
5977  * @param[in] feature string containing the name of the missing feature
5978  * @param[in] want_sample indicates if samples are wanted which exhibit this feature.
5979  * If want_sample is non-zero, additional verbage will be added to the log
5980  * message which tells the user how to report samples to the development
5981  * mailing list.
5982  * @deprecated Use avpriv_report_missing_feature() instead.
5983  */
5984 deprecated
5985 void av_log_missing_feature(void *avc, const char *feature, int want_sample);
5986 
5987 /**
5988  * Log a generic warning message asking for a sample. This function is
5989  * intended to be used internally by FFmpeg (libavcodec, libavformat, etc.)
5990  * only, and would normally not be used by applications.
5991  * @param[in] avc a pointer to an arbitrary struct of which the first field is
5992  * a pointer to an AVClass struct
5993  * @param[in] msg string containing an optional message, or NULL if no message
5994  * @deprecated Use avpriv_request_sample() instead.
5995  */
5996 deprecated
5997 void av_log_ask_for_sample(void* avc, const(char)* msg, ...);
5998 }
5999 
6000 /**
6001  * Register the hardware accelerator hwaccel.
6002  */
6003 void av_register_hwaccel(AVHWAccel *hwaccel);
6004 
6005 /**
6006  * If hwaccel is NULL, returns the first registered hardware accelerator,
6007  * if hwaccel is non-NULL, returns the next registered hardware accelerator
6008  * after hwaccel, or NULL if hwaccel is the last one.
6009  */
6010 AVHWAccel *av_hwaccel_next(AVHWAccel *hwaccel);
6011 
6012 
6013 /**
6014  * Lock operation used by lockmgr
6015  */
6016 enum AVLockOp {
6017   AV_LOCK_CREATE,  ///< Create a mutex
6018   AV_LOCK_OBTAIN,  ///< Lock the mutex
6019   AV_LOCK_RELEASE, ///< Unlock the mutex
6020   AV_LOCK_DESTROY, ///< Free mutex resources
6021 }
6022 
6023 /**
6024  * Register a user provided lock manager supporting the operations
6025  * specified by AVLockOp. The "mutex" argument to the function points
6026  * to a (void *) where the lockmgr should store/get a pointer to a user
6027  * allocated mutex. It is NULL upon AV_LOCK_CREATE and equal to the
6028  * value left by the last call for all other ops. If the lock manager is
6029  * unable to perform the op then it should leave the mutex in the same
6030  * state as when it was called and return a non-zero value. However,
6031  * when called with AV_LOCK_DESTROY the mutex will always be assumed to
6032  * have been successfully destroyed. If av_lockmgr_register succeeds
6033  * it will return a non-negative value, if it fails it will return a
6034  * negative value and destroy all mutex and unregister all callbacks.
6035  * av_lockmgr_register is not thread-safe, it must be called from a
6036  * single thread before any calls which make use of locking are used.
6037  *
6038  * @param cb User defined callback. av_lockmgr_register invokes calls
6039  *           to this callback and the previously registered callback.
6040  *           The callback will be used to create more than one mutex
6041  *           each of which must be backed by its own underlying locking
6042  *           mechanism (i.e. do not use a single static object to
6043  *           implement your lock manager). If cb is set to NULL the
6044  *           lockmgr will be unregistered.
6045  */
6046 int av_lockmgr_register(int function(void **mutex, AVLockOp op) cb);
6047 
6048 /**
6049  * Get the type of the given codec.
6050  */
6051 AVMediaType avcodec_get_type(AVCodecID codec_id);
6052 
6053 /**
6054  * Get the name of a codec.
6055  * @return  a static string identifying the codec; never NULL
6056  */
6057 char *avcodec_get_name(AVCodecID id);
6058 
6059 /**
6060  * @return a positive value if s is open (i.e. avcodec_open2() was called on it
6061  * with no corresponding avcodec_close()), 0 otherwise.
6062  */
6063 int avcodec_is_open(AVCodecContext *s);
6064 
6065 /**
6066  * @return a non-zero number if codec is an encoder, zero otherwise
6067  */
6068 int av_codec_is_encoder(const AVCodec *codec);
6069 
6070 /**
6071  * @return a non-zero number if codec is a decoder, zero otherwise
6072  */
6073 int av_codec_is_decoder(const AVCodec *codec);
6074 
6075 /**
6076  * @return descriptor for given codec ID or NULL if no descriptor exists.
6077  */
6078 AVCodecDescriptor *avcodec_descriptor_get(AVCodecID id);
6079 
6080 /**
6081  * Iterate over all codec descriptors known to libavcodec.
6082  *
6083  * @param prev previous descriptor. NULL to get the first descriptor.
6084  *
6085  * @return next descriptor or NULL after the last descriptor
6086  */
6087 AVCodecDescriptor *avcodec_descriptor_next(const AVCodecDescriptor *prev);
6088 
6089 /**
6090  * @return codec descriptor with the given name or NULL if no such descriptor
6091  *         exists.
6092  */
6093 AVCodecDescriptor *avcodec_descriptor_get_by_name(const char *name);
6094 
6095 /**
6096  * Allocate a CPB properties structure and initialize its fields to default
6097  * values.
6098  *
6099  * @param size if non-NULL, the size of the allocated struct will be written
6100  *             here. This is useful for embedding it in side data.
6101  *
6102  * @return the newly allocated struct or NULL on failure
6103  */
6104 AVCPBProperties *av_cpb_properties_alloc(size_t *size);
6105 
6106 /**
6107  * @}
6108  */
6109 
6110 
6111 ///Constant definitions that were embedded inside structs
6112 
6113 enum FF_ASPECT_EXTENDED = 15;
6114 enum FF_RC_STRATEGY_XVID = 1;
6115 enum FF_PRED_LEFT = 0;
6116 enum FF_PRED_PLANE = 1;
6117 enum FF_PRED_MEDIAN = 2;
6118 
6119 enum FF_CMP_SAD =  0;
6120 enum FF_CMP_SSE =  1;
6121 enum FF_CMP_SATD = 2;
6122 enum FF_CMP_DCT =  3;
6123 enum FF_CMP_PSNR = 4;
6124 enum FF_CMP_BIT =  5;
6125 enum FF_CMP_RD =   6;
6126 enum FF_CMP_ZERO = 7;
6127 enum FF_CMP_VSAD = 8;
6128 enum FF_CMP_VSSE = 9;
6129 enum FF_CMP_NSSE = 10;
6130 enum FF_CMP_W53 =  11;
6131 enum FF_CMP_W97 =  12;
6132 enum FF_CMP_DCTMAX = 13;
6133 enum FF_CMP_DCT264 = 14;
6134 enum FF_CMP_CHROMA = 256;
6135 
6136 enum FF_DTG_AFD_SAME =       8;
6137 enum FF_DTG_AFD_4_3 =        9;
6138 enum FF_DTG_AFD_16_9 =       10;
6139 enum FF_DTG_AFD_14_9 =       11;
6140 enum FF_DTG_AFD_4_3_SP_14_9 = 13;
6141 enum FF_DTG_AFD_16_9_SP_14_9 = 14;
6142 enum FF_DTG_AFD_SP_4_3 =     15;
6143 
6144 enum FF_DEFAULT_QUANT_BIAS = 999_999;
6145 
6146 enum SLICE_FLAG_CODED_ORDER =  0x0001; ///< draw_horiz_band() is called in coded order instead of display
6147 enum SLICE_FLAG_ALLOW_FIELD =  0x0002; ///< allow draw_horiz_band() with field slices (MPEG2 field pics)
6148 enum SLICE_FLAG_ALLOW_PLANE =  0x0004; ///< allow draw_horiz_band() with 1 component at a time (SVQ1)
6149 
6150 enum FF_MB_DECISION_SIMPLE = 0;        ///< uses mb_cmp
6151 enum FF_MB_DECISION_BITS = 1;        ///< chooses the one which needs the fewest bits
6152 enum FF_MB_DECISION_RD =   2;       ///< rate distortion
6153 
6154 enum FF_CODER_TYPE_VLC =   0;
6155 enum FF_CODER_TYPE_AC =      1;
6156 enum FF_CODER_TYPE_RAW =     2;
6157 enum FF_CODER_TYPE_RLE =     3;
6158 static if (FF_API_UNUSED_MEMBERS) {
6159     enum FF_CODER_TYPE_DEFLATE = 4;
6160 }
6161 
6162 //AVCodecContext.workaround_bugs
6163 enum FF_BUG_AUTODETECT =     1;  ///< autodetection
6164 static if (FF_API_OLD_MSMPEG4) {
6165     enum FF_BUG_OLD_MSMPEG4 =    2;
6166 }
6167 enum FF_BUG_XVID_ILACE  =    4;
6168 enum FF_BUG_UMP4 =           8;
6169 enum FF_BUG_NO_PADDING =     16;
6170 enum FF_BUG_AMV  =           32;
6171 enum FF_BUG_AC_VLC =         0;  ///< Will be removed, libavcodec can now handle these non-compliant files by default.
6172 enum FF_BUG_QPEL_CHROMA =    64;
6173 enum FF_BUG_STD_QPEL =       128;
6174 enum FF_BUG_QPEL_CHROMA2 =   256;
6175 enum FF_BUG_DIRECT_BLOCKSIZE = 512;
6176 enum FF_BUG_EDGE =           1024;
6177 enum FF_BUG_HPEL_CHROMA =    2048;
6178 enum FF_BUG_DC_CLIP   =      4096;
6179 enum FF_BUG_MS    =          8192; ///< Work around various bugs in Microsoft's broken decoders.
6180 enum FF_BUG_TRUNCATED =     16_384;
6181 
6182 // AVCodecContext.strict_std_compliance;
6183 enum FF_COMPLIANCE_VERY_STRICT = 2; ///< Strictly conform to an older more strict version of the spec or reference software.
6184 enum FF_COMPLIANCE_STRICT =      1; ///< Strictly conform to all the things in the spec no matter what consequences.
6185 enum FF_COMPLIANCE_NORMAL =      0;
6186 enum FF_COMPLIANCE_UNOFFICIAL = -1; ///< Allow unofficial extensions
6187 enum FF_COMPLIANCE_EXPERIMENTAL = -2; ///< Allow nonstandardized experimental things.
6188 
6189 // AVCodecContext.error_concealment
6190 enum FF_EC_GUESS_MVS =  1;
6191 enum FF_EC_DEBLOCK =    2;
6192 enum FF_EC_FAVOR_INTER = 256;
6193 
6194 // AVCodecContext.ddebug
6195 enum FF_DEBUG_PICT_INFO = 1;
6196 enum FF_DEBUG_RC =        2;
6197 enum FF_DEBUG_BITSTREAM = 4;
6198 enum FF_DEBUG_MB_TYPE =   8;
6199 enum FF_DEBUG_QP =        16;
6200 enum FF_DEBUG_MV =        32;
6201 enum FF_DEBUG_DCT_COEFF = 0x00000040;
6202 enum FF_DEBUG_SKIP =      0x00000080;
6203 enum FF_DEBUG_STARTCODE = 0x00000100;
6204 static if (FF_API_UNUSED_MEMBERS) {
6205     enum FF_DEBUG_PTS =       0x00000200;
6206 }
6207 enum FF_DEBUG_ER =        0x00000400;
6208 enum FF_DEBUG_MMCO =      0x00000800;
6209 enum FF_DEBUG_BUGS =      0x00001000;
6210 static if (FF_API_DEBUG_MV) {
6211     enum FF_DEBUG_VIS_QP =    0x00002000;
6212     enum FF_DEBUG_VIS_MB_TYPE =  0x00004000;
6213 }
6214 enum FF_DEBUG_BUFFERS =   0x00008000;
6215 enum FF_DEBUG_THREADS =   0x00010000;
6216 enum FF_DEBUG_GREEN_MD=   0x00800000;
6217 enum FF_DEBUG_NOMC    =   0x01000000;
6218 // AVCodecContext.debug_mv
6219 enum FF_DEBUG_VIS_MV_P_FOR =0x00000001; //visualize forward predicted MVs of P frames
6220 enum FF_DEBUG_VIS_MV_B_FOR =0x00000002; //visualize forward predicted MVs of B frames
6221 enum FF_DEBUG_VIS_MV_B_BACK =0x00000004; //visualize backward predicted MVs of B frames
6222 // AVCodecContext.properties
6223 enum FF_CODEC_PROPERTY_LOSSLESS         = 0x00000001;
6224 enum FF_CODEC_PROPERTY_CLOSED_CAPTIONS  = 0x00000002;
6225 // AVCodecContext.sub_text_format
6226 enum FF_SUB_TEXT_FMT_ASS                = 0;
6227 static if (FF_API_ASS_TIMING){
6228 enum FF_SUB_TEXT_FMT_ASS_WITH_TIMINGS   = 1;
6229 }
6230 
6231 // AVCodecContext.err_recognition
6232 enum AV_EF_CRCCHECK  = 1<<0;
6233 enum AV_EF_BITSTREAM = 1<<1;
6234 enum AV_EF_BUFFER    = 1<<2;
6235 enum AV_EF_EXPLODE   = 1<<3;
6236 enum AV_EF_IGNORE_ERR = (1<<15);        ///< ignore errors and continue
6237 enum AV_EF_CAREFUL   = 1<<16;
6238 enum AV_EF_COMPLIANT = 1<<17;
6239 enum AV_EF_AGGRESSIVE = 1<<18;
6240 
6241 //AVCodecContext.dct_algo
6242 enum FF_DCT_AUTO =   0;
6243 enum FF_DCT_FASTINT =1;
6244 static if (FF_API_UNUSED_MEMBERS) {
6245     enum FF_DCT_INT =    2;
6246 }
6247 enum FF_DCT_MMX =    3;
6248 enum FF_DCT_ALTIVEC =5;
6249 enum FF_DCT_FAAN =   6;
6250 
6251 //AVCodecContext.idct_algo
6252 enum FF_IDCT_AUTO =         0;
6253 enum FF_IDCT_INT =          1;
6254 enum FF_IDCT_SIMPLE =       2;
6255 enum FF_IDCT_SIMPLEMMX =    3;
6256 enum FF_IDCT_LIBMPEG2MMX =  4;
6257 enum FF_IDCT_ARM =          7;
6258 enum FF_IDCT_ALTIVEC =      8;
6259 static if (FF_API_ARCH_SH4) {
6260     enum FF_IDCT_SH4       =   9;
6261 }
6262 enum FF_IDCT_SIMPLEARM =    10;
6263 static if (FF_API_UNUSED_MEMBERS) {
6264     enum FF_IDCT_IPP     =      13;
6265 }
6266 enum FF_IDCT_XVID = 14;
6267 static if (FF_API_IDCT_XVIDMMX) {
6268     enum FF_IDCT_XVIDMMX =      14;
6269 }
6270 enum FF_IDCT_SIMPLEARMV5TE =16;
6271 enum FF_IDCT_SIMPLEARMV6 =  17;
6272 static if (FF_API_ARCH_SPARC) {
6273     enum FF_IDCT_SIMPLEVIS =    18;
6274 }
6275 enum FF_IDCT_FAAN   =       20;
6276 enum FF_IDCT_SIMPLENEON =   22;
6277 static if (FF_API_ARCH_ALPHA) {
6278     enum FF_IDCT_SIMPLEALPHA =  23;
6279 }
6280 enum FF_IDCT_SIMPLEAUTO =  128;
6281 
6282 //AVCodecContext.thread_type
6283 enum FF_THREAD_FRAME =  1; ///< Decode more than one frame at once
6284 enum FF_THREAD_SLICE =  2; ///< Decode more than one part of a single frame at once
6285 
6286 //AVCodecContext.profile;
6287 enum FF_PROFILE_UNKNOWN = -99;
6288 enum FF_PROFILE_RESERVED = -100;
6289 
6290 enum FF_PROFILE_AAC_MAIN =0;
6291 enum FF_PROFILE_AAC_LOW = 1;
6292 enum FF_PROFILE_AAC_SSR = 2;
6293 enum FF_PROFILE_AAC_LTP = 3;
6294 
6295 enum FF_PROFILE_AAC_HE  =4;
6296 enum FF_PROFILE_AAC_HE_V2=28;
6297 enum FF_PROFILE_AAC_LD  =22;
6298 enum FF_PROFILE_AAC_ELD =38;
6299 enum FF_PROFILE_MPEG2_AAC_LOW = 128;
6300 enum FF_PROFILE_MPEG2_AAC_HE = 131;
6301 
6302 enum FF_PROFILE_DTS         = 20;
6303 enum FF_PROFILE_DTS_ES      = 30;
6304 enum FF_PROFILE_DTS_96_24   = 40;
6305 enum FF_PROFILE_DTS_HD_HRA  = 50;
6306 enum FF_PROFILE_DTS_HD_MA   = 60;
6307 enum FF_PROFILE_DTS_EXPRESS = 70;
6308 
6309 enum FF_PROFILE_MPEG2_422 =  0;
6310 enum FF_PROFILE_MPEG2_HIGH = 1;
6311 enum FF_PROFILE_MPEG2_SS =   2;
6312 enum FF_PROFILE_MPEG2_SNR_SCALABLE =3;
6313 enum FF_PROFILE_MPEG2_MAIN = 4;
6314 enum FF_PROFILE_MPEG2_SIMPLE=5;
6315 
6316 enum FF_PROFILE_H264_CONSTRAINED= (1<<9);  // 8+1; constraint_set1_flag
6317 enum FF_PROFILE_H264_INTRA   =    (1<<11); // 8+3; constraint_set3_flag
6318 
6319 enum FF_PROFILE_H264_BASELINE =           66;
6320 enum FF_PROFILE_H264_CONSTRAINED_BASELINE=(66|FF_PROFILE_H264_CONSTRAINED);
6321 enum FF_PROFILE_H264_MAIN  =              77;
6322 enum FF_PROFILE_H264_EXTENDED =           88;
6323 enum FF_PROFILE_H264_HIGH    =            100;
6324 enum FF_PROFILE_H264_HIGH_10  =           110;
6325 enum FF_PROFILE_H264_HIGH_10_INTRA =      (110|FF_PROFILE_H264_INTRA);
6326 enum FF_PROFILE_H264_HIGH_422   =         122;
6327 enum FF_PROFILE_H264_HIGH_422_INTRA =     (122|FF_PROFILE_H264_INTRA);
6328 enum FF_PROFILE_H264_HIGH_444 =           144;
6329 enum FF_PROFILE_H264_HIGH_444_PREDICTIVE =244;
6330 enum FF_PROFILE_H264_HIGH_444_INTRA  =    (244|FF_PROFILE_H264_INTRA);
6331 enum FF_PROFILE_H264_CAVLC_444 =          44;
6332 
6333 enum FF_PROFILE_VC1_SIMPLE = 0;
6334 enum FF_PROFILE_VC1_MAIN =   1;
6335 enum FF_PROFILE_VC1_COMPLEX =2;
6336 enum FF_PROFILE_VC1_ADVANCED=3;
6337 
6338 enum FF_PROFILE_MPEG4_SIMPLE =                   0;
6339 enum FF_PROFILE_MPEG4_SIMPLE_SCALABLE =          1;
6340 enum FF_PROFILE_MPEG4_CORE =                     2;
6341 enum FF_PROFILE_MPEG4_MAIN =                     3;
6342 enum FF_PROFILE_MPEG4_N_BIT =                    4;
6343 enum FF_PROFILE_MPEG4_SCALABLE_TEXTURE =         5;
6344 enum FF_PROFILE_MPEG4_SIMPLE_FACE_ANIMATION =    6;
6345 enum FF_PROFILE_MPEG4_BASIC_ANIMATED_TEXTURE =   7;
6346 enum FF_PROFILE_MPEG4_HYBRID =                   8;
6347 enum FF_PROFILE_MPEG4_ADVANCED_REAL_TIME =       9;
6348 enum FF_PROFILE_MPEG4_CORE_SCALABLE =           10;
6349 enum FF_PROFILE_MPEG4_ADVANCED_CODING =         11;
6350 enum FF_PROFILE_MPEG4_ADVANCED_CORE =           12;
6351 enum FF_PROFILE_MPEG4_ADVANCED_SCALABLE_TEXTURE=13;
6352 enum FF_PROFILE_MPEG4_SIMPLE_STUDIO =           14;
6353 enum FF_PROFILE_MPEG4_ADVANCED_SIMPLE =         15;
6354 enum FF_PROFILE_JPEG2000_CSTREAM_RESTRICTION_0 = 0;
6355 enum FF_PROFILE_JPEG2000_CSTREAM_RESTRICTION_1 = 1;
6356 enum FF_PROFILE_JPEG2000_CSTREAM_NO_RESTRICTION =2;
6357 enum FF_PROFILE_JPEG2000_DCINEMA_2K           =  3;
6358 enum FF_PROFILE_JPEG2000_DCINEMA_4K           =  4;
6359 
6360 enum FF_PROFILE_VP9_0                         =  0;
6361 enum FF_PROFILE_VP9_1                         =  1;
6362 enum FF_PROFILE_VP9_2                         =  2;
6363 enum FF_PROFILE_VP9_3                         =  3;
6364 
6365 enum FF_PROFILE_HEVC_MAIN                     =  1;
6366 enum FF_PROFILE_HEVC_MAIN_10                  =  2;
6367 enum FF_PROFILE_HEVC_MAIN_STILL_PICTURE       =  3;
6368 enum FF_PROFILE_HEVC_REXT                     =  4;
6369 
6370 enum FF_COMPRESSION_DEFAULT =                   -1;
6371 
6372 //AVCodecContext.level;
6373 enum FF_LEVEL_UNKNOWN = -99;
6374 
6375 enum FF_SUB_CHARENC_MODE_DO_NOTHING =-1;  ///< do nothing (demuxer outputs a stream supposed to be already in UTF-8, or the codec is bitmap for instance)
6376 enum FF_SUB_CHARENC_MODE_AUTOMATIC  = 0;  ///< libavcodec will select the mode itself
6377 enum FF_SUB_CHARENC_MODE_PRE_DECODER= 1;  ///< the AVPacket data needs to be recoded to UTF-8 before being fed to the decoder, requires iconv
6378 
6379 static if (!FF_API_DEBUG_MV) {
6380     enum FF_DEBUG_VIS_MV_P_FOR =0x00000001;//visualize forward predicted MVs of P frames
6381     enum FF_DEBUG_VIS_MV_B_FOR =0x00000002;//visualize forward predicted MVs of B frames
6382     enum FF_DEBUG_VIS_MV_B_BACK=0x00000004;//visualize backward predicted MVs of B frames
6383 }
6384 
6385 enum AV_PARSER_PTS_NB = 4;
6386 enum PARSER_FLAG_COMPLETE_FRAMES   =       0x0001;
6387 enum PARSER_FLAG_ONCE              =        0x0002;
6388 /// Set if the parser has a valid file offset
6389 enum PARSER_FLAG_FETCHED_OFFSET     =       0x0004;
6390 enum PARSER_FLAG_USE_CODEC_TS       =       0x1000;
6391 
6392 alias AV_CODEC_ID_H265 = AVCodecID.AV_CODEC_ID_HEVC;
6393 alias AV_CODEC_ID_IFF_BYTERUN1 = AVCodecID.AV_CODEC_ID_IFF_ILBM;