Compare commits

..

4 Commits
4.6.0 ... 4.6.1

5 changed files with 40 additions and 7 deletions

View File

@ -518,7 +518,7 @@
<key>OVERWRITE_PERMISSIONS</key> <key>OVERWRITE_PERMISSIONS</key>
<false/> <false/>
<key>VERSION</key> <key>VERSION</key>
<string>4.6.0</string> <string>4.6.1</string>
</dict> </dict>
<key>PROJECT_COMMENTS</key> <key>PROJECT_COMMENTS</key>
<dict> <dict>

View File

@ -2,7 +2,7 @@
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES! ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
#define MyAppName "obs-websocket" #define MyAppName "obs-websocket"
#define MyAppVersion "4.6.0" #define MyAppVersion "4.6.1"
#define MyAppPublisher "Stephane Lepin" #define MyAppPublisher "Stephane Lepin"
#define MyAppURL "http://github.com/Palakis/obs-websocket" #define MyAppURL "http://github.com/Palakis/obs-websocket"

View File

@ -143,13 +143,17 @@ void WSEvents::FrontendEventHandler(enum obs_frontend_event event, void* private
return; return;
} }
if (event == OBS_FRONTEND_EVENT_SCENE_CHANGED) { if (event == OBS_FRONTEND_EVENT_FINISHED_LOADING) {
owner->hookTransitionBeginEvent();
}
else if (event == OBS_FRONTEND_EVENT_SCENE_CHANGED) {
owner->OnSceneChange(); owner->OnSceneChange();
} }
else if (event == OBS_FRONTEND_EVENT_SCENE_LIST_CHANGED) { else if (event == OBS_FRONTEND_EVENT_SCENE_LIST_CHANGED) {
owner->OnSceneListChange(); owner->OnSceneListChange();
} }
else if (event == OBS_FRONTEND_EVENT_SCENE_COLLECTION_CHANGED) { else if (event == OBS_FRONTEND_EVENT_SCENE_COLLECTION_CHANGED) {
owner->hookTransitionBeginEvent();
owner->OnSceneCollectionChange(); owner->OnSceneCollectionChange();
} }
else if (event == OBS_FRONTEND_EVENT_SCENE_COLLECTION_LIST_CHANGED) { else if (event == OBS_FRONTEND_EVENT_SCENE_COLLECTION_LIST_CHANGED) {
@ -159,6 +163,7 @@ void WSEvents::FrontendEventHandler(enum obs_frontend_event event, void* private
owner->OnTransitionChange(); owner->OnTransitionChange();
} }
else if (event == OBS_FRONTEND_EVENT_TRANSITION_LIST_CHANGED) { else if (event == OBS_FRONTEND_EVENT_TRANSITION_LIST_CHANGED) {
owner->hookTransitionBeginEvent();
owner->OnTransitionListChange(); owner->OnTransitionListChange();
} }
else if (event == OBS_FRONTEND_EVENT_PROFILE_CHANGED) { else if (event == OBS_FRONTEND_EVENT_PROFILE_CHANGED) {
@ -217,6 +222,7 @@ void WSEvents::FrontendEventHandler(enum obs_frontend_event event, void* private
owner->OnPreviewSceneChanged(); owner->OnPreviewSceneChanged();
} }
else if (event == OBS_FRONTEND_EVENT_EXIT) { else if (event == OBS_FRONTEND_EVENT_EXIT) {
owner->unhookTransitionBeginEvent();
owner->OnExit(); owner->OnExit();
} }
} }
@ -283,9 +289,6 @@ void WSEvents::connectSourceSignals(obs_source_t* source) {
signal_handler_connect(sh, "item_select", OnSceneItemSelected, this); signal_handler_connect(sh, "item_select", OnSceneItemSelected, this);
signal_handler_connect(sh, "item_deselect", OnSceneItemDeselected, this); signal_handler_connect(sh, "item_deselect", OnSceneItemDeselected, this);
} }
if (sourceType == OBS_SOURCE_TYPE_TRANSITION) {
signal_handler_connect(sh, "transition_start", OnTransitionBegin, this);
}
} }
void WSEvents::disconnectSourceSignals(obs_source_t* source) { void WSEvents::disconnectSourceSignals(obs_source_t* source) {
@ -318,6 +321,33 @@ void WSEvents::disconnectSourceSignals(obs_source_t* source) {
signal_handler_disconnect(sh, "transition_start", OnTransitionBegin, this); signal_handler_disconnect(sh, "transition_start", OnTransitionBegin, this);
} }
void WSEvents::hookTransitionBeginEvent() {
obs_frontend_source_list transitions = {};
obs_frontend_get_transitions(&transitions);
for (int i = 0; i < transitions.sources.num; i++) {
obs_source_t* transition = transitions.sources.array[i];
signal_handler_t* sh = obs_source_get_signal_handler(transition);
signal_handler_disconnect(sh, "transition_start", OnTransitionBegin, this);
signal_handler_connect(sh, "transition_start", OnTransitionBegin, this);
}
obs_frontend_source_list_free(&transitions);
}
void WSEvents::unhookTransitionBeginEvent() {
obs_frontend_source_list transitions = {};
obs_frontend_get_transitions(&transitions);
for (int i = 0; i < transitions.sources.num; i++) {
obs_source_t* transition = transitions.sources.array[i];
signal_handler_t* sh = obs_source_get_signal_handler(transition);
signal_handler_disconnect(sh, "transition_start", OnTransitionBegin, this);
}
obs_frontend_source_list_free(&transitions);
}
uint64_t WSEvents::GetStreamingTime() { uint64_t WSEvents::GetStreamingTime() {
if (obs_frontend_streaming_active()) if (obs_frontend_streaming_active())
return (os_gettime_ns() - _streamStarttime); return (os_gettime_ns() - _streamStarttime);

View File

@ -40,6 +40,9 @@ public:
void connectSourceSignals(obs_source_t* source); void connectSourceSignals(obs_source_t* source);
void disconnectSourceSignals(obs_source_t* source); void disconnectSourceSignals(obs_source_t* source);
void hookTransitionBeginEvent();
void unhookTransitionBeginEvent();
uint64_t GetStreamingTime(); uint64_t GetStreamingTime();
const char* GetStreamingTimecode(); const char* GetStreamingTimecode();
uint64_t GetRecordingTime(); uint64_t GetRecordingTime();

View File

@ -51,6 +51,6 @@ ConfigPtr GetConfig();
WSServerPtr GetServer(); WSServerPtr GetServer();
WSEventsPtr GetEventsSystem(); WSEventsPtr GetEventsSystem();
#define OBS_WEBSOCKET_VERSION "4.6.0" #define OBS_WEBSOCKET_VERSION "4.6.1"
#define blog(level, msg, ...) blog(level, "[obs-websocket] " msg, ##__VA_ARGS__) #define blog(level, msg, ...) blog(level, "[obs-websocket] " msg, ##__VA_ARGS__)