📄 avcodec.h
字号:
int16_t (*motion_val[2])[2];\
\
/**\
* Macroblock type table\
* mb_type_base + mb_width + 2\
* - encoding: unused\
* - decoding: set by lavc\
*/\
uint32_t *mb_type;\
\
/**\
* Macroblock size: (0->16x16, 1->8x8, 2-> 4x4, 3-> 2x2)\
* - encoding: unused\
* - decoding: set by lavc\
*/\
uint8_t motion_subsample_log2;\
\
/**\
* 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;\
\
/**\
* 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;\
\
#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;
/**
* 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;
/**
* 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_EXTENDED 15
/**
* 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;
/* 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
/**
* 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;
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;
/**
* 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;
#define FF_DCT_AUTO 0
#define FF_DCT_FASTINT 1
#define FF_DCT_INT 2
#define FF_DCT_MMX 3
#define FF_DCT_MLIB 4
#define FF_DCT_ALTIVEC 5
#define FF_DCT_FAAN 6
/**
* idct algorithm, see FF_IDCT_* below.
* - encoding: set by user
* - decoding: set by user
*/
int idct_algo;
#define FF_IDCT_AUTO 0
#define FF_IDCT_INT 1
#define FF_IDCT_SIMPLE 2
#define FF_IDCT_SIMPLEMMX 3
#define FF_IDCT_LIBMPEG2MMX 4
#define FF_IDCT_PS2 5
#define FF_IDCT_MLIB 6
#define FF_IDCT_ARM 7
#define FF_IDCT_ALTIVEC 8
#define FF_IDCT_SH4 9
#define FF_IDCT_SIMPLEARM 10
#define FF_EC_GUESS_MVS 1
#define FF_EC_DEBLOCK 2
/**
* dsp_mask could be add used to disable unwanted CPU features
* CPU features (i.e. MMX, SSE. ...)
*
* 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;
/**
* bits per sample/pixel from the demuxer (needed for huffyuv).
* - encoding: set by lavc
* - decoding: set by user
*/
int bits_per_sample;
/**
* the picture in the bitstream.
* - encoding: set by lavc
* - decoding: set by lavc
*/
AVFrame *coded_frame;
#define FF_CMP_SAD 0
#define FF_CMP_SSE 1
#define FF_CMP_SATD 2
#define FF_CMP_DCT 3
#define FF_CMP_PSNR 4
#define FF_CMP_BIT 5
#define FF_CMP_RD 6
#define FF_CMP_ZERO 7
#define FF_CMP_VSAD 8
#define FF_CMP_VSSE 9
#define FF_CMP_CHROMA 256
/**
* internal_buffer count.
* Dont touch, used by lavc default_get_buffer()
*/
int internal_buffer_count;
/**
* internal_buffers.
* Dont touch, used by lavc default_get_buffer()
*/
void *internal_buffer;
/**
* CODEC_FLAG2_*.
* - encoding: set by user.
* - decoding: set by user.
*/
int flags2;
/**
* Thread count.
* is used to decide how many independant tasks should be passed to execute()
* - encoding: set by user
* - decoding: set by user
*/
int thread_count;
} AVCodecContext;
/**
* AVCodec.
*/
typedef struct AVCodec {
const char *name;
enum CodecType type;
int id;
int priv_data_size;
int (*init)(AVCodecContext *);
int (*encode)(AVCodecContext *, uint8_t *buf, int buf_size, void *data);
int (*close)(AVCodecContext *);
int (*decode)(AVCodecContext *, void *outdata, int *outdata_size,
uint8_t *buf, int buf_size);
struct AVCodec *next;
void (*flush)(AVCodecContext *);
} AVCodec;
extern AVCodec h264_decoder;
extern AVCodec *first_avcodec;
/* returns LIBAVCODEC_VERSION_INT constant */
unsigned avcodec_version(void);
/* returns LIBAVCODEC_BUILD constant */
unsigned avcodec_build(void);
void avcodec_init(void);
void register_avcodec(AVCodec *format);
AVCodec *avcodec_find_encoder(enum CodecID id);
AVCodec *avcodec_find_encoder_by_name(const char *name);
AVCodec *avcodec_find_decoder(enum CodecID id);
AVCodec *avcodec_find_decoder_by_name(const char *name);
void avcodec_get_context_defaults(AVCodecContext *s);
AVCodecContext *avcodec_alloc_context(void);
void avcodec_get_frame_defaults(AVFrame *pic);
AVFrame *avcodec_alloc_frame(void);
int avcodec_default_get_buffer(AVCodecContext *s, AVFrame *pic);
void avcodec_default_release_buffer(AVCodecContext *s, AVFrame *pic);
void avcodec_default_free_buffers(AVCodecContext *s);
int avcodec_thread_init(AVCodecContext *s, int thread_count);
void avcodec_thread_free(AVCodecContext *s);
int avcodec_thread_execute(AVCodecContext *s, int (*func)(AVCodecContext *c2, void *arg2),void **arg, int *ret, int count);
//FIXME func typedef
/**
* opens / inits the AVCodecContext.
* not thread save!
*/
int avcodec_open(AVCodecContext *avctx, AVCodec *codec);
int avcodec_decode_video(AVCodecContext *avctx, AVFrame *picture,
int *got_picture_ptr,
uint8_t *buf, int buf_size);
int avcodec_parse_frame(AVCodecContext *avctx, uint8_t **pdata,
int *data_size_ptr,
uint8_t *buf, int buf_size);
int avcodec_close(AVCodecContext *avctx);
void avcodec_register_all(void);
void avcodec_flush_buffers(AVCodecContext *avctx);
/* misc usefull functions */
/**
* returns a single letter to describe the picture type
*/
char av_get_pict_type_char(int pict_type);
/* memory */
void *av_malloc(unsigned int size);
void *av_mallocz(unsigned int size);
void *av_realloc(void *ptr, unsigned int size);
void av_free(void *ptr);
char *av_strdup(const char *s);
void av_freep(void *ptr);
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);
void *av_mallocz_static(unsigned int size);
#ifdef __cplusplus
}
#endif
#endif /* AVCODEC_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -