📄 avcodec.h
字号:
* - encoding: unused\ * - decoding: set by lavc\ */\ short *dct_coeff;\\ /**\ * Motion referece frame index\ * - encoding: set by user\ * - decoding: set by lavc\ */\ int8_t *ref_index[2];#define FF_QSCALE_TYPE_MPEG1 0#define FF_QSCALE_TYPE_MPEG2 1#define FF_QSCALE_TYPE_H264 2#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 somewhere else, don't dealloc image (data/base), all other tables are not shared#define FF_BUFFER_TYPE_COPY 8 ///< just a (modified) copy of some other buffer, don't 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. */struct TlibavcodecExt;typedef struct AVCodecContext { /** * 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. * 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. * 1 (zero), 2 (full), 3 (log), 4 (phods), 5 (epzs), 6 (x1), 7 (hex), * 8 (umh), 9 (iter) [7, 8 are x264 specific, 9 is snow specific] * - 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) * the allocated memory should be FF_INPUT_BUFFER_PADDING_SIZE bytes larger * then extradata_size to avoid prolems if its read with the bitstream reader * the bytewise contents of extradata must not depend on the architecture or cpu endianness * - encoding: set/allocated/freed by lavc. * - decoding: set/allocated/freed by user. */ const void *extradata; int extradata_size; /** * this is the fundamental unit of time (in seconds) in terms * of which frame timestamps are represented. for fixed-fps content, * timebase should be 1/framerate and timestamp increments should be * identically 1. * - encoding: MUST be set by user * - decoding: set by lavc. */ AVRational time_base; /* video only */ /** * picture width / height. * - encoding: MUST be set by user. * - decoding: set by lavc. * Note, for compatibility its possible to set this instead of * coded_width/height before decoding */ int width, height; #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: set by user. * - 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; float postgain; /** * audio sample format. * - encoding: set by user. * - decoding: set by lavc. */ enum SampleFormat sample_fmt; ///< sample format, currenly unused /* the following data should not be initialized */ /** * samples per packet. initialized when calling 'init' */ int frame_size; 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; int b_frame_strategy; /** * hurry up amount. * deprecated in favor of skip_idct and skip_frame * - 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; /* 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 */ /* 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 callback: This function is called */ /* every time the encoder has a packet to send */ /* Depends on the encoder if the data starts */ /* with a Start Code (it should) H.263 does. */ /* mb_nb contains the number of macroblocks */ /* encoded in the RTP payload */ void (*rtp_callback)(struct AVCodecContext *avctx, void *data, int size, int mb_nb); /* 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 */ struct TlibavcodecExt *self; 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: set by user * - 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_AMV 32#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_HPEL_CHROMA 2048#define FF_BUG_DC_CLIP 4096#define FF_BUG_MS 8192 ///< workaround various bugs in microsofts broken decoders//#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;#define FF_COMPLIANCE_VERY_STRICT 2 ///< strictly conform to a older more strict version of the spec or reference software#define FF_COMPLIANCE_STRICT 1 ///< strictly conform to all the things in the spec no matter what consequences#define FF_COMPLIANCE_NORMAL 0#define FF_COMPLIANCE_INOFFICIAL -1 ///< allow inofficial extensions#define FF_COMPLIANCE_EXPERIMENTAL -2 ///< allow non standarized experimental things /** * 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_CAREFUL 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 * avcodec_align_dimensions() should be used to find the required width and * height, as they normally need to 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); /** * if 1 the stream has a 1 frame delay during decoding. * - encoding: set by lavc * - decoding: set by lavc */ int has_b_frames; /** * number of bytes per packet if constant and known or 0 * used by some WAV based audio codecs */ int block_align; 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.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -