mirror of
https://github.com/Palakis/obs-websocket.git
synced 2024-08-30 18:12:16 +00:00
events: fix TransitionBegin event not triggering
This commit is contained in:
parent
aed0234d47
commit
409c270ba2
@ -104,6 +104,8 @@ WSEvents::WSEvents(WSServerPtr srv) :
|
||||
|
||||
heartbeatTimer.start(STATUS_INTERVAL);
|
||||
|
||||
hookTransitionBeginEvent();
|
||||
|
||||
// Connect to signals of all existing sources
|
||||
obs_enum_sources([](void* param, obs_source_t* source) {
|
||||
auto self = reinterpret_cast<WSEvents*>(param);
|
||||
@ -132,6 +134,8 @@ WSEvents::~WSEvents() {
|
||||
return true;
|
||||
}, this);
|
||||
|
||||
unhookTransitionBeginEvent();
|
||||
|
||||
obs_frontend_remove_event_callback(WSEvents::FrontendEventHandler, this);
|
||||
os_cpu_usage_info_destroy(cpuUsageInfo);
|
||||
}
|
||||
@ -159,6 +163,7 @@ void WSEvents::FrontendEventHandler(enum obs_frontend_event event, void* private
|
||||
owner->OnTransitionChange();
|
||||
}
|
||||
else if (event == OBS_FRONTEND_EVENT_TRANSITION_LIST_CHANGED) {
|
||||
owner->hookTransitionBeginEvent();
|
||||
owner->OnTransitionListChange();
|
||||
}
|
||||
else if (event == OBS_FRONTEND_EVENT_PROFILE_CHANGED) {
|
||||
@ -283,9 +288,6 @@ void WSEvents::connectSourceSignals(obs_source_t* source) {
|
||||
signal_handler_connect(sh, "item_select", OnSceneItemSelected, 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) {
|
||||
@ -318,6 +320,33 @@ void WSEvents::disconnectSourceSignals(obs_source_t* source) {
|
||||
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() {
|
||||
if (obs_frontend_streaming_active())
|
||||
return (os_gettime_ns() - _streamStarttime);
|
||||
|
@ -40,6 +40,9 @@ public:
|
||||
void connectSourceSignals(obs_source_t* source);
|
||||
void disconnectSourceSignals(obs_source_t* source);
|
||||
|
||||
void hookTransitionBeginEvent();
|
||||
void unhookTransitionBeginEvent();
|
||||
|
||||
uint64_t GetStreamingTime();
|
||||
const char* GetStreamingTimecode();
|
||||
uint64_t GetRecordingTime();
|
||||
|
Loading…
x
Reference in New Issue
Block a user