From edd9f18de0ba1e253dde5ecccab09caae657f0fa Mon Sep 17 00:00:00 2001 From: WarmUpTill Date: Sun, 13 Jun 2021 10:25:02 -0700 Subject: [PATCH] Add scene trigger to control virtual camera (#162) --- data/locale/de-DE.ini | 2 ++ data/locale/en-US.ini | 2 ++ src/headers/scene-trigger.hpp | 3 +++ src/scene-trigger.cpp | 20 +++++++++++++++++++- 4 files changed, 26 insertions(+), 1 deletion(-) diff --git a/data/locale/de-DE.ini b/data/locale/de-DE.ini index e300f5dd..54404c5b 100644 --- a/data/locale/de-DE.ini +++ b/data/locale/de-DE.ini @@ -284,6 +284,8 @@ AdvSceneSwitcher.sceneTriggerTab.sceneTriggerAction.muteSource="Audio Quelle stu AdvSceneSwitcher.sceneTriggerTab.sceneTriggerAction.unmuteSource="Audio Quelle aktiv schalten" AdvSceneSwitcher.sceneTriggerTab.sceneTriggerAction.startSwitcher="Szenenwechsler starten" AdvSceneSwitcher.sceneTriggerTab.sceneTriggerAction.stopSwitcher="Szenenwechsler stoppen" +AdvSceneSwitcher.sceneTriggerTab.sceneTriggerAction.startVirtualCamera="Virtuelle Kamera starten" +AdvSceneSwitcher.sceneTriggerTab.sceneTriggerAction.stopVirtualCamera="Virtuelle Kamera stoppen" AdvSceneSwitcher.sceneTriggerTab.entry="Wenn {{scenes}} {{triggers}} {{actions}} {{audioSources}} nach {{duration}} " AdvSceneSwitcher.sceneTriggerTab.help="Dieser Tab ermöglicht es automatisiert Handlungen, wie etwa das Stoppen von einer Aufnahme oder des Streamens, bei einem Szenenwechsel auszuführen." diff --git a/data/locale/en-US.ini b/data/locale/en-US.ini index b8f8e851..be9f5813 100644 --- a/data/locale/en-US.ini +++ b/data/locale/en-US.ini @@ -439,6 +439,8 @@ AdvSceneSwitcher.sceneTriggerTab.sceneTriggerAction.muteSource="mute source" AdvSceneSwitcher.sceneTriggerTab.sceneTriggerAction.unmuteSource="unmute source" AdvSceneSwitcher.sceneTriggerTab.sceneTriggerAction.startSwitcher="start the scene switcher" AdvSceneSwitcher.sceneTriggerTab.sceneTriggerAction.stopSwitcher="stop the scene switcher" +AdvSceneSwitcher.sceneTriggerTab.sceneTriggerAction.startVirtualCamera="start virtual camera" +AdvSceneSwitcher.sceneTriggerTab.sceneTriggerAction.stopVirtualCamera="stop virtual camera" AdvSceneSwitcher.sceneTriggerTab.entry="When {{scenes}} {{triggers}} {{actions}} {{audioSources}} after {{duration}}" AdvSceneSwitcher.sceneTriggerTab.help="This tab allows you to trigger actions on scene changes, like stopping recording or streaming." diff --git a/src/headers/scene-trigger.hpp b/src/headers/scene-trigger.hpp index 77512f10..9aafca8b 100644 --- a/src/headers/scene-trigger.hpp +++ b/src/headers/scene-trigger.hpp @@ -27,6 +27,9 @@ enum class sceneTriggerAction { START_SWITCHER, STOP_SWITCHER, + + START_VCAM, + STOP_VCAM, }; struct SceneTrigger : SceneSwitcherEntry { diff --git a/src/scene-trigger.cpp b/src/scene-trigger.cpp index 60a434de..45dbe98d 100644 --- a/src/scene-trigger.cpp +++ b/src/scene-trigger.cpp @@ -142,6 +142,12 @@ void SceneTrigger::logMatch() case sceneTriggerAction::STOP_SWITCHER: actionName = "STOP SCENE SWITCHER"; break; + case sceneTriggerAction::START_VCAM: + actionName = "START VIRTUAL CAMERA"; + break; + case sceneTriggerAction::STOP_VCAM: + actionName = "STOP VIRTUAL CAMERA"; + break; default: actionName = "UNKOWN"; break; @@ -185,6 +191,12 @@ void frontEndActionThread(sceneTriggerAction action, double delay) case sceneTriggerAction::STOP_REPLAY_BUFFER: obs_frontend_replay_buffer_stop(); break; + case sceneTriggerAction::START_VCAM: + obs_frontend_start_virtualcam(); + break; + case sceneTriggerAction::STOP_VCAM: + obs_frontend_stop_virtualcam(); + break; default: blog(LOG_WARNING, "ignoring unexpected frontend action '%d'", static_cast(action)); @@ -223,7 +235,9 @@ bool isFrontendAction(sceneTriggerAction triggerAction) triggerAction == sceneTriggerAction::START_STREAMING || triggerAction == sceneTriggerAction::STOP_STREAMING || triggerAction == sceneTriggerAction::START_REPLAY_BUFFER || - triggerAction == sceneTriggerAction::STOP_REPLAY_BUFFER; + triggerAction == sceneTriggerAction::STOP_REPLAY_BUFFER || + triggerAction == sceneTriggerAction::START_VCAM || + triggerAction == sceneTriggerAction::STOP_VCAM; } bool isAudioAction(sceneTriggerAction t) @@ -428,6 +442,10 @@ inline void populateActions(QComboBox *list) "AdvSceneSwitcher.sceneTriggerTab.sceneTriggerAction.startSwitcher")); list->addItem(obs_module_text( "AdvSceneSwitcher.sceneTriggerTab.sceneTriggerAction.stopSwitcher")); + list->addItem(obs_module_text( + "AdvSceneSwitcher.sceneTriggerTab.sceneTriggerAction.startVirtualCamera")); + list->addItem(obs_module_text( + "AdvSceneSwitcher.sceneTriggerTab.sceneTriggerAction.stopVirtualCamera")); } SceneTriggerWidget::SceneTriggerWidget(QWidget *parent, SceneTrigger *s)