From 2ebb6e60cef34d5d6ed6dbb6d32e416a5567255b Mon Sep 17 00:00:00 2001 From: jp9000 Date: Sun, 6 Sep 2015 16:07:45 -0700 Subject: [PATCH] UI: Don't use activeRefs to determine if active Due to certain design changes for delay, it's better to simply determine whether outputs are active via booleans rather than an activeRefs variable, which could get decremented more than once if say, the signal for stopping the stream gets called more than once for whatever reason (which may happen in the case of delay due to the way delay works) --- obs/window-basic-main-outputs.cpp | 8 ++++---- obs/window-basic-main-outputs.hpp | 8 ++++++-- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/obs/window-basic-main-outputs.cpp b/obs/window-basic-main-outputs.cpp index 4aa7a944a..c5743dbde 100644 --- a/obs/window-basic-main-outputs.cpp +++ b/obs/window-basic-main-outputs.cpp @@ -9,8 +9,8 @@ using namespace std; static void OBSStartStreaming(void *data, calldata_t *params) { BasicOutputHandler *output = static_cast(data); + output->streamingActive = true; QMetaObject::invokeMethod(output->main, "StreamingStart"); - output->activeRefs++; UNUSED_PARAMETER(params); } @@ -20,17 +20,17 @@ static void OBSStopStreaming(void *data, calldata_t *params) BasicOutputHandler *output = static_cast(data); int code = (int)calldata_int(params, "code"); + output->streamingActive = false; QMetaObject::invokeMethod(output->main, "StreamingStop", Q_ARG(int, code)); - output->activeRefs--; } static void OBSStartRecording(void *data, calldata_t *params) { BasicOutputHandler *output = static_cast(data); + output->recordingActive = true; QMetaObject::invokeMethod(output->main, "RecordingStart"); - output->activeRefs++; UNUSED_PARAMETER(params); } @@ -40,9 +40,9 @@ static void OBSStopRecording(void *data, calldata_t *params) BasicOutputHandler *output = static_cast(data); int code = (int)calldata_int(params, "code"); + output->recordingActive = false; QMetaObject::invokeMethod(output->main, "RecordingStop", Q_ARG(int, code)); - output->activeRefs--; UNUSED_PARAMETER(params); } diff --git a/obs/window-basic-main-outputs.hpp b/obs/window-basic-main-outputs.hpp index 4d63b0f17..e6e673c16 100644 --- a/obs/window-basic-main-outputs.hpp +++ b/obs/window-basic-main-outputs.hpp @@ -5,7 +5,8 @@ class OBSBasic; struct BasicOutputHandler { OBSOutput fileOutput; OBSOutput streamOutput; - int activeRefs = 0; + bool streamingActive = false; + bool recordingActive = false; OBSBasic *main; OBSSignal startRecording; @@ -26,7 +27,10 @@ struct BasicOutputHandler { virtual void Update() = 0; - inline bool Active() const {return !!activeRefs;} + inline bool Active() const + { + return streamingActive || recordingActive; + } }; BasicOutputHandler *CreateSimpleOutputHandler(OBSBasic *main);