aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorda-anda <da-anda@xbmc.org>2014-08-15 15:40:40 +0200
committerda-anda <da-anda@xbmc.org>2014-09-19 15:36:19 +0200
commitc77bc8aca2768646ad99da44740c9fca7b915cb2 (patch)
tree20f798c252ace6cd643a48361a95570dd5ec621b
parent947f36d56e57eb86111d28a2e5a07dcb8fa4498b (diff)
[3D] make "mono/2D" a default playback mode instead of a preferred stereo mode (it's no real stereomode)
Also removes the mode "none" from the list of preferred modes, and moves it to the playback modes.
-rwxr-xr-xlanguage/English/strings.po2
-rw-r--r--system/settings/settings.xml5
-rw-r--r--xbmc/guilib/StereoscopicsManager.cpp15
-rw-r--r--xbmc/guilib/StereoscopicsManager.h3
-rw-r--r--xbmc/settings/DisplaySettings.cpp28
-rw-r--r--xbmc/settings/Settings.cpp1
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 &current, 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 &current, 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();