aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--xbmc/guilib/StereoscopicsManager.cpp45
-rw-r--r--xbmc/settings/AdvancedSettings.cpp10
-rw-r--r--xbmc/settings/AdvancedSettings.h5
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;