ffmpeg源码笔记-avdevice_register_all

621 阅读1分钟

avdevice_register_all

代码:

void avdevice_register_all(void)
{
    avpriv_register_devices(outdev_list, indev_list);
}

其中outdev_list, indev_list分别定义在#include "libavdevice/outdev_list.c" #include "libavdevice/indev_list.c"这两个文件中 表示ffmpeg所支持的muxer和demuxer

static const AVOutputFormat * const outdev_list[] = {
    &ff_alsa_muxer,
    &ff_fbdev_muxer,
    &ff_oss_muxer,
    &ff_sdl2_muxer,
    &ff_sndio_muxer,
    &ff_v4l2_muxer,
    &ff_xv_muxer,
    NULL };
    
static const AVInputFormat * const indev_list[] = {
    &ff_alsa_demuxer,
    &ff_fbdev_demuxer,
    &ff_lavfi_demuxer,
    &ff_oss_demuxer,
    &ff_sndio_demuxer,
    &ff_v4l2_demuxer,
    &ff_xcbgrab_demuxer,
    NULL };

avdevice_register_all调用avpriv_register_devices给两个全局变量赋值

void avpriv_register_devices(const AVOutputFormat * const o[], const AVInputFormat * const i[])
{
    ff_mutex_lock(&avpriv_register_devices_mutex);
    outdev_list = o;
    indev_list = i;
    ff_mutex_unlock(&avpriv_register_devices_mutex);
}