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