mirror of
https://github.com/LibreELEC/LibreELEC.tv.git
synced 2025-08-02 07:27:49 +00:00
RPi4: add kodi gbm patches from popcornmix
picked from https://github.com/popcornmix/xbmc/tree/gbm Signed-off-by: Matthias Reichl <hias@horus.com>
This commit is contained in:
parent
97d60dea05
commit
c6a853757b
@ -0,0 +1,27 @@
|
|||||||
|
From aeba1b05a001de407ed1618ec6b8b2e961879cde Mon Sep 17 00:00:00 2001
|
||||||
|
From: popcornmix <popcornmix@gmail.com>
|
||||||
|
Date: Thu, 12 Mar 2020 18:05:20 +0000
|
||||||
|
Subject: [PATCH 4/8] DVDVideoCodecDRMPRIME: Increase thread count for hevc
|
||||||
|
|
||||||
|
rpi-vid hevc decoder works best with 3 threads
|
||||||
|
---
|
||||||
|
.../VideoPlayer/DVDCodecs/Video/DVDVideoCodecDRMPRIME.cpp | 3 +++
|
||||||
|
1 file changed, 3 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecDRMPRIME.cpp b/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecDRMPRIME.cpp
|
||||||
|
index ba3c93d89d..f892b1140d 100644
|
||||||
|
--- a/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecDRMPRIME.cpp
|
||||||
|
+++ b/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecDRMPRIME.cpp
|
||||||
|
@@ -253,6 +253,9 @@ bool CDVDVideoCodecDRMPRIME::Open(CDVDStreamInfo& hints, CDVDCodecOptions& optio
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
+ // rpi-vid hevc decoder works best with 3 threads
|
||||||
|
+ if (pCodec->id == AV_CODEC_ID_HEVC)
|
||||||
|
+ m_pCodecContext->thread_count = 3;
|
||||||
|
|
||||||
|
m_pCodecContext->pix_fmt = AV_PIX_FMT_DRM_PRIME;
|
||||||
|
m_pCodecContext->opaque = static_cast<void*>(this);
|
||||||
|
--
|
||||||
|
2.20.1
|
||||||
|
|
@ -0,0 +1,104 @@
|
|||||||
|
From 63c6707ac488e5bb61da045845cf533f39899dbf Mon Sep 17 00:00:00 2001
|
||||||
|
From: popcornmix <popcornmix@gmail.com>
|
||||||
|
Date: Fri, 27 Mar 2020 15:14:11 +0000
|
||||||
|
Subject: [PATCH 6/8] VideoPlayer: Add setting to disable non-hevc accel
|
||||||
|
|
||||||
|
---
|
||||||
|
addons/resource.language.en_gb/resources/strings.po | 10 ++++++++++
|
||||||
|
system/settings/gbm.xml | 6 ++++++
|
||||||
|
.../DVDCodecs/Video/DVDVideoCodecDRMPRIME.cpp | 7 +++++++
|
||||||
|
xbmc/settings/Settings.cpp | 2 ++
|
||||||
|
xbmc/settings/Settings.h | 1 +
|
||||||
|
5 files changed, 26 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/addons/resource.language.en_gb/resources/strings.po b/addons/resource.language.en_gb/resources/strings.po
|
||||||
|
index 35706f9f07..2ae4e31231 100644
|
||||||
|
--- a/addons/resource.language.en_gb/resources/strings.po
|
||||||
|
+++ b/addons/resource.language.en_gb/resources/strings.po
|
||||||
|
@@ -7275,6 +7275,16 @@ msgctxt "#13467"
|
||||||
|
msgid "Unlimited / 1080 (>30Hz)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
+#: system/settings/settings.xml
|
||||||
|
+msgctxt "#13500"
|
||||||
|
+msgid "Only allow acceleration for HEVC"
|
||||||
|
+msgstr ""
|
||||||
|
+
|
||||||
|
+#: system/settings/settings.xml
|
||||||
|
+msgctxt "#13501"
|
||||||
|
+msgid "This option disables acceleration for other codecs as they don't currently support seeking with V4L2"
|
||||||
|
+msgstr ""
|
||||||
|
+
|
||||||
|
#empty strings from id 13468 to 13504
|
||||||
|
|
||||||
|
#: system/settings/settings.xml
|
||||||
|
diff --git a/system/settings/gbm.xml b/system/settings/gbm.xml
|
||||||
|
index cdc6c2b284..fa6a14d4c6 100644
|
||||||
|
--- a/system/settings/gbm.xml
|
||||||
|
+++ b/system/settings/gbm.xml
|
||||||
|
@@ -26,6 +26,12 @@
|
||||||
|
<default>true</default>
|
||||||
|
<control type="toggle" />
|
||||||
|
</setting>
|
||||||
|
+ <setting id="videoplayer.disablenonhevc" type="boolean" label="13500" help="13501">
|
||||||
|
+ <visible>true</visible>
|
||||||
|
+ <level>2</level>
|
||||||
|
+ <default>true</default>
|
||||||
|
+ <control type="toggle" />
|
||||||
|
+ </setting>
|
||||||
|
<setting id="videoplayer.useprimerenderer" type="integer" label="13462" help="13463">
|
||||||
|
<visible>false</visible>
|
||||||
|
<level>2</level>
|
||||||
|
diff --git a/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecDRMPRIME.cpp b/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecDRMPRIME.cpp
|
||||||
|
index f892b1140d..d25c64012c 100644
|
||||||
|
--- a/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecDRMPRIME.cpp
|
||||||
|
+++ b/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecDRMPRIME.cpp
|
||||||
|
@@ -221,6 +221,13 @@ int CDVDVideoCodecDRMPRIME::GetBuffer(struct AVCodecContext* avctx, AVFrame* fra
|
||||||
|
|
||||||
|
bool CDVDVideoCodecDRMPRIME::Open(CDVDStreamInfo& hints, CDVDCodecOptions& options)
|
||||||
|
{
|
||||||
|
+ if (CServiceBroker::GetSettingsComponent()->GetSettings()->GetBool(CSettings::SETTING_VIDEOPLAYER_DISABLE_NON_HEVC) && hints.codec != AV_CODEC_ID_HEVC)
|
||||||
|
+ {
|
||||||
|
+ CLog::Log(LOGNOTICE, "CDVDVideoCodecDRMPRIME::{} - codec {} disallowed",
|
||||||
|
+ __FUNCTION__, hints.codec);
|
||||||
|
+ return false;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
const AVCodec* pCodec = FindDecoder(hints);
|
||||||
|
if (!pCodec)
|
||||||
|
{
|
||||||
|
diff --git a/xbmc/settings/Settings.cpp b/xbmc/settings/Settings.cpp
|
||||||
|
index 67e87a53e5..2d91880849 100644
|
||||||
|
--- a/xbmc/settings/Settings.cpp
|
||||||
|
+++ b/xbmc/settings/Settings.cpp
|
||||||
|
@@ -135,6 +135,7 @@ const std::string CSettings::SETTING_VIDEOPLAYER_RENDERMETHOD = "videoplayer.ren
|
||||||
|
const std::string CSettings::SETTING_VIDEOPLAYER_HQSCALERS = "videoplayer.hqscalers";
|
||||||
|
const std::string CSettings::SETTING_VIDEOPLAYER_USEMEDIACODEC = "videoplayer.usemediacodec";
|
||||||
|
const std::string CSettings::SETTING_VIDEOPLAYER_USEMEDIACODECSURFACE = "videoplayer.usemediacodecsurface";
|
||||||
|
+const std::string CSettings::SETTING_VIDEOPLAYER_DISABLE_NON_HEVC = "videoplayer.disablenonhevc";
|
||||||
|
const std::string CSettings::SETTING_VIDEOPLAYER_USEVDPAU = "videoplayer.usevdpau";
|
||||||
|
const std::string CSettings::SETTING_VIDEOPLAYER_USEVDPAUMIXER = "videoplayer.usevdpaumixer";
|
||||||
|
const std::string CSettings::SETTING_VIDEOPLAYER_USEVDPAUMPEG2 = "videoplayer.usevdpaumpeg2";
|
||||||
|
@@ -954,6 +955,7 @@ void CSettings::InitializeISettingCallbacks()
|
||||||
|
settingSet.insert(CSettings::SETTING_VIDEOSCREEN_TESTPATTERN);
|
||||||
|
settingSet.insert(CSettings::SETTING_VIDEOPLAYER_USEMEDIACODEC);
|
||||||
|
settingSet.insert(CSettings::SETTING_VIDEOPLAYER_USEMEDIACODECSURFACE);
|
||||||
|
+ settingSet.insert(CSettings::SETTING_VIDEOPLAYER_DISABLE_NON_HEVC);
|
||||||
|
settingSet.insert(CSettings::SETTING_AUDIOOUTPUT_VOLUMESTEPS);
|
||||||
|
settingSet.insert(CSettings::SETTING_SOURCE_VIDEOS);
|
||||||
|
settingSet.insert(CSettings::SETTING_SOURCE_MUSIC);
|
||||||
|
diff --git a/xbmc/settings/Settings.h b/xbmc/settings/Settings.h
|
||||||
|
index 7280587324..3dbaeeb234 100644
|
||||||
|
--- a/xbmc/settings/Settings.h
|
||||||
|
+++ b/xbmc/settings/Settings.h
|
||||||
|
@@ -100,6 +100,7 @@ public:
|
||||||
|
static const std::string SETTING_VIDEOPLAYER_HQSCALERS;
|
||||||
|
static const std::string SETTING_VIDEOPLAYER_USEMEDIACODEC;
|
||||||
|
static const std::string SETTING_VIDEOPLAYER_USEMEDIACODECSURFACE;
|
||||||
|
+ static const std::string SETTING_VIDEOPLAYER_DISABLE_NON_HEVC;
|
||||||
|
static const std::string SETTING_VIDEOPLAYER_USEVDPAU;
|
||||||
|
static const std::string SETTING_VIDEOPLAYER_USEVDPAUMIXER;
|
||||||
|
static const std::string SETTING_VIDEOPLAYER_USEVDPAUMPEG2;
|
||||||
|
--
|
||||||
|
2.20.1
|
||||||
|
|
@ -0,0 +1,49 @@
|
|||||||
|
From 48b41250d45c98ca19c8684bc5cdf4cde208c814 Mon Sep 17 00:00:00 2001
|
||||||
|
From: popcornmix <popcornmix@gmail.com>
|
||||||
|
Date: Wed, 8 Apr 2020 11:19:22 +0100
|
||||||
|
Subject: [PATCH 7/8] pi4: hack: Try to hide pixel wrap issue
|
||||||
|
|
||||||
|
---
|
||||||
|
.../VideoRenderers/HwDecRender/VideoLayerBridgeDRMPRIME.cpp | 4 ++--
|
||||||
|
xbmc/windowing/gbm/DRMAtomic.cpp | 4 ++--
|
||||||
|
2 files changed, 4 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/xbmc/cores/VideoPlayer/VideoRenderers/HwDecRender/VideoLayerBridgeDRMPRIME.cpp b/xbmc/cores/VideoPlayer/VideoRenderers/HwDecRender/VideoLayerBridgeDRMPRIME.cpp
|
||||||
|
index bcb4badb9b..4aa0230460 100644
|
||||||
|
--- a/xbmc/cores/VideoPlayer/VideoRenderers/HwDecRender/VideoLayerBridgeDRMPRIME.cpp
|
||||||
|
+++ b/xbmc/cores/VideoPlayer/VideoRenderers/HwDecRender/VideoLayerBridgeDRMPRIME.cpp
|
||||||
|
@@ -238,11 +238,11 @@ void CVideoLayerBridgeDRMPRIME::SetVideoPlane(CVideoBufferDRMPRIME* buffer, cons
|
||||||
|
m_DRM->AddProperty(plane, "CRTC_ID", m_DRM->GetCrtc()->crtc->crtc_id);
|
||||||
|
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", (buffer->GetWidth()-2) << 16);
|
||||||
|
m_DRM->AddProperty(plane, "SRC_H", buffer->GetHeight() << 16);
|
||||||
|
m_DRM->AddProperty(plane, "CRTC_X", static_cast<int32_t>(destRect.x1) & ~1);
|
||||||
|
m_DRM->AddProperty(plane, "CRTC_Y", static_cast<int32_t>(destRect.y1) & ~1);
|
||||||
|
- m_DRM->AddProperty(plane, "CRTC_W", (static_cast<uint32_t>(destRect.Width()) + 1) & ~1);
|
||||||
|
+ m_DRM->AddProperty(plane, "CRTC_W", (static_cast<uint32_t>(destRect.Width()) + 1) & ~1)-2;
|
||||||
|
m_DRM->AddProperty(plane, "CRTC_H", (static_cast<uint32_t>(destRect.Height()) + 1) & ~1);
|
||||||
|
}
|
||||||
|
|
||||||
|
diff --git a/xbmc/windowing/gbm/DRMAtomic.cpp b/xbmc/windowing/gbm/DRMAtomic.cpp
|
||||||
|
index 092ad3fc18..178705236c 100644
|
||||||
|
--- a/xbmc/windowing/gbm/DRMAtomic.cpp
|
||||||
|
+++ b/xbmc/windowing/gbm/DRMAtomic.cpp
|
||||||
|
@@ -69,11 +69,11 @@ void CDRMAtomic::DrmAtomicCommit(int fb_id, int flags, bool rendered, bool video
|
||||||
|
AddProperty(m_gui_plane, "CRTC_ID", m_crtc->crtc->crtc_id);
|
||||||
|
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", (m_width-2) << 16);
|
||||||
|
AddProperty(m_gui_plane, "SRC_H", m_height << 16);
|
||||||
|
AddProperty(m_gui_plane, "CRTC_X", 0);
|
||||||
|
AddProperty(m_gui_plane, "CRTC_Y", 0);
|
||||||
|
- AddProperty(m_gui_plane, "CRTC_W", m_mode->hdisplay);
|
||||||
|
+ AddProperty(m_gui_plane, "CRTC_W", m_mode->hdisplay-2);
|
||||||
|
AddProperty(m_gui_plane, "CRTC_H", m_mode->vdisplay);
|
||||||
|
}
|
||||||
|
else if (videoLayer && !CServiceBroker::GetGUI()->GetWindowManager().HasVisibleControls())
|
||||||
|
--
|
||||||
|
2.20.1
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user