·av_register_all·主要实现了将编码器解码器,以及输入输出列表(如果有的话)进行指针串联的操作
void av_register_all(void)
{
ff_thread_once(&av_format_next_init, av_format_init_next);
}
// 看下av_format_init_next的实现
// 可以看到函数内部是实现了将编码器和解码器使用指针进行串联的操作
// 如果有输出或者输入列表,将输出或输入列表也进行串联
static void av_format_init_next(void)
{
AVOutputFormat *prevout = NULL, *out;
AVInputFormat *previn = NULL, *in;
ff_mutex_lock(&avpriv_register_devices_mutex);
// 编码器串联
for (int i = 0; (out = (AVOutputFormat*)muxer_list[i]); i++) {
if (prevout)
prevout->next = out;
prevout = out;
}
//实现输出列表的串联
if (outdev_list) {
for (int i = 0; (out = (AVOutputFormat*)outdev_list[i]); i++) {
if (prevout)
prevout->next = out;
prevout = out;
}
}
//实现解码器的串联
for (int i = 0; (in = (AVInputFormat*)demuxer_list[i]); i++) {
if (previn)
previn->next = in;
previn = in;
}
//实现输入列表的串联
if (indev_list) {
for (int i = 0; (in = (AVInputFormat*)indev_list[i]); i++) {
if (previn)
previn->next = in;
previn = in;
}
}
ff_mutex_unlock(&avpriv_register_devices_mutex);
}
本文解析了av_register_all函数的功能,该函数通过串联编码器、解码器及输入输出列表来初始化格式上下文。具体实现包括编码器、输出列表、解码器及输入列表的串联。
581

被折叠的 条评论
为什么被折叠?



