From 67f0fa3adcf1be16c7a4643a6f2f4a6cf0470f69 Mon Sep 17 00:00:00 2001 From: WarmUpTill Date: Wed, 13 Jul 2016 16:11:03 +0200 Subject: [PATCH] added pause scene option --- settings.cpp | 19 ++++++++++++++++++- settings.h | 9 +++++---- switcher.cpp | 16 +++++++++++++++- switcher.h | 1 + 4 files changed, 39 insertions(+), 6 deletions(-) diff --git a/settings.cpp b/settings.cpp index 4a7a13d4..1a6c75ae 100644 --- a/settings.cpp +++ b/settings.cpp @@ -22,6 +22,7 @@ void Settings::load() { //reset the settings settings = map(); sceneRoundTrip = vector(); + pauseScenes = vector(); //read the settings file vector settingsElements; ifstream infile(settingsFilePath); @@ -53,7 +54,6 @@ void Settings::load() { numValues = 0; //find Scene Round Trip if (temp.find("Scene Round Trip") != temp.npos) { - //discard the first value ("Scene Round Trip") getline(lineStream, value, ','); while (lineStream.good()) { @@ -69,6 +69,19 @@ void Settings::load() { sceneRoundTrip.push_back(""); } } + else if (temp.find("Pause Scene Names") != temp.npos) { + //discard the first value ("Pause Scene Names") + getline(lineStream, value, ','); + while (lineStream.good()) { + //Scene Round Trip,TriggerSceneHere,DelayHere,NextSceneHere,DelayHere,AnotherSceneHere,DelayHere,... + getline(lineStream, value, ','); + pauseScenes.push_back(value); + } + //remove trailing /" of last value + if (pauseScenes.size() > 0) { + pauseScenes.back().pop_back(); + } + } //find values for Scene switching else { @@ -120,3 +133,7 @@ vector Settings::getSceneRoundTrip(){ return sceneRoundTrip; } +vector Settings::getPauseScenes(){ + return pauseScenes; +} + diff --git a/settings.h b/settings.h index a53f6c7c..0ffd8dfe 100644 --- a/settings.h +++ b/settings.h @@ -2,7 +2,6 @@ #include #include #include -#include using namespace std; @@ -12,16 +11,18 @@ struct Data { }; class Settings { - vector sceneRoundTrip; - map settings; - bool startMessageDisable = false; public: void load(); bool getStartMessageDisable(); map getMap(); vector getSceneRoundTrip(); + vector getPauseScenes(); string getSettingsFilePath(); void setSettingsFilePath(string path); private: string settingsFilePath = ""; + map settings; + vector sceneRoundTrip; + vectorpauseScenes; + bool startMessageDisable = false; }; diff --git a/switcher.cpp b/switcher.cpp index d12a0ae4..f536b2e9 100644 --- a/switcher.cpp +++ b/switcher.cpp @@ -23,11 +23,21 @@ void Switcher::switcherThreadFunc() { string windowname = ""; string sceneName = ""; bool checkFullscreen = false; + bool pauseSwitching = false; while (isRunning) { //get Scene Name obs_source_t * transitionUsed = obs_get_output_source(0); obs_source_t * sceneUsed = obs_transition_get_active_source(transitionUsed); const char *sceneUsedName = obs_source_get_name(sceneUsed); + //check if scene switching should be paused + if ((sceneUsedName) && find(pauseScenes.begin(), pauseScenes.end(), string(sceneUsedName)) != pauseScenes.end()) { + pauseSwitching = true; + } + else { + pauseSwitching = false; + } + //are we in pause mode? + if (!pauseSwitching) { //check if a Scene Round Trip should be started if ((sceneUsedName) && strcmp(sceneUsedName, sceneRoundTrip.front().c_str()) == 0) { sceneRoundTripActive = true; @@ -112,6 +122,7 @@ void Switcher::switcherThreadFunc() { obs_source_release(transitionUsed); } } + } //sleep for a bit this_thread::sleep_for(chrono::milliseconds(1000)); } @@ -123,6 +134,7 @@ void Switcher::firstLoad() { settings.load(); settingsMap = settings.getMap(); sceneRoundTrip = settings.getSceneRoundTrip(); + pauseScenes = settings.getPauseScenes(); if (!settings.getStartMessageDisable()) { string message = "The following settings were found for Scene Switcher:\n"; for (auto it = settingsMap.cbegin(); it != settingsMap.cend(); ++it) @@ -140,6 +152,7 @@ void Switcher::firstLoad() { settings.load(); settingsMap = settings.getMap(); sceneRoundTrip = settings.getSceneRoundTrip(); + pauseScenes = settings.getPauseScenes(); if (!settings.getStartMessageDisable()) { string message = "The following settings were found for Scene Switcher:\n"; for (auto it = settingsMap.cbegin(); it != settingsMap.cend(); ++it) @@ -172,8 +185,9 @@ void Switcher::firstLoad() { //load the settings needed to start the thread void Switcher::load() { settings.load(); - sceneRoundTrip = settings.getSceneRoundTrip(); settingsMap = settings.getMap(); + sceneRoundTrip = settings.getSceneRoundTrip(); + pauseScenes = settings.getPauseScenes(); } //start thread diff --git a/switcher.h b/switcher.h index ca8f0e12..8004b94f 100644 --- a/switcher.h +++ b/switcher.h @@ -22,6 +22,7 @@ private: Settings settings; map settingsMap; vector sceneRoundTrip; + vector pauseScenes; void switcherThreadFunc(); bool isWindowFullscreen(); string GetActiveWindowTitle();