AVCodec类型的结构体包含了对一个编码器底层实现的封装;定义如下:
typedef struct AVCodec {
//编码器名,在编码器和解码器两个类别中分别具有唯一性;
//如:libx264
const char *name;
//编码器实例的完整名称;
//如:libx264 H.264/AVC/MPEG-4 AVC/MPEG-4 part 10
const char *long_name;
//当前编码器处理的媒体类型;
enum AVMediaType type;
//编码类型ID;
enum AVCodecID id;
//当前编码器所支持的能力;
int capabilities;
//支持的帧率
const AVRational *supported_framerates;
//支持的图像像素格式;
const enum AVPixelFormat *pix_fmts;
//支持的音频采样率
const int *supported_samplerates;
//支持的音频采样格式
const enum AVSampleFormat *sample_fmts;
//支持的声道布局
const uint64_t *channel_layouts;
//支持的降分辨率解码;
uint8_t max_lowres;
const AVClass *priv_class;
//支持的编码档次;
const AVProfile *profiles;
/*编码器实现的组件或封装名称,主要用于标识该编码器的外部实现者;
当该字段为空时,该编码器有libavcodec库内部实现;当该字段不为空时,该编码器由硬件或操作系统
等外部实现,并在字段保存AVCodec.nam的缩写;
*/
const char *wrapper_name;
int priv_data_size;
//实现链表
struct AVCodec *next;
int (*update_thread_context)(struct AVCodecContext *dst, const struct AVCodecContext *src);
const AVCodecDefault *defaults;
void (*init_static_data)(struct AVCodec *codec);
int (*init)(struct AVCodecContext *);
int (*encode_sub)(struct AVCodecContext *, uint8_t *buf, int buf_size,
const struct AVSubtitle *sub);
int (*encode2)(struct AVCodecContext *avctx, struct AVPacket *avpkt,
const struct AVFrame *frame, int *got_packet_ptr);
int (*decode)(struct