diff --git a/libobs/obs-scene.c b/libobs/obs-scene.c index e0dc9b371c231ad6e996849bc08d6770e405df7f..d5f52373ae86067067733948b0988cf71654d82f 100644 --- a/libobs/obs-scene.c +++ b/libobs/obs-scene.c @@ -1166,7 +1166,7 @@ const struct obs_source_info scene_info = { .id = "scene", .type = OBS_SOURCE_TYPE_SCENE, .output_flags = OBS_SOURCE_VIDEO | OBS_SOURCE_CUSTOM_DRAW | - OBS_SOURCE_COMPOSITE, + OBS_SOURCE_COMPOSITE | OBS_SOURCE_DO_NOT_DUPLICATE, .get_name = scene_getname, .create = scene_create, .destroy = scene_destroy, diff --git a/libobs/obs-source.c b/libobs/obs-source.c index 90b6a35f332edc6194234fa65be35835ad9a65f8..615faa502bb1ccdd27f9c890ec775f1a764e4ba6 100644 --- a/libobs/obs-source.c +++ b/libobs/obs-source.c @@ -501,13 +501,12 @@ obs_source_t *obs_source_duplicate(obs_source_t *source, const char *new_name, if (!obs_source_valid(source, "obs_source_duplicate")) return NULL; - if ((source->info.output_flags & OBS_SOURCE_DO_NOT_DUPLICATE) != 0) { - obs_source_addref(source); - return source; - } - if (source->info.type == OBS_SOURCE_TYPE_SCENE) { obs_scene_t *scene = obs_scene_from_source(source); + if (scene && !create_private) { + obs_source_addref(source); + return source; + } if (!scene) scene = obs_group_from_source(source); if (!scene) @@ -521,6 +520,11 @@ obs_source_t *obs_source_duplicate(obs_source_t *source, const char *new_name, return new_source; } + if ((source->info.output_flags & OBS_SOURCE_DO_NOT_DUPLICATE) != 0) { + obs_source_addref(source); + return source; + } + settings = obs_data_create(); obs_data_apply(settings, source->context.settings);