Set current scene in handleSceneChange() and reuse it

This commit is contained in:
WarmUpTill 2021-06-22 20:30:41 +02:00 committed by WarmUpTill
parent 86fefe1e9e
commit 034a1b0c93
9 changed files with 20 additions and 51 deletions

View File

@ -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();

View File

@ -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;

View File

@ -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;
}

View File

@ -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)

View File

@ -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)

View File

@ -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;
}

View File

@ -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,

View File

@ -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;
}

View File

@ -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)