From 5e25fd5311c5c0dbcc39fefbac37ec76c0bac780 Mon Sep 17 00:00:00 2001 From: fritsch Date: Sat, 11 Jan 2014 14:16:07 +0100 Subject: [PATCH] VDPAU: Add Expert Settings to let user easily disable certain codecs --- language/English/strings.po | 14 +++++++++- system/settings/settings.xml | 27 +++++++++++++++++++ .../cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp | 16 ++++++++++- 3 files changed, 55 insertions(+), 2 deletions(-) diff --git a/language/English/strings.po b/language/English/strings.po index c65dfce126a72..4b3f405b47ed1 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 29d286b6d8f8e..1ed88dc3856a7 100644 --- a/system/settings/settings.xml +++ b/system/settings/settings.xml @@ -447,6 +447,33 @@ + + HAVE_LIBVDPAU + 3 + true + + true + + + + + HAVE_LIBVDPAU + 3 + false + + true + + + + + HAVE_LIBVDPAU + 3 + true + + true + + + HAVE_LIBVA diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp b/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp index e5d58f42440b9..79f8ceaae5af5 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;