📄 avcodec.h
字号:
#ifndef AVCODEC_H#define AVCODEC_H/** * @file avcodec.h * external api header. */#ifndef __KEVINLIB__ #include "ffcodecs.h" #include "ffImgfmt.h"#endif#ifdef __cplusplusextern "C" {#endif #ifdef HAVE_AV_CONFIG_H#include "common.h"#endif#include "libavutil/avutil.h"#include <sys/types.h> /* size_t *///FIXME the following 2 really dont belong in here#define FFMPEG_VERSION_INT 0x000409#define FFMPEG_VERSION "CVS"#define AV_STRINGIFY(s) AV_TOSTRING(s)#define AV_TOSTRING(s) #s#define LIBAVCODEC_VERSION_INT ((51<<16)+(1<<8)+0)#define LIBAVCODEC_VERSION 51.1.0#define LIBAVCODEC_BUILD LIBAVCODEC_VERSION_INT#define LIBAVCODEC_IDENT "Lavc" AV_STRINGIFY(LIBAVCODEC_VERSION)#define AV_NOPTS_VALUE 0x8000000000000000LL#define AV_TIME_BASE 1000000static const AVRational AV_TIME_BASE_Q={1, AV_TIME_BASE};enum CodecType { CODEC_TYPE_UNKNOWN = -1, CODEC_TYPE_VIDEO, CODEC_TYPE_AUDIO, CODEC_TYPE_DATA, CODEC_TYPE_SUBTITLE,};/* currently unused, may be used if 24/32 bits samples ever supported */enum SampleFormat { SAMPLE_FMT_S16 = 0, ///< signed 16 bits SAMPLE_FMT_S32, ///< signed 32 bits SAMPLE_FMT_FLT, ///< float SAMPLE_FMT_DBL, ///< double SAMPLE_I=100,SAMPLE_P};/* in bytes */#define AVCODEC_MAX_AUDIO_FRAME_SIZE (131072*2)/** * 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<br> * 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/** * minimum encoding buffer size. * used to avoid some checks during header writing */#define FF_MIN_BUFFER_SIZE 16384/* motion estimation type, EPZS by default */enum Motion_Est_ID { ME_ZERO = 1, ME_FULL, ME_LOG, ME_PHODS, ME_EPZS, ME_X1, ME_ITER,};enum AVDiscard{//we leave some space between them for extensions (drop some keyframes for intra only or drop just some bidir frames) AVDISCARD_NONE =-16, ///< discard nothing AVDISCARD_DEFAULT= 0, ///< discard useless packets like 0 size packets in avi AVDISCARD_NONREF = 8, ///< discard all non reference AVDISCARD_BIDIR = 16, ///< discard all bidirectional frames AVDISCARD_NONKEY = 32, ///< discard all frames except keyframes AVDISCARD_ALL = 48, ///< discard all};typedef struct RcOverride{ int start_frame; int end_frame; int qscale; // if this is 0 then quality_factor will be used instead float quality_factor;} RcOverride;/* only for ME compatiblity with old apps */extern int motion_estimation_method;#define FF_MAX_B_FRAMES 8/* encoding support these flags can be passed in AVCodecContext.flags before initing Note: not everything is supported yet.*/#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///< don't 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#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#define CODEC_FLAG2_FAST 0x00000001 ///< allow non spec compliant speedup tricks#define CODEC_FLAG2_STRICT_GOP 0x00000002 ///< strictly enforce GOP size#define CODEC_FLAG2_NO_OUTPUT 0x00000004 ///< skip bitstream encoding#define CODEC_FLAG2_LOCAL_HEADER 0x00000008 ///< place global headers at every keyframe instead of in extradata/* 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 /** * 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/** * codec has a non zero delay and needs to be feeded with NULL at the end to get the delayed data. * if this is not set, the codec is guranteed to never be feeded with NULL data */#define CODEC_CAP_DELAY 0x0020//the following defines may change, don't expect compatibility if you 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, ...)/** * 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 isn't used by lavc unless the default get/release_buffer() is used\ * - encoding: \ * - decoding: \ */\ uint8_t *base[4];\ /**\ * 1 -> keyframe, 0-> not\ * - 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\ */\ int pict_type;\\ /**\ * presentation timestamp in time_base units (time when frame should be shown to user)\ * if AV_NOPTS_VALUE then frame_rate = 1/time_base will be assumed\ * - encoding: MUST be set by user\ * - decoding: set by lavc\ */\ int64_t pts;\ int64_t rtStart;\\ /**\ * picture number in bitstream order.\ * - encoding: set by\ * - decoding: set by lavc\ */\ int coded_picture_number;\ /**\ * picture number in display order.\ * - encoding: set by\ * - decoding: set by lavc\ */\ int display_picture_number;\\ /**\ * 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\ */\ int quality; \\ /**\ * buffer age (1->was last buffer and dint change, 2->..., ...).\ * 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))\ */\ int reference;\\ /**\ * QP table\ * - encoding: unused\ * - decoding: set by lavc\ */\ int8_t *qscale_table;\ /**\ * QP store stride\ * - 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\ */\ uint8_t *mbskip_table;\\ /**\ * Motion vector table.\ * @code\ * example:\ * int mv_sample_log2= 4 - motion_subsample_log2;\ * int mb_width= (width+15)>>4;\ * int mv_stride= (mb_width << mv_sample_log2) + 1;\ * motion_val[direction][x + y*mv_stride][0->mv_x, 1->mv_y];\ * @endcode\ * - encoding: set by user\ * - decoding: set by lavc\ */\ int16_t (*motion_val[2])[2];\\ /**\ * Macroblock type table\ * mb_type_base + mb_width + 2\ * - encoding: set by user\ * - decoding: set by lavc\ */\ uint32_t *mb_type;\\ /**\ * log2 of the size of the block which a single vector in motion_val represents: \ * (4->16x16, 3->8x8, 2-> 4x4, 1-> 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\ */\ void *opaque;\\ /**\ * error\ * - 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\ */\ 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;\ \ int mb_width,mb_height,mb_stride,b8_stride;\ int num_sprite_warping_points,real_sprite_warping_points;\ int play_flags;\ /**\ * 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\
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -