OBS二次开发 | 源码解读(二) | 添加来源

!!!注意:不同版本的OBS源码,函数、参数等有细节性差别…

前期回顾:
OBS二次开发 | 构建、编译
OBS二次开发 | 源码解读(一) | 初始化流程
在这里插入图片描述

OBS28.1.0源码

一、清理场景下所有的来源

1.函数声明/定义

//所有引用的源应该被释放
EXPORT void obs_source_remove(obs_source_t *source);
void obs_source_remove(obs_source_t *source)
{
   
	if (!obs_source_valid(source, "obs_source_remove"))
		return;
	if (!source->removed) {
   
		obs_source_t *s = obs_source_get_ref(source);
		if (s) {
   
			s->removed = true;
			obs_source_dosignal(s, "source_remove", "remove");
			obs_source_release(s); //释放
		}
	}
}

2.函数调用

清理场景下所有的来源。

void clearScene()
{
   
	auto cb = [](void *unused, obs_source_t *source) {
   
		obs_source_remove(source);
		UNUSED_PARAMETER(unused);
		return true;
	};
	//枚举所有输入源。回调函数返回true以继续枚举,返回false以结束枚举。
	//如果您希望在obs_enum_sources结束后保留引用,请使用obs_source_get_ref或obs_source_get_weak_source
	obs_enum_sources(cb, nullptr);
}	

二、清理音频通道

1.函数声明/定义

设置通道的主要输出源。

EXPORT void obs_set_output_source(uint32_t channel, obs_source_t *source);
void obs_set_output_source(uint32_t channel, obs_source_t *source)
{
   
	//MAX_CHANNELS(64) 最大数量的源通道输出和每个显示。有6个默认的通道。
	assert(channel < MAX_CHANNELS);
	if (channel >= MAX_CHANNELS)
		return;
	struct obs_source *prev_source;
	struct obs_view *view = &obs->data.main_view;
	struct calldata params = {
   0};
	pthread_mutex_lock(&view->channels_mutex);
	source = obs_source_get_ref(source);
	prev_source = view->channels[channel];
	calldata_set_int(&params, "channel", channel);
	calldata_set_ptr(&params, "prev_source", prev_source);
	calldata_set_ptr(&params, "source", source);
	signal_handler_signal(obs->signals, "channel_change", &params);
	
  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值