Compare commits

...

2 Commits

Author SHA1 Message Date
WarmUpTill
4d2c3e0f80 Copy settings of selected transition for show / hide transition 2022-06-13 11:40:12 -07:00
WarmUpTill
1665841589 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
2022-06-13 11:40:12 -07:00

View File

@@ -58,14 +58,19 @@ 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_data_t *settings = obs_source_get_settings(transition);
obs_source_t *t = obs_source_create_private(
obs_source_get_id(transition), obs_source_get_name(transition),
settings);
obs_data_release(settings);
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 +78,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