Skip to content
Snippets Groups Projects
avcodec.h 146 KiB
Newer Older
  • Learn to ignore specific revisions
  • /*
     * copyright (c) 2001 Fabrice Bellard
     *
    
     * This file is part of Libav.
    
     * Libav is free software; you can redistribute it and/or
    
     * modify it under the terms of the GNU Lesser General Public
     * License as published by the Free Software Foundation; either
    
     * version 2.1 of the License, or (at your option) any later version.
    
     * Libav is distributed in the hope that it will be useful,
    
     * but WITHOUT ANY WARRANTY; without even the implied warranty of
     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     * Lesser General Public License for more details.
     *
     * You should have received a copy of the GNU Lesser General Public
    
     * License along with Libav; if not, write to the Free Software
    
     * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
    
    #ifndef AVCODEC_AVCODEC_H
    #define AVCODEC_AVCODEC_H
    
    Fabrice Bellard's avatar
    Fabrice Bellard committed
    
    
    /**
    
     * @ingroup libavc
     * Libavcodec external API header
    
    #include <errno.h>
    
    #include "libavutil/samplefmt.h"
    
    #include "libavutil/attributes.h"
    
    #include "libavutil/avutil.h"
    
    #include "libavutil/buffer.h"
    
    #include "libavutil/frame.h"
    
    #include "libavutil/log.h"
    
    #include "libavutil/pixfmt.h"
    
    #include "libavutil/rational.h"
    
    Fabrice Bellard's avatar
    Fabrice Bellard committed
    
    
    #if FF_API_FAST_MALLOC
    // to provide fast_*alloc
    #include "libavutil/mem.h"
    #endif
    
    
    /**
     * @defgroup libavc Encoding/Decoding Library
     * @{
     *
     * @defgroup lavc_decoding Decoding
     * @{
     * @}
     *
     * @defgroup lavc_encoding Encoding
     * @{
     * @}
     *
     * @defgroup lavc_codec Codecs
     * @{
     * @defgroup lavc_codec_native Native Codecs
     * @{
     * @}
     * @defgroup lavc_codec_wrappers External library wrappers
     * @{
     * @}
     * @defgroup lavc_codec_hwaccel Hardware Accelerators bridge
     * @{
     * @}
     * @}
     * @defgroup lavc_internal Internal
     * @{
     * @}
     * @}
     *
     */
    
    
    /**
     * @defgroup lavc_core Core functions/structures.
     * @ingroup libavc
     *
     * Basic definitions, functions for querying libavcodec capabilities,
     * allocating core structures, etc.
     * @{
     */
    
    Måns Rullgård's avatar
    Måns Rullgård committed
     * Identify the syntax and semantics of the bitstream.
    
     * The principle is roughly:
     * Two decoders with the same ID can decode the same streams.
     * Two encoders with the same ID can encode compatible streams.
     * There may be slight deviations from the principle due to implementation
     * details.
    
    Diego Biurrun's avatar
    Diego Biurrun committed
     * If you add a codec ID to this list, add it so that
     * 1. no value of a existing codec ID changes (that would break ABI),
     * 2. it is as close as possible to similar codecs.
    
     *
     * After adding new codec IDs, do not forget to add an entry to the codec
     * descriptor list and bump libavcodec minor version.
    
    enum AVCodecID {
        AV_CODEC_ID_NONE,
    
    
        /* video codecs */
    
        AV_CODEC_ID_MPEG1VIDEO,
        AV_CODEC_ID_MPEG2VIDEO, ///< preferred ID for MPEG-1/2 video decoding
    
        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,
        AV_CODEC_ID_IFF_BYTERUN1,
        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,
    
    Alberto Delmás's avatar
    Alberto Delmás committed
        AV_CODEC_ID_MSS2,
    
    Tom Finegan's avatar
    Tom Finegan committed
        AV_CODEC_ID_VP9,
    
        AV_CODEC_ID_AIC,
    
    Eli Friedman's avatar
    Eli Friedman committed
        AV_CODEC_ID_ESCAPE130,
    
    Kostya Shishkov's avatar
    Kostya Shishkov committed
        AV_CODEC_ID_G2M,
    
    Justin Ruggles's avatar
    Justin Ruggles committed
        AV_CODEC_ID_WEBP,
    
        AV_CODEC_ID_HNM4_VIDEO,
    
    Guillaume Martres's avatar
    Guillaume Martres committed
        AV_CODEC_ID_HEVC,
    
        AV_CODEC_ID_FIC,
    
        AV_CODEC_ID_ALIAS_PIX,
    
    Aleksi Nurmi's avatar
    Aleksi Nurmi committed
        AV_CODEC_ID_BRENDER_PIX,
    
    Paul B Mahol's avatar
    Paul B Mahol committed
        AV_CODEC_ID_PAF_VIDEO,
    
    Jimmy Christensen's avatar
    Jimmy Christensen committed
        AV_CODEC_ID_EXR,
    
    Peter Ross's avatar
    Peter Ross committed
        AV_CODEC_ID_VP7,
    
        AV_CODEC_ID_SANM,
    
        AV_CODEC_ID_SGIRLE,
    
        AV_CODEC_ID_MVC1,
        AV_CODEC_ID_MVC2,
    
    Vittorio Giovara's avatar
    Vittorio Giovara committed
        AV_CODEC_ID_HQX,
    
    Vittorio Giovara's avatar
    Vittorio Giovara committed
        AV_CODEC_ID_TDSC,
    
    Vittorio Giovara's avatar
    Vittorio Giovara committed
        AV_CODEC_ID_HQ_HQA,
    
    Diego Biurrun's avatar
    Diego Biurrun committed
        /* 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,
    
    Diego Biurrun's avatar
    Diego Biurrun committed
        /* 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,
    
        AV_CODEC_ID_AMR_NB = 0x12000,
        AV_CODEC_ID_AMR_WB,
    
        AV_CODEC_ID_RA_144 = 0x13000,
        AV_CODEC_ID_RA_288,
    
        AV_CODEC_ID_ROQ_DPCM = 0x14000,
        AV_CODEC_ID_INTERPLAY_DPCM,
        AV_CODEC_ID_XAN_DPCM,
        AV_CODEC_ID_SOL_DPCM,
    
        /* 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,
    
        AV_CODEC_ID_VOXWARE,
    
        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,
    
    Paul B Mahol's avatar
    Paul B Mahol committed
        AV_CODEC_ID_PAF_AUDIO,
    
    Kostya Shishkov's avatar
    Kostya Shishkov committed
        AV_CODEC_ID_ON2AVC,
    
    Oleksij Rempel's avatar
    Oleksij Rempel committed
        AV_CODEC_ID_DSS_SP,
    
        /* 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,
    
    Diego Biurrun's avatar
    Diego Biurrun committed
        /* 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_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
    
    Diego Biurrun's avatar
    Diego Biurrun committed
                                    * 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.
    
    Fabrice Bellard's avatar
    Fabrice Bellard committed
    };
    
    /**
     * This struct describes the properties of a single codec described by an
     * AVCodecID.
    
     * @see avcodec_descriptor_get()
    
     */
    typedef struct AVCodecDescriptor {
        enum AVCodecID     id;
        enum AVMediaType type;
        /**
         * Name of the codec described by this descriptor. It is non-empty and
         * unique for each codec descriptor. It should contain alphanumeric
         * characters and '_' only.
         */
        const char      *name;
        /**
         * A more descriptive name for this codec. May be NULL.
         */
        const char *long_name;
    
        /**
         * Codec properties, a combination of AV_CODEC_PROP_* flags.
         */
        int             props;
    
    } AVCodecDescriptor;
    
    
    /**
     * Codec uses only intra compression.
     * Video codecs only.
     */
    #define AV_CODEC_PROP_INTRA_ONLY    (1 << 0)
    
    /**
     * Codec supports lossy compression. Audio and video codecs only.
     * @note a codec may support both lossy and lossless
     * compression modes
     */
    #define AV_CODEC_PROP_LOSSY         (1 << 1)
    /**
     * Codec supports lossless compression. Audio and video codecs only.
     */
    #define AV_CODEC_PROP_LOSSLESS      (1 << 2)
    
    /**
     * Codec supports frame reordering. That is, the coded order (the order in which
     * the encoded packets are output by the encoders / stored / input to the
     * decoders) may be different from the presentation order of the corresponding
     * frames.
     *
     * For codecs that do not have this property set, PTS and DTS should always be
     * equal.
     */
    #define AV_CODEC_PROP_REORDER       (1 << 3)
    
     * @ingroup lavc_decoding
    
     * Required number of additionally allocated bytes at the end of the input bitstream for decoding.
    
     * This is mainly needed because some optimized bitstream readers read
     * 32 or 64 bit at once and could read over the end.<br>
    
    Diego Biurrun's avatar
    Diego Biurrun committed
     * Note: If the first 23 bits of the additional bytes are not 0, then damaged
     * MPEG bitstreams could cause overread and segfault.
    
    #define FF_INPUT_BUFFER_PADDING_SIZE 8
    
     * @ingroup lavc_encoding
    
    Diego Biurrun's avatar
    Diego Biurrun committed
     * minimum encoding buffer size
     * Used to avoid some checks during header writing.
    
     */
    #define FF_MIN_BUFFER_SIZE 16384
    
    
     * @ingroup lavc_encoding
    
     * motion estimation type.
    
        ME_ZERO = 1,    ///< no search, that is use 0,0 vector whenever one is needed
    
        ME_EPZS,        ///< enhanced predictive zonal search
        ME_X1,          ///< reserved for experiments
        ME_HEX,         ///< hexagon based search
        ME_UMH,         ///< uneven multi-hexagon search
    
    Loren Merritt's avatar
    Loren Merritt committed
        ME_TESA,        ///< transformed exhaustive search algorithm
    
    /**
     * @ingroup lavc_decoding
     */
    
    Michael Niedermayer's avatar
    Michael Niedermayer committed
    enum AVDiscard{
    
    Diego Biurrun's avatar
    Diego Biurrun committed
        /* We leave some space between them for extensions (drop some
         * keyframes for intra-only or drop just some bidir frames). */
    
        AVDISCARD_NONE    =-16, ///< discard nothing
        AVDISCARD_DEFAULT =  0, ///< discard useless packets like 0 size packets in avi
        AVDISCARD_NONREF  =  8, ///< discard all non reference
        AVDISCARD_BIDIR   = 16, ///< discard all bidirectional frames
        AVDISCARD_NONKEY  = 32, ///< discard all frames except keyframes
        AVDISCARD_ALL     = 48, ///< discard all
    
    Michael Niedermayer's avatar
    Michael Niedermayer committed
    };
    
    
    enum AVAudioServiceType {
        AV_AUDIO_SERVICE_TYPE_MAIN              = 0,
        AV_AUDIO_SERVICE_TYPE_EFFECTS           = 1,
        AV_AUDIO_SERVICE_TYPE_VISUALLY_IMPAIRED = 2,
        AV_AUDIO_SERVICE_TYPE_HEARING_IMPAIRED  = 3,
        AV_AUDIO_SERVICE_TYPE_DIALOGUE          = 4,
        AV_AUDIO_SERVICE_TYPE_COMMENTARY        = 5,
        AV_AUDIO_SERVICE_TYPE_EMERGENCY         = 6,
        AV_AUDIO_SERVICE_TYPE_VOICE_OVER        = 7,
        AV_AUDIO_SERVICE_TYPE_KARAOKE           = 8,
        AV_AUDIO_SERVICE_TYPE_NB                   , ///< Not part of ABI
    };
    
    
    /**
     * @ingroup lavc_encoding
     */
    
    typedef struct RcOverride{
        int start_frame;
        int end_frame;
    
    Diego Biurrun's avatar
    Diego Biurrun committed
        int qscale; // If this is 0 then quality_factor will be used instead.
    
        float quality_factor;
    } RcOverride;
    
    
    #if FF_API_MAX_BFRAMES
    /**
     * @deprecated there is no libavcodec-wide limit on the number of B-frames
     */
    
    /* encoding support
    
    Diego Biurrun's avatar
    Diego Biurrun committed
       These flags can be passed in AVCodecContext.flags before initialization.
       Note: Not everything is supported yet.
    
    Fabrice Bellard's avatar
    Fabrice Bellard committed
    
    
    /**
     * Allow decoders to produce frames with data planes that are not aligned
     * to CPU requirements (e.g. due to cropping).
     */
    #define CODEC_FLAG_UNALIGNED 0x0001
    
    Diego Biurrun's avatar
    Diego Biurrun committed
    #define CODEC_FLAG_QSCALE 0x0002  ///< Use fixed qscale.
    #define CODEC_FLAG_4MV    0x0004  ///< 4 MV per MB allowed / advanced prediction for H.263.
    
    #define CODEC_FLAG_OUTPUT_CORRUPT 0x0008 ///< Output even those frames that might be corrupted
    
    Diego Biurrun's avatar
    Diego Biurrun committed
    #define CODEC_FLAG_QPEL   0x0010  ///< Use qpel MC.
    
    #if FF_API_GMC
    /**
     * @deprecated use the "gmc" private option of the libxvid encoder
     */
    
    Diego Biurrun's avatar
    Diego Biurrun committed
    #define CODEC_FLAG_GMC    0x0020  ///< Use GMC.
    
    #if FF_API_MV0
    /**
     * @deprecated use the flag "mv0" in the "mpv_flags" private option of the
     * mpegvideo encoders
     */
    #define CODEC_FLAG_MV0    0x0040
    #endif
    
    #if FF_API_INPUT_PRESERVED
    
     * @deprecated passing reference-counted frames to the encoders replaces this
     * flag
    
    #define CODEC_FLAG_INPUT_PRESERVED 0x0100
    
    Diego Biurrun's avatar
    Diego Biurrun committed
    #define CODEC_FLAG_PASS1           0x0200   ///< Use internal 2pass ratecontrol in first pass mode.
    #define CODEC_FLAG_PASS2           0x0400   ///< Use internal 2pass ratecontrol in second pass mode.
    #define CODEC_FLAG_GRAY            0x2000   ///< Only decode/encode grayscale.
    
    #if FF_API_EMU_EDGE
    /**
     * @deprecated edges are not used/required anymore. I.e. this flag is now always
     * set.
     */
    #define CODEC_FLAG_EMU_EDGE        0x4000
    #endif
    
    Diego Biurrun's avatar
    Diego Biurrun committed
    #define CODEC_FLAG_PSNR            0x8000   ///< error[?] variables will be set during encoding.
    #define CODEC_FLAG_TRUNCATED       0x00010000 /** Input bitstream might be truncated at a random
                                                      location instead of only at frame boundaries. */
    
    #if FF_API_NORMALIZE_AQP
    /**
     * @deprecated use the flag "naq" in the "mpv_flags" private option of the
     * mpegvideo encoders
     */
    #define CODEC_FLAG_NORMALIZE_AQP  0x00020000
    #endif
    
    Diego Biurrun's avatar
    Diego Biurrun committed
    #define CODEC_FLAG_INTERLACED_DCT 0x00040000 ///< Use interlaced DCT.
    #define CODEC_FLAG_LOW_DELAY      0x00080000 ///< Force low delay.
    #define CODEC_FLAG_GLOBAL_HEADER  0x00400000 ///< Place global headers in extradata instead of every keyframe.
    #define CODEC_FLAG_BITEXACT       0x00800000 ///< Use only bitexact stuff (except (I)DCT).
    
    Diego Biurrun's avatar
    Diego Biurrun committed
    #define CODEC_FLAG_AC_PRED        0x01000000 ///< H.263 advanced intra coding / MPEG-4 AC prediction
    
    Michael Niedermayer's avatar
    Michael Niedermayer committed
    #define CODEC_FLAG_LOOP_FILTER    0x00000800 ///< loop filter
    
    #define CODEC_FLAG_INTERLACED_ME  0x20000000 ///< interlaced motion estimation
    
    #define CODEC_FLAG_CLOSED_GOP     0x80000000
    
    Diego Biurrun's avatar
    Diego Biurrun committed
    #define CODEC_FLAG2_FAST          0x00000001 ///< Allow non spec compliant speedup tricks.
    #define CODEC_FLAG2_NO_OUTPUT     0x00000004 ///< Skip bitstream encoding.
    #define CODEC_FLAG2_LOCAL_HEADER  0x00000008 ///< Place global headers at every keyframe instead of in extradata.
    
    #define CODEC_FLAG2_IGNORE_CROP   0x00010000 ///< Discard cropping information from SPS.
    
    
    #define CODEC_FLAG2_CHUNKS        0x00008000 ///< Input bitstream might be truncated at a packet boundaries instead of only at frame boundaries.
    
     *              Syntax Arithmetic coding (SAC)
     *              Reference Picture Selection
    
     *              Independent Segment Decoding */
    
    /* codec capabilities */
    
    
    Diego Biurrun's avatar
    Diego Biurrun committed
    #define CODEC_CAP_DRAW_HORIZ_BAND 0x0001 ///< Decoder can use draw_horiz_band callback.
    
     * Codec uses get_buffer() for allocating buffers and supports custom allocators.
     * If not set, it might not use get_buffer() at all or use operations that
     * assume the buffer was allocated by avcodec_default_get_buffer.
    
     */
    #define CODEC_CAP_DR1             0x0002
    
    #define CODEC_CAP_TRUNCATED       0x0008
    
    Diego Biurrun's avatar
    Diego Biurrun committed
    /* Codec can export data for HW decoding (XvMC). */
    
    #define CODEC_CAP_HWACCEL         0x0010
    
    #endif /* FF_API_XVMC */
    
     * Encoder or decoder requires flushing with NULL input at the end in order to
     * give the complete and correct output.
     *
     * NOTE: If this flag is not set, the codec is guaranteed to never be fed with
     *       with NULL data. The user can still send NULL data to the public encode
     *       or decode function, but libavcodec will not pass it along to the codec
     *       unless this flag is set.
     *
     * Decoders:
     * The decoder has a non-zero delay and needs to be fed with avpkt->data=NULL,
    
     * avpkt->size=0 at the end to get the delayed data until the decoder no longer
    
     * returns frames.
     *
     * Encoders:
     * The encoder needs to be fed with NULL data at the end of encoding until the
     * encoder no longer returns data.
    
     *
     * NOTE: For encoders implementing the AVCodec.encode2() function, setting this
     *       flag also means that the encoder must set the pts and duration for
     *       each output packet. If this flag is not set, the pts and duration will
     *       be determined by libavcodec from the input frame.
    
    #define CODEC_CAP_DELAY           0x0020
    
    /**
     * Codec can be fed a final frame with a smaller size.
     * This can be used to prevent truncation of the last audio samples.
     */
    #define CODEC_CAP_SMALL_LAST_FRAME 0x0040
    
    #if FF_API_CAP_VDPAU
    
    /**
     * Codec can export data for HW decoding (VDPAU).
     */
    #define CODEC_CAP_HWACCEL_VDPAU    0x0080
    
    /**
     * Codec can output multiple frames per AVPacket
    
     * Normally demuxers return one frame at a time, demuxers which do not do
     * are connected to a parser to split what they return into proper frames.
     * This flag is reserved to the very rare category of codecs which have a
     * bitstream that cannot be split into frames without timeconsuming
     * operations like full decoding. Demuxers carring such bitstreams thus
     * may return multiple frames in a packet. This has many disadvantages like
     * prohibiting stream copy in many cases thus it should only be considered
     * as a last resort.
    
     */
    #define CODEC_CAP_SUBFRAMES        0x0100
    
    /**
     * Codec is experimental and is thus avoided in favor of non experimental
     * encoders
     */
    #define CODEC_CAP_EXPERIMENTAL     0x0200
    
    /**
     * Codec should fill in channel configuration and samplerate instead of container
     */
    #define CODEC_CAP_CHANNEL_CONF     0x0400
    
    #if FF_API_NEG_LINESIZES
    
     * @deprecated no codecs use this capability
    
     */
    #define CODEC_CAP_NEG_LINESIZES    0x0800
    
    /**
     * Codec supports frame-level multithreading.
     */
    #define CODEC_CAP_FRAME_THREADS    0x1000
    
    /**
     * Codec supports slice-based (or partition-based) multithreading.
     */
    #define CODEC_CAP_SLICE_THREADS    0x2000
    
    /**
     * Codec supports changed parameters at any point.
     */
    #define CODEC_CAP_PARAM_CHANGE     0x4000
    
    /**
     * Codec supports avctx->thread_count == 0 (auto).
     */
    #define CODEC_CAP_AUTO_THREADS     0x8000
    
    /**
     * Audio encoder supports receiving a different number of samples in each call.
     */
    #define CODEC_CAP_VARIABLE_FRAME_SIZE 0x10000
    
    Diego Biurrun's avatar
    Diego Biurrun committed
    //The following defines may change, don't expect compatibility if you use them.
    
    Diego Biurrun's avatar
    Diego Biurrun committed
    #define MB_TYPE_INTRA16x16 0x0002 //FIXME H.264-specific
    #define MB_TYPE_INTRA_PCM  0x0004 //FIXME H.264-specific
    
    #define MB_TYPE_16x16      0x0008
    #define MB_TYPE_16x8       0x0010
    #define MB_TYPE_8x16       0x0020
    #define MB_TYPE_8x8        0x0040
    #define MB_TYPE_INTERLACED 0x0080
    
    Diego Biurrun's avatar
    Diego Biurrun committed
    #define MB_TYPE_DIRECT2    0x0100 //FIXME
    
    #define MB_TYPE_ACPRED     0x0200
    #define MB_TYPE_GMC        0x0400
    #define MB_TYPE_SKIP       0x0800
    #define MB_TYPE_P0L0       0x1000
    #define MB_TYPE_P1L0       0x2000
    #define MB_TYPE_P0L1       0x4000
    #define MB_TYPE_P1L1       0x8000
    #define MB_TYPE_L0         (MB_TYPE_P0L0 | MB_TYPE_P1L0)
    #define MB_TYPE_L1         (MB_TYPE_P0L1 | MB_TYPE_P1L1)
    #define MB_TYPE_L0L1       (MB_TYPE_L0   | MB_TYPE_L1)
    #define MB_TYPE_QUANT      0x00010000
    #define MB_TYPE_CBP        0x00020000
    //Note bits 24-31 are reserved for codec specific use (h264 ref0, mpeg1 0mv, ...)
    
    Diego Biurrun's avatar
    Diego Biurrun committed
     * This specifies the area which should be displayed.
     * Note there may be multiple such areas for one frame.
    
     */
    typedef struct AVPanScan{
        /**
    
    Diego Biurrun's avatar
    Diego Biurrun committed
         * id
         * - encoding: Set by user.
         * - decoding: Set by libavcodec.
    
         */
        int id;
    
        /**
         * width and height in 1/16 pel
    
    Diego Biurrun's avatar
    Diego Biurrun committed
         * - encoding: Set by user.
         * - decoding: Set by libavcodec.
    
    Diego Biurrun's avatar
    Diego Biurrun committed
         * position of the top left corner in 1/16 pel for up to 3 fields/frames
         * - encoding: Set by user.
         * - decoding: Set by libavcodec.
    
         */
        int16_t position[3][2];
    }AVPanScan;
    
    
    #define FF_QSCALE_TYPE_MPEG1 0
    #define FF_QSCALE_TYPE_MPEG2 1
    #define FF_QSCALE_TYPE_H264  2
    
    #if FF_API_GET_BUFFER
    
    Michael Niedermayer's avatar
    Michael Niedermayer committed
    #define FF_BUFFER_TYPE_INTERNAL 1
    
    Diego Biurrun's avatar
    Diego Biurrun committed
    #define FF_BUFFER_TYPE_USER     2 ///< direct rendering buffers (image is (de)allocated by user)
    #define FF_BUFFER_TYPE_SHARED   4 ///< Buffer from somewhere else; don't deallocate image (data/base), all other tables are not shared.
    #define FF_BUFFER_TYPE_COPY     8 ///< Just a (modified) copy of some other buffer, don't deallocate anything.
    
    Diego Biurrun's avatar
    Diego Biurrun committed
    #define FF_BUFFER_HINTS_VALID    0x01 // Buffer hints value is meaningful (if 0 ignore).
    #define FF_BUFFER_HINTS_READABLE 0x02 // Codec will read from buffer.
    #define FF_BUFFER_HINTS_PRESERVE 0x04 // User must not alter buffer content.
    #define FF_BUFFER_HINTS_REUSABLE 0x08 // Codec will reuse the buffer (update).
    
    #endif
    
    /**
     * The decoder will keep a reference to the frame and may reuse it later.
     */
    #define AV_GET_BUFFER_FLAG_REF (1 << 0)
    
    /**
     * @defgroup lavc_packet AVPacket
     *
     * Types and functions for working with AVPacket.
     * @{
     */
    
    enum AVPacketSideDataType {
        AV_PKT_DATA_PALETTE,
    
        AV_PKT_DATA_NEW_EXTRADATA,
    
    
        /**
         * An AV_PKT_DATA_PARAM_CHANGE side data packet is laid out as follows:
    
         * u32le param_flags
         * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_COUNT)
         *     s32le channel_count
         * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_LAYOUT)
         *     u64le channel_layout
         * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE)
         *     s32le sample_rate
         * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_DIMENSIONS)
         *     s32le width
         *     s32le height
    
    
        /**
         * An AV_PKT_DATA_H263_MB_INFO side data packet contains a number of
         * structures with info about macroblocks relevant to splitting the
         * packet into smaller packets on macroblock edges (e.g. as for RFC 2190).
         * That is, it does not necessarily contain info about all macroblocks,
         * as long as the distance between macroblocks in the info is smaller
         * than the target payload size.
         * Each MB info structure is 12 bytes, and is laid out as follows:
    
         * u32le bit offset from the start of the packet
         * u8    current quantizer at the start of the macroblock
         * u8    GOB number
         * u16le macroblock address within the GOB
         * u8    horizontal MV predictor
         * u8    vertical MV predictor
         * u8    horizontal MV predictor for block number 3
         * u8    vertical MV predictor for block number 3
    
    
        /**
         * This side data should be associated with an audio stream and contains
         * ReplayGain information in form of the AVReplayGain struct.
         */
        AV_PKT_DATA_REPLAYGAIN,
    
    
        /**
         * This side data contains a 3x3 transformation matrix describing an affine
         * transformation that needs to be applied to the decoded video frames for
         * correct presentation.
         *
         * See libavutil/display.h for a detailed description of the data.
         */
        AV_PKT_DATA_DISPLAYMATRIX,
    
         * This side data should be associated with a video stream and contains
         * Stereoscopic 3D information in form of the AVStereo3D struct.
         */
        AV_PKT_DATA_STEREO3D,
    
    
        /**
         * This side data should be associated with an audio stream and corresponds
         * to enum AVAudioServiceType.
         */
        AV_PKT_DATA_AUDIO_SERVICE_TYPE,
    
    typedef struct AVPacketSideData {
        uint8_t *data;
        int      size;
        enum AVPacketSideDataType type;
    } AVPacketSideData;
    
    
    /**
     * 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.
     *
     * AVPacket is one of the few structs in Libav, 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 or destruct (deprecated)
     * fields. If either is set, the packet data is dynamically allocated and is
     * valid indefinitely until av_free_packet() is called (which in turn calls
     * av_buffer_unref()/the destruct callback to free the data). If neither is set,
     * the packet data is typically backed by some static buffer somewhere and is
     * only valid for a limited time (e.g. until the next read call when demuxing).
    
     *
     * The side data is always allocated with av_malloc() and is freed in
     * av_free_packet().
     */
    
        /**
         * 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
         */
    
        /**
         * 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.
         */