void CBaseRenderer::ManageDisplay() { m_viewRect = g_graphicsContext.GetViewWindow(); m_sourceRect.x1 = 0.0f; m_sourceRect.y1 = 0.0f; m_sourceRect.x2 = (float)m_sourceWidth; m_sourceRect.y2 = (float)m_sourceHeight; unsigned int stereo_mode = CONF_FLAGS_STEREO_MODE_MASK(m_iFlags); int stereo_view = g_graphicsContext.GetStereoView(); if(CONF_FLAGS_STEREO_CADENCE(m_iFlags) == CONF_FLAGS_STEREO_CADANCE_RIGHT_LEFT) { if (stereo_view == RENDER_STEREO_VIEW_LEFT) stereo_view = RENDER_STEREO_VIEW_RIGHT; else if(stereo_view == RENDER_STEREO_VIEW_RIGHT) stereo_view = RENDER_STEREO_VIEW_LEFT; } switch(stereo_mode) { case CONF_FLAGS_STEREO_MODE_TAB: // Those are flipped in y if (m_format == RENDER_FMT_CVBREF || m_format == RENDER_FMT_MEDIACODEC) { if (stereo_view == RENDER_STEREO_VIEW_LEFT) m_sourceRect.y1 += m_sourceRect.y2*0.5f; else if(stereo_view == RENDER_STEREO_VIEW_RIGHT) m_sourceRect.y2 *= 0.5f; } else { if (stereo_view == RENDER_STEREO_VIEW_LEFT) m_sourceRect.y2 *= 0.5f; else if(stereo_view == RENDER_STEREO_VIEW_RIGHT) m_sourceRect.y1 += m_sourceRect.y2*0.5f; } break; case CONF_FLAGS_STEREO_MODE_SBS: if (stereo_view == RENDER_STEREO_VIEW_LEFT) m_sourceRect.x2 *= 0.5f; else if(stereo_view == RENDER_STEREO_VIEW_RIGHT) m_sourceRect.x1 += m_sourceRect.x2*0.5f; break; default: break; } CalcNormalDisplayRect(m_viewRect.x1, m_viewRect.y1, m_viewRect.Width(), m_viewRect.Height(), GetAspectRatio() * CDisplaySettings::GetInstance().GetPixelRatio(), CDisplaySettings::GetInstance().GetZoomAmount(), CDisplaySettings::GetInstance().GetVerticalShift()); }
void CRendererMediaCodecSurface::RenderUpdate(int index, int index2, bool clear, unsigned int flags, unsigned int alpha) { m_bConfigured = true; // this hack is needed to get the 2D mode of a 3D movie going RENDER_STEREO_MODE stereo_mode = CServiceBroker::GetWinSystem()->GetGfxContext().GetStereoMode(); if (stereo_mode) CServiceBroker::GetWinSystem()->GetGfxContext().SetStereoView(RENDER_STEREO_VIEW_LEFT); ManageRenderArea(); if (stereo_mode) CServiceBroker::GetWinSystem()->GetGfxContext().SetStereoView(RENDER_STEREO_VIEW_OFF); m_surfDestRect = m_destRect; switch (stereo_mode) { case RENDER_STEREO_MODE_SPLIT_HORIZONTAL: m_surfDestRect.y2 *= 2.0; break; case RENDER_STEREO_MODE_SPLIT_VERTICAL: m_surfDestRect.x2 *= 2.0; break; case RENDER_STEREO_MODE_MONO: if (CONF_FLAGS_STEREO_MODE_MASK(m_iFlags) == CONF_FLAGS_STEREO_MODE_TAB) m_surfDestRect.y2 = m_surfDestRect.y2 * 2.0; else m_surfDestRect.x2 = m_surfDestRect.x2 * 2.0; break; default: break; } if (index != m_lastIndex) { ReleaseVideoBuffer(index, true); m_lastIndex = index; } }