aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfritsch <peter.fruehberger@gmail.com>2014-01-11 14:16:07 +0100
committerfritsch <Peter.Fruehberger@gmail.com>2014-02-09 21:14:55 +0100
commit5e25fd5311c5c0dbcc39fefbac37ec76c0bac780 (patch)
treeb10724b4ede7b26400256600bb7221491fb4fba9
parente3f9c7b617475961c8c04eab2d1f29967a1cfca9 (diff)
VDPAU: Add Expert Settings to let user easily disable certain codecs
-rwxr-xr-xlanguage/English/strings.po14
-rw-r--r--system/settings/settings.xml27
-rw-r--r--xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp16
3 files changed, 55 insertions, 2 deletions
diff --git a/language/English/strings.po b/language/English/strings.po
index c65dfce126..4b3f405b47 100755
--- a/language/English/strings.po
+++ b/language/English/strings.po
@@ -6000,7 +6000,19 @@ msgctxt "#13440"
msgid "Allow frame-multi-threaded decoding"
msgstr ""
-#empty strings from id 13441 to 13499
+msgctxt "#13441"
+msgid "Use Mpeg-2 VDPAU"
+msgstr ""
+
+msgctxt "#13442"
+msgid "Use Mpeg-4 VDPAU"
+msgstr ""
+
+msgctxt "#13443"
+msgid "Use VC-1 VDPAU"
+msgstr ""
+
+#empty strings from id 13444 to 13499
#: system/settings/settings.xml
msgctxt "#13500"
diff --git a/system/settings/settings.xml b/system/settings/settings.xml
index 29d286b6d8..1ed88dc385 100644
--- a/system/settings/settings.xml
+++ b/system/settings/settings.xml
@@ -447,6 +447,33 @@
</dependencies>
<control type="toggle" />
</setting>
+ <setting id="videoplayer.usevdpaumpeg2" type="boolean" label="13441" help="36102">
+ <requirement>HAVE_LIBVDPAU</requirement>
+ <level>3</level>
+ <default>true</default>
+ <dependencies>
+ <dependency type="enable" setting="videoplayer.usevdpau" operator="is">true</dependency> <!-- USE VDPAU -->
+ </dependencies>
+ <control type="toggle" />
+ </setting>
+ <setting id="videoplayer.usevdpaumpeg4" type="boolean" label="13442" help="36102">
+ <requirement>HAVE_LIBVDPAU</requirement>
+ <level>3</level>
+ <default>false</default>
+ <dependencies>
+ <dependency type="enable" setting="videoplayer.usevdpau" operator="is">true</dependency> <!-- USE VDPAU -->
+ </dependencies>
+ <control type="toggle" />
+ </setting>
+ <setting id="videoplayer.usevdpauvc1" type="boolean" label="13443" help="36102">
+ <requirement>HAVE_LIBVDPAU</requirement>
+ <level>3</level>
+ <default>true</default>
+ <dependencies>
+ <dependency type="enable" setting="videoplayer.usevdpau" operator="is">true</dependency> <!-- USE VDPAU -->
+ </dependencies>
+ <control type="toggle" />
+ </setting>
<setting id="videoplayer.usevaapi" type="boolean" label="13426" help="36156">
<requirement>HAVE_LIBVA</requirement>
<dependencies>
diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp b/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp
index e5d58f4244..79f8ceaae5 100644
--- a/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp
+++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp
@@ -42,6 +42,16 @@ using namespace VDPAU;
#define ARSIZE(x) (sizeof(x) / sizeof((x)[0]))
+// settings codecs mapping
+DVDCodecAvailableType g_vdpau_available[] = {
+ { AV_CODEC_ID_H263, "videoplayer.usevdpaumpeg4" },
+ { AV_CODEC_ID_MPEG4, "videoplayer.usevdpaumpeg4" },
+ { AV_CODEC_ID_WMV3, "videoplayer.usevdpauvc1" },
+ { AV_CODEC_ID_VC1, "videoplayer.usevdpauvc1" },
+ { AV_CODEC_ID_MPEG2VIDEO, "videoplayer.usevdpaumpeg2" },
+};
+const size_t settings_count = sizeof(g_vdpau_available) / sizeof(DVDCodecAvailableType);
+
CDecoder::Desc decoder_profiles[] = {
{"MPEG1", VDP_DECODER_PROFILE_MPEG1},
{"MPEG2_SIMPLE", VDP_DECODER_PROFILE_MPEG2_SIMPLE},
@@ -483,8 +493,12 @@ CDecoder::CDecoder() : m_vdpauOutput(&m_inMsgEvent)
m_vdpauConfig.context = 0;
}
-bool CDecoder::Open(AVCodecContext* avctx, const enum PixelFormat, unsigned int surfaces)
+bool CDecoder::Open(AVCodecContext* avctx, const enum PixelFormat fmt, unsigned int surfaces)
{
+ // check if user wants to decode this format with VDPAU
+ if (CDVDVideoCodec::IsCodecDisabled(g_vdpau_available, settings_count, avctx->codec_id))
+ return false;
+
#ifndef GL_NV_vdpau_interop
CLog::Log(LOGNOTICE, "VDPAU: compilation without required extension GL_NV_vdpau_interop");
return false;