Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
尘离序散
obs-studio
提交
2877f1d5
O
obs-studio
项目概览
尘离序散
/
obs-studio
与 Fork 源项目一致
从无法访问的项目Fork
通知
30
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
O
obs-studio
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
2877f1d5
编写于
1月 16, 2017
作者:
J
jp9000
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
libobs: Add func to enum active and inactive child tree
上级
c30d4f50
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
78 addition
and
7 deletion
+78
-7
libobs/obs-source.c
libobs/obs-source.c
+63
-7
libobs/obs-source.h
libobs/obs-source.h
+15
-0
未找到文件。
libobs/obs-source.c
浏览文件 @
2877f1d5
...
...
@@ -2968,19 +2968,19 @@ struct source_enum_data {
void
*
param
;
};
static
void
enum_source_
tree_callback
(
obs_source_t
*
parent
,
obs_source_t
*
child
,
void
*
param
)
static
void
enum_source_
active_tree_callback
(
obs_source_t
*
parent
,
obs_source_t
*
child
,
void
*
param
)
{
struct
source_enum_data
*
data
=
param
;
bool
is_transition
=
child
->
info
.
type
==
OBS_SOURCE_TYPE_TRANSITION
;
if
(
is_transition
)
obs_transition_enum_sources
(
child
,
enum_source_tree_callback
,
param
);
enum_source_
active_
tree_callback
,
param
);
if
(
child
->
info
.
enum_active_sources
)
{
if
(
child
->
context
.
data
)
{
child
->
info
.
enum_active_sources
(
child
->
context
.
data
,
enum_source_tree_callback
,
data
);
enum_source_
active_
tree_callback
,
data
);
}
}
...
...
@@ -3027,11 +3027,67 @@ void obs_source_enum_active_tree(obs_source_t *source,
obs_source_addref
(
source
);
if
(
source
->
info
.
type
==
OBS_SOURCE_TYPE_TRANSITION
)
obs_transition_enum_sources
(
source
,
enum_source_tree_callback
,
&
data
);
obs_transition_enum_sources
(
source
,
enum_source_active_tree_callback
,
&
data
);
if
(
source
->
info
.
enum_active_sources
)
source
->
info
.
enum_active_sources
(
source
->
context
.
data
,
enum_source_tree_callback
,
&
data
);
enum_source_active_tree_callback
,
&
data
);
obs_source_release
(
source
);
}
static
void
enum_source_full_tree_callback
(
obs_source_t
*
parent
,
obs_source_t
*
child
,
void
*
param
)
{
struct
source_enum_data
*
data
=
param
;
bool
is_transition
=
child
->
info
.
type
==
OBS_SOURCE_TYPE_TRANSITION
;
if
(
is_transition
)
obs_transition_enum_sources
(
child
,
enum_source_full_tree_callback
,
param
);
if
(
child
->
info
.
enum_all_sources
)
{
if
(
child
->
context
.
data
)
{
child
->
info
.
enum_active_sources
(
child
->
context
.
data
,
enum_source_full_tree_callback
,
data
);
}
}
else
if
(
child
->
info
.
enum_active_sources
)
{
if
(
child
->
context
.
data
)
{
child
->
info
.
enum_active_sources
(
child
->
context
.
data
,
enum_source_full_tree_callback
,
data
);
}
}
data
->
enum_callback
(
parent
,
child
,
data
->
param
);
}
static
void
obs_source_enum_full_tree
(
obs_source_t
*
source
,
obs_source_enum_proc_t
enum_callback
,
void
*
param
)
{
struct
source_enum_data
data
=
{
enum_callback
,
param
};
bool
is_transition
;
if
(
!
data_valid
(
source
,
"obs_source_enum_active_tree"
))
return
;
is_transition
=
source
->
info
.
type
==
OBS_SOURCE_TYPE_TRANSITION
;
if
(
!
is_transition
&&
!
source
->
info
.
enum_active_sources
)
return
;
obs_source_addref
(
source
);
if
(
source
->
info
.
type
==
OBS_SOURCE_TYPE_TRANSITION
)
obs_transition_enum_sources
(
source
,
enum_source_full_tree_callback
,
&
data
);
if
(
source
->
info
.
enum_all_sources
)
{
source
->
info
.
enum_all_sources
(
source
->
context
.
data
,
enum_source_full_tree_callback
,
&
data
);
}
else
if
(
source
->
info
.
enum_active_sources
)
{
source
->
info
.
enum_active_sources
(
source
->
context
.
data
,
enum_source_full_tree_callback
,
&
data
);
}
obs_source_release
(
source
);
}
...
...
libobs/obs-source.h
浏览文件 @
2877f1d5
...
...
@@ -400,6 +400,21 @@ struct obs_source_info {
bool
(
*
audio_render
)(
void
*
data
,
uint64_t
*
ts_out
,
struct
obs_source_audio_mix
*
audio_output
,
uint32_t
mixers
,
size_t
channels
,
size_t
sample_rate
);
/**
* Called to enumerate all active and inactive sources being used
* within this source. If this callback isn't implemented,
* enum_active_sources will be called instead.
*
* This is typically used if a source can have inactive child sources.
*
* @param data Filter data
* @param enum_callback Enumeration callback
* @param param User data to pass to callback
*/
void
(
*
enum_all_sources
)(
void
*
data
,
obs_source_enum_proc_t
enum_callback
,
void
*
param
);
};
EXPORT
void
obs_register_source_s
(
const
struct
obs_source_info
*
info
,
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录