diff --git a/packages/mediacenter/xbmc/package.mk b/packages/mediacenter/xbmc/package.mk index 9dabe0fba0..936c36e186 100644 --- a/packages/mediacenter/xbmc/package.mk +++ b/packages/mediacenter/xbmc/package.mk @@ -21,7 +21,7 @@ PKG_NAME="xbmc" PKG_VERSION="12.2-cd71444" if [ "$XBMC" = "master" ]; then - PKG_VERSION="13.alpha-7f45288" + PKG_VERSION="13.alpha-545fc25" elif [ "$XBMC" = "xbmc-aml" ]; then PKG_VERSION="aml-frodo-d9119f2" fi diff --git a/packages/mediacenter/xbmc/patches/xbmc-AML-XB9295c3f-01-udev-mount.patch b/packages/mediacenter/xbmc/patches/12.2-cd71444/xbmc-AML-XB9295c3f-01-udev-mount.patch similarity index 100% rename from packages/mediacenter/xbmc/patches/xbmc-AML-XB9295c3f-01-udev-mount.patch rename to packages/mediacenter/xbmc/patches/12.2-cd71444/xbmc-AML-XB9295c3f-01-udev-mount.patch diff --git a/packages/mediacenter/xbmc/patches/xbmc-AML-XB9295c3f-02-udev-mount-add-cdrom-support.patch b/packages/mediacenter/xbmc/patches/12.2-cd71444/xbmc-AML-XB9295c3f-02-udev-mount-add-cdrom-support.patch similarity index 100% rename from packages/mediacenter/xbmc/patches/xbmc-AML-XB9295c3f-02-udev-mount-add-cdrom-support.patch rename to packages/mediacenter/xbmc/patches/12.2-cd71444/xbmc-AML-XB9295c3f-02-udev-mount-add-cdrom-support.patch diff --git a/packages/mediacenter/xbmc/patches/xbmc-AML-XB9295c3f-03-show-all-removable-disks-mounted-under-media.patch b/packages/mediacenter/xbmc/patches/12.2-cd71444/xbmc-AML-XB9295c3f-03-show-all-removable-disks-mounted-under-media.patch similarity index 100% rename from packages/mediacenter/xbmc/patches/xbmc-AML-XB9295c3f-03-show-all-removable-disks-mounted-under-media.patch rename to packages/mediacenter/xbmc/patches/12.2-cd71444/xbmc-AML-XB9295c3f-03-show-all-removable-disks-mounted-under-media.patch diff --git a/packages/mediacenter/xbmc/patches/xbmc-AML-XB9295c3f-04-fixed-context-menu-remove-safely-selection.patch b/packages/mediacenter/xbmc/patches/12.2-cd71444/xbmc-AML-XB9295c3f-04-fixed-context-menu-remove-safely-selection.patch similarity index 100% rename from packages/mediacenter/xbmc/patches/xbmc-AML-XB9295c3f-04-fixed-context-menu-remove-safely-selection.patch rename to packages/mediacenter/xbmc/patches/12.2-cd71444/xbmc-AML-XB9295c3f-04-fixed-context-menu-remove-safely-selection.patch diff --git a/packages/mediacenter/xbmc/patches/xbmc-AML-XB9295c3f-05-use-udevil-to-umount.-escape-mountpath.patch b/packages/mediacenter/xbmc/patches/12.2-cd71444/xbmc-AML-XB9295c3f-05-use-udevil-to-umount.-escape-mountpath.patch similarity index 100% rename from packages/mediacenter/xbmc/patches/xbmc-AML-XB9295c3f-05-use-udevil-to-umount.-escape-mountpath.patch rename to packages/mediacenter/xbmc/patches/12.2-cd71444/xbmc-AML-XB9295c3f-05-use-udevil-to-umount.-escape-mountpath.patch diff --git a/packages/mediacenter/xbmc/patches/13.alpha-7f45288/xbmc-408-enable_PYTHONOPTIMIZE_with_external_Python-0.1.patch b/packages/mediacenter/xbmc/patches/13.alpha-545fc25/xbmc-408-enable_PYTHONOPTIMIZE_with_external_Python-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc/patches/13.alpha-7f45288/xbmc-408-enable_PYTHONOPTIMIZE_with_external_Python-0.1.patch rename to packages/mediacenter/xbmc/patches/13.alpha-545fc25/xbmc-408-enable_PYTHONOPTIMIZE_with_external_Python-0.1.patch diff --git a/packages/mediacenter/xbmc/patches/13.alpha-7f45288/xbmc-453-add_openelec.tv_RSS_news-0.1.patch b/packages/mediacenter/xbmc/patches/13.alpha-545fc25/xbmc-453-add_openelec.tv_RSS_news-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc/patches/13.alpha-7f45288/xbmc-453-add_openelec.tv_RSS_news-0.1.patch rename to packages/mediacenter/xbmc/patches/13.alpha-545fc25/xbmc-453-add_openelec.tv_RSS_news-0.1.patch diff --git a/packages/mediacenter/xbmc/patches/13.alpha-7f45288/xbmc-602-add_as.xml_busy_dialog_delay_control.patch b/packages/mediacenter/xbmc/patches/13.alpha-545fc25/xbmc-602-add_as.xml_busy_dialog_delay_control.patch similarity index 100% rename from packages/mediacenter/xbmc/patches/13.alpha-7f45288/xbmc-602-add_as.xml_busy_dialog_delay_control.patch rename to packages/mediacenter/xbmc/patches/13.alpha-545fc25/xbmc-602-add_as.xml_busy_dialog_delay_control.patch diff --git a/packages/mediacenter/xbmc/patches/13.alpha-7f45288/xbmc-990.15-depends-mark_our_wrapped_functions_as_used.patch b/packages/mediacenter/xbmc/patches/13.alpha-545fc25/xbmc-990.15-depends-mark_our_wrapped_functions_as_used.patch similarity index 100% rename from packages/mediacenter/xbmc/patches/13.alpha-7f45288/xbmc-990.15-depends-mark_our_wrapped_functions_as_used.patch rename to packages/mediacenter/xbmc/patches/13.alpha-545fc25/xbmc-990.15-depends-mark_our_wrapped_functions_as_used.patch diff --git a/packages/mediacenter/xbmc/patches/13.alpha-7f45288/xbmc-995.01-xvba_support-d646570.patch b/packages/mediacenter/xbmc/patches/13.alpha-545fc25/xbmc-995.01-xvba_support-d646570.patch similarity index 80% rename from packages/mediacenter/xbmc/patches/13.alpha-7f45288/xbmc-995.01-xvba_support-d646570.patch rename to packages/mediacenter/xbmc/patches/13.alpha-545fc25/xbmc-995.01-xvba_support-d646570.patch index 1741a94c75..1b1e0c9720 100644 --- a/packages/mediacenter/xbmc/patches/13.alpha-7f45288/xbmc-995.01-xvba_support-d646570.patch +++ b/packages/mediacenter/xbmc/patches/13.alpha-545fc25/xbmc-995.01-xvba_support-d646570.patch @@ -1,7 +1,7 @@ -From e4c04286f7a715f3b2fdf16e5fff545aa2d7147a Mon Sep 17 00:00:00 2001 +From 36d5fb1c32e5bb7b6b62c06985b9a22faf74a9fd Mon Sep 17 00:00:00 2001 From: xbmc Date: Mon, 28 May 2012 10:34:39 +0200 -Subject: [PATCH 01/82] videoplayer: adapt lateness detection and dropping to +Subject: [PATCH 01/89] videoplayer: adapt lateness detection and dropping to buffering --- @@ -582,10 +582,10 @@ index f8ad541..186e271 100644 1.8.4 -From 957a83b681f869db35c7eff99b483e4f4838588f Mon Sep 17 00:00:00 2001 +From ebf5388ef964f0ce79dc141923277c84489255e1 Mon Sep 17 00:00:00 2001 From: xbmc Date: Sun, 2 Sep 2012 16:05:21 +0200 -Subject: [PATCH 02/82] video player: present correct pts to user for a/v sync +Subject: [PATCH 02/89] video player: present correct pts to user for a/v sync (after buffering in renderer) --- @@ -653,10 +653,10 @@ index 186e271..59c7f09 100644 1.8.4 -From f58727e4cc2ab204a6408dbd8e9b1da23a63b88e Mon Sep 17 00:00:00 2001 +From 3d21b5239ce8a310ed9a8a588e08cc971e14e22b Mon Sep 17 00:00:00 2001 From: xbmc Date: Sat, 16 Feb 2013 18:25:53 +0100 -Subject: [PATCH 03/82] videoplayer: some rework and documentation +Subject: [PATCH 03/89] videoplayer: some rework and documentation --- .../dvdplayer/DVDCodecs/Video/DVDVideoCodec.h | 29 ++++++++++++++++++++-- @@ -767,10 +767,10 @@ index 99c8b3c..be3d511 100644 1.8.4 -From 3983ce0a7132c02d21983d9c239c34245b84bbfa Mon Sep 17 00:00:00 2001 +From 66d7a704de4d48b9e5489383c155f28aa39d97eb Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Sat, 1 Jun 2013 11:21:19 +0200 -Subject: [PATCH 04/82] renderer: bump buffers to 5 +Subject: [PATCH 04/89] renderer: bump buffers to 5 --- xbmc/cores/VideoRenderers/BaseRenderer.h | 2 +- @@ -793,10 +793,10 @@ index a61d3cf..df5fe0e 100644 1.8.4 -From 02c2746a6096758504dc98105589cb21f706ab4e Mon Sep 17 00:00:00 2001 +From a18f1c9b926063f2ecf7e36bd0ac8e693f91552e Mon Sep 17 00:00:00 2001 From: xbmc Date: Mon, 28 May 2012 10:41:31 +0200 -Subject: [PATCH 05/82] videoplayer: update frametime, it might change due to +Subject: [PATCH 05/89] videoplayer: update frametime, it might change due to fps detection --- @@ -820,10 +820,10 @@ index be3d511..dbbd11b 100644 1.8.4 -From 2bb1264b23191714e60082986a1b7c3c4e79af6a Mon Sep 17 00:00:00 2001 +From f9d60190eeb63493bee3ad3530ea2a288491115c Mon Sep 17 00:00:00 2001 From: xbmc Date: Mon, 28 May 2012 10:43:06 +0200 -Subject: [PATCH 06/82] videoplayer: give streams with invalid fps a chance for +Subject: [PATCH 06/89] videoplayer: give streams with invalid fps a chance for fps detection --- @@ -847,10 +847,10 @@ index dbbd11b..eb443af 100644 1.8.4 -From afbbc6e71376ce16435ee131ed8ec803ce84a26a Mon Sep 17 00:00:00 2001 +From f2b3710bb6199a0ff84eb93d462b23a9d37e2ad2 Mon Sep 17 00:00:00 2001 From: xbmc Date: Mon, 28 May 2012 10:49:05 +0200 -Subject: [PATCH 07/82] dvdplayer: allow rewinding at end of stream, do a seek +Subject: [PATCH 07/89] dvdplayer: allow rewinding at end of stream, do a seek after rewind --- @@ -858,7 +858,7 @@ Subject: [PATCH 07/82] dvdplayer: allow rewinding at end of stream, do a seek 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/xbmc/cores/dvdplayer/DVDPlayer.cpp b/xbmc/cores/dvdplayer/DVDPlayer.cpp -index 26b18ed..77bd12c 100644 +index 0cd222a..53f82a0 100644 --- a/xbmc/cores/dvdplayer/DVDPlayer.cpp +++ b/xbmc/cores/dvdplayer/DVDPlayer.cpp @@ -1552,7 +1552,7 @@ void CDVDPlayer::HandlePlaySpeed() @@ -887,10 +887,10 @@ index 26b18ed..77bd12c 100644 1.8.4 -From 72a9c0292d824f862b8440fb63f53e089d9f481a Mon Sep 17 00:00:00 2001 +From 6386b7275fb75e9e6253df4bb40e174521c22f3f Mon Sep 17 00:00:00 2001 From: FernetMenta Date: Thu, 5 Jul 2012 15:22:05 +0200 -Subject: [PATCH 08/82] X11: ditch SDL for video and window events +Subject: [PATCH 08/89] X11: ditch SDL for video and window events --- xbmc/Application.cpp | 2 +- @@ -906,10 +906,10 @@ Subject: [PATCH 08/82] X11: ditch SDL for video and window events create mode 100644 xbmc/windowing/WinEventsX11.h diff --git a/xbmc/Application.cpp b/xbmc/Application.cpp -index a10fc2c..6440244 100644 +index 54fe68b..1062469 100644 --- a/xbmc/Application.cpp +++ b/xbmc/Application.cpp -@@ -849,7 +849,7 @@ bool CApplication::CreateGUI() +@@ -853,7 +853,7 @@ bool CApplication::CreateGUI() uint32_t sdlFlags = 0; @@ -2374,10 +2374,10 @@ index b6b6ec4..448a1bb 100644 1.8.4 -From 27163ec89e9e29bbfd4e73bbd3f4340628ae9c7e Mon Sep 17 00:00:00 2001 +From dcca86983d2aeae7540bdd029aa64c92f6113165 Mon Sep 17 00:00:00 2001 From: FernetMenta Date: Thu, 5 Jul 2012 15:24:22 +0200 -Subject: [PATCH 09/82] X11: Add xbmc icon +Subject: [PATCH 09/89] X11: Add xbmc icon --- xbmc/windowing/X11/WinSystemX11.cpp | 126 +++++++++++++++++++++++++++++++++++- @@ -2566,10 +2566,10 @@ index 448a1bb..e618268 100644 1.8.4 -From 756b3df5563047c459a1274097fda0a9fb0f1141 Mon Sep 17 00:00:00 2001 +From 4cddafc5d371d7233b8d75f4bae6497a5a1bacf0 Mon Sep 17 00:00:00 2001 From: xbmc Date: Sun, 20 May 2012 14:11:26 +0200 -Subject: [PATCH 10/82] X11: add SDL joystick until we have a better solution +Subject: [PATCH 10/89] X11: add SDL joystick until we have a better solution --- xbmc/windowing/WinEventsX11.cpp | 26 ++++++++++++++++++++++++++ @@ -2623,10 +2623,10 @@ index 5a8bbb8..5bc1de0 100644 1.8.4 -From bb04311fa550a579a896765072a3d5fb9ae3f88d Mon Sep 17 00:00:00 2001 +From bc331fe276d47a54772ecb33fb12106f1b8eb9cf Mon Sep 17 00:00:00 2001 From: Joakim Plate Date: Thu, 5 Jul 2012 12:35:55 +0200 -Subject: [PATCH 11/82] X11: factor out code handling device reset notification +Subject: [PATCH 11/89] X11: factor out code handling device reset notification --- xbmc/windowing/X11/WinSystemX11.cpp | 22 ++++++++++++++-------- @@ -2689,10 +2689,10 @@ index e618268..c4d4b76 100644 1.8.4 -From ae2554a15c9413469a9bbbc0c59ff6f6df28d9c4 Mon Sep 17 00:00:00 2001 +From fb3ff63b1a0d7edf046ebd59ff691cbcb1c4516b Mon Sep 17 00:00:00 2001 From: FernetMenta Date: Thu, 5 Jul 2012 15:02:00 +0200 -Subject: [PATCH 12/82] X11: move xrandr events to WinEventsX11 +Subject: [PATCH 12/89] X11: move xrandr events to WinEventsX11 --- xbmc/windowing/WinEventsX11.cpp | 42 +++++++++++++++++++++++++++++++++++++ @@ -2836,10 +2836,10 @@ index c5938af..9f74dd5 100644 1.8.4 -From 3545c26f76c480dced97cd66bdb1a35d51a2fc34 Mon Sep 17 00:00:00 2001 +From 4163dafc3065d1bafb0ad39d89577e6b1feef044 Mon Sep 17 00:00:00 2001 From: FernetMenta Date: Thu, 12 Apr 2012 15:43:56 +0200 -Subject: [PATCH 13/82] xrandr: remove method RestoreState +Subject: [PATCH 13/89] xrandr: remove method RestoreState --- xbmc/windowing/X11/WinSystemX11.cpp | 13 +++++++++++-- @@ -2918,10 +2918,10 @@ index 0aec487..00b49dc 100644 1.8.4 -From 1ecbd36afe65238b39d323b7ce0c34fc6d87bfce Mon Sep 17 00:00:00 2001 +From 8be862507bba37afe6f65564afb01e270da51c37 Mon Sep 17 00:00:00 2001 From: xbmc Date: Sun, 20 May 2012 13:17:10 +0200 -Subject: [PATCH 14/82] xrandr: observe orientation +Subject: [PATCH 14/89] xrandr: observe orientation --- xbmc/windowing/X11/WinSystemX11.cpp | 89 ++++++++++++++++++++++++++++++------- @@ -3136,10 +3136,10 @@ index 00b49dc..508604d 100644 1.8.4 -From 61823373c52b128b6de314bb0d409a60f2fb8a80 Mon Sep 17 00:00:00 2001 +From a42ed82f08ef5f0242b72752d213cd7c0e540d3f Mon Sep 17 00:00:00 2001 From: FernetMenta Date: Thu, 5 Jul 2012 11:54:15 +0200 -Subject: [PATCH 15/82] xrandr: allow getting info for multiple screen's +Subject: [PATCH 15/89] xrandr: allow getting info for multiple screen's Refactored by: Joakim Plate --- @@ -3314,10 +3314,10 @@ index 508604d..d37838a 100644 1.8.4 -From 60f4a15c7cdefd32fffd924eacd0666504985ffe Mon Sep 17 00:00:00 2001 +From 42a408e9056343cfb1f5ae6192068e126c239706 Mon Sep 17 00:00:00 2001 From: FernetMenta Date: Thu, 5 Jul 2012 11:44:00 +0200 -Subject: [PATCH 16/82] X11: fix multi-head setups +Subject: [PATCH 16/89] X11: fix multi-head setups --- language/English/strings.po | 4 +- @@ -3332,7 +3332,7 @@ Subject: [PATCH 16/82] X11: fix multi-head setups 9 files changed, 229 insertions(+), 116 deletions(-) diff --git a/language/English/strings.po b/language/English/strings.po -index 63ea425..d027047 100755 +index b59f647..2f223fc 100755 --- a/language/English/strings.po +++ b/language/English/strings.po @@ -1003,7 +1003,9 @@ msgctxt "#245" @@ -3501,10 +3501,10 @@ index cc4002b..d80f1dc 100644 protected: CDisplaySettings(); diff --git a/xbmc/settings/Settings.cpp b/xbmc/settings/Settings.cpp -index ef9904b..5f18b57 100644 +index be6990d..7bd8607 100644 --- a/xbmc/settings/Settings.cpp +++ b/xbmc/settings/Settings.cpp -@@ -380,6 +380,7 @@ void CSettings::Uninitialize() +@@ -384,6 +384,7 @@ void CSettings::Uninitialize() m_settingsManager->UnregisterSettingOptionsFiller("screens"); m_settingsManager->UnregisterSettingOptionsFiller("stereoscopicmodes"); m_settingsManager->UnregisterSettingOptionsFiller("preferedstereoscopicviewmodes"); @@ -3512,7 +3512,7 @@ index ef9904b..5f18b57 100644 m_settingsManager->UnregisterSettingOptionsFiller("shutdownstates"); m_settingsManager->UnregisterSettingOptionsFiller("startupwindows"); m_settingsManager->UnregisterSettingOptionsFiller("streamlanguages"); -@@ -690,6 +691,7 @@ void CSettings::InitializeOptionFillers() +@@ -694,6 +695,7 @@ void CSettings::InitializeOptionFillers() m_settingsManager->RegisterSettingOptionsFiller("screens", CDisplaySettings::SettingOptionsScreensFiller); m_settingsManager->RegisterSettingOptionsFiller("stereoscopicmodes", CDisplaySettings::SettingOptionsStereoscopicModesFiller); m_settingsManager->RegisterSettingOptionsFiller("preferedstereoscopicviewmodes", CDisplaySettings::SettingOptionsPreferredStereoscopicViewModesFiller); @@ -3520,7 +3520,7 @@ index ef9904b..5f18b57 100644 m_settingsManager->RegisterSettingOptionsFiller("shutdownstates", CPowerManager::SettingOptionsShutdownStatesFiller); m_settingsManager->RegisterSettingOptionsFiller("startupwindows", ADDON::CSkinInfo::SettingOptionsStartupWindowsFiller); m_settingsManager->RegisterSettingOptionsFiller("streamlanguages", CLangInfo::SettingOptionsStreamLanguagesFiller); -@@ -717,6 +719,9 @@ void CSettings::InitializeConditions() +@@ -721,6 +723,9 @@ void CSettings::InitializeConditions() #ifdef HAS_GL m_settingsManager->AddCondition("has_gl"); #endif @@ -3530,7 +3530,7 @@ index ef9904b..5f18b57 100644 #ifdef HAS_GLES m_settingsManager->AddCondition("has_gles"); #endif -@@ -858,6 +863,7 @@ void CSettings::InitializeISettingCallbacks() +@@ -866,6 +871,7 @@ void CSettings::InitializeISettingCallbacks() settingSet.insert("videoscreen.screen"); settingSet.insert("videoscreen.resolution"); settingSet.insert("videoscreen.screenmode"); @@ -4086,10 +4086,10 @@ index 0727bb9..b1eb278 100644 1.8.4 -From 9cc9888a21456d10bdcb1115ea995cc50e0a788d Mon Sep 17 00:00:00 2001 +From 4f084ec3acbc23b81b78f68de1b986105b1260df Mon Sep 17 00:00:00 2001 From: FernetMenta Date: Thu, 5 Jul 2012 11:36:32 +0200 -Subject: [PATCH 17/82] X11: remove all DefaultScreen and RootWindow macros +Subject: [PATCH 17/89] X11: remove all DefaultScreen and RootWindow macros --- xbmc/windowing/X11/WinSystemX11.cpp | 6 +++--- @@ -4141,10 +4141,10 @@ index b1eb278..b9154ab 100644 virtual void ResetOSScreensaver(); virtual bool EnableFrameLimiter(); diff --git a/xbmc/windowing/X11/WinSystemX11GL.cpp b/xbmc/windowing/X11/WinSystemX11GL.cpp -index 095012f..60a6878 100644 +index 81c6800..8a8ff83 100644 --- a/xbmc/windowing/X11/WinSystemX11GL.cpp +++ b/xbmc/windowing/X11/WinSystemX11GL.cpp -@@ -203,7 +203,7 @@ bool CWinSystemX11GL::CreateNewWindow(const CStdString& name, bool fullScreen, R +@@ -204,7 +204,7 @@ bool CWinSystemX11GL::CreateNewWindow(const CStdString& name, bool fullScreen, R return false; m_glxext = " "; @@ -4157,10 +4157,10 @@ index 095012f..60a6878 100644 1.8.4 -From 83e64a5b9240df8baf08f563ed2d4e7c176490ea Mon Sep 17 00:00:00 2001 +From da5eae0383a9caf497d8f4290a7cd4ef006c468a Mon Sep 17 00:00:00 2001 From: FernetMenta Date: Thu, 5 Jul 2012 11:45:22 +0200 -Subject: [PATCH 18/82] X11: remove all DefaultScreen and RootWindow macros +Subject: [PATCH 18/89] X11: remove all DefaultScreen and RootWindow macros (VideoRefClock) Note this is on a separate display connection. @@ -4169,10 +4169,10 @@ Note this is on a separate display connection. 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/xbmc/video/VideoReferenceClock.cpp b/xbmc/video/VideoReferenceClock.cpp -index 5bf3656..0b9e7b3 100644 +index 3ba991a..7eecd40 100644 --- a/xbmc/video/VideoReferenceClock.cpp +++ b/xbmc/video/VideoReferenceClock.cpp -@@ -270,7 +270,7 @@ bool CVideoReferenceClock::SetupGLX() +@@ -271,7 +271,7 @@ bool CVideoReferenceClock::SetupGLX() } bool ExtensionFound = false; @@ -4181,7 +4181,7 @@ index 5bf3656..0b9e7b3 100644 string ExtensionStr; while (!ExtensionFound) -@@ -297,7 +297,7 @@ bool CVideoReferenceClock::SetupGLX() +@@ -298,7 +298,7 @@ bool CVideoReferenceClock::SetupGLX() m_bIsATI = true; } @@ -4190,7 +4190,7 @@ index 5bf3656..0b9e7b3 100644 if (!m_vInfo) { CLog::Log(LOGDEBUG, "CVideoReferenceClock: glXChooseVisual returned NULL"); -@@ -308,15 +308,16 @@ bool CVideoReferenceClock::SetupGLX() +@@ -309,15 +309,16 @@ bool CVideoReferenceClock::SetupGLX() { Swa.border_pixel = 0; Swa.event_mask = StructureNotifyMask; @@ -4210,7 +4210,7 @@ index 5bf3656..0b9e7b3 100644 if (!m_pixmap) { CLog::Log(LOGDEBUG, "CVideoReferenceClock: unable to create pixmap"); -@@ -383,7 +384,7 @@ bool CVideoReferenceClock::SetupGLX() +@@ -384,7 +385,7 @@ bool CVideoReferenceClock::SetupGLX() //set up receiving of RandR events, we'll get one when the refreshrate changes XRRQueryExtension(m_Dpy, &m_RREventBase, &ReturnV); @@ -4219,7 +4219,7 @@ index 5bf3656..0b9e7b3 100644 UpdateRefreshrate(true); //forced refreshrate update m_MissedVblanks = 0; -@@ -518,7 +519,7 @@ int CVideoReferenceClock::GetRandRRate() +@@ -519,7 +520,7 @@ int CVideoReferenceClock::GetRandRRate() int RefreshRate; XRRScreenConfiguration *CurrInfo; @@ -4232,10 +4232,10 @@ index 5bf3656..0b9e7b3 100644 1.8.4 -From 3217e010b12d414bbd8f98f295ff988af94cd09f Mon Sep 17 00:00:00 2001 +From a89921f7de0fc027d368d0d30f83da28aaa97895 Mon Sep 17 00:00:00 2001 From: xbmc Date: Wed, 20 Jun 2012 17:37:11 +0200 -Subject: [PATCH 19/82] X11: recreate gl context after output has changed +Subject: [PATCH 19/89] X11: recreate gl context after output has changed --- xbmc/windowing/X11/WinSystemX11.cpp | 24 ++++++++++++++---------- @@ -4345,18 +4345,18 @@ index b9154ab..05aa60e 100644 private: bool IsSuitableVisual(XVisualInfo *vInfo); diff --git a/xbmc/windowing/X11/WinSystemX11GL.cpp b/xbmc/windowing/X11/WinSystemX11GL.cpp -index 60a6878..d6ba80a 100644 +index 8a8ff83..8707467 100644 --- a/xbmc/windowing/X11/WinSystemX11GL.cpp +++ b/xbmc/windowing/X11/WinSystemX11GL.cpp -@@ -23,6 +23,7 @@ - +@@ -24,6 +24,7 @@ #include "WinSystemX11GL.h" #include "utils/log.h" + #include "utils/StringUtils.h" +#include "Application.h" CWinSystemX11GL::CWinSystemX11GL() { -@@ -245,17 +246,25 @@ bool CWinSystemX11GL::CreateNewWindow(const CStdString& name, bool fullScreen, R +@@ -246,17 +247,25 @@ bool CWinSystemX11GL::CreateNewWindow(const CStdString& name, bool fullScreen, R bool CWinSystemX11GL::ResizeWindow(int newWidth, int newHeight, int newLeft, int newTop) { @@ -4386,10 +4386,10 @@ index 60a6878..d6ba80a 100644 1.8.4 -From f52bf5bc1ee7c289aa5c6ef81d55c0a4d59774f9 Mon Sep 17 00:00:00 2001 +From aebb65bf97c6ebffb0598c62208046cdc7b46bf1 Mon Sep 17 00:00:00 2001 From: FernetMenta Date: Thu, 5 Jul 2012 12:06:25 +0200 -Subject: [PATCH 20/82] X11: hook video reference clock in windowing +Subject: [PATCH 20/89] X11: hook video reference clock in windowing --- xbmc/video/VideoReferenceClock.cpp | 71 +++++++++++++++++++++++++++----------- @@ -4397,10 +4397,10 @@ Subject: [PATCH 20/82] X11: hook video reference clock in windowing 2 files changed, 63 insertions(+), 21 deletions(-) diff --git a/xbmc/video/VideoReferenceClock.cpp b/xbmc/video/VideoReferenceClock.cpp -index 0b9e7b3..3bd8133 100644 +index 7eecd40..4071ff0 100644 --- a/xbmc/video/VideoReferenceClock.cpp +++ b/xbmc/video/VideoReferenceClock.cpp -@@ -135,12 +135,23 @@ +@@ -136,12 +136,23 @@ m_Context = NULL; m_pixmap = None; m_glPixmap = None; @@ -4425,7 +4425,7 @@ index 0b9e7b3..3bd8133 100644 void CVideoReferenceClock::Process() { bool SetupSuccess = false; -@@ -151,6 +162,10 @@ void CVideoReferenceClock::Process() +@@ -152,6 +163,10 @@ void CVideoReferenceClock::Process() m_D3dCallback.Reset(); g_Windowing.Register(&m_D3dCallback); #endif @@ -4436,7 +4436,7 @@ index 0b9e7b3..3bd8133 100644 while(!m_bStop) { -@@ -211,6 +226,16 @@ void CVideoReferenceClock::Process() +@@ -212,6 +227,16 @@ void CVideoReferenceClock::Process() //clean up the vblank clock #if defined(HAS_GLX) && defined(HAS_XRANDR) CleanupGLX(); @@ -4453,7 +4453,7 @@ index 0b9e7b3..3bd8133 100644 #elif defined(TARGET_WINDOWS) && defined(HAS_DX) CleanupD3D(); #elif defined(TARGET_DARWIN) -@@ -222,6 +247,9 @@ void CVideoReferenceClock::Process() +@@ -223,6 +248,9 @@ void CVideoReferenceClock::Process() #if defined(TARGET_WINDOWS) && defined(HAS_DX) g_Windowing.Unregister(&m_D3dCallback); #endif @@ -4463,7 +4463,7 @@ index 0b9e7b3..3bd8133 100644 } bool CVideoReferenceClock::WaitStarted(int MSecs) -@@ -231,6 +259,24 @@ bool CVideoReferenceClock::WaitStarted(int MSecs) +@@ -232,6 +260,24 @@ bool CVideoReferenceClock::WaitStarted(int MSecs) } #if defined(HAS_GLX) && defined(HAS_XRANDR) @@ -4488,7 +4488,7 @@ index 0b9e7b3..3bd8133 100644 bool CVideoReferenceClock::SetupGLX() { int singleBufferAttributes[] = { -@@ -382,10 +428,6 @@ bool CVideoReferenceClock::SetupGLX() +@@ -383,10 +429,6 @@ bool CVideoReferenceClock::SetupGLX() return false; } @@ -4499,7 +4499,7 @@ index 0b9e7b3..3bd8133 100644 UpdateRefreshrate(true); //forced refreshrate update m_MissedVblanks = 0; -@@ -586,6 +628,9 @@ void CVideoReferenceClock::RunGLX() +@@ -587,6 +629,9 @@ void CVideoReferenceClock::RunGLX() while(!m_bStop) { @@ -4509,7 +4509,7 @@ index 0b9e7b3..3bd8133 100644 //wait for the next vblank if (!m_bIsATI) { -@@ -649,7 +694,6 @@ void CVideoReferenceClock::RunGLX() +@@ -650,7 +695,6 @@ void CVideoReferenceClock::RunGLX() UpdateClock((int)(VblankCount - PrevVblankCount), true); SingleLock.Leave(); SendVblankSignal(); @@ -4517,7 +4517,7 @@ index 0b9e7b3..3bd8133 100644 IsReset = false; } else if (!m_bStop) -@@ -1186,23 +1230,10 @@ bool CVideoReferenceClock::UpdateRefreshrate(bool Forced /*= false*/) +@@ -1187,23 +1231,10 @@ bool CVideoReferenceClock::UpdateRefreshrate(bool Forced /*= false*/) #if defined(HAS_GLX) && defined(HAS_XRANDR) @@ -4594,10 +4594,10 @@ index dd65a1b..afd71fc 100644 1.8.4 -From 0ad0334d0b8b799124b839fa6b253f9299623dc6 Mon Sep 17 00:00:00 2001 +From b962ef14c56706ba7260d99c272d68055108d6b6 Mon Sep 17 00:00:00 2001 From: xbmc Date: Thu, 21 Jun 2012 17:26:51 +0200 -Subject: [PATCH 21/82] X11: fix video calibrations +Subject: [PATCH 21/89] X11: fix video calibrations --- xbmc/windowing/WinSystem.h | 1 + @@ -4689,10 +4689,10 @@ index 05aa60e..95672d1 100644 1.8.4 -From 6092a321c93928629f1c529d012b2faf63eec52e Mon Sep 17 00:00:00 2001 +From a21b398748b4f7e5d021eac59258b66637dee9d6 Mon Sep 17 00:00:00 2001 From: FernetMenta Date: Thu, 5 Jul 2012 12:00:26 +0200 -Subject: [PATCH 22/82] X11: deactivate screen saver on startup +Subject: [PATCH 22/89] X11: deactivate screen saver on startup --- xbmc/windowing/X11/WinSystemX11.cpp | 29 +++++++++++++++++++++++++++++ @@ -4762,10 +4762,10 @@ index 95672d1..51ac314 100644 1.8.4 -From 08386bdb60bdb4c3ea91b040e89cba31bb5ac1bf Mon Sep 17 00:00:00 2001 +From 17c841eb920621a5580b2b4cde8ccef51eca8fdd Mon Sep 17 00:00:00 2001 From: FernetMenta Date: Thu, 5 Jul 2012 12:10:09 +0200 -Subject: [PATCH 23/82] X11: change method of going full-screen +Subject: [PATCH 23/89] X11: change method of going full-screen --- xbmc/windowing/X11/WinSystemX11.cpp | 9 ++++++++- @@ -4809,10 +4809,10 @@ index 14a4307..66b91fd 100644 1.8.4 -From f194e4d032660d9d9b4ffbac415f7fea53dbafa3 Mon Sep 17 00:00:00 2001 +From 938e122d50138ace8abb4234b7dc09b407190ab3 Mon Sep 17 00:00:00 2001 From: xbmc Date: Thu, 28 Jun 2012 19:12:39 +0200 -Subject: [PATCH 24/82] X11: reset key repeat and key modifier on focus lost +Subject: [PATCH 24/89] X11: reset key repeat and key modifier on focus lost and gain --- @@ -4844,10 +4844,10 @@ index c58067b..c9f8a20 100644 1.8.4 -From 00aa48473e99ae9c7065ab5c4f4672dfdcd51d49 Mon Sep 17 00:00:00 2001 +From fa7000dcdf9e80bf698f4724a2376bcb0194a2bc Mon Sep 17 00:00:00 2001 From: Joakim Plate Date: Thu, 5 Jul 2012 14:18:46 +0200 -Subject: [PATCH 25/82] X11: replace custom utf8 to unicode with charset +Subject: [PATCH 25/89] X11: replace custom utf8 to unicode with charset convertor (squash to x11 events) --- @@ -5064,10 +5064,10 @@ index 6100933..72955ad 100644 1.8.4 -From c77d0ee7db73a1746af8edd1ec03ef5669a30284 Mon Sep 17 00:00:00 2001 +From e25f6b853d78375b88d6a111c78ce5ffab87b89b Mon Sep 17 00:00:00 2001 From: Joakim Plate Date: Thu, 5 Jul 2012 14:23:54 +0200 -Subject: [PATCH 26/82] X11: fixed invalid usage of sizeof() (squash into x11 +Subject: [PATCH 26/89] X11: fixed invalid usage of sizeof() (squash into x11 changes) --- @@ -5131,10 +5131,10 @@ index 72955ad..102a076 100644 1.8.4 -From c9904aa8b90b5a0a8ec61f6e01b967eb107c4ceb Mon Sep 17 00:00:00 2001 +From 6bf1cf919924114f4041b59ec55c93588b1e703f Mon Sep 17 00:00:00 2001 From: xbmc Date: Sat, 9 Jun 2012 18:23:53 +0200 -Subject: [PATCH 27/82] add missing keys to xbmc keytable +Subject: [PATCH 27/89] add missing keys to xbmc keytable --- xbmc/input/XBMC_keytable.cpp | 2 ++ @@ -5157,20 +5157,20 @@ index b430f55..246164b 100644 1.8.4 -From aa899a6ccd76d9ffea62be7b7f785893958ede9f Mon Sep 17 00:00:00 2001 +From 5f554cecdd4c8363d3ea6d2c3508b2bfbeed6a17 Mon Sep 17 00:00:00 2001 From: xbmc Date: Fri, 16 Mar 2012 15:57:51 +0100 -Subject: [PATCH 28/82] videorefclock: temp deactivate of nv settings +Subject: [PATCH 28/89] videorefclock: temp deactivate of nv settings --- xbmc/video/VideoReferenceClock.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xbmc/video/VideoReferenceClock.cpp b/xbmc/video/VideoReferenceClock.cpp -index 3bd8133..59f924c 100644 +index 4071ff0..b9afc09 100644 --- a/xbmc/video/VideoReferenceClock.cpp +++ b/xbmc/video/VideoReferenceClock.cpp -@@ -135,7 +135,7 @@ +@@ -136,7 +136,7 @@ m_Context = NULL; m_pixmap = None; m_glPixmap = None; @@ -5183,20 +5183,20 @@ index 3bd8133..59f924c 100644 1.8.4 -From 4374654579db502b8f808be89e745847e651dfc8 Mon Sep 17 00:00:00 2001 +From 8429ae732a504112380e2b14765efcdf4e915064 Mon Sep 17 00:00:00 2001 From: xbmc Date: Mon, 20 Aug 2012 09:09:09 +0200 -Subject: [PATCH 29/82] videorefclock: ask graphics context for refresh rate +Subject: [PATCH 29/89] videorefclock: ask graphics context for refresh rate --- xbmc/video/VideoReferenceClock.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/xbmc/video/VideoReferenceClock.cpp b/xbmc/video/VideoReferenceClock.cpp -index 59f924c..2f8bc69 100644 +index b9afc09..2f6c7de 100644 --- a/xbmc/video/VideoReferenceClock.cpp +++ b/xbmc/video/VideoReferenceClock.cpp -@@ -30,6 +30,7 @@ +@@ -31,6 +31,7 @@ #include #include #include "windowing/WindowingFactory.h" @@ -5204,7 +5204,7 @@ index 59f924c..2f8bc69 100644 #define NVSETTINGSCMD "nvidia-settings -nt -q RefreshRate3" #elif defined(TARGET_DARWIN_OSX) #include -@@ -1254,7 +1255,7 @@ bool CVideoReferenceClock::UpdateRefreshrate(bool Forced /*= false*/) +@@ -1255,7 +1256,7 @@ bool CVideoReferenceClock::UpdateRefreshrate(bool Forced /*= false*/) } CSingleLock SingleLock(m_CritSection); @@ -5217,10 +5217,10 @@ index 59f924c..2f8bc69 100644 1.8.4 -From f97fba2c14c1bc6b6b10ac8a4a4591f0820e2670 Mon Sep 17 00:00:00 2001 +From 760bb61f7607998ab4d65ed02da153186c82ab59 Mon Sep 17 00:00:00 2001 From: xbmc Date: Mon, 9 Jul 2012 14:00:18 +0200 -Subject: [PATCH 30/82] X11: fix icon texture after +Subject: [PATCH 30/89] X11: fix icon texture after cc5ed3c2474084ebc0373a3046410e6f766e03f4 --- @@ -5328,10 +5328,10 @@ index 66b91fd..b00eddc 100644 1.8.4 -From 542b60783ed968813df20765f0013974b18bf7f0 Mon Sep 17 00:00:00 2001 +From 2a8e7de3c0df03c17077d2e3967ec34dfa3f18c0 Mon Sep 17 00:00:00 2001 From: xbmc Date: Tue, 10 Jul 2012 11:14:12 +0200 -Subject: [PATCH 31/82] X11: check for window manager +Subject: [PATCH 31/89] X11: check for window manager --- xbmc/windowing/X11/WinSystemX11.cpp | 74 ++++++++++++++++++++++++++++++++++++- @@ -5452,10 +5452,10 @@ index 51ac314..ce3c289 100644 1.8.4 -From 8f528dac73c34eba5931d27545018ff972490cfc Mon Sep 17 00:00:00 2001 +From b4c3338d0c185e4a94661a0a397d562044f6b467 Mon Sep 17 00:00:00 2001 From: xbmc Date: Thu, 12 Jul 2012 11:11:47 +0200 -Subject: [PATCH 32/82] X11: dont set window on xrandr if no mode available +Subject: [PATCH 32/89] X11: dont set window on xrandr if no mode available --- xbmc/windowing/X11/WinSystemX11.cpp | 11 ++++++----- @@ -5492,10 +5492,10 @@ index 05279ad..9697cbb 100644 1.8.4 -From f4bfc84aa5ea90754a349a2d44b8a01b519db569 Mon Sep 17 00:00:00 2001 +From a990744c3ec9b4273c3d7140b8f1c42e243dc5dc Mon Sep 17 00:00:00 2001 From: xbmc Date: Thu, 26 Jul 2012 09:34:28 +0200 -Subject: [PATCH 33/82] X11: fix crash after a resolution change on startup +Subject: [PATCH 33/89] X11: fix crash after a resolution change on startup --- xbmc/windowing/X11/WinSystemX11.cpp | 3 ++- @@ -5519,10 +5519,10 @@ index 9697cbb..868071c 100644 1.8.4 -From bfb99f9de6da60bc7bf6c2af4185d1e98db9a11a Mon Sep 17 00:00:00 2001 +From e366cc308192a9e229e5c6072d1cd1018f3ed176 Mon Sep 17 00:00:00 2001 From: xbmc Date: Sat, 15 Sep 2012 18:27:29 +0200 -Subject: [PATCH 34/82] X11: lock graphics context in NotifyXRREvent +Subject: [PATCH 34/89] X11: lock graphics context in NotifyXRREvent --- xbmc/windowing/X11/WinSystemX11.cpp | 2 ++ @@ -5545,10 +5545,10 @@ index 868071c..9ff947c 100644 1.8.4 -From dd1c7aa36b98b7a01f034d542dd645c6113595dd Mon Sep 17 00:00:00 2001 +From 84207ba51bafff6671d3d97e41407cb0fcbc7a54 Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Sat, 8 Oct 2011 16:45:13 +0200 -Subject: [PATCH 35/82] ffmpeg: add xvba hwaccel, co-author fritsch +Subject: [PATCH 35/89] ffmpeg: add xvba hwaccel, co-author fritsch --- lib/ffmpeg/configure | 11 ++ @@ -6455,10 +6455,10 @@ index 1c00ac4..6437e29 100644 1.8.4 -From c12a4c06a6b09be474b495abbb1293bc9b5a1100 Mon Sep 17 00:00:00 2001 +From 97e82ab1ca33d207a5df73f81faf0114d611874c Mon Sep 17 00:00:00 2001 From: xbmc Date: Thu, 12 Apr 2012 12:09:31 +0200 -Subject: [PATCH 36/82] xvba: add decoder, co-author fritsch +Subject: [PATCH 36/89] xvba: add decoder, co-author fritsch --- configure.in | 47 + @@ -6483,7 +6483,7 @@ Subject: [PATCH 36/82] xvba: add decoder, co-author fritsch create mode 100644 xbmc/cores/dvdplayer/DVDCodecs/Video/XVBA.h diff --git a/configure.in b/configure.in -index 4127c9d..dfea1ee 100644 +index ec5ea78..428536f 100644 --- a/configure.in +++ b/configure.in @@ -150,6 +150,8 @@ vaapi_not_found="== Could not find libva. VAAPI support disabled. ==" @@ -6508,7 +6508,7 @@ index 4127c9d..dfea1ee 100644 AC_ARG_ENABLE([vtbdecoder], [AS_HELP_STRING([--enable-vtbdecoder], -@@ -1822,6 +1830,37 @@ else +@@ -1829,6 +1837,37 @@ else USE_CRYSTALHD=0 fi @@ -6546,7 +6546,7 @@ index 4127c9d..dfea1ee 100644 # VTBDecoder if test "x$use_vtbdecoder" != "xno"; then if test "$host_vendor" = "apple" ; then -@@ -2033,6 +2072,12 @@ else +@@ -2040,6 +2079,12 @@ else final_message="$final_message\n CrystalHD:\tNo" fi @@ -6559,7 +6559,7 @@ index 4127c9d..dfea1ee 100644 if test "x$use_vtbdecoder" != "xno"; then final_message="$final_message\n VTBDecoder:\tYes" else -@@ -2523,6 +2568,7 @@ AC_SUBST(USE_OPENGLES) +@@ -2530,6 +2575,7 @@ AC_SUBST(USE_OPENGLES) AC_SUBST(USE_VDPAU) AC_SUBST(USE_VAAPI) AC_SUBST(USE_CRYSTALHD) @@ -6567,7 +6567,7 @@ index 4127c9d..dfea1ee 100644 AC_SUBST(USE_LIBSMBCLIENT) AC_SUBST(USE_LIBNFS) AC_SUBST(USE_LIBAFPCLIENT) -@@ -2705,6 +2751,7 @@ XB_CONFIG_MODULE([lib/ffmpeg], [ +@@ -2712,6 +2758,7 @@ XB_CONFIG_MODULE([lib/ffmpeg], [ `if test "x$use_vdpau" != "xno"; then echo --enable-vdpau; else echo --disable-vdpau; fi` \ `if test "x$use_vaapi" != "xno"; then echo --enable-vaapi; else echo --disable-vaapi; fi` \ `if test "$use_optimizations" != "no"; then echo --enable-optimizations; else echo --disable-optimizations; fi` \ @@ -6576,24 +6576,24 @@ index 4127c9d..dfea1ee 100644 --enable-pthreads \ --enable-runtime-cpudetect \ diff --git a/language/English/strings.po b/language/English/strings.po -index d027047..03bb374 100755 +index 2f223fc..e22508c 100755 --- a/language/English/strings.po +++ b/language/English/strings.po -@@ -5798,7 +5798,12 @@ msgctxt "#13437" - msgid "Prefer VDPAU Video Mixer" +@@ -5803,7 +5803,12 @@ msgctxt "#13438" + msgid "Allow hardware acceleration (amcodec)" msgstr "" --#empty strings from id 13438 to 13499 +-#empty strings from id 13439 to 13499 +#: system/settings/settings.xml -+msgctxt "#13438" ++msgctxt "#13439" +msgid "Allow hardware acceleration (XVBA)" +msgstr "" + -+#empty strings from id 13439 to 13499 ++#empty strings from id 13440 to 13499 #: system/settings/settings.xml msgctxt "#13500" -@@ -6884,7 +6889,11 @@ msgctxt "#16325" +@@ -6889,7 +6894,11 @@ msgctxt "#16325" msgid "VDPAU - Bob" msgstr "" @@ -6607,14 +6607,14 @@ index d027047..03bb374 100755 msgctxt "#16400" msgid "Post-processing" diff --git a/system/settings/settings.xml b/system/settings/settings.xml -index 47e8145..0426ff2 100644 +index 47e8145..e117a9d 100644 --- a/system/settings/settings.xml +++ b/system/settings/settings.xml @@ -410,6 +410,11 @@ 2 true -+ ++ + HAVE_LIBXVBA + 2 + true @@ -7055,7 +7055,7 @@ index ae610ca..08d6230 100644 return index; diff --git a/xbmc/cores/dvdplayer/DVDCodecs/DVDFactoryCodec.cpp b/xbmc/cores/dvdplayer/DVDCodecs/DVDFactoryCodec.cpp -index 3ff3993..c95fd33 100644 +index bc3072a..b6c5c66 100644 --- a/xbmc/cores/dvdplayer/DVDCodecs/DVDFactoryCodec.cpp +++ b/xbmc/cores/dvdplayer/DVDCodecs/DVDFactoryCodec.cpp @@ -184,6 +184,11 @@ CDVDVideoCodec* CDVDFactoryCodec::CreateVideoCodec(CDVDStreamInfo &hint, unsigne @@ -7069,7 +7069,7 @@ index 3ff3993..c95fd33 100644 +#endif CLog::Log(LOGDEBUG, "CDVDFactoryCodec: compiled in hardware support: %s", hwSupport.c_str()); - #if !defined(HAS_LIBAMCODEC) + #if defined(HAS_LIBAMCODEC) diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodec.h b/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodec.h index d358777..35516d7 100644 --- a/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodec.h @@ -9924,10 +9924,10 @@ index eb443af..c2808c3 100644 } return "UNKNOWN"; diff --git a/xbmc/settings/Settings.cpp b/xbmc/settings/Settings.cpp -index 5f18b57..6d4a084 100644 +index 7bd8607..c8782d6 100644 --- a/xbmc/settings/Settings.cpp +++ b/xbmc/settings/Settings.cpp -@@ -760,6 +760,9 @@ void CSettings::InitializeConditions() +@@ -764,6 +764,9 @@ void CSettings::InitializeConditions() #ifdef HAVE_LIBVDPAU m_settingsManager->AddCondition("have_libvdpau"); #endif @@ -9966,10 +9966,10 @@ index 8f30248..db58075 100644 1.8.4 -From fc11ff33241c4e19098e4e51520fb7a4a0d41ee4 Mon Sep 17 00:00:00 2001 +From 3b2d656d2805d364fbf0580b79ba895250e3bee6 Mon Sep 17 00:00:00 2001 From: xbmc Date: Sat, 16 Jun 2012 12:46:30 +0200 -Subject: [PATCH 37/82] xvba: do not use vaapi if xvba is present +Subject: [PATCH 37/89] xvba: do not use vaapi if xvba is present --- xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.cpp | 9 +++++++++ @@ -9999,10 +9999,10 @@ index 3facfce..298bcad 100644 1.8.4 -From 78b85202ec4867eea3aff0952a9339e7be3562a7 Mon Sep 17 00:00:00 2001 +From 2ee898fee38085716af4d1383c1b746fa0575896 Mon Sep 17 00:00:00 2001 From: xbmc Date: Thu, 23 Aug 2012 19:39:49 +0200 -Subject: [PATCH 38/82] ffmpeg: add av_find_default_stream_index to interface +Subject: [PATCH 38/89] ffmpeg: add av_find_default_stream_index to interface --- lib/DllAvFormat.h | 4 ++++ @@ -10048,10 +10048,10 @@ index 0016c0b..3514856 100644 1.8.4 -From 6e71dad1bfe0a9f1c40ed2002e89e653311e25df Mon Sep 17 00:00:00 2001 +From a7254d8f2ce24f090d34d24ed994703353c45204 Mon Sep 17 00:00:00 2001 From: xbmc Date: Mon, 20 Aug 2012 16:06:39 +0200 -Subject: [PATCH 39/82] dvdplayer: observe pts counter overflow +Subject: [PATCH 39/89] dvdplayer: observe pts counter overflow --- .../cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp | 198 ++++++++++++++++++++- @@ -10338,10 +10338,10 @@ index aef5ab1..35abbdf 100644 1.8.4 -From d06d724d4fa90c59f092cfb4a343fdf1d59209c4 Mon Sep 17 00:00:00 2001 +From 4641682c080ab7d9bd951caab7feb705dc854a3a Mon Sep 17 00:00:00 2001 From: xbmc Date: Tue, 2 Oct 2012 13:02:10 +0200 -Subject: [PATCH 40/82] dvdplayer: avoid short screen flicker caused by +Subject: [PATCH 40/89] dvdplayer: avoid short screen flicker caused by unnecessary reconfigure of renderer --- @@ -10374,10 +10374,10 @@ index c2808c3..5d487f4 100644 1.8.4 -From 2eca3120f6cfdaad4569c43f1a141ad8d081b4d9 Mon Sep 17 00:00:00 2001 +From 9a48b94d1a01273f37583bd6f3784a71843682b4 Mon Sep 17 00:00:00 2001 From: xbmc Date: Thu, 11 Oct 2012 12:05:50 +0200 -Subject: [PATCH 41/82] vdpau: advanced settings for auto deinterlacing +Subject: [PATCH 41/89] vdpau: advanced settings for auto deinterlacing --- xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp | 8 ++++---- @@ -10443,10 +10443,10 @@ index 0d792af..b7b7a80 100644 1.8.4 -From 0cb7cfdf3c8160140f4b024dac1ed81dd5f460e1 Mon Sep 17 00:00:00 2001 +From 1e305ff642fe80dbc0ab98eec3b2f49f32be4c73 Mon Sep 17 00:00:00 2001 From: xbmc Date: Fri, 2 Nov 2012 13:20:03 +0100 -Subject: [PATCH 42/82] player: fix rewind +Subject: [PATCH 42/89] player: fix rewind --- xbmc/cores/dvdplayer/DVDMessage.h | 5 ++++- @@ -10494,7 +10494,7 @@ index 2ea8b8f..e8274f9 100644 class CDVDMsgPlayerSeekChapter : public CDVDMsg diff --git a/xbmc/cores/dvdplayer/DVDPlayer.cpp b/xbmc/cores/dvdplayer/DVDPlayer.cpp -index 77bd12c..f6da821 100644 +index 53f82a0..43d2250 100644 --- a/xbmc/cores/dvdplayer/DVDPlayer.cpp +++ b/xbmc/cores/dvdplayer/DVDPlayer.cpp @@ -1553,11 +1553,13 @@ void CDVDPlayer::HandlePlaySpeed() @@ -10661,10 +10661,10 @@ index 59c7f09..65dea76 100644 1.8.4 -From c71a8c0a1bcc49f402fb920e2c734418ccd1e0ee Mon Sep 17 00:00:00 2001 +From 5de9ba62a3d8a5edf85fdfa511d20cd5734abb56 Mon Sep 17 00:00:00 2001 From: xbmc Date: Fri, 23 Nov 2012 17:41:12 +0100 -Subject: [PATCH 43/82] xrandr: fix query for multiple screens +Subject: [PATCH 43/89] xrandr: fix query for multiple screens --- xbmc/windowing/X11/XRandR.cpp | 10 ++++++---- @@ -10705,10 +10705,10 @@ index 9e181f2..ce0a02b 100644 1.8.4 -From 28a58658085c0a5b93f9b10566f9e4b1569e6e5c Mon Sep 17 00:00:00 2001 +From 63ff159d4c293343bb4e2f4623960d5cca9fe08b Mon Sep 17 00:00:00 2001 From: xbmc Date: Sun, 2 Dec 2012 15:46:55 +0100 -Subject: [PATCH 44/82] X11: add debug log to print out refresh after xrr event +Subject: [PATCH 44/89] X11: add debug log to print out refresh after xrr event --- xbmc/windowing/X11/WinSystemX11.cpp | 6 ++++++ @@ -10735,10 +10735,10 @@ index 9ff947c..a3394e6 100644 1.8.4 -From 964924739b69e9055908c2d14bbb0d2ad8231155 Mon Sep 17 00:00:00 2001 +From 99677d88e12e04c1f55df152ed91b2b45a0ca84f Mon Sep 17 00:00:00 2001 From: xbmc Date: Tue, 11 Dec 2012 11:08:13 +0100 -Subject: [PATCH 45/82] X11: dont call XCloseDisplay on shutdown, it crashes +Subject: [PATCH 45/89] X11: dont call XCloseDisplay on shutdown, it crashes when powered doen by cec on ATI --- @@ -10763,10 +10763,10 @@ index a3394e6..b941c14 100644 1.8.4 -From 1b2eb4d8ec970323707e50089cb262a627a7c1d9 Mon Sep 17 00:00:00 2001 +From b4611139075e55b2d1ee293b92b0d71be03a102d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gr=C3=A9gory=20Coutant?= Date: Wed, 12 Dec 2012 19:49:47 +0100 -Subject: [PATCH 46/82] x11: support for multiple x screens +Subject: [PATCH 46/89] x11: support for multiple x screens --- xbmc/windowing/X11/XRandR.cpp | 2 +- @@ -10789,10 +10789,10 @@ index ce0a02b..aa27d2b 100644 1.8.4 -From 50d467842061e56ccd357c73f0dbb3228384a00e Mon Sep 17 00:00:00 2001 +From df3f1fbff9606b0cb300f93092741f4bfbcfc3a0 Mon Sep 17 00:00:00 2001 From: xbmc Date: Mon, 24 Dec 2012 16:02:42 +0100 -Subject: [PATCH 47/82] pvr: increase changes counter of stream on stream +Subject: [PATCH 47/89] pvr: increase changes counter of stream on stream change, cosmetics after dd307930d39d92f145a01a16600cd00e01ec39be --- @@ -10826,10 +10826,10 @@ index b96d520..df89f6f 100644 1.8.4 -From 2282f99c5b031cf7d2f6e6a19bd528eab922c7c4 Mon Sep 17 00:00:00 2001 +From f5e98c1e09c8d94f9cf21a53ffe2a344fa014c62 Mon Sep 17 00:00:00 2001 From: xbmc Date: Thu, 17 Jan 2013 16:03:22 +0100 -Subject: [PATCH 48/82] X11: add keymapping for XF86XK_Sleep +Subject: [PATCH 48/89] X11: add keymapping for XF86XK_Sleep --- xbmc/windowing/WinEventsX11.cpp | 1 + @@ -10851,10 +10851,10 @@ index 4a5aab4..da5d412 100644 1.8.4 -From 2a917d493a6dcb010eda16b4db205852ad6d3c34 Mon Sep 17 00:00:00 2001 +From 5dd2852d1483975f4fc680011ed8d5bcae0d3fbb Mon Sep 17 00:00:00 2001 From: xbmc Date: Mon, 21 Jan 2013 09:00:19 +0100 -Subject: [PATCH 49/82] X11: remove toggle full screen after resume +Subject: [PATCH 49/89] X11: remove toggle full screen after resume --- xbmc/powermanagement/PowerManager.cpp | 5 ----- @@ -10880,10 +10880,10 @@ index 2033574..c79bbc1 100644 1.8.4 -From 494566734dc681c81323430a24cd6f21e113816f Mon Sep 17 00:00:00 2001 +From 481f914d9b718fbf7545843e1024bef23363432a Mon Sep 17 00:00:00 2001 From: xbmc Date: Wed, 23 Jan 2013 17:03:02 +0100 -Subject: [PATCH 50/82] xrandr: set screen on mode change command +Subject: [PATCH 50/89] xrandr: set screen on mode change command --- xbmc/windowing/X11/XRandR.cpp | 2 +- @@ -10906,10 +10906,10 @@ index aa27d2b..67bf6ca 100644 1.8.4 -From 1b5dc127b82ecc786a50b5ec4c2d2bdc732e9a03 Mon Sep 17 00:00:00 2001 +From ccaa444562352a6df72c01a2d939f22ef72b7026 Mon Sep 17 00:00:00 2001 From: xbmc Date: Wed, 23 Jan 2013 17:03:39 +0100 -Subject: [PATCH 51/82] X11: recreate glx context when output changes +Subject: [PATCH 51/89] X11: recreate glx context when output changes --- xbmc/windowing/X11/WinSystemX11.cpp | 6 +++--- @@ -10960,10 +10960,10 @@ index ce3c289..311e4cc 100644 1.8.4 -From 32b3c966846654f9d7bdd49ff2e5be25dc07a2cf Mon Sep 17 00:00:00 2001 +From 987b677f98e3e815f9572fee0c3ae75838e5d62b Mon Sep 17 00:00:00 2001 From: xbmc Date: Fri, 14 Dec 2012 14:19:15 +0100 -Subject: [PATCH 52/82] pvr: do not show selection dialog for a single menu +Subject: [PATCH 52/89] pvr: do not show selection dialog for a single menu hook --- @@ -11001,10 +11001,10 @@ index aab6345..a880778 100644 1.8.4 -From 86ed24b95f66616f2f4398ae59ff0fc3ed51a5f8 Mon Sep 17 00:00:00 2001 +From 11e37f44d0bfd4f434ab569179656edf45b03ce9 Mon Sep 17 00:00:00 2001 From: xbmc Date: Sun, 3 Feb 2013 08:17:16 +0100 -Subject: [PATCH 53/82] X11: use default screen parameters if no output +Subject: [PATCH 53/89] X11: use default screen parameters if no output connected --- @@ -11108,10 +11108,10 @@ index c84e793..5215f4d 100644 1.8.4 -From b2cb0e1edd322fb0472de973133c667c77a98790 Mon Sep 17 00:00:00 2001 +From 33f5ae6ede1dcda97e5813b4aa7f3a312aed3cb4 Mon Sep 17 00:00:00 2001 From: xbmc Date: Sat, 23 Mar 2013 15:13:32 +0100 -Subject: [PATCH 54/82] X11: create parent window +Subject: [PATCH 54/89] X11: create parent window --- xbmc/windowing/X11/WinSystemX11.cpp | 69 +++++++++++++++++++++++-------------- @@ -11377,10 +11377,10 @@ index 311e4cc..49365a8 100644 1.8.4 -From f9aa6b012a2c77d41f24ed4ccc2d0f8a17222528 Mon Sep 17 00:00:00 2001 +From b69f89c3983a607eabae8397d50ba5e075c003d0 Mon Sep 17 00:00:00 2001 From: xbmc Date: Sun, 24 Mar 2013 12:30:12 +0100 -Subject: [PATCH 55/82] X11: use system key repeat rate instead of hardcoded +Subject: [PATCH 55/89] X11: use system key repeat rate instead of hardcoded one, taken from 58fd64b194e38b73b5f3132744bab35e994e7441 --- @@ -11582,10 +11582,10 @@ index 102a076..5b1f3fa 100644 1.8.4 -From 9535bb8a20beb85fb9fdda60fe53a04661bf385f Mon Sep 17 00:00:00 2001 +From 27e135bea951de724c15336a1011ee37aa800fb8 Mon Sep 17 00:00:00 2001 From: xbmc Date: Sun, 24 Mar 2013 16:04:48 +0100 -Subject: [PATCH 56/82] linux: use CLOCK_MONOTONIC_RAW as this is not subject +Subject: [PATCH 56/89] linux: use CLOCK_MONOTONIC_RAW as this is not subject to NTP --- @@ -11623,10 +11623,10 @@ index c06b8c5..4390d2e 100644 1.8.4 -From 50a35896c28f54d2773e9eeced2b14ab2e7e194c Mon Sep 17 00:00:00 2001 +From ae3cab96cd87fb187eaea93d8ae7c3d5587cacd7 Mon Sep 17 00:00:00 2001 From: xbmc Date: Thu, 28 Mar 2013 15:18:53 +0100 -Subject: [PATCH 57/82] OMXPlayer: some caching fixes for pvr +Subject: [PATCH 57/89] OMXPlayer: some caching fixes for pvr --- xbmc/cores/omxplayer/OMXPlayer.cpp | 3 ++- @@ -11650,20 +11650,20 @@ index 5efe74c..073c40a 100644 1.8.4 -From 8cecb2207d37e3d00e2397bbb24210ad064efd57 Mon Sep 17 00:00:00 2001 +From cc370216e640ae4598ba861cd0cde12a89ebc7ff Mon Sep 17 00:00:00 2001 From: xbmc Date: Thu, 28 Mar 2013 20:50:59 +0100 -Subject: [PATCH 58/82] fix incorrect display of fps when dr kicks in +Subject: [PATCH 58/89] fix incorrect display of fps when dr kicks in --- xbmc/Application.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/xbmc/Application.cpp b/xbmc/Application.cpp -index 6440244..6dfa529 100644 +index 1062469..29e9aa9 100644 --- a/xbmc/Application.cpp +++ b/xbmc/Application.cpp -@@ -2186,10 +2186,11 @@ void CApplication::Render() +@@ -2190,10 +2190,11 @@ void CApplication::Render() if (frameTime < singleFrameTime) Sleep(singleFrameTime - frameTime); } @@ -11680,10 +11680,10 @@ index 6440244..6dfa529 100644 1.8.4 -From 4d742d884faf8df3c11be52a6072ff2b272e2bc4 Mon Sep 17 00:00:00 2001 +From dcff2ce062d717c0e80f1a05b6bf59fb593dec3c Mon Sep 17 00:00:00 2001 From: xbmc Date: Sat, 13 Apr 2013 08:32:06 +0200 -Subject: [PATCH 59/82] X11: fix mouse coverage +Subject: [PATCH 59/89] X11: fix mouse coverage --- xbmc/windowing/X11/WinSystemX11.cpp | 11 ++++++++--- @@ -11749,10 +11749,10 @@ index 49365a8..924af1d 100644 1.8.4 -From e4977a0310d6400aeb2561424b93f9cd67fa1163 Mon Sep 17 00:00:00 2001 +From 744f793f1d5fea28caec58a72fc6f034afbf72c8 Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Wed, 8 May 2013 13:14:58 +0200 -Subject: [PATCH 60/82] X11: fix incorrectly used screen num in desktop +Subject: [PATCH 60/89] X11: fix incorrectly used screen num in desktop resolution --- @@ -11787,10 +11787,10 @@ index 186a28e..66955b8 100644 1.8.4 -From f4129ebd74140b9a35341b1ae7bbc310f98dd7dc Mon Sep 17 00:00:00 2001 +From 34bd5e81577cea971b77f023da077fa8760884be Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Thu, 9 May 2013 12:07:09 +0200 -Subject: [PATCH 61/82] X11: do not overwrite user selected monitor with +Subject: [PATCH 61/89] X11: do not overwrite user selected monitor with fallback --- @@ -11915,10 +11915,10 @@ index 924af1d..2fb9e0f 100644 1.8.4 -From 86ef774e333463b8f33f03f83575e581464077e0 Mon Sep 17 00:00:00 2001 +From 4c883e3564fcf25ac3e00c54678c9dbd0469a014 Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Sun, 12 May 2013 10:50:30 +0200 -Subject: [PATCH 62/82] xrandr: add turn on/off to wrapper +Subject: [PATCH 62/89] xrandr: add turn on/off to wrapper --- xbmc/windowing/X11/XRandR.cpp | 78 +++++++++++++++++++++++++++++++++++++++---- @@ -12084,10 +12084,10 @@ index d37838a..059062f 100644 1.8.4 -From 1e16699885ce90e2b71f9b47a30e38358e5b9859 Mon Sep 17 00:00:00 2001 +From 8b5ab736c4088315dd6014ac868a80a6e637b90f Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Sun, 19 May 2013 12:55:35 +0200 -Subject: [PATCH 63/82] xrandr: add GetPreferredMode to wrapper +Subject: [PATCH 63/89] xrandr: add GetPreferredMode to wrapper --- xbmc/windowing/X11/XRandR.cpp | 23 +++++++++++++++++++++++ @@ -12144,10 +12144,10 @@ index 059062f..ab7cc63 100644 1.8.4 -From 633043eff1445f8d1b86eb3a7195eb9002a5d6e4 Mon Sep 17 00:00:00 2001 +From 11bd4c6b9f4f0b607644f98d21f8d03317725d40 Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Sat, 11 May 2013 17:12:12 +0200 -Subject: [PATCH 64/82] X11: multi-head improvement - poll for desired output +Subject: [PATCH 64/89] X11: multi-head improvement - poll for desired output if we do not get an xrr event --- @@ -12162,10 +12162,10 @@ Subject: [PATCH 64/82] X11: multi-head improvement - poll for desired output 8 files changed, 105 insertions(+), 12 deletions(-) diff --git a/language/English/strings.po b/language/English/strings.po -index 03bb374..e972c5f 100755 +index e22508c..bbc73f8 100755 --- a/language/English/strings.po +++ b/language/English/strings.po -@@ -6258,7 +6258,7 @@ msgctxt "#14071" +@@ -6263,7 +6263,7 @@ msgctxt "#14071" msgid "Allow file renaming and deletion" msgstr "" @@ -12174,7 +12174,7 @@ index 03bb374..e972c5f 100755 msgctxt "#14074" msgid "Set timezone" -@@ -6390,7 +6390,12 @@ msgctxt "#14100" +@@ -6395,7 +6395,12 @@ msgctxt "#14100" msgid "Stop ripping CD" msgstr "" @@ -12189,7 +12189,7 @@ index 03bb374..e972c5f 100755 #: xbmc/dialogs/GUIDialogFavourites.cpp msgctxt "#15015" diff --git a/system/settings/settings.xml b/system/settings/settings.xml -index 0426ff2..0a69e02 100644 +index e117a9d..bd0f3c7 100644 --- a/system/settings/settings.xml +++ b/system/settings/settings.xml @@ -1858,6 +1858,11 @@ @@ -12428,10 +12428,10 @@ index 4809821..1ad26b2 100644 1.8.4 -From cda408e90650ba90f47ea9cbee2a869dbe584bdc Mon Sep 17 00:00:00 2001 +From de1a796eb8d68ec88ffc3b4b4431e433ba76b288 Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Wed, 15 May 2013 09:14:34 +0200 -Subject: [PATCH 65/82] X11: ignore mouse move event form other windows +Subject: [PATCH 65/89] X11: ignore mouse move event form other windows --- xbmc/windowing/WinEventsX11.cpp | 4 +++- @@ -12463,10 +12463,10 @@ index 6ddaead..e4451fe 100644 1.8.4 -From 3054287536df2549990f9f98bca2836955c1bf96 Mon Sep 17 00:00:00 2001 +From b2f394a293f888a23aac68a5470bdbe8ff1b051d Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Tue, 11 Jun 2013 16:20:29 +0200 -Subject: [PATCH 66/82] renderer: allow some lateness within vblank interval +Subject: [PATCH 66/89] renderer: allow some lateness within vblank interval --- xbmc/cores/VideoRenderers/RenderManager.cpp | 12 ++++++++++-- @@ -12526,10 +12526,10 @@ index befd851..27283ec 100644 1.8.4 -From b8dde359e5ebc7734b6258ec18f072ffc761e223 Mon Sep 17 00:00:00 2001 +From b366859f9f850e5ebd9db110f0a59f6799a549eb Mon Sep 17 00:00:00 2001 From: xbmc Date: Sun, 16 Jun 2013 13:22:58 +0200 -Subject: [PATCH 67/82] X11: another fix for mouse coverage +Subject: [PATCH 67/89] X11: another fix for mouse coverage --- xbmc/windowing/WinEventsX11.cpp | 6 ++++-- @@ -12562,10 +12562,10 @@ index e4451fe..582b9f5 100644 1.8.4 -From c178f2b13f1c05086590cb29a1668779cfea959c Mon Sep 17 00:00:00 2001 +From 076fd44cb2667c74187aadee6bef4a0f9c6638f4 Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Fri, 5 Jul 2013 12:14:00 +0200 -Subject: [PATCH 68/82] X11: set windows class name +Subject: [PATCH 68/89] X11: set windows class name --- xbmc/windowing/X11/WinSystemX11.cpp | 9 ++++++++- @@ -12607,20 +12607,20 @@ index 7e4b637..44e40a3 100644 1.8.4 -From c0207d6302458e8ac54d5c60cb53225dbcf731c9 Mon Sep 17 00:00:00 2001 +From a04263e214ef25e47ac54b1002bfdec4beb4f008 Mon Sep 17 00:00:00 2001 From: spiff Date: Tue, 16 Jul 2013 14:34:04 +0200 -Subject: [PATCH 69/82] fixed: typo +Subject: [PATCH 69/89] fixed: typo --- language/English/strings.po | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/language/English/strings.po b/language/English/strings.po -index e972c5f..91a68f2 100755 +index bbc73f8..a29df53 100755 --- a/language/English/strings.po +++ b/language/English/strings.po -@@ -6392,7 +6392,7 @@ msgstr "" +@@ -6397,7 +6397,7 @@ msgstr "" #: xbmc/settings/settings.xml msgctxt "#14101" @@ -12633,17 +12633,17 @@ index e972c5f..91a68f2 100755 1.8.4 -From 43713c05a9f37cd667cb3b388b5b10648cabbdcd Mon Sep 17 00:00:00 2001 +From e66a57e5f4449af10305799b3db8d73dd47c484e Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Thu, 25 Jul 2013 17:18:13 +0200 -Subject: [PATCH 70/82] ActiveAE: slightly reduce buffer size +Subject: [PATCH 70/89] ActiveAE: slightly reduce buffer size --- xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAE.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAE.cpp b/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAE.cpp -index 753829a..dae90a9 100644 +index c0746dc..e20c12e 100644 --- a/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAE.cpp +++ b/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAE.cpp @@ -30,8 +30,8 @@ @@ -12661,10 +12661,10 @@ index 753829a..dae90a9 100644 1.8.4 -From bb041249c55db4afe41807b36a985b95d46cb02b Mon Sep 17 00:00:00 2001 +From 2b8502e684260155b8940b1895e20b15643b4f09 Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Sun, 4 Aug 2013 10:11:16 +0200 -Subject: [PATCH 71/82] Revert "vdpau: comment some features that will be added +Subject: [PATCH 71/89] Revert "vdpau: comment some features that will be added later" This reverts commit e00b4f65864d623ab4d2e9e5c06db138e661f1cf. @@ -12730,10 +12730,10 @@ index 733f4f8..33bd873 100644 1.8.4 -From 6266114d7981e5e297bddde16a61ed6201c46636 Mon Sep 17 00:00:00 2001 +From 40eb45cffaf2e9bfdc415e8bb1dcc4cd85ad31ea Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Fri, 9 Aug 2013 18:01:40 +0200 -Subject: [PATCH 72/82] X11: fix keysyms +Subject: [PATCH 72/89] X11: fix keysyms --- xbmc/windowing/WinEventsX11.cpp | 2 +- @@ -12756,10 +12756,10 @@ index 582b9f5..ca31278 100644 1.8.4 -From 9f05dee2cc63aef157d0565a80b8ea3bc76be0ff Mon Sep 17 00:00:00 2001 +From be7f6e19950c2e8d27e8d1610582014cb462d49c Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Fri, 9 Aug 2013 18:42:36 +0200 -Subject: [PATCH 73/82] X11: fix keysym for non-IM +Subject: [PATCH 73/89] X11: fix keysym for non-IM --- xbmc/windowing/WinEventsX11.cpp | 2 +- @@ -12782,10 +12782,10 @@ index ca31278..db50d3c 100644 1.8.4 -From 0f06cc527109d59dfb9ff5434df47bcad8706469 Mon Sep 17 00:00:00 2001 +From 454d6cd04fe4b9af30dec0d6e908d4d64add4c08 Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Sat, 10 Aug 2013 11:18:16 +0200 -Subject: [PATCH 74/82] add some missing multi media keys +Subject: [PATCH 74/89] add some missing multi media keys --- system/keymaps/keyboard.xml | 3 +++ @@ -12840,10 +12840,10 @@ index ee6bb69..364b45a 100644 1.8.4 -From 64ced14e215f4cf45f73bf901155c2a3e86d975d Mon Sep 17 00:00:00 2001 +From b9fbe60eca67a541e5f4b9e22a22e3db60c9908e Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Sat, 10 Aug 2013 15:32:06 +0200 -Subject: [PATCH 75/82] CWinSystemBase: keep RES_DESKTOP untouched at pos 0, +Subject: [PATCH 75/89] CWinSystemBase: keep RES_DESKTOP untouched at pos 0, fixes toggle fullscreen --- @@ -12878,10 +12878,10 @@ index bad5c95..b789134 100644 1.8.4 -From 1b33ccc3e07e9fba5f38a9bd0a36781e49968fc0 Mon Sep 17 00:00:00 2001 +From a12a98d75ca173e9ceae7add9e33b9bd4cca1976 Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Sat, 10 Aug 2013 15:53:45 +0200 -Subject: [PATCH 76/82] X11: squash multi +Subject: [PATCH 76/89] X11: squash multi --- xbmc/windowing/X11/WinSystemX11.cpp | 2 +- @@ -12904,10 +12904,10 @@ index 44e40a3..a00481e 100644 1.8.4 -From 4f496d9af238bae7091af207ce297ce3e017d1ca Mon Sep 17 00:00:00 2001 +From 36dc908397084f27c11576cef38b69dff14a292b Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Tue, 3 Sep 2013 20:46:17 +0200 -Subject: [PATCH 77/82] X11: do not poll default monitor +Subject: [PATCH 77/89] X11: do not poll default monitor --- xbmc/windowing/X11/WinSystemX11.cpp | 2 +- @@ -12930,10 +12930,10 @@ index a00481e..58ee352 100644 1.8.4 -From 6036ca0665c788a9b15e9fecdd97ec229e9266d9 Mon Sep 17 00:00:00 2001 +From b0094b70a6eb9aaa21277cbb8d917a5793f979b3 Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Thu, 12 Sep 2013 22:28:50 +0200 -Subject: [PATCH 78/82] vdpau: exit gfx lock in OnLostDevice and OnResetDevice +Subject: [PATCH 78/89] vdpau: exit gfx lock in OnLostDevice and OnResetDevice --- xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp | 8 ++++++++ @@ -12982,10 +12982,10 @@ index 33bd873..f318216 100644 1.8.4 -From 46cb4d836341ad714ebdbbc9b5c27c6a38db8d67 Mon Sep 17 00:00:00 2001 +From ca6baa72209d77f965ca73e27ff8eb83d9b930f0 Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Tue, 17 Sep 2013 18:21:43 +0200 -Subject: [PATCH 79/82] vdpau: increase timeout for display event, some systems +Subject: [PATCH 79/89] vdpau: increase timeout for display event, some systems are too slow switching refresh rate --- @@ -13009,10 +13009,10 @@ index f318216..605d83b 100644 1.8.4 -From d81a07332411952623a1b5f053b01ab2166a31e7 Mon Sep 17 00:00:00 2001 +From 75be1c5fcf7b69b1daa95620d3450322b171ddb1 Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Sat, 21 Sep 2013 14:17:09 +0200 -Subject: [PATCH 80/82] vdpau: drop old ffmpeg vdpau_render_state +Subject: [PATCH 80/89] vdpau: drop old ffmpeg vdpau_render_state --- xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp | 392 ++++++++++++++----------- @@ -13798,30 +13798,2150 @@ index db2671f..0b5239c 100644 1.8.4 -From 74110a11740b2c853d02311a3373a7bd82a6c115 Mon Sep 17 00:00:00 2001 +From d1a902490ad773e71a4cffeb06f99577e0ab6deb Mon Sep 17 00:00:00 2001 From: Rainer Hochecker -Date: Sun, 22 Sep 2013 15:03:43 +0200 -Subject: [PATCH 81/82] vdpau: reduce number of render pics to 4 +Date: Fri, 27 Sep 2013 16:04:45 +0200 +Subject: [PATCH 81/89] vdpau: clear processed pics on flush --- - xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp | 7 ++++++- - 1 file changed, 6 insertions(+), 1 deletion(-) + xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp | 20 ++++++++++++++++---- + 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp b/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp -index e0784c4..d239494 100644 +index e0784c4..da0a915 100644 --- a/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp +++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp -@@ -38,7 +38,12 @@ +@@ -2890,10 +2890,7 @@ void COutput::Flush() + if (msg->signal == CMixerDataProtocol::PICTURE) + { + CVdpauProcessedPicture pic = *(CVdpauProcessedPicture*)msg->data; +- if (pic.DVDPic.format == RENDER_FMT_VDPAU_420) +- { +- m_config.videoSurfaces->ClearRender(pic.videoSurface); +- } ++ m_bufferPool.processedPics.push(pic); + } + msg->Release(); + } +@@ -2941,6 +2938,21 @@ void COutput::Flush() + m_config.videoSurfaces->MarkRender(it2->second.sourceVuv); + } + } ++ ++ // clear processed pics ++ while(!m_bufferPool.processedPics.empty()) ++ { ++ CVdpauProcessedPicture procPic = m_bufferPool.processedPics.front(); ++ if (procPic.DVDPic.format == RENDER_FMT_VDPAU) ++ { ++ m_mixer.m_dataPort.SendOutMessage(CMixerDataProtocol::BUFFER, &procPic.outputSurface, sizeof(procPic.outputSurface)); ++ } ++ else if (procPic.DVDPic.format == RENDER_FMT_VDPAU_420) ++ { ++ m_config.videoSurfaces->ClearRender(procPic.videoSurface); ++ } ++ m_bufferPool.processedPics.pop(); ++ } + } + + bool COutput::HasWork() +-- +1.8.4 + + +From eba718f6e4e1879a73e40e9433fe2dedb3005dec Mon Sep 17 00:00:00 2001 +From: Rainer Hochecker +Date: Sat, 28 Sep 2013 19:56:19 +0200 +Subject: [PATCH 82/89] vdpau: reactivate long decoding time debug message + +--- + xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp | 9 ++++----- + 1 file changed, 4 insertions(+), 5 deletions(-) + +diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp b/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp +index da0a915..c2879bf 100644 +--- a/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp ++++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp +@@ -944,7 +944,7 @@ void CDecoder::FFDrawSlice(struct AVCodecContext *s, + return; + } + +-// uint64_t startTime = CurrentHostCounter(); ++ uint64_t startTime = CurrentHostCounter(); + uint16_t decoded, processed, rend; + vdp->m_bufferStats.Get(decoded, processed, rend); + vdp_st = vdp->m_vdpauConfig.vdpProcs.vdp_decoder_render(vdp->m_vdpauConfig.vdpDecoder, +@@ -953,10 +953,9 @@ void CDecoder::FFDrawSlice(struct AVCodecContext *s, + vdp->m_hwContext.bitstream_buffers_used, + vdp->m_hwContext.bitstream_buffers); + vdp->CheckStatus(vdp_st, __LINE__); +-// uint64_t diff = CurrentHostCounter() - startTime; +-// if (diff*1000/CurrentHostFrequency() > 30) +-// CLog::Log(LOGWARNING,"CVDPAU::DrawSlice - VdpDecoderRender long decoding: %d ms, dec: %d, proc: %d, rend: %d", (int)((diff*1000)/CurrentHostFrequency()), decoded, processed, rend); +- ++ uint64_t diff = CurrentHostCounter() - startTime; ++ if (diff*1000/CurrentHostFrequency() > 30) ++ CLog::Log(LOGDEBUG, "CVDPAU::DrawSlice - VdpDecoderRender long decoding: %d ms, dec: %d, proc: %d, rend: %d", (int)((diff*1000)/CurrentHostFrequency()), decoded, processed, rend); + } + + +-- +1.8.4 + + +From 7810cda202972dd3374573fa8d46dcf8b036d649 Mon Sep 17 00:00:00 2001 +From: Rainer Hochecker +Date: Sun, 29 Sep 2013 07:30:41 +0200 +Subject: [PATCH 83/89] vdpau: keep video surfaces for another cycle + +--- + xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp b/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp +index c2879bf..b27b18e 100644 +--- a/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp ++++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp +@@ -2308,7 +2308,9 @@ void CMixer::InitCycle() + + void CMixer::FiniCycle() + { +- while (m_mixerInput.size() > 3) ++ // Keep video surfaces for one cycle longer than used ++ // by mixer. This avoids blocking in decoder. ++ while (m_mixerInput.size() > 4) + { + CVdpauDecodedPicture &tmp = m_mixerInput.back(); + if (m_processPicture.DVDPic.format != RENDER_FMT_VDPAU_420) +-- +1.8.4 + + +From a997d61262d4f74ac15178be0427f76bd45db853 Mon Sep 17 00:00:00 2001 +From: Rainer Hochecker +Date: Mon, 30 Sep 2013 10:49:58 +0200 +Subject: [PATCH 84/89] vdpau: create only a single vdpau device + +--- + xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp | 322 ++++++++++++++++--------- + xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.h | 34 ++- + 2 files changed, 232 insertions(+), 124 deletions(-) + +diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp b/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp +index b27b18e..c8b7160 100644 +--- a/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp ++++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp +@@ -74,10 +74,192 @@ + static float studioCSCKCoeffs601[3] = {0.299, 0.587, 0.114}; //BT601 {Kr, Kg, Kb} + static float studioCSCKCoeffs709[3] = {0.2126, 0.7152, 0.0722}; //BT709 {Kr, Kg, Kb} + +-//since libvdpau 0.4, vdp_device_create_x11() installs a callback on the Display*, +-//if we unload libvdpau with dlclose(), we segfault on XCloseDisplay, +-//so we just keep a static handle to libvdpau around +-void* CDecoder::dl_handle; ++//----------------------------------------------------------------------------- ++//----------------------------------------------------------------------------- ++ ++CVDPAUContext *CVDPAUContext::m_context = 0; ++CCriticalSection CVDPAUContext::m_section; ++Display *CVDPAUContext::m_display = 0; ++void *CVDPAUContext::m_dlHandle = 0; ++ ++CVDPAUContext::CVDPAUContext() ++{ ++ m_context = 0; ++ m_refCount = 0; ++} ++ ++void CVDPAUContext::Release() ++{ ++ CSingleLock lock(m_section); ++ ++ m_refCount--; ++ if (m_refCount <= 0) ++ { ++ Close(); ++ delete this; ++ m_context = 0; ++ } ++} ++ ++void CVDPAUContext::Close() ++{ ++ CLog::Log(LOGNOTICE, "VDPAU::Close - closing decoder context"); ++ DestroyContext(); ++} ++ ++bool CVDPAUContext::EnsureContext(CVDPAUContext **ctx) ++{ ++ CSingleLock lock(m_section); ++ ++ if (m_context) ++ { ++ m_context->m_refCount++; ++ *ctx = m_context; ++ return true; ++ } ++ ++ m_context = new CVDPAUContext(); ++ *ctx = m_context; ++ { ++ CSingleLock gLock(g_graphicsContext); ++ if (!m_context->LoadSymbols() || !m_context->CreateContext()) ++ { ++ delete m_context; ++ m_context = 0; ++ return false; ++ } ++ } ++ ++ m_context->m_refCount++; ++ ++ *ctx = m_context; ++ return true; ++} ++ ++bool CVDPAUContext::LoadSymbols() ++{ ++ if (!m_dlHandle) ++ { ++ m_dlHandle = dlopen("libvdpau.so.1", RTLD_LAZY); ++ if (!m_dlHandle) ++ { ++ const char* error = dlerror(); ++ if (!error) ++ error = "dlerror() returned NULL"; ++ ++ CLog::Log(LOGERROR,"VDPAU::LoadSymbols: Unable to get handle to lib: %s", error); ++ return false; ++ } ++ } ++ ++ char* error; ++ (void)dlerror(); ++ dl_vdp_device_create_x11 = (VdpStatus (*)(Display*, int, VdpDevice*, VdpStatus (**)(VdpDevice, VdpFuncId, void**)))dlsym(m_dlHandle, (const char*)"vdp_device_create_x11"); ++ error = dlerror(); ++ if (error) ++ { ++ CLog::Log(LOGERROR,"(VDPAU) - %s in %s",error,__FUNCTION__); ++ m_vdpDevice = VDP_INVALID_HANDLE; ++ return false; ++ } ++ return true; ++} ++ ++bool CVDPAUContext::CreateContext() ++{ ++ CLog::Log(LOGNOTICE,"VDPAU::CreateContext - creating decoder context"); ++ ++ int mScreen; ++ { CSingleLock lock(g_graphicsContext); ++ if (!m_display) ++ m_display = XOpenDisplay(NULL); ++ mScreen = g_Windowing.GetCurrentScreen(); ++ } ++ ++ VdpStatus vdp_st; ++ // Create Device ++ vdp_st = dl_vdp_device_create_x11(m_display, ++ mScreen, ++ &m_vdpDevice, ++ &m_vdp_get_proc_address); ++ ++ CLog::Log(LOGNOTICE,"vdp_device = 0x%08x vdp_st = 0x%08x",m_vdpDevice,vdp_st); ++ if (vdp_st != VDP_STATUS_OK) ++ { ++ CLog::Log(LOGERROR,"(VDPAU) unable to init VDPAU - vdp_st = 0x%x. Falling back.",vdp_st); ++ m_vdpDevice = VDP_INVALID_HANDLE; ++ return false; ++ } ++ vdp_st = m_vdp_get_proc_address(m_vdpDevice, VDP_FUNC_ID_DEVICE_DESTROY, (void**)&m_vdp_device_destroy); ++ ++ return true; ++} ++ ++void CVDPAUContext::GetProcs(VDPAU_procs &procs) ++{ ++ VdpStatus vdp_st; ++ ++ procs.vdp_get_proc_address = m_vdp_get_proc_address; ++ ++#define VDP_PROC(id, proc) \ ++ do { \ ++ vdp_st = m_vdp_get_proc_address(m_vdpDevice, id, (void**)&proc); \ ++ if (vdp_st != VDP_STATUS_OK) \ ++ { \ ++ CLog::Log(LOGERROR, "CVDPAUContext::GetProcs - failed to get proc id"); \ ++ } \ ++ } while(0); ++ ++ VDP_PROC(VDP_FUNC_ID_GET_ERROR_STRING , procs.vdp_get_error_string); ++ VDP_PROC(VDP_FUNC_ID_DEVICE_DESTROY , procs.vdp_device_destroy); ++ VDP_PROC(VDP_FUNC_ID_GENERATE_CSC_MATRIX , procs.vdp_generate_csc_matrix); ++ VDP_PROC(VDP_FUNC_ID_VIDEO_SURFACE_CREATE , procs.vdp_video_surface_create); ++ VDP_PROC(VDP_FUNC_ID_VIDEO_SURFACE_DESTROY , procs.vdp_video_surface_destroy); ++ VDP_PROC(VDP_FUNC_ID_VIDEO_SURFACE_PUT_BITS_Y_CB_CR , procs.vdp_video_surface_put_bits_y_cb_cr); ++ VDP_PROC(VDP_FUNC_ID_VIDEO_SURFACE_GET_BITS_Y_CB_CR , procs.vdp_video_surface_get_bits_y_cb_cr); ++ VDP_PROC(VDP_FUNC_ID_OUTPUT_SURFACE_PUT_BITS_Y_CB_CR , procs.vdp_output_surface_put_bits_y_cb_cr); ++ VDP_PROC(VDP_FUNC_ID_OUTPUT_SURFACE_PUT_BITS_NATIVE , procs.vdp_output_surface_put_bits_native); ++ VDP_PROC(VDP_FUNC_ID_OUTPUT_SURFACE_CREATE , procs.vdp_output_surface_create); ++ VDP_PROC(VDP_FUNC_ID_OUTPUT_SURFACE_DESTROY , procs.vdp_output_surface_destroy); ++ VDP_PROC(VDP_FUNC_ID_OUTPUT_SURFACE_GET_BITS_NATIVE , procs.vdp_output_surface_get_bits_native); ++ VDP_PROC(VDP_FUNC_ID_OUTPUT_SURFACE_RENDER_OUTPUT_SURFACE, procs.vdp_output_surface_render_output_surface); ++ VDP_PROC(VDP_FUNC_ID_OUTPUT_SURFACE_PUT_BITS_INDEXED , procs.vdp_output_surface_put_bits_indexed); ++ VDP_PROC(VDP_FUNC_ID_VIDEO_MIXER_CREATE , procs.vdp_video_mixer_create); ++ VDP_PROC(VDP_FUNC_ID_VIDEO_MIXER_SET_FEATURE_ENABLES , procs.vdp_video_mixer_set_feature_enables); ++ VDP_PROC(VDP_FUNC_ID_VIDEO_MIXER_DESTROY , procs.vdp_video_mixer_destroy); ++ VDP_PROC(VDP_FUNC_ID_VIDEO_MIXER_RENDER , procs.vdp_video_mixer_render); ++ VDP_PROC(VDP_FUNC_ID_VIDEO_MIXER_SET_ATTRIBUTE_VALUES , procs.vdp_video_mixer_set_attribute_values); ++ VDP_PROC(VDP_FUNC_ID_VIDEO_MIXER_QUERY_PARAMETER_SUPPORT , procs.vdp_video_mixer_query_parameter_support); ++ VDP_PROC(VDP_FUNC_ID_VIDEO_MIXER_QUERY_FEATURE_SUPPORT , procs.vdp_video_mixer_query_feature_support); ++ VDP_PROC(VDP_FUNC_ID_DECODER_CREATE , procs.vdp_decoder_create); ++ VDP_PROC(VDP_FUNC_ID_DECODER_DESTROY , procs.vdp_decoder_destroy); ++ VDP_PROC(VDP_FUNC_ID_DECODER_RENDER , procs.vdp_decoder_render); ++ VDP_PROC(VDP_FUNC_ID_DECODER_QUERY_CAPABILITIES , procs.vdp_decoder_query_caps); ++ VDP_PROC(VDP_FUNC_ID_PRESENTATION_QUEUE_TARGET_DESTROY , procs.vdp_presentation_queue_target_destroy); ++ VDP_PROC(VDP_FUNC_ID_PRESENTATION_QUEUE_CREATE , procs.vdp_presentation_queue_create); ++ VDP_PROC(VDP_FUNC_ID_PRESENTATION_QUEUE_DESTROY , procs.vdp_presentation_queue_destroy); ++ VDP_PROC(VDP_FUNC_ID_PRESENTATION_QUEUE_DISPLAY , procs.vdp_presentation_queue_display); ++ VDP_PROC(VDP_FUNC_ID_PRESENTATION_QUEUE_BLOCK_UNTIL_SURFACE_IDLE, procs.vdp_presentation_queue_block_until_surface_idle); ++ VDP_PROC(VDP_FUNC_ID_PRESENTATION_QUEUE_TARGET_CREATE_X11 , procs.vdp_presentation_queue_target_create_x11); ++ VDP_PROC(VDP_FUNC_ID_PRESENTATION_QUEUE_QUERY_SURFACE_STATUS , procs.vdp_presentation_queue_query_surface_status); ++ VDP_PROC(VDP_FUNC_ID_PRESENTATION_QUEUE_GET_TIME , procs.vdp_presentation_queue_get_time); ++ ++#undef VDP_PROC ++} ++ ++VdpDevice CVDPAUContext::GetDevice() ++{ ++ return m_vdpDevice; ++} ++ ++void CVDPAUContext::DestroyContext() ++{ ++ if (!m_vdp_device_destroy) ++ return; ++ ++ m_vdp_device_destroy(m_vdpDevice); ++ m_vdpDevice = VDP_INVALID_HANDLE; ++} + + //----------------------------------------------------------------------------- + // VDPAU Video Surface states +@@ -253,27 +435,19 @@ bool CDecoder::Open(AVCodecContext* avctx, const enum PixelFormat, unsigned int + if ((avctx->codec_id == AV_CODEC_ID_MPEG4) && !g_advancedSettings.m_videoAllowMpeg4VDPAU) + return false; + +- if (!dl_handle) +- { +- dl_handle = dlopen("libvdpau.so.1", RTLD_LAZY); +- if (!dl_handle) +- { +- const char* error = dlerror(); +- if (!error) +- error = "dlerror() returned NULL"; ++ if (!CVDPAUContext::EnsureContext(&m_vdpauConfig.context)) ++ return false; + +- CLog::Log(LOGNOTICE,"(VDPAU) Unable to get handle to libvdpau: %s", error); +- return false; +- } +- } ++ m_vdpauConfig.context->GetProcs(m_vdpauConfig.vdpProcs); ++ m_vdpauConfig.vdpDevice = m_vdpauConfig.context->GetDevice(); ++ m_DisplayState = VDPAU_OPEN; ++ m_vdpauConfigured = false; + + if (!m_dllAvUtil.Load()) + return false; + +- InitVDPAUProcs(); + m_presentPicture = 0; + +- if (m_vdpauConfig.vdpDevice != VDP_INVALID_HANDLE) + { + SpewHardwareAvailable(); + +@@ -296,7 +470,6 @@ bool CDecoder::Open(AVCodecContext* avctx, const enum PixelFormat, unsigned int + if(vdp_st != VDP_STATUS_OK) + { + CLog::Log(LOGERROR, " (VDPAU) Error: %s(%d) checking for decoder support\n", m_vdpauConfig.vdpProcs.vdp_get_error_string(vdp_st), vdp_st); +- FiniVDPAUProcs(); + return false; + } + +@@ -336,7 +509,6 @@ void CDecoder::Close() + CSingleLock lock(m_DecoderSection); + + FiniVDPAUOutput(); +- FiniVDPAUProcs(); + m_vdpauOutput.Dispose(); + + if (m_hwContext.bitstream_buffers_allocated) +@@ -345,6 +517,10 @@ void CDecoder::Close() + } + + m_dllAvUtil.Unload(); ++ ++ if (m_vdpauConfig.context) ++ m_vdpauConfig.context->Release(); ++ m_vdpauConfig.context = 0; + } + + long CDecoder::Release() +@@ -425,7 +601,9 @@ void CDecoder::OnLostDevice() + + CSingleLock lock(m_DecoderSection); + FiniVDPAUOutput(); +- FiniVDPAUProcs(); ++ if (m_vdpauConfig.context) ++ m_vdpauConfig.context->Release(); ++ m_vdpauConfig.context = 0; + + m_DisplayState = VDPAU_LOST; + lock.Leave(); +@@ -478,9 +656,14 @@ int CDecoder::Check(AVCodecContext* avctx) + CSingleLock lock(m_DecoderSection); + + FiniVDPAUOutput(); +- FiniVDPAUProcs(); + +- InitVDPAUProcs(); ++ if (CVDPAUContext::EnsureContext(&m_vdpauConfig.context)) ++ { ++ m_vdpauConfig.context->GetProcs(m_vdpauConfig.vdpProcs); ++ m_vdpauConfig.vdpDevice = m_vdpauConfig.context->GetDevice(); ++ m_DisplayState = VDPAU_OPEN; ++ m_vdpauConfigured = false; ++ } + + if (state == VDPAU_RESET) + return VC_FLUSHED; +@@ -536,99 +719,6 @@ EINTERLACEMETHOD CDecoder::AutoInterlaceMethod() + return VS_INTERLACEMETHOD_RENDER_BOB; + } + +-void CDecoder::InitVDPAUProcs() +-{ +- char* error; +- +- (void)dlerror(); +- dl_vdp_device_create_x11 = (VdpStatus (*)(Display*, int, VdpDevice*, VdpStatus (**)(VdpDevice, VdpFuncId, void**)))dlsym(dl_handle, (const char*)"vdp_device_create_x11"); +- error = dlerror(); +- if (error) +- { +- CLog::Log(LOGERROR,"(VDPAU) - %s in %s",error,__FUNCTION__); +- m_vdpauConfig.vdpDevice = VDP_INVALID_HANDLE; +- return; +- } +- +- if (dl_vdp_device_create_x11) +- { +- m_Display = XOpenDisplay(NULL); +- } +- +- int mScreen = g_Windowing.GetCurrentScreen(); +- VdpStatus vdp_st; +- +- // Create Device +- vdp_st = dl_vdp_device_create_x11(m_Display, //x_display, +- mScreen, //x_screen, +- &m_vdpauConfig.vdpDevice, +- &m_vdpauConfig.vdpProcs.vdp_get_proc_address); +- +- CLog::Log(LOGNOTICE,"vdp_device = 0x%08x vdp_st = 0x%08x",m_vdpauConfig.vdpDevice,vdp_st); +- if (vdp_st != VDP_STATUS_OK) +- { +- CLog::Log(LOGERROR,"(VDPAU) unable to init VDPAU - vdp_st = 0x%x. Falling back.",vdp_st); +- m_vdpauConfig.vdpDevice = VDP_INVALID_HANDLE; +- return; +- } +- +-#define VDP_PROC(id, proc) \ +- do { \ +- vdp_st = m_vdpauConfig.vdpProcs.vdp_get_proc_address(m_vdpauConfig.vdpDevice, id, (void**)&proc); \ +- CheckStatus(vdp_st, __LINE__); \ +- } while(0); +- +- VDP_PROC(VDP_FUNC_ID_GET_ERROR_STRING , m_vdpauConfig.vdpProcs.vdp_get_error_string); +- VDP_PROC(VDP_FUNC_ID_DEVICE_DESTROY , m_vdpauConfig.vdpProcs.vdp_device_destroy); +- VDP_PROC(VDP_FUNC_ID_GENERATE_CSC_MATRIX , m_vdpauConfig.vdpProcs.vdp_generate_csc_matrix); +- VDP_PROC(VDP_FUNC_ID_VIDEO_SURFACE_CREATE , m_vdpauConfig.vdpProcs.vdp_video_surface_create); +- VDP_PROC(VDP_FUNC_ID_VIDEO_SURFACE_DESTROY , m_vdpauConfig.vdpProcs.vdp_video_surface_destroy); +- VDP_PROC(VDP_FUNC_ID_VIDEO_SURFACE_PUT_BITS_Y_CB_CR , m_vdpauConfig.vdpProcs.vdp_video_surface_put_bits_y_cb_cr); +- VDP_PROC(VDP_FUNC_ID_VIDEO_SURFACE_GET_BITS_Y_CB_CR , m_vdpauConfig.vdpProcs.vdp_video_surface_get_bits_y_cb_cr); +- VDP_PROC(VDP_FUNC_ID_OUTPUT_SURFACE_PUT_BITS_Y_CB_CR , m_vdpauConfig.vdpProcs.vdp_output_surface_put_bits_y_cb_cr); +- VDP_PROC(VDP_FUNC_ID_OUTPUT_SURFACE_PUT_BITS_NATIVE , m_vdpauConfig.vdpProcs.vdp_output_surface_put_bits_native); +- VDP_PROC(VDP_FUNC_ID_OUTPUT_SURFACE_CREATE , m_vdpauConfig.vdpProcs.vdp_output_surface_create); +- VDP_PROC(VDP_FUNC_ID_OUTPUT_SURFACE_DESTROY , m_vdpauConfig.vdpProcs.vdp_output_surface_destroy); +- VDP_PROC(VDP_FUNC_ID_OUTPUT_SURFACE_GET_BITS_NATIVE , m_vdpauConfig.vdpProcs.vdp_output_surface_get_bits_native); +- VDP_PROC(VDP_FUNC_ID_OUTPUT_SURFACE_RENDER_OUTPUT_SURFACE, m_vdpauConfig.vdpProcs.vdp_output_surface_render_output_surface); +- VDP_PROC(VDP_FUNC_ID_OUTPUT_SURFACE_PUT_BITS_INDEXED , m_vdpauConfig.vdpProcs.vdp_output_surface_put_bits_indexed); +- VDP_PROC(VDP_FUNC_ID_VIDEO_MIXER_CREATE , m_vdpauConfig.vdpProcs.vdp_video_mixer_create); +- VDP_PROC(VDP_FUNC_ID_VIDEO_MIXER_SET_FEATURE_ENABLES , m_vdpauConfig.vdpProcs.vdp_video_mixer_set_feature_enables); +- VDP_PROC(VDP_FUNC_ID_VIDEO_MIXER_DESTROY , m_vdpauConfig.vdpProcs.vdp_video_mixer_destroy); +- VDP_PROC(VDP_FUNC_ID_VIDEO_MIXER_RENDER , m_vdpauConfig.vdpProcs.vdp_video_mixer_render); +- VDP_PROC(VDP_FUNC_ID_VIDEO_MIXER_SET_ATTRIBUTE_VALUES , m_vdpauConfig.vdpProcs.vdp_video_mixer_set_attribute_values); +- VDP_PROC(VDP_FUNC_ID_VIDEO_MIXER_QUERY_PARAMETER_SUPPORT , m_vdpauConfig.vdpProcs.vdp_video_mixer_query_parameter_support); +- VDP_PROC(VDP_FUNC_ID_VIDEO_MIXER_QUERY_FEATURE_SUPPORT , m_vdpauConfig.vdpProcs.vdp_video_mixer_query_feature_support); +- VDP_PROC(VDP_FUNC_ID_DECODER_CREATE , m_vdpauConfig.vdpProcs.vdp_decoder_create); +- VDP_PROC(VDP_FUNC_ID_DECODER_DESTROY , m_vdpauConfig.vdpProcs.vdp_decoder_destroy); +- VDP_PROC(VDP_FUNC_ID_DECODER_RENDER , m_vdpauConfig.vdpProcs.vdp_decoder_render); +- VDP_PROC(VDP_FUNC_ID_DECODER_QUERY_CAPABILITIES , m_vdpauConfig.vdpProcs.vdp_decoder_query_caps); +- VDP_PROC(VDP_FUNC_ID_PRESENTATION_QUEUE_TARGET_DESTROY , m_vdpauConfig.vdpProcs.vdp_presentation_queue_target_destroy); +- VDP_PROC(VDP_FUNC_ID_PRESENTATION_QUEUE_CREATE , m_vdpauConfig.vdpProcs.vdp_presentation_queue_create); +- VDP_PROC(VDP_FUNC_ID_PRESENTATION_QUEUE_DESTROY , m_vdpauConfig.vdpProcs.vdp_presentation_queue_destroy); +- VDP_PROC(VDP_FUNC_ID_PRESENTATION_QUEUE_DISPLAY , m_vdpauConfig.vdpProcs.vdp_presentation_queue_display); +- VDP_PROC(VDP_FUNC_ID_PRESENTATION_QUEUE_BLOCK_UNTIL_SURFACE_IDLE, m_vdpauConfig.vdpProcs.vdp_presentation_queue_block_until_surface_idle); +- VDP_PROC(VDP_FUNC_ID_PRESENTATION_QUEUE_TARGET_CREATE_X11 , m_vdpauConfig.vdpProcs.vdp_presentation_queue_target_create_x11); +- VDP_PROC(VDP_FUNC_ID_PRESENTATION_QUEUE_QUERY_SURFACE_STATUS , m_vdpauConfig.vdpProcs.vdp_presentation_queue_query_surface_status); +- VDP_PROC(VDP_FUNC_ID_PRESENTATION_QUEUE_GET_TIME , m_vdpauConfig.vdpProcs.vdp_presentation_queue_get_time); +- +-#undef VDP_PROC +- +- // set all vdpau resources to invalid +- m_DisplayState = VDPAU_OPEN; +- m_vdpauConfigured = false; +-} +- +-void CDecoder::FiniVDPAUProcs() +-{ +- if (m_vdpauConfig.vdpDevice == VDP_INVALID_HANDLE) return; +- +- VdpStatus vdp_st; +- vdp_st = m_vdpauConfig.vdpProcs.vdp_device_destroy(m_vdpauConfig.vdpDevice); +- CheckStatus(vdp_st, __LINE__); +- m_vdpauConfig.vdpDevice = VDP_INVALID_HANDLE; +-} +- + void CDecoder::FiniVDPAUOutput() + { + if (m_vdpauConfig.vdpDevice == VDP_INVALID_HANDLE || !m_vdpauConfigured) return; +diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.h b/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.h +index 0b5239c..c8e89dc 100644 +--- a/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.h ++++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.h +@@ -169,6 +169,7 @@ class CVdpauBufferStats + */ + + class CVideoSurfaces; ++class CVDPAUContext; + + struct CVdpauConfig + { +@@ -192,6 +193,7 @@ struct CVdpauConfig + int numRenderBuffers; + uint32_t maxReferences; + bool useInteropYuv; ++ CVDPAUContext *context; + }; + + /** +@@ -539,6 +541,30 @@ class CVideoSurfaces + // VDPAU decoder + //----------------------------------------------------------------------------- + ++class CVDPAUContext ++{ ++public: ++ static bool EnsureContext(CVDPAUContext **ctx); ++ void Release(); ++ void GetProcs(VDPAU_procs &procs); ++ VdpDevice GetDevice(); ++private: ++ CVDPAUContext(); ++ void Close(); ++ bool LoadSymbols(); ++ bool CreateContext(); ++ void DestroyContext(); ++ static CVDPAUContext *m_context; ++ static CCriticalSection m_section; ++ static Display *m_display; ++ int m_refCount; ++ static void *m_dlHandle; ++ VdpDevice m_vdpDevice; ++ VdpGetProcAddress *m_vdp_get_proc_address; ++ VdpDeviceDestroy *m_vdp_device_destroy; ++ VdpStatus (*dl_vdp_device_create_x11)(Display* display, int screen, VdpDevice* device, VdpGetProcAddress **get_proc_address); ++}; ++ + /** + * VDPAU main class + */ +@@ -595,8 +621,6 @@ class CDecoder + bool ConfigVDPAU(AVCodecContext *avctx, int ref_frames); + void SpewHardwareAvailable(); + bool CheckStatus(VdpStatus vdp_st, int line); +- void InitVDPAUProcs(); +- void FiniVDPAUProcs(); + void FiniVDPAUOutput(); + void ReturnRenderPicture(CVdpauRenderPicture *renderPic); + long ReleasePicReference(); +@@ -605,10 +629,6 @@ class CDecoder + , VdpDecoderProfile &decoder_profile + , VdpChromaType &chroma_type); + +- VdpStatus (*dl_vdp_device_create_x11)(Display* display, int screen, VdpDevice* device, VdpGetProcAddress **get_proc_address); +- VdpStatus (*dl_vdp_get_proc_address)(VdpDevice device, VdpFuncId function_id, void** function_pointer); +- VdpStatus (*dl_vdp_preemption_callback_register)(VdpDevice device, VdpPreemptionCallback callback, void* context); +- + // OnLostDevice triggers transition from all states to LOST + // internal errors trigger transition from OPEN to RESET + // OnResetDevice triggers transition from LOST to RESET +@@ -621,9 +641,7 @@ class CDecoder + CCriticalSection m_DecoderSection; + CEvent m_DisplayEvent; + +- static void* dl_handle; + DllAvUtil m_dllAvUtil; +- Display* m_Display; + ThreadIdentifier m_decoderThread; + bool m_vdpauConfigured; + CVdpauConfig m_vdpauConfig; +-- +1.8.4 + + +From c742b186abd9c8fda80291c68b7c3ffca8f5bfe1 Mon Sep 17 00:00:00 2001 +From: Rainer Hochecker +Date: Mon, 30 Sep 2013 18:52:31 +0200 +Subject: [PATCH 85/89] vdpau: make sure buffers a full before returning a + picture + +--- + xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp | 21 ++++++++------------- + 1 file changed, 8 insertions(+), 13 deletions(-) + +diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp b/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp +index c8b7160..b5d7932 100644 +--- a/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp ++++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp +@@ -1102,7 +1102,12 @@ int CDecoder::Decode(AVCodecContext *avctx, AVFrame *pFrame) + uint64_t startTime = CurrentHostCounter(); + while (!retval) + { +- if (m_vdpauOutput.m_dataPort.ReceiveInMessage(&msg)) ++ // first fill the buffers to keep vdpau busy ++ if (decoded < 3) ++ { ++ retval |= VC_BUFFER; ++ } ++ else if (m_vdpauOutput.m_dataPort.ReceiveInMessage(&msg)) + { + if (msg->signal == COutputDataProtocol::PICTURE) + { +@@ -1136,19 +1141,9 @@ int CDecoder::Decode(AVCodecContext *avctx, AVFrame *pFrame) + msg->Release(); + } + +- if ((m_codecControl & DVP_FLAG_DRAIN)) ++ if (decoded < 3) + { +- if (decoded + processed + render < 4) +- { +- retval |= VC_BUFFER; +- } +- } +- else +- { +- if (decoded < 4 && (processed + render) < 3) +- { +- retval |= VC_BUFFER; +- } ++ retval |= VC_BUFFER; + } + + if (!retval && !m_inMsgEvent.WaitMSec(2000)) +-- +1.8.4 + + +From 03fe711f115a81027d12cb5ef676b6ca7539704d Mon Sep 17 00:00:00 2001 +From: Rainer Hochecker +Date: Mon, 30 Sep 2013 21:05:03 +0200 +Subject: [PATCH 86/89] vdpau: move common attributes into vdpau context + +--- + xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp | 350 +++++++++++++------------ + xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.h | 17 +- + 2 files changed, 190 insertions(+), 177 deletions(-) + +diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp b/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp +index b5d7932..3b93eda 100644 +--- a/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp ++++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp +@@ -136,6 +136,21 @@ bool CVDPAUContext::EnsureContext(CVDPAUContext **ctx) + return true; + } + ++VDPAU_procs& CVDPAUContext::GetProcs() ++{ ++ return m_vdpProcs; ++} ++ ++VdpVideoMixerFeature* CVDPAUContext::GetFeatures() ++{ ++ return m_vdpFeatures; ++} ++ ++int CVDPAUContext::GetFeatureCount() ++{ ++ return m_featureCount; ++} ++ + bool CVDPAUContext::LoadSymbols() + { + if (!m_dlHandle) +@@ -181,7 +196,7 @@ bool CVDPAUContext::CreateContext() + vdp_st = dl_vdp_device_create_x11(m_display, + mScreen, + &m_vdpDevice, +- &m_vdp_get_proc_address); ++ &m_vdpProcs.vdp_get_proc_address); + + CLog::Log(LOGNOTICE,"vdp_device = 0x%08x vdp_st = 0x%08x",m_vdpDevice,vdp_st); + if (vdp_st != VDP_STATUS_OK) +@@ -190,59 +205,58 @@ bool CVDPAUContext::CreateContext() + m_vdpDevice = VDP_INVALID_HANDLE; + return false; + } +- vdp_st = m_vdp_get_proc_address(m_vdpDevice, VDP_FUNC_ID_DEVICE_DESTROY, (void**)&m_vdp_device_destroy); + ++ QueryProcs(); ++ SpewHardwareAvailable(); + return true; + } + +-void CVDPAUContext::GetProcs(VDPAU_procs &procs) ++void CVDPAUContext::QueryProcs() + { + VdpStatus vdp_st; + +- procs.vdp_get_proc_address = m_vdp_get_proc_address; +- + #define VDP_PROC(id, proc) \ + do { \ +- vdp_st = m_vdp_get_proc_address(m_vdpDevice, id, (void**)&proc); \ ++ vdp_st = m_vdpProcs.vdp_get_proc_address(m_vdpDevice, id, (void**)&proc); \ + if (vdp_st != VDP_STATUS_OK) \ + { \ + CLog::Log(LOGERROR, "CVDPAUContext::GetProcs - failed to get proc id"); \ + } \ + } while(0); + +- VDP_PROC(VDP_FUNC_ID_GET_ERROR_STRING , procs.vdp_get_error_string); +- VDP_PROC(VDP_FUNC_ID_DEVICE_DESTROY , procs.vdp_device_destroy); +- VDP_PROC(VDP_FUNC_ID_GENERATE_CSC_MATRIX , procs.vdp_generate_csc_matrix); +- VDP_PROC(VDP_FUNC_ID_VIDEO_SURFACE_CREATE , procs.vdp_video_surface_create); +- VDP_PROC(VDP_FUNC_ID_VIDEO_SURFACE_DESTROY , procs.vdp_video_surface_destroy); +- VDP_PROC(VDP_FUNC_ID_VIDEO_SURFACE_PUT_BITS_Y_CB_CR , procs.vdp_video_surface_put_bits_y_cb_cr); +- VDP_PROC(VDP_FUNC_ID_VIDEO_SURFACE_GET_BITS_Y_CB_CR , procs.vdp_video_surface_get_bits_y_cb_cr); +- VDP_PROC(VDP_FUNC_ID_OUTPUT_SURFACE_PUT_BITS_Y_CB_CR , procs.vdp_output_surface_put_bits_y_cb_cr); +- VDP_PROC(VDP_FUNC_ID_OUTPUT_SURFACE_PUT_BITS_NATIVE , procs.vdp_output_surface_put_bits_native); +- VDP_PROC(VDP_FUNC_ID_OUTPUT_SURFACE_CREATE , procs.vdp_output_surface_create); +- VDP_PROC(VDP_FUNC_ID_OUTPUT_SURFACE_DESTROY , procs.vdp_output_surface_destroy); +- VDP_PROC(VDP_FUNC_ID_OUTPUT_SURFACE_GET_BITS_NATIVE , procs.vdp_output_surface_get_bits_native); +- VDP_PROC(VDP_FUNC_ID_OUTPUT_SURFACE_RENDER_OUTPUT_SURFACE, procs.vdp_output_surface_render_output_surface); +- VDP_PROC(VDP_FUNC_ID_OUTPUT_SURFACE_PUT_BITS_INDEXED , procs.vdp_output_surface_put_bits_indexed); +- VDP_PROC(VDP_FUNC_ID_VIDEO_MIXER_CREATE , procs.vdp_video_mixer_create); +- VDP_PROC(VDP_FUNC_ID_VIDEO_MIXER_SET_FEATURE_ENABLES , procs.vdp_video_mixer_set_feature_enables); +- VDP_PROC(VDP_FUNC_ID_VIDEO_MIXER_DESTROY , procs.vdp_video_mixer_destroy); +- VDP_PROC(VDP_FUNC_ID_VIDEO_MIXER_RENDER , procs.vdp_video_mixer_render); +- VDP_PROC(VDP_FUNC_ID_VIDEO_MIXER_SET_ATTRIBUTE_VALUES , procs.vdp_video_mixer_set_attribute_values); +- VDP_PROC(VDP_FUNC_ID_VIDEO_MIXER_QUERY_PARAMETER_SUPPORT , procs.vdp_video_mixer_query_parameter_support); +- VDP_PROC(VDP_FUNC_ID_VIDEO_MIXER_QUERY_FEATURE_SUPPORT , procs.vdp_video_mixer_query_feature_support); +- VDP_PROC(VDP_FUNC_ID_DECODER_CREATE , procs.vdp_decoder_create); +- VDP_PROC(VDP_FUNC_ID_DECODER_DESTROY , procs.vdp_decoder_destroy); +- VDP_PROC(VDP_FUNC_ID_DECODER_RENDER , procs.vdp_decoder_render); +- VDP_PROC(VDP_FUNC_ID_DECODER_QUERY_CAPABILITIES , procs.vdp_decoder_query_caps); +- VDP_PROC(VDP_FUNC_ID_PRESENTATION_QUEUE_TARGET_DESTROY , procs.vdp_presentation_queue_target_destroy); +- VDP_PROC(VDP_FUNC_ID_PRESENTATION_QUEUE_CREATE , procs.vdp_presentation_queue_create); +- VDP_PROC(VDP_FUNC_ID_PRESENTATION_QUEUE_DESTROY , procs.vdp_presentation_queue_destroy); +- VDP_PROC(VDP_FUNC_ID_PRESENTATION_QUEUE_DISPLAY , procs.vdp_presentation_queue_display); +- VDP_PROC(VDP_FUNC_ID_PRESENTATION_QUEUE_BLOCK_UNTIL_SURFACE_IDLE, procs.vdp_presentation_queue_block_until_surface_idle); +- VDP_PROC(VDP_FUNC_ID_PRESENTATION_QUEUE_TARGET_CREATE_X11 , procs.vdp_presentation_queue_target_create_x11); +- VDP_PROC(VDP_FUNC_ID_PRESENTATION_QUEUE_QUERY_SURFACE_STATUS , procs.vdp_presentation_queue_query_surface_status); +- VDP_PROC(VDP_FUNC_ID_PRESENTATION_QUEUE_GET_TIME , procs.vdp_presentation_queue_get_time); ++ VDP_PROC(VDP_FUNC_ID_GET_ERROR_STRING , m_vdpProcs.vdp_get_error_string); ++ VDP_PROC(VDP_FUNC_ID_DEVICE_DESTROY , m_vdpProcs.vdp_device_destroy); ++ VDP_PROC(VDP_FUNC_ID_GENERATE_CSC_MATRIX , m_vdpProcs.vdp_generate_csc_matrix); ++ VDP_PROC(VDP_FUNC_ID_VIDEO_SURFACE_CREATE , m_vdpProcs.vdp_video_surface_create); ++ VDP_PROC(VDP_FUNC_ID_VIDEO_SURFACE_DESTROY , m_vdpProcs.vdp_video_surface_destroy); ++ VDP_PROC(VDP_FUNC_ID_VIDEO_SURFACE_PUT_BITS_Y_CB_CR , m_vdpProcs.vdp_video_surface_put_bits_y_cb_cr); ++ VDP_PROC(VDP_FUNC_ID_VIDEO_SURFACE_GET_BITS_Y_CB_CR , m_vdpProcs.vdp_video_surface_get_bits_y_cb_cr); ++ VDP_PROC(VDP_FUNC_ID_OUTPUT_SURFACE_PUT_BITS_Y_CB_CR , m_vdpProcs.vdp_output_surface_put_bits_y_cb_cr); ++ VDP_PROC(VDP_FUNC_ID_OUTPUT_SURFACE_PUT_BITS_NATIVE , m_vdpProcs.vdp_output_surface_put_bits_native); ++ VDP_PROC(VDP_FUNC_ID_OUTPUT_SURFACE_CREATE , m_vdpProcs.vdp_output_surface_create); ++ VDP_PROC(VDP_FUNC_ID_OUTPUT_SURFACE_DESTROY , m_vdpProcs.vdp_output_surface_destroy); ++ VDP_PROC(VDP_FUNC_ID_OUTPUT_SURFACE_GET_BITS_NATIVE , m_vdpProcs.vdp_output_surface_get_bits_native); ++ VDP_PROC(VDP_FUNC_ID_OUTPUT_SURFACE_RENDER_OUTPUT_SURFACE, m_vdpProcs.vdp_output_surface_render_output_surface); ++ VDP_PROC(VDP_FUNC_ID_OUTPUT_SURFACE_PUT_BITS_INDEXED , m_vdpProcs.vdp_output_surface_put_bits_indexed); ++ VDP_PROC(VDP_FUNC_ID_VIDEO_MIXER_CREATE , m_vdpProcs.vdp_video_mixer_create); ++ VDP_PROC(VDP_FUNC_ID_VIDEO_MIXER_SET_FEATURE_ENABLES , m_vdpProcs.vdp_video_mixer_set_feature_enables); ++ VDP_PROC(VDP_FUNC_ID_VIDEO_MIXER_DESTROY , m_vdpProcs.vdp_video_mixer_destroy); ++ VDP_PROC(VDP_FUNC_ID_VIDEO_MIXER_RENDER , m_vdpProcs.vdp_video_mixer_render); ++ VDP_PROC(VDP_FUNC_ID_VIDEO_MIXER_SET_ATTRIBUTE_VALUES , m_vdpProcs.vdp_video_mixer_set_attribute_values); ++ VDP_PROC(VDP_FUNC_ID_VIDEO_MIXER_QUERY_PARAMETER_SUPPORT , m_vdpProcs.vdp_video_mixer_query_parameter_support); ++ VDP_PROC(VDP_FUNC_ID_VIDEO_MIXER_QUERY_FEATURE_SUPPORT , m_vdpProcs.vdp_video_mixer_query_feature_support); ++ VDP_PROC(VDP_FUNC_ID_DECODER_CREATE , m_vdpProcs.vdp_decoder_create); ++ VDP_PROC(VDP_FUNC_ID_DECODER_DESTROY , m_vdpProcs.vdp_decoder_destroy); ++ VDP_PROC(VDP_FUNC_ID_DECODER_RENDER , m_vdpProcs.vdp_decoder_render); ++ VDP_PROC(VDP_FUNC_ID_DECODER_QUERY_CAPABILITIES , m_vdpProcs.vdp_decoder_query_caps); ++ VDP_PROC(VDP_FUNC_ID_PRESENTATION_QUEUE_TARGET_DESTROY , m_vdpProcs.vdp_presentation_queue_target_destroy); ++ VDP_PROC(VDP_FUNC_ID_PRESENTATION_QUEUE_CREATE , m_vdpProcs.vdp_presentation_queue_create); ++ VDP_PROC(VDP_FUNC_ID_PRESENTATION_QUEUE_DESTROY , m_vdpProcs.vdp_presentation_queue_destroy); ++ VDP_PROC(VDP_FUNC_ID_PRESENTATION_QUEUE_DISPLAY , m_vdpProcs.vdp_presentation_queue_display); ++ VDP_PROC(VDP_FUNC_ID_PRESENTATION_QUEUE_BLOCK_UNTIL_SURFACE_IDLE, m_vdpProcs.vdp_presentation_queue_block_until_surface_idle); ++ VDP_PROC(VDP_FUNC_ID_PRESENTATION_QUEUE_TARGET_CREATE_X11 , m_vdpProcs.vdp_presentation_queue_target_create_x11); ++ VDP_PROC(VDP_FUNC_ID_PRESENTATION_QUEUE_QUERY_SURFACE_STATUS , m_vdpProcs.vdp_presentation_queue_query_surface_status); ++ VDP_PROC(VDP_FUNC_ID_PRESENTATION_QUEUE_GET_TIME , m_vdpProcs.vdp_presentation_queue_get_time); + + #undef VDP_PROC + } +@@ -254,13 +268,71 @@ VdpDevice CVDPAUContext::GetDevice() + + void CVDPAUContext::DestroyContext() + { +- if (!m_vdp_device_destroy) ++ if (!m_vdpProcs.vdp_device_destroy) + return; + +- m_vdp_device_destroy(m_vdpDevice); ++ m_vdpProcs.vdp_device_destroy(m_vdpDevice); + m_vdpDevice = VDP_INVALID_HANDLE; + } + ++void CVDPAUContext::SpewHardwareAvailable() //CopyrighVDPAUt (c) 2008 Wladimir J. van der Laan -- VDPInfo ++{ ++ VdpStatus rv; ++ CLog::Log(LOGNOTICE,"VDPAU Decoder capabilities:"); ++ CLog::Log(LOGNOTICE,"name level macbs width height"); ++ CLog::Log(LOGNOTICE,"------------------------------------"); ++ for(unsigned int x=0; xGetProcs(m_vdpauConfig.vdpProcs); +- m_vdpauConfig.vdpDevice = m_vdpauConfig.context->GetDevice(); + m_DisplayState = VDPAU_OPEN; + m_vdpauConfigured = false; + +@@ -449,8 +518,6 @@ bool CDecoder::Open(AVCodecContext* avctx, const enum PixelFormat, unsigned int + m_presentPicture = 0; + + { +- SpewHardwareAvailable(); +- + VdpDecoderProfile profile = 0; + if(avctx->codec_id == AV_CODEC_ID_H264) + profile = VDP_DECODER_PROFILE_H264_HIGH; +@@ -465,15 +532,15 @@ bool CDecoder::Open(AVCodecContext* avctx, const enum PixelFormat, unsigned int + + /* attempt to create a decoder with this width/height, some sizes are not supported by hw */ + VdpStatus vdp_st; +- vdp_st = m_vdpauConfig.vdpProcs.vdp_decoder_create(m_vdpauConfig.vdpDevice, profile, avctx->coded_width, avctx->coded_height, 5, &m_vdpauConfig.vdpDecoder); ++ vdp_st = m_vdpauConfig.context->GetProcs().vdp_decoder_create(m_vdpauConfig.context->GetDevice(), profile, avctx->coded_width, avctx->coded_height, 5, &m_vdpauConfig.vdpDecoder); + + if(vdp_st != VDP_STATUS_OK) + { +- CLog::Log(LOGERROR, " (VDPAU) Error: %s(%d) checking for decoder support\n", m_vdpauConfig.vdpProcs.vdp_get_error_string(vdp_st), vdp_st); ++ CLog::Log(LOGERROR, " (VDPAU) Error: %s(%d) checking for decoder support\n", m_vdpauConfig.context->GetProcs().vdp_get_error_string(vdp_st), vdp_st); + return false; + } + +- m_vdpauConfig.vdpProcs.vdp_decoder_destroy(m_vdpauConfig.vdpDecoder); ++ m_vdpauConfig.context->GetProcs().vdp_decoder_destroy(m_vdpauConfig.vdpDecoder); + CheckStatus(vdp_st, __LINE__); + } + +@@ -554,7 +621,7 @@ long CDecoder::Release() + VdpVideoSurface surf; + while((surf = m_videoSurfaces.RemoveNext(true)) != VDP_INVALID_HANDLE) + { +- m_vdpauConfig.vdpProcs.vdp_video_surface_destroy(surf); ++ m_vdpauConfig.context->GetProcs().vdp_video_surface_destroy(surf); + } + } + return IHardwareDecoder::Release(); +@@ -659,8 +726,6 @@ int CDecoder::Check(AVCodecContext* avctx) + + if (CVDPAUContext::EnsureContext(&m_vdpauConfig.context)) + { +- m_vdpauConfig.context->GetProcs(m_vdpauConfig.vdpProcs); +- m_vdpauConfig.vdpDevice = m_vdpauConfig.context->GetDevice(); + m_DisplayState = VDPAU_OPEN; + m_vdpauConfigured = false; + } +@@ -683,12 +748,7 @@ bool CDecoder::IsVDPAUFormat(PixelFormat format) + + bool CDecoder::Supports(VdpVideoMixerFeature feature) + { +- for(int i = 0; i < m_vdpauConfig.featureCount; i++) +- { +- if(m_vdpauConfig.vdpFeatures[i] == feature) +- return true; +- } +- return false; ++ return m_vdpauConfig.context->Supports(feature); + } + + bool CDecoder::Supports(EINTERLACEMETHOD method) +@@ -721,7 +781,8 @@ EINTERLACEMETHOD CDecoder::AutoInterlaceMethod() + + void CDecoder::FiniVDPAUOutput() + { +- if (m_vdpauConfig.vdpDevice == VDP_INVALID_HANDLE || !m_vdpauConfigured) return; ++ if (!m_vdpauConfigured) ++ return; + + CLog::Log(LOGNOTICE, " (VDPAU) %s", __FUNCTION__); + +@@ -731,7 +792,7 @@ void CDecoder::FiniVDPAUOutput() + + VdpStatus vdp_st; + +- vdp_st = m_vdpauConfig.vdpProcs.vdp_decoder_destroy(m_vdpauConfig.vdpDecoder); ++ vdp_st = m_vdpauConfig.context->GetProcs().vdp_decoder_destroy(m_vdpauConfig.vdpDecoder); + if (CheckStatus(vdp_st, __LINE__)) + return; + m_vdpauConfig.vdpDecoder = VDP_INVALID_HANDLE; +@@ -741,7 +802,7 @@ void CDecoder::FiniVDPAUOutput() + VdpVideoSurface surf; + while((surf = m_videoSurfaces.RemoveNext()) != VDP_INVALID_HANDLE) + { +- m_vdpauConfig.vdpProcs.vdp_video_surface_destroy(surf); ++ m_vdpauConfig.context->GetProcs().vdp_video_surface_destroy(surf); + if (CheckStatus(vdp_st, __LINE__)) + return; + } +@@ -813,7 +874,7 @@ bool CDecoder::ConfigVDPAU(AVCodecContext* avctx, int ref_frames) + else + m_vdpauConfig.maxReferences = 2; + +- vdp_st = m_vdpauConfig.vdpProcs.vdp_decoder_create(m_vdpauConfig.vdpDevice, ++ vdp_st = m_vdpauConfig.context->GetProcs().vdp_decoder_create(m_vdpauConfig.context->GetDevice(), + vdp_decoder_profile, + m_vdpauConfig.surfaceWidth, + m_vdpauConfig.surfaceHeight, +@@ -865,55 +926,6 @@ bool CDecoder::ConfigVDPAU(AVCodecContext* avctx, int ref_frames) + return true; + } + +-void CDecoder::SpewHardwareAvailable() //CopyrighVDPAUt (c) 2008 Wladimir J. van der Laan -- VDPInfo +-{ +- VdpStatus rv; +- CLog::Log(LOGNOTICE,"VDPAU Decoder capabilities:"); +- CLog::Log(LOGNOTICE,"name level macbs width height"); +- CLog::Log(LOGNOTICE,"------------------------------------"); +- for(unsigned int x=0; xcodec_id, profile, vdp->m_vdpauConfig.vdpChromaType); + +- vdp_st = vdp->m_vdpauConfig.vdpProcs.vdp_video_surface_create(vdp->m_vdpauConfig.vdpDevice, ++ vdp_st = vdp->m_vdpauConfig.context->GetProcs().vdp_video_surface_create(vdp->m_vdpauConfig.context->GetDevice(), + vdp->m_vdpauConfig.vdpChromaType, + avctx->coded_width, + avctx->coded_height, +@@ -1037,7 +1049,7 @@ void CDecoder::FFDrawSlice(struct AVCodecContext *s, + uint64_t startTime = CurrentHostCounter(); + uint16_t decoded, processed, rend; + vdp->m_bufferStats.Get(decoded, processed, rend); +- vdp_st = vdp->m_vdpauConfig.vdpProcs.vdp_decoder_render(vdp->m_vdpauConfig.vdpDecoder, ++ vdp_st = vdp->m_vdpauConfig.context->GetProcs().vdp_decoder_render(vdp->m_vdpauConfig.vdpDecoder, + surf, + (VdpPictureInfo const *)&(vdp->m_hwContext.info), + vdp->m_hwContext.bitstream_buffers_used, +@@ -1223,7 +1235,7 @@ bool CDecoder::CheckStatus(VdpStatus vdp_st, int line) + { + if (vdp_st != VDP_STATUS_OK) + { +- CLog::Log(LOGERROR, " (VDPAU) Error: %s(%d) at %s:%d\n", m_vdpauConfig.vdpProcs.vdp_get_error_string(vdp_st), vdp_st, __FILE__, line); ++ CLog::Log(LOGERROR, " (VDPAU) Error: %s(%d) at %s:%d\n", m_vdpauConfig.context->GetProcs().vdp_get_error_string(vdp_st), vdp_st, __FILE__, line); + + if(m_DisplayState == VDPAU_OPEN) + { +@@ -1677,9 +1689,9 @@ void CMixer::CreateVdpauMixer() + &m_config.vdpChromaType}; + + VdpStatus vdp_st = VDP_STATUS_ERROR; +- vdp_st = m_config.vdpProcs.vdp_video_mixer_create(m_config.vdpDevice, +- m_config.featureCount, +- m_config.vdpFeatures, ++ vdp_st = m_config.context->GetProcs().vdp_video_mixer_create(m_config.context->GetDevice(), ++ m_config.context->GetFeatureCount(), ++ m_config.context->GetFeatures(), + ARSIZE(parameters), + parameters, + parameter_values, +@@ -1766,7 +1778,7 @@ void CMixer::PostProcOff() + VDP_VIDEO_MIXER_FEATURE_INVERSE_TELECINE}; + + VdpBool enabled[]={0,0,0}; +- vdp_st = m_config.vdpProcs.vdp_video_mixer_set_feature_enables(m_videoMixer, ARSIZE(feature), feature, enabled); ++ vdp_st = m_config.context->GetProcs().vdp_video_mixer_set_feature_enables(m_videoMixer, ARSIZE(feature), feature, enabled); + CheckStatus(vdp_st, __LINE__); + + if(m_config.vdpau->Supports(VDP_VIDEO_MIXER_FEATURE_NOISE_REDUCTION)) +@@ -1774,7 +1786,7 @@ void CMixer::PostProcOff() + VdpVideoMixerFeature feature[] = { VDP_VIDEO_MIXER_FEATURE_NOISE_REDUCTION}; + + VdpBool enabled[]={0}; +- vdp_st = m_config.vdpProcs.vdp_video_mixer_set_feature_enables(m_videoMixer, ARSIZE(feature), feature, enabled); ++ vdp_st = m_config.context->GetProcs().vdp_video_mixer_set_feature_enables(m_videoMixer, ARSIZE(feature), feature, enabled); + CheckStatus(vdp_st, __LINE__); + } + +@@ -1783,7 +1795,7 @@ void CMixer::PostProcOff() + VdpVideoMixerFeature feature[] = { VDP_VIDEO_MIXER_FEATURE_SHARPNESS}; + + VdpBool enabled[]={0}; +- vdp_st = m_config.vdpProcs.vdp_video_mixer_set_feature_enables(m_videoMixer, ARSIZE(feature), feature, enabled); ++ vdp_st = m_config.context->GetProcs().vdp_video_mixer_set_feature_enables(m_videoMixer, ARSIZE(feature), feature, enabled); + CheckStatus(vdp_st, __LINE__); + } + +@@ -1895,13 +1907,13 @@ void CMixer::SetColor() + float studioCSC[3][4]; + GenerateStudioCSCMatrix(colorStandard, studioCSC); + void const * pm_CSCMatix[] = { &studioCSC }; +- vdp_st = m_config.vdpProcs.vdp_video_mixer_set_attribute_values(m_videoMixer, ARSIZE(attributes), attributes, pm_CSCMatix); ++ vdp_st = m_config.context->GetProcs().vdp_video_mixer_set_attribute_values(m_videoMixer, ARSIZE(attributes), attributes, pm_CSCMatix); + } + else + { +- vdp_st = m_config.vdpProcs.vdp_generate_csc_matrix(&m_Procamp, colorStandard, &m_CSCMatrix); ++ vdp_st = m_config.context->GetProcs().vdp_generate_csc_matrix(&m_Procamp, colorStandard, &m_CSCMatrix); + void const * pm_CSCMatix[] = { &m_CSCMatrix }; +- vdp_st = m_config.vdpProcs.vdp_video_mixer_set_attribute_values(m_videoMixer, ARSIZE(attributes), attributes, pm_CSCMatix); ++ vdp_st = m_config.context->GetProcs().vdp_video_mixer_set_attribute_values(m_videoMixer, ARSIZE(attributes), attributes, pm_CSCMatix); + } + + CheckStatus(vdp_st, __LINE__); +@@ -1919,16 +1931,16 @@ void CMixer::SetNoiseReduction() + if (!CMediaSettings::Get().GetCurrentVideoSettings().m_NoiseReduction) + { + VdpBool enabled[]= {0}; +- vdp_st = m_config.vdpProcs.vdp_video_mixer_set_feature_enables(m_videoMixer, ARSIZE(feature), feature, enabled); ++ vdp_st = m_config.context->GetProcs().vdp_video_mixer_set_feature_enables(m_videoMixer, ARSIZE(feature), feature, enabled); + CheckStatus(vdp_st, __LINE__); + return; + } + VdpBool enabled[]={1}; +- vdp_st = m_config.vdpProcs.vdp_video_mixer_set_feature_enables(m_videoMixer, ARSIZE(feature), feature, enabled); ++ vdp_st = m_config.context->GetProcs().vdp_video_mixer_set_feature_enables(m_videoMixer, ARSIZE(feature), feature, enabled); + CheckStatus(vdp_st, __LINE__); + void* nr[] = { &CMediaSettings::Get().GetCurrentVideoSettings().m_NoiseReduction }; + CLog::Log(LOGNOTICE,"Setting Noise Reduction to %f",CMediaSettings::Get().GetCurrentVideoSettings().m_NoiseReduction); +- vdp_st = m_config.vdpProcs.vdp_video_mixer_set_attribute_values(m_videoMixer, ARSIZE(attributes), attributes, nr); ++ vdp_st = m_config.context->GetProcs().vdp_video_mixer_set_attribute_values(m_videoMixer, ARSIZE(attributes), attributes, nr); + CheckStatus(vdp_st, __LINE__); + } + +@@ -1944,16 +1956,16 @@ void CMixer::SetSharpness() + if (!CMediaSettings::Get().GetCurrentVideoSettings().m_Sharpness) + { + VdpBool enabled[]={0}; +- vdp_st = m_config.vdpProcs.vdp_video_mixer_set_feature_enables(m_videoMixer, ARSIZE(feature), feature, enabled); ++ vdp_st = m_config.context->GetProcs().vdp_video_mixer_set_feature_enables(m_videoMixer, ARSIZE(feature), feature, enabled); + CheckStatus(vdp_st, __LINE__); + return; + } + VdpBool enabled[]={1}; +- vdp_st = m_config.vdpProcs.vdp_video_mixer_set_feature_enables(m_videoMixer, ARSIZE(feature), feature, enabled); ++ vdp_st = m_config.context->GetProcs().vdp_video_mixer_set_feature_enables(m_videoMixer, ARSIZE(feature), feature, enabled); + CheckStatus(vdp_st, __LINE__); + void* sh[] = { &CMediaSettings::Get().GetCurrentVideoSettings().m_Sharpness }; + CLog::Log(LOGNOTICE,"Setting Sharpness to %f",CMediaSettings::Get().GetCurrentVideoSettings().m_Sharpness); +- vdp_st = m_config.vdpProcs.vdp_video_mixer_set_attribute_values(m_videoMixer, ARSIZE(attributes), attributes, sh); ++ vdp_st = m_config.context->GetProcs().vdp_video_mixer_set_attribute_values(m_videoMixer, ARSIZE(attributes), attributes, sh); + CheckStatus(vdp_st, __LINE__); + } + +@@ -2003,7 +2015,7 @@ void CMixer::SetDeinterlacing() + if (mode == VS_DEINTERLACEMODE_OFF) + { + VdpBool enabled[] = {0,0,0}; +- vdp_st = m_config.vdpProcs.vdp_video_mixer_set_feature_enables(m_videoMixer, ARSIZE(feature), feature, enabled); ++ vdp_st = m_config.context->GetProcs().vdp_video_mixer_set_feature_enables(m_videoMixer, ARSIZE(feature), feature, enabled); + } + else + { +@@ -2012,7 +2024,7 @@ void CMixer::SetDeinterlacing() + VdpBool enabled[] = {1,0,0}; + if (g_advancedSettings.m_videoVDPAUtelecine) + enabled[2] = 1; +- vdp_st = m_config.vdpProcs.vdp_video_mixer_set_feature_enables(m_videoMixer, ARSIZE(feature), feature, enabled); ++ vdp_st = m_config.context->GetProcs().vdp_video_mixer_set_feature_enables(m_videoMixer, ARSIZE(feature), feature, enabled); + } + else if (method == VS_INTERLACEMETHOD_VDPAU_TEMPORAL + || method == VS_INTERLACEMETHOD_VDPAU_TEMPORAL_HALF) +@@ -2020,7 +2032,7 @@ void CMixer::SetDeinterlacing() + VdpBool enabled[] = {1,0,0}; + if (g_advancedSettings.m_videoVDPAUtelecine) + enabled[2] = 1; +- vdp_st = m_config.vdpProcs.vdp_video_mixer_set_feature_enables(m_videoMixer, ARSIZE(feature), feature, enabled); ++ vdp_st = m_config.context->GetProcs().vdp_video_mixer_set_feature_enables(m_videoMixer, ARSIZE(feature), feature, enabled); + } + else if (method == VS_INTERLACEMETHOD_VDPAU_TEMPORAL_SPATIAL + || method == VS_INTERLACEMETHOD_VDPAU_TEMPORAL_SPATIAL_HALF) +@@ -2028,12 +2040,12 @@ void CMixer::SetDeinterlacing() + VdpBool enabled[] = {1,1,0}; + if (g_advancedSettings.m_videoVDPAUtelecine) + enabled[2] = 1; +- vdp_st = m_config.vdpProcs.vdp_video_mixer_set_feature_enables(m_videoMixer, ARSIZE(feature), feature, enabled); ++ vdp_st = m_config.context->GetProcs().vdp_video_mixer_set_feature_enables(m_videoMixer, ARSIZE(feature), feature, enabled); + } + else + { + VdpBool enabled[]={0,0,0}; +- vdp_st = m_config.vdpProcs.vdp_video_mixer_set_feature_enables(m_videoMixer, ARSIZE(feature), feature, enabled); ++ vdp_st = m_config.context->GetProcs().vdp_video_mixer_set_feature_enables(m_videoMixer, ARSIZE(feature), feature, enabled); + } + } + CheckStatus(vdp_st, __LINE__); +@@ -2055,7 +2067,7 @@ void CMixer::SetDeintSkipChroma() + val = 0; + + void const *values[]={&val}; +- vdp_st = m_config.vdpProcs.vdp_video_mixer_set_attribute_values(m_videoMixer, ARSIZE(attribute), attribute, values); ++ vdp_st = m_config.context->GetProcs().vdp_video_mixer_set_attribute_values(m_videoMixer, ARSIZE(attribute), attribute, values); + + CheckStatus(vdp_st, __LINE__); + } +@@ -2072,63 +2084,63 @@ void CMixer::SetHWUpscaling() + if (m_config.vdpau->Supports(VDP_VIDEO_MIXER_FEATURE_HIGH_QUALITY_SCALING_L9)) + { + VdpVideoMixerFeature feature[] = { VDP_VIDEO_MIXER_FEATURE_HIGH_QUALITY_SCALING_L9 }; +- vdp_st = m_config.vdpProcs.vdp_video_mixer_set_feature_enables(m_videoMixer, ARSIZE(feature), feature, enabled); ++ vdp_st = m_config.context->GetProcs().vdp_video_mixer_set_feature_enables(m_videoMixer, ARSIZE(feature), feature, enabled); + break; + } + case 8: + if (m_config.vdpau->Supports(VDP_VIDEO_MIXER_FEATURE_HIGH_QUALITY_SCALING_L8)) + { + VdpVideoMixerFeature feature[] = { VDP_VIDEO_MIXER_FEATURE_HIGH_QUALITY_SCALING_L8 }; +- vdp_st = m_config.vdpProcs.vdp_video_mixer_set_feature_enables(m_videoMixer, ARSIZE(feature), feature, enabled); ++ vdp_st = m_config.context->GetProcs().vdp_video_mixer_set_feature_enables(m_videoMixer, ARSIZE(feature), feature, enabled); + break; + } + case 7: + if (m_config.vdpau->Supports(VDP_VIDEO_MIXER_FEATURE_HIGH_QUALITY_SCALING_L7)) + { + VdpVideoMixerFeature feature[] = { VDP_VIDEO_MIXER_FEATURE_HIGH_QUALITY_SCALING_L7 }; +- vdp_st = m_config.vdpProcs.vdp_video_mixer_set_feature_enables(m_videoMixer, ARSIZE(feature), feature, enabled); ++ vdp_st = m_config.context->GetProcs().vdp_video_mixer_set_feature_enables(m_videoMixer, ARSIZE(feature), feature, enabled); + break; + } + case 6: + if (m_config.vdpau->Supports(VDP_VIDEO_MIXER_FEATURE_HIGH_QUALITY_SCALING_L6)) + { + VdpVideoMixerFeature feature[] = { VDP_VIDEO_MIXER_FEATURE_HIGH_QUALITY_SCALING_L6 }; +- vdp_st = m_config.vdpProcs.vdp_video_mixer_set_feature_enables(m_videoMixer, ARSIZE(feature), feature, enabled); ++ vdp_st = m_config.context->GetProcs().vdp_video_mixer_set_feature_enables(m_videoMixer, ARSIZE(feature), feature, enabled); + break; + } + case 5: + if (m_config.vdpau->Supports(VDP_VIDEO_MIXER_FEATURE_HIGH_QUALITY_SCALING_L5)) + { + VdpVideoMixerFeature feature[] = { VDP_VIDEO_MIXER_FEATURE_HIGH_QUALITY_SCALING_L5 }; +- vdp_st = m_config.vdpProcs.vdp_video_mixer_set_feature_enables(m_videoMixer, ARSIZE(feature), feature, enabled); ++ vdp_st = m_config.context->GetProcs().vdp_video_mixer_set_feature_enables(m_videoMixer, ARSIZE(feature), feature, enabled); + break; + } + case 4: + if (m_config.vdpau->Supports(VDP_VIDEO_MIXER_FEATURE_HIGH_QUALITY_SCALING_L4)) + { + VdpVideoMixerFeature feature[] = { VDP_VIDEO_MIXER_FEATURE_HIGH_QUALITY_SCALING_L4 }; +- vdp_st = m_config.vdpProcs.vdp_video_mixer_set_feature_enables(m_videoMixer, ARSIZE(feature), feature, enabled); ++ vdp_st = m_config.context->GetProcs().vdp_video_mixer_set_feature_enables(m_videoMixer, ARSIZE(feature), feature, enabled); + break; + } + case 3: + if (m_config.vdpau->Supports(VDP_VIDEO_MIXER_FEATURE_HIGH_QUALITY_SCALING_L3)) + { + VdpVideoMixerFeature feature[] = { VDP_VIDEO_MIXER_FEATURE_HIGH_QUALITY_SCALING_L3 }; +- vdp_st = m_config.vdpProcs.vdp_video_mixer_set_feature_enables(m_videoMixer, ARSIZE(feature), feature, enabled); ++ vdp_st = m_config.context->GetProcs().vdp_video_mixer_set_feature_enables(m_videoMixer, ARSIZE(feature), feature, enabled); + break; + } + case 2: + if (m_config.vdpau->Supports(VDP_VIDEO_MIXER_FEATURE_HIGH_QUALITY_SCALING_L2)) + { + VdpVideoMixerFeature feature[] = { VDP_VIDEO_MIXER_FEATURE_HIGH_QUALITY_SCALING_L2 }; +- vdp_st = m_config.vdpProcs.vdp_video_mixer_set_feature_enables(m_videoMixer, ARSIZE(feature), feature, enabled); ++ vdp_st = m_config.context->GetProcs().vdp_video_mixer_set_feature_enables(m_videoMixer, ARSIZE(feature), feature, enabled); + break; + } + case 1: + if (m_config.vdpau->Supports(VDP_VIDEO_MIXER_FEATURE_HIGH_QUALITY_SCALING_L1)) + { + VdpVideoMixerFeature feature[] = { VDP_VIDEO_MIXER_FEATURE_HIGH_QUALITY_SCALING_L1 }; +- vdp_st = m_config.vdpProcs.vdp_video_mixer_set_feature_enables(m_videoMixer, ARSIZE(feature), feature, enabled); ++ vdp_st = m_config.context->GetProcs().vdp_video_mixer_set_feature_enables(m_videoMixer, ARSIZE(feature), feature, enabled); + break; + } + default: +@@ -2150,7 +2162,7 @@ void CMixer::DisableHQScaling() + { + VdpVideoMixerFeature feature[] = { VDP_VIDEO_MIXER_FEATURE_HIGH_QUALITY_SCALING_L1 }; + VdpBool enabled[]={0}; +- vdp_st = m_config.vdpProcs.vdp_video_mixer_set_feature_enables(m_videoMixer, ARSIZE(feature), feature, enabled); ++ vdp_st = m_config.context->GetProcs().vdp_video_mixer_set_feature_enables(m_videoMixer, ARSIZE(feature), feature, enabled); + CheckStatus(vdp_st, __LINE__); + } + +@@ -2158,7 +2170,7 @@ void CMixer::DisableHQScaling() + { + VdpVideoMixerFeature feature[] = { VDP_VIDEO_MIXER_FEATURE_HIGH_QUALITY_SCALING_L2 }; + VdpBool enabled[]={0}; +- vdp_st = m_config.vdpProcs.vdp_video_mixer_set_feature_enables(m_videoMixer, ARSIZE(feature), feature, enabled); ++ vdp_st = m_config.context->GetProcs().vdp_video_mixer_set_feature_enables(m_videoMixer, ARSIZE(feature), feature, enabled); + CheckStatus(vdp_st, __LINE__); + } + +@@ -2166,7 +2178,7 @@ void CMixer::DisableHQScaling() + { + VdpVideoMixerFeature feature[] = { VDP_VIDEO_MIXER_FEATURE_HIGH_QUALITY_SCALING_L3 }; + VdpBool enabled[]={0}; +- vdp_st = m_config.vdpProcs.vdp_video_mixer_set_feature_enables(m_videoMixer, ARSIZE(feature), feature, enabled); ++ vdp_st = m_config.context->GetProcs().vdp_video_mixer_set_feature_enables(m_videoMixer, ARSIZE(feature), feature, enabled); + CheckStatus(vdp_st, __LINE__); + } + +@@ -2174,7 +2186,7 @@ void CMixer::DisableHQScaling() + { + VdpVideoMixerFeature feature[] = { VDP_VIDEO_MIXER_FEATURE_HIGH_QUALITY_SCALING_L4 }; + VdpBool enabled[]={0}; +- vdp_st = m_config.vdpProcs.vdp_video_mixer_set_feature_enables(m_videoMixer, ARSIZE(feature), feature, enabled); ++ vdp_st = m_config.context->GetProcs().vdp_video_mixer_set_feature_enables(m_videoMixer, ARSIZE(feature), feature, enabled); + CheckStatus(vdp_st, __LINE__); + } + +@@ -2182,7 +2194,7 @@ void CMixer::DisableHQScaling() + { + VdpVideoMixerFeature feature[] = { VDP_VIDEO_MIXER_FEATURE_HIGH_QUALITY_SCALING_L5 }; + VdpBool enabled[]={0}; +- vdp_st = m_config.vdpProcs.vdp_video_mixer_set_feature_enables(m_videoMixer, ARSIZE(feature), feature, enabled); ++ vdp_st = m_config.context->GetProcs().vdp_video_mixer_set_feature_enables(m_videoMixer, ARSIZE(feature), feature, enabled); + CheckStatus(vdp_st, __LINE__); + } + +@@ -2190,7 +2202,7 @@ void CMixer::DisableHQScaling() + { + VdpVideoMixerFeature feature[] = { VDP_VIDEO_MIXER_FEATURE_HIGH_QUALITY_SCALING_L6 }; + VdpBool enabled[]={0}; +- vdp_st = m_config.vdpProcs.vdp_video_mixer_set_feature_enables(m_videoMixer, ARSIZE(feature), feature, enabled); ++ vdp_st = m_config.context->GetProcs().vdp_video_mixer_set_feature_enables(m_videoMixer, ARSIZE(feature), feature, enabled); + CheckStatus(vdp_st, __LINE__); + } + +@@ -2198,7 +2210,7 @@ void CMixer::DisableHQScaling() + { + VdpVideoMixerFeature feature[] = { VDP_VIDEO_MIXER_FEATURE_HIGH_QUALITY_SCALING_L7 }; + VdpBool enabled[]={0}; +- vdp_st = m_config.vdpProcs.vdp_video_mixer_set_feature_enables(m_videoMixer, ARSIZE(feature), feature, enabled); ++ vdp_st = m_config.context->GetProcs().vdp_video_mixer_set_feature_enables(m_videoMixer, ARSIZE(feature), feature, enabled); + CheckStatus(vdp_st, __LINE__); + } + +@@ -2206,7 +2218,7 @@ void CMixer::DisableHQScaling() + { + VdpVideoMixerFeature feature[] = { VDP_VIDEO_MIXER_FEATURE_HIGH_QUALITY_SCALING_L8 }; + VdpBool enabled[]={0}; +- vdp_st = m_config.vdpProcs.vdp_video_mixer_set_feature_enables(m_videoMixer, ARSIZE(feature), feature, enabled); ++ vdp_st = m_config.context->GetProcs().vdp_video_mixer_set_feature_enables(m_videoMixer, ARSIZE(feature), feature, enabled); + CheckStatus(vdp_st, __LINE__); + } + +@@ -2214,7 +2226,7 @@ void CMixer::DisableHQScaling() + { + VdpVideoMixerFeature feature[] = { VDP_VIDEO_MIXER_FEATURE_HIGH_QUALITY_SCALING_L9 }; + VdpBool enabled[]={0}; +- vdp_st = m_config.vdpProcs.vdp_video_mixer_set_feature_enables(m_videoMixer, ARSIZE(feature), feature, enabled); ++ vdp_st = m_config.context->GetProcs().vdp_video_mixer_set_feature_enables(m_videoMixer, ARSIZE(feature), feature, enabled); + CheckStatus(vdp_st, __LINE__); + } + } +@@ -2245,7 +2257,7 @@ void CMixer::Uninit() + { + m_outputSurfaces.pop(); + } +- m_config.vdpProcs.vdp_video_mixer_destroy(m_videoMixer); ++ m_config.context->GetProcs().vdp_video_mixer_destroy(m_videoMixer); + + delete [] m_BlackBar; + } +@@ -2498,7 +2510,7 @@ void CMixer::ProcessPicture() + destRect.y1 = m_config.outHeight; + + // start vdpau video mixer +- vdp_st = m_config.vdpProcs.vdp_video_mixer_render(m_videoMixer, ++ vdp_st = m_config.context->GetProcs().vdp_video_mixer_render(m_videoMixer, + VDP_INVALID_HANDLE, + 0, + m_mixerfield, +@@ -2526,7 +2538,7 @@ void CMixer::ProcessPicture() + clipRect.y1 = clipRect.y0 + 2; + uint32_t *data[] = {m_BlackBar}; + uint32_t pitches[] = {destRect.x1}; +- vdp_st = m_config.vdpProcs.vdp_output_surface_put_bits_native(m_processPicture.outputSurface, ++ vdp_st = m_config.context->GetProcs().vdp_output_surface_put_bits_native(m_processPicture.outputSurface, + (void**)data, + pitches, + &clipRect); +@@ -2534,7 +2546,7 @@ void CMixer::ProcessPicture() + + clipRect = destRect; + clipRect.y0 = clipRect.y1 - 2; +- vdp_st = m_config.vdpProcs.vdp_output_surface_put_bits_native(m_processPicture.outputSurface, ++ vdp_st = m_config.context->GetProcs().vdp_output_surface_put_bits_native(m_processPicture.outputSurface, + (void**)data, + pitches, + &clipRect); +@@ -2547,7 +2559,7 @@ bool CMixer::CheckStatus(VdpStatus vdp_st, int line) + { + if (vdp_st != VDP_STATUS_OK) + { +- CLog::Log(LOGERROR, " (VDPAU) Error: %s(%d) at %s:%d\n", m_config.vdpProcs.vdp_get_error_string(vdp_st), vdp_st, __FILE__, line); ++ CLog::Log(LOGERROR, " (VDPAU) Error: %s(%d) at %s:%d\n", m_config.context->GetProcs().vdp_get_error_string(vdp_st), vdp_st, __FILE__, line); + m_vdpError = true; + return true; + } +@@ -3076,7 +3088,7 @@ CVdpauRenderPicture* COutput::ProcessMixerPicture() + pixmap->DVDPic = pic.DVDPic; + pixmap->id = i; + m_bufferPool.notVisiblePixmaps.push_back(i); +- m_config.vdpProcs.vdp_presentation_queue_display(pixmap->vdp_flip_queue, ++ m_config.context->GetProcs().vdp_presentation_queue_display(pixmap->vdp_flip_queue, + pixmap->surface,0,0,0); + } + if (!m_bufferPool.notVisiblePixmaps.empty() && !m_bufferPool.freeRenderPics.empty()) +@@ -3086,7 +3098,7 @@ CVdpauRenderPicture* COutput::ProcessMixerPicture() + VdpPresentationQueueStatus status; + int idx = m_bufferPool.notVisiblePixmaps.front(); + VdpauBufferPool::Pixmaps *pixmap = &m_bufferPool.pixmaps[idx]; +- vdp_st = m_config.vdpProcs.vdp_presentation_queue_query_surface_status( ++ vdp_st = m_config.context->GetProcs().vdp_presentation_queue_query_surface_status( + pixmap->vdp_flip_queue, pixmap->surface, &status, &time); + + if (vdp_st == VDP_STATUS_OK && status == VDP_PRESENTATION_QUEUE_STATUS_VISIBLE) +@@ -3289,7 +3301,7 @@ bool COutput::EnsureBufferPool() + VdpOutputSurface outputSurface; + for (int i = m_bufferPool.outputSurfaces.size(); i < m_bufferPool.numOutputSurfaces; i++) + { +- vdp_st = m_config.vdpProcs.vdp_output_surface_create(m_config.vdpDevice, ++ vdp_st = m_config.context->GetProcs().vdp_output_surface_create(m_config.context->GetDevice(), + VDP_RGBA_FORMAT_B8G8R8A8, + m_config.outWidth, + m_config.outHeight, +@@ -3318,13 +3330,13 @@ bool COutput::EnsureBufferPool() + pixmap.vdp_flip_target = VDP_INVALID_HANDLE; + MakePixmap(pixmap); + glXMakeCurrent(m_Display, None, NULL); +- vdp_st = m_config.vdpProcs.vdp_presentation_queue_target_create_x11(m_config.vdpDevice, ++ vdp_st = m_config.context->GetProcs().vdp_presentation_queue_target_create_x11(m_config.context->GetDevice(), + pixmap.pixmap, //x_window, + &pixmap.vdp_flip_target); + + CheckStatus(vdp_st, __LINE__); + +- vdp_st = m_config.vdpProcs.vdp_presentation_queue_create(m_config.vdpDevice, ++ vdp_st = m_config.context->GetProcs().vdp_presentation_queue_create(m_config.context->GetDevice(), + pixmap.vdp_flip_target, + &pixmap.vdp_flip_queue); + CheckStatus(vdp_st, __LINE__); +@@ -3352,12 +3364,12 @@ void COutput::ReleaseBufferPool() + { + if (m_bufferPool.pixmaps[i].vdp_flip_queue != VDP_INVALID_HANDLE) + { +- vdp_st = m_config.vdpProcs.vdp_presentation_queue_destroy(m_bufferPool.pixmaps[i].vdp_flip_queue); ++ vdp_st = m_config.context->GetProcs().vdp_presentation_queue_destroy(m_bufferPool.pixmaps[i].vdp_flip_queue); + CheckStatus(vdp_st, __LINE__); + } + if (m_bufferPool.pixmaps[i].vdp_flip_target != VDP_INVALID_HANDLE) + { +- vdp_st = m_config.vdpProcs.vdp_presentation_queue_target_destroy(m_bufferPool.pixmaps[i].vdp_flip_target); ++ vdp_st = m_config.context->GetProcs().vdp_presentation_queue_target_destroy(m_bufferPool.pixmaps[i].vdp_flip_target); + CheckStatus(vdp_st, __LINE__); + } + if (m_bufferPool.pixmaps[i].glPixmap) +@@ -3377,7 +3389,7 @@ void COutput::ReleaseBufferPool() + { + if (m_bufferPool.outputSurfaces[i] == VDP_INVALID_HANDLE) + continue; +- vdp_st = m_config.vdpProcs.vdp_output_surface_destroy(m_bufferPool.outputSurfaces[i]); ++ vdp_st = m_config.context->GetProcs().vdp_output_surface_destroy(m_bufferPool.outputSurfaces[i]); + CheckStatus(vdp_st, __LINE__); + } + m_bufferPool.outputSurfaces.clear(); +@@ -3466,7 +3478,7 @@ void COutput::PreCleanup() + m_bufferPool.glOutputSurfaceMap.erase(it_map); + #endif + +- vdp_st = m_config.vdpProcs.vdp_output_surface_destroy(m_bufferPool.outputSurfaces[i]); ++ vdp_st = m_config.context->GetProcs().vdp_output_surface_destroy(m_bufferPool.outputSurfaces[i]); + CheckStatus(vdp_st, __LINE__); + + m_bufferPool.outputSurfaces[i] = VDP_INVALID_HANDLE; +@@ -3625,7 +3637,7 @@ bool COutput::GLInit() + if (!m_config.usePixmaps) + { + while (glGetError() != GL_NO_ERROR); +- glVDPAUInitNV(reinterpret_cast(m_config.vdpDevice), reinterpret_cast(m_config.vdpProcs.vdp_get_proc_address)); ++ glVDPAUInitNV(reinterpret_cast(m_config.context->GetDevice()), reinterpret_cast(m_config.context->GetProcs().vdp_get_proc_address)); + if (glGetError() != GL_NO_ERROR) + { + CLog::Log(LOGERROR, "VDPAU::COutput - GLInitInterop glVDPAUInitNV failed"); +@@ -3823,7 +3835,7 @@ bool COutput::CheckStatus(VdpStatus vdp_st, int line) + { + if (vdp_st != VDP_STATUS_OK) + { +- CLog::Log(LOGERROR, " (VDPAU) Error: %s(%d) at %s:%d\n", m_config.vdpProcs.vdp_get_error_string(vdp_st), vdp_st, __FILE__, line); ++ CLog::Log(LOGERROR, " (VDPAU) Error: %s(%d) at %s:%d\n", m_config.context->GetProcs().vdp_get_error_string(vdp_st), vdp_st, __FILE__, line); + m_vdpError = true; + return true; + } +diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.h b/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.h +index c8e89dc..07a98a2 100644 +--- a/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.h ++++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.h +@@ -179,15 +179,11 @@ struct CVdpauConfig + int vidHeight; + int outWidth; + int outHeight; +- VDPAU_procs vdpProcs; +- VdpDevice vdpDevice; + VdpDecoder vdpDecoder; + VdpChromaType vdpChromaType; + CVdpauBufferStats *stats; + CDecoder *vdpau; +- int featureCount; + int upscale; +- VdpVideoMixerFeature vdpFeatures[14]; + CVideoSurfaces *videoSurfaces; + bool usePixmaps; + int numRenderBuffers; +@@ -546,22 +542,28 @@ class CVDPAUContext + public: + static bool EnsureContext(CVDPAUContext **ctx); + void Release(); +- void GetProcs(VDPAU_procs &procs); ++ VDPAU_procs& GetProcs(); + VdpDevice GetDevice(); ++ bool Supports(VdpVideoMixerFeature feature); ++ VdpVideoMixerFeature* GetFeatures(); ++ int GetFeatureCount(); + private: + CVDPAUContext(); + void Close(); + bool LoadSymbols(); + bool CreateContext(); + void DestroyContext(); ++ void QueryProcs(); ++ void SpewHardwareAvailable(); + static CVDPAUContext *m_context; + static CCriticalSection m_section; + static Display *m_display; + int m_refCount; ++ VdpVideoMixerFeature m_vdpFeatures[14]; ++ int m_featureCount; + static void *m_dlHandle; + VdpDevice m_vdpDevice; +- VdpGetProcAddress *m_vdp_get_proc_address; +- VdpDeviceDestroy *m_vdp_device_destroy; ++ VDPAU_procs m_vdpProcs; + VdpStatus (*dl_vdp_device_create_x11)(Display* display, int screen, VdpDevice* device, VdpGetProcAddress **get_proc_address); + }; + +@@ -619,7 +621,6 @@ class CDecoder + protected: + void SetWidthHeight(int width, int height); + bool ConfigVDPAU(AVCodecContext *avctx, int ref_frames); +- void SpewHardwareAvailable(); + bool CheckStatus(VdpStatus vdp_st, int line); + void FiniVDPAUOutput(); + void ReturnRenderPicture(CVdpauRenderPicture *renderPic); +-- +1.8.4 + + +From eaad4ad62d588c9cc7d90af5dfded1b33bfe904e Mon Sep 17 00:00:00 2001 +From: Rainer Hochecker +Date: Mon, 30 Sep 2013 21:30:28 +0200 +Subject: [PATCH 87/89] vdpau: drop pixmap magic, it violates the spec + +--- + xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp | 328 ++----------------------- + xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.h | 31 --- + 2 files changed, 17 insertions(+), 342 deletions(-) + +diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp b/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp +index 3b93eda..d844993 100644 +--- a/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp ++++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp +@@ -249,15 +249,6 @@ void CVDPAUContext::QueryProcs() + VDP_PROC(VDP_FUNC_ID_DECODER_DESTROY , m_vdpProcs.vdp_decoder_destroy); + VDP_PROC(VDP_FUNC_ID_DECODER_RENDER , m_vdpProcs.vdp_decoder_render); + VDP_PROC(VDP_FUNC_ID_DECODER_QUERY_CAPABILITIES , m_vdpProcs.vdp_decoder_query_caps); +- VDP_PROC(VDP_FUNC_ID_PRESENTATION_QUEUE_TARGET_DESTROY , m_vdpProcs.vdp_presentation_queue_target_destroy); +- VDP_PROC(VDP_FUNC_ID_PRESENTATION_QUEUE_CREATE , m_vdpProcs.vdp_presentation_queue_create); +- VDP_PROC(VDP_FUNC_ID_PRESENTATION_QUEUE_DESTROY , m_vdpProcs.vdp_presentation_queue_destroy); +- VDP_PROC(VDP_FUNC_ID_PRESENTATION_QUEUE_DISPLAY , m_vdpProcs.vdp_presentation_queue_display); +- VDP_PROC(VDP_FUNC_ID_PRESENTATION_QUEUE_BLOCK_UNTIL_SURFACE_IDLE, m_vdpProcs.vdp_presentation_queue_block_until_surface_idle); +- VDP_PROC(VDP_FUNC_ID_PRESENTATION_QUEUE_TARGET_CREATE_X11 , m_vdpProcs.vdp_presentation_queue_target_create_x11); +- VDP_PROC(VDP_FUNC_ID_PRESENTATION_QUEUE_QUERY_SURFACE_STATUS , m_vdpProcs.vdp_presentation_queue_query_surface_status); +- VDP_PROC(VDP_FUNC_ID_PRESENTATION_QUEUE_GET_TIME , m_vdpProcs.vdp_presentation_queue_get_time); +- + #undef VDP_PROC + } + +@@ -757,11 +748,8 @@ bool CDecoder::Supports(EINTERLACEMETHOD method) + || method == VS_INTERLACEMETHOD_AUTO) + return true; + +- if (!m_vdpauConfig.usePixmaps) +- { +- if (method == VS_INTERLACEMETHOD_RENDER_BOB) +- return true; +- } ++ if (method == VS_INTERLACEMETHOD_RENDER_BOB) ++ return true; + + if (method == VS_INTERLACEMETHOD_VDPAU_INVERSE_TELECINE) + return false; +@@ -897,15 +885,6 @@ bool CDecoder::ConfigVDPAU(AVCodecContext* avctx, int ref_frames) + sizeof(m_vdpauConfig))) + { + bool success = reply->signal == COutputControlProtocol::ACC ? true : false; +- if (success) +- { +- CVdpauConfig *data; +- data = (CVdpauConfig*)reply->data; +- if (data) +- { +- m_vdpauConfig.usePixmaps = data->usePixmaps; +- } +- } + reply->Release(); + if (!success) + { +@@ -2961,7 +2940,6 @@ bool COutput::Uninit() + { + m_mixer.Dispose(); + GLUnmapSurfaces(); +- GLUnbindPixmaps(); + ReleaseBufferPool(); + DestroyGlxContext(); + return true; +@@ -3055,69 +3033,16 @@ void COutput::Flush() + + bool COutput::HasWork() + { +- if (m_config.usePixmaps) +- { +- if (!m_bufferPool.processedPics.empty() && FindFreePixmap() >= 0) +- return true; +- if (!m_bufferPool.notVisiblePixmaps.empty() && !m_bufferPool.freeRenderPics.empty()) +- return true; +- return false; +- } +- else +- { +- if (!m_bufferPool.processedPics.empty() && !m_bufferPool.freeRenderPics.empty()) +- return true; +- return false; +- } ++ if (!m_bufferPool.processedPics.empty() && !m_bufferPool.freeRenderPics.empty()) ++ return true; ++ return false; + } + + CVdpauRenderPicture* COutput::ProcessMixerPicture() + { + CVdpauRenderPicture *retPic = NULL; + +- if (m_config.usePixmaps) +- { +- if (!m_bufferPool.processedPics.empty() && FindFreePixmap() >= 0) +- { +- unsigned int i = FindFreePixmap(); +- VdpauBufferPool::Pixmaps *pixmap = &m_bufferPool.pixmaps[i]; +- pixmap->used = true; +- CVdpauProcessedPicture pic = m_bufferPool.processedPics.front(); +- m_bufferPool.processedPics.pop(); +- pixmap->surface = pic.outputSurface; +- pixmap->DVDPic = pic.DVDPic; +- pixmap->id = i; +- m_bufferPool.notVisiblePixmaps.push_back(i); +- m_config.context->GetProcs().vdp_presentation_queue_display(pixmap->vdp_flip_queue, +- pixmap->surface,0,0,0); +- } +- if (!m_bufferPool.notVisiblePixmaps.empty() && !m_bufferPool.freeRenderPics.empty()) +- { +- VdpStatus vdp_st; +- VdpTime time; +- VdpPresentationQueueStatus status; +- int idx = m_bufferPool.notVisiblePixmaps.front(); +- VdpauBufferPool::Pixmaps *pixmap = &m_bufferPool.pixmaps[idx]; +- vdp_st = m_config.context->GetProcs().vdp_presentation_queue_query_surface_status( +- pixmap->vdp_flip_queue, pixmap->surface, &status, &time); +- +- if (vdp_st == VDP_STATUS_OK && status == VDP_PRESENTATION_QUEUE_STATUS_VISIBLE) +- { +- int idx = m_bufferPool.freeRenderPics.front(); +- retPic = m_bufferPool.allRenderPics[idx]; +- m_bufferPool.freeRenderPics.pop_front(); +- m_bufferPool.usedRenderPics.push_back(idx); +- retPic->sourceIdx = pixmap->id; +- retPic->DVDPic = pixmap->DVDPic; +- retPic->valid = true; +- retPic->texture[0] = pixmap->texture; +- retPic->crop = CRect(0,0,0,0); +- m_bufferPool.notVisiblePixmaps.pop_front(); +- m_mixer.m_dataPort.SendOutMessage(CMixerDataProtocol::BUFFER, &pixmap->surface, sizeof(pixmap->surface)); +- } +- } +- } // pixmap +- else if (!m_bufferPool.processedPics.empty() && !m_bufferPool.freeRenderPics.empty()) ++ if (!m_bufferPool.processedPics.empty() && !m_bufferPool.freeRenderPics.empty()) + { + int idx = m_bufferPool.freeRenderPics.front(); + retPic = m_bufferPool.allRenderPics[idx]; +@@ -3247,12 +3172,7 @@ bool COutput::ProcessSyncPicture() + + void COutput::ProcessReturnPicture(CVdpauRenderPicture *pic) + { +- if (m_config.usePixmaps) +- { +- m_bufferPool.pixmaps[pic->sourceIdx].used = false; +- return; +- } +- else if (pic->DVDPic.format == RENDER_FMT_VDPAU_420) ++ if (pic->DVDPic.format == RENDER_FMT_VDPAU_420) + { + std::map::iterator it; + it = m_bufferPool.glVideoSurfaceMap.find(pic->sourceIdx); +@@ -3278,21 +3198,6 @@ void COutput::ProcessReturnPicture(CVdpauRenderPicture *pic) + } + } + +-int COutput::FindFreePixmap() +-{ +- // find free pixmap +- unsigned int i; +- for (i = 0; i < m_bufferPool.pixmaps.size(); ++i) +- { +- if (!m_bufferPool.pixmaps[i].used) +- break; +- } +- if (i == m_bufferPool.pixmaps.size()) +- return -1; +- else +- return i; +-} +- + bool COutput::EnsureBufferPool() + { + VdpStatus vdp_st; +@@ -3315,40 +3220,6 @@ bool COutput::EnsureBufferPool() + sizeof(VdpOutputSurface)); + CLog::Log(LOGNOTICE, "VDPAU::COutput::InitBufferPool - Output Surface created"); + } +- +- +- if (m_config.usePixmaps && m_bufferPool.pixmaps.empty()) +- { +- // create pixmpas +- VdpauBufferPool::Pixmaps pixmap; +- unsigned int numPixmaps = NUM_RENDER_PICS; +- for (unsigned int i = 0; i < numPixmaps; i++) +- { +- pixmap.pixmap = None; +- pixmap.glPixmap = None; +- pixmap.vdp_flip_queue = VDP_INVALID_HANDLE; +- pixmap.vdp_flip_target = VDP_INVALID_HANDLE; +- MakePixmap(pixmap); +- glXMakeCurrent(m_Display, None, NULL); +- vdp_st = m_config.context->GetProcs().vdp_presentation_queue_target_create_x11(m_config.context->GetDevice(), +- pixmap.pixmap, //x_window, +- &pixmap.vdp_flip_target); +- +- CheckStatus(vdp_st, __LINE__); +- +- vdp_st = m_config.context->GetProcs().vdp_presentation_queue_create(m_config.context->GetDevice(), +- pixmap.vdp_flip_target, +- &pixmap.vdp_flip_queue); +- CheckStatus(vdp_st, __LINE__); +- glXMakeCurrent(m_Display, m_glPixmap, m_glContext); +- +- pixmap.id = i; +- pixmap.used = false; +- m_bufferPool.pixmaps.push_back(pixmap); +- } +- GLBindPixmaps(); +- } +- + return true; + } + +@@ -3358,32 +3229,6 @@ void COutput::ReleaseBufferPool() + + CSingleLock lock(m_bufferPool.renderPicSec); + +- if (m_config.usePixmaps) +- { +- for (unsigned int i = 0; i < m_bufferPool.pixmaps.size(); ++i) +- { +- if (m_bufferPool.pixmaps[i].vdp_flip_queue != VDP_INVALID_HANDLE) +- { +- vdp_st = m_config.context->GetProcs().vdp_presentation_queue_destroy(m_bufferPool.pixmaps[i].vdp_flip_queue); +- CheckStatus(vdp_st, __LINE__); +- } +- if (m_bufferPool.pixmaps[i].vdp_flip_target != VDP_INVALID_HANDLE) +- { +- vdp_st = m_config.context->GetProcs().vdp_presentation_queue_target_destroy(m_bufferPool.pixmaps[i].vdp_flip_target); +- CheckStatus(vdp_st, __LINE__); +- } +- if (m_bufferPool.pixmaps[i].glPixmap) +- { +- glXDestroyPixmap(m_Display, m_bufferPool.pixmaps[i].glPixmap); +- } +- if (m_bufferPool.pixmaps[i].pixmap) +- { +- XFreePixmap(m_Display, m_bufferPool.pixmaps[i].pixmap); +- } +- } +- m_bufferPool.pixmaps.clear(); +- } +- + // release all output surfaces + for (unsigned int i = 0; i < m_bufferPool.outputSurfaces.size(); ++i) + { +@@ -3498,89 +3343,8 @@ void COutput::InitMixer() + } + } + +-bool COutput::MakePixmap(VdpauBufferPool::Pixmaps &pixmap) +-{ +- CLog::Log(LOGNOTICE,"Creating %ix%i pixmap", m_config.outWidth, m_config.outHeight); +- +- // Get our window attribs. +- XWindowAttributes wndattribs; +- XGetWindowAttributes(m_Display, g_Windowing.GetWindow(), &wndattribs); +- +- pixmap.pixmap = XCreatePixmap(m_Display, +- g_Windowing.GetWindow(), +- m_config.outWidth, +- m_config.outHeight, +- wndattribs.depth); +- if (!pixmap.pixmap) +- { +- CLog::Log(LOGERROR, "VDPAU::COUtput::MakePixmap - GLX Error: MakePixmap: Unable to create XPixmap"); +- return false; +- } +- +-// XGCValues values = {}; +-// GC xgc; +-// values.foreground = BlackPixel (m_Display, DefaultScreen (m_Display)); +-// xgc = XCreateGC(m_Display, pixmap.pixmap, GCForeground, &values); +-// XFillRectangle(m_Display, pixmap.pixmap, xgc, 0, 0, m_config.outWidth, m_config.outHeight); +-// XFreeGC(m_Display, xgc); +- +- if(!MakePixmapGL(pixmap)) +- return false; +- +- return true; +-} +- +-bool COutput::MakePixmapGL(VdpauBufferPool::Pixmaps &pixmap) +-{ +- int num=0; +- int fbConfigIndex = 0; +- +- int doubleVisAttributes[] = { +- GLX_RENDER_TYPE, GLX_RGBA_BIT, +- GLX_RED_SIZE, 8, +- GLX_GREEN_SIZE, 8, +- GLX_BLUE_SIZE, 8, +- GLX_ALPHA_SIZE, 8, +- GLX_DEPTH_SIZE, 8, +- GLX_DRAWABLE_TYPE, GLX_PIXMAP_BIT, +- GLX_BIND_TO_TEXTURE_RGBA_EXT, True, +- GLX_DOUBLEBUFFER, False, +- GLX_Y_INVERTED_EXT, True, +- GLX_X_RENDERABLE, True, +- None +- }; +- +- int pixmapAttribs[] = { +- GLX_TEXTURE_TARGET_EXT, GLX_TEXTURE_2D_EXT, +- GLX_TEXTURE_FORMAT_EXT, GLX_TEXTURE_FORMAT_RGBA_EXT, +- None +- }; +- +- GLXFBConfig *fbConfigs; +- fbConfigs = glXChooseFBConfig(m_Display, g_Windowing.GetCurrentScreen(), doubleVisAttributes, &num); +- if (fbConfigs==NULL) +- { +- CLog::Log(LOGERROR, "VDPAU::COutput::MakPixmapGL - No compatible framebuffers found"); +- return false; +- } +- fbConfigIndex = 0; +- +- pixmap.glPixmap = glXCreatePixmap(m_Display, fbConfigs[fbConfigIndex], pixmap.pixmap, pixmapAttribs); +- +- if (!pixmap.glPixmap) +- { +- CLog::Log(LOGERROR, "VDPAU::COutput::MakPixmapGL - Could not create Pixmap"); +- XFree(fbConfigs); +- return false; +- } +- XFree(fbConfigs); +- return true; +-} +- + bool COutput::GLInit() + { +- glXBindTexImageEXT = NULL; +- glXReleaseTexImageEXT = NULL; + #ifdef GL_NV_vdpau_interop + glVDPAUInitNV = NULL; + glVDPAUFiniNV = NULL; +@@ -3594,8 +3358,6 @@ bool COutput::GLInit() + glVDPAUGetSurfaceivNV = NULL; + #endif + +- m_config.usePixmaps = false; +- + #ifdef GL_NV_vdpau_interop + if (glewIsSupported("GL_NV_vdpau_interop")) + { +@@ -3625,27 +3387,21 @@ bool COutput::GLInit() + else + #endif + { +- m_config.usePixmaps = true; +- CSettings::Get().SetBool("videoplayer.usevdpaumixer",true); ++ // TODO should be detected before vdpau is opened, though very unlikely ++ // that this code is hit ++ CLog::Log(LOGERROR, "VDPAU::COutput driver does not support GL_NV_vdpau_interop"); + } +- if (!glXBindTexImageEXT) +- glXBindTexImageEXT = (PFNGLXBINDTEXIMAGEEXTPROC)glXGetProcAddress((GLubyte *) "glXBindTexImageEXT"); +- if (!glXReleaseTexImageEXT) +- glXReleaseTexImageEXT = (PFNGLXRELEASETEXIMAGEEXTPROC)glXGetProcAddress((GLubyte *) "glXReleaseTexImageEXT"); + + #ifdef GL_NV_vdpau_interop +- if (!m_config.usePixmaps) ++ while (glGetError() != GL_NO_ERROR); ++ glVDPAUInitNV(reinterpret_cast(m_config.context->GetDevice()), reinterpret_cast(m_config.context->GetProcs().vdp_get_proc_address)); ++ if (glGetError() != GL_NO_ERROR) + { +- while (glGetError() != GL_NO_ERROR); +- glVDPAUInitNV(reinterpret_cast(m_config.context->GetDevice()), reinterpret_cast(m_config.context->GetProcs().vdp_get_proc_address)); +- if (glGetError() != GL_NO_ERROR) +- { +- CLog::Log(LOGERROR, "VDPAU::COutput - GLInitInterop glVDPAUInitNV failed"); +- m_vdpError = true; +- return false; +- } +- CLog::Log(LOGNOTICE, "VDPAU::COutput: vdpau gl interop initialized"); ++ CLog::Log(LOGERROR, "VDPAU::COutput - GLInitInterop glVDPAUInitNV failed"); ++ m_vdpError = true; ++ return false; + } ++ CLog::Log(LOGNOTICE, "VDPAU::COutput: vdpau gl interop initialized"); + #endif + + #ifdef GL_ARB_sync +@@ -3662,8 +3418,6 @@ bool COutput::GLInit() + void COutput::GLMapSurfaces() + { + #ifdef GL_NV_vdpau_interop +- if (m_config.usePixmaps) +- return; + + if (m_config.useInteropYuv) + { +@@ -3757,8 +3511,6 @@ void COutput::GLMapSurfaces() + void COutput::GLUnmapSurfaces() + { + #ifdef GL_NV_vdpau_interop +- if (m_config.usePixmaps) +- return; + + { + std::map::iterator it; +@@ -3785,52 +3537,6 @@ void COutput::GLUnmapSurfaces() + #endif + } + +-void COutput::GLBindPixmaps() +-{ +- if (!m_config.usePixmaps) +- return; +- +- for (unsigned int i = 0; i < m_bufferPool.pixmaps.size(); i++) +- { +- // create texture +- glGenTextures(1, &m_bufferPool.pixmaps[i].texture); +- +- //bind texture +- glBindTexture(GL_TEXTURE_2D, m_bufferPool.pixmaps[i].texture); +- +- // bind pixmap +- glXBindTexImageEXT(m_Display, m_bufferPool.pixmaps[i].glPixmap, GLX_FRONT_LEFT_EXT, NULL); +- +- glBindTexture(GL_TEXTURE_2D, 0); +- } +- +- CLog::Log(LOGNOTICE, "VDPAU::COutput: bound pixmaps"); +-} +- +-void COutput::GLUnbindPixmaps() +-{ +- if (!m_config.usePixmaps) +- return; +- +- for (unsigned int i = 0; i < m_bufferPool.pixmaps.size(); i++) +- { +- // create texture +- if (!glIsTexture(m_bufferPool.pixmaps[i].texture)) +- continue; +- +- //bind texture +- glBindTexture(GL_TEXTURE_2D, m_bufferPool.pixmaps[i].texture); +- +- // release pixmap +- glXReleaseTexImageEXT(m_Display, m_bufferPool.pixmaps[i].glPixmap, GLX_FRONT_LEFT_EXT); +- +- glBindTexture(GL_TEXTURE_2D, 0); +- +- glDeleteTextures(1, &m_bufferPool.pixmaps[i].texture); +- } +- CLog::Log(LOGNOTICE, "VDPAU::COutput: unbound pixmaps"); +-} +- + bool COutput::CheckStatus(VdpStatus vdp_st, int line) + { + if (vdp_st != VDP_STATUS_OK) +diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.h b/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.h +index 07a98a2..abe8da2 100644 +--- a/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.h ++++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.h +@@ -103,15 +103,6 @@ struct VDPAU_procs + + VdpGenerateCSCMatrix * vdp_generate_csc_matrix; + +- VdpPresentationQueueTargetDestroy * vdp_presentation_queue_target_destroy; +- VdpPresentationQueueCreate * vdp_presentation_queue_create; +- VdpPresentationQueueDestroy * vdp_presentation_queue_destroy; +- VdpPresentationQueueDisplay * vdp_presentation_queue_display; +- VdpPresentationQueueBlockUntilSurfaceIdle * vdp_presentation_queue_block_until_surface_idle; +- VdpPresentationQueueTargetCreateX11 * vdp_presentation_queue_target_create_x11; +- VdpPresentationQueueQuerySurfaceStatus * vdp_presentation_queue_query_surface_status; +- VdpPresentationQueueGetTime * vdp_presentation_queue_get_time; +- + VdpGetErrorString * vdp_get_error_string; + + VdpDecoderCreate * vdp_decoder_create; +@@ -185,7 +176,6 @@ struct CVdpauConfig + CDecoder *vdpau; + int upscale; + CVideoSurfaces *videoSurfaces; +- bool usePixmaps; + int numRenderBuffers; + uint32_t maxReferences; + bool useInteropYuv; +@@ -363,18 +353,6 @@ struct VdpauBufferPool + { + VdpauBufferPool(); + virtual ~VdpauBufferPool(); +- struct Pixmaps +- { +- unsigned short id; +- bool used; +- DVDVideoPicture DVDPic; +- GLuint texture; +- Pixmap pixmap; +- GLXPixmap glPixmap; +- VdpPresentationQueueTarget vdp_flip_target; +- VdpPresentationQueue vdp_flip_queue; +- VdpOutputSurface surface; +- }; + struct GLVideoSurface + { + GLuint texture[4]; +@@ -386,9 +364,7 @@ struct VdpauBufferPool + }; + std::vector allRenderPics; + unsigned short numOutputSurfaces; +- std::vector pixmaps; + std::vector outputSurfaces; +- std::deque notVisiblePixmaps; + std::map glVideoSurfaceMap; + std::map glOutputSurfaceMap; + std::queue processedPics; +@@ -457,7 +433,6 @@ class COutput : private CThread + void QueueReturnPicture(CVdpauRenderPicture *pic); + void ProcessReturnPicture(CVdpauRenderPicture *pic); + bool ProcessSyncPicture(); +- int FindFreePixmap(); + bool Init(); + bool Uninit(); + void Flush(); +@@ -470,10 +445,6 @@ class COutput : private CThread + bool GLInit(); + void GLMapSurfaces(); + void GLUnmapSurfaces(); +- void GLBindPixmaps(); +- void GLUnbindPixmaps(); +- bool MakePixmap(VdpauBufferPool::Pixmaps &pixmap); +- bool MakePixmapGL(VdpauBufferPool::Pixmaps &pixmap); + bool CheckStatus(VdpStatus vdp_st, int line); + CEvent m_outMsgEvent; + CEvent *m_inMsgEvent; +@@ -494,8 +465,6 @@ class COutput : private CThread + GLXPixmap m_glPixmap; + + // gl functions +- PFNGLXBINDTEXIMAGEEXTPROC glXBindTexImageEXT; +- PFNGLXRELEASETEXIMAGEEXTPROC glXReleaseTexImageEXT; + #ifdef GL_NV_vdpau_interop + PFNGLVDPAUINITNVPROC glVDPAUInitNV; + PFNGLVDPAUFININVPROC glVDPAUFiniNV; +-- +1.8.4 + + +From fa0004505a63f88470c0afc368668939b0ac08ed Mon Sep 17 00:00:00 2001 +From: Rainer Hochecker +Date: Tue, 1 Oct 2013 17:42:01 +0200 +Subject: [PATCH 88/89] vdpau: reduce number of render pics + +--- + xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp b/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp +index d844993..f2d1c71 100644 +--- a/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp ++++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp +@@ -38,7 +38,7 @@ #include "cores/VideoRenderers/RenderFlags.h" using namespace VDPAU; -#define NUM_RENDER_PICS 9 -+ -+// we use GetAllowedReferences() - 1 output surfaces -+// this has the result that we won't wait for a free render buffer -+// in RenderManager::WaitForBuffer -+// instead we keep vdpau busy -+#define NUM_RENDER_PICS 4 ++#define NUM_RENDER_PICS 7 #define ARSIZE(x) (sizeof(x) / sizeof((x)[0])) @@ -13829,46 +15949,97 @@ index e0784c4..d239494 100644 1.8.4 -From 1b6809f4148456b550ddbdf7a843240664fba12f Mon Sep 17 00:00:00 2001 +From dc895960a515c0f5da6a722cde7598ce4559d831 Mon Sep 17 00:00:00 2001 From: Rainer Hochecker -Date: Tue, 24 Sep 2013 16:20:24 +0200 -Subject: [PATCH 82/82] vdpau: return from decode after max 50ms, required - after db6ba05611c13d07ee918918314d8f57febb4230 +Date: Tue, 1 Oct 2013 17:51:02 +0200 +Subject: [PATCH 89/89] vdpau: cosmetics --- - xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp | 12 +----------- - 1 file changed, 1 insertion(+), 11 deletions(-) + xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp | 20 +++----------------- + 1 file changed, 3 insertions(+), 17 deletions(-) diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp b/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp -index d239494..1e26d13 100644 +index f2d1c71..d383c69 100644 --- a/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp +++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp -@@ -1067,7 +1067,7 @@ int CDecoder::Decode(AVCodecContext *avctx, AVFrame *pFrame) - } - } +@@ -958,7 +958,6 @@ int CDecoder::FFGetBuffer(AVCodecContext *avctx, AVFrame *pic) -- if (!retval && !m_inMsgEvent.WaitMSec(2000)) -+ if (!retval && !m_inMsgEvent.WaitMSec(50)) - break; + void CDecoder::FFReleaseBuffer(AVCodecContext *avctx, AVFrame *pic) + { +- //CLog::Log(LOGNOTICE,"%s",__FUNCTION__); + CDVDVideoCodecFFmpeg* ctx = (CDVDVideoCodecFFmpeg*)avctx->opaque; + CDecoder* vdp = (CDecoder*)ctx->GetHardware(); + +@@ -1292,7 +1291,7 @@ void CVdpauRenderPicture::Sync() + // Mixer + //----------------------------------------------------------------------------- + CMixer::CMixer(CEvent *inMsgEvent) : +- CThread("Vdpau Mixer Thread"), ++ CThread("Vdpau Mixer"), + m_controlPort("ControlPort", inMsgEvent, &m_outMsgEvent), + m_dataPort("DataPort", inMsgEvent, &m_outMsgEvent) + { +@@ -1456,11 +1455,6 @@ void CMixer::StateMachine(int signal, Protocol *port, Message *msg) + } + else + { +-// if (m_extTimeout != 0) +-// { +-// SetPostProcFeatures(false); +-// CLog::Log(LOGWARNING,"CVDPAU::Mixer timeout - decoded: %d, outputSurf: %d", (int)m_decodedPics.size(), (int)m_outputSurfaces.size()); +-// } + m_extTimeout = 100; + } + return; +@@ -1528,11 +1522,6 @@ void CMixer::StateMachine(int signal, Protocol *port, Message *msg) + } + else + { +-// if (m_extTimeout != 0) +-// { +-// SetPostProcFeatures(false); +-// CLog::Log(LOGNOTICE,"---mixer wait2 decoded: %d, outputSurf: %d", (int)m_decodedPics.size(), (int)m_outputSurfaces.size()); +-// } + m_extTimeout = 100; + } + return; +@@ -2210,7 +2199,6 @@ void CMixer::DisableHQScaling() } - uint64_t diff = CurrentHostCounter() - startTime; -@@ -1075,16 +1075,6 @@ int CDecoder::Decode(AVCodecContext *avctx, AVFrame *pFrame) - { - m_bufferStats.SetParams(diff, m_codecControl); - } -- if (diff*1000/CurrentHostFrequency() > 50) -- CLog::Log(LOGDEBUG,"CVDPAU::Decode long wait: %d", (int)((diff*1000)/CurrentHostFrequency())); -- -- if (!retval) -- { -- CLog::Log(LOGERROR, "VDPAU::%s - timed out waiting for output message", __FUNCTION__); -- m_DisplayState = VDPAU_ERROR; -- retval |= VC_ERROR; -- } -- - return retval; } +- + void CMixer::Init() + { + m_Brightness = 0.0; +@@ -2276,10 +2264,9 @@ void CMixer::Flush() + void CMixer::InitCycle() + { + CheckFeatures(); +- uint64_t latency; + int flags; ++ uint64_t latency; + m_config.stats->GetParams(latency, flags); +- latency = (latency*1000)/CurrentHostFrequency(); + if (flags & DVP_FLAG_NO_POSTPROC) + SetPostProcFeatures(false); + else +@@ -2394,7 +2381,6 @@ void CMixer::FiniCycle() + m_config.videoSurfaces->ClearRender(tmp.videoSurface); + } + m_mixerInput.pop_back(); +-// m_config.stats->DecDecoded(); + } + } + +@@ -2574,7 +2560,7 @@ bool CMixer::CheckStatus(VdpStatus vdp_st, int line) + // Output + //----------------------------------------------------------------------------- + COutput::COutput(CEvent *inMsgEvent) : +- CThread("Vdpau Output Thread"), ++ CThread("Vdpau Output"), + m_controlPort("OutputControlPort", inMsgEvent, &m_outMsgEvent), + m_dataPort("OutputDataPort", inMsgEvent, &m_outMsgEvent), + m_mixer(&m_outMsgEvent) -- 1.8.4 diff --git a/packages/mediacenter/xbmc/patches/13.alpha-7f45288/xbmc-995.10-disable-alt-tab.patch b/packages/mediacenter/xbmc/patches/13.alpha-545fc25/xbmc-995.10-disable-alt-tab.patch similarity index 100% rename from packages/mediacenter/xbmc/patches/13.alpha-7f45288/xbmc-995.10-disable-alt-tab.patch rename to packages/mediacenter/xbmc/patches/13.alpha-545fc25/xbmc-995.10-disable-alt-tab.patch diff --git a/packages/mediacenter/xbmc/patches/13.alpha-545fc25/xbmc-AML-XB9295c3f-02-udev-mount-add-cdrom-support.patch b/packages/mediacenter/xbmc/patches/13.alpha-545fc25/xbmc-AML-XB9295c3f-02-udev-mount-add-cdrom-support.patch new file mode 100644 index 0000000000..35dfe80b6d --- /dev/null +++ b/packages/mediacenter/xbmc/patches/13.alpha-545fc25/xbmc-AML-XB9295c3f-02-udev-mount-add-cdrom-support.patch @@ -0,0 +1,17 @@ +diff -Naur xbmc-12.2-5ba69b6/xbmc/storage/linux/UDevProvider.cpp xbmc-12.2-5ba69b6.patch/xbmc/storage/linux/UDevProvider.cpp +--- xbmc-12.2-5ba69b6/xbmc/storage/linux/UDevProvider.cpp 2013-08-22 21:37:41.543830684 +0200 ++++ xbmc-12.2-5ba69b6.patch/xbmc/storage/linux/UDevProvider.cpp 2013-08-22 21:37:34.557825148 +0200 +@@ -145,10 +145,12 @@ + continue; + } + +- // look for usb devices on the usb bus or mounted on /media/usbX (sdcards) ++ // look for usb devices on the usb bus, or mounted on /media/usbX (sdcards) or cdroms + const char *bus = udev_device_get_property_value(device, "ID_BUS"); ++ const char *cdrom = udev_device_get_property_value(device, "ID_CDROM"); + if (removable && + ((bus && strstr(bus, "usb")) || ++ (cdrom && strstr(cdrom,"1")) || + (mountpoint && strstr(mountpoint, "usb")))) + { + const char *label = udev_device_get_property_value(device, "ID_FS_LABEL"); diff --git a/packages/mediacenter/xbmc/patches/13.alpha-545fc25/xbmc-AML-XB9295c3f-03-show-all-removable-disks-mounted-under-media.patch b/packages/mediacenter/xbmc/patches/13.alpha-545fc25/xbmc-AML-XB9295c3f-03-show-all-removable-disks-mounted-under-media.patch new file mode 100644 index 0000000000..17619f8ec2 --- /dev/null +++ b/packages/mediacenter/xbmc/patches/13.alpha-545fc25/xbmc-AML-XB9295c3f-03-show-all-removable-disks-mounted-under-media.patch @@ -0,0 +1,25 @@ +From 6d64d70a46b8f238d2706017a084f30bd681f291 Mon Sep 17 00:00:00 2001 +From: Stefan Saraev +Date: Sat, 31 Aug 2013 13:44:53 +0300 +Subject: [PATCH] show all removable disks mounted under /media + +--- + xbmc/storage/linux/UDevProvider.cpp | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/xbmc/storage/linux/UDevProvider.cpp b/xbmc/storage/linux/UDevProvider.cpp +index c20facc..c1044c8 100644 +--- a/xbmc/storage/linux/UDevProvider.cpp ++++ b/xbmc/storage/linux/UDevProvider.cpp +@@ -151,7 +151,7 @@ void CUDevProvider::GetDisks(VECSOURCES& disks, bool removable) + if (removable && + ((bus && strstr(bus, "usb")) || + (cdrom && strstr(cdrom,"1")) || +- (mountpoint && strstr(mountpoint, "usb")))) ++ (mountpoint && strstr(mountpoint, "/media/")))) + { + const char *label = udev_device_get_property_value(device, "ID_FS_LABEL"); + if (!label) +-- +1.7.2.5 + diff --git a/packages/mediacenter/xbmc/patches/13.alpha-545fc25/xbmc-AML-XB9295c3f-04-fixed-context-menu-remove-safely-selection.patch b/packages/mediacenter/xbmc/patches/13.alpha-545fc25/xbmc-AML-XB9295c3f-04-fixed-context-menu-remove-safely-selection.patch new file mode 100644 index 0000000000..bdb266bbd0 --- /dev/null +++ b/packages/mediacenter/xbmc/patches/13.alpha-545fc25/xbmc-AML-XB9295c3f-04-fixed-context-menu-remove-safely-selection.patch @@ -0,0 +1,66 @@ +From 35400b9a93e5c2c9aa6dc389736af293fc623a5b Mon Sep 17 00:00:00 2001 +From: davilla +Date: Thu, 3 Jan 2013 11:20:22 -0500 +Subject: [PATCH] [aml] fixed context menu 'remove safely' selection + +--- + xbmc/linux/PosixMountProvider.cpp | 10 ++++++++++ + xbmc/linux/PosixMountProvider.h | 2 +- + xbmc/storage/linux/UDevProvider.cpp | 7 ++++++- + 3 files changed, 17 insertions(+), 2 deletions(-) + +diff --git a/xbmc/linux/PosixMountProvider.cpp b/xbmc/linux/PosixMountProvider.cpp +index 2420491..27d639e 100644 +--- a/xbmc/linux/PosixMountProvider.cpp ++++ b/xbmc/linux/PosixMountProvider.cpp +@@ -127,6 +127,16 @@ void CPosixMountProvider::GetDrives(VECSOURCES &drives) + return result; + } + ++bool CPosixMountProvider::Eject(CStdString mountpath) ++{ ++ // just go ahead and try to umount the disk ++ // if it does umount, life is good, if not, no loss. ++ std::string cmd = "umount " + mountpath; ++ system(cmd.c_str()); ++ ++ return true; ++} ++ + bool CPosixMountProvider::PumpDriveChangeEvents(IStorageEventsCallback *callback) + { + VECSOURCES drives; +diff --git a/xbmc/linux/PosixMountProvider.h b/xbmc/linux/PosixMountProvider.h +index da0506c..02ff302 100644 +--- a/xbmc/linux/PosixMountProvider.h ++++ b/xbmc/linux/PosixMountProvider.h +@@ -34,7 +34,7 @@ class CPosixMountProvider : public IStorageProvider + + virtual std::vector GetDiskUsage(); + +- virtual bool Eject(CStdString mountpath) { return false; } ++ virtual bool Eject(CStdString mountpath); + + virtual bool PumpDriveChangeEvents(IStorageEventsCallback *callback); + private: +diff --git a/xbmc/storage/linux/UDevProvider.cpp b/xbmc/storage/linux/UDevProvider.cpp +index 21b6b50..d9e6a4f 100644 +--- a/xbmc/storage/linux/UDevProvider.cpp ++++ b/xbmc/storage/linux/UDevProvider.cpp +@@ -179,7 +179,12 @@ void CUDevProvider::GetRemovableDrives(VECSOURCES &removableDrives) + + bool CUDevProvider::Eject(CStdString mountpath) + { +- return false; ++ // just go ahead and try to umount the disk ++ // if it does umount, life is good, if not, no loss. ++ std::string cmd = "umount " + mountpath; ++ system(cmd.c_str()); ++ ++ return true; + } + + std::vector CUDevProvider::GetDiskUsage() +-- +1.8.4 + diff --git a/packages/mediacenter/xbmc/patches/13.alpha-545fc25/xbmc-AML-XB9295c3f-05-use-udevil-to-umount.-escape-mountpath.patch b/packages/mediacenter/xbmc/patches/13.alpha-545fc25/xbmc-AML-XB9295c3f-05-use-udevil-to-umount.-escape-mountpath.patch new file mode 100644 index 0000000000..6da61a6608 --- /dev/null +++ b/packages/mediacenter/xbmc/patches/13.alpha-545fc25/xbmc-AML-XB9295c3f-05-use-udevil-to-umount.-escape-mountpath.patch @@ -0,0 +1,39 @@ +From 023acdbbe7b3766e3e1bf509e92d967903aee680 Mon Sep 17 00:00:00 2001 +From: Stefan Saraev +Date: Sat, 31 Aug 2013 18:19:43 +0300 +Subject: [PATCH] use udevil to umount. escape mountpath + +--- + xbmc/linux/PosixMountProvider.cpp | 2 +- + xbmc/storage/linux/UDevProvider.cpp | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/xbmc/linux/PosixMountProvider.cpp b/xbmc/linux/PosixMountProvider.cpp +index bbf47fa..2004b44 100644 +--- a/xbmc/linux/PosixMountProvider.cpp ++++ b/xbmc/linux/PosixMountProvider.cpp +@@ -130,7 +130,7 @@ bool CPosixMountProvider::Eject(CStdString mountpath) + { + // just go ahead and try to umount the disk + // if it does umount, life is good, if not, no loss. +- std::string cmd = "umount " + mountpath; ++ std::string cmd = "udevil umount \"" + mountpath + "\""; + system(cmd.c_str()); + + return true; +diff --git a/xbmc/storage/linux/UDevProvider.cpp b/xbmc/storage/linux/UDevProvider.cpp +index e9c86ab..2f3a5ea 100644 +--- a/xbmc/storage/linux/UDevProvider.cpp ++++ b/xbmc/storage/linux/UDevProvider.cpp +@@ -183,7 +183,7 @@ bool CUDevProvider::Eject(CStdString mountpath) + { + // just go ahead and try to umount the disk + // if it does umount, life is good, if not, no loss. +- std::string cmd = "umount " + mountpath; ++ std::string cmd = "udevil umount \"" + mountpath + "\""; + system(cmd.c_str()); + + return true; +-- +1.7.2.5 +