@@ -63,11 +63,31 @@ void EventHandler::HandleCurrentSceneTransitionDurationChanged()
63
63
BroadcastEvent (EventSubscription::Transitions, " CurrentSceneTransitionDurationChanged" , eventData);
64
64
}
65
65
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
+
66
84
/* *
67
85
* A scene transition has started.
68
86
*
69
87
* @dataField transitionName | String | Scene transition name
70
88
* @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
71
91
*
72
92
* @eventType SceneTransitionStarted
73
93
* @eventSubscription Transitions
@@ -88,6 +108,9 @@ void EventHandler::HandleSceneTransitionStarted(void *param, calldata_t *data)
88
108
json eventData;
89
109
eventData[" transitionName" ] = obs_source_get_name (source);
90
110
eventData[" transitionUuid" ] = obs_source_get_uuid (source);
111
+
112
+ SetFromAndToScene (eventData, source);
113
+
91
114
eventHandler->BroadcastEvent (EventSubscription::Transitions, " SceneTransitionStarted" , eventData);
92
115
}
93
116
@@ -98,6 +121,7 @@ void EventHandler::HandleSceneTransitionStarted(void *param, calldata_t *data)
98
121
*
99
122
* @dataField transitionName | String | Scene transition name
100
123
* @dataField transitionUuid | String | Scene transition UUID
124
+ * @dataField toScene | String | Scene that we transitioned to
101
125
*
102
126
* @eventType SceneTransitionEnded
103
127
* @eventSubscription Transitions
@@ -118,6 +142,9 @@ void EventHandler::HandleSceneTransitionEnded(void *param, calldata_t *data)
118
142
json eventData;
119
143
eventData[" transitionName" ] = obs_source_get_name (source);
120
144
eventData[" transitionUuid" ] = obs_source_get_uuid (source);
145
+
146
+ SetToScene (eventData, source);
147
+
121
148
eventHandler->BroadcastEvent (EventSubscription::Transitions, " SceneTransitionEnded" , eventData);
122
149
}
123
150
@@ -131,6 +158,8 @@ void EventHandler::HandleSceneTransitionEnded(void *param, calldata_t *data)
131
158
*
132
159
* @dataField transitionName | String | Scene transition name
133
160
* @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
134
163
*
135
164
* @eventType SceneTransitionVideoEnded
136
165
* @eventSubscription Transitions
@@ -151,5 +180,8 @@ void EventHandler::HandleSceneTransitionVideoEnded(void *param, calldata_t *data
151
180
json eventData;
152
181
eventData[" transitionName" ] = obs_source_get_name (source);
153
182
eventData[" transitionUuid" ] = obs_source_get_uuid (source);
183
+
184
+ SetFromAndToScene (eventData, source);
185
+
154
186
eventHandler->BroadcastEvent (EventSubscription::Transitions, " SceneTransitionVideoEnded" , eventData);
155
187
}
0 commit comments