diff options
Diffstat (limited to 'src/libffmpeg/libavcodec/avcodec.h')
-rw-r--r-- | src/libffmpeg/libavcodec/avcodec.h | 848 |
1 files changed, 499 insertions, 349 deletions
diff --git a/src/libffmpeg/libavcodec/avcodec.h b/src/libffmpeg/libavcodec/avcodec.h index 06b348fa7..c8b48c072 100644 --- a/src/libffmpeg/libavcodec/avcodec.h +++ b/src/libffmpeg/libavcodec/avcodec.h @@ -1,6 +1,12 @@ #ifndef AVCODEC_H #define AVCODEC_H +/** + * @file avcodec.h + * external api header. + */ + + #ifdef __cplusplus extern "C" { #endif @@ -9,8 +15,10 @@ extern "C" { #define LIBAVCODEC_VERSION_INT 0x000406 #define LIBAVCODEC_VERSION "0.4.6" -#define LIBAVCODEC_BUILD 4654 -#define LIBAVCODEC_BUILD_STR "4654" +#define LIBAVCODEC_BUILD 4663 +#define LIBAVCODEC_BUILD_STR "4663" + +#define LIBAVCODEC_IDENT "FFmpeg" LIBAVCODEC_VERSION "b" LIBAVCODEC_BUILD_STR enum CodecID { CODEC_ID_NONE, @@ -40,6 +48,7 @@ enum CodecID { CODEC_ID_MACE3, CODEC_ID_MACE6, CODEC_ID_HUFFYUV, + CODEC_ID_CYUV, /* various pcm "codecs" */ CODEC_ID_PCM_S16LE, @@ -63,27 +72,31 @@ enum CodecType { CODEC_TYPE_AUDIO, }; +/** + * Pixel format. + */ 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_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_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_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_MONOWHITE, ///< 0 is white + PIX_FMT_MONOBLACK, ///< 0 is black + PIX_FMT_PAL8, ///< 8 bit with RGBA palette 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 */ @@ -127,154 +140,180 @@ 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_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 /* 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 / 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_BITEXACT 0x00800000 ///< use only bitexact stuff (except (i)dct) +/* Fx : Flag for h263+ extra options */ +#define CODEC_FLAG_H263P_AIC 0x01000000 ///< Advanced intra coding +#define CODEC_FLAG_H263P_UMV 0x02000000 ///< Unlimited motion vector +/* For advanced prediction mode, we reuse the 4MV flag */ +/* Unsupported options : + * Syntax Arithmetic coding (SAC) + * Deblocking filter internal loop + * Slice structured + * Reference Picture Selection + * Independant Segment Decoding + * Alternative Inter * VLC + * Modified Quantization */ +/* /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 +#define CODEC_CAP_DR1 0x0002 ///< direct rendering method 1 /* if 'parse_only' field is true, then avcodec_parse_frame() can be used */ #define CODEC_CAP_PARSE_ONLY 0x0004 #define CODEC_CAP_TRUNCATED 0x0008 -#define FRAME_RATE_BASE 10000 - #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\ + * - 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\ + * - encoding: MUST be set by user\ + * - decoding: set by lavc\ */\ long long int 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\ + * - encoding: set by lavc for coded_picture (and set by user for input)\ + * - decoding: set by lavc\ */\ float 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()\ + * - 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;\ \ /**\ * 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\ + * - 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; + #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 +#define FF_BUFFER_TYPE_SHARED 4 ///< buffer from somewher else, dont dealloc #define FF_I_TYPE 1 // Intra @@ -286,67 +325,73 @@ typedef struct AVFrame { FF_COMMON_FRAME } AVFrame; +#define DEFAULT_FRAME_RATE_BASE 1001000 + +/** + * 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 + * 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, some codecs might override / change it during playback */ int width, height; @@ -358,91 +403,94 @@ typedef struct AVCodecContext { #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: unused + * - 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. */ void (*draw_horiz_band)(struct AVCodecContext *s, - UINT8 **src_ptr, int linesize, + uint8_t **src_ptr, int linesize, int y, int width, 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; @@ -451,8 +499,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; @@ -491,31 +540,38 @@ 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: unused + * - 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 @@ -524,41 +580,45 @@ typedef struct AVCodecContext { #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 @@ -569,8 +629,8 @@ 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 + * - encoding: unused + * - decoding: set by lavc, user can override */ int (*get_buffer)(struct AVCodecContext *c, AVFrame *pic); @@ -578,51 +638,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; @@ -630,69 +690,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. + * - encoding: set by user. + * - decoding: unused */ float i_quant_factor; /** - * qscale offset between p and i frames + * 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 + * - 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 @@ -703,52 +763,48 @@ typedef struct AVCodecContext { #define FF_DCT_ALTIVEC 5 /** - * 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 @@ -762,44 +818,57 @@ typedef struct AVCodecContext { #define FF_IDCT_ALTIVEC 8 /** - * 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 @@ -807,23 +876,23 @@ typedef struct AVCodecContext { #define FF_PRED_MEDIAN 2 /** - * aspect ratio. (0 if unknown) - * encoding: set by user. - * decoding: set by lavc. + * aspect ratio (0 if unknown). + * - encoding: set by user. + * - decoding: set by lavc. */ float 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 @@ -836,44 +905,45 @@ typedef struct AVCodecContext { #define FF_DEBUG_SKIP 0x00000080 #define FF_DEBUG_STARTCODE 0x00000100 #define FF_DEBUG_PTS 0x00000200 +#define FF_DEBUG_ER 0x00000400 /** - * error - * encoding: set by lavc if flags&CODEC_FLAG_PSNR - * decoding: unused + * 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; #define FF_CMP_SAD 0 @@ -887,79 +957,179 @@ typedef struct AVCodecContext { #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); + + /** + * DTG active format information (additionnal aspect ratio + * information only used in DVB MPEG2 transport streams). 0 if + * not set. + * + * - encoding: unused. + * - decoding: set by decoder + */ + int dtg_active_format; +#define FF_DTG_AFD_SAME 8 +#define FF_DTG_AFD_4_3 9 +#define FF_DTG_AFD_16_9 10 +#define FF_DTG_AFD_14_9 11 +#define FF_DTG_AFD_4_3_SP_14_9 13 +#define FF_DTG_AFD_16_9_SP_14_9 14 +#define FF_DTG_AFD_SP_4_3 15 + + /** + * Maximum motion estimation search range in subpel units. + * if 0 then no limit + * + * - encoding: set by user. + * - decoding: unused. + */ + 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; + } AVCodecContext; + +/** + * AVOption. + */ +typedef struct AVOption { + /** options' name */ + const char *name; /* if name is NULL, it indicates a link to next */ + /** short English text help or const struct AVOption* subpointer */ + const char *help; // const struct AVOption* sub; + /** offset to context structure where the parsed value should be stored */ + int offset; + /** options' type */ + int type; +#define FF_OPT_TYPE_BOOL 1 ///< boolean - true,1,on (or simply presence) +#define FF_OPT_TYPE_DOUBLE 2 ///< double +#define FF_OPT_TYPE_INT 3 ///< integer +#define FF_OPT_TYPE_STRING 4 ///< string (finished with \0) +#define FF_OPT_TYPE_MASK 0x1f ///< mask for types - upper bits are various flags +//#define FF_OPT_TYPE_EXPERT 0x20 // flag for expert option +#define FF_OPT_TYPE_FLAG (FF_OPT_TYPE_BOOL | 0x40) +#define FF_OPT_TYPE_RCOVERRIDE (FF_OPT_TYPE_STRING | 0x80) + /** min value (min == max -> no limits) */ + double min; + /** maximum value for double/int */ + double max; + /** default boo [0,1]l/double/int value */ + double defval; + /** + * default string value (with optional semicolon delimited extra option-list + * i.e. option1;option2;option3 + * defval might select other then first argument as default + */ + const char *defstr; +#define FF_OPT_MAX_DEPTH 10 +} AVOption; + +/** + * Parse option(s) and sets fields in passed structure + * @param strct structure where the parsed results will be written + * @param list list with AVOptions + * @param opts string with options for parsing + */ +int avoption_parse(void* strct, const AVOption* list, const char* opts); + + +/** + * AVCodec. + */ typedef struct AVCodec { const char *name; int type; int id; int priv_data_size; int (*init)(AVCodecContext *); - int (*encode)(AVCodecContext *, UINT8 *buf, int buf_size, void *data); + int (*encode)(AVCodecContext *, uint8_t *buf, int buf_size, void *data); int (*close)(AVCodecContext *); int (*decode)(AVCodecContext *, void *outdata, int *outdata_size, - UINT8 *buf, int buf_size); + uint8_t *buf, int buf_size); int capabilities; + const AVOption *options; struct AVCodec *next; } AVCodec; -/** +/** * four components are given, that's all. * the last component is alpha */ typedef struct AVPicture { - UINT8 *data[4]; + uint8_t *data[4]; int linesize[4]; } AVPicture; @@ -1003,6 +1173,7 @@ extern AVCodec mace3_decoder; extern AVCodec mace6_decoder; extern AVCodec huffyuv_decoder; extern AVCodec oggvorbis_decoder; +extern AVCodec cyuv_decoder; /* pcm codecs */ #define PCM_CODEC(id, name) \ @@ -1062,7 +1233,7 @@ void img_resample(ImgReSampleContext *s, void img_resample_close(ImgReSampleContext *s); -int avpicture_fill(AVPicture *picture, UINT8 *ptr, +int avpicture_fill(AVPicture *picture, uint8_t *ptr, int pix_fmt, int width, int height); 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); @@ -1087,8 +1258,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); @@ -1104,18 +1273,18 @@ int avcodec_default_get_buffer(AVCodecContext *s, AVFrame *pic); void avcodec_default_release_buffer(AVCodecContext *s, AVFrame *pic); int avcodec_open(AVCodecContext *avctx, AVCodec *codec); -int avcodec_decode_audio(AVCodecContext *avctx, INT16 *samples, +int avcodec_decode_audio(AVCodecContext *avctx, int16_t *samples, int *frame_size_ptr, - UINT8 *buf, int buf_size); + uint8_t *buf, int buf_size); int avcodec_decode_video(AVCodecContext *avctx, AVFrame *picture, int *got_picture_ptr, - UINT8 *buf, int buf_size); -int avcodec_parse_frame(AVCodecContext *avctx, UINT8 **pdata, + uint8_t *buf, int buf_size); +int avcodec_parse_frame(AVCodecContext *avctx, uint8_t **pdata, int *data_size_ptr, - UINT8 *buf, int buf_size); -int avcodec_encode_audio(AVCodecContext *avctx, UINT8 *buf, int buf_size, + uint8_t *buf, int buf_size); +int avcodec_encode_audio(AVCodecContext *avctx, uint8_t *buf, int buf_size, const short *samples); -int avcodec_encode_video(AVCodecContext *avctx, UINT8 *buf, int buf_size, +int avcodec_encode_video(AVCodecContext *avctx, uint8_t *buf, int buf_size, const AVFrame *pict); int avcodec_close(AVCodecContext *avctx); @@ -1124,40 +1293,21 @@ void avcodec_register_all(void); void avcodec_flush_buffers(AVCodecContext *avctx); -typedef struct { - /** options' name with default value*/ - const char* name; - /** English text help */ - const char* help; - /** type of variable */ - int type; -#define FF_CONF_TYPE_BOOL 1 // boolean - true,1,on (or simply presence) -#define FF_CONF_TYPE_DOUBLE 2 // double -#define FF_CONF_TYPE_INT 3 // integer -#define FF_CONF_TYPE_STRING 4 // string (finished with \0) -#define FF_CONF_TYPE_MASK 0x1f // mask for types - upper bits are various flags -#define FF_CONF_TYPE_EXPERT 0x20 // flag for expert option -#define FF_CONF_TYPE_FLAG (FF_CONF_TYPE_BOOL | 0x40) -#define FF_CONF_TYPE_RCOVERIDE (FF_CONF_TYPE_STRING | 0x80) - /** where the parsed value should be stored */ - void* val; - /** min value (min == max -> no limits) */ - double min; - /** maximum value for double/int */ - double max; - /** default boo [0,1]l/double/int value */ - double defval; - /** - * default string value (with optional semicolon delimited extra option-list - * i.e. option1;option2;option3 - * defval might select other then first argument as default - */ - const char* defstr; - /** char* list of supported codecs (i.e. ",msmpeg4,h263," NULL - everything */ - const char* supported; -} avc_config_t; +/* misc usefull functions */ +/** + * 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); -void avcodec_getopt(AVCodecContext* avctx, const char* str, avc_config_t** config); /** * Interface for 0.5.0 version @@ -1166,7 +1316,7 @@ void avcodec_getopt(AVCodecContext* avctx, const char* str, avc_config_t** confi */ 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; @@ -1243,7 +1393,7 @@ 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_fast_realloc(void *ptr, int *size, int min_size); +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 */ void av_free_static(void); |