FFmpeg的一些结构与函数

来源:互联网 发布:c语言超市商品管理系统 编辑:程序博客网 时间:2024/06/06 00:13

libavcodec 下的avcodec.h


AVCodecID:

enum AVCodecID {    AV_CODEC_ID_NONE,    /* video codecs */    AV_CODEC_ID_MPEG1VIDEO,    AV_CODEC_ID_MPEG2VIDEO, ///< preferred ID for MPEG-1/2 video decoding#if FF_API_XVMC    AV_CODEC_ID_MPEG2VIDEO_XVMC,#endif /* FF_API_XVMC */    AV_CODEC_ID_H261,    AV_CODEC_ID_H263,    AV_CODEC_ID_RV10,    AV_CODEC_ID_RV20,    AV_CODEC_ID_MJPEG,    AV_CODEC_ID_MJPEGB,    AV_CODEC_ID_LJPEG,    AV_CODEC_ID_SP5X,    AV_CODEC_ID_JPEGLS,    AV_CODEC_ID_MPEG4,    AV_CODEC_ID_RAWVIDEO,    AV_CODEC_ID_MSMPEG4V1,    AV_CODEC_ID_MSMPEG4V2,    AV_CODEC_ID_MSMPEG4V3,    AV_CODEC_ID_WMV1,    AV_CODEC_ID_WMV2,    AV_CODEC_ID_H263P,    AV_CODEC_ID_H263I,    AV_CODEC_ID_FLV1,    AV_CODEC_ID_SVQ1,    AV_CODEC_ID_SVQ3,    AV_CODEC_ID_DVVIDEO,    AV_CODEC_ID_HUFFYUV,    AV_CODEC_ID_CYUV,    AV_CODEC_ID_H264,    AV_CODEC_ID_INDEO3,    AV_CODEC_ID_VP3,    AV_CODEC_ID_THEORA,    AV_CODEC_ID_ASV1,    AV_CODEC_ID_ASV2,    AV_CODEC_ID_FFV1,    AV_CODEC_ID_4XM,    AV_CODEC_ID_VCR1,    AV_CODEC_ID_CLJR,    AV_CODEC_ID_MDEC,    AV_CODEC_ID_ROQ,    AV_CODEC_ID_INTERPLAY_VIDEO,    AV_CODEC_ID_XAN_WC3,    AV_CODEC_ID_XAN_WC4,    AV_CODEC_ID_RPZA,    AV_CODEC_ID_CINEPAK,    AV_CODEC_ID_WS_VQA,    AV_CODEC_ID_MSRLE,    AV_CODEC_ID_MSVIDEO1,    AV_CODEC_ID_IDCIN,    AV_CODEC_ID_8BPS,    AV_CODEC_ID_SMC,    AV_CODEC_ID_FLIC,    AV_CODEC_ID_TRUEMOTION1,    AV_CODEC_ID_VMDVIDEO,    AV_CODEC_ID_MSZH,    AV_CODEC_ID_ZLIB,    AV_CODEC_ID_QTRLE,    AV_CODEC_ID_TSCC,    AV_CODEC_ID_ULTI,    AV_CODEC_ID_QDRAW,    AV_CODEC_ID_VIXL,    AV_CODEC_ID_QPEG,    AV_CODEC_ID_PNG,    AV_CODEC_ID_PPM,    AV_CODEC_ID_PBM,    AV_CODEC_ID_PGM,    AV_CODEC_ID_PGMYUV,    AV_CODEC_ID_PAM,    AV_CODEC_ID_FFVHUFF,    AV_CODEC_ID_RV30,    AV_CODEC_ID_RV40,    AV_CODEC_ID_VC1,    AV_CODEC_ID_WMV3,    AV_CODEC_ID_LOCO,    AV_CODEC_ID_WNV1,    AV_CODEC_ID_AASC,    AV_CODEC_ID_INDEO2,    AV_CODEC_ID_FRAPS,    AV_CODEC_ID_TRUEMOTION2,    AV_CODEC_ID_BMP,    AV_CODEC_ID_CSCD,    AV_CODEC_ID_MMVIDEO,    AV_CODEC_ID_ZMBV,    AV_CODEC_ID_AVS,    AV_CODEC_ID_SMACKVIDEO,    AV_CODEC_ID_NUV,    AV_CODEC_ID_KMVC,    AV_CODEC_ID_FLASHSV,    AV_CODEC_ID_CAVS,    AV_CODEC_ID_JPEG2000,    AV_CODEC_ID_VMNC,    AV_CODEC_ID_VP5,    AV_CODEC_ID_VP6,    AV_CODEC_ID_VP6F,    AV_CODEC_ID_TARGA,    AV_CODEC_ID_DSICINVIDEO,    AV_CODEC_ID_TIERTEXSEQVIDEO,    AV_CODEC_ID_TIFF,    AV_CODEC_ID_GIF,    AV_CODEC_ID_DXA,    AV_CODEC_ID_DNXHD,    AV_CODEC_ID_THP,    AV_CODEC_ID_SGI,    AV_CODEC_ID_C93,    AV_CODEC_ID_BETHSOFTVID,    AV_CODEC_ID_PTX,    AV_CODEC_ID_TXD,    AV_CODEC_ID_VP6A,    AV_CODEC_ID_AMV,    AV_CODEC_ID_VB,    AV_CODEC_ID_PCX,    AV_CODEC_ID_SUNRAST,    AV_CODEC_ID_INDEO4,    AV_CODEC_ID_INDEO5,    AV_CODEC_ID_MIMIC,    AV_CODEC_ID_RL2,    AV_CODEC_ID_ESCAPE124,    AV_CODEC_ID_DIRAC,    AV_CODEC_ID_BFI,    AV_CODEC_ID_CMV,    AV_CODEC_ID_MOTIONPIXELS,    AV_CODEC_ID_TGV,    AV_CODEC_ID_TGQ,    AV_CODEC_ID_TQI,    AV_CODEC_ID_AURA,    AV_CODEC_ID_AURA2,    AV_CODEC_ID_V210X,    AV_CODEC_ID_TMV,    AV_CODEC_ID_V210,    AV_CODEC_ID_DPX,    AV_CODEC_ID_MAD,    AV_CODEC_ID_FRWU,    AV_CODEC_ID_FLASHSV2,    AV_CODEC_ID_CDGRAPHICS,    AV_CODEC_ID_R210,    AV_CODEC_ID_ANM,    AV_CODEC_ID_BINKVIDEO,    AV_CODEC_ID_IFF_ILBM,#define AV_CODEC_ID_IFF_BYTERUN1 AV_CODEC_ID_IFF_ILBM    AV_CODEC_ID_KGV1,    AV_CODEC_ID_YOP,    AV_CODEC_ID_VP8,    AV_CODEC_ID_PICTOR,    AV_CODEC_ID_ANSI,    AV_CODEC_ID_A64_MULTI,    AV_CODEC_ID_A64_MULTI5,    AV_CODEC_ID_R10K,    AV_CODEC_ID_MXPEG,    AV_CODEC_ID_LAGARITH,    AV_CODEC_ID_PRORES,    AV_CODEC_ID_JV,    AV_CODEC_ID_DFA,    AV_CODEC_ID_WMV3IMAGE,    AV_CODEC_ID_VC1IMAGE,    AV_CODEC_ID_UTVIDEO,    AV_CODEC_ID_BMV_VIDEO,    AV_CODEC_ID_VBLE,    AV_CODEC_ID_DXTORY,    AV_CODEC_ID_V410,    AV_CODEC_ID_XWD,    AV_CODEC_ID_CDXL,    AV_CODEC_ID_XBM,    AV_CODEC_ID_ZEROCODEC,    AV_CODEC_ID_MSS1,    AV_CODEC_ID_MSA1,    AV_CODEC_ID_TSCC2,    AV_CODEC_ID_MTS2,    AV_CODEC_ID_CLLC,    AV_CODEC_ID_MSS2,    AV_CODEC_ID_VP9,    AV_CODEC_ID_AIC,    AV_CODEC_ID_ESCAPE130,    AV_CODEC_ID_G2M,    AV_CODEC_ID_WEBP,    AV_CODEC_ID_HNM4_VIDEO,    AV_CODEC_ID_HEVC,#define AV_CODEC_ID_H265 AV_CODEC_ID_HEVC    AV_CODEC_ID_FIC,    AV_CODEC_ID_ALIAS_PIX,    AV_CODEC_ID_BRENDER_PIX,    AV_CODEC_ID_PAF_VIDEO,    AV_CODEC_ID_EXR,    AV_CODEC_ID_VP7,    AV_CODEC_ID_SANM,    AV_CODEC_ID_SGIRLE,    AV_CODEC_ID_MVC1,    AV_CODEC_ID_MVC2,    AV_CODEC_ID_HQX,    AV_CODEC_ID_TDSC,    AV_CODEC_ID_HQ_HQA,    AV_CODEC_ID_HAP,    AV_CODEC_ID_DDS,    AV_CODEC_ID_DXV,    AV_CODEC_ID_SCREENPRESSO,    AV_CODEC_ID_RSCC,    AV_CODEC_ID_Y41P = 0x8000,    AV_CODEC_ID_AVRP,    AV_CODEC_ID_012V,    AV_CODEC_ID_AVUI,    AV_CODEC_ID_AYUV,    AV_CODEC_ID_TARGA_Y216,    AV_CODEC_ID_V308,    AV_CODEC_ID_V408,    AV_CODEC_ID_YUV4,    AV_CODEC_ID_AVRN,    AV_CODEC_ID_CPIA,    AV_CODEC_ID_XFACE,    AV_CODEC_ID_SNOW,    AV_CODEC_ID_SMVJPEG,    AV_CODEC_ID_APNG,    AV_CODEC_ID_DAALA,    AV_CODEC_ID_CFHD,    AV_CODEC_ID_TRUEMOTION2RT,    AV_CODEC_ID_M101,    AV_CODEC_ID_MAGICYUV,    AV_CODEC_ID_SHEERVIDEO,    AV_CODEC_ID_YLC,    /* various PCM "codecs" */    AV_CODEC_ID_FIRST_AUDIO = 0x10000,     ///< A dummy id pointing at the start of audio codecs    AV_CODEC_ID_PCM_S16LE = 0x10000,    AV_CODEC_ID_PCM_S16BE,    AV_CODEC_ID_PCM_U16LE,    AV_CODEC_ID_PCM_U16BE,    AV_CODEC_ID_PCM_S8,    AV_CODEC_ID_PCM_U8,    AV_CODEC_ID_PCM_MULAW,    AV_CODEC_ID_PCM_ALAW,    AV_CODEC_ID_PCM_S32LE,    AV_CODEC_ID_PCM_S32BE,    AV_CODEC_ID_PCM_U32LE,    AV_CODEC_ID_PCM_U32BE,    AV_CODEC_ID_PCM_S24LE,    AV_CODEC_ID_PCM_S24BE,    AV_CODEC_ID_PCM_U24LE,    AV_CODEC_ID_PCM_U24BE,    AV_CODEC_ID_PCM_S24DAUD,    AV_CODEC_ID_PCM_ZORK,    AV_CODEC_ID_PCM_S16LE_PLANAR,    AV_CODEC_ID_PCM_DVD,    AV_CODEC_ID_PCM_F32BE,    AV_CODEC_ID_PCM_F32LE,    AV_CODEC_ID_PCM_F64BE,    AV_CODEC_ID_PCM_F64LE,    AV_CODEC_ID_PCM_BLURAY,    AV_CODEC_ID_PCM_LXF,    AV_CODEC_ID_S302M,    AV_CODEC_ID_PCM_S8_PLANAR,    AV_CODEC_ID_PCM_S24LE_PLANAR,    AV_CODEC_ID_PCM_S32LE_PLANAR,    AV_CODEC_ID_PCM_S16BE_PLANAR,    AV_CODEC_ID_PCM_S64LE = 0x10800,    AV_CODEC_ID_PCM_S64BE,    /* various ADPCM codecs */    AV_CODEC_ID_ADPCM_IMA_QT = 0x11000,    AV_CODEC_ID_ADPCM_IMA_WAV,    AV_CODEC_ID_ADPCM_IMA_DK3,    AV_CODEC_ID_ADPCM_IMA_DK4,    AV_CODEC_ID_ADPCM_IMA_WS,    AV_CODEC_ID_ADPCM_IMA_SMJPEG,    AV_CODEC_ID_ADPCM_MS,    AV_CODEC_ID_ADPCM_4XM,    AV_CODEC_ID_ADPCM_XA,    AV_CODEC_ID_ADPCM_ADX,    AV_CODEC_ID_ADPCM_EA,    AV_CODEC_ID_ADPCM_G726,    AV_CODEC_ID_ADPCM_CT,    AV_CODEC_ID_ADPCM_SWF,    AV_CODEC_ID_ADPCM_YAMAHA,    AV_CODEC_ID_ADPCM_SBPRO_4,    AV_CODEC_ID_ADPCM_SBPRO_3,    AV_CODEC_ID_ADPCM_SBPRO_2,    AV_CODEC_ID_ADPCM_THP,    AV_CODEC_ID_ADPCM_IMA_AMV,    AV_CODEC_ID_ADPCM_EA_R1,    AV_CODEC_ID_ADPCM_EA_R3,    AV_CODEC_ID_ADPCM_EA_R2,    AV_CODEC_ID_ADPCM_IMA_EA_SEAD,    AV_CODEC_ID_ADPCM_IMA_EA_EACS,    AV_CODEC_ID_ADPCM_EA_XAS,    AV_CODEC_ID_ADPCM_EA_MAXIS_XA,    AV_CODEC_ID_ADPCM_IMA_ISS,    AV_CODEC_ID_ADPCM_G722,    AV_CODEC_ID_ADPCM_IMA_APC,    AV_CODEC_ID_ADPCM_VIMA,#if FF_API_VIMA_DECODER    AV_CODEC_ID_VIMA = AV_CODEC_ID_ADPCM_VIMA,#endif    AV_CODEC_ID_ADPCM_AFC = 0x11800,    AV_CODEC_ID_ADPCM_IMA_OKI,    AV_CODEC_ID_ADPCM_DTK,    AV_CODEC_ID_ADPCM_IMA_RAD,    AV_CODEC_ID_ADPCM_G726LE,    AV_CODEC_ID_ADPCM_THP_LE,    AV_CODEC_ID_ADPCM_PSX,    AV_CODEC_ID_ADPCM_AICA,    AV_CODEC_ID_ADPCM_IMA_DAT4,    AV_CODEC_ID_ADPCM_MTAF,    /* AMR */    AV_CODEC_ID_AMR_NB = 0x12000,    AV_CODEC_ID_AMR_WB,    /* RealAudio codecs*/    AV_CODEC_ID_RA_144 = 0x13000,    AV_CODEC_ID_RA_288,    /* various DPCM codecs */    AV_CODEC_ID_ROQ_DPCM = 0x14000,    AV_CODEC_ID_INTERPLAY_DPCM,    AV_CODEC_ID_XAN_DPCM,    AV_CODEC_ID_SOL_DPCM,    AV_CODEC_ID_SDX2_DPCM = 0x14800,    /* audio codecs */    AV_CODEC_ID_MP2 = 0x15000,    AV_CODEC_ID_MP3, ///< preferred ID for decoding MPEG audio layer 1, 2 or 3    AV_CODEC_ID_AAC,    AV_CODEC_ID_AC3,    AV_CODEC_ID_DTS,    AV_CODEC_ID_VORBIS,    AV_CODEC_ID_DVAUDIO,    AV_CODEC_ID_WMAV1,    AV_CODEC_ID_WMAV2,    AV_CODEC_ID_MACE3,    AV_CODEC_ID_MACE6,    AV_CODEC_ID_VMDAUDIO,    AV_CODEC_ID_FLAC,    AV_CODEC_ID_MP3ADU,    AV_CODEC_ID_MP3ON4,    AV_CODEC_ID_SHORTEN,    AV_CODEC_ID_ALAC,    AV_CODEC_ID_WESTWOOD_SND1,    AV_CODEC_ID_GSM, ///< as in Berlin toast format    AV_CODEC_ID_QDM2,    AV_CODEC_ID_COOK,    AV_CODEC_ID_TRUESPEECH,    AV_CODEC_ID_TTA,    AV_CODEC_ID_SMACKAUDIO,    AV_CODEC_ID_QCELP,    AV_CODEC_ID_WAVPACK,    AV_CODEC_ID_DSICINAUDIO,    AV_CODEC_ID_IMC,    AV_CODEC_ID_MUSEPACK7,    AV_CODEC_ID_MLP,    AV_CODEC_ID_GSM_MS, /* as found in WAV */    AV_CODEC_ID_ATRAC3,#if FF_API_VOXWARE    AV_CODEC_ID_VOXWARE,#endif    AV_CODEC_ID_APE,    AV_CODEC_ID_NELLYMOSER,    AV_CODEC_ID_MUSEPACK8,    AV_CODEC_ID_SPEEX,    AV_CODEC_ID_WMAVOICE,    AV_CODEC_ID_WMAPRO,    AV_CODEC_ID_WMALOSSLESS,    AV_CODEC_ID_ATRAC3P,    AV_CODEC_ID_EAC3,    AV_CODEC_ID_SIPR,    AV_CODEC_ID_MP1,    AV_CODEC_ID_TWINVQ,    AV_CODEC_ID_TRUEHD,    AV_CODEC_ID_MP4ALS,    AV_CODEC_ID_ATRAC1,    AV_CODEC_ID_BINKAUDIO_RDFT,    AV_CODEC_ID_BINKAUDIO_DCT,    AV_CODEC_ID_AAC_LATM,    AV_CODEC_ID_QDMC,    AV_CODEC_ID_CELT,    AV_CODEC_ID_G723_1,    AV_CODEC_ID_G729,    AV_CODEC_ID_8SVX_EXP,    AV_CODEC_ID_8SVX_FIB,    AV_CODEC_ID_BMV_AUDIO,    AV_CODEC_ID_RALF,    AV_CODEC_ID_IAC,    AV_CODEC_ID_ILBC,    AV_CODEC_ID_OPUS,    AV_CODEC_ID_COMFORT_NOISE,    AV_CODEC_ID_TAK,    AV_CODEC_ID_METASOUND,    AV_CODEC_ID_PAF_AUDIO,    AV_CODEC_ID_ON2AVC,    AV_CODEC_ID_DSS_SP,    AV_CODEC_ID_FFWAVESYNTH = 0x15800,    AV_CODEC_ID_SONIC,    AV_CODEC_ID_SONIC_LS,    AV_CODEC_ID_EVRC,    AV_CODEC_ID_SMV,    AV_CODEC_ID_DSD_LSBF,    AV_CODEC_ID_DSD_MSBF,    AV_CODEC_ID_DSD_LSBF_PLANAR,    AV_CODEC_ID_DSD_MSBF_PLANAR,    AV_CODEC_ID_4GV,    AV_CODEC_ID_INTERPLAY_ACM,    AV_CODEC_ID_XMA1,    AV_CODEC_ID_XMA2,    AV_CODEC_ID_DST,    /* subtitle codecs */    AV_CODEC_ID_FIRST_SUBTITLE = 0x17000,          ///< A dummy ID pointing at the start of subtitle codecs.    AV_CODEC_ID_DVD_SUBTITLE = 0x17000,    AV_CODEC_ID_DVB_SUBTITLE,    AV_CODEC_ID_TEXT,  ///< raw UTF-8 text    AV_CODEC_ID_XSUB,    AV_CODEC_ID_SSA,    AV_CODEC_ID_MOV_TEXT,    AV_CODEC_ID_HDMV_PGS_SUBTITLE,    AV_CODEC_ID_DVB_TELETEXT,    AV_CODEC_ID_SRT,    AV_CODEC_ID_MICRODVD   = 0x17800,    AV_CODEC_ID_EIA_608,    AV_CODEC_ID_JACOSUB,    AV_CODEC_ID_SAMI,    AV_CODEC_ID_REALTEXT,    AV_CODEC_ID_STL,    AV_CODEC_ID_SUBVIEWER1,    AV_CODEC_ID_SUBVIEWER,    AV_CODEC_ID_SUBRIP,    AV_CODEC_ID_WEBVTT,    AV_CODEC_ID_MPL2,    AV_CODEC_ID_VPLAYER,    AV_CODEC_ID_PJS,    AV_CODEC_ID_ASS,    AV_CODEC_ID_HDMV_TEXT_SUBTITLE,    /* other specific kind of codecs (generally used for attachments) */    AV_CODEC_ID_FIRST_UNKNOWN = 0x18000,           ///< A dummy ID pointing at the start of various fake codecs.    AV_CODEC_ID_TTF = 0x18000,    AV_CODEC_ID_SCTE_35, ///< Contain timestamp estimated through PCR of program stream.    AV_CODEC_ID_BINTEXT    = 0x18800,    AV_CODEC_ID_XBIN,    AV_CODEC_ID_IDF,    AV_CODEC_ID_OTF,    AV_CODEC_ID_SMPTE_KLV,    AV_CODEC_ID_DVD_NAV,    AV_CODEC_ID_TIMED_ID3,    AV_CODEC_ID_BIN_DATA,    AV_CODEC_ID_PROBE = 0x19000, ///< codec_id is not known (like AV_CODEC_ID_NONE) but lavf should attempt to identify it    AV_CODEC_ID_MPEG2TS = 0x20000, /**< _FAKE_ codec to indicate a raw MPEG-2 TS                                * stream (only used by libavformat) */    AV_CODEC_ID_MPEG4SYSTEMS = 0x20001, /**< _FAKE_ codec to indicate a MPEG-4 Systems                                * stream (only used by libavformat) */    AV_CODEC_ID_FFMETADATA = 0x21000,   ///< Dummy codec for streams containing only metadata information.    AV_CODEC_ID_WRAPPED_AVFRAME = 0x21001, ///< Passthrough codec, AVFrames wrapped in AVPacket};

AVPacket :

/** * This structure stores compressed data. It is typically exported by demuxers * and then passed as input to decoders, or received as output from encoders and * then passed to muxers. * * For video, it should typically contain one compressed frame. For audio it may * contain several compressed frames. Encoders are allowed to output empty * packets, with no compressed data, containing only side data * (e.g. to update some stream parameters at the end of encoding). * * AVPacket is one of the few structs in FFmpeg, whose size is a part of public * ABI. Thus it may be allocated on stack and no new fields can be added to it * without libavcodec and libavformat major bump. * * The semantics of data ownership depends on the buf field. * If it is set, the packet data is dynamically allocated and is * valid indefinitely until a call to av_packet_unref() reduces the * reference count to 0. * * If the buf field is not set av_packet_ref() would make a copy instead * of increasing the reference count. * * The side data is always allocated with av_malloc(), copied by * av_packet_ref() and freed by av_packet_unref(). * * @see av_packet_ref * @see av_packet_unref */typedef struct AVPacket {    /**     * A reference to the reference-counted buffer where the packet data is     * stored.     * May be NULL, then the packet data is not reference-counted.     */    AVBufferRef *buf;    /**     * Presentation timestamp in AVStream->time_base units; the time at which     * the decompressed packet will be presented to the user.     * Can be AV_NOPTS_VALUE if it is not stored in the file.     * pts MUST be larger or equal to dts as presentation cannot happen before     * decompression, unless one wants to view hex dumps. Some formats misuse     * the terms dts and pts/cts to mean something different. Such timestamps     * must be converted to true pts/dts before they are stored in AVPacket.     */    int64_t pts;    /**     * Decompression timestamp in AVStream->time_base units; the time at which     * the packet is decompressed.     * Can be AV_NOPTS_VALUE if it is not stored in the file.     */    int64_t dts;    uint8_t *data;    int   size;    int   stream_index;    /**     * A combination of AV_PKT_FLAG values     */    int   flags;    /**     * Additional packet data that can be provided by the container.     * Packet can contain several types of side information.     */    AVPacketSideData *side_data;    int side_data_elems;    /**     * Duration of this packet in AVStream->time_base units, 0 if unknown.     * Equals next_pts - this_pts in presentation order.     */    int64_t duration;    int64_t pos;                            ///< byte position in stream, -1 if unknown#if FF_API_CONVERGENCE_DURATION    /**     * @deprecated Same as the duration field, but as int64_t. This was required     * for Matroska subtitles, whose duration values could overflow when the     * duration field was still an int.     */    attribute_deprecated    int64_t convergence_duration;#endif} AVPacket;



AVCodecContext:

/** * main external API structure. * New fields can be added to the end with minor version bumps. * Removal, reordering and changes to existing fields require a major * version bump. * Please use AVOptions (av_opt* / av_set/get*()) to access these fields from user * applications. * The name string for AVOptions options matches the associated command line * parameter name and can be found in libavcodec/options_table.h * The AVOption/command line parameter names differ in some cases from the C * structure field names for historic reasons or brevity. * sizeof(AVCodecContext) must not be used outside libav*. */typedef struct AVCodecContext {    /**     * information on struct for av_log     * - set by avcodec_alloc_context3     */    const AVClass *av_class;    int log_level_offset;    enum AVMediaType codec_type; /* see AVMEDIA_TYPE_xxx */    const struct AVCodec  *codec;#if FF_API_CODEC_NAME    /**     * @deprecated this field is not used for anything in libavcodec     */    attribute_deprecated    char             codec_name[32];#endif    enum AVCodecID     codec_id; /* see AV_CODEC_ID_xxx */    /**     * fourcc (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A').     * This is used to work around some encoder bugs.     * A demuxer should set this to what is stored in the field used to identify the codec.     * If there are multiple such fields in a container then the demuxer should choose the one     * which maximizes the information about the used codec.     * If the codec tag field in a container is larger than 32 bits then the demuxer should     * remap the longer ID to 32 bits with a table or other structure. Alternatively a new     * extra_codec_tag + size could be added but for this a clear advantage must be demonstrated     * first.     * - encoding: Set by user, if not then the default based on codec_id will be used.     * - decoding: Set by user, will be converted to uppercase by libavcodec during init.     */    unsigned int codec_tag;#if FF_API_STREAM_CODEC_TAG    /**     * @deprecated this field is unused     */    attribute_deprecated    unsigned int stream_codec_tag;#endif    void *priv_data;    /**     * Private context used for internal data.     *     * Unlike priv_data, this is not codec-specific. It is used in general     * libavcodec functions.     */    struct AVCodecInternal *internal;    /**     * Private data of the user, can be used to carry app specific stuff.     * - encoding: Set by user.     * - decoding: Set by user.     */    void *opaque;    /**     * the average bitrate     * - encoding: Set by user; unused for constant quantizer encoding.     * - decoding: Set by user, may be overwritten by libavcodec     *             if this info is available in the stream     */    int64_t bit_rate;    /**     * number of bits the bitstream is allowed to diverge from the reference.     *           the reference can be CBR (for CBR pass1) or VBR (for pass2)     * - encoding: Set by user; unused for constant quantizer encoding.     * - decoding: unused     */    int bit_rate_tolerance;    /**     * Global quality for codecs which cannot change it per frame.     * This should be proportional to MPEG-1/2/4 qscale.     * - encoding: Set by user.     * - decoding: unused     */    int global_quality;    /**     * - encoding: Set by user.     * - decoding: unused     */    int compression_level;#define FF_COMPRESSION_DEFAULT -1    /**     * AV_CODEC_FLAG_*.     * - encoding: Set by user.     * - decoding: Set by user.     */    int flags;    /**     * AV_CODEC_FLAG2_*     * - encoding: Set by user.     * - decoding: Set by user.     */    int flags2;    /**     * some codecs need / can use extradata like Huffman tables.     * MJPEG: Huffman tables     * rv10: additional flags     * MPEG-4: global headers (they can be in the bitstream or here)     * The allocated memory should be AV_INPUT_BUFFER_PADDING_SIZE bytes larger     * than extradata_size to avoid problems if it is read with the bitstream reader.     * The bytewise contents of extradata must not depend on the architecture or CPU endianness.     * - encoding: Set/allocated/freed by libavcodec.     * - decoding: Set/allocated/freed by user.     */    uint8_t *extradata;    int extradata_size;    /**     * This is the fundamental unit of time (in seconds) in terms     * of which frame timestamps are represented. For fixed-fps content,     * timebase should be 1/framerate and timestamp increments should be     * identically 1.     * This often, but not always is the inverse of the frame rate or field rate     * for video. 1/time_base is not the average frame rate if the frame rate is not     * constant.     *     * Like containers, elementary streams also can store timestamps, 1/time_base     * is the unit in which these timestamps are specified.     * As example of such codec time base see ISO/IEC 14496-2:2001(E)     * vop_time_increment_resolution and fixed_vop_rate     * (fixed_vop_rate == 0 implies that it is different from the framerate)     *     * - encoding: MUST be set by user.     * - decoding: the use of this field for decoding is deprecated.     *             Use framerate instead.     */    AVRational time_base;    /**     * For some codecs, the time base is closer to the field rate than the frame rate.     * Most notably, H.264 and MPEG-2 specify time_base as half of frame duration     * if no telecine is used ...     *     * Set to time_base ticks per frame. Default 1, e.g., H.264/MPEG-2 set it to 2.     */    int ticks_per_frame;    /**     * Codec delay.     *     * Encoding: Number of frames delay there will be from the encoder input to     *           the decoder output. (we assume the decoder matches the spec)     * Decoding: Number of frames delay in addition to what a standard decoder     *           as specified in the spec would produce.     *     * Video:     *   Number of frames the decoded output will be delayed relative to the     *   encoded input.     *     * Audio:     *   For encoding, this field is unused (see initial_padding).     *     *   For decoding, this is the number of samples the decoder needs to     *   output before the decoder's output is valid. When seeking, you should     *   start decoding this many samples prior to your desired seek point.     *     * - encoding: Set by libavcodec.     * - decoding: Set by libavcodec.     */    int delay;    /* video only */    /**     * picture width / height.     *     * @note Those fields may not match the values of the last     * AVFrame output by avcodec_decode_video2 due frame     * reordering.     *     * - encoding: MUST be set by user.     * - decoding: May be set by the user before opening the decoder if known e.g.     *             from the container. Some decoders will require the dimensions     *             to be set by the caller. During decoding, the decoder may     *             overwrite those values as required while parsing the data.     */    int width, height;    /**     * Bitstream width / height, may be different from width/height e.g. when     * the decoded frame is cropped before being output or lowres is enabled.     *     * @note Those field may not match the value of the last     * AVFrame output by avcodec_receive_frame() due frame     * reordering.     *     * - encoding: unused     * - decoding: May be set by the user before opening the decoder if known     *             e.g. from the container. During decoding, the decoder may     *             overwrite those values as required while parsing the data.     */    int coded_width, coded_height;#if FF_API_ASPECT_EXTENDED#define FF_ASPECT_EXTENDED 15#endif    /**     * the number of pictures in a group of pictures, or 0 for intra_only     * - encoding: Set by user.     * - decoding: unused     */    int gop_size;    /**     * Pixel format, see AV_PIX_FMT_xxx.     * May be set by the demuxer if known from headers.     * May be overridden by the decoder if it knows better.     *     * @note This field may not match the value of the last     * AVFrame output by avcodec_receive_frame() due frame     * reordering.     *     * - encoding: Set by user.     * - decoding: Set by user if known, overridden by libavcodec while     *             parsing the data.     */    enum AVPixelFormat pix_fmt;#if FF_API_MOTION_EST    /**     * This option does nothing     * @deprecated use codec private options instead     */    attribute_deprecated int me_method;#endif    /**     * If non NULL, 'draw_horiz_band' is called by the libavcodec     * decoder to draw a horizontal band. It improves cache usage. Not     * all codecs can do that. You must check the codec capabilities     * beforehand.     * When multithreading is used, it may be called from multiple threads     * at the same time; threads might draw different parts of the same AVFrame,     * or multiple AVFrames, and there is no guarantee that slices will be drawn     * in order.     * The function is also used by hardware acceleration APIs.     * It is called at least once during frame decoding to pass     * the data needed for hardware render.     * In that mode instead of pixel data, AVFrame points to     * a structure specific to the acceleration API. The application     * reads the structure and can change some fields to indicate progress     * or mark state.     * - encoding: unused     * - decoding: Set by user.     * @param height the height of the slice     * @param y the y position of the slice     * @param type 1->top field, 2->bottom field, 3->frame     * @param offset offset into the AVFrame.data from which the slice should be read     */    void (*draw_horiz_band)(struct AVCodecContext *s,                            const AVFrame *src, int offset[AV_NUM_DATA_POINTERS],                            int y, int type, int height);    /**     * callback to negotiate the pixelFormat     * @param fmt is the list of formats which are supported by the codec,     * it is terminated by -1 as 0 is a valid format, the formats are ordered by quality.     * The first is always the native one.     * @note The callback may be called again immediately if initialization for     * the selected (hardware-accelerated) pixel format failed.     * @warning Behavior is undefined if the callback returns a value not     * in the fmt list of formats.     * @return the chosen format     * - encoding: unused     * - decoding: Set by user, if not set the native format will be chosen.     */    enum AVPixelFormat (*get_format)(struct AVCodecContext *s, const enum AVPixelFormat * fmt);    /**     * maximum number of B-frames between non-B-frames     * Note: The output will be delayed by max_b_frames+1 relative to the input.     * - encoding: Set by user.     * - decoding: unused     */    int max_b_frames;    /**     * qscale factor between IP and B-frames     * If > 0 then the last P-frame quantizer will be used (q= lastp_q*factor+offset).     * If < 0 then normal ratecontrol will be done (q= -normal_q*factor+offset).     * - encoding: Set by user.     * - decoding: unused     */    float b_quant_factor;#if FF_API_RC_STRATEGY    /** @deprecated use codec private option instead */    attribute_deprecated int rc_strategy;#define FF_RC_STRATEGY_XVID 1#endif#if FF_API_PRIVATE_OPT    /** @deprecated use encoder private options instead */    attribute_deprecated    int b_frame_strategy;#endif    /**     * qscale offset between IP and B-frames     * - encoding: Set by user.     * - decoding: unused     */    float b_quant_offset;    /**     * Size of the frame reordering buffer in the decoder.     * For MPEG-2 it is 1 IPB or 0 low delay IP.     * - encoding: Set by libavcodec.     * - decoding: Set by libavcodec.     */    int has_b_frames;#if FF_API_PRIVATE_OPT    /** @deprecated use encoder private options instead */    attribute_deprecated    int mpeg_quant;#endif    /**     * qscale factor between P- and I-frames     * If > 0 then the last P-frame quantizer will be used (q = lastp_q * factor + offset).     * If < 0 then normal ratecontrol will be done (q= -normal_q*factor+offset).     * - encoding: Set by user.     * - decoding: unused     */    float i_quant_factor;    /**     * qscale offset between P and I-frames     * - encoding: Set by user.     * - decoding: unused     */    float i_quant_offset;    /**     * luminance masking (0-> disabled)     * - encoding: Set by user.     * - decoding: unused     */    float lumi_masking;    /**     * temporary complexity masking (0-> disabled)     * - encoding: Set by user.     * - decoding: unused     */    float temporal_cplx_masking;    /**     * spatial complexity masking (0-> disabled)     * - encoding: Set by user.     * - decoding: unused     */    float spatial_cplx_masking;    /**     * p block masking (0-> disabled)     * - encoding: Set by user.     * - decoding: unused     */    float p_masking;    /**     * darkness masking (0-> disabled)     * - encoding: Set by user.     * - decoding: unused     */    float dark_masking;    /**     * slice count     * - encoding: Set by libavcodec.     * - decoding: Set by user (or 0).     */    int slice_count;#if FF_API_PRIVATE_OPT    /** @deprecated use encoder private options instead */    attribute_deprecated     int prediction_method;#define FF_PRED_LEFT   0#define FF_PRED_PLANE  1#define FF_PRED_MEDIAN 2#endif    /**     * slice offsets in the frame in bytes     * - encoding: Set/allocated by libavcodec.     * - decoding: Set/allocated by user (or NULL).     */    int *slice_offset;    /**     * sample aspect ratio (0 if unknown)     * That is the width of a pixel divided by the height of the pixel.     * Numerator and denominator must be relatively prime and smaller than 256 for some video standards.     * - encoding: Set by user.     * - decoding: Set by libavcodec.     */    AVRational sample_aspect_ratio;    /**     * motion estimation comparison function     * - encoding: Set by user.     * - decoding: unused     */    int me_cmp;    /**     * subpixel motion estimation comparison function     * - encoding: Set by user.     * - decoding: unused     */    int me_sub_cmp;    /**     * macroblock comparison function (not supported yet)     * - encoding: Set by user.     * - decoding: unused     */    int mb_cmp;    /**     * interlaced DCT comparison function     * - encoding: Set by user.     * - decoding: unused     */    int ildct_cmp;#define FF_CMP_SAD          0#define FF_CMP_SSE          1#define FF_CMP_SATD         2#define FF_CMP_DCT          3#define FF_CMP_PSNR         4#define FF_CMP_BIT          5#define FF_CMP_RD           6#define FF_CMP_ZERO         7#define FF_CMP_VSAD         8#define FF_CMP_VSSE         9#define FF_CMP_NSSE         10#define FF_CMP_W53          11#define FF_CMP_W97          12#define FF_CMP_DCTMAX       13#define FF_CMP_DCT264       14#define FF_CMP_MEDIAN_SAD   15#define FF_CMP_CHROMA       256    /**     * ME diamond size & shape     * - encoding: Set by user.     * - decoding: unused     */    int dia_size;    /**     * amount of previous MV predictors (2a+1 x 2a+1 square)     * - encoding: Set by user.     * - decoding: unused     */    int last_predictor_count;#if FF_API_PRIVATE_OPT    /** @deprecated use encoder private options instead */    attribute_deprecated    int pre_me;#endif    /**     * motion estimation prepass comparison function     * - encoding: Set by user.     * - decoding: unused     */    int me_pre_cmp;    /**     * ME prepass diamond size & shape     * - encoding: Set by user.     * - decoding: unused     */    int pre_dia_size;    /**     * subpel ME quality     * - encoding: Set by user.     * - decoding: unused     */    int me_subpel_quality;#if FF_API_AFD    /**     * DTG active format information (additional aspect ratio     * information only used in DVB MPEG-2 transport streams)     * 0 if not set.     *     * - encoding: unused     * - decoding: Set by decoder.     * @deprecated Deprecated in favor of AVSideData     */    attribute_deprecated int dtg_active_format;#define FF_DTG_AFD_SAME         8#define FF_DTG_AFD_4_3          9#define FF_DTG_AFD_16_9         10#define FF_DTG_AFD_14_9         11#define FF_DTG_AFD_4_3_SP_14_9  13#define FF_DTG_AFD_16_9_SP_14_9 14#define FF_DTG_AFD_SP_4_3       15#endif /* FF_API_AFD */    /**     * maximum motion estimation search range in subpel units     * If 0 then no limit.     *     * - encoding: Set by user.     * - decoding: unused     */    int me_range;#if FF_API_QUANT_BIAS    /**     * @deprecated use encoder private option instead     */    attribute_deprecated int intra_quant_bias;#define FF_DEFAULT_QUANT_BIAS 999999    /**     * @deprecated use encoder private option instead     */    attribute_deprecated int inter_quant_bias;#endif    /**     * slice flags     * - encoding: unused     * - decoding: Set by user.     */    int slice_flags;#define SLICE_FLAG_CODED_ORDER    0x0001 ///< draw_horiz_band() is called in coded order instead of display#define SLICE_FLAG_ALLOW_FIELD    0x0002 ///< allow draw_horiz_band() with field slices (MPEG-2 field pics)#define SLICE_FLAG_ALLOW_PLANE    0x0004 ///< allow draw_horiz_band() with 1 component at a time (SVQ1)#if FF_API_XVMC    /**     * XVideo Motion Acceleration     * - encoding: forbidden     * - decoding: set by decoder     * @deprecated XvMC doesn't need it anymore.     */    attribute_deprecated int xvmc_acceleration;#endif /* FF_API_XVMC */    /**     * macroblock decision mode     * - encoding: Set by user.     * - decoding: unused     */    int mb_decision;#define FF_MB_DECISION_SIMPLE 0        ///< uses mb_cmp#define FF_MB_DECISION_BITS   1        ///< chooses the one which needs the fewest bits#define FF_MB_DECISION_RD     2        ///< rate distortion    /**     * custom intra quantization matrix     * - encoding: Set by user, can be NULL.     * - decoding: Set by libavcodec.     */    uint16_t *intra_matrix;    /**     * custom inter quantization matrix     * - encoding: Set by user, can be NULL.     * - decoding: Set by libavcodec.     */    uint16_t *inter_matrix;#if FF_API_PRIVATE_OPT    /** @deprecated use encoder private options instead */    attribute_deprecated    int scenechange_threshold;    /** @deprecated use encoder private options instead */    attribute_deprecated    int noise_reduction;#endif#if FF_API_MPV_OPT    /**     * @deprecated this field is unused     */    attribute_deprecated    int me_threshold;    /**     * @deprecated this field is unused     */    attribute_deprecated    int mb_threshold;#endif    /**     * precision of the intra DC coefficient - 8     * - encoding: Set by user.     * - decoding: Set by libavcodec     */    int intra_dc_precision;    /**     * Number of macroblock rows at the top which are skipped.     * - encoding: unused     * - decoding: Set by user.     */    int skip_top;    /**     * Number of macroblock rows at the bottom which are skipped.     * - encoding: unused     * - decoding: Set by user.     */    int skip_bottom;#if FF_API_MPV_OPT    /**     * @deprecated use encoder private options instead     */    attribute_deprecated    float border_masking;#endif    /**     * minimum MB Lagrange multiplier     * - encoding: Set by user.     * - decoding: unused     */    int mb_lmin;    /**     * maximum MB Lagrange multiplier     * - encoding: Set by user.     * - decoding: unused     */    int mb_lmax;#if FF_API_PRIVATE_OPT    /**     * @deprecated use encoder private options instead     */    attribute_deprecated    int me_penalty_compensation;#endif    /**     * - encoding: Set by user.     * - decoding: unused     */    int bidir_refine;#if FF_API_PRIVATE_OPT    /** @deprecated use encoder private options instead */    attribute_deprecated    int brd_scale;#endif    /**     * minimum GOP size     * - encoding: Set by user.     * - decoding: unused     */    int keyint_min;    /**     * number of reference frames     * - encoding: Set by user.     * - decoding: Set by lavc.     */    int refs;#if FF_API_PRIVATE_OPT    /** @deprecated use encoder private options instead */    attribute_deprecated    int chromaoffset;#endif#if FF_API_UNUSED_MEMBERS    /**     * Multiplied by qscale for each frame and added to scene_change_score.     * - encoding: Set by user.     * - decoding: unused     */    attribute_deprecated int scenechange_factor;#endif    /**     * Note: Value depends upon the compare function used for fullpel ME.     * - encoding: Set by user.     * - decoding: unused     */    int mv0_threshold;#if FF_API_PRIVATE_OPT    /** @deprecated use encoder private options instead */    attribute_deprecated    int b_sensitivity;#endif    /**     * Chromaticity coordinates of the source primaries.     * - encoding: Set by user     * - decoding: Set by libavcodec     */    enum AVColorPrimaries color_primaries;    /**     * Color Transfer Characteristic.     * - encoding: Set by user     * - decoding: Set by libavcodec     */    enum AVColorTransferCharacteristic color_trc;    /**     * YUV colorspace type.     * - encoding: Set by user     * - decoding: Set by libavcodec     */    enum AVColorSpace colorspace;    /**     * MPEG vs JPEG YUV range.     * - encoding: Set by user     * - decoding: Set by libavcodec     */    enum AVColorRange color_range;    /**     * This defines the location of chroma samples.     * - encoding: Set by user     * - decoding: Set by libavcodec     */    enum AVChromaLocation chroma_sample_location;    /**     * Number of slices.     * Indicates number of picture subdivisions. Used for parallelized     * decoding.     * - encoding: Set by user     * - decoding: unused     */    int slices;    /** Field order     * - encoding: set by libavcodec     * - decoding: Set by user.     */    enum AVFieldOrder field_order;    /* audio only */    int sample_rate; ///< samples per second    int channels;    ///< number of audio channels    /**     * audio sample format     * - encoding: Set by user.     * - decoding: Set by libavcodec.     */    enum AVSampleFormat sample_fmt;  ///< sample format    /* The following data should not be initialized. */    /**     * Number of samples per channel in an audio frame.     *     * - encoding: set by libavcodec in avcodec_open2(). Each submitted frame     *   except the last must contain exactly frame_size samples per channel.     *   May be 0 when the codec has AV_CODEC_CAP_VARIABLE_FRAME_SIZE set, then the     *   frame size is not restricted.     * - decoding: may be set by some decoders to indicate constant frame size     */    int frame_size;    /**     * Frame counter, set by libavcodec.     *     * - decoding: total number of frames returned from the decoder so far.     * - encoding: total number of frames passed to the encoder so far.     *     *   @note the counter is not incremented if encoding/decoding resulted in     *   an error.     */    int frame_number;    /**     * number of bytes per packet if constant and known or 0     * Used by some WAV based audio codecs.     */    int block_align;    /**     * Audio cutoff bandwidth (0 means "automatic")     * - encoding: Set by user.     * - decoding: unused     */    int cutoff;    /**     * Audio channel layout.     * - encoding: set by user.     * - decoding: set by user, may be overwritten by libavcodec.     */    uint64_t channel_layout;    /**     * Request decoder to use this channel layout if it can (0 for default)     * - encoding: unused     * - decoding: Set by user.     */    uint64_t request_channel_layout;    /**     * Type of service that the audio stream conveys.     * - encoding: Set by user.     * - decoding: Set by libavcodec.     */    enum AVAudioServiceType audio_service_type;    /**     * desired sample format     * - encoding: Not used.     * - decoding: Set by user.     * Decoder will decode to this format if it can.     */    enum AVSampleFormat request_sample_fmt;    /**     * This callback is called at the beginning of each frame to get data     * buffer(s) for it. There may be one contiguous buffer for all the data or     * there may be a buffer per each data plane or anything in between. What     * this means is, you may set however many entries in buf[] you feel necessary.     * Each buffer must be reference-counted using the AVBuffer API (see description     * of buf[] below).     *     * The following fields will be set in the frame before this callback is     * called:     * - format     * - width, height (video only)     * - sample_rate, channel_layout, nb_samples (audio only)     * Their values may differ from the corresponding values in     * AVCodecContext. This callback must use the frame values, not the codec     * context values, to calculate the required buffer size.     *     * This callback must fill the following fields in the frame:     * - data[]     * - linesize[]     * - extended_data:     *   * if the data is planar audio with more than 8 channels, then this     *     callback must allocate and fill extended_data to contain all pointers     *     to all data planes. data[] must hold as many pointers as it can.     *     extended_data must be allocated with av_malloc() and will be freed in     *     av_frame_unref().     *   * otherwise extended_data must point to data     * - buf[] must contain one or more pointers to AVBufferRef structures. Each of     *   the frame's data and extended_data pointers must be contained in these. That     *   is, one AVBufferRef for each allocated chunk of memory, not necessarily one     *   AVBufferRef per data[] entry. See: av_buffer_create(), av_buffer_alloc(),     *   and av_buffer_ref().     * - extended_buf and nb_extended_buf must be allocated with av_malloc() by     *   this callback and filled with the extra buffers if there are more     *   buffers than buf[] can hold. extended_buf will be freed in     *   av_frame_unref().     *     * If AV_CODEC_CAP_DR1 is not set then get_buffer2() must call     * avcodec_default_get_buffer2() instead of providing buffers allocated by     * some other means.     *     * Each data plane must be aligned to the maximum required by the target     * CPU.     *     * @see avcodec_default_get_buffer2()     *     * Video:     *     * If AV_GET_BUFFER_FLAG_REF is set in flags then the frame may be reused     * (read and/or written to if it is writable) later by libavcodec.     *     * avcodec_align_dimensions2() should be used to find the required width and     * height, as they normally need to be rounded up to the next multiple of 16.     *     * Some decoders do not support linesizes changing between frames.     *     * If frame multithreading is used and thread_safe_callbacks is set,     * this callback may be called from a different thread, but not from more     * than one at once. Does not need to be reentrant.     *     * @see avcodec_align_dimensions2()     *     * Audio:     *     * Decoders request a buffer of a particular size by setting     * AVFrame.nb_samples prior to calling get_buffer2(). The decoder may,     * however, utilize only part of the buffer by setting AVFrame.nb_samples     * to a smaller value in the output frame.     *     * As a convenience, av_samples_get_buffer_size() and     * av_samples_fill_arrays() in libavutil may be used by custom get_buffer2()     * functions to find the required data size and to fill data pointers and     * linesize. In AVFrame.linesize, only linesize[0] may be set for audio     * since all planes must be the same size.     *     * @see av_samples_get_buffer_size(), av_samples_fill_arrays()     *     * - encoding: unused     * - decoding: Set by libavcodec, user can override.     */    int (*get_buffer2)(struct AVCodecContext *s, AVFrame *frame, int flags);    /**     * If non-zero, the decoded audio and video frames returned from     * avcodec_decode_video2() and avcodec_decode_audio4() are reference-counted     * and are valid indefinitely. The caller must free them with     * av_frame_unref() when they are not needed anymore.     * Otherwise, the decoded frames must not be freed by the caller and are     * only valid until the next decode call.     *     * This is always automatically enabled if avcodec_receive_frame() is used.     *     * - encoding: unused     * - decoding: set by the caller before avcodec_open2().     */    int refcounted_frames;    /* - encoding parameters */    float qcompress;  ///< amount of qscale change between easy & hard scenes (0.0-1.0)    float qblur;      ///< amount of qscale smoothing over time (0.0-1.0)    /**     * minimum quantizer     * - encoding: Set by user.     * - decoding: unused     */    int qmin;    /**     * maximum quantizer     * - encoding: Set by user.     * - decoding: unused     */    int qmax;    /**     * maximum quantizer difference between frames     * - encoding: Set by user.     * - decoding: unused     */    int max_qdiff;#if FF_API_MPV_OPT    /**     * @deprecated use encoder private options instead     */    attribute_deprecated    float rc_qsquish;    attribute_deprecated    float rc_qmod_amp;    attribute_deprecated    int rc_qmod_freq;#endif    /**     * decoder bitstream buffer size     * - encoding: Set by user.     * - decoding: unused     */    int rc_buffer_size;    /**     * ratecontrol override, see RcOverride     * - encoding: Allocated/set/freed by user.     * - decoding: unused     */    int rc_override_count;    RcOverride *rc_override;#if FF_API_MPV_OPT    /**     * @deprecated use encoder private options instead     */    attribute_deprecated    const char *rc_eq;#endif    /**     * maximum bitrate     * - encoding: Set by user.     * - decoding: Set by user, may be overwritten by libavcodec.     */    int64_t rc_max_rate;    /**     * minimum bitrate     * - encoding: Set by user.     * - decoding: unused     */    int64_t rc_min_rate;#if FF_API_MPV_OPT    /**     * @deprecated use encoder private options instead     */    attribute_deprecated    float rc_buffer_aggressivity;    attribute_deprecated    float rc_initial_cplx;#endif    /**     * Ratecontrol attempt to use, at maximum, <value> of what can be used without an underflow.     * - encoding: Set by user.     * - decoding: unused.     */    float rc_max_available_vbv_use;    /**     * Ratecontrol attempt to use, at least, <value> times the amount needed to prevent a vbv overflow.     * - encoding: Set by user.     * - decoding: unused.     */    float rc_min_vbv_overflow_use;    /**     * Number of bits which should be loaded into the rc buffer before decoding starts.     * - encoding: Set by user.     * - decoding: unused     */    int rc_initial_buffer_occupancy;#if FF_API_CODER_TYPE#define FF_CODER_TYPE_VLC       0#define FF_CODER_TYPE_AC        1#define FF_CODER_TYPE_RAW       2#define FF_CODER_TYPE_RLE       3#if FF_API_UNUSED_MEMBERS#define FF_CODER_TYPE_DEFLATE   4#endif /* FF_API_UNUSED_MEMBERS */    /**     * @deprecated use encoder private options instead     */    attribute_deprecated    int coder_type;#endif /* FF_API_CODER_TYPE */#if FF_API_PRIVATE_OPT    /** @deprecated use encoder private options instead */    attribute_deprecated    int context_model;#endif#if FF_API_MPV_OPT    /**     * @deprecated use encoder private options instead     */    attribute_deprecated    int lmin;    /**     * @deprecated use encoder private options instead     */    attribute_deprecated    int lmax;#endif#if FF_API_PRIVATE_OPT    /** @deprecated use encoder private options instead */    attribute_deprecated    int frame_skip_threshold;    /** @deprecated use encoder private options instead */    attribute_deprecated    int frame_skip_factor;    /** @deprecated use encoder private options instead */    attribute_deprecated    int frame_skip_exp;    /** @deprecated use encoder private options instead */    attribute_deprecated    int frame_skip_cmp;#endif /* FF_API_PRIVATE_OPT */    /**     * trellis RD quantization     * - encoding: Set by user.     * - decoding: unused     */    int trellis;#if FF_API_PRIVATE_OPT    /** @deprecated use encoder private options instead */    attribute_deprecated    int min_prediction_order;    /** @deprecated use encoder private options instead */    attribute_deprecated    int max_prediction_order;    /** @deprecated use encoder private options instead */    attribute_deprecated    int64_t timecode_frame_start;#endif#if FF_API_RTP_CALLBACK    /**     * @deprecated unused     */    /* The RTP callback: This function is called    */    /* every time the encoder has a packet to send. */    /* It depends on the encoder if the data starts */    /* with a Start Code (it should). H.263 does.   */    /* mb_nb contains the number of macroblocks     */    /* encoded in the RTP payload.                  */    attribute_deprecated    void (*rtp_callback)(struct AVCodecContext *avctx, void *data, int size, int mb_nb);#endif#if FF_API_PRIVATE_OPT    /** @deprecated use encoder private options instead */    attribute_deprecated    int rtp_payload_size;   /* The size of the RTP payload: the coder will  */                            /* do its best to deliver a chunk with size     */                            /* below rtp_payload_size, the chunk will start */                            /* with a start code on some codecs like H.263. */                            /* This doesn't take account of any particular  */                            /* headers inside the transmitted RTP payload.  */#endif#if FF_API_STAT_BITS    /* statistics, used for 2-pass encoding */    attribute_deprecated    int mv_bits;    attribute_deprecated    int header_bits;    attribute_deprecated    int i_tex_bits;    attribute_deprecated    int p_tex_bits;    attribute_deprecated    int i_count;    attribute_deprecated    int p_count;    attribute_deprecated    int skip_count;    attribute_deprecated    int misc_bits;    /** @deprecated this field is unused */    attribute_deprecated    int frame_bits;#endif    /**     * pass1 encoding statistics output buffer     * - encoding: Set by libavcodec.     * - decoding: unused     */    char *stats_out;    /**     * pass2 encoding statistics input buffer     * Concatenated stuff from stats_out of pass1 should be placed here.     * - encoding: Allocated/set/freed by user.     * - decoding: unused     */    char *stats_in;    /**     * Work around bugs in encoders which sometimes cannot be detected automatically.     * - encoding: Set by user     * - decoding: Set by user     */    int workaround_bugs;#define FF_BUG_AUTODETECT       1  ///< autodetection#if FF_API_OLD_MSMPEG4#define FF_BUG_OLD_MSMPEG4      2#endif#define FF_BUG_XVID_ILACE       4#define FF_BUG_UMP4             8#define FF_BUG_NO_PADDING       16#define FF_BUG_AMV              32#if FF_API_AC_VLC#define FF_BUG_AC_VLC           0  ///< Will be removed, libavcodec can now handle these non-compliant files by default.#endif#define FF_BUG_QPEL_CHROMA      64#define FF_BUG_STD_QPEL         128#define FF_BUG_QPEL_CHROMA2     256#define FF_BUG_DIRECT_BLOCKSIZE 512#define FF_BUG_EDGE             1024#define FF_BUG_HPEL_CHROMA      2048#define FF_BUG_DC_CLIP          4096#define FF_BUG_MS               8192 ///< Work around various bugs in Microsoft's broken decoders.#define FF_BUG_TRUNCATED       16384    /**     * strictly follow the standard (MPEG-4, ...).     * - encoding: Set by user.     * - decoding: Set by user.     * Setting this to STRICT or higher means the encoder and decoder will     * generally do stupid things, whereas setting it to unofficial or lower     * will mean the encoder might produce output that is not supported by all     * spec-compliant decoders. Decoders don't differentiate between normal,     * unofficial and experimental (that is, they always try to decode things     * when they can) unless they are explicitly asked to behave stupidly     * (=strictly conform to the specs)     */    int strict_std_compliance;#define FF_COMPLIANCE_VERY_STRICT   2 ///< Strictly conform to an older more strict version of the spec or reference software.#define FF_COMPLIANCE_STRICT        1 ///< Strictly conform to all the things in the spec no matter what consequences.#define FF_COMPLIANCE_NORMAL        0#define FF_COMPLIANCE_UNOFFICIAL   -1 ///< Allow unofficial extensions#define FF_COMPLIANCE_EXPERIMENTAL -2 ///< Allow nonstandardized experimental things.    /**     * error concealment flags     * - encoding: unused     * - decoding: Set by user.     */    int error_concealment;#define FF_EC_GUESS_MVS   1#define FF_EC_DEBLOCK     2#define FF_EC_FAVOR_INTER 256    /**     * debug     * - encoding: Set by user.     * - decoding: Set by user.     */    int debug;#define FF_DEBUG_PICT_INFO   1#define FF_DEBUG_RC          2#define FF_DEBUG_BITSTREAM   4#define FF_DEBUG_MB_TYPE     8#define FF_DEBUG_QP          16#if FF_API_DEBUG_MV/** * @deprecated this option does nothing */#define FF_DEBUG_MV          32#endif#define FF_DEBUG_DCT_COEFF   0x00000040#define FF_DEBUG_SKIP        0x00000080#define FF_DEBUG_STARTCODE   0x00000100#if FF_API_UNUSED_MEMBERS#define FF_DEBUG_PTS         0x00000200#endif /* FF_API_UNUSED_MEMBERS */#define FF_DEBUG_ER          0x00000400#define FF_DEBUG_MMCO        0x00000800#define FF_DEBUG_BUGS        0x00001000#if FF_API_DEBUG_MV#define FF_DEBUG_VIS_QP      0x00002000 ///< only access through AVOptions from outside libavcodec#define FF_DEBUG_VIS_MB_TYPE 0x00004000 ///< only access through AVOptions from outside libavcodec#endif#define FF_DEBUG_BUFFERS     0x00008000#define FF_DEBUG_THREADS     0x00010000#define FF_DEBUG_GREEN_MD    0x00800000#define FF_DEBUG_NOMC        0x01000000#if FF_API_DEBUG_MV    /**     * debug     * Code outside libavcodec should access this field using AVOptions     * - encoding: Set by user.     * - decoding: Set by user.     */    int debug_mv;#define FF_DEBUG_VIS_MV_P_FOR  0x00000001 // visualize forward predicted MVs of P-frames#define FF_DEBUG_VIS_MV_B_FOR  0x00000002 // visualize forward predicted MVs of B-frames#define FF_DEBUG_VIS_MV_B_BACK 0x00000004 // visualize backward predicted MVs of B-frames#endif    /**     * Error recognition; may misdetect some more or less valid parts as errors.     * - encoding: unused     * - decoding: Set by user.     */    int err_recognition;/** * Verify checksums embedded in the bitstream (could be of either encoded or * decoded data, depending on the codec) and print an error message on mismatch. * If AV_EF_EXPLODE is also set, a mismatching checksum will result in the * decoder returning an error. */#define AV_EF_CRCCHECK  (1<<0)#define AV_EF_BITSTREAM (1<<1)          ///< detect bitstream specification deviations#define AV_EF_BUFFER    (1<<2)          ///< detect improper bitstream length#define AV_EF_EXPLODE   (1<<3)          ///< abort decoding on minor error detection#define AV_EF_IGNORE_ERR (1<<15)        ///< ignore errors and continue#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#define AV_EF_COMPLIANT  (1<<17)        ///< consider all spec non compliances as errors#define AV_EF_AGGRESSIVE (1<<18)        ///< consider things that a sane encoder should not do as an error    /**     * opaque 64-bit number (generally a PTS) that will be reordered and     * output in AVFrame.reordered_opaque     * - encoding: unused     * - decoding: Set by user.     */    int64_t reordered_opaque;    /**     * Hardware accelerator in use     * - encoding: unused.     * - decoding: Set by libavcodec     */    struct AVHWAccel *hwaccel;    /**     * Hardware accelerator context.     * For some hardware accelerators, a global context needs to be     * provided by the user. In that case, this holds display-dependent     * data FFmpeg cannot instantiate itself. Please refer to the     * FFmpeg HW accelerator documentation to know how to fill this     * is. e.g. for VA API, this is a struct vaapi_context.     * - encoding: unused     * - decoding: Set by user     */    void *hwaccel_context;    /**     * error     * - encoding: Set by libavcodec if flags & AV_CODEC_FLAG_PSNR.     * - decoding: unused     */    uint64_t error[AV_NUM_DATA_POINTERS];    /**     * DCT algorithm, see FF_DCT_* below     * - encoding: Set by user.     * - decoding: unused     */    int dct_algo;#define FF_DCT_AUTO    0#define FF_DCT_FASTINT 1#define FF_DCT_INT     2#define FF_DCT_MMX     3#define FF_DCT_ALTIVEC 5#define FF_DCT_FAAN    6    /**     * IDCT algorithm, see FF_IDCT_* below.     * - encoding: Set by user.     * - decoding: Set by user.     */    int idct_algo;#define FF_IDCT_AUTO          0#define FF_IDCT_INT           1#define FF_IDCT_SIMPLE        2#define FF_IDCT_SIMPLEMMX     3#define FF_IDCT_ARM           7#define FF_IDCT_ALTIVEC       8#if FF_API_ARCH_SH4#define FF_IDCT_SH4           9#endif#define FF_IDCT_SIMPLEARM     10#if FF_API_UNUSED_MEMBERS#define FF_IDCT_IPP           13#endif /* FF_API_UNUSED_MEMBERS */#define FF_IDCT_XVID          14#if FF_API_IDCT_XVIDMMX#define FF_IDCT_XVIDMMX       14#endif /* FF_API_IDCT_XVIDMMX */#define FF_IDCT_SIMPLEARMV5TE 16#define FF_IDCT_SIMPLEARMV6   17#if FF_API_ARCH_SPARC#define FF_IDCT_SIMPLEVIS     18#endif#define FF_IDCT_FAAN          20#define FF_IDCT_SIMPLENEON    22#if FF_API_ARCH_ALPHA#define FF_IDCT_SIMPLEALPHA   23#endif#define FF_IDCT_SIMPLEAUTO    128    /**     * bits per sample/pixel from the demuxer (needed for huffyuv).     * - encoding: Set by libavcodec.     * - decoding: Set by user.     */     int bits_per_coded_sample;    /**     * Bits per sample/pixel of internal libavcodec pixel/sample format.     * - encoding: set by user.     * - decoding: set by libavcodec.     */    int bits_per_raw_sample;#if FF_API_LOWRES    /**     * low resolution decoding, 1-> 1/2 size, 2->1/4 size     * - encoding: unused     * - decoding: Set by user.     * Code outside libavcodec should access this field using:     * av_codec_{get,set}_lowres(avctx)     */     int lowres;#endif#if FF_API_CODED_FRAME    /**     * the picture in the bitstream     * - encoding: Set by libavcodec.     * - decoding: unused     *     * @deprecated use the quality factor packet side data instead     */    attribute_deprecated AVFrame *coded_frame;#endif    /**     * thread count     * is used to decide how many independent tasks should be passed to execute()     * - encoding: Set by user.     * - decoding: Set by user.     */    int thread_count;    /**     * Which multithreading methods to use.     * Use of FF_THREAD_FRAME will increase decoding delay by one frame per thread,     * so clients which cannot provide future frames should not use it.     *     * - encoding: Set by user, otherwise the default is used.     * - decoding: Set by user, otherwise the default is used.     */    int thread_type;#define FF_THREAD_FRAME   1 ///< Decode more than one frame at once#define FF_THREAD_SLICE   2 ///< Decode more than one part of a single frame at once    /**     * Which multithreading methods are in use by the codec.     * - encoding: Set by libavcodec.     * - decoding: Set by libavcodec.     */    int active_thread_type;    /**     * Set by the client if its custom get_buffer() callback can be called     * synchronously from another thread, which allows faster multithreaded decoding.     * draw_horiz_band() will be called from other threads regardless of this setting.     * Ignored if the default get_buffer() is used.     * - encoding: Set by user.     * - decoding: Set by user.     */    int thread_safe_callbacks;    /**     * The codec may call this to execute several independent things.     * It will return only after finishing all tasks.     * The user may replace this with some multithreaded implementation,     * the default implementation will execute the parts serially.     * @param count the number of things to execute     * - encoding: Set by libavcodec, user can override.     * - decoding: Set by libavcodec, user can override.     */    int (*execute)(struct AVCodecContext *c, int (*func)(struct AVCodecContext *c2, void *arg), void *arg2, int *ret, int count, int size);    /**     * The codec may call this to execute several independent things.     * It will return only after finishing all tasks.     * The user may replace this with some multithreaded implementation,     * the default implementation will execute the parts serially.     * Also see avcodec_thread_init and e.g. the --enable-pthread configure option.     * @param c context passed also to func     * @param count the number of things to execute     * @param arg2 argument passed unchanged to func     * @param ret return values of executed functions, must have space for "count" values. May be NULL.     * @param func function that will be called count times, with jobnr from 0 to count-1.     *             threadnr will be in the range 0 to c->thread_count-1 < MAX_THREADS and so that no     *             two instances of func executing at the same time will have the same threadnr.     * @return always 0 currently, but code should handle a future improvement where when any call to func     *         returns < 0 no further calls to func may be done and < 0 is returned.     * - encoding: Set by libavcodec, user can override.     * - decoding: Set by libavcodec, user can override.     */    int (*execute2)(struct AVCodecContext *c, int (*func)(struct AVCodecContext *c2, void *arg, int jobnr, int threadnr), void *arg2, int *ret, int count);    /**     * noise vs. sse weight for the nsse comparison function     * - encoding: Set by user.     * - decoding: unused     */     int nsse_weight;    /**     * profile     * - encoding: Set by user.     * - decoding: Set by libavcodec.     */     int profile;#define FF_PROFILE_UNKNOWN -99#define FF_PROFILE_RESERVED -100#define FF_PROFILE_AAC_MAIN 0#define FF_PROFILE_AAC_LOW  1#define FF_PROFILE_AAC_SSR  2#define FF_PROFILE_AAC_LTP  3#define FF_PROFILE_AAC_HE   4#define FF_PROFILE_AAC_HE_V2 28#define FF_PROFILE_AAC_LD   22#define FF_PROFILE_AAC_ELD  38#define FF_PROFILE_MPEG2_AAC_LOW 128#define FF_PROFILE_MPEG2_AAC_HE  131#define FF_PROFILE_DNXHD         0#define FF_PROFILE_DNXHR_LB      1#define FF_PROFILE_DNXHR_SQ      2#define FF_PROFILE_DNXHR_HQ      3#define FF_PROFILE_DNXHR_HQX     4#define FF_PROFILE_DNXHR_444     5#define FF_PROFILE_DTS         20#define FF_PROFILE_DTS_ES      30#define FF_PROFILE_DTS_96_24   40#define FF_PROFILE_DTS_HD_HRA  50#define FF_PROFILE_DTS_HD_MA   60#define FF_PROFILE_DTS_EXPRESS 70#define FF_PROFILE_MPEG2_422    0#define FF_PROFILE_MPEG2_HIGH   1#define FF_PROFILE_MPEG2_SS     2#define FF_PROFILE_MPEG2_SNR_SCALABLE  3#define FF_PROFILE_MPEG2_MAIN   4#define FF_PROFILE_MPEG2_SIMPLE 5#define FF_PROFILE_H264_CONSTRAINED  (1<<9)  // 8+1; constraint_set1_flag#define FF_PROFILE_H264_INTRA        (1<<11) // 8+3; constraint_set3_flag#define FF_PROFILE_H264_BASELINE             66#define FF_PROFILE_H264_CONSTRAINED_BASELINE (66|FF_PROFILE_H264_CONSTRAINED)#define FF_PROFILE_H264_MAIN                 77#define FF_PROFILE_H264_EXTENDED             88#define FF_PROFILE_H264_HIGH                 100#define FF_PROFILE_H264_HIGH_10              110#define FF_PROFILE_H264_HIGH_10_INTRA        (110|FF_PROFILE_H264_INTRA)#define FF_PROFILE_H264_MULTIVIEW_HIGH       118#define FF_PROFILE_H264_HIGH_422             122#define FF_PROFILE_H264_HIGH_422_INTRA       (122|FF_PROFILE_H264_INTRA)#define FF_PROFILE_H264_STEREO_HIGH          128#define FF_PROFILE_H264_HIGH_444             144#define FF_PROFILE_H264_HIGH_444_PREDICTIVE  244#define FF_PROFILE_H264_HIGH_444_INTRA       (244|FF_PROFILE_H264_INTRA)#define FF_PROFILE_H264_CAVLC_444            44#define FF_PROFILE_VC1_SIMPLE   0#define FF_PROFILE_VC1_MAIN     1#define FF_PROFILE_VC1_COMPLEX  2#define FF_PROFILE_VC1_ADVANCED 3#define FF_PROFILE_MPEG4_SIMPLE                     0#define FF_PROFILE_MPEG4_SIMPLE_SCALABLE            1#define FF_PROFILE_MPEG4_CORE                       2#define FF_PROFILE_MPEG4_MAIN                       3#define FF_PROFILE_MPEG4_N_BIT                      4#define FF_PROFILE_MPEG4_SCALABLE_TEXTURE           5#define FF_PROFILE_MPEG4_SIMPLE_FACE_ANIMATION      6#define FF_PROFILE_MPEG4_BASIC_ANIMATED_TEXTURE     7#define FF_PROFILE_MPEG4_HYBRID                     8#define FF_PROFILE_MPEG4_ADVANCED_REAL_TIME         9#define FF_PROFILE_MPEG4_CORE_SCALABLE             10#define FF_PROFILE_MPEG4_ADVANCED_CODING           11#define FF_PROFILE_MPEG4_ADVANCED_CORE             12#define FF_PROFILE_MPEG4_ADVANCED_SCALABLE_TEXTURE 13#define FF_PROFILE_MPEG4_SIMPLE_STUDIO             14#define FF_PROFILE_MPEG4_ADVANCED_SIMPLE           15#define FF_PROFILE_JPEG2000_CSTREAM_RESTRICTION_0   1#define FF_PROFILE_JPEG2000_CSTREAM_RESTRICTION_1   2#define FF_PROFILE_JPEG2000_CSTREAM_NO_RESTRICTION  32768#define FF_PROFILE_JPEG2000_DCINEMA_2K              3#define FF_PROFILE_JPEG2000_DCINEMA_4K              4#define FF_PROFILE_VP9_0                            0#define FF_PROFILE_VP9_1                            1#define FF_PROFILE_VP9_2                            2#define FF_PROFILE_VP9_3                            3#define FF_PROFILE_HEVC_MAIN                        1#define FF_PROFILE_HEVC_MAIN_10                     2#define FF_PROFILE_HEVC_MAIN_STILL_PICTURE          3#define FF_PROFILE_HEVC_REXT                        4    /**     * level     * - encoding: Set by user.     * - decoding: Set by libavcodec.     */     int level;#define FF_LEVEL_UNKNOWN -99    /**     * Skip loop filtering for selected frames.     * - encoding: unused     * - decoding: Set by user.     */    enum AVDiscard skip_loop_filter;    /**     * Skip IDCT/dequantization for selected frames.     * - encoding: unused     * - decoding: Set by user.     */    enum AVDiscard skip_idct;    /**     * Skip decoding for selected frames.     * - encoding: unused     * - decoding: Set by user.     */    enum AVDiscard skip_frame;    /**     * Header containing style information for text subtitles.     * For SUBTITLE_ASS subtitle type, it should contain the whole ASS     * [Script Info] and [V4+ Styles] section, plus the [Events] line and     * the Format line following. It shouldn't include any Dialogue line.     * - encoding: Set/allocated/freed by user (before avcodec_open2())     * - decoding: Set/allocated/freed by libavcodec (by avcodec_open2())     */    uint8_t *subtitle_header;    int subtitle_header_size;#if FF_API_ERROR_RATE    /**     * @deprecated use the 'error_rate' private AVOption of the mpegvideo     * encoders     */    attribute_deprecated    int error_rate;#endif#if FF_API_VBV_DELAY    /**     * VBV delay coded in the last frame (in periods of a 27 MHz clock).     * Used for compliant TS muxing.     * - encoding: Set by libavcodec.     * - decoding: unused.     * @deprecated this value is now exported as a part of     * AV_PKT_DATA_CPB_PROPERTIES packet side data     */    attribute_deprecated    uint64_t vbv_delay;#endif#if FF_API_SIDEDATA_ONLY_PKT    /**     * Encoding only and set by default. Allow encoders to output packets     * that do not contain any encoded data, only side data.     *     * Some encoders need to output such packets, e.g. to update some stream     * parameters at the end of encoding.     *     * @deprecated this field disables the default behaviour and     *             it is kept only for compatibility.     */    attribute_deprecated    int side_data_only_packets;#endif    /**     * Audio only. The number of "priming" samples (padding) inserted by the     * encoder at the beginning of the audio. I.e. this number of leading     * decoded samples must be discarded by the caller to get the original audio     * without leading padding.     *     * - decoding: unused     * - encoding: Set by libavcodec. The timestamps on the output packets are     *             adjusted by the encoder so that they always refer to the     *             first sample of the data actually contained in the packet,     *             including any added padding.  E.g. if the timebase is     *             1/samplerate and the timestamp of the first input sample is     *             0, the timestamp of the first output packet will be     *             -initial_padding.     */    int initial_padding;    /**     * - decoding: For codecs that store a framerate value in the compressed     *             bitstream, the decoder may export it here. { 0, 1} when     *             unknown.     * - encoding: May be used to signal the framerate of CFR content to an     *             encoder.     */    AVRational framerate;    /**     * Nominal unaccelerated pixel format, see AV_PIX_FMT_xxx.     * - encoding: unused.     * - decoding: Set by libavcodec before calling get_format()     */    enum AVPixelFormat sw_pix_fmt;    /**     * Timebase in which pkt_dts/pts and AVPacket.dts/pts are.     * Code outside libavcodec should access this field using:     * av_codec_{get,set}_pkt_timebase(avctx)     * - encoding unused.     * - decoding set by user.     */    AVRational pkt_timebase;    /**     * AVCodecDescriptor     * Code outside libavcodec should access this field using:     * av_codec_{get,set}_codec_descriptor(avctx)     * - encoding: unused.     * - decoding: set by libavcodec.     */    const AVCodecDescriptor *codec_descriptor;#if !FF_API_LOWRES    /**     * low resolution decoding, 1-> 1/2 size, 2->1/4 size     * - encoding: unused     * - decoding: Set by user.     * Code outside libavcodec should access this field using:     * av_codec_{get,set}_lowres(avctx)     */     int lowres;#endif    /**     * Current statistics for PTS correction.     * - decoding: maintained and used by libavcodec, not intended to be used by user apps     * - encoding: unused     */    int64_t pts_correction_num_faulty_pts; /// Number of incorrect PTS values so far    int64_t pts_correction_num_faulty_dts; /// Number of incorrect DTS values so far    int64_t pts_correction_last_pts;       /// PTS of the last frame    int64_t pts_correction_last_dts;       /// DTS of the last frame    /**     * Character encoding of the input subtitles file.     * - decoding: set by user     * - encoding: unused     */    char *sub_charenc;    /**     * Subtitles character encoding mode. Formats or codecs might be adjusting     * this setting (if they are doing the conversion themselves for instance).     * - decoding: set by libavcodec     * - encoding: unused     */    int sub_charenc_mode;#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)#define FF_SUB_CHARENC_MODE_AUTOMATIC    0  ///< libavcodec will select the mode itself#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    /**     * Skip processing alpha if supported by codec.     * Note that if the format uses pre-multiplied alpha (common with VP6,     * and recommended due to better video quality/compression)     * the image will look as if alpha-blended onto a black background.     * However for formats that do not use pre-multiplied alpha     * there might be serious artefacts (though e.g. libswscale currently     * assumes pre-multiplied alpha anyway).     * Code outside libavcodec should access this field using AVOptions     *     * - decoding: set by user     * - encoding: unused     */    int skip_alpha;    /**     * Number of samples to skip after a discontinuity     * - decoding: unused     * - encoding: set by libavcodec     */    int seek_preroll;#if !FF_API_DEBUG_MV    /**     * debug motion vectors     * Code outside libavcodec should access this field using AVOptions     * - encoding: Set by user.     * - decoding: Set by user.     */    int debug_mv;#define FF_DEBUG_VIS_MV_P_FOR  0x00000001 //visualize forward predicted MVs of P frames#define FF_DEBUG_VIS_MV_B_FOR  0x00000002 //visualize forward predicted MVs of B frames#define FF_DEBUG_VIS_MV_B_BACK 0x00000004 //visualize backward predicted MVs of B frames#endif    /**     * custom intra quantization matrix     * Code outside libavcodec should access this field using av_codec_g/set_chroma_intra_matrix()     * - encoding: Set by user, can be NULL.     * - decoding: unused.     */    uint16_t *chroma_intra_matrix;    /**     * dump format separator.     * can be ", " or "\n      " or anything else     * Code outside libavcodec should access this field using AVOptions     * (NO direct access).     * - encoding: Set by user.     * - decoding: Set by user.     */    uint8_t *dump_separator;    /**     * ',' separated list of allowed decoders.     * If NULL then all are allowed     * - encoding: unused     * - decoding: set by user through AVOPtions (NO direct access)     */    char *codec_whitelist;    /*     * Properties of the stream that gets decoded     * To be accessed through av_codec_get_properties() (NO direct access)     * - encoding: unused     * - decoding: set by libavcodec     */    unsigned properties;#define FF_CODEC_PROPERTY_LOSSLESS        0x00000001#define FF_CODEC_PROPERTY_CLOSED_CAPTIONS 0x00000002    /**     * Additional data associated with the entire coded stream.     *     * - decoding: unused     * - encoding: may be set by libavcodec after avcodec_open2().     */    AVPacketSideData *coded_side_data;    int            nb_coded_side_data;    /**     * A reference to the AVHWFramesContext describing the input (for encoding)     * or output (decoding) frames. The reference is set by the caller and     * afterwards owned (and freed) by libavcodec.     *     * - decoding: This field should be set by the caller from the get_format()     *             callback. The previous reference (if any) will always be     *             unreffed by libavcodec before the get_format() call.     *     *             If the default get_buffer2() is used with a hwaccel pixel     *             format, then this AVHWFramesContext will be used for     *             allocating the frame buffers.     *     * - encoding: For hardware encoders configured to use a hwaccel pixel     *             format, this field should be set by the caller to a reference     *             to the AVHWFramesContext describing input frames.     *             AVHWFramesContext.format must be equal to     *             AVCodecContext.pix_fmt.     *     *             This field should be set before avcodec_open2() is called.     */    AVBufferRef *hw_frames_ctx;    /**     * Control the form of AVSubtitle.rects[N]->ass     * - decoding: set by user     * - encoding: unused     */    int sub_text_format;#define FF_SUB_TEXT_FMT_ASS              0#if FF_API_ASS_TIMING#define FF_SUB_TEXT_FMT_ASS_WITH_TIMINGS 1#endif    /**     * Audio only. The amount of padding (in samples) appended by the encoder to     * the end of the audio. I.e. this number of decoded samples must be     * discarded by the caller from the end of the stream to get the original     * audio without any trailing padding.     *     * - decoding: unused     * - encoding: unused     */    int trailing_padding;} AVCodecContext;


AVCodec:

/** * AVCodec. */typedef struct AVCodec {    /**     * Name of the codec implementation.     * The name is globally unique among encoders and among decoders (but an     * encoder and a decoder can share the same name).     * This is the primary way to find a codec from the user perspective.     */    const char *name;    /**     * Descriptive name for the codec, meant to be more human readable than name.     * You should use the NULL_IF_CONFIG_SMALL() macro to define it.     */    const char *long_name;    enum AVMediaType type;    enum AVCodecID id;    /**     * Codec capabilities.     * see AV_CODEC_CAP_*     */    int capabilities;    const AVRational *supported_framerates; ///< array of supported framerates, or NULL if any, array is terminated by {0,0}    const enum AVPixelFormat *pix_fmts;     ///< array of supported pixel formats, or NULL if unknown, array is terminated by -1    const int *supported_samplerates;       ///< array of supported audio samplerates, or NULL if unknown, array is terminated by 0    const enum AVSampleFormat *sample_fmts; ///< array of supported sample formats, or NULL if unknown, array is terminated by -1    const uint64_t *channel_layouts;         ///< array of support channel layouts, or NULL if unknown. array is terminated by 0    uint8_t max_lowres;                     ///< maximum value for lowres supported by the decoder, no direct access, use av_codec_get_max_lowres()    const AVClass *priv_class;              ///< AVClass for the private context    const AVProfile *profiles;              ///< array of recognized profiles, or NULL if unknown, array is terminated by {FF_PROFILE_UNKNOWN}    /*****************************************************************     * No fields below this line are part of the public API. They     * may not be used outside of libavcodec and can be changed and     * removed at will.     * New public fields should be added right above.     *****************************************************************     */    int priv_data_size;    struct AVCodec *next;    /**     * @name Frame-level threading support functions     * @{     */    /**     * If defined, called on thread contexts when they are created.     * If the codec allocates writable tables in init(), re-allocate them here.     * priv_data will be set to a copy of the original.     */    int (*init_thread_copy)(AVCodecContext *);    /**     * Copy necessary context variables from a previous thread context to the current one.     * If not defined, the next thread will start automatically; otherwise, the codec     * must call ff_thread_finish_setup().     *     * dst and src will (rarely) point to the same context, in which case memcpy should be skipped.     */    int (*update_thread_context)(AVCodecContext *dst, const AVCodecContext *src);    /** @} */    /**     * Private codec-specific defaults.     */    const AVCodecDefault *defaults;    /**     * Initialize codec static data, called from avcodec_register().     */    void (*init_static_data)(struct AVCodec *codec);    int (*init)(AVCodecContext *);    int (*encode_sub)(AVCodecContext *, uint8_t *buf, int buf_size,                      const struct AVSubtitle *sub);    /**     * Encode data to an AVPacket.     *     * @param      avctx          codec context     * @param      avpkt          output AVPacket (may contain a user-provided buffer)     * @param[in]  frame          AVFrame containing the raw data to be encoded     * @param[out] got_packet_ptr encoder sets to 0 or 1 to indicate that a     *                            non-empty packet was returned in avpkt.     * @return 0 on success, negative error code on failure     */    int (*encode2)(AVCodecContext *avctx, AVPacket *avpkt, const AVFrame *frame,                   int *got_packet_ptr);    int (*decode)(AVCodecContext *, void *outdata, int *outdata_size, AVPacket *avpkt);    int (*close)(AVCodecContext *);    /**     * Decode/encode API with decoupled packet/frame dataflow. The API is the     * same as the avcodec_ prefixed APIs (avcodec_send_frame() etc.), except     * that:     * - never called if the codec is closed or the wrong type,     * - AVPacket parameter change side data is applied right before calling     *   AVCodec->send_packet,     * - if AV_CODEC_CAP_DELAY is not set, drain packets or frames are never sent,     * - only one drain packet is ever passed down (until the next flush()),     * - a drain AVPacket is always NULL (no need to check for avpkt->size).     */    int (*send_frame)(AVCodecContext *avctx, const AVFrame *frame);    int (*send_packet)(AVCodecContext *avctx, const AVPacket *avpkt);    int (*receive_frame)(AVCodecContext *avctx, AVFrame *frame);    int (*receive_packet)(AVCodecContext *avctx, AVPacket *avpkt);    /**     * Flush buffers.     * Will be called when seeking     */    void (*flush)(AVCodecContext *);    /**     * Internal codec capabilities.     * See FF_CODEC_CAP_* in internal.h     */    int caps_internal;} AVCodec;


AVPicture:

/** * Picture data structure. * * Up to four components can be stored into it, the last component is * alpha. * @deprecated use AVFrame or imgutils functions instead */typedef struct AVPicture {    attribute_deprecated    uint8_t *data[AV_NUM_DATA_POINTERS];    ///< pointers to the image data planes    attribute_deprecated    int linesize[AV_NUM_DATA_POINTERS];     ///< number of bytes per line} AVPicture;



AVCodecParameters :

/** * This struct describes the properties of an encoded stream. * * sizeof(AVCodecParameters) is not a part of the public ABI, this struct must * be allocated with avcodec_parameters_alloc() and freed with * avcodec_parameters_free(). */typedef struct AVCodecParameters {    /**     * General type of the encoded data.     */    enum AVMediaType codec_type;    /**     * Specific type of the encoded data (the codec used).     */    enum AVCodecID   codec_id;    /**     * Additional information about the codec (corresponds to the AVI FOURCC).     */    uint32_t         codec_tag;    /**     * Extra binary data needed for initializing the decoder, codec-dependent.     *     * Must be allocated with av_malloc() and will be freed by     * avcodec_parameters_free(). The allocated size of extradata must be at     * least extradata_size + AV_INPUT_BUFFER_PADDING_SIZE, with the padding     * bytes zeroed.     */    uint8_t *extradata;    /**     * Size of the extradata content in bytes.     */    int      extradata_size;    /**     * - video: the pixel format, the value corresponds to enum AVPixelFormat.     * - audio: the sample format, the value corresponds to enum AVSampleFormat.     */    int format;    /**     * The average bitrate of the encoded data (in bits per second).     */    int64_t bit_rate;    /**     * The number of bits per sample in the codedwords.     *     * This is basically the bitrate per sample. It is mandatory for a bunch of     * formats to actually decode them. It's the number of bits for one sample in     * the actual coded bitstream.     *     * This could be for example 4 for ADPCM     * For PCM formats this matches bits_per_raw_sample     * Can be 0     */    int bits_per_coded_sample;    /**     * This is the number of valid bits in each output sample. If the     * sample format has more bits, the least significant bits are additional     * padding bits, which are always 0. Use right shifts to reduce the sample     * to its actual size. For example, audio formats with 24 bit samples will     * have bits_per_raw_sample set to 24, and format set to AV_SAMPLE_FMT_S32.     * To get the original sample use "(int32_t)sample >> 8"."     *     * For ADPCM this might be 12 or 16 or similar     * Can be 0     */    int bits_per_raw_sample;    /**     * Codec-specific bitstream restrictions that the stream conforms to.     */    int profile;    int level;    /**     * Video only. The dimensions of the video frame in pixels.     */    int width;    int height;    /**     * Video only. The aspect ratio (width / height) which a single pixel     * should have when displayed.     *     * When the aspect ratio is unknown / undefined, the numerator should be     * set to 0 (the denominator may have any value).     */    AVRational sample_aspect_ratio;    /**     * Video only. The order of the fields in interlaced video.     */    enum AVFieldOrder                  field_order;    /**     * Video only. Additional colorspace characteristics.     */    enum AVColorRange                  color_range;    enum AVColorPrimaries              color_primaries;    enum AVColorTransferCharacteristic color_trc;    enum AVColorSpace                  color_space;    enum AVChromaLocation              chroma_location;    /**     * Video only. Number of delayed frames.     */    int video_delay;    /**     * Audio only. The channel layout bitmask. May be 0 if the channel layout is     * unknown or unspecified, otherwise the number of bits set must be equal to     * the channels field.     */    uint64_t channel_layout;    /**     * Audio only. The number of audio channels.     */    int      channels;    /**     * Audio only. The number of audio samples per second.     */    int      sample_rate;    /**     * Audio only. The number of bytes per coded audio frame, required by some     * formats.     *     * Corresponds to nBlockAlign in WAVEFORMATEX.     */    int      block_align;    /**     * Audio only. Audio frame size, if known. Required by some formats to be static.     */    int      frame_size;    /**     * Audio only. The amount of padding (in samples) inserted by the encoder at     * the beginning of the audio. I.e. this number of leading decoded samples     * must be discarded by the caller to get the original audio without leading     * padding.     */    int initial_padding;    /**     * Audio only. The amount of padding (in samples) appended by the encoder to     * the end of the audio. I.e. this number of decoded samples must be     * discarded by the caller from the end of the stream to get the original     * audio without any trailing padding.     */    int trailing_padding;    /**     * Audio only. Number of samples to skip after a discontinuity.     */    int seek_preroll;} AVCodecParameters;


/**
 * Register the codec codec and initialize libavcodec.
 *
 * @warning either this function or avcodec_register_all() must be called
 * before any other libavcodec functions.
 *
 * @see avcodec_register_all()
 */
void avcodec_register(AVCodec *codec);


/**
 * Register all the codecs, parsers and bitstream filters which were enabled at
 * configuration time. If you do not call this function you can select exactly
 * which formats you want to support, by using the individual registration
 * functions.
 *
 * @see avcodec_register
 * @see av_register_codec_parser
 * @see av_register_bitstream_filter
 */
void avcodec_register_all(void);


/** * Allocate an AVCodecContext and set its fields to default values. The * resulting struct should be freed with avcodec_free_context(). * * @param codec if non-NULL, allocate private data and initialize defaults *              for the given codec. It is illegal to then call avcodec_open2() *              with a different codec. *              If NULL, then the codec-specific defaults won't be initialized, *              which may result in suboptimal default settings (this is *              important mainly for encoders, e.g. libx264). * * @return An AVCodecContext filled with default values or NULL on failure. */AVCodecContext *avcodec_alloc_context3(const AVCodec *codec);

/** * Free the codec context and everything associated with it and write NULL to * the provided pointer. */void avcodec_free_context(AVCodecContext **avctx);


/** * Initialize the AVCodecContext to use the given AVCodec. Prior to using this * function the context has to be allocated with avcodec_alloc_context3(). * * The functions avcodec_find_decoder_by_name(), avcodec_find_encoder_by_name(), * avcodec_find_decoder() and avcodec_find_encoder() provide an easy way for * retrieving a codec. * * @warning This function is not thread safe! * * @note Always call this function before using decoding routines (such as * @ref avcodec_receive_frame()). * * @code * avcodec_register_all(); * av_dict_set(&opts, "b", "2.5M", 0); * codec = avcodec_find_decoder(AV_CODEC_ID_H264); * if (!codec) *     exit(1); * * context = avcodec_alloc_context3(codec); * * if (avcodec_open2(context, codec, opts) < 0) *     exit(1); * @endcode * * @param avctx The context to initialize. * @param codec The codec to open this context for. If a non-NULL codec has been *              previously passed to avcodec_alloc_context3() or *              for this context, then this parameter MUST be either NULL or *              equal to the previously passed codec. * @param options A dictionary filled with AVCodecContext and codec-private options. *                On return this object will be filled with options that were not found. * * @return zero on success, a negative value on error * @see avcodec_alloc_context3(), avcodec_find_decoder(), avcodec_find_encoder(), *      av_dict_set(), av_opt_find(). */int avcodec_open2(AVCodecContext *avctx, const AVCodec *codec, AVDictionary **options);




/** * Free the packet, if the packet is reference counted, it will be * unreferenced first. * * @param packet packet to be freed. The pointer will be set to NULL. * @note passing NULL is a no-op. */void av_packet_free(AVPacket **pkt);/** * Initialize optional fields of a packet with default values. * * Note, this does not touch the data and size members, which have to be * initialized separately. * * @param pkt packet */void av_init_packet(AVPacket *pkt);/** * Allocate the payload of a packet and initialize its fields with * default values. * * @param pkt packet * @param size wanted payload size * @return 0 if OK, AVERROR_xxx otherwise */int av_new_packet(AVPacket *pkt, int size);


/** * Setup a new reference to the data described by a given packet * * If src is reference-counted, setup dst as a new reference to the * buffer in src. Otherwise allocate a new buffer in dst and copy the * data from src into it. * * All the other fields are copied from src. * * @see av_packet_unref * * @param dst Destination packet * @param src Source packet * * @return 0 on success, a negative AVERROR on error. */int av_packet_ref(AVPacket *dst, const AVPacket *src);/** * Wipe the packet. * * Unreference the buffer referenced by the packet and reset the * remaining packet fields to their default values. * * @param pkt The packet to be unreferenced. */void av_packet_unref(AVPacket *pkt);




/** * Find a registered decoder with a matching codec ID. * * @param id AVCodecID of the requested decoder * @return A decoder if one was found, NULL otherwise. */AVCodec *avcodec_find_decoder(enum AVCodecID id);





/** * Supply raw packet data as input to a decoder. * * Internally, this call will copy relevant AVCodecContext fields, which can * influence decoding per-packet, and apply them when the packet is actually * decoded. (For example AVCodecContext.skip_frame, which might direct the * decoder to drop the frame contained by the packet sent with this function.) * * @warning The input buffer, avpkt->data must be AV_INPUT_BUFFER_PADDING_SIZE *          larger than the actual read bytes because some optimized bitstream *          readers read 32 or 64 bits at once and could read over the end. * * @warning Do not mix this API with the legacy API (like avcodec_decode_video2()) *          on the same AVCodecContext. It will return unexpected results now *          or in future libavcodec versions. * * @note The AVCodecContext MUST have been opened with @ref avcodec_open2() *       before packets may be fed to the decoder. * * @param avctx codec context * @param[in] avpkt The input AVPacket. Usually, this will be a single video *                  frame, or several complete audio frames. *                  Ownership of the packet remains with the caller, and the *                  decoder will not write to the packet. The decoder may create *                  a reference to the packet data (or copy it if the packet is *                  not reference-counted). *                  Unlike with older APIs, the packet is always fully consumed, *                  and if it contains multiple frames (e.g. some audio codecs), *                  will require you to call avcodec_receive_frame() multiple *                  times afterwards before you can send a new packet. *                  It can be NULL (or an AVPacket with data set to NULL and *                  size set to 0); in this case, it is considered a flush *                  packet, which signals the end of the stream. Sending the *                  first flush packet will return success. Subsequent ones are *                  unnecessary and will return AVERROR_EOF. If the decoder *                  still has frames buffered, it will return them after sending *                  a flush packet. * * @return 0 on success, otherwise negative error code: *      AVERROR(EAGAIN):   input is not accepted right now - the packet must be *                         resent after trying to read output *      AVERROR_EOF:       the decoder has been flushed, and no new packets can *                         be sent to it (also returned if more than 1 flush *                         packet is sent) *      AVERROR(EINVAL):   codec not opened, it is an encoder, or requires flush *      AVERROR(ENOMEM):   failed to add packet to internal queue, or similar *      other errors: legitimate decoding errors */int avcodec_send_packet(AVCodecContext *avctx, const AVPacket *avpkt);/** * Return decoded output data from a decoder. * * @param avctx codec context * @param frame This will be set to a reference-counted video or audio *              frame (depending on the decoder type) allocated by the *              decoder. Note that the function will always call *              av_frame_unref(frame) before doing anything else. * * @return *      0:                 success, a frame was returned *      AVERROR(EAGAIN):   output is not available right now - user must try *                         to send new input *      AVERROR_EOF:       the decoder has been fully flushed, and there will be *                         no more output frames *      AVERROR(EINVAL):   codec not opened, or it is an encoder *      other negative values: legitimate decoding errors */int avcodec_receive_frame(AVCodecContext *avctx, AVFrame *frame);





typedef struct AVCodecParserContext {    void *priv_data;    struct AVCodecParser *parser;    int64_t frame_offset; /* offset of the current frame */    int64_t cur_offset; /* current offset                           (incremented by each av_parser_parse()) */    int64_t next_frame_offset; /* offset of the next frame */    /* video info */    int pict_type; /* XXX: Put it back in AVCodecContext. */    /**     * This field is used for proper frame duration computation in lavf.     * It signals, how much longer the frame duration of the current frame     * is compared to normal frame duration.     *     * frame_duration = (1 + repeat_pict) * time_base     *     * It is used by codecs like H.264 to display telecined material.     */    int repeat_pict; /* XXX: Put it back in AVCodecContext. */    int64_t pts;     /* pts of the current frame */    int64_t dts;     /* dts of the current frame */    /* private data */    int64_t last_pts;    int64_t last_dts;    int fetch_timestamp;#define AV_PARSER_PTS_NB 4    int cur_frame_start_index;    int64_t cur_frame_offset[AV_PARSER_PTS_NB];    int64_t cur_frame_pts[AV_PARSER_PTS_NB];    int64_t cur_frame_dts[AV_PARSER_PTS_NB];    int flags;#define PARSER_FLAG_COMPLETE_FRAMES           0x0001#define PARSER_FLAG_ONCE                      0x0002/// Set if the parser has a valid file offset#define PARSER_FLAG_FETCHED_OFFSET            0x0004#define PARSER_FLAG_USE_CODEC_TS              0x1000    int64_t offset;      ///< byte offset from starting packet start    int64_t cur_frame_end[AV_PARSER_PTS_NB];    /**     * Set by parser to 1 for key frames and 0 for non-key frames.     * It is initialized to -1, so if the parser doesn't set this flag,     * old-style fallback using AV_PICTURE_TYPE_I picture type as key frames     * will be used.     */    int key_frame;#if FF_API_CONVERGENCE_DURATION    /**     * @deprecated unused     */    attribute_deprecated    int64_t convergence_duration;#endif    // Timestamp generation support:    /**     * Synchronization point for start of timestamp generation.     *     * Set to >0 for sync point, 0 for no sync point and <0 for undefined     * (default).     *     * For example, this corresponds to presence of H.264 buffering period     * SEI message.     */    int dts_sync_point;    /**     * Offset of the current timestamp against last timestamp sync point in     * units of AVCodecContext.time_base.     *     * Set to INT_MIN when dts_sync_point unused. Otherwise, it must     * contain a valid timestamp offset.     *     * Note that the timestamp of sync point has usually a nonzero     * dts_ref_dts_delta, which refers to the previous sync point. Offset of     * the next frame after timestamp sync point will be usually 1.     *     * For example, this corresponds to H.264 cpb_removal_delay.     */    int dts_ref_dts_delta;    /**     * Presentation delay of current frame in units of AVCodecContext.time_base.     *     * Set to INT_MIN when dts_sync_point unused. Otherwise, it must     * contain valid non-negative timestamp delta (presentation time of a frame     * must not lie in the past).     *     * This delay represents the difference between decoding and presentation     * time of the frame.     *     * For example, this corresponds to H.264 dpb_output_delay.     */    int pts_dts_delta;    /**     * Position of the packet in file.     *     * Analogous to cur_frame_pts/dts     */    int64_t cur_frame_pos[AV_PARSER_PTS_NB];    /**     * Byte position of currently parsed frame in stream.     */    int64_t pos;    /**     * Previous frame byte position.     */    int64_t last_pos;    /**     * Duration of the current frame.     * For audio, this is in units of 1 / AVCodecContext.sample_rate.     * For all other types, this is in units of AVCodecContext.time_base.     */    int duration;    enum AVFieldOrder field_order;    /**     * Indicate whether a picture is coded as a frame, top field or bottom field.     *     * For example, H.264 field_pic_flag equal to 0 corresponds to     * AV_PICTURE_STRUCTURE_FRAME. An H.264 picture with field_pic_flag     * equal to 1 and bottom_field_flag equal to 0 corresponds to     * AV_PICTURE_STRUCTURE_TOP_FIELD.     */    enum AVPictureStructure picture_structure;    /**     * Picture number incremented in presentation or output order.     * This field may be reinitialized at the first picture of a new sequence.     *     * For example, this corresponds to H.264 PicOrderCnt.     */    int output_picture_number;    /**     * Dimensions of the decoded video intended for presentation.     */    int width;    int height;    /**     * Dimensions of the coded video.     */    int coded_width;    int coded_height;    /**     * The format of the coded data, corresponds to enum AVPixelFormat for video     * and for enum AVSampleFormat for audio.     *     * Note that a decoder can have considerable freedom in how exactly it     * decodes the data, so the format reported here might be different from the     * one returned by a decoder.     */    int format;} AVCodecParserContext;typedef struct AVCodecParser {    int codec_ids[5]; /* several codec IDs are permitted */    int priv_data_size;    int (*parser_init)(AVCodecParserContext *s);    /* This callback never returns an error, a negative value means that     * the frame start was in a previous packet. */    int (*parser_parse)(AVCodecParserContext *s,                        AVCodecContext *avctx,                        const uint8_t **poutbuf, int *poutbuf_size,                        const uint8_t *buf, int buf_size);    void (*parser_close)(AVCodecParserContext *s);    int (*split)(AVCodecContext *avctx, const uint8_t *buf, int buf_size);    struct AVCodecParser *next;} AVCodecParser;AVCodecParser *av_parser_next(const AVCodecParser *c);void av_register_codec_parser(AVCodecParser *parser);AVCodecParserContext *av_parser_init(int codec_id);







/** * Parse a packet. * * @param s             parser context. * @param avctx         codec context. * @param poutbuf       set to pointer to parsed buffer or NULL if not yet finished. * @param poutbuf_size  set to size of parsed buffer or zero if not yet finished. * @param buf           input buffer. * @param buf_size      buffer size in bytes without the padding. I.e. the full buffer                        size is assumed to be buf_size + AV_INPUT_BUFFER_PADDING_SIZE.                        To signal EOF, this should be 0 (so that the last frame                        can be output). * @param pts           input presentation timestamp. * @param dts           input decoding timestamp. * @param pos           input byte position in stream. * @return the number of bytes of the input bitstream used. * * Example: * @code *   while(in_len){ *       len = av_parser_parse2(myparser, AVCodecContext, &data, &size, *                                        in_data, in_len, *                                        pts, dts, pos); *       in_data += len; *       in_len  -= len; * *       if(size) *          decode_frame(data, size); *   } * @endcode */int av_parser_parse2(AVCodecParserContext *s,                     AVCodecContext *avctx,                     uint8_t **poutbuf, int *poutbuf_size,                     const uint8_t *buf, int buf_size,                     int64_t pts, int64_t dts,                     int64_t pos);



/** * Find a registered encoder with a matching codec ID. * * @param id AVCodecID of the requested encoder * @return An encoder if one was found, NULL otherwise. */AVCodec *avcodec_find_encoder(enum AVCodecID id);



有些 已经 attribute_deprecated 了,就不一一 列举了。

原创粉丝点击