📄 avcodec.h
字号:
#ifndef AVCODEC_H#define AVCODEC_H/** * @file avcodec.h * external api header. */#ifdef __cplusplusextern "C" {#endif#include "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)+(8<<8)+0)#define LIBAVCODEC_VERSION 51.8.0#define LIBAVCODEC_BUILD LIBAVCODEC_VERSION_INT#define LIBAVCODEC_IDENT "Lavc" AV_STRINGIFY(LIBAVCODEC_VERSION)#define AV_NOPTS_VALUE int64_t_C(0x8000000000000000)#define AV_TIME_BASE 1000000#define AV_TIME_BASE_Q (AVRational){1, AV_TIME_BASE}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_H261, CODEC_ID_H263, CODEC_ID_RV10, CODEC_ID_RV20, CODEC_ID_MJPEG, CODEC_ID_MJPEGB, CODEC_ID_LJPEG, CODEC_ID_SP5X, CODEC_ID_JPEGLS, CODEC_ID_MPEG4, CODEC_ID_RAWVIDEO, CODEC_ID_MSMPEG4V1, CODEC_ID_MSMPEG4V2, CODEC_ID_MSMPEG4V3, CODEC_ID_WMV1, CODEC_ID_WMV2, CODEC_ID_H263P, CODEC_ID_H263I, CODEC_ID_FLV1, CODEC_ID_SVQ1, CODEC_ID_SVQ3, CODEC_ID_DVVIDEO, CODEC_ID_HUFFYUV, CODEC_ID_CYUV, CODEC_ID_H264, CODEC_ID_INDEO3, CODEC_ID_VP3, CODEC_ID_THEORA, 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_MSZH, CODEC_ID_ZLIB, CODEC_ID_QTRLE, CODEC_ID_SNOW, CODEC_ID_TSCC, CODEC_ID_ULTI, CODEC_ID_QDRAW, CODEC_ID_VIXL, CODEC_ID_QPEG, CODEC_ID_XVID, CODEC_ID_PNG, CODEC_ID_PPM, CODEC_ID_PBM, CODEC_ID_PGM, CODEC_ID_PGMYUV, CODEC_ID_PAM, CODEC_ID_FFVHUFF, CODEC_ID_RV30, CODEC_ID_RV40, CODEC_ID_VC9, CODEC_ID_WMV3, CODEC_ID_LOCO, CODEC_ID_WNV1, CODEC_ID_AASC, CODEC_ID_INDEO2, CODEC_ID_FRAPS, CODEC_ID_TRUEMOTION2, CODEC_ID_BMP, CODEC_ID_CSCD, CODEC_ID_MMVIDEO, CODEC_ID_ZMBV, CODEC_ID_AVS, CODEC_ID_SMACKVIDEO, CODEC_ID_NUV, /* various pcm "codecs" */ CODEC_ID_PCM_S16LE= 0x10000, CODEC_ID_PCM_S16BE, CODEC_ID_PCM_U16LE, CODEC_ID_PCM_U16BE, CODEC_ID_PCM_S8, CODEC_ID_PCM_U8, CODEC_ID_PCM_MULAW, CODEC_ID_PCM_ALAW, CODEC_ID_PCM_S32LE, CODEC_ID_PCM_S32BE, CODEC_ID_PCM_U32LE, CODEC_ID_PCM_U32BE, CODEC_ID_PCM_S24LE, CODEC_ID_PCM_S24BE, CODEC_ID_PCM_U24LE, CODEC_ID_PCM_U24BE, CODEC_ID_PCM_S24DAUD, /* various adpcm codecs */ CODEC_ID_ADPCM_IMA_QT= 0x11000, 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, CODEC_ID_ADPCM_CT, CODEC_ID_ADPCM_SWF, CODEC_ID_ADPCM_YAMAHA, CODEC_ID_ADPCM_SBPRO_4, CODEC_ID_ADPCM_SBPRO_3, CODEC_ID_ADPCM_SBPRO_2, /* AMR */ CODEC_ID_AMR_NB= 0x12000, CODEC_ID_AMR_WB, /* RealAudio codecs*/ CODEC_ID_RA_144= 0x13000, CODEC_ID_RA_288, /* various DPCM codecs */ CODEC_ID_ROQ_DPCM= 0x14000, CODEC_ID_INTERPLAY_DPCM, CODEC_ID_XAN_DPCM, CODEC_ID_SOL_DPCM, CODEC_ID_MP2= 0x15000, CODEC_ID_MP3, /* prefered ID for MPEG Audio layer 1, 2 or3 decoding */ CODEC_ID_AAC, CODEC_ID_MPEG4AAC, CODEC_ID_AC3, CODEC_ID_DTS, CODEC_ID_VORBIS, CODEC_ID_DVAUDIO, CODEC_ID_WMAV1, CODEC_ID_WMAV2, CODEC_ID_MACE3, CODEC_ID_MACE6, CODEC_ID_VMDAUDIO, CODEC_ID_SONIC, CODEC_ID_SONIC_LS, CODEC_ID_FLAC, CODEC_ID_MP3ADU, CODEC_ID_MP3ON4, CODEC_ID_SHORTEN, CODEC_ID_ALAC, CODEC_ID_WESTWOOD_SND1, CODEC_ID_GSM, CODEC_ID_QDM2, CODEC_ID_COOK, CODEC_ID_TRUESPEECH, CODEC_ID_TTA, CODEC_ID_SMACKAUDIO, CODEC_ID_OGGTHEORA= 0x16000, /* subtitle codecs */ CODEC_ID_DVD_SUBTITLE= 0x17000, CODEC_ID_DVB_SUBTITLE, CODEC_ID_MPEG2TS= 0x20000, /* _FAKE_ codec to indicate a raw MPEG2 transport stream (only used by libavformat) */};/* CODEC_ID_MP3LAME is absolete */#define CODEC_ID_MP3LAME CODEC_ID_MP3enum 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 *//* all in native endian */enum SampleFormat { SAMPLT_FMT_NONE = -1, SAMPLE_FMT_U8, ///< unsigned 8 bits SAMPLE_FMT_S16, ///< signed 16 bits SAMPLE_FMT_S24, ///< signed 24 bits SAMPLE_FMT_S32, ///< signed 32 bits SAMPLE_FMT_FLT, ///< float};/* in bytes */#define AVCODEC_MAX_AUDIO_FRAME_SIZE 192000 // 1 second of 48khz 32bit audio/** * 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_HEX, ME_UMH, 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 16/* 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#define CODEC_FLAG2_BPYRAMID 0x00000010 ///< H.264 allow b-frames to be used as references#define CODEC_FLAG2_WPRED 0x00000020 ///< H.264 weighted biprediction for b-frames#define CODEC_FLAG2_MIXED_REFS 0x00000040 ///< H.264 multiple references per partition#define CODEC_FLAG2_8X8DCT 0x00000080 ///< H.264 high profile 8x8 transform#define CODEC_FLAG2_FASTPSKIP 0x00000100 ///< H.264 fast pskip#define CODEC_FLAG2_AUD 0x00000200 ///< H.264 access unit delimiters#define CODEC_FLAG2_BRDO 0x00000400 ///< b-frame rate-distortion optimization/* 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;\\ /**\ * picture number in bitstream order.\ * - encoding: set by\
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -