X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Favcodec.h;h=0ccc77cd27bd6e3e7cda017b91dc9d587b25a7c5;hb=b0df362b11759d3140c64a9c89b4b2417e1bb0e0;hp=297f5022e6c481a283ded0ff4eced33d486c15e5;hpb=e2f9490eab2fba465a0b611eb4524597b7286673;p=ffmpeg diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h index 297f5022e6c..cbc65dfc6a7 100644 --- a/libavcodec/avcodec.h +++ b/libavcodec/avcodec.h @@ -3,8 +3,7 @@ /** * @file avcodec.h - * @brief - * external api header + * external api header. */ @@ -13,23 +12,39 @@ extern "C" { #endif #include "common.h" +#include "rational.h" +#include /* size_t */ -#define LIBAVCODEC_VERSION_INT 0x000406 -#define LIBAVCODEC_VERSION "0.4.6" -#define LIBAVCODEC_BUILD 4657 -#define LIBAVCODEC_BUILD_STR "4657" +#define FFMPEG_VERSION_INT 0x000408 +#define FFMPEG_VERSION "0.4.8" +#define LIBAVCODEC_BUILD 4707 + +#define LIBAVCODEC_VERSION_INT FFMPEG_VERSION_INT +#define LIBAVCODEC_VERSION FFMPEG_VERSION + +#define AV_STRINGIFY(s) AV_TOSTRING(s) +#define AV_TOSTRING(s) #s +#define LIBAVCODEC_IDENT "FFmpeg" LIBAVCODEC_VERSION "b" AV_STRINGIFY(LIBAVCODEC_BUILD) + +#define AV_NOPTS_VALUE int64_t_C(0x8000000000000000) +#define AV_TIME_BASE 1000000 enum CodecID { CODEC_ID_NONE, CODEC_ID_MPEG1VIDEO, + CODEC_ID_MPEG2VIDEO, /* prefered ID for MPEG Video 1 or 2 decoding */ + CODEC_ID_MPEG2VIDEO_XVMC, CODEC_ID_H263, CODEC_ID_RV10, + CODEC_ID_RV20, CODEC_ID_MP2, - CODEC_ID_MP3LAME, + CODEC_ID_MP3, /* prefered ID for MPEG Audio layer 1, 2 or3 decoding */ CODEC_ID_VORBIS, CODEC_ID_AC3, CODEC_ID_MJPEG, CODEC_ID_MJPEGB, + CODEC_ID_LJPEG, + CODEC_ID_SP5X, CODEC_ID_MPEG4, CODEC_ID_RAWVIDEO, CODEC_ID_MSMPEG4V1, @@ -39,7 +54,9 @@ enum CodecID { CODEC_ID_WMV2, CODEC_ID_H263P, CODEC_ID_H263I, + CODEC_ID_FLV1, CODEC_ID_SVQ1, + CODEC_ID_SVQ3, CODEC_ID_DVVIDEO, CODEC_ID_DVAUDIO, CODEC_ID_WMAV1, @@ -48,6 +65,38 @@ enum CodecID { CODEC_ID_MACE6, CODEC_ID_HUFFYUV, CODEC_ID_CYUV, + CODEC_ID_H264, + CODEC_ID_INDEO3, + CODEC_ID_VP3, + CODEC_ID_THEORA, + CODEC_ID_AAC, + CODEC_ID_MPEG4AAC, + CODEC_ID_ASV1, + CODEC_ID_ASV2, + CODEC_ID_FFV1, + CODEC_ID_4XM, + CODEC_ID_VCR1, + CODEC_ID_CLJR, + CODEC_ID_MDEC, + CODEC_ID_ROQ, + CODEC_ID_INTERPLAY_VIDEO, + CODEC_ID_XAN_WC3, + CODEC_ID_XAN_WC4, + CODEC_ID_RPZA, + CODEC_ID_CINEPAK, + CODEC_ID_WS_VQA, + CODEC_ID_MSRLE, + CODEC_ID_MSVIDEO1, + CODEC_ID_IDCIN, + CODEC_ID_8BPS, + CODEC_ID_SMC, + CODEC_ID_FLIC, + CODEC_ID_TRUEMOTION1, + CODEC_ID_VMDVIDEO, + CODEC_ID_VMDAUDIO, + CODEC_ID_MSZH, + CODEC_ID_ZLIB, + CODEC_ID_QTRLE, /* various pcm "codecs" */ CODEC_ID_PCM_S16LE, @@ -62,45 +111,102 @@ enum CodecID { /* various adpcm codecs */ CODEC_ID_ADPCM_IMA_QT, CODEC_ID_ADPCM_IMA_WAV, + CODEC_ID_ADPCM_IMA_DK3, + CODEC_ID_ADPCM_IMA_DK4, + CODEC_ID_ADPCM_IMA_WS, + CODEC_ID_ADPCM_IMA_SMJPEG, CODEC_ID_ADPCM_MS, + CODEC_ID_ADPCM_4XM, + CODEC_ID_ADPCM_XA, + CODEC_ID_ADPCM_ADX, + CODEC_ID_ADPCM_EA, + CODEC_ID_ADPCM_G726, + + /* AMR */ + CODEC_ID_AMR_NB, + CODEC_ID_AMR_WB, + + /* RealAudio codecs*/ + CODEC_ID_RA_144, + CODEC_ID_RA_288, + + /* various DPCM codecs */ + CODEC_ID_ROQ_DPCM, + CODEC_ID_INTERPLAY_DPCM, + CODEC_ID_XAN_DPCM, + + CODEC_ID_FLAC, + + CODEC_ID_MPEG2TS, /* _FAKE_ codec to indicate a raw MPEG2 transport + stream (only used by libavformat) */ }; +/* CODEC_ID_MP3LAME is absolete */ +#define CODEC_ID_MP3LAME CODEC_ID_MP3 + enum CodecType { CODEC_TYPE_UNKNOWN = -1, CODEC_TYPE_VIDEO, CODEC_TYPE_AUDIO, + CODEC_TYPE_DATA, }; +/** + * Pixel format. Notes: + * + * PIX_FMT_RGBA32 is handled in an endian-specific manner. A RGBA + * color is put together as: + * (A << 24) | (R << 16) | (G << 8) | B + * This is stored as BGRA on little endian CPU architectures and ARGB on + * big endian CPUs. + * + * When the pixel format is palettized RGB (PIX_FMT_PAL8), the palettized + * image data is stored in AVFrame.data[0]. The palette is transported in + * AVFrame.data[1] and, is 1024 bytes long (256 4-byte entries) and is + * formatted the same as in PIX_FMT_RGBA32 described above (i.e., it is + * also endian-specific). Note also that the individual RGB palette + * components stored in AVFrame.data[1] should be in the range 0..255. + * This is important as many custom PAL8 video codecs that were designed + * to run on the IBM VGA graphics adapter use 6-bit palette components. + */ enum PixelFormat { - PIX_FMT_YUV420P, - PIX_FMT_YUV422, - PIX_FMT_RGB24, /* 3 bytes, R is first */ - PIX_FMT_BGR24, /* 3 bytes, B is first */ - PIX_FMT_YUV422P, - PIX_FMT_YUV444P, - PIX_FMT_RGBA32, /* always stored in cpu endianness */ - PIX_FMT_YUV410P, - PIX_FMT_YUV411P, - PIX_FMT_RGB565, /* always stored in cpu endianness */ - PIX_FMT_RGB555, /* always stored in cpu endianness, most significant bit to 1 */ + PIX_FMT_YUV420P, ///< Planar YUV 4:2:0 (1 Cr & Cb sample per 2x2 Y samples) + PIX_FMT_YUV422, + PIX_FMT_RGB24, ///< Packed pixel, 3 bytes per pixel, RGBRGB... + PIX_FMT_BGR24, ///< Packed pixel, 3 bytes per pixel, BGRBGR... + PIX_FMT_YUV422P, ///< Planar YUV 4:2:2 (1 Cr & Cb sample per 2x1 Y samples) + PIX_FMT_YUV444P, ///< Planar YUV 4:4:4 (1 Cr & Cb sample per 1x1 Y samples) + PIX_FMT_RGBA32, ///< Packed pixel, 4 bytes per pixel, BGRABGRA..., stored in cpu endianness + PIX_FMT_YUV410P, ///< Planar YUV 4:1:0 (1 Cr & Cb sample per 4x4 Y samples) + PIX_FMT_YUV411P, ///< Planar YUV 4:1:1 (1 Cr & Cb sample per 4x1 Y samples) + PIX_FMT_RGB565, ///< always stored in cpu endianness + PIX_FMT_RGB555, ///< always stored in cpu endianness, most significant bit to 1 PIX_FMT_GRAY8, - PIX_FMT_MONOWHITE, /* 0 is white */ - PIX_FMT_MONOBLACK, /* 0 is black */ - PIX_FMT_PAL8, /* 8 bit with RGBA palette */ + PIX_FMT_MONOWHITE, ///< 0 is white + PIX_FMT_MONOBLACK, ///< 0 is black + PIX_FMT_PAL8, ///< 8 bit with RGBA palette + PIX_FMT_YUVJ420P, ///< Planar YUV 4:2:0 full scale (jpeg) + PIX_FMT_YUVJ422P, ///< Planar YUV 4:2:2 full scale (jpeg) + PIX_FMT_YUVJ444P, ///< Planar YUV 4:4:4 full scale (jpeg) + PIX_FMT_XVMC_MPEG2_MC,///< XVideo Motion Acceleration via common packet passing(xvmc_render.h) + PIX_FMT_XVMC_MPEG2_IDCT, PIX_FMT_NB, }; /* currently unused, may be used if 24/32 bits samples ever supported */ enum SampleFormat { - SAMPLE_FMT_S16 = 0, /* signed 16 bits */ + SAMPLE_FMT_S16 = 0, ///< signed 16 bits }; /* in bytes */ #define AVCODEC_MAX_AUDIO_FRAME_SIZE 131072 /** - * Required number of zero bytes at the end of the input bitstream for decoding. - * to avoid overreading (and possibly segfaulting) + * 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
+ * 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 @@ -124,11 +230,6 @@ typedef struct RcOverride{ /* only for ME compatiblity with old apps */ extern int motion_estimation_method; -/* ME algos sorted by quality */ -static const int Motion_Est_QTab[] = { ME_ZERO, ME_PHODS, ME_LOG, - ME_X1, ME_EPZS, ME_FULL }; - - #define FF_MAX_B_FRAMES 8 /* encoding support @@ -136,322 +237,521 @@ static const int Motion_Est_QTab[] = { ME_ZERO, ME_PHODS, ME_LOG, Note: note not everything is supported yet */ -#define CODEC_FLAG_HQ 0x0001 /* brute force MB-type decission mode (slow) */ -#define CODEC_FLAG_QSCALE 0x0002 /* use fixed qscale */ -#define CODEC_FLAG_4MV 0x0004 /* 4 MV per MB allowed */ -#define CODEC_FLAG_QPEL 0x0010 /* use qpel MC */ -#define CODEC_FLAG_GMC 0x0020 /* use GMC */ -#define CODEC_FLAG_PART 0x0080 /* use data partitioning */ +#define CODEC_FLAG_QSCALE 0x0002 ///< use fixed qscale +#define CODEC_FLAG_4MV 0x0004 ///< 4 MV per MB allowed / Advanced prediction for H263 +#define CODEC_FLAG_QPEL 0x0010 ///< use qpel MC +#define CODEC_FLAG_GMC 0x0020 ///< use GMC +#define CODEC_FLAG_MV0 0x0040 ///< always try a MB with MV=<0,0> +#define CODEC_FLAG_PART 0x0080 ///< use data partitioning /* parent program gurantees that the input for b-frame containing streams is not written to for at least s->max_b_frames+1 frames, if this is not set than the input will be copied */ #define CODEC_FLAG_INPUT_PRESERVED 0x0100 -#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_EXTERN_HUFF 0x1000 /* use external huffman table (for mjpeg) */ -#define CODEC_FLAG_GRAY 0x2000 /* only decode/encode grayscale */ -#define CODEC_FLAG_EMU_EDGE 0x4000/* dont draw edges */ -#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 +#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_EXTERN_HUFF 0x1000 ///< use external huffman table (for mjpeg) +#define CODEC_FLAG_GRAY 0x2000 ///< only decode/encode grayscale +#define CODEC_FLAG_EMU_EDGE 0x4000///< dont draw edges +#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 */ -#define CODEC_FLAG_NORMALIZE_AQP 0x00020000 /* normalize adaptive quantization */ -#define CODEC_FLAG_INTERLACED_DCT 0x00040000 /* use interlaced dct */ -#define CODEC_FLAG_LOW_DELAY 0x00080000 /* force low delay / will fail on b frames */ -#define CODEC_FLAG_ALT_SCAN 0x00100000 /* use alternate scan */ -#define CODEC_FLAG_TRELLIS_QUANT 0x00200000 /* use trellis quantization */ -#define CODEC_FLAG_GLOBAL_HEADER 0x00400000 /* place global headers in extradata instead of every keyframe */ - +#define CODEC_FLAG_NORMALIZE_AQP 0x00020000 ///< normalize adaptive quantization +#define CODEC_FLAG_INTERLACED_DCT 0x00040000 ///< use interlaced dct +#define CODEC_FLAG_LOW_DELAY 0x00080000 ///< force low delay +#define CODEC_FLAG_ALT_SCAN 0x00100000 ///< use alternate scan +#define CODEC_FLAG_TRELLIS_QUANT 0x00200000 ///< use trellis quantization +#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) +/* Fx : Flag for h263+ extra options */ +#define CODEC_FLAG_H263P_AIC 0x01000000 ///< H263 Advanced intra coding / MPEG4 AC prediction (remove this) +#define CODEC_FLAG_AC_PRED 0x01000000 ///< H263 Advanced intra coding / MPEG4 AC prediction +#define CODEC_FLAG_H263P_UMV 0x02000000 ///< Unlimited motion vector +#define CODEC_FLAG_CBP_RD 0x04000000 ///< use rate distortion optimization for cbp +#define CODEC_FLAG_QP_RD 0x08000000 ///< use rate distortion optimization for qp selectioon +#define CODEC_FLAG_H263P_AIV 0x00000008 ///< H263 Alternative inter vlc +#define CODEC_FLAG_OBMC 0x00000001 ///< OBMC +#define CODEC_FLAG_LOOP_FILTER 0x00000800 ///< loop filter +#define CODEC_FLAG_H263P_SLICE_STRUCT 0x10000000 +#define CODEC_FLAG_INTERLACED_ME 0x20000000 ///< interlaced motion estimation +#define CODEC_FLAG_SVCD_SCAN_OFFSET 0x40000000 ///< will reserve space for SVCD scan offset user data +#define CODEC_FLAG_CLOSED_GOP 0x80000000 +/* Unsupported options : + * Syntax Arithmetic coding (SAC) + * Reference Picture Selection + * Independant Segment Decoding */ +/* /Fx */ /* codec capabilities */ -#define CODEC_CAP_DRAW_HORIZ_BAND 0x0001 /* decoder can use draw_horiz_band callback */ -#define CODEC_CAP_DR1 0x0002 /* direct rendering method 1 */ +#define CODEC_CAP_DRAW_HORIZ_BAND 0x0001 ///< decoder can use draw_horiz_band callback +/** + * Codec uses get_buffer() for allocating buffers. + * direct rendering method 1 + */ +#define CODEC_CAP_DR1 0x0002 /* if 'parse_only' field is true, then avcodec_parse_frame() can be used */ #define CODEC_CAP_PARSE_ONLY 0x0004 #define CODEC_CAP_TRUNCATED 0x0008 +/* codec can export data for HW decoding (XvMC) */ +#define CODEC_CAP_HWACCEL 0x0010 + +//the following defines might change, so dont expect compatibility if u use them +#define MB_TYPE_INTRA4x4 0x0001 +#define MB_TYPE_INTRA16x16 0x0002 //FIXME h264 specific +#define MB_TYPE_INTRA_PCM 0x0004 //FIXME h264 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 +#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, ...) -#define FRAME_RATE_BASE 10000 +/** + * Pan Scan area. + * this specifies the area which should be displayed. Note there may be multiple such areas for one frame + */ +typedef struct AVPanScan{ + /** + * id. + * - encoding: set by user. + * - decoding: set by lavc + */ + int id; + + /** + * width and height in 1/16 pel + * - encoding: set by user. + * - decoding: set by lavc + */ + int width; + int height; + + /** + * position of the top left corner in 1/16 pel for up to 3 fields/frames. + * - encoding: set by user. + * - decoding: set by lavc + */ + int16_t position[3][2]; +}AVPanScan; #define FF_COMMON_FRAME \ + /**\ + * pointer to the picture planes.\ + * this might be different from the first allocated byte\ + * - encoding: \ + * - decoding: \ + */\ uint8_t *data[4];\ int linesize[4];\ /**\ * pointer to the first allocated byte of the picture. can be used in get_buffer/release_buffer\ * this isnt used by lavc unless the default get/release_buffer() is used\ - * encoding: \ - * decoding: \ + * - encoding: \ + * - decoding: \ */\ uint8_t *base[4];\ /**\ * 1 -> keyframe, 0-> not\ - * encoding: set by lavc\ - * decoding: set by lavc\ + * - encoding: set by lavc\ + * - decoding: set by lavc\ */\ int key_frame;\ \ /**\ - * picture type of the frame, see ?_TYPE below\ - * encoding: set by lavc for coded_picture (and set by user for input)\ - * decoding: set by lavc\ + * picture type of the frame, see ?_TYPE below.\ + * - encoding: set by lavc for coded_picture (and set by user for input)\ + * - decoding: set by lavc\ */\ int pict_type;\ \ /**\ - * presentation timestamp in micro seconds (time when frame should be shown to user)\ - * if 0 then the frame_rate will be used as reference\ - * encoding: MUST be set by user\ - * decoding: set by lavc\ + * presentation timestamp in AV_TIME_BASE (=micro seconds currently) (time when frame should be shown to user)\ + * if AV_NOPTS_VALUE then the frame_rate will be used as reference\ + * - encoding: MUST be set by user\ + * - decoding: set by lavc\ */\ - long long int pts;\ + int64_t pts;\ \ /**\ * picture number in bitstream order.\ - * encoding: set by\ - * decoding: set by lavc\ + * - encoding: set by\ + * - decoding: set by lavc\ */\ int coded_picture_number;\ /**\ - * encoding: set by\ - * decoding: set by lavc\ * picture number in display order.\ + * - encoding: set by\ + * - decoding: set by lavc\ */\ int display_picture_number;\ \ /**\ - * quality (between 1 (good) and 31 (bad)) \ - * encoding: set by lavc for coded_picture (and set by user for input)\ - * decoding: set by lavc\ + * quality (between 1 (good) and FF_LAMBDA_MAX (bad)) \ + * - encoding: set by lavc for coded_picture (and set by user for input)\ + * - decoding: set by lavc\ */\ - float quality; \ + int quality; \ \ /**\ * buffer age (1->was last buffer and dint change, 2->..., ...).\ - * set to something large if the buffer has not been used yet \ - * encoding: unused\ - * decoding: MUST be set by get_buffer()\ + * set to INT_MAX if the buffer has not been used yet \ + * - encoding: unused\ + * - decoding: MUST be set by get_buffer()\ */\ int age;\ \ /**\ * is this picture used as reference\ - * encoding: unused\ - * decoding: set by lavc (before get_buffer() call))\ + * - encoding: unused\ + * - decoding: set by lavc (before get_buffer() call))\ */\ int reference;\ \ /**\ * QP table\ - * encoding: unused\ - * decoding: set by lavc\ + * - encoding: unused\ + * - decoding: set by lavc\ */\ int8_t *qscale_table;\ /**\ * QP store stride\ - * encoding: unused\ - * decoding: set by lavc\ + * - encoding: unused\ + * - decoding: set by lavc\ */\ int qstride;\ \ /**\ * mbskip_table[mb]>=1 if MB didnt change\ * stride= mb_width = (width+15)>>4\ - * encoding: unused\ - * decoding: set by lavc\ + * - encoding: unused\ + * - decoding: set by lavc\ */\ uint8_t *mbskip_table;\ +\ + /**\ + * Motion vector table\ + * - encoding: unused\ + * - decoding: set by lavc\ + */\ + int16_t (*motion_val[2])[2];\ +\ + /**\ + * Macroblock type table\ + * mb_type_base + mb_width + 2\ + * - encoding: unused\ + * - decoding: set by lavc\ + */\ + uint32_t *mb_type;\ +\ + /**\ + * Macroblock size: (0->16x16, 1->8x8, 2-> 4x4, 3-> 2x2)\ + * - encoding: unused\ + * - decoding: set by lavc\ + */\ + uint8_t motion_subsample_log2;\ \ /**\ * for some private data of the user\ - * encoding: unused\ - * decoding: set by user\ + * - encoding: unused\ + * - decoding: set by user\ */\ void *opaque;\ \ /**\ * error\ - * encoding: set by lavc if flags&CODEC_FLAG_PSNR\ - * decoding: unused\ + * - encoding: set by lavc if flags&CODEC_FLAG_PSNR\ + * - decoding: unused\ */\ uint64_t error[4];\ \ /**\ * type of the buffer (to keep track of who has to dealloc data[*])\ - * encoding: set by the one who allocs it\ - * decoding: set by the one who allocs it\ - * Note: user allocated (direct rendering) & internal buffers can not coexist currently\ + * - encoding: set by the one who allocs it\ + * - decoding: set by the one who allocs it\ + * Note: user allocated (direct rendering) & internal buffers can not coexist currently\ */\ int type;\ + \ + /**\ + * when decoding, this signal how much the picture must be delayed.\ + * extra_delay = repeat_pict / (2*fps)\ + * - encoding: unused\ + * - decoding: set by lavc\ + */\ + int repeat_pict;\ + \ + /**\ + * \ + */\ + int qscale_type;\ + \ + /**\ + * The content of the picture is interlaced.\ + * - encoding: set by user\ + * - decoding: set by lavc (default 0)\ + */\ + int interlaced_frame;\ + \ + /**\ + * if the content is interlaced, is top field displayed first.\ + * - encoding: set by user\ + * - decoding: set by lavc\ + */\ + int top_field_first;\ + \ + /**\ + * Pan scan.\ + * - encoding: set by user\ + * - decoding: set by lavc\ + */\ + AVPanScan *pan_scan;\ + \ + /**\ + * tell user application that palette has changed from previous frame.\ + * - encoding: ??? (no palette-enabled encoder yet)\ + * - decoding: set by lavc (default 0)\ + */\ + int palette_has_changed;\ + \ + /**\ + * Codec suggestion on buffer type if != 0\ + * - encoding: unused\ + * - decoding: set by lavc (before get_buffer() call))\ + */\ + int buffer_hints;\ +\ + /**\ + * DCT coeffitients\ + * - encoding: unused\ + * - decoding: set by lavc\ + */\ + short *dct_coeff;\ + +#define FF_QSCALE_TYPE_MPEG1 0 +#define FF_QSCALE_TYPE_MPEG2 1 #define FF_BUFFER_TYPE_INTERNAL 1 -#define FF_BUFFER_TYPE_USER 2 // Direct rendering buffers -#define FF_BUFFER_TYPE_SHARED 4 // input frame for encoding(wont be dealloced) +#define FF_BUFFER_TYPE_USER 2 ///< Direct rendering buffers (image is (de)allocated by user) +#define FF_BUFFER_TYPE_SHARED 4 ///< buffer from somewher else, dont dealloc image (data/base) +#define FF_BUFFER_TYPE_COPY 8 ///< just a (modified) copy of some other buffer, dont dealloc anything #define FF_I_TYPE 1 // Intra #define FF_P_TYPE 2 // Predicted #define FF_B_TYPE 3 // Bi-dir predicted #define FF_S_TYPE 4 // S(GMC)-VOP MPEG4 +#define FF_SI_TYPE 5 +#define FF_SP_TYPE 6 + +#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) +/** + * Audio Video Frame. + */ typedef struct AVFrame { FF_COMMON_FRAME } AVFrame; +#define DEFAULT_FRAME_RATE_BASE 1001000 + +/** + * Used by av_log + */ +typedef struct AVCLASS AVClass; +struct AVCLASS { + const char* class_name; + const char* (*item_name)(void*); /* actually passing a pointer to an AVCodecContext + or AVFormatContext, which begin with an AVClass. + Needed because av_log is in libavcodec and has no visibility + of AVIn/OutputFormat */ +}; + +/** + * main external api structure. + */ typedef struct AVCodecContext { /** - * the average bitrate - * encoding: set by user. unused for constant quantizer encoding - * decoding: set by lavc. 0 or some bitrate if this info is available in the stream + * Info on struct for av_log + * - set by avcodec_alloc_context + */ + AVClass *av_class; + /** + * the average bitrate. + * - encoding: set by user. unused for constant quantizer encoding + * - decoding: set by lavc. 0 or some bitrate if this info is available in the stream */ int bit_rate; /** - * number of bits the bitstream is allowed to diverge from the reference + * number of bits the bitstream is allowed to diverge from the reference. * the reference can be CBR (for CBR pass1) or VBR (for pass2) - * encoding: set by user. unused for constant quantizer encoding - * decoding: unused + * - encoding: set by user. unused for constant quantizer encoding + * - decoding: unused */ int bit_rate_tolerance; /** - * CODEC_FLAG_* - * encoding: set by user. - * decoding: set by user. + * CODEC_FLAG_*. + * - encoding: set by user. + * - decoding: set by user. */ int flags; /** * some codecs needs additionnal format info. It is stored here - * encoding: set by user. - * decoding: set by lavc. (FIXME is this ok?) + * - encoding: set by user. + * - decoding: set by lavc. (FIXME is this ok?) */ int sub_id; /** - * motion estimation algorithm used for video coding - * encoding: MUST be set by user. - * decoding: unused + * motion estimation algorithm used for video coding. + * - encoding: MUST be set by user. + * - decoding: unused */ int me_method; /** - * some codecs need / can use extra-data like huffman tables + * some codecs need / can use extra-data like huffman tables. * mjpeg: huffman tables * rv10: additional flags * mpeg4: global headers (they can be in the bitstream or here) - * encoding: set/allocated/freed by lavc. - * decoding: set/allocated/freed by user. + * - encoding: set/allocated/freed by lavc. + * - decoding: set/allocated/freed by user. */ void *extradata; int extradata_size; /* video only */ /** - * frames per sec multiplied by FRAME_RATE_BASE + * frames per sec multiplied by frame_rate_base. * for variable fps this is the precission, so if the timestamps - * can be specified in msec precssion then this is 1000*FRAME_RATE_BASE - * encoding: MUST be set by user - * decoding: set by lavc. 0 or the frame_rate if available + * can be specified in msec precssion then this is 1000*frame_rate_base + * - encoding: MUST be set by user + * - decoding: set by lavc. 0 or the frame_rate if available */ int frame_rate; - + /** - * encoding: MUST be set by user. - * decoding: set by user, some codecs might override / change it during playback + * width / height. + * - encoding: MUST be set by user. + * - decoding: set by user if known, codec should override / dynamically change if needed */ int width, height; -#define FF_ASPECT_SQUARE 1 -#define FF_ASPECT_4_3_625 2 -#define FF_ASPECT_4_3_525 3 -#define FF_ASPECT_16_9_625 4 -#define FF_ASPECT_16_9_525 5 #define FF_ASPECT_EXTENDED 15 /** - * the number of pictures in a group of pitures, or 0 for intra_only - * encoding: set by user. - * decoding: unused + * the number of pictures in a group of pitures, or 0 for intra_only. + * - encoding: set by user. + * - decoding: unused */ int gop_size; /** - * pixel format, see PIX_FMT_xxx - * encoding: unused - * decoding: set by lavc. + * pixel format, see PIX_FMT_xxx. + * - encoding: FIXME: used by ffmpeg to decide whether an pix_fmt + * conversion is in order. This only works for + * codecs with one supported pix_fmt, we should + * do something for a generic case as well. + * - decoding: set by lavc. */ enum PixelFormat pix_fmt; - - int repeat_pict; /* when decoding, this signal how much the picture */ - /* must be delayed. */ - /* extra_delay = (repeat_pict / 2) * (1/fps) */ - + + /** + * Frame rate emulation. If not zero lower layer (i.e. format handler) + * has to read frames at native frame rate. + * - encoding: set by user. + * - decoding: unused. + */ + int rate_emu; + /** * if non NULL, 'draw_horiz_band' is called by the libavcodec * decoder to draw an horizontal band. It improve cache usage. Not * all codecs can do that. You must check the codec capabilities * before - * encoding: unused - * decoding: set by user. + * - encoding: unused + * - decoding: set by user. + * @param height the height of the slice + * @param y the y position of the slice + * @param type 1->top field, 2->bottom field, 3->frame + * @param offset offset into the AVFrame.data from which the slice should be read */ void (*draw_horiz_band)(struct AVCodecContext *s, - uint8_t **src_ptr, int linesize, - int y, int width, int height); + const AVFrame *src, int offset[4], + int y, int type, int height); /* audio only */ - int sample_rate; /* samples per sec */ + int sample_rate; ///< samples per sec int channels; - int sample_fmt; /* sample format, currenly unused */ + int sample_fmt; ///< sample format, currenly unused /* the following data should not be initialized */ - int frame_size; /* in samples, initialized when calling 'init' */ - int frame_number; /* audio or video frame number */ - int real_pict_num; /* returns the real picture number of - previous encoded frame */ + int frame_size; ///< in samples, initialized when calling 'init' + int frame_number; ///< audio or video frame number + int real_pict_num; ///< returns the real picture number of previous encoded frame /** * number of frames the decoded output will be delayed relative to - * the encoded input - * encoding: set by lavc. - * decoding: unused + * the encoded input. + * - encoding: set by lavc. + * - decoding: unused */ int delay; - /* encoding parameters */ - float qcompress; /* amount of qscale change between easy & hard scenes (0.0-1.0)*/ - float qblur; /* amount of qscale smoothing over time (0.0-1.0) */ + /* - encoding parameters */ + float qcompress; ///< amount of qscale change between easy & hard scenes (0.0-1.0) + float qblur; ///< amount of qscale smoothing over time (0.0-1.0) /** - * minimum quantizer - * encoding: set by user. - * decoding: unused + * minimum quantizer. + * - encoding: set by user. + * - decoding: unused */ int qmin; /** - * maximum quantizer - * encoding: set by user. - * decoding: unused + * maximum quantizer. + * - encoding: set by user. + * - decoding: unused */ int qmax; /** - * maximum quantizer difference etween frames - * encoding: set by user. - * decoding: unused + * maximum quantizer difference etween frames. + * - encoding: set by user. + * - decoding: unused */ int max_qdiff; /** - * maximum number of b frames between non b frames + * maximum number of b frames between non b frames. * note: the output will be delayed by max_b_frames+1 relative to the input - * encoding: set by user. - * decoding: unused + * - encoding: set by user. + * - decoding: unused */ int max_b_frames; /** - * qscale factor between ip and b frames - * encoding: set by user. - * decoding: unused + * qscale factor between ip and b frames. + * - encoding: set by user. + * - decoding: unused */ float b_quant_factor; @@ -460,8 +760,9 @@ typedef struct AVCodecContext { int b_frame_strategy; /** - * encoding: unused - * decoding: set by user. 1-> skip b frames, 2-> skip idct/dequant too, 5-> skip everything except header + * hurry up amount. + * - encoding: unused + * - decoding: set by user. 1-> skip b frames, 2-> skip idct/dequant too, 5-> skip everything except header */ int hurry_up; @@ -469,11 +770,8 @@ typedef struct AVCodecContext { void *priv_data; - /* The following data is for RTP friendly coding */ - /* By now only H.263/H.263+/MPEG4 coder honours this */ - int rtp_mode; /* 1 for activate RTP friendly-mode */ - /* highers numbers represent more error-prone */ - /* enviroments, by now just "1" exist */ + /* unused, FIXME remove*/ + int rtp_mode; int rtp_payload_size; /* The size of the RTP payload, the coder will */ /* do it's best to deliver a chunk with size */ @@ -500,75 +798,85 @@ typedef struct AVCodecContext { int misc_bits; /** - * number of bits used for the previously encoded frame - * encoding: set by lavc - * decoding: - for audio - bits_per_sample + * number of bits used for the previously encoded frame. + * - encoding: set by lavc + * - decoding: unused */ int frame_bits; - + /** - * private data of the user, can be used to carry app specific stuff - * encoding: set by user - * decoding: set by user + * private data of the user, can be used to carry app specific stuff. + * - encoding: set by user + * - decoding: set by user */ void *opaque; char codec_name[32]; enum CodecType codec_type; /* see CODEC_TYPE_xxx */ enum CodecID codec_id; /* see CODEC_ID_xxx */ - unsigned int codec_tag; /* codec tag, only used if unknown codec */ /** - * workaround bugs in encoders which sometimes cannot be detected automatically - * encoding: unused - * decoding: set by user + * fourcc (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A'). + * this is used to workaround some encoder bugs + * - encoding: set by user, if not then the default based on codec_id will be used + * - decoding: set by user, will be converted to upper case by lavc during init + */ + unsigned int codec_tag; + + /** + * workaround bugs in encoders which sometimes cannot be detected automatically. + * - encoding: unused + * - decoding: set by user */ int workaround_bugs; -#define FF_BUG_AUTODETECT 1 //autodetection +#define FF_BUG_AUTODETECT 1 ///< autodetection #define FF_BUG_OLD_MSMPEG4 2 #define FF_BUG_XVID_ILACE 4 #define FF_BUG_UMP4 8 #define FF_BUG_NO_PADDING 16 -#define FF_BUG_AC_VLC 32 +#define FF_BUG_AC_VLC 0 ///< will be removed, libavcodec can now handle these non compliant files by default #define FF_BUG_QPEL_CHROMA 64 #define FF_BUG_STD_QPEL 128 #define FF_BUG_QPEL_CHROMA2 256 #define FF_BUG_DIRECT_BLOCKSIZE 512 +#define FF_BUG_EDGE 1024 //#define FF_BUG_FAKE_SCALABILITY 16 //autodetection should work 100% /** - * encoding: set by user - * decoding: unused + * luma single coeff elimination threshold. + * - encoding: set by user + * - decoding: unused */ int luma_elim_threshold; /** - * encoding: set by user - * decoding: unused + * chroma single coeff elimination threshold. + * - encoding: set by user + * - decoding: unused */ int chroma_elim_threshold; /** - * strictly follow the std (MPEG4, ...) - * encoding: set by user - * decoding: unused + * strictly follow the std (MPEG4, ...). + * - encoding: set by user + * - decoding: unused */ int strict_std_compliance; /** - * qscale offset between ip and b frames + * qscale offset between ip and b frames. * if > 0 then the last p frame quantizer will be used (q= lastp_q*factor+offset) * if < 0 then normal ratecontrol will be done (q= -normal_q*factor+offset) - * encoding: set by user. - * decoding: unused + * - encoding: set by user. + * - decoding: unused */ float b_quant_offset; /** * error resilience higher values will detect more errors but may missdetect - * some more or less valid parts as errors - * encoding: unused - * decoding: set by user + * some more or less valid parts as errors. + * - encoding: unused + * - decoding: set by user */ int error_resilience; #define FF_ER_CAREFULL 1 @@ -579,8 +887,9 @@ typedef struct AVCodecContext { /** * called at the beginning of each frame to get a buffer for it. * if pic.reference is set then the frame will be read later by lavc - * encoding: unused - * decoding: set by lavc, user can override + * width and height should be rounded up to the next multiple of 16 + * - encoding: unused + * - decoding: set by lavc, user can override */ int (*get_buffer)(struct AVCodecContext *c, AVFrame *pic); @@ -588,51 +897,51 @@ typedef struct AVCodecContext { * called to release buffers which where allocated with get_buffer. * a released buffer can be reused in get_buffer() * pic.data[*] must be set to NULL - * encoding: unused - * decoding: set by lavc, user can override + * - encoding: unused + * - decoding: set by lavc, user can override */ void (*release_buffer)(struct AVCodecContext *c, AVFrame *pic); /** - * is 1 if the decoded stream contains b frames, 0 otherwise - * encoding: unused - * decoding: set by lavc + * is 1 if the decoded stream contains b frames, 0 otherwise. + * - encoding: unused + * - decoding: set by lavc */ int has_b_frames; - int block_align; /* used by some WAV based audio codecs */ + int block_align; ///< used by some WAV based audio codecs - int parse_only; /* decoding only: if true, only parsing is done + int parse_only; /* - decoding only: if true, only parsing is done (function avcodec_parse_frame()). The frame data is returned. Only MPEG codecs support this now. */ /** - * 0-> h263 quant 1-> mpeg quant - * encoding: set by user. - * decoding: unused + * 0-> h263 quant 1-> mpeg quant. + * - encoding: set by user. + * - decoding: unused */ int mpeg_quant; /** - * pass1 encoding statistics output buffer - * encoding: set by lavc - * decoding: unused + * pass1 encoding statistics output buffer. + * - encoding: set by lavc + * - decoding: unused */ - char *stats_out; /* encoding statistics output buffer */ + char *stats_out; /** * pass2 encoding statistics input buffer. * concatenated stuff from stats_out of pass1 should be placed here - * encoding: allocated/set/freed by user - * decoding: unused + * - encoding: allocated/set/freed by user + * - decoding: unused */ char *stats_in; /** - * ratecontrol qmin qmax limiting method + * 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 + * - encoding: set by user. + * - decoding: unused */ float rc_qsquish; @@ -640,69 +949,69 @@ typedef struct AVCodecContext { int rc_qmod_freq; /** - * ratecontrol override, see RcOverride - * encoding: allocated/set/freed by user. - * decoding: unused + * 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 + * rate control equation. + * - encoding: set by user + * - decoding: unused */ char *rc_eq; /** - * maximum bitrate - * encoding: set by user. - * decoding: unused + * maximum bitrate. + * - encoding: set by user. + * - decoding: unused */ int rc_max_rate; /** - * minimum bitrate - * encoding: set by user. - * decoding: unused + * minimum bitrate. + * - encoding: set by user. + * - decoding: unused */ int rc_min_rate; /** - * decoder bitstream buffer size - * encoding: set by user. - * decoding: unused + * 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 - * encoding: set by user. - * decoding: unused + * qscale factor between p and i frames. + * if > 0 then the last p frame quantizer will be used (q= lastp_q*factor+offset) + * if < 0 then normal ratecontrol will be done (q= -normal_q*factor+offset) + * - encoding: set by user. + * - decoding: unused */ float i_quant_factor; /** - * qscale offset between p and i frames - * 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 */ float i_quant_offset; /** - * initial complexity for pass1 ratecontrol - * 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 + * dct algorithm, see FF_DCT_* below. + * - encoding: set by user + * - decoding: unused */ int dct_algo; #define FF_DCT_AUTO 0 @@ -711,54 +1020,51 @@ typedef struct AVCodecContext { #define FF_DCT_MMX 3 #define FF_DCT_MLIB 4 #define FF_DCT_ALTIVEC 5 +#define FF_DCT_FAAN 6 /** - * luminance masking (0-> disabled) - * encoding: set by user - * decoding: unused + * luminance masking (0-> disabled). + * - encoding: set by user + * - decoding: unused */ float lumi_masking; /** - * temporary complexity masking (0-> disabled) - * encoding: set by user - * decoding: unused + * temporary complexity masking (0-> disabled). + * - encoding: set by user + * - decoding: unused */ float temporal_cplx_masking; /** - * spatial complexity masking (0-> disabled) - * encoding: set by user - * decoding: unused + * spatial complexity masking (0-> disabled). + * - encoding: set by user + * - decoding: unused */ float spatial_cplx_masking; /** - * p block masking (0-> disabled) - * encoding: set by user - * decoding: unused + * p block masking (0-> disabled). + * - encoding: set by user + * - decoding: unused */ float p_masking; /** - * darkness masking (0-> disabled) - * encoding: set by user - * decoding: unused + * darkness masking (0-> disabled). + * - encoding: set by user + * - decoding: unused */ float dark_masking; + + /* for binary compatibility */ + int unused; + /** - * fourcc (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 - */ - int fourcc; - - /** - * idct algorithm, see FF_IDCT_* below - * encoding: set by user - * decoding: set by user + * idct algorithm, see FF_IDCT_* below. + * - encoding: set by user + * - decoding: set by user */ int idct_algo; #define FF_IDCT_AUTO 0 @@ -770,46 +1076,61 @@ typedef struct AVCodecContext { #define FF_IDCT_MLIB 6 #define FF_IDCT_ARM 7 #define FF_IDCT_ALTIVEC 8 +#define FF_IDCT_SH4 9 +#define FF_IDCT_SIMPLEARM 10 /** - * slice count - * encoding: set by lavc - * decoding: set by user (or 0) + * slice count. + * - encoding: set by lavc + * - decoding: set by user (or 0) */ int slice_count; /** - * slice offsets in the frame in bytes - * encoding: set/allocated by lavc - * decoding: set/allocated by user (or NULL) + * slice offsets in the frame in bytes. + * - encoding: set/allocated by lavc + * - decoding: set/allocated by user (or NULL) */ int *slice_offset; /** - * error concealment flags - * encoding: unused - * decoding: set by user + * error concealment flags. + * - encoding: unused + * - decoding: set by user */ int error_concealment; #define FF_EC_GUESS_MVS 1 #define FF_EC_DEBLOCK 2 /** - * dsp_mask could be used to disable unwanted + * dsp_mask could be add used to disable unwanted CPU features * CPU features (i.e. MMX, SSE. ...) - */ - unsigned dsp_mask; - - /** - * bits per sample/pixel from the demuxer (needed for huffyuv) - * encoding: set by lavc - * decoding: set by user + * + * 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 */ +#endif /* HAVE_MMX */ + + /** + * bits per sample/pixel from the demuxer (needed for huffyuv). + * - encoding: set by lavc + * - decoding: set by user */ int bits_per_sample; /** - * prediction method (needed for huffyuv) - * encoding: set by user - * decoding: unused + * prediction method (needed for huffyuv). + * - encoding: set by user + * - decoding: unused */ int prediction_method; #define FF_PRED_LEFT 0 @@ -817,23 +1138,24 @@ typedef struct AVCodecContext { #define FF_PRED_MEDIAN 2 /** - * aspect ratio. (0 if unknown) - * encoding: set by user. - * decoding: set by lavc. + * 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. */ - float aspect_ratio; + AVRational sample_aspect_ratio; /** - * the picture in the bitstream - * encoding: set by lavc - * decoding: set by lavc + * the picture in the bitstream. + * - encoding: set by lavc + * - decoding: set by lavc */ AVFrame *coded_frame; /** - * debug - * encoding: set by user. - * decoding: set by user. + * debug. + * - encoding: set by user. + * - decoding: set by user. */ int debug; #define FF_DEBUG_PICT_INFO 1 @@ -842,50 +1164,71 @@ typedef struct AVCodecContext { #define FF_DEBUG_MB_TYPE 8 #define FF_DEBUG_QP 16 #define FF_DEBUG_MV 32 -#define FF_DEBUG_VIS_MV 0x00000040 +#define FF_DEBUG_DCT_COEFF 0x00000040 #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 /** - * error - * encoding: set by lavc if flags&CODEC_FLAG_PSNR - * decoding: unused + * 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 */ uint64_t error[4]; /** - * minimum MB quantizer - * encoding: set by user. - * decoding: unused + * minimum MB quantizer. + * - encoding: set by user. + * - decoding: unused */ int mb_qmin; /** - * maximum MB quantizer - * encoding: set by user. - * decoding: unused + * maximum MB quantizer. + * - encoding: set by user. + * - decoding: unused */ int mb_qmax; /** - * motion estimation compare function - * encoding: set by user. - * decoding: unused + * motion estimation compare function. + * - encoding: set by user. + * - decoding: unused */ int me_cmp; /** - * subpixel motion estimation compare function - * encoding: set by user. - * decoding: unused + * subpixel motion estimation compare function. + * - encoding: set by user. + * - decoding: unused */ int me_sub_cmp; /** - * macroblock compare function (not supported yet) - * encoding: set by user. - * decoding: unused + * macroblock compare function (not supported yet). + * - encoding: set by user. + * - decoding: unused */ int mb_cmp; + /** + * interlaced dct compare function + * - encoding: set by user. + * - decoding: unused + */ + int ildct_cmp; #define FF_CMP_SAD 0 #define FF_CMP_SSE 1 #define FF_CMP_SATD 2 @@ -894,68 +1237,70 @@ typedef struct AVCodecContext { #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_CHROMA 256 /** - * ME diamond size & shape - * encoding: set by user. - * decoding: unused + * ME diamond size & shape. + * - encoding: set by user. + * - decoding: unused */ int dia_size; /** - * amount of previous MV predictors (2a+1 x 2a+1 square) - * encoding: set by user. - * decoding: unused + * 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 + * 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 + * 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 + * ME pre pass diamond size & shape. + * - encoding: set by user. + * - decoding: unused */ int pre_dia_size; /** - * subpel ME quality - * encoding: set by user. - * decoding: unused + * subpel ME quality. + * - encoding: set by user. + * - decoding: unused */ int me_subpel_quality; /** - * callback to negotiate the pixelFormat + * callback to negotiate the pixelFormat. * @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 + * - encoding: unused + * - decoding: set by user, if not set then the native format will always be choosen */ - enum PixelFormat (*get_format)(struct AVCodecContext *s, enum PixelFormat * fmt); + 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 + * - encoding: unused. + * - decoding: set by decoder */ int dtg_active_format; #define FF_DTG_AFD_SAME 8 @@ -966,24 +1311,275 @@ typedef struct AVCodecContext { #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. + */ + 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< ('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; } AVCodecContext; -//void avcodec_getopt(AVCodecContext* avctx, const char* str, avc_config_t** config); +/** + * AVOption. + */ typedef struct AVOption { /** options' name */ const char *name; /* if name is NULL, it indicates a link to next */ - /** short English text help */ - const char *help; + /** 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_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) @@ -999,14 +1595,24 @@ typedef struct AVOption { * defval might select other then first argument as default */ const char *defstr; - const struct AVOption *sub; /* used when name is NULL */ - /* when it's NULL return to previous level (or finish reading) */ #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); + + +/** + * AVCodec. + */ typedef struct AVCodec { const char *name; - int type; + enum CodecType type; int id; int priv_data_size; int (*init)(AVCodecContext *); @@ -1017,6 +1623,8 @@ typedef struct AVCodec { int capabilities; const AVOption *options; struct AVCodec *next; + void (*flush)(AVCodecContext *); + const AVRational *supported_framerates; ///array of supported framerates, or NULL if any, array is terminated by {0,0} } AVCodec; /** @@ -1025,18 +1633,44 @@ typedef struct AVCodec { */ typedef struct AVPicture { uint8_t *data[4]; - int linesize[4]; + int linesize[4]; ///< number of bytes per line } AVPicture; +/** + * AVPaletteControl + * This structure defines a method for communicating palette changes + * between and demuxer and a decoder. + */ +#define AVPALETTE_SIZE 1024 +#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; + extern AVCodec ac3_encoder; extern AVCodec mp2_encoder; extern AVCodec mp3lame_encoder; extern AVCodec oggvorbis_encoder; +extern AVCodec faac_encoder; extern AVCodec mpeg1video_encoder; +extern AVCodec mpeg2video_encoder; extern AVCodec h263_encoder; extern AVCodec h263p_encoder; +extern AVCodec flv_encoder; extern AVCodec rv10_encoder; +extern AVCodec rv20_encoder; extern AVCodec mjpeg_encoder; +extern AVCodec ljpeg_encoder; extern AVCodec mpeg4_encoder; extern AVCodec msmpeg4v1_encoder; extern AVCodec msmpeg4v2_encoder; @@ -1044,6 +1678,13 @@ extern AVCodec msmpeg4v3_encoder; extern AVCodec wmv1_encoder; extern AVCodec wmv2_encoder; extern AVCodec huffyuv_encoder; +extern AVCodec h264_encoder; +extern AVCodec asv1_encoder; +extern AVCodec asv2_encoder; +extern AVCodec vcr1_encoder; +extern AVCodec ffv1_encoder; +extern AVCodec mdec_encoder; +extern AVCodec zlib_encoder; extern AVCodec h263_decoder; extern AVCodec mpeg4_decoder; @@ -1052,16 +1693,22 @@ extern AVCodec msmpeg4v2_decoder; extern AVCodec msmpeg4v3_decoder; extern AVCodec wmv1_decoder; extern AVCodec wmv2_decoder; -extern AVCodec mpeg_decoder; +extern AVCodec mpeg1video_decoder; +extern AVCodec mpeg2video_decoder; +extern AVCodec mpegvideo_decoder; +extern AVCodec mpeg_xvmc_decoder; extern AVCodec h263i_decoder; +extern AVCodec flv_decoder; extern AVCodec rv10_decoder; +extern AVCodec rv20_decoder; extern AVCodec svq1_decoder; +extern AVCodec svq3_decoder; extern AVCodec dvvideo_decoder; -extern AVCodec dvaudio_decoder; extern AVCodec wmav1_decoder; extern AVCodec wmav2_decoder; extern AVCodec mjpeg_decoder; extern AVCodec mjpegb_decoder; +extern AVCodec sp5x_decoder; extern AVCodec mp2_decoder; extern AVCodec mp3_decoder; extern AVCodec mace3_decoder; @@ -1069,6 +1716,47 @@ extern AVCodec mace6_decoder; extern AVCodec huffyuv_decoder; extern AVCodec oggvorbis_decoder; extern AVCodec cyuv_decoder; +extern AVCodec h264_decoder; +extern AVCodec indeo3_decoder; +extern AVCodec vp3_decoder; +extern AVCodec theora_decoder; +extern AVCodec amr_nb_decoder; +extern AVCodec amr_nb_encoder; +extern AVCodec amr_wb_encoder; +extern AVCodec amr_wb_decoder; +extern AVCodec aac_decoder; +extern AVCodec mpeg4aac_decoder; +extern AVCodec asv1_decoder; +extern AVCodec asv2_decoder; +extern AVCodec vcr1_decoder; +extern AVCodec cljr_decoder; +extern AVCodec ffv1_decoder; +extern AVCodec fourxm_decoder; +extern AVCodec mdec_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; +extern AVCodec eightbps_decoder; +extern AVCodec smc_decoder; +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 qtrle_decoder; +extern AVCodec flac_decoder; /* pcm codecs */ #define PCM_CODEC(id, name) \ @@ -1088,12 +1776,22 @@ PCM_CODEC(CODEC_ID_PCM_MULAW, pcm_mulaw); 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); +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); #undef PCM_CODEC /* dummy raw video codec */ -extern AVCodec rawvideo_codec; +extern AVCodec rawvideo_encoder; +extern AVCodec rawvideo_decoder; /* the following codecs use external GPL libs */ extern AVCodec ac3_decoder; @@ -1124,23 +1822,57 @@ ImgReSampleContext *img_resample_full_init(int owidth, int oheight, int leftBand, int rightBand); void img_resample(ImgReSampleContext *s, - AVPicture *output, AVPicture *input); + AVPicture *output, const AVPicture *input); void img_resample_close(ImgReSampleContext *s); +/** + * 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 0 if successful, -1 if not. + */ +int avpicture_alloc(AVPicture *picture, int pix_fmt, int width, int height); + +/* Free a picture previously allocated by avpicture_alloc. */ +void avpicture_free(AVPicture *picture); + 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); 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); +enum PixelFormat avcodec_get_pix_fmt(const char* name); + +#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) */ + +int avcodec_get_pix_fmt_loss(int dst_pix_fmt, int src_pix_fmt, + int has_alpha); +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 */ +int img_get_alpha_info(const AVPicture *src, + int pix_fmt, int width, int height); /* convert among pixel formats */ int img_convert(AVPicture *dst, int dst_pix_fmt, - AVPicture *src, int pix_fmt, + const AVPicture *src, int pix_fmt, int width, int height); /* deinterlace a picture */ -int avpicture_deinterlace(AVPicture *dst, AVPicture *src, +int avpicture_deinterlace(AVPicture *dst, const AVPicture *src, int pix_fmt, int width, int height); /* external high level API */ @@ -1153,8 +1885,6 @@ unsigned avcodec_version(void); unsigned avcodec_build(void); void avcodec_init(void); -void avcodec_set_bit_exact(void); - void register_avcodec(AVCodec *format); AVCodec *avcodec_find_encoder(enum CodecID id); AVCodec *avcodec_find_encoder_by_name(const char *name); @@ -1168,8 +1898,19 @@ AVFrame *avcodec_alloc_frame(void); int avcodec_default_get_buffer(AVCodecContext *s, AVFrame *pic); void avcodec_default_release_buffer(AVCodecContext *s, AVFrame *pic); +void avcodec_default_free_buffers(AVCodecContext *s); + +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); +//FIXME func typedef +/** + * opens / inits the AVCodecContext. + * not thread save! + */ int avcodec_open(AVCodecContext *avctx, AVCodec *codec); + int avcodec_decode_audio(AVCodecContext *avctx, int16_t *samples, int *frame_size_ptr, uint8_t *buf, int buf_size); @@ -1190,6 +1931,26 @@ void avcodec_register_all(void); void avcodec_flush_buffers(AVCodecContext *avctx); +/* misc usefull functions */ + +/** + * returns a single letter to describe the picture type + */ +char av_get_pict_type_char(int pict_type); + +/** + * reduce a fraction. + * this is usefull for framerate calculations + * @param max the maximum allowed for dst_nom & dst_den + * @return 1 if exact, 0 otherwise + */ +int av_reduce(int *dst_nom, int *dst_den, int64_t nom, int64_t den, int64_t max); + +/** + * rescale a 64bit integer. + * a simple a*b/c isnt possible as it can overflow + */ +int64_t av_rescale(int64_t a, int b, int c); /** @@ -1199,7 +1960,7 @@ void avcodec_flush_buffers(AVCodecContext *avctx); */ typedef struct { - // compressed size used from given memory buffer + /// compressed size used from given memory buffer int size; /// I/P/B frame type int frame_type; @@ -1268,14 +2029,68 @@ typedef enum { */ int avcodec(void* handle, avc_cmd_t cmd, void* pin, void* pout); +/* 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; + +#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]; +} AVCodecParserContext; + +typedef struct AVCodecParser { + int codec_ids[3]; /* 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); + 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); +void av_parser_close(AVCodecParserContext *s); + +extern AVCodecParser mpegvideo_parser; +extern AVCodecParser mpeg4video_parser; +extern AVCodecParser h263_parser; +extern AVCodecParser h264_parser; +extern AVCodecParser mpegaudio_parser; +extern AVCodecParser ac3_parser; + /* memory */ void *av_malloc(unsigned int size); void *av_mallocz(unsigned int size); void *av_realloc(void *ptr, unsigned int size); void av_free(void *ptr); char *av_strdup(const char *s); -void __av_freep(void **ptr); -#define av_freep(p) __av_freep((void **)(p)) +void av_freep(void *ptr); void *av_fast_realloc(void *ptr, unsigned int *size, unsigned int min_size); /* for static data only */ /* call av_free_static to release all staticaly allocated tables */ @@ -1283,6 +2098,26 @@ void av_free_static(void); void *__av_mallocz_static(void** location, unsigned int size); #define av_mallocz_static(p, s) __av_mallocz_static((void **)(p), s) +/* add by bero : in adx.c */ +int is_adx(const unsigned char *buf,size_t bufsize); + +void img_copy(AVPicture *dst, const AVPicture *src, + int pix_fmt, int width, int height); + +/* av_log API */ + +#include + +#define AV_LOG_ERROR 0 +#define AV_LOG_INFO 1 +#define AV_LOG_DEBUG 2 + +extern void av_log(void*, int level, const char *fmt, ...) __attribute__ ((__format__ (__printf__, 3, 4))); +extern void av_vlog(void*, int level, const char *fmt, va_list); +extern int av_log_get_level(void); +extern void av_log_set_level(int); +extern void av_log_set_callback(void (*)(void*, int, const char*, va_list)); + #ifdef __cplusplus } #endif