void CComboRenderer::ManageDisplay() { const RECT& rv = g_graphicsContext.GetViewWindow(); float fScreenWidth = (float)rv.right - rv.left; float fScreenHeight = (float)rv.bottom - rv.top; float fOffsetX1 = (float)rv.left; float fOffsetY1 = (float)rv.top; float fPixelRatio = CDisplaySettings::Get().GetPixelRatio(); float fMaxScreenWidth = (float)CDisplaySettings::Get().GetResolutionInfo(g_graphicsContext.GetVideoResolution()).iWidth; float fMaxScreenHeight = (float)CDisplaySettings::Get().GetResolutionInfo(g_graphicsContext.GetVideoResolution()).iHeight; if (fOffsetX1 < 0) fOffsetX1 = 0; if (fOffsetY1 < 0) fOffsetY1 = 0; if (fScreenWidth + fOffsetX1 > fMaxScreenWidth) fScreenWidth = fMaxScreenWidth - fOffsetX1; if (fScreenHeight + fOffsetY1 > fMaxScreenHeight) fScreenHeight = fMaxScreenHeight - fOffsetY1; // Correct for HDTV_1080i -> 540p if (GetResolution() == HDTV_1080i) { fOffsetY1 /= 2; fScreenHeight /= 2; fPixelRatio *= 2; } // source rect rs.left = CMediaSettings::Get().GetCurrentVideoSettings().m_CropLeft; rs.top = CMediaSettings::Get().GetCurrentVideoSettings().m_CropTop; rs.right = m_iSourceWidth - CMediaSettings::Get().GetCurrentVideoSettings().m_CropRight; rs.bottom = m_iSourceHeight - CMediaSettings::Get().GetCurrentVideoSettings().m_CropBottom; CalcNormalDisplayRect(fOffsetX1, fOffsetY1, fScreenWidth, fScreenHeight, GetAspectRatio() * fPixelRatio, CDisplaySettings::Get().GetZoomAmount()); // check whether we need to alter our source rect if (rd.left < fOffsetX1 || rd.right > fOffsetX1 + fScreenWidth) { // wants to be wider than we allow, so fix float fRequiredWidth = (float)rd.right - rd.left; if (rs.right <= rs.left) rs.right = rs.left+1; float fHorizScale = fRequiredWidth / (float)(rs.right - rs.left); float fNewWidth = fScreenWidth / fHorizScale; rs.left = (rs.right - rs.left - (int)fNewWidth) / 2; rs.right = rs.left + (int)fNewWidth; rd.left = (int)fOffsetX1; rd.right = (int)(fOffsetX1 + fScreenWidth); } if (rd.top < fOffsetY1 || rd.bottom > fOffsetY1 + fScreenHeight) { // wants to be wider than we allow, so fix float fRequiredHeight = (float)rd.bottom - rd.top; if (rs.bottom <= rs.top) rs.bottom = rs.top+1; float fVertScale = fRequiredHeight / (float)(rs.bottom - rs.top); float fNewHeight = fScreenHeight / fVertScale; rs.top = (rs.bottom - rs.top - (int)fNewHeight) / 2; rs.bottom = rs.top + (int)fNewHeight; rd.top = (int)fOffsetY1; rd.bottom = (int)(fOffsetY1 + fScreenHeight); } }
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 CLinuxRenderer::ManageDisplay() { const RECT& rv = g_graphicsContext.GetViewWindow(); float fScreenWidth = (float)rv.right - rv.left; float fScreenHeight = (float)rv.bottom - rv.top; float fOffsetX1 = (float)rv.left; float fOffsetY1 = (float)rv.top; // source rect rs.left = g_stSettings.m_currentVideoSettings.m_CropLeft; rs.top = g_stSettings.m_currentVideoSettings.m_CropTop; rs.right = m_iSourceWidth - g_stSettings.m_currentVideoSettings.m_CropRight; rs.bottom = m_iSourceHeight - g_stSettings.m_currentVideoSettings.m_CropBottom; CalcNormalDisplayRect(fOffsetX1, fOffsetY1, fScreenWidth, fScreenHeight, GetAspectRatio() * g_stSettings.m_fPixelRatio, g_stSettings.m_fZoomAmount); }