OBS模块插件功能启用
2024-03-22
15
0
OBS插件激活:
static void activate_source(obs_source_t *source)
{
if (source->context.data && source->info.activate)
source->info.activate(source->context.data);
obs_source_dosignal(source, "source_activate", "activate");
}
对应于WASAPI相应的activate函数:
info.activate = ActivateWASAPISource; //在主视图中激活源时调用
其中对应的函数为:
static void ActivateWASAPISource(void *obj)
{
static_cast<WASAPISource *>(obj)->Activate();
}
传输的参数就是类的指针,也就对应了前面的:
source->context.data = info->create(source->context.settings, source);
其不过是创建一个线程,不过前提是该线程不存在。不然多创建了就坏了。
线程创建完后,设置reconnectExitSignal事件。
void WASAPISource::Activate()
{
if (!reconnectThread.Valid())
{
ResetEvent(reconnectExitSignal);
reconnectThread = CreateThread(nullptr, 0,
WASAPISource::ReconnectThread,
this, 0, nullptr);
}
}
该线程增加了一些处理退出的信号外,最终调用的是
WASAPISource *source
source->Start();
Start函数根据是否支持RTWorkQ技术,实现的代码是不一样的。