Skip to content
Snippets Groups Projects
avcodec.h 89.3 KiB
Newer Older
  • Learn to ignore specific revisions
  • 
        /**
         * multiplied by qscale for each frame and added to scene_change_score
         * - encoding: set by user.
         * - decoding: unused
         */
        int scenechange_factor;
    
    
        /**
         *
         * note: value depends upon the compare functin used for fullpel ME
         * - encoding: set by user.
         * - decoding: unused
         */
        int mv0_threshold;
    
    
        /**
         * adjusts sensitivity of b_frame_strategy 1
         * - encoding: set by user.
         * - decoding: unused
         */
        int b_sensitivity;
    
    
        /**
         * - encoding: set by user.
         * - decoding: unused
         */
        int compression_level;
    #define FF_COMPRESSION_DEFAULT -1
    
        /**
         * sets whether to use LPC mode - used by FLAC encoder
         * - encoding: set by user.
         * - decoding: unused.
         */
        int use_lpc;
    
        /**
         * LPC coefficient precision - used by FLAC encoder
         * - encoding: set by user.
         * - decoding: unused.
         */
        int lpc_coeff_precision;
    
        /**
         * - encoding: set by user.
         * - decoding: unused.
         */
        int min_prediction_order;
    
        /**
         * - encoding: set by user.
         * - decoding: unused.
         */
        int max_prediction_order;
    
        /**
         * search method for selecting prediction order
         * - encoding: set by user.
         * - decoding: unused.
         */
        int prediction_order_method;
    
        /**
         * - encoding: set by user.
         * - decoding: unused.
         */
        int min_partition_order;
    
        /**
         * - encoding: set by user.
         * - decoding: unused.
         */
        int max_partition_order;
    
    
        /**
         * GOP timecode frame start number, in non drop frame format
         * - encoding: set by user.
         * - decoding: unused.
         */
        int64_t timecode_frame_start;
    
    Fabrice Bellard's avatar
    Fabrice Bellard committed
    } AVCodecContext;
    
    
    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;
    
    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.
    
     * this is totally broken, palette changes should be sent as AVPackets
    
    #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];
    
    typedef struct AVSubtitleRect {
    
        uint16_t x;
        uint16_t y;
        uint16_t w;
        uint16_t h;
        uint16_t nb_colors;
        int linesize;
        uint32_t *rgba_palette;
        uint8_t *bitmap;
    
    } AVSubtitleRect;
    
    typedef struct AVSubtitle {
        uint16_t format; /* 0 = graphics */
        uint32_t start_display_time; /* relative to packet pts, in ms */
        uint32_t end_display_time; /* relative to packet pts, in ms */
        uint32_t num_rects;
        AVSubtitleRect *rects;
    
    } AVSubtitle;
    
    
    Fabrice Bellard's avatar
    Fabrice Bellard committed
    extern AVCodec ac3_encoder;
    
    extern AVCodec amr_nb_encoder;
    extern AVCodec amr_wb_encoder;
    extern AVCodec asv1_encoder;
    extern AVCodec asv2_encoder;
    
    extern AVCodec bmp_encoder;
    
    extern AVCodec dvvideo_encoder;
    
    extern AVCodec ffv1_encoder;
    extern AVCodec ffvhuff_encoder;
    
    extern AVCodec flashsv_encoder;
    extern AVCodec flv_encoder;
    
    extern AVCodec gif_encoder;
    
    Fabrice Bellard's avatar
    Fabrice Bellard committed
    extern AVCodec h263_encoder;
    extern AVCodec h263p_encoder;
    
    extern AVCodec h264_encoder;
    extern AVCodec huffyuv_encoder;
    
    extern AVCodec jpegls_encoder;
    
    extern AVCodec libgsm_encoder;
    
    extern AVCodec libgsm_ms_encoder;
    
    extern AVCodec libtheora_encoder;
    
    extern AVCodec ljpeg_encoder;
    extern AVCodec mdec_encoder;
    extern AVCodec mjpeg_encoder;
    extern AVCodec mp2_encoder;
    extern AVCodec mp3lame_encoder;
    extern AVCodec mpeg1video_encoder;
    extern AVCodec mpeg2video_encoder;
    
    extern AVCodec mpeg4_encoder;
    
    extern AVCodec msmpeg4v1_encoder;
    extern AVCodec msmpeg4v2_encoder;
    extern AVCodec msmpeg4v3_encoder;
    
    extern AVCodec oggvorbis_encoder;
    extern AVCodec pam_encoder;
    extern AVCodec pbm_encoder;
    extern AVCodec pgm_encoder;
    extern AVCodec pgmyuv_encoder;
    extern AVCodec png_encoder;
    extern AVCodec ppm_encoder;
    extern AVCodec rv10_encoder;
    extern AVCodec rv20_encoder;
    
    extern AVCodec snow_encoder;
    
    extern AVCodec sonic_encoder;
    extern AVCodec sonic_ls_encoder;
    
    extern AVCodec svq1_encoder;
    
    extern AVCodec vcr1_encoder;
    extern AVCodec vorbis_encoder;
    
    Michael Niedermayer's avatar
    Michael Niedermayer committed
    extern AVCodec wmav1_encoder;
    extern AVCodec wmav2_encoder;
    
    extern AVCodec wmv1_encoder;
    extern AVCodec wmv2_encoder;
    
    extern AVCodec xvid_encoder;
    extern AVCodec zlib_encoder;
    
    extern AVCodec zmbv_encoder;
    
    Fabrice Bellard's avatar
    Fabrice Bellard committed
    
    
    extern AVCodec aac_decoder;
    extern AVCodec aasc_decoder;
    extern AVCodec alac_decoder;
    extern AVCodec amr_nb_decoder;
    extern AVCodec amr_wb_decoder;
    extern AVCodec asv1_decoder;
    extern AVCodec asv2_decoder;
    extern AVCodec avs_decoder;
    extern AVCodec bmp_decoder;
    extern AVCodec cavs_decoder;
    extern AVCodec cinepak_decoder;
    extern AVCodec cljr_decoder;
    extern AVCodec cook_decoder;
    extern AVCodec cscd_decoder;
    extern AVCodec cyuv_decoder;
    
    Kostya Shishkov's avatar
    Kostya Shishkov committed
    extern AVCodec dca_decoder;
    
    extern AVCodec dsicinaudio_decoder;
    extern AVCodec dsicinvideo_decoder;
    extern AVCodec dvvideo_decoder;
    extern AVCodec eightbps_decoder;
    extern AVCodec ffv1_decoder;
    extern AVCodec ffvhuff_decoder;
    extern AVCodec flac_decoder;
    extern AVCodec flashsv_decoder;
    extern AVCodec flic_decoder;
    extern AVCodec flv_decoder;
    extern AVCodec fourxm_decoder;
    extern AVCodec fraps_decoder;
    
    extern AVCodec gif_decoder;
    
    extern AVCodec h263_decoder;
    
    Fabrice Bellard's avatar
    Fabrice Bellard committed
    extern AVCodec h263i_decoder;
    
    extern AVCodec h264_decoder;
    extern AVCodec huffyuv_decoder;
    extern AVCodec idcin_decoder;
    extern AVCodec imc_decoder;
    extern AVCodec indeo2_decoder;
    extern AVCodec indeo3_decoder;
    extern AVCodec interplay_dpcm_decoder;
    extern AVCodec interplay_video_decoder;
    extern AVCodec kmvc_decoder;
    extern AVCodec libgsm_decoder;
    
    extern AVCodec libgsm_ms_decoder;
    
    extern AVCodec loco_decoder;
    extern AVCodec mace3_decoder;
    extern AVCodec mace6_decoder;
    extern AVCodec mdec_decoder;
    
    extern AVCodec mjpeg_decoder;
    
    extern AVCodec mjpegb_decoder;
    
    extern AVCodec mmvideo_decoder;
    
    extern AVCodec mp2_decoder;
    
    Fabrice Bellard's avatar
    Fabrice Bellard committed
    extern AVCodec mp3_decoder;
    
    Roberto Togni's avatar
    Roberto Togni committed
    extern AVCodec mp3adu_decoder;
    
    extern AVCodec mpc7_decoder;
    extern AVCodec mpeg1video_decoder;
    extern AVCodec mpeg2video_decoder;
    extern AVCodec mpeg4_decoder;
    
    extern AVCodec mpeg4aac_decoder;
    
    extern AVCodec mpeg_xvmc_decoder;
    extern AVCodec mpegvideo_decoder;
    extern AVCodec msmpeg4v1_decoder;
    extern AVCodec msmpeg4v2_decoder;
    extern AVCodec msmpeg4v3_decoder;
    
    extern AVCodec msrle_decoder;
    extern AVCodec msvideo1_decoder;
    
    extern AVCodec mszh_decoder;
    
    extern AVCodec nuv_decoder;
    extern AVCodec oggvorbis_decoder;
    extern AVCodec png_decoder;
    extern AVCodec qdm2_decoder;
    extern AVCodec qdraw_decoder;
    extern AVCodec qpeg_decoder;
    extern AVCodec qtrle_decoder;
    
    extern AVCodec ra_144_decoder;
    extern AVCodec ra_288_decoder;
    
    extern AVCodec roq_decoder;
    
    extern AVCodec roq_dpcm_decoder;
    
    extern AVCodec rpza_decoder;
    extern AVCodec rv10_decoder;
    extern AVCodec rv20_decoder;
    extern AVCodec rv30_decoder;
    extern AVCodec rv40_decoder;
    extern AVCodec shorten_decoder;
    extern AVCodec smackaud_decoder;
    extern AVCodec smacker_decoder;
    extern AVCodec smc_decoder;
    extern AVCodec snow_decoder;
    
    extern AVCodec sol_dpcm_decoder;
    
    extern AVCodec sp5x_decoder;
    extern AVCodec svq1_decoder;
    extern AVCodec svq3_decoder;
    extern AVCodec targa_decoder;
    extern AVCodec theora_decoder;
    extern AVCodec tiertexseqvideo_decoder;
    extern AVCodec tiff_decoder;
    extern AVCodec truemotion1_decoder;
    extern AVCodec truemotion2_decoder;
    extern AVCodec truespeech_decoder;
    
    extern AVCodec tta_decoder;
    
    extern AVCodec ulti_decoder;
    
    extern AVCodec vc1_decoder;
    extern AVCodec vcr1_decoder;
    extern AVCodec vmdaudio_decoder;
    extern AVCodec vmdvideo_decoder;
    extern AVCodec vmnc_decoder;
    extern AVCodec vorbis_decoder;
    extern AVCodec vp3_decoder;
    extern AVCodec vp5_decoder;
    extern AVCodec vp6_decoder;
    extern AVCodec vp6f_decoder;
    extern AVCodec vqa_decoder;
    extern AVCodec wavpack_decoder;
    extern AVCodec wmav1_decoder;
    extern AVCodec wmav2_decoder;
    extern AVCodec wmv1_decoder;
    extern AVCodec wmv2_decoder;
    extern AVCodec wmv3_decoder;
    
    extern AVCodec wnv1_decoder;
    
    extern AVCodec ws_snd1_decoder;
    
    extern AVCodec xan_dpcm_decoder;
    extern AVCodec xan_wc3_decoder;
    extern AVCodec xl_decoder;
    extern AVCodec zlib_decoder;
    
    extern AVCodec zmbv_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_ALAW,    pcm_alaw);
    PCM_CODEC(CODEC_ID_PCM_MULAW,   pcm_mulaw);
    PCM_CODEC(CODEC_ID_PCM_S8,      pcm_s8);
    PCM_CODEC(CODEC_ID_PCM_S16BE,   pcm_s16be);
    PCM_CODEC(CODEC_ID_PCM_S16LE,   pcm_s16le);
    PCM_CODEC(CODEC_ID_PCM_S24BE,   pcm_s24be);
    
    PCM_CODEC(CODEC_ID_PCM_S24DAUD, pcm_s24daud);
    
    PCM_CODEC(CODEC_ID_PCM_S24LE,   pcm_s24le);
    PCM_CODEC(CODEC_ID_PCM_S32BE,   pcm_s32be);
    PCM_CODEC(CODEC_ID_PCM_S32LE,   pcm_s32le);
    PCM_CODEC(CODEC_ID_PCM_U8,      pcm_u8);
    PCM_CODEC(CODEC_ID_PCM_U16BE,   pcm_u16be);
    PCM_CODEC(CODEC_ID_PCM_U16LE,   pcm_u16le);
    PCM_CODEC(CODEC_ID_PCM_U24BE,   pcm_u24be);
    PCM_CODEC(CODEC_ID_PCM_U24LE,   pcm_u24le);
    PCM_CODEC(CODEC_ID_PCM_U32BE,   pcm_u32be);
    PCM_CODEC(CODEC_ID_PCM_U32LE,   pcm_u32le);
    
    Fabrice Bellard's avatar
    Fabrice Bellard committed
    
    
    PCM_CODEC(CODEC_ID_ADPCM_4XM,     adpcm_4xm);
    PCM_CODEC(CODEC_ID_ADPCM_ADX,     adpcm_adx);
    PCM_CODEC(CODEC_ID_ADPCM_CT,      adpcm_ct);
    PCM_CODEC(CODEC_ID_ADPCM_EA,      adpcm_ea);
    PCM_CODEC(CODEC_ID_ADPCM_G726,    adpcm_g726);
    
    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_QT,  adpcm_ima_qt);
    PCM_CODEC(CODEC_ID_ADPCM_IMA_WAV, adpcm_ima_wav);
    PCM_CODEC(CODEC_ID_ADPCM_IMA_WS,  adpcm_ima_ws);
    PCM_CODEC(CODEC_ID_ADPCM_MS,      adpcm_ms);
    
    PCM_CODEC(CODEC_ID_ADPCM_SBPRO_2, adpcm_sbpro_2);
    
    PCM_CODEC(CODEC_ID_ADPCM_SBPRO_3, adpcm_sbpro_3);
    PCM_CODEC(CODEC_ID_ADPCM_SBPRO_4, adpcm_sbpro_4);
    PCM_CODEC(CODEC_ID_ADPCM_SMJPEG,  adpcm_ima_smjpeg);
    PCM_CODEC(CODEC_ID_ADPCM_SWF,     adpcm_swf);
    PCM_CODEC(CODEC_ID_ADPCM_XA,      adpcm_xa);
    PCM_CODEC(CODEC_ID_ADPCM_YAMAHA,  adpcm_yamaha);
    
    Fabrice Bellard's avatar
    Fabrice Bellard committed
    #undef PCM_CODEC
    
    /* dummy raw video codec */
    
    extern AVCodec rawvideo_decoder;
    
    extern AVCodec rawvideo_encoder;
    
    Fabrice Bellard's avatar
    Fabrice Bellard committed
    
    /* the following codecs use external GPL libs */
    
    extern AVCodec liba52_decoder;
    
    Fabrice Bellard's avatar
    Fabrice Bellard committed
    
    
    /* subtitles */
    
    extern AVCodec dvbsub_decoder;
    
    extern AVCodec dvbsub_encoder;
    extern AVCodec dvdsub_decoder;
    extern AVCodec dvdsub_encoder;
    
    Fabrice Bellard's avatar
    Fabrice Bellard committed
    /* resample.c */
    
    struct ReSampleContext;
    
    Fabrice Bellard's avatar
    Fabrice Bellard committed
    
    typedef struct ReSampleContext ReSampleContext;
    
    
    ReSampleContext *audio_resample_init(int output_channels, int input_channels,
    
    Fabrice Bellard's avatar
    Fabrice Bellard committed
                                         int output_rate, int input_rate);
    int audio_resample(ReSampleContext *s, short *output, short *input, int nb_samples);
    void audio_resample_close(ReSampleContext *s);
    
    
    struct AVResampleContext *av_resample_init(int out_rate, int in_rate, int filter_length, int log2_phase_count, int linear, double cutoff);
    
    int av_resample(struct AVResampleContext *c, short *dst, short *src, int *consumed, int src_size, int dst_size, int update_ctx);
    
    Michael Niedermayer's avatar
    Michael Niedermayer committed
    void av_resample_compensate(struct AVResampleContext *c, int sample_delta, int compensation_distance);
    
    #if LIBAVCODEC_VERSION_INT < ((52<<16)+(0<<8)+0)
    
    Fabrice Bellard's avatar
    Fabrice Bellard committed
    /* YUV420 format is assumed ! */
    
    
    struct ImgReSampleContext attribute_deprecated;
    
    Fabrice Bellard's avatar
    Fabrice Bellard committed
    
    
    typedef struct ImgReSampleContext ImgReSampleContext attribute_deprecated;
    
    Fabrice Bellard's avatar
    Fabrice Bellard committed
    
    
    attribute_deprecated ImgReSampleContext *img_resample_init(int output_width, int output_height,
    
    Fabrice Bellard's avatar
    Fabrice Bellard committed
                                          int input_width, int input_height);
    
    attribute_deprecated ImgReSampleContext *img_resample_full_init(int owidth, int oheight,
    
                                          int iwidth, int iheight,
                                          int topBand, int bottomBand,
    
                                          int leftBand, int rightBand,
                                          int padtop, int padbottom,
                                          int padleft, int padright);
    
    
    attribute_deprecated void img_resample(ImgReSampleContext *s,
    
                      AVPicture *output, const AVPicture *input);
    
    Fabrice Bellard's avatar
    Fabrice Bellard committed
    
    
    attribute_deprecated void img_resample_close(ImgReSampleContext *s);
    
    #endif
    
    Fabrice Bellard's avatar
    Fabrice Bellard committed
    
    
    Drew Hess's avatar
    Drew Hess committed
    /**
     * Allocate memory for a picture.  Call avpicture_free to free it.
     *
     * @param picture the picture to be filled in.
     * @param pix_fmt the format of the picture.
     * @param width the width of the picture.
     * @param height the height of the picture.
    
     * @return Zero if successful, a negative value if not.
    
    Drew Hess's avatar
    Drew Hess committed
     */
    int avpicture_alloc(AVPicture *picture, int pix_fmt, int width, int height);
    
    
    /**
     * Free a picture previously allocated by avpicture_alloc().
     *
     * @param picture The AVPicture to be freed.
     */
    
    Drew Hess's avatar
    Drew Hess committed
    void avpicture_free(AVPicture *picture);
    
    
    /**
     * Fill in AVPicture's fields.
     * The fields of the given AVPicture are filled in by using the 'ptr' address
     * which points to the image data buffer. Depending on the specified picture
     * format, one or multiple image data pointers and line sizes will be set.
     * If a planar format is specified, several pointers will be set pointing to
     * the different picture planes and the line sizes of the different planes
     * will be stored in the lines_sizes array.
     *
     * @param picture AVPicture who's fields are to be filled in
     * @param ptr Buffer which will contain or contains the actual image data
     * @param pix_fmt The format in which the picture data is stored
     * @param width The width of the image in pixels
     * @param height The height of the image in pixels
     * @return Size of the image data in bytes.
     */
    
    int avpicture_fill(AVPicture *picture, uint8_t *ptr,
    
                       int pix_fmt, int width, int height);
    
    int avpicture_layout(const AVPicture* src, int pix_fmt, int width, int height,
    
                         unsigned char *dest, int dest_size);
    
    
    /**
     * Calculate the size in bytes that a picture of the given width and height
     * would occupy if stored in the given picture format.
     *
     * @param pix_fmt The given picture format
     * @param width The width of the image
     * @param height The height of the image
     * @return Image data size in bytes
     */
    
    int avpicture_get_size(int pix_fmt, int width, int height);
    
    void avcodec_get_chroma_sub_sample(int pix_fmt, int *h_shift, int *v_shift);
    const char *avcodec_get_pix_fmt_name(int pix_fmt);
    
    void avcodec_set_dimensions(AVCodecContext *s, int width, int height);
    
    enum PixelFormat avcodec_get_pix_fmt(const char* name);
    
    unsigned int avcodec_pix_fmt_to_codec_tag(enum PixelFormat p);
    
    #define FF_LOSS_RESOLUTION  0x0001 /* loss due to resolution change */
    #define FF_LOSS_DEPTH       0x0002 /* loss due to color depth change */
    #define FF_LOSS_COLORSPACE  0x0004 /* loss due to color space conversion */
    #define FF_LOSS_ALPHA       0x0008 /* loss of alpha bits */
    #define FF_LOSS_COLORQUANT  0x0010 /* loss due to color quantization */
    #define FF_LOSS_CHROMA      0x0020 /* loss of chroma (e.g. rgb to gray conversion) */
    
    
    /**
     * compute the loss when converting from a pixel format to another
     */
    
    int avcodec_get_pix_fmt_loss(int dst_pix_fmt, int src_pix_fmt,
                                 int has_alpha);
    
    
    /**
     * find best pixel format to convert to. Return -1 if none found
     */
    
    int avcodec_find_best_pix_fmt(int pix_fmt_mask, int src_pix_fmt,
                                  int has_alpha, int *loss_ptr);
    
    
    #define FF_ALPHA_TRANSP       0x0001 /* image has some totally transparent pixels */
    #define FF_ALPHA_SEMI_TRANSP  0x0002 /* image has some transparent pixels */
    
    
    /**
     * Tell if an image really has transparent alpha values.
     * @return ored mask of FF_ALPHA_xxx constants
     */
    
    int img_get_alpha_info(const AVPicture *src,
    
                           int pix_fmt, int width, int height);
    
    #if LIBAVCODEC_VERSION_INT < ((52<<16)+(0<<8)+0)
    
    /* convert among pixel formats */
    
    attribute_deprecated int img_convert(AVPicture *dst, int dst_pix_fmt,
    
                    const AVPicture *src, int pix_fmt,
    
                    int width, int height);
    
    
    /* deinterlace a picture */
    
    /* deinterlace - if not supported return -1 */
    
    int avpicture_deinterlace(AVPicture *dst, const AVPicture *src,
    
    Fabrice Bellard's avatar
    Fabrice Bellard committed
                              int pix_fmt, int width, int height);
    
    /* external high level API */
    
    extern AVCodec *first_avcodec;
    
    
    Nick Kurshev's avatar
    Nick Kurshev committed
    /* returns LIBAVCODEC_VERSION_INT constant */
    
    unsigned avcodec_version(void);
    
    Nick Kurshev's avatar
    Nick Kurshev committed
    /* returns LIBAVCODEC_BUILD constant */
    
    unsigned avcodec_build(void);
    
    
    /**
     * Initializes libavcodec.
     *
     * @warning This function \e must be called before any other libavcodec
     * function.
     */
    
    Fabrice Bellard's avatar
    Fabrice Bellard committed
    void avcodec_init(void);
    
    void register_avcodec(AVCodec *format);
    
    
    /**
     * Finds an encoder with a matching codec ID.
     *
     * @param id CodecID of the requested encoder.
     * @return An encoder if one was found, NULL otherwise.
     */
    
    Fabrice Bellard's avatar
    Fabrice Bellard committed
    AVCodec *avcodec_find_encoder(enum CodecID id);
    
    
    /**
     * Finds an encoder with the specified name.
     *
     * @param name Name of the requested encoder.
     * @return An encoder if one was found, NULL otherwise.
     */
    
    AVCodec *avcodec_find_encoder_by_name(const char *name);
    
    
    /**
     * Finds a decoder with a matching codec ID.
     *
     * @param id CodecID of the requested decoder.
     * @return A decoder if one was found, NULL otherwise.
     */
    
    Fabrice Bellard's avatar
    Fabrice Bellard committed
    AVCodec *avcodec_find_decoder(enum CodecID id);
    
    
    /**
     * Finds an decoder with the specified name.
     *
     * @param name Name of the requested decoder.
     * @return A decoder if one was found, NULL otherwise.
     */
    
    Fabrice Bellard's avatar
    Fabrice Bellard committed
    AVCodec *avcodec_find_decoder_by_name(const char *name);
    void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode);
    
    
    /**
     * Sets the fields of the given AVCodecContext to default values.
     *
     * @param s The AVCodecContext of which the fields should be set to default values.
     */
    
    Michael Niedermayer's avatar
    Michael Niedermayer committed
    void avcodec_get_context_defaults(AVCodecContext *s);
    
    
    /**
     * Allocates an AVCodecContext and sets its fields to default values.  The
     * resulting struct can be deallocated by simply calling av_free().
     *
     * @return An AVCodecContext filled with default values or NULL on failure.
     * @see avcodec_get_context_defaults
     */
    
    Falk Hüffner's avatar
    Falk Hüffner committed
    AVCodecContext *avcodec_alloc_context(void);
    
    
    /**
     * Sets the fields of the given AVFrame to default values.
     *
     * @param pic The AVFrame of which the fields should be set to default values.
     */
    
    Falk Hüffner's avatar
    Falk Hüffner committed
    void avcodec_get_frame_defaults(AVFrame *pic);
    
    
    /**
     * Allocates an AVFrame and sets its fields to default values.  The resulting
     * struct can be deallocated by simply calling av_free().
     *
     * @return An AVFrame filled with default values or NULL on failure.
     * @see avcodec_get_frame_defaults
     */
    
    AVFrame *avcodec_alloc_frame(void);
    
    Michael Niedermayer's avatar
    Michael Niedermayer committed
    
    
    int avcodec_default_get_buffer(AVCodecContext *s, AVFrame *pic);
    void avcodec_default_release_buffer(AVCodecContext *s, AVFrame *pic);
    
    int avcodec_default_reget_buffer(AVCodecContext *s, AVFrame *pic);
    void avcodec_align_dimensions(AVCodecContext *s, int *width, int *height);
    
    
    /**
     * Checks if the given dimension of a picture is valid, meaning that all
     * bytes of the picture can be addressed with a signed int.
     *
     * @param[in] w Width of the picture.
     * @param[in] h Height of the picture.
     * @return Zero if valid, a negative value if invalid.
     */
    
    int avcodec_check_dimensions(void *av_log_ctx, unsigned int w, unsigned int h);
    
    enum PixelFormat avcodec_default_get_format(struct AVCodecContext *s, const enum PixelFormat * fmt);
    
    Michael Niedermayer's avatar
    Michael Niedermayer committed
    
    
    Michael Niedermayer's avatar
    1l  
    Michael Niedermayer committed
    int avcodec_thread_init(AVCodecContext *s, int thread_count);
    void avcodec_thread_free(AVCodecContext *s);
    int avcodec_thread_execute(AVCodecContext *s, int (*func)(AVCodecContext *c2, void *arg2),void **arg, int *ret, int count);
    
    int avcodec_default_execute(AVCodecContext *c, int (*func)(AVCodecContext *c2, void *arg2),void **arg, int *ret, int count);
    
    //FIXME func typedef
    
    
    Michael Niedermayer's avatar
    Michael Niedermayer committed
    /**
    
     * Initializes the AVCodecContext to use the given AVCodec. Prior to using this
     * function the context has to be allocated.
     *
     * 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 save!
     *
     * @code
     * codec = avcodec_find_decoder(CODEC_ID_H264);
     * if (!codec)
     *     exit(1);
     *
     * context = avcodec_alloc_context();
     *
     * if (avcodec_open(context, codec) < 0)
     *     exit(1);
     * @endcode
     *
     * @param avctx The context which will be setup to use the given codec.
     * @param codec The codec to use within the context.
     * @return Zero on success, a negative value on error.
     * @see avcodec_alloc_context, avcodec_find_decoder, avcodec_find_encoder
    
    Michael Niedermayer's avatar
    Michael Niedermayer committed
     */
    
    Fabrice Bellard's avatar
    Fabrice Bellard committed
    int avcodec_open(AVCodecContext *avctx, AVCodec *codec);
    
    /**
     * @deprecated Use avcodec_decode_audio2() instead.
     */
    
    attribute_deprecated int avcodec_decode_audio(AVCodecContext *avctx, int16_t *samples,
                             int *frame_size_ptr,
                             uint8_t *buf, int buf_size);
    
     * Decodes an audio frame from \p buf into \p samples.
     * The avcodec_decode_audio2() function decodes a frame of audio from the input
     * buffer \p buf of size \p buf_size. To decode it, it makes use of the
     * audiocodec which was coupled with \p avctx using avcodec_open(). The
     * resulting decoded frame is stored in output buffer \p samples.  If no frame
     * could be decompressed, \p frame_size_ptr is zero. Otherwise, it is the
     * decompressed frame size in \e bytes.
     *
     * @warning You \e must set \p frame_size_ptr to the allocated size of the
     * output buffer before calling avcodec_decode_audio2().
     *
     * @warning The input buffer must be \c FF_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 The end of the input buffer \p buf should be set to 0 to ensure that
     * no overreading happens for damaged MPEG streams.
    
     * @note You might have to align the input buffer \p buf and output buffer \p
     * samples. The alignment requirements depend on the CPU: on some CPUs it isn't
     * necessary at all, on others it won't work at all if not aligned and on others
     * it will work but it will have an impact on performance. In practice, the
     * bitstream should have 4 byte alignment at minimum and all sample data should
     * be 16 byte aligned unless the CPU doesn't need it (AltiVec and SSE do). If
     * the linesize is not a multiple of 16 then there's no sense in aligning the
     * start of the buffer to 16.
     *
     * @param avctx The codec context.
     * @param[out] samples The output buffer.
     * @param[in,out] frame_size_ptr The output buffer size in bytes.
     * @param[in] buf The input buffer.
     * @param[in] buf_size The input buffer size in bytes.
     * @return On error a negative value is returned, otherwise the number of bytes
     * used or zero if no frame could be decompressed.
    
    int avcodec_decode_audio2(AVCodecContext *avctx, int16_t *samples,
    
    Fabrice Bellard's avatar
    Fabrice Bellard committed
                             int *frame_size_ptr,
    
                             uint8_t *buf, int buf_size);
    
    
    /**
     * Decodes a video frame from \p buf into \p picture.
     * The avcodec_decode_video() function decodes a frame of video from the input
     * buffer \p buf of size \p buf_size. To decode it, it makes use of the
     * videocodec which was coupled with \p avctx using avcodec_open(). The
     * resulting decoded frame is stored in \p picture.
     *
     * @warning The input buffer must be \c FF_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 The end of the input buffer \p buf should be set to 0 to ensure that
     * no overreading happens for damaged MPEG streams.
     *
     * @note You might have to align the input buffer \p buf and output buffer \p
     * samples. The alignment requirements depend on the CPU: on some CPUs it isn't
     * necessary at all, on others it won't work at all if not aligned and on others
     * it will work but it will have an impact on performance. In practice, the
     * bitstream should have 4 byte alignment at minimum and all sample data should
     * be 16 byte aligned unless the CPU doesn't need it (AltiVec and SSE do). If
     * the linesize is not a multiple of 16 then there's no sense in aligning the
     * start of the buffer to 16.
     *
     * @param avctx The codec context.
     * @param[out] picture The AVFrame in which the decoded video frame will be stored.
     * @param[in] buf The input buffer.
     * @param[in] buf_size The size of the input buffer in bytes.
     * @param[in,out] got_picture_ptr Zero if no frame could be decompressed, otherwise, it is non zero.
     * @return On error a negative value is returned, otherwise the number of bytes
     * used or zero if no frame could be decompressed.
     */
    
    int avcodec_decode_video(AVCodecContext *avctx, AVFrame *picture,
    
    Fabrice Bellard's avatar
    Fabrice Bellard committed
                             int *got_picture_ptr,
    
                             uint8_t *buf, int buf_size);
    
    
    /* decode a subtitle message. return -1 if error, otherwise return the
       *number of bytes used. If no subtitle could be decompressed,
       *got_sub_ptr is zero. Otherwise, the subtitle is stored in *sub. */
    
    int avcodec_decode_subtitle(AVCodecContext *avctx, AVSubtitle *sub,
                                int *got_sub_ptr,
                                const uint8_t *buf, int buf_size);
    
    int avcodec_parse_frame(AVCodecContext *avctx, uint8_t **pdata,
    
                            uint8_t *buf, int buf_size);
    
    
    /**
     * Encodes an audio frame from \p samples into \p buf.
     * The avcodec_encode_audio() function encodes a frame of audio from the input
     * buffer \p samples. To encode it, it makes use of the audiocodec which was
     * coupled with \p avctx using avcodec_open(). The resulting encoded frame is
     * stored in output buffer \p buf.
     *
     * @note The output buffer should be at least \c FF_MIN_BUFFER_SIZE bytes large.
     *
     * @param avctx The codec context.
     * @param[out] buf The output buffer.
     * @param[in] buf_size The output buffer size.
     * @param[in] samples The input buffer containing the samples.
     * @return On error a negative value is returned, on succes zero or the number
     * of bytes used from the input buffer.
     */
    
    int avcodec_encode_audio(AVCodecContext *avctx, uint8_t *buf, int buf_size,
    
    Fabrice Bellard's avatar
    Fabrice Bellard committed
                             const short *samples);
    
    
    /**
     * Encodes a video frame from \p pict into \p buf.
     * The avcodec_encode_video() function encodes a frame of video from the input
     * \p pict. To encode it, it makes use of the videocodec which was coupled with
     * \p avctx using avcodec_open(). The resulting encoded bytes representing the
     * frame are stored in the output buffer \p buf. The input picture should be
     * stored using a specific format, namely \c avctx.pix_fmt.
     *
     * @param avctx The codec context.
     * @param[out] buf The output buffer for the bitstream of encoded frame.
     * @param[in] buf_size The size of the outputbuffer in bytes.
     * @param[in] pict The input picture to encode.
     * @return On error a negative value is returned, on success zero or the number
     * of bytes used from the input buffer.
     */
    
    int avcodec_encode_video(AVCodecContext *avctx, uint8_t *buf, int buf_size,
    
                             const AVFrame *pict);
    
    int avcodec_encode_subtitle(AVCodecContext *avctx, uint8_t *buf, int buf_size,
    
                                const AVSubtitle *sub);
    
    Fabrice Bellard's avatar
    Fabrice Bellard committed
    
    int avcodec_close(AVCodecContext *avctx);
    
    void avcodec_register_all(void);
    
    Fabrice Bellard's avatar
    Fabrice Bellard committed
    
    
    /**
     * Flush buffers, should be called when seeking or when switching to a different stream.
     */
    
    void avcodec_flush_buffers(AVCodecContext *avctx);
    
    
    void avcodec_default_free_buffers(AVCodecContext *s);
    
    
    Panagiotis Issaris's avatar
    Panagiotis Issaris committed
    /* misc useful functions */
    
    Michael Niedermayer's avatar
    Michael Niedermayer committed
    
    /**
    
     * Returns a single letter to describe the given picture type \p pict_type.
     *
     * @param[in] pict_type The picture type.
     * @return A single character representing the picture type.
    
    Michael Niedermayer's avatar
    Michael Niedermayer committed
     */
    char av_get_pict_type_char(int pict_type);
    
    
     * Returns codec bits per sample.
     *
     * @param[in] codec_id The codec.
     * @return Number of bits per sample or zero if unknown for the given codec.
    
     */
    int av_get_bits_per_sample(enum CodecID codec_id);
    
    /* frame parsing */
    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 last_frame_offset; /* offset of the last frame */
        /* video info */
        int pict_type; /* XXX: put it back in AVCodecContext */
        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
    
    } AVCodecParserContext;
    
    typedef struct AVCodecParser {
    
    Michael Niedermayer's avatar
    Michael Niedermayer committed
        int codec_ids[5]; /* several codec IDs are permitted */
    
        int priv_data_size;
        int (*parser_init)(AVCodecParserContext *s);
    
        int (*parser_parse)(AVCodecParserContext *s,
    
                            AVCodecContext *avctx,
    
                            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;
    
    extern AVCodecParser *av_first_parser;
    
    void av_register_codec_parser(AVCodecParser *parser);
    AVCodecParserContext *av_parser_init(int codec_id);
    
    int av_parser_parse(AVCodecParserContext *s,
    
                        AVCodecContext *avctx,
    
                        uint8_t **poutbuf, int *poutbuf_size,
    
                        const uint8_t *buf, int buf_size,
                        int64_t pts, int64_t dts);
    
    int av_parser_change(AVCodecParserContext *s,
                         AVCodecContext *avctx,
    
                         uint8_t **poutbuf, int *poutbuf_size,
    
                         const uint8_t *buf, int buf_size, int keyframe);
    
    void av_parser_close(AVCodecParserContext *s);
    
    
    extern AVCodecParser aac_parser;
    extern AVCodecParser ac3_parser;
    
    extern AVCodecParser cavsvideo_parser;
    
    Kostya Shishkov's avatar
    Kostya Shishkov committed
    extern AVCodecParser dca_parser;
    
    extern AVCodecParser dvbsub_parser;
    extern AVCodecParser dvdsub_parser;
    
    extern AVCodecParser h263_parser;
    extern AVCodecParser h264_parser;
    
    Michael Niedermayer's avatar
    Michael Niedermayer committed
    extern AVCodecParser mjpeg_parser;
    
    extern AVCodecParser mpeg4video_parser;
    
    extern AVCodecParser mpegaudio_parser;
    
    extern AVCodecParser mpegvideo_parser;
    extern AVCodecParser pnm_parser;
    
    Kostya Shishkov's avatar
    Kostya Shishkov committed
    extern AVCodecParser vc1_parser;
    
        void *priv_data;
    
        struct AVBitStreamFilter *filter;
        AVCodecParserContext *parser;
        struct AVBitStreamFilterContext *next;
    } AVBitStreamFilterContext;
    
    
    typedef struct AVBitStreamFilter {
        const char *name;
    
        int priv_data_size;
    
        int (*filter)(AVBitStreamFilterContext *bsfc,
                      AVCodecContext *avctx, const char *args,
                      uint8_t **poutbuf, int *poutbuf_size,
                      const uint8_t *buf, int buf_size, int keyframe);
        struct AVBitStreamFilter *next;
    } AVBitStreamFilter;
    
    extern AVBitStreamFilter *av_first_bitstream_filter;
    
    void av_register_bitstream_filter(AVBitStreamFilter *bsf);
    AVBitStreamFilterContext *av_bitstream_filter_init(const char *name);
    int av_bitstream_filter_filter(AVBitStreamFilterContext *bsfc,
                                   AVCodecContext *avctx, const char *args,
                                   uint8_t **poutbuf, int *poutbuf_size,
                                   const uint8_t *buf, int buf_size, int keyframe);
    void av_bitstream_filter_close(AVBitStreamFilterContext *bsf);
    
    extern AVBitStreamFilter dump_extradata_bsf;
    extern AVBitStreamFilter remove_extradata_bsf;
    
    extern AVBitStreamFilter noise_bsf;
    
    extern AVBitStreamFilter mp3_header_compress_bsf;
    extern AVBitStreamFilter mp3_header_decompress_bsf;
    
    extern AVBitStreamFilter mjpega_dump_header_bsf;
    
    /* memory */
    
     * Reallocates the given block if it is not large enough, otherwise it
     * does nothing.
     *
     * @see av_realloc
    
    void *av_fast_realloc(void *ptr, unsigned int *size, unsigned int min_size);
    
     * Frees all static arrays and reset their pointers to 0.
     * Call this function to release all statically allocated tables.
    
    void av_free_static(void);
    
     * Allocation of static arrays.
     *
     * @warning Do not use for normal allocation.
     *
     * @param[in] size The amount of memory you need in bytes.
     * @return Block of memory of the requested size.
    
    void *av_mallocz_static(unsigned int size);
    
    void img_copy(AVPicture *dst, const AVPicture *src,
                  int pix_fmt, int width, int height);
    
    
    int img_crop(AVPicture *dst, const AVPicture *src,
                 int pix_fmt, int top_band, int left_band);
    
    
    int img_pad(AVPicture *dst, const AVPicture *src, int height, int width, int pix_fmt,
                int padtop, int padbottom, int padleft, int padright, int *color);
    
    
    extern unsigned int av_xiphlacing(unsigned char *s, unsigned int v);
    
    
    /* error handling */
    #if EINVAL > 0
    #define AVERROR(e) (-(e)) /**< returns a negative error code from a POSIX error code, to return from library functions. */
    #define AVUNERROR(e) (-(e)) /**< returns a POSIX error code from a library function error return value. */
    #else
    /* some platforms have E* and errno already negated. */
    #define AVERROR(e) (e)
    #define AVUNERROR(e) (e)
    #endif