mirror of
https://github.com/obsproject/obs-studio.git
synced 2024-07-14 23:34:08 +00:00
libobs: Allow group duplication
This commit is contained in:
parent
5993834815
commit
5dfab20a46
|
@ -1239,6 +1239,10 @@ obs_scene_t *obs_scene_duplicate(obs_scene_t *scene, const char *name,
|
|||
obs_data_apply(new_scene->source->private_settings,
|
||||
scene->source->private_settings);
|
||||
|
||||
/* never duplicate sub-items for groups */
|
||||
if (scene->is_group)
|
||||
make_unique = false;
|
||||
|
||||
for (size_t i = 0; i < items.num; i++) {
|
||||
item = items.array[i];
|
||||
source = make_unique ?
|
||||
|
@ -1292,6 +1296,9 @@ obs_scene_t *obs_scene_duplicate(obs_scene_t *scene, const char *name,
|
|||
for (size_t i = 0; i < items.num; i++)
|
||||
obs_sceneitem_release(items.array[i]);
|
||||
|
||||
if (new_scene->is_group)
|
||||
resize_scene(new_scene);
|
||||
|
||||
da_free(items);
|
||||
return new_scene;
|
||||
}
|
||||
|
@ -1321,6 +1328,14 @@ obs_scene_t *obs_scene_from_source(const obs_source_t *source)
|
|||
return source->context.data;
|
||||
}
|
||||
|
||||
obs_scene_t *obs_group_from_source(const obs_source_t *source)
|
||||
{
|
||||
if (!source || source->info.id != group_info.id)
|
||||
return NULL;
|
||||
|
||||
return source->context.data;
|
||||
}
|
||||
|
||||
obs_sceneitem_t *obs_scene_find_source(obs_scene_t *scene, const char *name)
|
||||
{
|
||||
struct obs_scene_item *item;
|
||||
|
|
|
@ -439,6 +439,8 @@ void obs_source_copy_filters(obs_source_t *dst, obs_source_t *src)
|
|||
duplicate_filters(dst, src, dst->context.private);
|
||||
}
|
||||
|
||||
extern obs_scene_t *obs_group_from_source(const obs_source_t *source);
|
||||
|
||||
obs_source_t *obs_source_duplicate(obs_source_t *source,
|
||||
const char *new_name, bool create_private)
|
||||
{
|
||||
|
@ -455,6 +457,11 @@ obs_source_t *obs_source_duplicate(obs_source_t *source,
|
|||
|
||||
if (source->info.type == OBS_SOURCE_TYPE_SCENE) {
|
||||
obs_scene_t *scene = obs_scene_from_source(source);
|
||||
if (!scene)
|
||||
scene = obs_group_from_source(source);
|
||||
if (!scene)
|
||||
return NULL;
|
||||
|
||||
obs_scene_t *new_scene = obs_scene_duplicate(scene, new_name,
|
||||
create_private ? OBS_SCENE_DUP_PRIVATE_COPY :
|
||||
OBS_SCENE_DUP_COPY);
|
||||
|
|
Loading…
Reference in a new issue