Skip to content

Commit baf978c

Browse files
committed
libobs: Fix transition start during active transition
obs_transition_start() current behavior uses outdated info to determine actions, so re-initialize variables after obs_transition_set()
1 parent 0d1f61b commit baf978c

File tree

1 file changed

+13
-5
lines changed

1 file changed

+13
-5
lines changed

libobs/obs-source-transition.c

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -347,17 +347,25 @@ bool obs_transition_start(obs_source_t *transition, enum obs_transition_mode mod
347347
if (active && mode == OBS_TRANSITION_MODE_MANUAL && same_mode && same_as_dest)
348348
return true;
349349

350+
if (active && !same_as_dest) {
351+
352+
obs_transition_set(transition, transition->transition_sources[1]);
353+
354+
// Re-initialize after change
355+
lock_transition(transition);
356+
same_as_source = dest == transition->transition_sources[0];
357+
same_as_dest = dest == transition->transition_sources[1];
358+
same_mode = mode == transition->transition_mode;
359+
active = transition_active(transition);
360+
unlock_transition(transition);
361+
}
362+
350363
lock_transition(transition);
351364
transition->transition_mode = mode;
352365
transition->transition_manual_val = 0.0f;
353366
transition->transition_manual_target = 0.0f;
354367
unlock_transition(transition);
355368

356-
if (active) {
357-
obs_transition_set(transition, transition->transition_sources[1]);
358-
active = false;
359-
}
360-
361369
if (transition->info.transition_start)
362370
transition->info.transition_start(transition->context.data);
363371

0 commit comments

Comments
 (0)