Skip to content

Commit 3fa9130

Browse files
committed
Events: Add from and to scene names to transition events
These scene names are missing to make these events useful for anything other than monitoring
1 parent 5b4aa9d commit 3fa9130

File tree

1 file changed

+32
-0
lines changed

1 file changed

+32
-0
lines changed

src/eventhandler/EventHandler_Transitions.cpp

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,11 +63,31 @@ void EventHandler::HandleCurrentSceneTransitionDurationChanged()
6363
BroadcastEvent(EventSubscription::Transitions, "CurrentSceneTransitionDurationChanged", eventData);
6464
}
6565

66+
void SetFromAndToScene(json &eventData, obs_source_t *transition)
67+
{
68+
OBSSourceAutoRelease sourceScene = obs_transition_get_source(transition, OBS_TRANSITION_SOURCE_A);
69+
OBSSourceAutoRelease destinationScene = obs_transition_get_source(transition, OBS_TRANSITION_SOURCE_B);
70+
71+
eventData["fromScene"] = obs_source_get_name(sourceScene);
72+
eventData["toScene"] = obs_source_get_name(destinationScene);
73+
}
74+
75+
// FIXME: OBS bug causes source B to be null for transition end but not video transition end.
76+
// Needs to be fixed in obs itself
77+
void SetToScene(json &eventData, obs_source_t *transition)
78+
{
79+
OBSSourceAutoRelease sourceScene = obs_transition_get_source(transition, OBS_TRANSITION_SOURCE_A);
80+
81+
eventData["toScene"] = obs_source_get_name(sourceScene);
82+
}
83+
6684
/**
6785
* A scene transition has started.
6886
*
6987
* @dataField transitionName | String | Scene transition name
7088
* @dataField transitionUuid | String | Scene transition UUID
89+
* @dataField toScene | String | Scene that we transitioned to
90+
* @dataField fromScene | String | Scene that we transitioned away from
7191
*
7292
* @eventType SceneTransitionStarted
7393
* @eventSubscription Transitions
@@ -88,6 +108,9 @@ void EventHandler::HandleSceneTransitionStarted(void *param, calldata_t *data)
88108
json eventData;
89109
eventData["transitionName"] = obs_source_get_name(source);
90110
eventData["transitionUuid"] = obs_source_get_uuid(source);
111+
112+
SetFromAndToScene(eventData, source);
113+
91114
eventHandler->BroadcastEvent(EventSubscription::Transitions, "SceneTransitionStarted", eventData);
92115
}
93116

@@ -98,6 +121,7 @@ void EventHandler::HandleSceneTransitionStarted(void *param, calldata_t *data)
98121
*
99122
* @dataField transitionName | String | Scene transition name
100123
* @dataField transitionUuid | String | Scene transition UUID
124+
* @dataField toScene | String | Scene that we transitioned to
101125
*
102126
* @eventType SceneTransitionEnded
103127
* @eventSubscription Transitions
@@ -118,6 +142,9 @@ void EventHandler::HandleSceneTransitionEnded(void *param, calldata_t *data)
118142
json eventData;
119143
eventData["transitionName"] = obs_source_get_name(source);
120144
eventData["transitionUuid"] = obs_source_get_uuid(source);
145+
146+
SetToScene(eventData, source);
147+
121148
eventHandler->BroadcastEvent(EventSubscription::Transitions, "SceneTransitionEnded", eventData);
122149
}
123150

@@ -131,6 +158,8 @@ void EventHandler::HandleSceneTransitionEnded(void *param, calldata_t *data)
131158
*
132159
* @dataField transitionName | String | Scene transition name
133160
* @dataField transitionUuid | String | Scene transition UUID
161+
* @dataField toScene | String | Scene that we transitioned to
162+
* @dataField fromScene | String | Scene that we transitioned away from
134163
*
135164
* @eventType SceneTransitionVideoEnded
136165
* @eventSubscription Transitions
@@ -151,5 +180,8 @@ void EventHandler::HandleSceneTransitionVideoEnded(void *param, calldata_t *data
151180
json eventData;
152181
eventData["transitionName"] = obs_source_get_name(source);
153182
eventData["transitionUuid"] = obs_source_get_uuid(source);
183+
184+
SetFromAndToScene(eventData, source);
185+
154186
eventHandler->BroadcastEvent(EventSubscription::Transitions, "SceneTransitionVideoEnded", eventData);
155187
}

0 commit comments

Comments
 (0)