Ver Fonte

obs-frontend-api: Make a few frontend API thread-safe

Additionally, check for null output handlers.
jp9000 há 6 anos atrás
pai
commit
d17ee20863
3 ficheiros alterados com 43 adições e 3 exclusões
  1. 18 3
      UI/api-interface.cpp
  2. 21 0
      UI/window-basic-main.cpp
  3. 4 0
      UI/window-basic-main.hpp

+ 18 - 3
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

+ 21 - 0
UI/window-basic-main.cpp

@@ -6998,3 +6998,24 @@ OBSBasic *OBSBasic::Get()
 {
 	return reinterpret_cast<OBSBasic*>(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();
+}

+ 4 - 0
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();