基于obs开发的一款软件中obs_source_release遇到问题

问题描述:

最近在以 OBS 源码为基础开发一款软件。发现代码在某处执行到 obs_source_release(srcCanvas) ---> obs_ref_release(&control->ref) 处时判断为假,以致obs_source_destroy(source) 不能正常执行,资源不能正常释放,导致新的同名资源添加不上。

解决思路:

转到函数最底层定义发现此函数 _InterlockedDecrement(val)

互动百科解释是该函数减小指定的变量,并检查值,可以保证同一时刻只有一个线程访问该变量,即保证增加操作的原子性。

http://www.baike.com/wiki/InterLockedDecrement

一开始不太明白这个解释。后来通过替换代码查找问题,最后发现问题是OBSSource资源srcCanvas被我写成了一个全局类的成员变量,所以srcCanvas一直在被占用,一直有线程访问变量。类没有释放,所以它一直不能释放掉。

解决办法:

首先,OBSSource资源srcCanvas不能作为全局类的成员变量,需要通过其他方法实现功能。

其次,OBSSource srcCanvas = obs_get_source_by_name(name_t); 之后必须使用 obs_source_release(srcCanvas); 释放资源。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值