| 58 | } |
| 59 | |
| 60 | void SetNextTransition(const SceneSwitchInfo &sceneSwitch, |
| 61 | obs_source_t *currentSource, TransitionData &td) |
| 62 | { |
| 63 | // Priority: |
| 64 | // 1. Transition tab |
| 65 | // 2. Individual switcher entry |
| 66 | // 3. Current transition settings |
| 67 | |
| 68 | // Transition Tab |
| 69 | OBSWeakSourceAutoRelease currentScene = |
| 70 | obs_source_get_weak_source(currentSource); |
| 71 | auto tinfo = getNextTransition(currentScene, sceneSwitch.scene); |
| 72 | |
| 73 | OBSWeakSource nextTransition = tinfo.first; |
| 74 | int nextTransitionDuration = tinfo.second; |
| 75 | |
| 76 | // Individual switcher entry |
| 77 | if (!nextTransition) { |
| 78 | nextTransition = sceneSwitch.transition; |
| 79 | } |
| 80 | if (!nextTransitionDuration) { |
| 81 | nextTransitionDuration = sceneSwitch.duration; |
| 82 | } |
| 83 | |
| 84 | // Current transition settings |
| 85 | if (!nextTransition) { |
| 86 | OBSSourceAutoRelease currentTransition = |
| 87 | obs_frontend_get_current_transition(); |
| 88 | nextTransition = obs_source_get_weak_source(currentTransition); |
| 89 | obs_weak_source_release(nextTransition); |
| 90 | } |
| 91 | if (!nextTransitionDuration) { |
| 92 | nextTransitionDuration = obs_frontend_get_transition_duration(); |
| 93 | } |
| 94 | |
| 95 | if (ShouldModifyActiveTransition()) { |
| 96 | obs_frontend_set_transition_duration(nextTransitionDuration); |
| 97 | OBSSourceAutoRelease transition = |
| 98 | obs_weak_source_get_source(nextTransition); |
| 99 | obs_frontend_set_current_transition(transition); |
| 100 | } |
| 101 | |
| 102 | if (ShouldModifyTransitionOverrides()) { |
| 103 | OverwriteTransitionOverride({sceneSwitch.scene, nextTransition, |
| 104 | nextTransitionDuration}, |
| 105 | td); |
| 106 | } |
| 107 | } |
| 108 | |
| 109 | void OverwriteTransitionOverride(const SceneSwitchInfo &ssi, TransitionData &td) |
| 110 | { |
no test coverage detected