From 166584158944e6ad38b0da9c3fc2a05b85159010 Mon Sep 17 00:00:00 2001 From: WarmUpTill Date: Sun, 12 Jun 2022 17:49:35 +0200 Subject: [PATCH] Fix freeze on setting hide/show transition A "private" copy of the transition source has to be used for show and hide transitions as otherwise this can lead to an OBS freeze the next time the show / hide transition is used --- src/macro-action-transition.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/macro-action-transition.cpp b/src/macro-action-transition.cpp index fe26cfb2..59da5f49 100644 --- a/src/macro-action-transition.cpp +++ b/src/macro-action-transition.cpp @@ -58,14 +58,17 @@ void MacroActionTransition::SetSourceTransition(bool show) show ? obs_sceneitem_set_show_transition_duration : obs_sceneitem_set_hide_transition_duration; - obs_source_t *transition = + auto transition = obs_weak_source_get_source(_transition.GetTransition()); + obs_source_t *t = obs_source_create_private( + obs_source_get_id(transition), obs_source_get_name(transition), + nullptr); + obs_source_release(transition); const auto items = _source.GetSceneItems(_scene); for (auto &item : items) { - if (_setTransitionType) { - setTransitionFunc(item, transition); + setTransitionFunc(item, t); } if (_setDuration) { setDurationFunc(item, _duration.seconds * 1000); @@ -73,7 +76,7 @@ void MacroActionTransition::SetSourceTransition(bool show) obs_sceneitem_release(item); } - obs_source_release(transition); + obs_source_release(t); #else blog(LOG_WARNING, "Setting hide / show transition not supported!"); #endif