From d17ee208635ee638c16aceafbf7850c66683ee83 Mon Sep 17 00:00:00 2001 From: jp9000 Date: Mon, 18 Feb 2019 19:28:26 -0800 Subject: [PATCH] obs-frontend-api: Make a few frontend API thread-safe Additionally, check for null output handlers. --- UI/api-interface.cpp | 21 ++++++++++++++++++--- UI/window-basic-main.cpp | 21 +++++++++++++++++++++ UI/window-basic-main.hpp | 4 ++++ 3 files changed, 43 insertions(+), 3 deletions(-) diff --git a/UI/api-interface.cpp b/UI/api-interface.cpp index e7cc8365c..4327a00c2 100644 --- a/UI/api-interface.cpp +++ b/UI/api-interface.cpp @@ -232,7 +232,12 @@ struct OBSStudioAPI : obs_frontend_callbacks { bool obs_frontend_streaming_active(void) override { - return main->outputHandler->StreamingActive(); + bool active; + QMetaObject::invokeMethod(main, + "StreamingActive", + WaitConnection(), + Q_RETURN_ARG(bool, active)); + return active; } void obs_frontend_recording_start(void) override @@ -247,7 +252,12 @@ struct OBSStudioAPI : obs_frontend_callbacks { bool obs_frontend_recording_active(void) override { - return main->outputHandler->RecordingActive(); + bool active; + QMetaObject::invokeMethod(main, + "RecordingActive", + WaitConnection(), + Q_RETURN_ARG(bool, active)); + return active; } void obs_frontend_replay_buffer_start(void) override @@ -267,7 +277,12 @@ struct OBSStudioAPI : obs_frontend_callbacks { bool obs_frontend_replay_buffer_active(void) override { - return main->outputHandler->ReplayBufferActive(); + bool active; + QMetaObject::invokeMethod(main, + "ReplayBufferActive", + WaitConnection(), + Q_RETURN_ARG(bool, active)); + return active; } void *obs_frontend_add_tools_menu_qaction(const char *name) override diff --git a/UI/window-basic-main.cpp b/UI/window-basic-main.cpp index 59e59fea8..88cb38399 100644 --- a/UI/window-basic-main.cpp +++ b/UI/window-basic-main.cpp @@ -6998,3 +6998,24 @@ OBSBasic *OBSBasic::Get() { return reinterpret_cast(App()->GetMainWindow()); } + +bool OBSBasic::StreamingActive() +{ + if (!outputHandler) + return false; + return outputHandler->StreamingActive(); +} + +bool OBSBasic::RecordingActive() +{ + if (!outputHandler) + return false; + return outputHandler->RecordingActive(); +} + +bool OBSBasic::ReplayBufferActive() +{ + if (!outputHandler) + return false; + return outputHandler->ReplayBufferActive(); +} diff --git a/UI/window-basic-main.hpp b/UI/window-basic-main.hpp index 95be1c9b0..9d6e53578 100644 --- a/UI/window-basic-main.hpp +++ b/UI/window-basic-main.hpp @@ -789,6 +789,10 @@ private slots: public slots: void on_actionResetTransform_triggered(); + bool StreamingActive(); + bool RecordingActive(); + bool ReplayBufferActive(); + public: explicit OBSBasic(QWidget *parent = 0); virtual ~OBSBasic();