diff --git a/docs/sphinx/reference-scenes.rst b/docs/sphinx/reference-scenes.rst index 5b065967d..34fb70b4c 100644 --- a/docs/sphinx/reference-scenes.rst +++ b/docs/sphinx/reference-scenes.rst @@ -265,6 +265,12 @@ General Scene Functions --------------------- +.. function:: void obs_scene_prune_sources(obs_scene_t *scene) + + Releases all sources from a scene that have been marked as removed by obs_source_remove. + +--------------------- + .. _scene_item_reference: diff --git a/libobs/obs-scene.c b/libobs/obs-scene.c index 55f5e0159..0bb9bbd22 100644 --- a/libobs/obs-scene.c +++ b/libobs/obs-scene.c @@ -3608,3 +3608,18 @@ obs_data_t *obs_sceneitem_transition_save(struct obs_scene_item *item, : item->hide_transition_duration); return data; } + +void obs_scene_prune_sources(obs_scene_t *scene) +{ + DARRAY(struct obs_scene_item *) remove_items; + da_init(remove_items); + + video_lock(scene); + update_transforms_and_prune_sources(scene, &remove_items.da, NULL); + video_unlock(scene); + + for (size_t i = 0; i < remove_items.num; i++) + obs_sceneitem_release(remove_items.array[i]); + + da_free(remove_items); +} diff --git a/libobs/obs.h b/libobs/obs.h index 504ca4bd5..4bbc78b24 100644 --- a/libobs/obs.h +++ b/libobs/obs.h @@ -1821,6 +1821,7 @@ EXPORT void obs_sceneitem_transition_load(struct obs_scene_item *item, obs_data_t *data, bool show); EXPORT obs_data_t *obs_sceneitem_transition_save(struct obs_scene_item *item, bool show); +EXPORT void obs_scene_prune_sources(obs_scene_t *scene); /* ------------------------------------------------------------------------- */ /* Outputs */