diff options
-rwxr-xr-x | language/English/strings.po | 2 | ||||
-rw-r--r-- | system/settings/settings.xml | 5 | ||||
-rw-r--r-- | xbmc/guilib/StereoscopicsManager.cpp | 15 | ||||
-rw-r--r-- | xbmc/guilib/StereoscopicsManager.h | 3 | ||||
-rw-r--r-- | xbmc/settings/DisplaySettings.cpp | 28 | ||||
-rw-r--r-- | xbmc/settings/Settings.cpp | 1 |
6 files changed, 48 insertions, 6 deletions
diff --git a/language/English/strings.po b/language/English/strings.po index 348b77e784..0879748e8c 100755 --- a/language/English/strings.po +++ b/language/English/strings.po @@ -13427,8 +13427,10 @@ msgctxt "#36027" msgid "This device needs servicing" msgstr "" +#. Label for a select option #: xbmc/peripherals/devices/PeripheralCecAdapter.cpp #: system/peripherals.xml +#: system/settings.xml msgctxt "#36028" msgid "Ignore" msgstr "" diff --git a/system/settings/settings.xml b/system/settings/settings.xml index 144682a8ca..d73abc22f7 100644 --- a/system/settings/settings.xml +++ b/system/settings/settings.xml @@ -510,6 +510,8 @@ <options> <option label="36521">0</option> <!-- ASK --> <option label="36522">1</option> <!-- Preferred mode --> + <option label="36509">2</option> <!-- Monoscopic / 2D --> + <option label="36028">100</option> <!-- Ignore --> </options> </constraints> <control type="spinner" format="integer" delayed="true"/> @@ -2294,6 +2296,9 @@ <constraints> <options>preferedstereoscopicviewmodes</options> </constraints> + <updates> + <update type="change" /> + </updates> <control type="list" format="integer"/> </setting> </group> diff --git a/xbmc/guilib/StereoscopicsManager.cpp b/xbmc/guilib/StereoscopicsManager.cpp index d50550f01b..738b6b7eb4 100644 --- a/xbmc/guilib/StereoscopicsManager.cpp +++ b/xbmc/guilib/StereoscopicsManager.cpp @@ -449,12 +449,16 @@ void CStereoscopicsManager::OnPlaybackStarted(void) if (!g_infoManager.EvaluateBool("videoplayer.isstereoscopic")) return; - // only change stereo mode if not yet in stereo mode + STEREOSCOPIC_PLAYBACK_MODE playbackMode = (STEREOSCOPIC_PLAYBACK_MODE) CSettings::Get().GetInt("videoplayer.stereoscopicplaybackmode"); RENDER_STEREO_MODE mode = GetStereoMode(); + + // early return if playback mode should be ignored and we're in no stereoscopic mode right now + if (playbackMode == STEREOSCOPIC_PLAYBACK_MODE_IGNORE && mode == RENDER_STEREO_MODE_OFF) + return; + if (mode != RENDER_STEREO_MODE_OFF) return; - STEREOSCOPIC_PLAYBACK_MODE playbackMode = (STEREOSCOPIC_PLAYBACK_MODE) CSettings::Get().GetInt("videoplayer.stereoscopicplaybackmode"); switch (playbackMode) { case STEREOSCOPIC_PLAYBACK_MODE_ASK: // Ask @@ -478,9 +482,7 @@ void CStereoscopicsManager::OnPlaybackStarted(void) + GetLabelForStereoMode(preferred) + ")"); - if(preferred != RENDER_STEREO_MODE_MONO) - idx_mono = pDlgSelect->Add( g_localizeStrings.Get(36529) ); // mono / 2d - + idx_mono = pDlgSelect->Add( g_localizeStrings.Get(36529) ); // mono / 2d if(playing != RENDER_STEREO_MODE_OFF && g_Windowing.SupportsStereo(playing)) idx_playing = pDlgSelect->Add((CStdString)g_localizeStrings.Get(36532) @@ -509,6 +511,9 @@ void CStereoscopicsManager::OnPlaybackStarted(void) case STEREOSCOPIC_PLAYBACK_MODE_PREFERRED: // Stereoscopic SetStereoMode( GetPreferredPlaybackMode() ); break; + case 2: // Mono + SetStereoMode( RENDER_STEREO_MODE_MONO ); + break; default: break; } diff --git a/xbmc/guilib/StereoscopicsManager.h b/xbmc/guilib/StereoscopicsManager.h index f803c14079..422cba20ec 100644 --- a/xbmc/guilib/StereoscopicsManager.h +++ b/xbmc/guilib/StereoscopicsManager.h @@ -36,6 +36,9 @@ enum STEREOSCOPIC_PLAYBACK_MODE { STEREOSCOPIC_PLAYBACK_MODE_ASK, STEREOSCOPIC_PLAYBACK_MODE_PREFERRED, + STEREOSCOPIC_PLAYBACK_MODE_MONO, + + STEREOSCOPIC_PLAYBACK_MODE_IGNORE = 100, }; class CStereoscopicsManager : public ISettingCallback, diff --git a/xbmc/settings/DisplaySettings.cpp b/xbmc/settings/DisplaySettings.cpp index e43445b198..46456c03c2 100644 --- a/xbmc/settings/DisplaySettings.cpp +++ b/xbmc/settings/DisplaySettings.cpp @@ -324,6 +324,25 @@ bool CDisplaySettings::OnSettingUpdate(CSetting* &setting, const char *oldSettin return vsyncSetting->SetValue(VSYNC_ALWAYS); #endif } + else if (settingId == "videoscreen.preferedstereoscopicmode") + { + CSettingInt *stereomodeSetting = (CSettingInt*)setting; + STEREOSCOPIC_PLAYBACK_MODE playbackMode = (STEREOSCOPIC_PLAYBACK_MODE) CSettings::Get().GetInt("videoplayer.stereoscopicplaybackmode"); + if (stereomodeSetting->GetValue() == RENDER_STEREO_MODE_OFF) + { + // if preferred playback mode was OFF, update playback mode to ignore + if (playbackMode == STEREOSCOPIC_PLAYBACK_MODE_PREFERRED) + CSettings::Get().SetInt("videoplayer.stereoscopicplaybackmode", STEREOSCOPIC_PLAYBACK_MODE_IGNORE); + return stereomodeSetting->SetValue(RENDER_STEREO_MODE_AUTO); + } + else if (stereomodeSetting->GetValue() == RENDER_STEREO_MODE_MONO) + { + // if preferred playback mode was MONO, update playback mode + if (playbackMode == STEREOSCOPIC_PLAYBACK_MODE_PREFERRED) + CSettings::Get().SetInt("videoplayer.stereoscopicplaybackmode", STEREOSCOPIC_PLAYBACK_MODE_MONO); + return stereomodeSetting->SetValue(RENDER_STEREO_MODE_AUTO); + } + } return false; } @@ -718,8 +737,15 @@ void CDisplaySettings::SettingOptionsStereoscopicModesFiller(const CSetting *set void CDisplaySettings::SettingOptionsPreferredStereoscopicViewModesFiller(const CSetting *setting, std::vector< std::pair<std::string, int> > &list, int ¤t, void *data) { - SettingOptionsStereoscopicModesFiller(setting, list, current, data); list.push_back(make_pair(g_localizeStrings.Get(36525), RENDER_STEREO_MODE_AUTO)); // option for autodetect + // don't add "off" to the list of preferred modes as this doesn't make sense + for (int i = RENDER_STEREO_MODE_OFF +1; i < RENDER_STEREO_MODE_COUNT; i++) + { + RENDER_STEREO_MODE mode = (RENDER_STEREO_MODE) i; + // also skip "mono" mode which is no real stereoscopic mode + if (mode != RENDER_STEREO_MODE_MONO && g_Windowing.SupportsStereo(mode)) + list.push_back(make_pair(CStereoscopicsManager::Get().GetLabelForStereoMode(mode), mode)); + } } void CDisplaySettings::SettingOptionsMonitorsFiller(const CSetting *setting, std::vector< std::pair<std::string, std::string> > &list, std::string ¤t, void *data) diff --git a/xbmc/settings/Settings.cpp b/xbmc/settings/Settings.cpp index b87e984e8c..95d45127b7 100644 --- a/xbmc/settings/Settings.cpp +++ b/xbmc/settings/Settings.cpp @@ -680,6 +680,7 @@ void CSettings::InitializeISettingCallbacks() settingSet.insert("videoscreen.screenmode"); settingSet.insert("videoscreen.vsync"); settingSet.insert("videoscreen.monitor"); + settingSet.insert("videoscreen.preferedstereoscopicmode"); m_settingsManager->RegisterCallback(&CDisplaySettings::Get(), settingSet); settingSet.clear(); |