bool CStereoscopicsManager::OnAction(const CAction &action) { RENDER_STEREO_MODE mode = GetStereoMode(); if (action.GetID() == ACTION_STEREOMODE_NEXT) { SetStereoMode(GetNextSupportedStereoMode(mode)); return true; } else if (action.GetID() == ACTION_STEREOMODE_PREVIOUS) { SetStereoMode(GetNextSupportedStereoMode(mode, RENDER_STEREO_MODE_COUNT - 1)); return true; } else if (action.GetID() == ACTION_STEREOMODE_TOGGLE) { if (mode == RENDER_STEREO_MODE_OFF) { RENDER_STEREO_MODE targetMode = m_lastStereoMode; if (targetMode == RENDER_STEREO_MODE_OFF) targetMode = GetPreferredPlaybackMode(); SetStereoMode(targetMode); } else { SetStereoMode(RENDER_STEREO_MODE_OFF); } return true; } else if (action.GetID() == ACTION_STEREOMODE_SELECT) { SetStereoMode(GetStereoModeByUserChoice()); return true; } else if (action.GetID() == ACTION_STEREOMODE_TOMONO) { if (mode == RENDER_STEREO_MODE_MONO) { RENDER_STEREO_MODE targetMode = m_lastStereoMode; if (targetMode == RENDER_STEREO_MODE_OFF) targetMode = GetPreferredPlaybackMode(); SetStereoMode(targetMode); } else { SetStereoMode(RENDER_STEREO_MODE_MONO); } return true; } else if (action.GetID() == ACTION_STEREOMODE_SET) { int stereoMode = ConvertStringToGuiStereoMode(action.GetName()); if (stereoMode > -1) SetStereoMode( (RENDER_STEREO_MODE) stereoMode); return true; } return false; }
void CStereoscopicsManager::OnPlaybackStarted(void) { 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 (!g_infoManager.EvaluateBool("videoplayer.isstereoscopic")) { // exit stereo mode if started item is not stereoscopic // and if user prefers to stop 3D playback when movie is finished if (mode != RENDER_STEREO_MODE_OFF && CSettings::Get().GetBool("videoplayer.quitstereomodeonstop")) SetStereoMode(RENDER_STEREO_MODE_OFF); return; } // if we're not in stereomode yet, restore previously selected stereo mode in case it was user selected if (m_stereoModeSetByUser != RENDER_STEREO_MODE_UNDEFINED) { SetStereoMode(m_stereoModeSetByUser); return; } RENDER_STEREO_MODE preferred = GetPreferredPlaybackMode(); RENDER_STEREO_MODE playing = GetStereoModeOfPlayingVideo(); if (mode != RENDER_STEREO_MODE_OFF) { // don't change mode if user selected to not exit stereomode on playback stop // users selecting this option usually have to manually switch their TV into 3D mode // and would be annoyed by having to switch TV modes when next movies comes up // @todo probably add a new setting for just this behavior if (CSettings::Get().GetBool("videoplayer.quitstereomodeonstop") == false) return; // only change to new stereo mode if not yet in preferred stereo mode if (mode == preferred || (preferred == RENDER_STEREO_MODE_AUTO && mode == playing)) return; } switch (playbackMode) { case STEREOSCOPIC_PLAYBACK_MODE_ASK: // Ask { CApplicationMessenger::Get().MediaPause(); CGUIDialogSelect* pDlgSelect = (CGUIDialogSelect*)g_windowManager.GetWindow(WINDOW_DIALOG_SELECT); pDlgSelect->Reset(); pDlgSelect->SetHeading(CVariant{g_localizeStrings.Get(36527)}); int idx_playing = -1; // add choices int idx_preferred = pDlgSelect->Add(g_localizeStrings.Get(36524) // preferred + " (" + GetLabelForStereoMode(preferred) + ")"); int idx_mono = pDlgSelect->Add(GetLabelForStereoMode(RENDER_STEREO_MODE_MONO)); // mono / 2d if (playing != RENDER_STEREO_MODE_OFF && playing != preferred && preferred != RENDER_STEREO_MODE_AUTO && g_Windowing.SupportsStereo(playing)) // same as movie idx_playing = pDlgSelect->Add(g_localizeStrings.Get(36532) + " (" + GetLabelForStereoMode(playing) + ")"); int idx_select = pDlgSelect->Add( g_localizeStrings.Get(36531) ); // other / select pDlgSelect->Open(); if(pDlgSelect->IsConfirmed()) { int iItem = pDlgSelect->GetSelectedLabel(); if (iItem == idx_preferred) mode = preferred; else if (iItem == idx_mono) mode = RENDER_STEREO_MODE_MONO; else if (iItem == idx_playing) mode = RENDER_STEREO_MODE_AUTO; else if (iItem == idx_select) mode = GetStereoModeByUserChoice(); SetStereoModeByUser( mode ); } CApplicationMessenger::Get().MediaUnPause(); } break; case STEREOSCOPIC_PLAYBACK_MODE_PREFERRED: // Stereoscopic SetStereoMode( preferred ); break; case 2: // Mono SetStereoMode( RENDER_STEREO_MODE_MONO ); break; default: break; } }
bool CStereoscopicsManager::OnAction(const CAction &action) { RENDER_STEREO_MODE mode = GetStereoMode(); if (action.GetID() == ACTION_STEREOMODE_NEXT) { SetStereoModeByUser(GetNextSupportedStereoMode(mode)); return true; } else if (action.GetID() == ACTION_STEREOMODE_PREVIOUS) { SetStereoModeByUser(GetNextSupportedStereoMode(mode, RENDER_STEREO_MODE_COUNT - 1)); return true; } else if (action.GetID() == ACTION_STEREOMODE_TOGGLE) { if (mode == RENDER_STEREO_MODE_OFF) { RENDER_STEREO_MODE targetMode = GetPreferredPlaybackMode(); // if user selected a specific mode before, make sure to // switch back into that mode on toggle. if (m_stereoModeSetByUser != RENDER_STEREO_MODE_UNDEFINED) { // if user mode is set to OFF, he manually turned it off before. In this case use the last user applied mode if (m_stereoModeSetByUser != RENDER_STEREO_MODE_OFF) targetMode = m_stereoModeSetByUser; else if (m_lastStereoModeSetByUser != RENDER_STEREO_MODE_UNDEFINED && m_lastStereoModeSetByUser != RENDER_STEREO_MODE_OFF) targetMode = m_lastStereoModeSetByUser; } SetStereoModeByUser(targetMode); } else { SetStereoModeByUser(RENDER_STEREO_MODE_OFF); } return true; } else if (action.GetID() == ACTION_STEREOMODE_SELECT) { SetStereoModeByUser(GetStereoModeByUserChoice()); return true; } else if (action.GetID() == ACTION_STEREOMODE_TOMONO) { if (mode == RENDER_STEREO_MODE_MONO) { RENDER_STEREO_MODE targetMode = GetPreferredPlaybackMode(); // if we have an old userdefined steremode, use that one as toggle target if (m_stereoModeSetByUser != RENDER_STEREO_MODE_UNDEFINED) { // if user mode is set to OFF, he manually turned it off before. In this case use the last user applied mode if (m_stereoModeSetByUser != RENDER_STEREO_MODE_OFF && m_stereoModeSetByUser != mode) targetMode = m_stereoModeSetByUser; else if (m_lastStereoModeSetByUser != RENDER_STEREO_MODE_UNDEFINED && m_lastStereoModeSetByUser != RENDER_STEREO_MODE_OFF && m_lastStereoModeSetByUser != mode) targetMode = m_lastStereoModeSetByUser; } SetStereoModeByUser(targetMode); } else { SetStereoModeByUser(RENDER_STEREO_MODE_MONO); } return true; } else if (action.GetID() == ACTION_STEREOMODE_SET) { int stereoMode = ConvertStringToGuiStereoMode(action.GetName()); if (stereoMode > -1) SetStereoModeByUser( (RENDER_STEREO_MODE) stereoMode ); return true; } return false; }
void CStereoscopicsManager::OnPlaybackStarted(void) { if (!g_infoManager.EvaluateBool("videoplayer.isstereoscopic")) return; 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; switch (playbackMode) { case STEREOSCOPIC_PLAYBACK_MODE_ASK: // Ask { CApplicationMessenger::Get().MediaPause(); CGUIDialogSelect* pDlgSelect = (CGUIDialogSelect*)g_windowManager.GetWindow(WINDOW_DIALOG_SELECT); pDlgSelect->Reset(); pDlgSelect->SetHeading(g_localizeStrings.Get(36527).c_str()); RENDER_STEREO_MODE preferred = GetPreferredPlaybackMode(); RENDER_STEREO_MODE playing = GetStereoModeOfPlayingVideo(); int idx_playing = -1; // add choices int idx_preferred = pDlgSelect->Add(g_localizeStrings.Get(36524) // preferred + " (" + GetLabelForStereoMode(preferred) + ")"); int idx_mono = pDlgSelect->Add(GetLabelForStereoMode(RENDER_STEREO_MODE_MONO)); // mono / 2d if(playing != RENDER_STEREO_MODE_OFF && playing != preferred && g_Windowing.SupportsStereo(playing)) idx_playing = pDlgSelect->Add(g_localizeStrings.Get(36532) + " (" + GetLabelForStereoMode(playing) + ")"); int idx_select = pDlgSelect->Add( g_localizeStrings.Get(36531) ); // other / select pDlgSelect->DoModal(); if(pDlgSelect->IsConfirmed()) { int iItem = pDlgSelect->GetSelectedLabel(); if (iItem == idx_preferred) mode = preferred; else if (iItem == idx_mono) mode = RENDER_STEREO_MODE_MONO; else if (iItem == idx_playing) mode = playing; else if (iItem == idx_select) mode = GetStereoModeByUserChoice(); SetStereoMode(mode); } CApplicationMessenger::Get().MediaUnPause(); } break; case STEREOSCOPIC_PLAYBACK_MODE_PREFERRED: // Stereoscopic SetStereoMode( GetPreferredPlaybackMode() ); break; case 2: // Mono SetStereoMode( RENDER_STEREO_MODE_MONO ); break; default: break; } }
void CStereoscopicsManager::OnPlaybackStarted(void) { if (!g_infoManager.EvaluateBool("videoplayer.isstereoscopic")) return; // only change stereo mode if not yet in stereo mode RENDER_STEREO_MODE mode = GetStereoMode(); if (mode != RENDER_STEREO_MODE_OFF) return; int playbackMode = CSettings::Get().GetInt("videoplayer.stereoscopicplaybackmode"); switch (playbackMode) { case 0: // Ask { CApplicationMessenger::Get().MediaPause(); CGUIDialogSelect* pDlgSelect = (CGUIDialogSelect*)g_windowManager.GetWindow(WINDOW_DIALOG_SELECT); pDlgSelect->Reset(); pDlgSelect->SetHeading(g_localizeStrings.Get(36527).c_str()); RENDER_STEREO_MODE preferred = GetPreferredPlaybackMode(); RENDER_STEREO_MODE playing = GetStereoModeOfPlayingVideo(); int idx_preferred = -1 , idx_playing = -1 , idx_mono = -1 , idx_select = -1; // add choices idx_preferred = pDlgSelect->Add( g_localizeStrings.Get(36530) + " (" + GetLabelForStereoMode(preferred) + ")"); if(preferred != RENDER_STEREO_MODE_MONO) idx_mono = pDlgSelect->Add( g_localizeStrings.Get(36529) ); // mono / 2d if(playing != RENDER_STEREO_MODE_OFF && g_Windowing.SupportsStereo(playing)) idx_playing = pDlgSelect->Add( g_localizeStrings.Get(36532) + " (" + GetLabelForStereoMode(playing) + ")"); idx_select = pDlgSelect->Add( g_localizeStrings.Get(36531) ); // other / select pDlgSelect->DoModal(); if(pDlgSelect->IsConfirmed()) { int iItem = pDlgSelect->GetSelectedLabel(); if (iItem == idx_preferred) mode = preferred; else if (iItem == idx_mono) mode = RENDER_STEREO_MODE_MONO; else if (iItem == idx_playing) mode = playing; else if (iItem == idx_select) mode = GetStereoModeByUserChoice(); SetStereoMode(mode); } CApplicationMessenger::Get().MediaUnPause(); } break; case 1: // Stereoscopic SetStereoMode( GetPreferredPlaybackMode() ); break; default: break; } }