OBS
+ -

OBS源实例的创建

2024-03-22 5 0

OBS源实例的创建使用的是函数obs_source_create

obs_source_t *obs_source_create(const char *id, const char *name,
                obs_data_t *settings, obs_data_t *hotkey_data)
{
    return obs_source_create_internal(id, name, NULL, settings, hotkey_data,
                      false, LIBOBS_API_VER);
}
  • id为注册时的obs_source_info结构体中的id
  • name:为创建实例时使用的标签名,用户可以随意命名,但不能和别的实例名冲突

obs_source_create_internal函数中首先申空一个obs_source内型的结构体:

struct obs_source {
    struct obs_context_data context;
    struct obs_source_info info;// 指身注册的源结构体
...
// timing (if video is present, is based upon video) 
//audio
//async video data
//async video deinterlacing
//filters
//sources specific hotkeys
//transitions
...
}

这是一个可以代表任何东西的结构体。
2.初始化一些基它基本信息,如标识,配置等
3.如果有的话,调用注册时obs_source_info结构体的get_defaults回调和get_defaults2

static void GetWASAPIDefaultsInput(obs_data_t *settings)
{
    obs_data_set_default_string(settings, OPT_DEVICE_ID, "default");
    obs_data_set_default_bool(settings, OPT_USE_DEVICE_TIMING, false);
}

static void GetWASAPIDefaultsDeviceOutput(obs_data_t *settings)
{
    obs_data_set_default_string(settings, OPT_DEVICE_ID, "default");
    obs_data_set_default_bool(settings, OPT_USE_DEVICE_TIMING, true);
}

4.调用时obs_source_info结构体的create回调,用于初始化obs_source实例的内存。

    if (info && info->create)
        source->context.data =    info->create(source->context.settings, source);

可见,context.data竟然是类对象。对于wasapi是WASAPISource。

static void *CreateWASAPIInput(obs_data_t *settings, obs_source_t *source)
{
    return CreateWASAPISource(settings, source, SourceType::Input);
}

static void *CreateWASAPIDeviceOutput(obs_data_t *settings,
                      obs_source_t *source)
{
    return CreateWASAPISource(settings, source, SourceType::DeviceOutput);
}

CreateWASAPISource中,地于输入输出设备调用的是:

    if (type != SourceType::ProcessOutput)
        {
            return new WASAPISource(settings, source, type);
        }

这就是构造一个WASAPISource类。
这个类也只是做一些环境的初始化,并无实质性的东西。

0 篇笔记 写笔记

作者信息
我爱内核
Windows驱动开发,网站开发
好好学习,天天向上。
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!