mirror of
https://github.com/LibreELEC/LibreELEC.tv.git
synced 2025-07-31 14:37:59 +00:00
Merge pull request #5703 from HiassofT/le10-drmprime-coords
[le10] kodi: fix subtitles not shown on GBM if GUI limit is active
This commit is contained in:
commit
00f42d2054
@ -0,0 +1,159 @@
|
||||
From 720e16d2ced226465f511250c535b66d61e6d2b9 Mon Sep 17 00:00:00 2001
|
||||
From: Matthias Reichl <hias@horus.com>
|
||||
Date: Wed, 29 Sep 2021 23:50:42 +0200
|
||||
Subject: [PATCH 1/2] CBaseRenderer: factor out destRect calculation
|
||||
|
||||
Also change C-style to static_cast
|
||||
|
||||
Signed-off-by: Matthias Reichl <hias@horus.com>
|
||||
---
|
||||
.../VideoRenderers/BaseRenderer.cpp | 36 +++++++++++++++----
|
||||
.../VideoPlayer/VideoRenderers/BaseRenderer.h | 8 +++++
|
||||
2 files changed, 37 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/xbmc/cores/VideoPlayer/VideoRenderers/BaseRenderer.cpp b/xbmc/cores/VideoPlayer/VideoRenderers/BaseRenderer.cpp
|
||||
index 8c78f1beac..2ee48c0273 100644
|
||||
--- a/xbmc/cores/VideoPlayer/VideoRenderers/BaseRenderer.cpp
|
||||
+++ b/xbmc/cores/VideoPlayer/VideoRenderers/BaseRenderer.cpp
|
||||
@@ -104,13 +104,19 @@ void CBaseRenderer::restoreRotatedCoords()
|
||||
m_rotatedDestCoords[i] = m_savedRotatedDestCoords[i];
|
||||
}
|
||||
|
||||
-void CBaseRenderer::CalcNormalRenderRect(float offsetX, float offsetY, float width, float height,
|
||||
- float inputFrameRatio, float zoomAmount, float verticalShift)
|
||||
+void CBaseRenderer::CalcDestRect(float offsetX,
|
||||
+ float offsetY,
|
||||
+ float width,
|
||||
+ float height,
|
||||
+ float inputFrameRatio,
|
||||
+ float zoomAmount,
|
||||
+ float verticalShift,
|
||||
+ CRect& destRect)
|
||||
{
|
||||
// if view window is empty, set empty destination
|
||||
if (height == 0 || width == 0)
|
||||
{
|
||||
- m_destRect.SetRect(0.0f, 0.0f, 0.0f, 0.0f);
|
||||
+ destRect.SetRect(0.0f, 0.0f, 0.0f, 0.0f);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -190,10 +196,26 @@ void CBaseRenderer::CalcNormalRenderRect(float offsetX, float offsetY, float wid
|
||||
else if (verticalShift < -1.0f)
|
||||
posY += shiftRange * (verticalShift + 1.0f);
|
||||
|
||||
- m_destRect.x1 = (float)MathUtils::round_int(posX + offsetX);
|
||||
- m_destRect.x2 = m_destRect.x1 + MathUtils::round_int(newWidth);
|
||||
- m_destRect.y1 = (float)MathUtils::round_int(posY + offsetY);
|
||||
- m_destRect.y2 = m_destRect.y1 + MathUtils::round_int(newHeight);
|
||||
+ destRect.x1 = static_cast<float>(MathUtils::round_int(static_cast<double>(posX + offsetX)));
|
||||
+ destRect.x2 = destRect.x1 + MathUtils::round_int(static_cast<double>(newWidth));
|
||||
+ destRect.y1 = static_cast<float>(MathUtils::round_int(static_cast<double>(posY + offsetY)));
|
||||
+ destRect.y2 = destRect.y1 + MathUtils::round_int(static_cast<double>(newHeight));
|
||||
+}
|
||||
+
|
||||
+void CBaseRenderer::CalcNormalRenderRect(float offsetX,
|
||||
+ float offsetY,
|
||||
+ float width,
|
||||
+ float height,
|
||||
+ float inputFrameRatio,
|
||||
+ float zoomAmount,
|
||||
+ float verticalShift)
|
||||
+{
|
||||
+ CalcDestRect(offsetX, offsetY, width, height, inputFrameRatio, zoomAmount, verticalShift,
|
||||
+ m_destRect);
|
||||
+
|
||||
+ // bail out if view window is empty
|
||||
+ if (height == 0 || width == 0)
|
||||
+ return;
|
||||
|
||||
// clip as needed
|
||||
if (!(CServiceBroker::GetWinSystem()->GetGfxContext().IsFullScreenVideo() || CServiceBroker::GetWinSystem()->GetGfxContext().IsCalibrating()))
|
||||
diff --git a/xbmc/cores/VideoPlayer/VideoRenderers/BaseRenderer.h b/xbmc/cores/VideoPlayer/VideoRenderers/BaseRenderer.h
|
||||
index 6f3c605028..2ac35881ec 100644
|
||||
--- a/xbmc/cores/VideoPlayer/VideoRenderers/BaseRenderer.h
|
||||
+++ b/xbmc/cores/VideoPlayer/VideoRenderers/BaseRenderer.h
|
||||
@@ -97,6 +97,14 @@ public:
|
||||
virtual DEBUG_INFO_VIDEO GetDebugInfo(int idx) { return {}; };
|
||||
|
||||
protected:
|
||||
+ void CalcDestRect(float offsetX,
|
||||
+ float offsetY,
|
||||
+ float width,
|
||||
+ float height,
|
||||
+ float inputFrameRatio,
|
||||
+ float zoomAmount,
|
||||
+ float verticalShift,
|
||||
+ CRect& destRect);
|
||||
void CalcNormalRenderRect(float offsetX, float offsetY, float width, float height,
|
||||
float inputFrameRatio, float zoomAmount, float verticalShift);
|
||||
void CalculateFrameAspectRatio(unsigned int desired_width, unsigned int desired_height);
|
||||
--
|
||||
2.30.2
|
||||
|
||||
|
||||
From f0b441898056cb2e04bd891ec7cec6f3fd8b63dd Mon Sep 17 00:00:00 2001
|
||||
From: Matthias Reichl <hias@horus.com>
|
||||
Date: Wed, 29 Sep 2021 23:53:36 +0200
|
||||
Subject: [PATCH 2/2] RendererDRMPRIME: keep plane coords of video render area
|
||||
private
|
||||
|
||||
Store plane coordinates of render area in a separate, private member
|
||||
instead of re-using m_destRect so that m_destRect is again guaranteed
|
||||
to be within m_viewRect.
|
||||
|
||||
Fixes: 9cfa99f "RendererDRMPRIME: use screen size when calculating render area"
|
||||
|
||||
Signed-off-by: Matthias Reichl <hias@horus.com>
|
||||
---
|
||||
.../HwDecRender/RendererDRMPRIME.cpp | 14 +++++++++-----
|
||||
.../VideoRenderers/HwDecRender/RendererDRMPRIME.h | 1 +
|
||||
2 files changed, 10 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/xbmc/cores/VideoPlayer/VideoRenderers/HwDecRender/RendererDRMPRIME.cpp b/xbmc/cores/VideoPlayer/VideoRenderers/HwDecRender/RendererDRMPRIME.cpp
|
||||
index 3618b7e421..36e4093cbe 100644
|
||||
--- a/xbmc/cores/VideoPlayer/VideoRenderers/HwDecRender/RendererDRMPRIME.cpp
|
||||
+++ b/xbmc/cores/VideoPlayer/VideoRenderers/HwDecRender/RendererDRMPRIME.cpp
|
||||
@@ -124,10 +124,14 @@ void CRendererDRMPRIME::ManageRenderArea()
|
||||
RESOLUTION_INFO info = CServiceBroker::GetWinSystem()->GetGfxContext().GetResInfo();
|
||||
if (info.iScreenWidth != info.iWidth)
|
||||
{
|
||||
- CalcNormalRenderRect(0, 0, info.iScreenWidth, info.iScreenHeight,
|
||||
- GetAspectRatio() * CDisplaySettings::GetInstance().GetPixelRatio(),
|
||||
- CDisplaySettings::GetInstance().GetZoomAmount(),
|
||||
- CDisplaySettings::GetInstance().GetVerticalShift());
|
||||
+ CalcDestRect(0, 0, info.iScreenWidth, info.iScreenHeight,
|
||||
+ GetAspectRatio() * CDisplaySettings::GetInstance().GetPixelRatio(),
|
||||
+ CDisplaySettings::GetInstance().GetZoomAmount(),
|
||||
+ CDisplaySettings::GetInstance().GetVerticalShift(), m_planeDestRect);
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ m_planeDestRect = m_destRect;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -217,7 +221,7 @@ void CRendererDRMPRIME::RenderUpdate(
|
||||
if (m_iLastRenderBuffer == -1)
|
||||
m_videoLayerBridge->Configure(buffer);
|
||||
|
||||
- m_videoLayerBridge->SetVideoPlane(buffer, m_destRect);
|
||||
+ m_videoLayerBridge->SetVideoPlane(buffer, m_planeDestRect);
|
||||
|
||||
m_iLastRenderBuffer = index;
|
||||
}
|
||||
diff --git a/xbmc/cores/VideoPlayer/VideoRenderers/HwDecRender/RendererDRMPRIME.h b/xbmc/cores/VideoPlayer/VideoRenderers/HwDecRender/RendererDRMPRIME.h
|
||||
index de17869d43..33eb39ae11 100644
|
||||
--- a/xbmc/cores/VideoPlayer/VideoRenderers/HwDecRender/RendererDRMPRIME.h
|
||||
+++ b/xbmc/cores/VideoPlayer/VideoRenderers/HwDecRender/RendererDRMPRIME.h
|
||||
@@ -50,6 +50,7 @@ protected:
|
||||
private:
|
||||
bool m_bConfigured = false;
|
||||
int m_iLastRenderBuffer = -1;
|
||||
+ CRect m_planeDestRect;
|
||||
|
||||
std::shared_ptr<CVideoLayerBridgeDRMPRIME> m_videoLayerBridge;
|
||||
|
||||
--
|
||||
2.30.2
|
||||
|
Loading…
x
Reference in New Issue
Block a user