mirror of
https://github.com/WarmUpTill/SceneSwitcher.git
synced 2026-06-14 12:51:43 -05:00
Set current scene in handleSceneChange() and reuse it
This commit is contained in:
parent
86fefe1e9e
commit
034a1b0c93
|
|
@ -354,7 +354,8 @@ void switchScene(const sceneSwitchInfo &sceneSwitch)
|
|||
}
|
||||
|
||||
obs_source_t *source = obs_weak_source_get_source(sceneSwitch.scene);
|
||||
obs_source_t *currentSource = obs_frontend_get_current_scene();
|
||||
obs_source_t *currentSource =
|
||||
obs_weak_source_get_source(switcher->currentScene);
|
||||
|
||||
if (source && source != currentSource) {
|
||||
transitionData currentTransitionData;
|
||||
|
|
@ -473,15 +474,21 @@ void handleSceneChange()
|
|||
switcher->cv.notify_one();
|
||||
}
|
||||
|
||||
// Set previous scene
|
||||
// Set current and previous scene
|
||||
obs_source_t *source = obs_frontend_get_current_scene();
|
||||
obs_weak_source_t *ws = obs_source_get_weak_source(source);
|
||||
|
||||
if (ws && ws != switcher->currentScene) {
|
||||
switcher->previousScene = switcher->currentScene;
|
||||
switcher->currentScene = ws;
|
||||
vblog(LOG_INFO, "current scene: %s",
|
||||
GetWeakSourceName(switcher->currentScene).c_str());
|
||||
vblog(LOG_INFO, "previous scene: %s",
|
||||
GetWeakSourceName(switcher->previousScene).c_str());
|
||||
}
|
||||
|
||||
obs_source_release(source);
|
||||
obs_weak_source_release(ws);
|
||||
if (source && switcher->previousSceneHelper != ws) {
|
||||
switcher->previousScene = switcher->previousSceneHelper;
|
||||
switcher->previousSceneHelper = ws;
|
||||
}
|
||||
|
||||
switcher->checkTriggers();
|
||||
switcher->checkDefaultSceneTransitions();
|
||||
|
|
|
|||
|
|
@ -78,8 +78,8 @@ struct SwitcherData {
|
|||
int interval = default_interval;
|
||||
|
||||
obs_source_t *waitScene = nullptr;
|
||||
OBSWeakSource currentScene = nullptr;
|
||||
OBSWeakSource previousScene = nullptr;
|
||||
OBSWeakSource previousSceneHelper = nullptr;
|
||||
OBSWeakSource lastRandomScene;
|
||||
SceneGroup *lastRandomSceneGroup;
|
||||
OBSWeakSource nonMatchingScene;
|
||||
|
|
|
|||
|
|
@ -19,12 +19,7 @@ bool MacroConditionScene::CheckCondition()
|
|||
{
|
||||
bool sceneMatch = false;
|
||||
if (_type == SceneType::CURRENT) {
|
||||
obs_source_t *rawScene = obs_frontend_get_current_scene();
|
||||
OBSWeakSource currentScene =
|
||||
obs_source_get_weak_source(rawScene);
|
||||
sceneMatch = currentScene == _scene;
|
||||
obs_weak_source_release(currentScene);
|
||||
obs_source_release(rawScene);
|
||||
sceneMatch = switcher->currentScene == _scene;
|
||||
} else {
|
||||
sceneMatch = switcher->previousScene == _scene;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -298,9 +298,6 @@ void SwitcherData::checkTriggers()
|
|||
return;
|
||||
}
|
||||
|
||||
OBSSource source = obs_frontend_get_current_scene();
|
||||
OBSWeakSource currentScene = obs_source_get_weak_source(source);
|
||||
|
||||
for (auto &t : sceneTriggers) {
|
||||
if (stop && !isSwitcherStatusAction(t.triggerAction)) {
|
||||
continue;
|
||||
|
|
@ -311,9 +308,6 @@ void SwitcherData::checkTriggers()
|
|||
t.performAction();
|
||||
}
|
||||
}
|
||||
|
||||
obs_source_release(source);
|
||||
obs_weak_source_release(currentScene);
|
||||
}
|
||||
|
||||
void SwitcherData::saveSceneTriggers(obs_data_t *obj)
|
||||
|
|
|
|||
|
|
@ -90,15 +90,12 @@ void SwitcherData::writeSceneInfoToFile()
|
|||
return;
|
||||
}
|
||||
|
||||
obs_source_t *currentSource = obs_frontend_get_current_scene();
|
||||
|
||||
QFile file(QString::fromStdString(fileIO.writePath));
|
||||
if (file.open(QIODevice::WriteOnly)) {
|
||||
const char *msg = obs_source_get_name(currentSource);
|
||||
const char *msg = GetWeakSourceName(currentScene).c_str();
|
||||
file.write(msg, qstrlen(msg));
|
||||
file.close();
|
||||
}
|
||||
obs_source_release(currentSource);
|
||||
}
|
||||
|
||||
void SwitcherData::writeToStatusFile(const QString &msg)
|
||||
|
|
|
|||
|
|
@ -150,7 +150,7 @@ void setPauseTarget(PauseTarget &target)
|
|||
bool checkPauseScene(obs_weak_source_t *currentScene, obs_weak_source_t *scene,
|
||||
PauseTarget &target)
|
||||
{
|
||||
if (currentScene != scene) {
|
||||
if (!currentScene || currentScene != scene) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
@ -175,12 +175,10 @@ bool SwitcherData::checkPause()
|
|||
|
||||
resetPause();
|
||||
|
||||
obs_source_t *currentSource = obs_frontend_get_current_scene();
|
||||
obs_weak_source_t *ws = obs_source_get_weak_source(currentSource);
|
||||
|
||||
for (PauseEntry &s : pauseEntries) {
|
||||
if (s.pauseType == PauseType::Scene) {
|
||||
pauseAll = checkPauseScene(ws, s.scene, s.pauseTarget);
|
||||
pauseAll = checkPauseScene(currentScene, s.scene,
|
||||
s.pauseTarget);
|
||||
} else {
|
||||
pauseAll = checkPauseWindow(title, s.window,
|
||||
s.pauseTarget);
|
||||
|
|
@ -189,10 +187,6 @@ bool SwitcherData::checkPause()
|
|||
break;
|
||||
}
|
||||
}
|
||||
|
||||
obs_source_release(currentSource);
|
||||
obs_weak_source_release(ws);
|
||||
|
||||
return pauseAll;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -143,12 +143,7 @@ bool shouldIgnoreSceneSwitch(ScreenRegionSwitch &matchingRegion)
|
|||
return false;
|
||||
}
|
||||
|
||||
obs_source_t *currentScene = obs_frontend_get_current_scene();
|
||||
OBSWeakSource ws = obs_source_get_weak_source(currentScene);
|
||||
obs_weak_source_release(ws);
|
||||
obs_source_release(currentScene);
|
||||
|
||||
return matchingRegion.excludeScene == ws;
|
||||
return matchingRegion.excludeScene == switcher->currentScene;
|
||||
}
|
||||
|
||||
bool SwitcherData::checkScreenRegionSwitch(OBSWeakSource &scene,
|
||||
|
|
|
|||
|
|
@ -194,9 +194,6 @@ bool SwitcherData::checkSceneSequence(OBSWeakSource &scene,
|
|||
return false;
|
||||
}
|
||||
|
||||
obs_source_t *currentSceneSource = obs_frontend_get_current_scene();
|
||||
obs_weak_source_t *currentScene =
|
||||
obs_source_get_weak_source(currentSceneSource);
|
||||
bool match = false;
|
||||
|
||||
for (SceneSequenceSwitch &s : sceneSequenceSwitches) {
|
||||
|
|
@ -243,9 +240,6 @@ bool SwitcherData::checkSceneSequence(OBSWeakSource &scene,
|
|||
uninterruptibleSceneSequenceActive = false;
|
||||
}
|
||||
|
||||
obs_source_release(currentSceneSource);
|
||||
obs_weak_source_release(currentScene);
|
||||
|
||||
return match;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -158,10 +158,6 @@ void SwitcherData::checkDefaultSceneTransitions()
|
|||
return;
|
||||
}
|
||||
|
||||
obs_source_t *currentSceneSource = obs_frontend_get_current_scene();
|
||||
obs_weak_source_t *currentScene =
|
||||
obs_source_get_weak_source(currentSceneSource);
|
||||
|
||||
for (auto &t : defaultSceneTransitions) {
|
||||
if (t.checkMatch(currentScene)) {
|
||||
if (verbose) {
|
||||
|
|
@ -171,9 +167,6 @@ void SwitcherData::checkDefaultSceneTransitions()
|
|||
break;
|
||||
}
|
||||
}
|
||||
|
||||
obs_weak_source_release(currentScene);
|
||||
obs_source_release(currentSceneSource);
|
||||
}
|
||||
|
||||
void AdvSceneSwitcher::on_transitionOverridecheckBox_stateChanged(int state)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user