diff options
-rw-r--r-- | xbmc/guilib/StereoscopicsManager.cpp | 45 | ||||
-rw-r--r-- | xbmc/settings/AdvancedSettings.cpp | 10 | ||||
-rw-r--r-- | xbmc/settings/AdvancedSettings.h | 5 |
3 files changed, 35 insertions, 25 deletions
diff --git a/xbmc/guilib/StereoscopicsManager.cpp b/xbmc/guilib/StereoscopicsManager.cpp index cb5e3fdeb1..70bb4cdbb5 100644 --- a/xbmc/guilib/StereoscopicsManager.cpp +++ b/xbmc/guilib/StereoscopicsManager.cpp @@ -42,6 +42,7 @@ #include "settings/Settings.h" #include "rendering/RenderSystem.h" #include "utils/log.h" +#include "utils/RegExp.h" #include "utils/StringUtils.h" #include "URL.h" #include "windowing/WindowingFactory.h" @@ -145,33 +146,39 @@ RENDER_STEREO_MODE CStereoscopicsManager::GetNextSupportedStereoMode(const RENDE std::string CStereoscopicsManager::DetectStereoModeByString(const std::string &needle) { - std::string stereoMode; + std::string stereoMode = "mono"; CStdString searchString(needle); - CStdStringArray tags; - StringUtils::ToUpper(searchString); + CRegExp re(true); - CStdString tag( g_advancedSettings.m_stereoscopicflags_sbs ); - if (stereoMode.empty() && !tag.empty()) + if (!re.RegComp(g_advancedSettings.m_stereoscopicregex_3d.c_str())) { - StringUtils::ToUpper(tag); - StringUtils::SplitString(tag, "|", tags); - if (StringUtils::ContainsKeyword(searchString, tags)) - stereoMode = "left_right"; + CLog::Log(LOGERROR, "%s: Invalid RegExp for matching 3d content:'%s'", __FUNCTION__, g_advancedSettings.m_stereoscopicregex_3d.c_str()); + return stereoMode; } - tag = g_advancedSettings.m_stereoscopicflags_tab; - if (stereoMode.empty() && !tag.empty()) + if (re.RegFind(searchString) == -1) + return stereoMode; // no match found for 3d content, assume mono mode + + if (!re.RegComp(g_advancedSettings.m_stereoscopicregex_sbs.c_str())) { - StringUtils::ToUpper(tag); - StringUtils::SplitString(tag, "|", tags); - if (StringUtils::ContainsKeyword(searchString, tags)) - stereoMode = "top_bottom"; + CLog::Log(LOGERROR, "%s: Invalid RegExp for matching 3d SBS content:'%s'", __FUNCTION__, g_advancedSettings.m_stereoscopicregex_sbs.c_str()); + return stereoMode; } - if (stereoMode.empty()) - stereoMode = "mono"; - else - CLog::Log(LOGDEBUG, "StereoscopicsManager: Detected stereo mode in string '%s' is '%s'", CURL::GetRedacted(needle).c_str(), stereoMode.c_str()); + if (re.RegFind(searchString) > -1) + { + stereoMode = "left_right"; + return stereoMode; + } + + if (!re.RegComp(g_advancedSettings.m_stereoscopicregex_tab.c_str())) + { + CLog::Log(LOGERROR, "%s: Invalid RegExp for matching 3d TAB content:'%s'", __FUNCTION__, g_advancedSettings.m_stereoscopicregex_tab.c_str()); + return stereoMode; + } + + if (re.RegFind(searchString) > -1) + stereoMode = "top_bottom"; return stereoMode; } diff --git a/xbmc/settings/AdvancedSettings.cpp b/xbmc/settings/AdvancedSettings.cpp index e21d21e3b9..eff43dd384 100644 --- a/xbmc/settings/AdvancedSettings.cpp +++ b/xbmc/settings/AdvancedSettings.cpp @@ -401,8 +401,9 @@ void CAdvancedSettings::Initialize() // internal video extensions m_videoExtensions += "|.pvr"; - m_stereoscopicflags_sbs = "3DSBS|3D.SBS|HSBS|H.SBS|H-SBS| SBS |FULL-SBS|FULL.SBS|FULLSBS|FSBS|HALF-SBS"; - m_stereoscopicflags_tab = "3DTAB|3D.TAB|HTAB|H.TAB|3DOU|3D.OU|3D.HOU| HOU | OU |HALF-TAB"; + m_stereoscopicregex_3d = "[-. _]3d[-. _]"; + m_stereoscopicregex_sbs = "[-. _]h?sbs[-. _]"; + m_stereoscopicregex_tab = "[-. _]h?tab[-. _]"; m_logLevelHint = m_logLevel = LOG_LEVEL_NORMAL; m_extraLogLevels = 0; @@ -544,8 +545,9 @@ void CAdvancedSettings::ParseSettingsFile(const CStdString &file) pElement = pRootElement->FirstChildElement("video"); if (pElement) { - XMLUtils::GetString(pElement, "stereoscopicflagssbs", m_stereoscopicflags_sbs); - XMLUtils::GetString(pElement, "stereoscopicflagstab", m_stereoscopicflags_tab); + XMLUtils::GetString(pElement, "stereoscopicregex3d", m_stereoscopicregex_3d); + XMLUtils::GetString(pElement, "stereoscopicregexsbs", m_stereoscopicregex_sbs); + XMLUtils::GetString(pElement, "stereoscopicregextab", m_stereoscopicregex_tab); XMLUtils::GetFloat(pElement, "subsdelayrange", m_videoSubsDelayRange, 10, 600); XMLUtils::GetFloat(pElement, "audiodelayrange", m_videoAudioDelayRange, 10, 600); XMLUtils::GetInt(pElement, "blackbarcolour", m_videoBlackBarColour, 0, 255); diff --git a/xbmc/settings/AdvancedSettings.h b/xbmc/settings/AdvancedSettings.h index 1e54c939a1..3995f35279 100644 --- a/xbmc/settings/AdvancedSettings.h +++ b/xbmc/settings/AdvancedSettings.h @@ -400,8 +400,9 @@ class CAdvancedSettings : public ISettingCallback, public ISettingsHandler CStdString m_discStubExtensions; CStdString m_subtitlesExtensions; - CStdString m_stereoscopicflags_sbs; - CStdString m_stereoscopicflags_tab; + CStdString m_stereoscopicregex_3d; + CStdString m_stereoscopicregex_sbs; + CStdString m_stereoscopicregex_tab; CStdString m_logFolder; |