提交 b1707b18 编写于 作者: J jp9000

libobs: Add callback for enumerating all scene children

Prevents infinite recursion when adding children to a scene.
上级 69ec87b9
......@@ -162,7 +162,7 @@ static void scene_destroy(void *data)
static void scene_enum_sources(void *data,
obs_source_enum_proc_t enum_callback,
void *param)
void *param, bool active)
{
struct obs_scene *scene = data;
struct obs_scene_item *item;
......@@ -175,7 +175,7 @@ static void scene_enum_sources(void *data,
next = item->next;
obs_sceneitem_addref(item);
if (os_atomic_load_long(&item->active_refs) > 0)
if (!active || os_atomic_load_long(&item->active_refs) > 0)
enum_callback(scene->source, item->source, param);
obs_sceneitem_release(item);
......@@ -185,6 +185,20 @@ static void scene_enum_sources(void *data,
full_unlock(scene);
}
static void scene_enum_active_sources(void *data,
obs_source_enum_proc_t enum_callback,
void *param)
{
scene_enum_sources(data, enum_callback, param, true);
}
static void scene_enum_all_sources(void *data,
obs_source_enum_proc_t enum_callback,
void *param)
{
scene_enum_sources(data, enum_callback, param, false);
}
static inline void detach_sceneitem(struct obs_scene_item *item)
{
if (item->prev)
......@@ -957,7 +971,8 @@ const struct obs_source_info scene_info =
.get_height = scene_getheight,
.load = scene_load,
.save = scene_save,
.enum_active_sources = scene_enum_sources
.enum_active_sources = scene_enum_active_sources,
.enum_all_sources = scene_enum_all_sources
};
obs_scene_t *obs_scene_create(const char *name)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册