Skip to content
Snippets Groups Projects
avcodec.h 68 KiB
Newer Older
  • Learn to ignore specific revisions
  •      * concatenated stuff from stats_out of pass1 should be placed here
    
         * - encoding: allocated/set/freed by user
         * - decoding: unused
    
         * ratecontrol qmin qmax limiting method.
    
         * 0-> clipping, 1-> use a nice continous function to limit qscale wthin qmin/qmax
    
         * - encoding: set by user.
         * - decoding: unused
    
        float rc_qsquish;
    
        float rc_qmod_amp;
        int rc_qmod_freq;
    
         * ratecontrol override, see RcOverride.
         * - encoding: allocated/set/freed by user.
         * - decoding: unused
    
        RcOverride *rc_override;
        int rc_override_count;
    
         * rate control equation.
         * - encoding: set by user
         * - decoding: unused
    
        char *rc_eq;
    
         * maximum bitrate.
         * - encoding: set by user.
         * - decoding: unused
    
        int rc_max_rate;
    
         * minimum bitrate.
         * - encoding: set by user.
         * - decoding: unused
    
        int rc_min_rate;
    
         * decoder bitstream buffer size.
         * - encoding: set by user.
         * - decoding: unused
    
        int rc_buffer_size;
        float rc_buffer_aggressivity;
    
         * 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
    
         * qscale offset between p and i frames.
         * - encoding: set by user.
         * - decoding: unused
    
         * initial complexity for pass1 ratecontrol.
         * - encoding: set by user.
         * - decoding: unused
    
        float rc_initial_cplx;
    
         * dct algorithm, see FF_DCT_* below.
         * - encoding: set by user
         * - decoding: unused
    
    #define FF_DCT_INT     2
    #define FF_DCT_MMX     3
    #define FF_DCT_MLIB    4
    
    #define FF_DCT_FAAN    6
    
         * luminance masking (0-> disabled).
         * - encoding: set by user
         * - decoding: unused
    
         * temporary complexity masking (0-> disabled).
         * - encoding: set by user
         * - decoding: unused
    
         * spatial complexity masking (0-> disabled).
         * - encoding: set by user
         * - decoding: unused
    
         * p block masking (0-> disabled).
         * - encoding: set by user
         * - decoding: unused
    
         * darkness masking (0-> disabled).
         * - encoding: set by user
         * - decoding: unused
    
        
        /* for binary compatibility */
        int unused;
        
    
         * 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_LIBMPEG2MMX  4
    #define FF_IDCT_PS2          5
    #define FF_IDCT_MLIB         6
    #define FF_IDCT_ARM          7
    
         * slice count.
         * - encoding: set by lavc
         * - decoding: set by user (or 0)
    
         * slice offsets in the frame in bytes.
         * - encoding: set/allocated by lavc
         * - decoding: set/allocated by user (or NULL)
    
         * error concealment flags.
         * - encoding: unused
         * - decoding: set by user
    
         */
        int error_concealment;
    #define FF_EC_GUESS_MVS   1
    #define FF_EC_DEBLOCK     2
    
    
    Zdenek Kabelac's avatar
    Zdenek Kabelac committed
        /**
    
         * dsp_mask could be add used to disable unwanted CPU features
    
    Zdenek Kabelac's avatar
    Zdenek Kabelac committed
         * CPU features (i.e. MMX, SSE. ...)
    
         *
         * with FORCE flag you may instead enable given CPU features
         * (Dangerous: usable in case of misdetection, improper usage however will
         * result into program crash)
         */
        unsigned dsp_mask;
    #define FF_MM_FORCE	0x80000000 /* force usage of selected flags (OR) */
        /* lower 16 bits - CPU features */
    #ifdef HAVE_MMX
    #define FF_MM_MMX	0x0001 /* standard MMX */
    #define FF_MM_3DNOW	0x0004 /* AMD 3DNOW */
    #define FF_MM_MMXEXT	0x0002 /* SSE integer functions or AMD MMX ext */
    #define FF_MM_SSE	0x0008 /* SSE functions */
    #define FF_MM_SSE2	0x0010 /* PIV SSE2 functions */
    
    #define FF_MM_3DNOWEXT	0x0020 /* AMD 3DNowExt */
    
    #endif /* HAVE_MMX */
    
    Michael Niedermayer's avatar
    Michael Niedermayer committed
    
        /**
    
         * bits per sample/pixel from the demuxer (needed for huffyuv).
         * - encoding: set by lavc
         * - decoding: set by user
    
    Michael Niedermayer's avatar
    Michael Niedermayer committed
         */
         int bits_per_sample;
        
        /**
    
         * prediction method (needed for huffyuv).
         * - encoding: set by user
         * - decoding: unused
    
    Michael Niedermayer's avatar
    Michael Niedermayer committed
         */
         int prediction_method;
    #define FF_PRED_LEFT   0
    #define FF_PRED_PLANE  1
    #define FF_PRED_MEDIAN 2
    
    Michael Niedermayer's avatar
    Michael Niedermayer committed
         * sample aspect ratio (0 if unknown).
    
         * numerator and denominator must be relative prime and smaller then 256 for some video standards
    
         * - encoding: set by user.
         * - decoding: set by lavc.
    
    Michael Niedermayer's avatar
    Michael Niedermayer committed
        AVRational sample_aspect_ratio;
    
    Michael Niedermayer's avatar
    Michael Niedermayer committed
    
        /**
    
         * the picture in the bitstream.
         * - encoding: set by lavc
         * - decoding: set by lavc
    
    Michael Niedermayer's avatar
    Michael Niedermayer committed
         */
    
        AVFrame *coded_frame;
    
         * 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
    #define FF_DEBUG_MV        32
    
    #define FF_DEBUG_SKIP      0x00000080
    #define FF_DEBUG_STARTCODE 0x00000100
    #define FF_DEBUG_PTS       0x00000200
    
    #define FF_DEBUG_ER        0x00000400
    
    #define FF_DEBUG_MMCO      0x00000800
    
    #define FF_DEBUG_BUGS      0x00001000
    
    #define FF_DEBUG_VIS_QP    0x00002000
    #define FF_DEBUG_VIS_MB_TYPE 0x00004000
    
        /**
         * debug.
         * - 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
    
    
         * error.
         * - encoding: set by lavc if flags&CODEC_FLAG_PSNR
         * - decoding: unused
    
         * minimum MB quantizer.
         * - encoding: set by user.
         * - decoding: unused
    
    Michael Niedermayer's avatar
    Michael Niedermayer committed
         */
        int mb_qmin;
    
        /**
    
         * maximum MB quantizer.
         * - encoding: set by user.
         * - decoding: unused
    
    Michael Niedermayer's avatar
    Michael Niedermayer committed
         */
        int mb_qmax;
    
         * motion estimation compare function.
         * - encoding: set by user.
         * - decoding: unused
    
    Michael Niedermayer's avatar
    Michael Niedermayer committed
         */
        int me_cmp;
        /**
    
         * subpixel motion estimation compare function.
         * - encoding: set by user.
         * - decoding: unused
    
    Michael Niedermayer's avatar
    Michael Niedermayer committed
         */
        int me_sub_cmp;
        /**
    
         * macroblock compare function (not supported yet).
         * - encoding: set by user.
         * - decoding: unused
    
    Michael Niedermayer's avatar
    Michael Niedermayer committed
         */
        int mb_cmp;
    
        /**
         * interlaced dct compare function
         * - encoding: set by user.
         * - decoding: unused
         */
        int ildct_cmp;
    
    Michael Niedermayer's avatar
    Michael Niedermayer committed
    #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_W53  11
    #define FF_CMP_W97  12
    
    #define FF_CMP_DCTMAX 13
    
    Michael Niedermayer's avatar
    Michael Niedermayer committed
    #define FF_CMP_CHROMA 256
        
        /**
    
         * ME diamond size & shape.
         * - encoding: set by user.
         * - decoding: unused
    
    Michael Niedermayer's avatar
    Michael Niedermayer committed
         */
        int dia_size;
    
         * amount of previous MV predictors (2a+1 x 2a+1 square).
         * - encoding: set by user.
         * - decoding: unused
    
         */
        int last_predictor_count;
    
         * pre pass for motion estimation.
         * - encoding: set by user.
         * - decoding: unused
    
         */
        int pre_me;
    
         * motion estimation pre pass compare function.
         * - encoding: set by user.
         * - decoding: unused
    
         */
        int me_pre_cmp;
    
         * ME pre pass diamond size & shape.
         * - encoding: set by user.
         * - decoding: unused
    
         */
        int pre_dia_size;
    
    
    Michael Niedermayer's avatar
    Michael Niedermayer committed
        /**
    
         * subpel ME quality.
         * - encoding: set by user.
         * - decoding: unused
    
    Michael Niedermayer's avatar
    Michael Niedermayer committed
         */
        int me_subpel_quality;
    
    
    Michael Niedermayer's avatar
    Michael Niedermayer committed
        /**
    
         * callback to negotiate the pixelFormat.
    
    Michael Niedermayer's avatar
    Michael Niedermayer committed
         * @param fmt is the list of formats which are supported by the codec,
         * its terminated by -1 as 0 is a valid format, the formats are ordered by quality
         * the first is allways the native one
         * @return the choosen format
    
         * - encoding: unused
         * - decoding: set by user, if not set then the native format will always be choosen
    
    Michael Niedermayer's avatar
    Michael Niedermayer committed
         */
    
    Ivan Kalvachev's avatar
    Ivan Kalvachev committed
        enum PixelFormat (*get_format)(struct AVCodecContext *s, const enum PixelFormat * fmt);
    
    
        /**
         * DTG active format information (additionnal aspect ratio
         * information only used in DVB MPEG2 transport streams). 0 if
         * not set.
         * 
    
         * - encoding: unused.
         * - decoding: set by decoder 
    
         */
        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
    
    
        /**
         * Maximum motion estimation search range in subpel units.
         * if 0 then no limit
         * 
    
         * - encoding: set by user.
         * - decoding: unused.
    
    Zdenek Kabelac's avatar
    Zdenek Kabelac committed
        int me_range;
    
        /**
         * frame_rate_base.
         * for variable fps this is 1
         * - encoding: set by user.
         * - decoding: set by lavc.
         * @todo move this after frame_rate
         */
    
    
        int frame_rate_base;
        /**
         * intra quantizer bias.
         * - encoding: set by user.
         * - decoding: unused
         */
        int intra_quant_bias;
    #define FF_DEFAULT_QUANT_BIAS 999999
        
        /**
         * inter quantizer bias.
         * - encoding: set by user.
         * - decoding: unused
         */
        int inter_quant_bias;
    
    
        /**
         * color table ID.
         * - encoding: unused.
         * - decoding: which clrtable should be used for 8bit RGB images
         *             table have to be stored somewhere FIXME
         */
        int color_table_id;
    
        /**
         * internal_buffer count. 
         * Dont touch, used by lavc default_get_buffer()
         */
        int internal_buffer_count;
        
        /**
         * internal_buffers. 
         * Dont touch, used by lavc default_get_buffer()
         */
        void *internal_buffer;
    
    
    #define FF_LAMBDA_SHIFT 7
    #define FF_LAMBDA_SCALE (1<<FF_LAMBDA_SHIFT)
    #define FF_QP2LAMBDA 118 ///< factor to convert from H.263 QP to lambda
    #define FF_LAMBDA_MAX (256*128-1)
    
    #define FF_QUALITY_SCALE FF_LAMBDA_SCALE //FIXME maybe remove
    
    Michael Niedermayer's avatar
    Michael Niedermayer committed
        /**
         * global quality for codecs which cannot change it per frame.
         * this should be proportional to MPEG1/2/4 qscale.
         * - encoding: set by user.
         * - decoding: unused
         */
        int global_quality;
    
    Michael Niedermayer's avatar
    Michael Niedermayer committed
        
    #define FF_CODER_TYPE_VLC   0
    #define FF_CODER_TYPE_AC    1
        /**
         * coder type
         * - encoding: set by user.
         * - decoding: unused
         */
        int coder_type;
    
        /**
         * context model
         * - encoding: set by user.
         * - decoding: unused
         */
        int context_model;
    
        
        /**
         * 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 (MPEG2 field pics)
    #define SLICE_FLAG_ALLOW_PLANE    0x0004 ///< allow draw_horiz_band() with 1 component at a time (SVQ1)
    
    
    Ivan Kalvachev's avatar
    Ivan Kalvachev committed
        /**
         * XVideo Motion Acceleration
         * - encoding: forbidden
         * - decoding: set by decoder
         */
        int xvmc_acceleration;
    
        
        /**
         * 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 distoration
    
    
        /**
         * custom intra quantization matrix
         * - encoding: set by user, can be NULL
         * - decoding: set by lavc
         */
        uint16_t *intra_matrix;
    
        /**
         * custom inter quantization matrix
         * - encoding: set by user, can be NULL
         * - decoding: set by lavc
         */
        uint16_t *inter_matrix;
    
        /**
         * fourcc from the AVI stream header (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A').
         * this is used to workaround some encoder bugs
         * - encoding: unused
         * - decoding: set by user, will be converted to upper case by lavc during init
         */
        unsigned int stream_codec_tag;
    
    
        /**
         * scene change detection threshold.
         * 0 is default, larger means fewer detected scene changes
         * - encoding: set by user.
         * - decoding: unused
         */
        int scenechange_threshold;
    
    
        /**
         * minimum lagrange multipler
         * - encoding: set by user.
         * - decoding: unused
         */
        int lmin;
    
        /**
         * maximum lagrange multipler
         * - encoding: set by user.
         * - decoding: unused
         */
        int lmax;
    
    
        /**
         * Palette control structure
         * - encoding: ??? (no palette-enabled encoder yet)
         * - decoding: set by user.
         */
        struct AVPaletteControl *palctrl;
    
    
        /**
         * noise reduction strength
         * - encoding: set by user.
         * - decoding: unused
         */
        int noise_reduction;
    
         * called at the beginning of a frame to get cr buffer for it.
         * buffer type (size, hints) must be the same. lavc won't check it.
         * lavc will pass previous buffer in pic, function should return
         * same buffer or new buffer with old frame "painted" into it.
         * if pic.data[0] == NULL must behave like get_buffer().
    
         * - encoding: unused
    
         * - decoding: set by lavc, user can override
    
        int (*reget_buffer)(struct AVCodecContext *c, AVFrame *pic);
    
    
        /**
         * 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;
    
        /**
         *
         * - encoding: set by user.
         * - decoding: unused
         */
        int inter_threshold;
    
        /**
         * CODEC_FLAG2_*.
         * - encoding: set by user.
         * - decoding: set by user.
         */
        int flags2;
    
    
        /**
         * simulates errors in the bitstream to test error concealment.
         * - encoding: set by user.
         * - decoding: unused.
         */
        int error_rate;
    
        
        /**
         * MP3 antialias algorithm, see FF_AA_* below.
         * - encoding: unused
         * - decoding: set by user
         */
        int antialias_algo;
    #define FF_AA_AUTO    0
    #define FF_AA_FASTINT 1 //not implemented yet
    #define FF_AA_INT     2
    #define FF_AA_FLOAT   3
    
        /**
         * Quantizer noise shaping.
         * - encoding: set by user
         * - decoding: unused
         */
        int quantizer_noise_shaping;
    
    
        /**
         * Thread count.
         * is used to decide how many independant tasks should be passed to execute()
         * - encoding: set by user
         * - decoding: set by user
         */
        int thread_count;
        
        /**
         * the codec may call this to execute several independant 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 lavc, user can override
         * - decoding: set by lavc, user can override
         */
        int (*execute)(struct AVCodecContext *c, int (*func)(struct AVCodecContext *c2, void *arg), void **arg2, int *ret, int count);
        
        /**
         * Thread opaque.
         * can be used by execute() to store some per AVCodecContext stuff.
         * - encoding: set by execute()
         * - decoding: set by execute()
         */
        void *thread_opaque;
    
         * Motion estimation threshold. under which no motion estimation is 
         * performed, but instead the user specified motion vectors are used
    
         int me_threshold;
    
    
        /**
         * Macroblock threshold. under which the user specified macroblock types will be used
         * - encoding: set by user
         * - decoding: unused
         */
         int mb_threshold;
    
    Michael Niedermayer's avatar
    Michael Niedermayer committed
         * precision of the intra dc coefficient - 8.
    
         * - encoding: set by user
         * - decoding: unused
         */
         int intra_dc_precision;
    
    Michael Niedermayer's avatar
    Michael Niedermayer committed
    
        /**
         * noise vs. sse weight for the nsse comparsion function.
         * - encoding: set by user
         * - decoding: unused
         */
         int nsse_weight;
    
    
        /**
         * number of macroblock rows at the top which are skiped.
         * - encoding: unused
         * - decoding: set by user
         */
         int skip_top;
    
        /**
         * number of macroblock rows at the bottom which are skiped.
         * - encoding: unused
         * - decoding: set by user
         */
         int skip_bottom;
    
    
        /**
         * profile
         * - encoding: set by user
         * - decoding: set by lavc
         */
         int profile;
    #define FF_PROFILE_UNKNOWN -99
    
        /**
         * level
         * - encoding: set by user
         * - decoding: set by lavc
         */
         int level;
    #define FF_LEVEL_UNKNOWN -99
    
    
        /**
         * low resolution decoding. 1-> 1/2 size, 2->1/4 size
         * - encoding: unused
         * - decoding: set by user
         */
         int lowres;
    
    Michael Niedermayer's avatar
    Michael Niedermayer committed
         * bitsream width / height. may be different from width/height if lowres
    
         * or other things are used
         * - encoding: unused
         * - decoding: set by user before init if known, codec should override / dynamically change if needed
         */
        int coded_width, coded_height;
    
    Michael Niedermayer's avatar
    Michael Niedermayer committed
    
        /**
         * frame skip threshold
         * - encoding: set by user
         * - decoding: unused
         */
        int frame_skip_threshold;
    
        /**
         * frame skip factor
         * - encoding: set by user
         * - decoding: unused
         */
        int frame_skip_factor;
    
    
        /**
         * frame skip exponent
         * - encoding: set by user
         * - decoding: unused
         */
        int frame_skip_exp;
    
        /**
         * frame skip comparission function
         * - encoding: set by user.
         * - decoding: unused
         */
        int frame_skip_cmp;
    
    Fabrice Bellard's avatar
    Fabrice Bellard committed
    } AVCodecContext;
    
    
    typedef struct AVOption {
        /** options' name */
        const char *name; /* if name is NULL, it indicates a link to next */
    
        /** short English text help or const struct AVOption* subpointer */
        const char *help; //	const struct AVOption* sub;
    
        /** offset to context structure where the parsed value should be stored */
        int offset;
        /** options' type */
        int type;
    
    #define FF_OPT_TYPE_BOOL 1      ///< boolean - true,1,on  (or simply presence)
    #define FF_OPT_TYPE_DOUBLE 2    ///< double
    #define FF_OPT_TYPE_INT 3       ///< integer
    #define FF_OPT_TYPE_STRING 4    ///< string (finished with \0)
    #define FF_OPT_TYPE_MASK 0x1f	///< mask for types - upper bits are various flags
    
    //#define FF_OPT_TYPE_EXPERT 0x20 // flag for expert option
    #define FF_OPT_TYPE_FLAG (FF_OPT_TYPE_BOOL | 0x40)
    #define FF_OPT_TYPE_RCOVERRIDE (FF_OPT_TYPE_STRING | 0x80)
        /** min value  (min == max   ->  no limits) */
        double min;
        /** maximum value for double/int */
        double max;
        /** default boo [0,1]l/double/int value */
        double defval;
        /**
         * default string value (with optional semicolon delimited extra option-list
         * i.e.   option1;option2;option3
         * defval might select other then first argument as default
         */
        const char *defstr;
    #define FF_OPT_MAX_DEPTH 10
    } AVOption;
    
    
    /**
     * Parse option(s) and sets fields in passed structure
     * @param strct	structure where the parsed results will be written
     * @param list  list with AVOptions
     * @param opts	string with options for parsing
     */
    int avoption_parse(void* strct, const AVOption* list, const char* opts);
    
    
    
    Fabrice Bellard's avatar
    Fabrice Bellard committed
    typedef struct AVCodec {
    
        const char *name;
    
    Zdenek Kabelac's avatar
    Zdenek Kabelac committed
        enum CodecType type;
    
    Michael Niedermayer's avatar
    Michael Niedermayer committed
        enum CodecID id;
    
    Fabrice Bellard's avatar
    Fabrice Bellard committed
        int priv_data_size;
        int (*init)(AVCodecContext *);
    
        int (*encode)(AVCodecContext *, uint8_t *buf, int buf_size, void *data);
    
    Fabrice Bellard's avatar
    Fabrice Bellard committed
        int (*close)(AVCodecContext *);
    
    Michael Niedermayer's avatar
    Michael Niedermayer committed
        int (*decode)(AVCodecContext *, void *outdata, int *outdata_size,
    
                      uint8_t *buf, int buf_size);
    
        int capabilities;
    
        const AVOption *options;
    
    Fabrice Bellard's avatar
    Fabrice Bellard committed
        struct AVCodec *next;
    
    Michael Niedermayer's avatar
    Michael Niedermayer committed
        void (*flush)(AVCodecContext *);
    
    Zdenek Kabelac's avatar
    Zdenek Kabelac committed
        const AVRational *supported_framerates; ///array of supported framerates, or NULL if any, array is terminated by {0,0}
    
        const enum PixelFormat *pix_fmts;       ///array of supported pixel formats, or NULL if unknown, array is terminanted by -1
    
    Fabrice Bellard's avatar
    Fabrice Bellard committed
    } AVCodec;
    
    
     * four components are given, that's all.
     * the last component is alpha
     */
    
    Fabrice Bellard's avatar
    Fabrice Bellard committed
    typedef struct AVPicture {
    
        uint8_t *data[4];
    
    Michael Niedermayer's avatar
    Michael Niedermayer committed
        int linesize[4];       ///< number of bytes per line
    
    Fabrice Bellard's avatar
    Fabrice Bellard committed
    } AVPicture;
    
    
    /**
     * AVPaletteControl
     * This structure defines a method for communicating palette changes
     * between and demuxer and a decoder.
     */
    
    #define AVPALETTE_SIZE 1024
    
    Michael Niedermayer's avatar
    Michael Niedermayer committed
    #define AVPALETTE_COUNT 256
    
    typedef struct AVPaletteControl {
    
        /* demuxer sets this to 1 to indicate the palette has changed;
         * decoder resets to 0 */
        int palette_changed;
    
    
        /* 4-byte ARGB palette entries, stored in native byte order; note that
         * the individual palette components should be on a 8-bit scale; if
         * the palette data comes from a IBM VGA native format, the component
         * data is probably 6 bits in size and needs to be scaled */
    
        unsigned int palette[AVPALETTE_COUNT];
    
    
    } AVPaletteControl;
    
    
    Fabrice Bellard's avatar
    Fabrice Bellard committed
    extern AVCodec ac3_encoder;
    extern AVCodec mp2_encoder;
    
    extern AVCodec mp3lame_encoder;
    
    extern AVCodec oggvorbis_encoder;
    
    Fabrice Bellard's avatar
    Fabrice Bellard committed
    extern AVCodec mpeg1video_encoder;
    
    Michael Niedermayer's avatar
    Michael Niedermayer committed
    extern AVCodec mpeg2video_encoder;
    
    Fabrice Bellard's avatar
    Fabrice Bellard committed
    extern AVCodec h263_encoder;
    extern AVCodec h263p_encoder;
    
    Fabrice Bellard's avatar
    Fabrice Bellard committed
    extern AVCodec rv10_encoder;
    
    Michael Niedermayer's avatar
    Michael Niedermayer committed
    extern AVCodec rv20_encoder;
    
    Fabrice Bellard's avatar
    Fabrice Bellard committed
    extern AVCodec mjpeg_encoder;
    
    extern AVCodec png_encoder;
    
    extern AVCodec ppm_encoder;
    extern AVCodec pgm_encoder;
    extern AVCodec pgmyuv_encoder;
    extern AVCodec pbm_encoder;
    extern AVCodec pam_encoder;
    
    extern AVCodec mpeg4_encoder;
    
    extern AVCodec msmpeg4v1_encoder;
    extern AVCodec msmpeg4v2_encoder;
    extern AVCodec msmpeg4v3_encoder;
    
    Michael Niedermayer's avatar
    Michael Niedermayer committed
    extern AVCodec wmv1_encoder;
    extern AVCodec wmv2_encoder;
    
    Michael Niedermayer's avatar
    Michael Niedermayer committed
    extern AVCodec huffyuv_encoder;
    
    extern AVCodec ffvhuff_encoder;
    
    extern AVCodec h264_encoder;
    
    Michael Niedermayer's avatar
    Michael Niedermayer committed
    extern AVCodec asv1_encoder;
    
    Michael Niedermayer's avatar
    Michael Niedermayer committed
    extern AVCodec asv2_encoder;
    
    Michael Niedermayer's avatar
    Michael Niedermayer committed
    extern AVCodec vcr1_encoder;
    
    extern AVCodec snow_encoder;
    
    extern AVCodec zlib_encoder;
    
    extern AVCodec sonic_encoder;
    extern AVCodec sonic_ls_encoder;
    
    extern AVCodec svq1_encoder;
    
    Fabrice Bellard's avatar
    Fabrice Bellard committed
    
    extern AVCodec h263_decoder;
    
    extern AVCodec mpeg4_decoder;
    
    extern AVCodec msmpeg4v1_decoder;
    extern AVCodec msmpeg4v2_decoder;
    extern AVCodec msmpeg4v3_decoder;
    
    extern AVCodec wmv1_decoder;
    
    Michael Niedermayer's avatar
    Michael Niedermayer committed
    extern AVCodec wmv2_decoder;
    
    extern AVCodec mpeg1video_decoder;
    extern AVCodec mpeg2video_decoder;
    
    Ivan Kalvachev's avatar
    Ivan Kalvachev committed
    extern AVCodec mpegvideo_decoder;
    
    Ivan Kalvachev's avatar
    Ivan Kalvachev committed
    extern AVCodec mpeg_xvmc_decoder;
    
    Fabrice Bellard's avatar
    Fabrice Bellard committed
    extern AVCodec h263i_decoder;
    
    Fabrice Bellard's avatar
    Fabrice Bellard committed
    extern AVCodec rv10_decoder;
    
    Michael Niedermayer's avatar
    Michael Niedermayer committed
    extern AVCodec rv20_decoder;
    
    extern AVCodec rv30_decoder;
    extern AVCodec rv40_decoder;
    
    Nick Kurshev's avatar
    Nick Kurshev committed
    extern AVCodec svq1_decoder;
    
    extern AVCodec svq3_decoder;
    
    Fabrice Bellard's avatar
    Fabrice Bellard committed
    extern AVCodec dvvideo_decoder;
    
    Fabrice Bellard's avatar
    Fabrice Bellard committed
    extern AVCodec wmav1_decoder;
    extern AVCodec wmav2_decoder;
    
    extern AVCodec mjpeg_decoder;
    
    extern AVCodec mjpegb_decoder;
    
    extern AVCodec sp5x_decoder;
    
    extern AVCodec png_decoder;
    
    extern AVCodec mp2_decoder;
    
    Fabrice Bellard's avatar
    Fabrice Bellard committed
    extern AVCodec mp3_decoder;
    
    extern AVCodec mace3_decoder;
    extern AVCodec mace6_decoder;
    
    Michael Niedermayer's avatar
    Michael Niedermayer committed
    extern AVCodec huffyuv_decoder;
    
    extern AVCodec ffvhuff_decoder;
    
    extern AVCodec oggvorbis_decoder;
    
    extern AVCodec h264_decoder;
    
    extern AVCodec indeo3_decoder;
    
    extern AVCodec vp3_decoder;
    
    extern AVCodec amr_nb_decoder;
    
    Zdenek Kabelac's avatar
    Zdenek Kabelac committed
    extern AVCodec amr_nb_encoder;
    
    extern AVCodec amr_wb_encoder;
    extern AVCodec amr_wb_decoder;
    
    extern AVCodec aac_decoder;
    extern AVCodec mpeg4aac_decoder;
    
    Michael Niedermayer's avatar
    Michael Niedermayer committed
    extern AVCodec asv1_decoder;
    
    Michael Niedermayer's avatar
    Michael Niedermayer committed
    extern AVCodec asv2_decoder;
    
    Michael Niedermayer's avatar
    Michael Niedermayer committed
    extern AVCodec vcr1_decoder;
    
    Alex Beregszaszi's avatar
    Alex Beregszaszi committed
    extern AVCodec cljr_decoder;
    
    extern AVCodec snow_decoder;
    
    Michael Niedermayer's avatar
    Michael Niedermayer committed
    extern AVCodec fourxm_decoder;
    
    extern AVCodec roq_decoder;
    extern AVCodec interplay_video_decoder;
    
    extern AVCodec xan_wc3_decoder;
    
    extern AVCodec rpza_decoder;
    extern AVCodec cinepak_decoder;
    extern AVCodec msrle_decoder;
    extern AVCodec msvideo1_decoder;
    
    extern AVCodec vqa_decoder;
    
    extern AVCodec idcin_decoder;
    
    Roberto Togni's avatar
    Roberto Togni committed
    extern AVCodec eightbps_decoder;
    
    extern AVCodec smc_decoder;
    
    Mike Melanson's avatar
    Mike Melanson committed
    extern AVCodec flic_decoder;
    
    extern AVCodec vmdvideo_decoder;
    extern AVCodec vmdaudio_decoder;
    
    extern AVCodec truemotion1_decoder;
    
    extern AVCodec mszh_decoder;
    extern AVCodec zlib_decoder;
    
    extern AVCodec ra_144_decoder;
    extern AVCodec ra_288_decoder;
    
    extern AVCodec roq_dpcm_decoder;
    extern AVCodec interplay_dpcm_decoder;
    
    extern AVCodec xan_dpcm_decoder;
    
    extern AVCodec sol_dpcm_decoder;
    
    Michael Niedermayer's avatar
    Michael Niedermayer committed
    extern AVCodec flac_decoder;
    
    extern AVCodec ulti_decoder;
    
    extern AVCodec qpeg_decoder;
    
    Fabrice Bellard's avatar
    Fabrice Bellard committed
    
    
    Fabrice Bellard's avatar
    Fabrice Bellard committed
    /* pcm codecs */
    #define PCM_CODEC(id, name) \
    extern AVCodec name ## _decoder; \
    
    Fabrice Bellard's avatar
    Fabrice Bellard committed
    
    PCM_CODEC(CODEC_ID_PCM_S16LE, pcm_s16le);
    PCM_CODEC(CODEC_ID_PCM_S16BE, pcm_s16be);
    PCM_CODEC(CODEC_ID_PCM_U16LE, pcm_u16le);
    PCM_CODEC(CODEC_ID_PCM_U16BE, pcm_u16be);
    PCM_CODEC(CODEC_ID_PCM_S8, pcm_s8);
    PCM_CODEC(CODEC_ID_PCM_U8, pcm_u8);
    PCM_CODEC(CODEC_ID_PCM_ALAW, pcm_alaw);
    PCM_CODEC(CODEC_ID_PCM_MULAW, pcm_mulaw);
    
    
    /* adpcm codecs */
    
    PCM_CODEC(CODEC_ID_ADPCM_IMA_QT, adpcm_ima_qt);
    PCM_CODEC(CODEC_ID_ADPCM_IMA_WAV, adpcm_ima_wav);
    
    PCM_CODEC(CODEC_ID_ADPCM_IMA_DK3, adpcm_ima_dk3);
    PCM_CODEC(CODEC_ID_ADPCM_IMA_DK4, adpcm_ima_dk4);
    
    PCM_CODEC(CODEC_ID_ADPCM_IMA_WS, adpcm_ima_ws);
    
    PCM_CODEC(CODEC_ID_ADPCM_SMJPEG, adpcm_ima_smjpeg);
    
    PCM_CODEC(CODEC_ID_ADPCM_MS, adpcm_ms);
    
    Michael Niedermayer's avatar
    Michael Niedermayer committed
    PCM_CODEC(CODEC_ID_ADPCM_4XM, adpcm_4xm);
    
    PCM_CODEC(CODEC_ID_ADPCM_XA, adpcm_xa);
    PCM_CODEC(CODEC_ID_ADPCM_ADX, adpcm_adx);
    
    PCM_CODEC(CODEC_ID_ADPCM_EA, adpcm_ea);
    
    PCM_CODEC(CODEC_ID_ADPCM_G726, adpcm_g726);
    
    PCM_CODEC(CODEC_ID_ADPCM_CT, adpcm_ct);
    
    Fabrice Bellard's avatar
    Fabrice Bellard committed
    #undef PCM_CODEC
    
    /* dummy raw video codec */
    
    extern AVCodec rawvideo_encoder;
    extern AVCodec rawvideo_decoder;
    
    Fabrice Bellard's avatar
    Fabrice Bellard committed