From 3b465e1fdc7feb87599c6a914c2dca815117e2e7 Mon Sep 17 00:00:00 2001 From: WarmUpTill Date: Sun, 3 Oct 2021 21:04:57 +0200 Subject: [PATCH] Fix crash while loading haar cascade --- src/macro-condition-video.cpp | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/src/macro-condition-video.cpp b/src/macro-condition-video.cpp index a6da14ec..cf2cddb4 100644 --- a/src/macro-condition-video.cpp +++ b/src/macro-condition-video.cpp @@ -35,7 +35,12 @@ static std::map conditionTypes = { cv::CascadeClassifier initObjectCascade(std::string &path) { cv::CascadeClassifier cascade; - cascade.load(path); + try { + cascade.load(path); + } catch (...) { + blog(LOG_WARNING, "failed to load model data \"%s\"", + path.c_str()); + } return cascade; } @@ -184,13 +189,7 @@ bool MacroConditionVideo::LoadImageFromFile() bool MacroConditionVideo::LoadModelData(std::string &path) { _modelDataPath = path; - try { - _objectCascade = initObjectCascade(path); - } catch (...) { - blog(LOG_WARNING, "failed to load model data \"%s\"", - path.c_str()); - return false; - } + _objectCascade = initObjectCascade(path); return !_objectCascade.empty(); } @@ -810,9 +809,13 @@ void MacroConditionVideoEdit::ModelPathChanged(const QString &text) return; } - std::lock_guard lock(switcher->m); - std::string path = text.toStdString(); - if (!_entryData->LoadModelData(path)) { + bool dataLoaded = false; + { + std::lock_guard lock(switcher->m); + std::string path = text.toStdString(); + dataLoaded = _entryData->LoadModelData(path); + } + if (!dataLoaded) { DisplayMessage(obs_module_text( "AdvSceneSwitcher.condition.video.modelLoadFail")); }