diff --git a/xbmc/cores/VideoPlayer/VideoRenderers/HwDecRender/VideoLayerBridgeDRMPRIME.cpp b/xbmc/cores/VideoPlayer/VideoRenderers/HwDecRender/VideoLayerBridgeDRMPRIME.cpp index c78636b680043..ee3bde3bfde55 100644 --- a/xbmc/cores/VideoPlayer/VideoRenderers/HwDecRender/VideoLayerBridgeDRMPRIME.cpp +++ b/xbmc/cores/VideoPlayer/VideoRenderers/HwDecRender/VideoLayerBridgeDRMPRIME.cpp @@ -264,13 +264,20 @@ void CVideoLayerBridgeDRMPRIME::SetVideoPlane(CVideoBufferDRMPRIME* buffer, cons auto plane = m_DRM->GetVideoPlane(); m_DRM->AddProperty(plane, "FB_ID", buffer->m_fb_id); m_DRM->AddProperty(plane, "CRTC_ID", m_DRM->GetCrtc()->GetCrtcId()); + + uint32_t srcw = buffer->GetWidth() << 16; + uint32_t dstw = static_cast(destRect.Width()); + double scalex = (double)srcw / (double)dstw; + dstw -= 2; + srcw = (uint32_t)(srcw - 2.0 * scalex + 0.5); + m_DRM->AddProperty(plane, "SRC_X", 0); m_DRM->AddProperty(plane, "SRC_Y", 0); - m_DRM->AddProperty(plane, "SRC_W", buffer->GetWidth() << 16); + m_DRM->AddProperty(plane, "SRC_W", srcw); m_DRM->AddProperty(plane, "SRC_H", buffer->GetHeight() << 16); m_DRM->AddProperty(plane, "CRTC_X", static_cast(destRect.x1) & ~1); m_DRM->AddProperty(plane, "CRTC_Y", static_cast(destRect.y1) & ~1); - m_DRM->AddProperty(plane, "CRTC_W", (static_cast(destRect.Width()) + 1) & ~1); + m_DRM->AddProperty(plane, "CRTC_W", (dstw + 1) & ~1); m_DRM->AddProperty(plane, "CRTC_H", (static_cast(destRect.Height()) + 1) & ~1); } diff --git a/xbmc/windowing/gbm/drm/DRMAtomic.cpp b/xbmc/windowing/gbm/drm/DRMAtomic.cpp index 37166b8dcddca..803f22be831cd 100644 --- a/xbmc/windowing/gbm/drm/DRMAtomic.cpp +++ b/xbmc/windowing/gbm/drm/DRMAtomic.cpp @@ -92,13 +92,19 @@ void CDRMAtomic::DrmAtomicCommit(int fb_id, int flags, bool rendered, bool video return; } + uint32_t srcw = m_width << 16; + uint32_t dstw = m_mode->hdisplay; + double scalex = (double)srcw / (double)dstw; + dstw -= 2; + srcw = (uint32_t)(srcw - 2.0 * scalex + 0.5); + if (rendered) { AddProperty(m_gui_plane, "FB_ID", fb_id); AddProperty(m_gui_plane, "CRTC_ID", m_crtc->GetCrtcId()); AddProperty(m_gui_plane, "SRC_X", 0); AddProperty(m_gui_plane, "SRC_Y", 0); - AddProperty(m_gui_plane, "SRC_W", m_width << 16); + AddProperty(m_gui_plane, "SRC_W", srcw); AddProperty(m_gui_plane, "SRC_H", m_height << 16); AddProperty(m_gui_plane, "CRTC_X", 0); AddProperty(m_gui_plane, "CRTC_Y", 0); @@ -109,7 +115,7 @@ void CDRMAtomic::DrmAtomicCommit(int fb_id, int flags, bool rendered, bool video // } // else { - AddProperty(m_gui_plane, "CRTC_W", m_mode->hdisplay); + AddProperty(m_gui_plane, "CRTC_W", dstw); AddProperty(m_gui_plane, "CRTC_H", m_mode->vdisplay); }