📄 avcodec.h
字号:
* 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;\#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 (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/** * 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 */ int bit_rate; /** * 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 */ int bit_rate_tolerance; /** * 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?) */ int sub_id; /** * 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. * 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. */ void *extradata; int extradata_size; /* video only */ /** * 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 */ int frame_rate; /** * 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 */ int gop_size; /** * 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; /** * 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. * @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, const AVFrame *src, int offset[4], int y, int type, int height); /* audio only */ int sample_rate; ///< samples per sec int channels; 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 /** * number of frames the decoded output will be delayed relative to * 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) /** * minimum quantizer. * - encoding: set by user. * - decoding: unused */ int qmin; /** * maximum quantizer. * - encoding: set by user. * - decoding: unused */ int qmax; /** * maximum quantizer difference etween frames. * - encoding: set by user. * - decoding: unused */ int max_qdiff; /** * 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 */ int max_b_frames; /** * qscale factor between ip and b frames. * - encoding: set by user. * - decoding: unused */ float b_quant_factor; /** obsolete FIXME remove */ int rc_strategy; int b_frame_strategy; /** * 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; struct AVCodec *codec; 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 */ int rtp_payload_size; /* The size of the RTP payload, the coder will */ /* do it's best to deliver a chunk with size */ /* below rtp_payload_size, the chunk will start */ /* with a start code on some codecs like H.263 */ /* This doesn't take account of any particular */ /* headers inside the transmited RTP payload */ /* The RTP callcack: This function is called */ /* every time the encoder as a packet to send */ /* Depends on the encoder if the data starts */ /* with a Start Code (it should) H.263 does */ void (*rtp_callback)(void *data, int size, int packet_number); /* statistics, used for 2-pass encoding */ int mv_bits; int header_bits; int i_tex_bits; int p_tex_bits; int i_count; int p_count; int skip_count; int misc_bits; /** * 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 */ void *opaque; char codec_name[32]; enum CodecType codec_type; /* see CODEC_TYPE_xxx */ enum CodecID codec_id; /* see CODEC_ID_xxx */ /** * 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_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 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% /** * luma single coeff elimination threshold. * - encoding: set by user * - decoding: unused */ int luma_elim_threshold; /** * 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 */ int strict_std_compliance; /** * 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 */ 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 */ int error_resilience;#define FF_ER_CAREFULL 1#define FF_ER_COMPLIANT 2#define FF_ER_AGGRESSIVE 3#define FF_ER_VERY_AGGRESSIVE 4 /** * 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 * 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); /** * 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 */ 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 */ int has_b_frames; int block_align; ///< used by some WAV based audio codecs 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 */ int mpeg_quant; /** * pass1 encoding statistics output buffer. * - encoding: set by lavc * - decoding: unused */ 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 */ char *stats_in; /** * ratecontrol qmin qmax limiting method. * 0-> clipping, 1-> use a nice continous function to limit qscale wthin qmin/qmax * - encoding: set by user. * - decoding: unused */ float rc_qsquish; float rc_qmod_amp; int rc_qmod_freq; /** * ratecontrol override, see RcOverride. * - encoding: allocated/set/freed by user. * - decoding: unused */ RcOverride *rc_override; int rc_override_count; /** * rate control equation. * - encoding: set by user * - decoding: unused */ char *rc_eq; /** * maximum bitrate. * - encoding: set by user. * - decoding: unused */ int rc_max_rate; /** * minimum bitrate. * - encoding: set by user. * - decoding: unused */ int rc_min_rate; /** * decoder bitstream buffer size. * - encoding: set by user. * - decoding: unused */ int rc_buffer_size; float rc_buffer_aggressivity; /** * qscale factor between p and i frames. * - 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 */ float i_quant_offset; /** * initial complexity for pass1 ratecontrol. * - encoding: set by user. * - decoding: unused
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -