首先在主函数里面调用两个注册函数:
avcodec_register_all();
avdevice_register_all();
通过函数名称就很容易看出来这两个函数的实现了,前者主要注册所支持的编码器,而后者主要注册所支持的输入和输出设备.这两个函数的主要通过宏实现:
#define REGISTER_INDEV(X, x) \
{ \
extern AVInputFormat ff_##x##_demuxer; \
if (CONFIG_##X##_INDEV) \
av_register_input_format(&ff_##x##_demuxer); \
}
上面通过调用av_register_input_format函数将一系列预先定义好的结构体AVInputFormat当中的成员变量AVInputFormat* next构成一个链表,而这个链表当中的的首部和尾部有一个预先定义的全局变量保存.下面看看支持windows所支持的AVInputFormat结构体的预定义:
static const AVClass vfw_class = {
.class_name = "VFW indev",
.item_name = av_d