tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

avcodec.h (176961B)


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