首先,在avcodec.h中有枚举enum CodecID 定义解码器ID。
然后,在各解码器中
AVCodec h264_decoder = {
"h264",
CODEC_TYPE_VIDEO,
CODEC_ID_H264,
sizeof(H264Context),
decode_init,
NULL,
decode_end,
decode_frame,
/*CODEC_CAP_DRAW_HORIZ_BAND |*/ CODEC_CAP_DR1 | CODEC_CAP_TRUNCATED | CODEC_CAP_DELAY,
flush_dpb,
NULL_IF_CONFIG_SMALL("H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10"),
};
这样是把h264注册到库中.
其中libavcodec利用结构体:
struct AVCodec
抽象了所有的编解码器,你可以找到所有它的“实现体”——各种变量
它们用
CodecType type;
CodecID id;
来标示彼此的身份,编码程序首先找到CodecID id,之后自然就找到了相应的编解码相关函数:
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,
const uint8_t *buf, int buf_size);
跟AVCodec类似的结构体还有AVCodecParser,以及libavformat里面的AVInputFormat,AVOutputFormat等等。
阅读(3177) | 评论(0) | 转发(0) |