diff --git a/addons/resource.language.en_gb/resources/strings.po b/addons/resource.language.en_gb/resources/strings.po index 80e144370b419..3e522c942dde7 100644 --- a/addons/resource.language.en_gb/resources/strings.po +++ b/addons/resource.language.en_gb/resources/strings.po @@ -7317,6 +7317,11 @@ msgctxt "#13438" msgid "Allow hardware acceleration with DRM PRIME" msgstr "" +#: system/settings/settings.xml +msgctxt "#13500" +msgid "Allow hardware deinterlace with DRM PRIME" +msgstr "" + #: system/settings/settings.xml msgctxt "#13439" msgid "Allow hardware acceleration - MediaCodec" @@ -19446,6 +19451,12 @@ msgctxt "#36172" msgid "Enable PRIME decoding of video files" msgstr "" +#. Description of setting with label #13500 "Allow hardware deinterlace - PRIME" +#: system/settings/settings.xml +msgctxt "#36290" +msgid "Enable PRIME hardware deinterlace of video files" +msgstr "" + #. Description of setting with label #14109 "Short date format" #: system/settings/settings.xml msgctxt "#36173" diff --git a/system/settings/linux.xml b/system/settings/linux.xml index 531974f3f4af9..c2df62c047769 100644 --- a/system/settings/linux.xml +++ b/system/settings/linux.xml @@ -180,6 +180,18 @@ true + + HAS_GLES + false + + + true + + + 3 + true + + HAS_GLES false diff --git a/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecDRMPRIME.cpp b/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecDRMPRIME.cpp index 8c0d37bf59938..141f08d4fb694 100644 --- a/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecDRMPRIME.cpp +++ b/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecDRMPRIME.cpp @@ -41,6 +41,7 @@ namespace { constexpr const char* SETTING_VIDEOPLAYER_USEPRIMEDECODERFORHW{"videoplayer.useprimedecoderforhw"}; +constexpr const char* SETTING_VIDEOPLAYER_ALLOWHWDEINTERLACE{"videoplayer.primeallowhwdeinterlace"}; static void ReleaseBuffer(void* opaque, uint8_t* data) { @@ -149,6 +150,15 @@ void CDVDVideoCodecDRMPRIME::Register() setting->SetVisible(true); + setting = settings->GetSetting(SETTING_VIDEOPLAYER_ALLOWHWDEINTERLACE); + if (!setting) + { + CLog::Log(LOGERROR, "Failed to load setting for: {}", SETTING_VIDEOPLAYER_ALLOWHWDEINTERLACE); + return; + } + + setting->SetVisible(true); + CDVDFactoryCodec::RegisterHWVideoCodec("drm_prime", CDVDVideoCodecDRMPRIME::Create); } @@ -651,7 +661,11 @@ void CDVDVideoCodecDRMPRIME::FilterTest(AVPixelFormat pix_fmt) m_deintFilterName.clear(); // look twice, first for DRM_PRIME support, then for actual pixel format - for (int i=0; i < 2; i++) + + bool hw = CServiceBroker::GetSettingsComponent()->GetSettings()->GetBool( + SETTING_VIDEOPLAYER_ALLOWHWDEINTERLACE); + + for (int i = hw ? 0 : 1; i < 2; i++) { const AVFilter* filter; void* opaque{}; diff --git a/xbmc/settings/Settings.h b/xbmc/settings/Settings.h index 349a153065852..aabe7a06a879c 100644 --- a/xbmc/settings/Settings.h +++ b/xbmc/settings/Settings.h @@ -118,6 +118,7 @@ class CSettings : public CSettingsBase, public CSettingCreator, public CSettingC static constexpr auto SETTING_VIDEOPLAYER_USEMEDIACODEC = "videoplayer.usemediacodec"; static constexpr auto SETTING_VIDEOPLAYER_USEMEDIACODECSURFACE = "videoplayer.usemediacodecsurface"; + static constexpr auto SETTING_VIDEOPLAYER_ALLOWHWDEINTERLACE = "videoplayer.primeallowhwdeinterlace"; static constexpr auto SETTING_VIDEOPLAYER_USEVDPAU = "videoplayer.usevdpau"; static constexpr auto SETTING_VIDEOPLAYER_USEVDPAUMIXER = "videoplayer.usevdpaumixer"; static constexpr auto SETTING_VIDEOPLAYER_USEVDPAUMPEG2 = "videoplayer.usevdpaumpeg2";