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