diff --git a/packages/mediacenter/xbmc-theme-Confluence/meta b/packages/mediacenter/xbmc-theme-Confluence/meta index 90870a51c7..57a418305a 100644 --- a/packages/mediacenter/xbmc-theme-Confluence/meta +++ b/packages/mediacenter/xbmc-theme-Confluence/meta @@ -19,7 +19,7 @@ ################################################################################ PKG_NAME="xbmc-theme-Confluence" -PKG_VERSION="13.alpha-aa4ca63" +PKG_VERSION="13.alpha-f8b0614" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL" diff --git a/packages/mediacenter/xbmc/package.mk b/packages/mediacenter/xbmc/package.mk index 228dd4b45c..b181a64c0e 100644 --- a/packages/mediacenter/xbmc/package.mk +++ b/packages/mediacenter/xbmc/package.mk @@ -19,7 +19,7 @@ ################################################################################ PKG_NAME="xbmc" -PKG_VERSION="13.alpha-aa4ca63" +PKG_VERSION="13.alpha-f8b0614" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL" diff --git a/packages/mediacenter/xbmc/patches/xbmc-995.01-fernetmenta-fixes-81fd4d3.patch b/packages/mediacenter/xbmc/patches/xbmc-995.01-fernetmenta-fixes-97fecf6.patch similarity index 87% rename from packages/mediacenter/xbmc/patches/xbmc-995.01-fernetmenta-fixes-81fd4d3.patch rename to packages/mediacenter/xbmc/patches/xbmc-995.01-fernetmenta-fixes-97fecf6.patch index c63241360a..fcc720daee 100644 --- a/packages/mediacenter/xbmc/patches/xbmc-995.01-fernetmenta-fixes-81fd4d3.patch +++ b/packages/mediacenter/xbmc/patches/xbmc-995.01-fernetmenta-fixes-97fecf6.patch @@ -1,7 +1,7 @@ -From 95cbc39be99a04e0d7b6f10073c3cd755f6bf02e Mon Sep 17 00:00:00 2001 +From 7c83ec63dcfd6ee12249583b5125774611a9aafb Mon Sep 17 00:00:00 2001 From: xbmc Date: Mon, 28 May 2012 10:34:39 +0200 -Subject: [PATCH 01/86] videoplayer: adapt lateness detection and dropping to +Subject: [PATCH 01/92] videoplayer: adapt lateness detection and dropping to buffering --- @@ -582,10 +582,10 @@ index f8ad541..186e271 100644 1.8.4 -From e7b108530fe64134345ff9bdc5b1b67425e705e7 Mon Sep 17 00:00:00 2001 +From 1b941747a4a526ee08576fd3ca177972ef3b2852 Mon Sep 17 00:00:00 2001 From: xbmc Date: Sun, 2 Sep 2012 16:05:21 +0200 -Subject: [PATCH 02/86] video player: present correct pts to user for a/v sync +Subject: [PATCH 02/92] 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 db9e588be87ff770d2d730efb371cef204bdcb32 Mon Sep 17 00:00:00 2001 +From 00b96de3b0ed33def258a8ec67e89ec4506e5b7d Mon Sep 17 00:00:00 2001 From: xbmc Date: Sat, 16 Feb 2013 18:25:53 +0100 -Subject: [PATCH 03/86] videoplayer: some rework and documentation +Subject: [PATCH 03/92] videoplayer: some rework and documentation --- .../dvdplayer/DVDCodecs/Video/DVDVideoCodec.h | 29 ++++++++++++++++++++-- @@ -767,10 +767,10 @@ index 587ea4b..27a61bd 100644 1.8.4 -From 20afb7dafb98fc32e7ae18d5405047f8e0796641 Mon Sep 17 00:00:00 2001 +From 97b024d24869b0fcf8f114a5d5ab0c2137fa7855 Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Sat, 1 Jun 2013 11:21:19 +0200 -Subject: [PATCH 04/86] renderer: bump buffers to 5 +Subject: [PATCH 04/92] renderer: bump buffers to 5 --- xbmc/cores/VideoRenderers/BaseRenderer.h | 2 +- @@ -793,10 +793,10 @@ index a61d3cf..df5fe0e 100644 1.8.4 -From 8775f9285d8dcfb20dea2c0e8c26a7635e38ccca Mon Sep 17 00:00:00 2001 +From 6d0e581e2aeca8de3f0d9fcc8ca89e1b1a2f1183 Mon Sep 17 00:00:00 2001 From: xbmc Date: Mon, 28 May 2012 10:41:31 +0200 -Subject: [PATCH 05/86] videoplayer: update frametime, it might change due to +Subject: [PATCH 05/92] videoplayer: update frametime, it might change due to fps detection --- @@ -820,10 +820,10 @@ index 27a61bd..8e772e3 100644 1.8.4 -From 7cb64d74bb1c348042c6326c6c4db5aaa7a1d923 Mon Sep 17 00:00:00 2001 +From d6d3683e5846eefca72469e6e833aa6cad1411ad Mon Sep 17 00:00:00 2001 From: xbmc Date: Mon, 28 May 2012 10:43:06 +0200 -Subject: [PATCH 06/86] videoplayer: give streams with invalid fps a chance for +Subject: [PATCH 06/92] videoplayer: give streams with invalid fps a chance for fps detection --- @@ -847,10 +847,10 @@ index 8e772e3..150a796 100644 1.8.4 -From 8cf67bbd068a2a8f5d1cccdebf6b0ab9893283de Mon Sep 17 00:00:00 2001 +From 3033d0426ff3b89e5de2ebd67bdea57c49e5902b Mon Sep 17 00:00:00 2001 From: xbmc Date: Mon, 28 May 2012 10:49:05 +0200 -Subject: [PATCH 07/86] dvdplayer: allow rewinding at end of stream, do a seek +Subject: [PATCH 07/92] dvdplayer: allow rewinding at end of stream, do a seek after rewind --- @@ -887,10 +887,10 @@ index 1dbc732..8d19ae5 100644 1.8.4 -From 3ffcd6880d24c7b89087148112b3731be772f2ea Mon Sep 17 00:00:00 2001 +From 43bac89dd92306689f8e443871c7aabbb819c2a4 Mon Sep 17 00:00:00 2001 From: FernetMenta Date: Thu, 5 Jul 2012 15:22:05 +0200 -Subject: [PATCH 08/86] X11: ditch SDL for video and window events +Subject: [PATCH 08/92] X11: ditch SDL for video and window events --- xbmc/Application.cpp | 2 +- @@ -2427,10 +2427,10 @@ index b1464d0..34b912f 100644 1.8.4 -From af96898c8a12286faac8579e4132f1fc5d12b99d Mon Sep 17 00:00:00 2001 +From 8123e23755ac41cee6a85a23541f515e96111911 Mon Sep 17 00:00:00 2001 From: FernetMenta Date: Thu, 5 Jul 2012 15:24:22 +0200 -Subject: [PATCH 09/86] X11: Add xbmc icon +Subject: [PATCH 09/92] X11: Add xbmc icon --- xbmc/windowing/X11/WinSystemX11.cpp | 126 +++++++++++++++++++++++++++++++++++- @@ -2620,10 +2620,10 @@ index 34b912f..352e90e 100644 1.8.4 -From 062d3ee86def03bd6d99f5c76fcf82f906bf6bd8 Mon Sep 17 00:00:00 2001 +From e621dacd4415597fe05fe761ad7f1f7ad2bb2573 Mon Sep 17 00:00:00 2001 From: xbmc Date: Sun, 20 May 2012 14:11:26 +0200 -Subject: [PATCH 10/86] X11: add SDL joystick until we have a better solution +Subject: [PATCH 10/92] X11: add SDL joystick until we have a better solution --- xbmc/windowing/WinEventsX11.cpp | 26 ++++++++++++++++++++++++++ @@ -2677,10 +2677,10 @@ index ad58aad..6f57a87 100644 1.8.4 -From 6fa4edf1653b2fbe328e6183ad9aceb34d418e48 Mon Sep 17 00:00:00 2001 +From 4b83733ab3fc1aff345ef55492438f4869d01ad8 Mon Sep 17 00:00:00 2001 From: Joakim Plate Date: Thu, 5 Jul 2012 12:35:55 +0200 -Subject: [PATCH 11/86] X11: factor out code handling device reset notification +Subject: [PATCH 11/92] X11: factor out code handling device reset notification --- xbmc/windowing/X11/WinSystemX11.cpp | 22 ++++++++++++++-------- @@ -2743,10 +2743,10 @@ index 352e90e..3f91b9b 100644 1.8.4 -From c19c7a7b85fe9c476fcaa87236b3c0a3f62d0c31 Mon Sep 17 00:00:00 2001 +From 12a8d5e5c48203c4f8bd5eec98da9ce77b33e75c Mon Sep 17 00:00:00 2001 From: FernetMenta Date: Thu, 5 Jul 2012 15:02:00 +0200 -Subject: [PATCH 12/86] X11: move xrandr events to WinEventsX11 +Subject: [PATCH 12/92] X11: move xrandr events to WinEventsX11 --- xbmc/windowing/WinEventsX11.cpp | 42 +++++++++++++++++++++++++++++++++++++ @@ -2890,10 +2890,10 @@ index 304dac8..16b13aa 100644 1.8.4 -From 1bb0765e5d6aeed6d1bf82cb823881db733a7486 Mon Sep 17 00:00:00 2001 +From d8f16fce9f7caebabf5b78f4cc55e77029bf1c8e Mon Sep 17 00:00:00 2001 From: FernetMenta Date: Thu, 12 Apr 2012 15:43:56 +0200 -Subject: [PATCH 13/86] xrandr: remove method RestoreState +Subject: [PATCH 13/92] xrandr: remove method RestoreState --- xbmc/windowing/X11/WinSystemX11.cpp | 13 +++++++++++-- @@ -2972,10 +2972,10 @@ index 0aec487..00b49dc 100644 1.8.4 -From b4ee3ee110b0906cbe42685c6fa082bb37a628c4 Mon Sep 17 00:00:00 2001 +From 4e6456ed36ef12da877a64d1ba591ff7b689057d Mon Sep 17 00:00:00 2001 From: xbmc Date: Sun, 20 May 2012 13:17:10 +0200 -Subject: [PATCH 14/86] xrandr: observe orientation +Subject: [PATCH 14/92] xrandr: observe orientation --- xbmc/windowing/X11/WinSystemX11.cpp | 89 ++++++++++++++++++++++++++++++------- @@ -3190,10 +3190,10 @@ index 00b49dc..508604d 100644 1.8.4 -From ea2b3bb15cb697fdbf92f3366a490df262e1de16 Mon Sep 17 00:00:00 2001 +From 1899b79d09125a7c955824a3e1c335bf179708c0 Mon Sep 17 00:00:00 2001 From: FernetMenta Date: Thu, 5 Jul 2012 11:54:15 +0200 -Subject: [PATCH 15/86] xrandr: allow getting info for multiple screen's +Subject: [PATCH 15/92] xrandr: allow getting info for multiple screen's Refactored by: Joakim Plate --- @@ -3368,10 +3368,10 @@ index 508604d..d37838a 100644 1.8.4 -From 4ba34c7488f8f258723435b94aeda86b5a9e76e9 Mon Sep 17 00:00:00 2001 +From 7d1d81a68f9025f08b0f2e0491c0a905a101cfe7 Mon Sep 17 00:00:00 2001 From: FernetMenta Date: Thu, 5 Jul 2012 11:44:00 +0200 -Subject: [PATCH 16/86] X11: fix multi-head setups +Subject: [PATCH 16/92] X11: fix multi-head setups --- language/English/strings.po | 4 +- @@ -3386,7 +3386,7 @@ Subject: [PATCH 16/86] X11: fix multi-head setups 9 files changed, 227 insertions(+), 113 deletions(-) diff --git a/language/English/strings.po b/language/English/strings.po -index cc9001f..792a5ce 100755 +index 15cee63..a02eb9a 100755 --- a/language/English/strings.po +++ b/language/English/strings.po @@ -1019,7 +1019,9 @@ msgctxt "#245" @@ -3401,7 +3401,7 @@ index cc9001f..792a5ce 100755 msgctxt "#247" msgid "Scripts" diff --git a/system/settings/settings.xml b/system/settings/settings.xml -index 57f5921..977e90f 100644 +index aa1cdd7..13bd54e 100644 --- a/system/settings/settings.xml +++ b/system/settings/settings.xml @@ -2021,6 +2021,15 @@ @@ -4130,10 +4130,10 @@ index 4175aab..94584ab 100644 1.8.4 -From 1bf63f5832a5f659a56cab0e286e3b3af5e8e0ce Mon Sep 17 00:00:00 2001 +From 0d4804977c61f433e62d93465e56ba0b609e4716 Mon Sep 17 00:00:00 2001 From: FernetMenta Date: Thu, 5 Jul 2012 11:36:32 +0200 -Subject: [PATCH 17/86] X11: remove all DefaultScreen and RootWindow macros +Subject: [PATCH 17/92] X11: remove all DefaultScreen and RootWindow macros --- xbmc/windowing/X11/WinSystemX11.cpp | 6 +++--- @@ -4201,10 +4201,10 @@ index fc25077..2f65d06 100644 1.8.4 -From cb53146d7887e9fcd66f5068346d5e01ba85423b Mon Sep 17 00:00:00 2001 +From 8dec342e773ddbc1ad052e63f5983cc01bc015ab Mon Sep 17 00:00:00 2001 From: FernetMenta Date: Thu, 5 Jul 2012 11:45:22 +0200 -Subject: [PATCH 18/86] X11: remove all DefaultScreen and RootWindow macros +Subject: [PATCH 18/92] X11: remove all DefaultScreen and RootWindow macros (VideoRefClock) Note this is on a separate display connection. @@ -4276,10 +4276,10 @@ index 0b3950a..ca43b5a 100644 1.8.4 -From 0895eafa8be7624beb2684d4879a5d30497fcc86 Mon Sep 17 00:00:00 2001 +From 66b1c8115a403644ffbedc41f254165e4d9b63ae Mon Sep 17 00:00:00 2001 From: xbmc Date: Wed, 20 Jun 2012 17:37:11 +0200 -Subject: [PATCH 19/86] X11: recreate gl context after output has changed +Subject: [PATCH 19/92] X11: recreate gl context after output has changed --- xbmc/windowing/X11/WinSystemX11.cpp | 24 ++++++++++++++---------- @@ -4430,10 +4430,10 @@ index 2f65d06..d0a8c41 100644 1.8.4 -From a2c97e50895ec21f13b9758f00d342fc9716f1bb Mon Sep 17 00:00:00 2001 +From 672e85e5b77623f76b015f19f03057a958cfe30f Mon Sep 17 00:00:00 2001 From: FernetMenta Date: Thu, 5 Jul 2012 12:06:25 +0200 -Subject: [PATCH 20/86] X11: hook video reference clock in windowing +Subject: [PATCH 20/92] X11: hook video reference clock in windowing --- xbmc/video/VideoReferenceClock.cpp | 71 +++++++++++++++++++++++++++----------- @@ -4638,10 +4638,10 @@ index dd65a1b..afd71fc 100644 1.8.4 -From 4ffda879a3cff3febe35e926249fac8894e1ce51 Mon Sep 17 00:00:00 2001 +From 5e603c55da3018fa246f972557c06794f98112f7 Mon Sep 17 00:00:00 2001 From: xbmc Date: Thu, 21 Jun 2012 17:26:51 +0200 -Subject: [PATCH 21/86] X11: fix video calibrations +Subject: [PATCH 21/92] X11: fix video calibrations --- xbmc/windowing/WinSystem.h | 1 + @@ -4733,10 +4733,10 @@ index 9666cc3..5b52d6c 100644 1.8.4 -From 6712b3ffc815b179f070b43272a20e5a95278bcb Mon Sep 17 00:00:00 2001 +From f30df42affa5bf150f2422bed8c100919a25474a Mon Sep 17 00:00:00 2001 From: FernetMenta Date: Thu, 5 Jul 2012 12:00:26 +0200 -Subject: [PATCH 22/86] X11: deactivate screen saver on startup +Subject: [PATCH 22/92] X11: deactivate screen saver on startup --- xbmc/windowing/X11/WinSystemX11.cpp | 29 +++++++++++++++++++++++++++++ @@ -4806,10 +4806,10 @@ index 5b52d6c..b2bd5a0 100644 1.8.4 -From ffae5ab22cef9c8a69ee9ac8071e33a9567e50e4 Mon Sep 17 00:00:00 2001 +From 45b9c62367d457637406477fc2e7b5ead909690e Mon Sep 17 00:00:00 2001 From: FernetMenta Date: Thu, 5 Jul 2012 12:10:09 +0200 -Subject: [PATCH 23/86] X11: change method of going full-screen +Subject: [PATCH 23/92] X11: change method of going full-screen --- xbmc/windowing/X11/WinSystemX11.cpp | 9 ++++++++- @@ -4853,10 +4853,10 @@ index b76b229..869baa8 100644 1.8.4 -From c87169846afc1ab803a129105bd1055e38fbcf28 Mon Sep 17 00:00:00 2001 +From 3869297eeada951fa33d781292b2f10488a8dfbf Mon Sep 17 00:00:00 2001 From: xbmc Date: Thu, 28 Jun 2012 19:12:39 +0200 -Subject: [PATCH 24/86] X11: reset key repeat and key modifier on focus lost +Subject: [PATCH 24/92] X11: reset key repeat and key modifier on focus lost and gain --- @@ -4888,10 +4888,10 @@ index d98f12f..743aca9 100644 1.8.4 -From 3858570de202ed9a00e9c1d1fcd68d1f5b994ffd Mon Sep 17 00:00:00 2001 +From 0c7e65fea1396e399bdf3d71227854ca39e7974b Mon Sep 17 00:00:00 2001 From: Joakim Plate Date: Thu, 5 Jul 2012 14:18:46 +0200 -Subject: [PATCH 25/86] X11: replace custom utf8 to unicode with charset +Subject: [PATCH 25/92] X11: replace custom utf8 to unicode with charset convertor (squash to x11 events) --- @@ -5108,10 +5108,10 @@ index a412f32..9a8a912 100644 1.8.4 -From f43ef7ef5954479253bebd028ce422c0cb45dd29 Mon Sep 17 00:00:00 2001 +From eacbcae155191cc0bc7a1dcee4e2dd8402c74c0d Mon Sep 17 00:00:00 2001 From: Joakim Plate Date: Thu, 5 Jul 2012 14:23:54 +0200 -Subject: [PATCH 26/86] X11: fixed invalid usage of sizeof() (squash into x11 +Subject: [PATCH 26/92] X11: fixed invalid usage of sizeof() (squash into x11 changes) --- @@ -5175,10 +5175,10 @@ index 9a8a912..c69169c 100644 1.8.4 -From 0bc67eb1b86c8e6049c3dc45fd680dc730740607 Mon Sep 17 00:00:00 2001 +From dd7e65472fc49198919bb51a27d8594d0f8228a1 Mon Sep 17 00:00:00 2001 From: xbmc Date: Sat, 9 Jun 2012 18:23:53 +0200 -Subject: [PATCH 27/86] add missing keys to xbmc keytable +Subject: [PATCH 27/92] add missing keys to xbmc keytable --- xbmc/input/XBMC_keytable.cpp | 2 ++ @@ -5201,10 +5201,10 @@ index d57f4d3..b807897 100644 1.8.4 -From 64987c29c14606d2b4d49d1007d84ebab4dabf36 Mon Sep 17 00:00:00 2001 +From 92cbb623bd9531d6cc53a2f0e18e8a4cd89360cb Mon Sep 17 00:00:00 2001 From: xbmc Date: Fri, 16 Mar 2012 15:57:51 +0100 -Subject: [PATCH 28/86] videorefclock: temp deactivate of nv settings +Subject: [PATCH 28/92] videorefclock: temp deactivate of nv settings --- xbmc/video/VideoReferenceClock.cpp | 2 +- @@ -5227,10 +5227,10 @@ index 0ddf102..3ae7107 100644 1.8.4 -From 9f27be2be6965127e47a3fa7ccc060421c3fa47f Mon Sep 17 00:00:00 2001 +From e2b66607041f2630696f7cbef67bcaff89f5b11c Mon Sep 17 00:00:00 2001 From: xbmc Date: Mon, 20 Aug 2012 09:09:09 +0200 -Subject: [PATCH 29/86] videorefclock: ask graphics context for refresh rate +Subject: [PATCH 29/92] videorefclock: ask graphics context for refresh rate --- xbmc/video/VideoReferenceClock.cpp | 3 ++- @@ -5261,10 +5261,10 @@ index 3ae7107..27bebde 100644 1.8.4 -From e5a61a99a2560b7b49f76931f1aa424104e493eb Mon Sep 17 00:00:00 2001 +From 36cb11f348921504d40ac606554358faee7ee9c4 Mon Sep 17 00:00:00 2001 From: xbmc Date: Mon, 9 Jul 2012 14:00:18 +0200 -Subject: [PATCH 30/86] X11: fix icon texture after +Subject: [PATCH 30/92] X11: fix icon texture after cc5ed3c2474084ebc0373a3046410e6f766e03f4 --- @@ -5372,10 +5372,10 @@ index 869baa8..bfe3797 100644 1.8.4 -From 259b826e8843094f3653663a96acb4da6ce73ef0 Mon Sep 17 00:00:00 2001 +From 5879efc79500fa50e9c85393188e9ca40035e948 Mon Sep 17 00:00:00 2001 From: xbmc Date: Tue, 10 Jul 2012 11:14:12 +0200 -Subject: [PATCH 31/86] X11: check for window manager +Subject: [PATCH 31/92] X11: check for window manager --- xbmc/windowing/X11/WinSystemX11.cpp | 74 ++++++++++++++++++++++++++++++++++++- @@ -5496,10 +5496,10 @@ index b2bd5a0..3e62cd8 100644 1.8.4 -From 49996f43a92ba8f67ce0ac4f561c58a5f1e29a0f Mon Sep 17 00:00:00 2001 +From bb79e2526f213bb628f8becb4f7bd0b59bf2bfb1 Mon Sep 17 00:00:00 2001 From: xbmc Date: Thu, 12 Jul 2012 11:11:47 +0200 -Subject: [PATCH 32/86] X11: dont set window on xrandr if no mode available +Subject: [PATCH 32/92] X11: dont set window on xrandr if no mode available --- xbmc/windowing/X11/WinSystemX11.cpp | 11 ++++++----- @@ -5536,10 +5536,10 @@ index af82061..4f33c68 100644 1.8.4 -From 6c164ca07a82d3a099c5e10d937da08441839653 Mon Sep 17 00:00:00 2001 +From 8236c47102e3fd22078c60531d5134aff012646a Mon Sep 17 00:00:00 2001 From: xbmc Date: Thu, 26 Jul 2012 09:34:28 +0200 -Subject: [PATCH 33/86] X11: fix crash after a resolution change on startup +Subject: [PATCH 33/92] X11: fix crash after a resolution change on startup --- xbmc/windowing/X11/WinSystemX11.cpp | 3 ++- @@ -5563,10 +5563,10 @@ index 4f33c68..bc4e963 100644 1.8.4 -From 04f18c67868e89105814e215b0c78b6c582b1bfd Mon Sep 17 00:00:00 2001 +From 2c9a25af19c28196c6006e96d5bd1635b65e39a5 Mon Sep 17 00:00:00 2001 From: xbmc Date: Sat, 15 Sep 2012 18:27:29 +0200 -Subject: [PATCH 34/86] X11: lock graphics context in NotifyXRREvent +Subject: [PATCH 34/92] X11: lock graphics context in NotifyXRREvent --- xbmc/windowing/X11/WinSystemX11.cpp | 2 ++ @@ -5589,10 +5589,10 @@ index bc4e963..57a8d20 100644 1.8.4 -From c4b6c2c5f4280ac97fc60bc39914553109777bf0 Mon Sep 17 00:00:00 2001 +From e72f7f8a32fa5fda136adf91c9af39f2ce0236df Mon Sep 17 00:00:00 2001 From: xbmc Date: Thu, 23 Aug 2012 19:39:49 +0200 -Subject: [PATCH 35/86] ffmpeg: add av_find_default_stream_index to interface +Subject: [PATCH 35/92] ffmpeg: add av_find_default_stream_index to interface --- lib/DllAvFormat.h | 4 ++++ @@ -5638,10 +5638,10 @@ index 0016c0b..3514856 100644 1.8.4 -From 0b4c2974195094dfcd61d9bf052301ef2102653c Mon Sep 17 00:00:00 2001 +From b7bdbee4fe2dfbb663096501d1ea234b3b3879f7 Mon Sep 17 00:00:00 2001 From: xbmc Date: Mon, 20 Aug 2012 16:06:39 +0200 -Subject: [PATCH 36/86] dvdplayer: observe pts counter overflow +Subject: [PATCH 36/92] dvdplayer: observe pts counter overflow --- .../cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp | 198 ++++++++++++++++++++- @@ -5928,10 +5928,10 @@ index aef5ab1..35abbdf 100644 1.8.4 -From a41cfff841df2de4ba9f808b4aee018d8b7e2525 Mon Sep 17 00:00:00 2001 +From 63ba44ed53374b4703a219936f34f9c75b86157f Mon Sep 17 00:00:00 2001 From: xbmc Date: Tue, 2 Oct 2012 13:02:10 +0200 -Subject: [PATCH 37/86] dvdplayer: avoid short screen flicker caused by +Subject: [PATCH 37/92] dvdplayer: avoid short screen flicker caused by unnecessary reconfigure of renderer --- @@ -5964,10 +5964,10 @@ index 150a796..beffbe9 100644 1.8.4 -From 80daca467cfc97462cbe6497016f40ea04f0ab96 Mon Sep 17 00:00:00 2001 +From dd602cb6a6a93e9ad33331b0f844f223c94fd9b4 Mon Sep 17 00:00:00 2001 From: xbmc Date: Thu, 11 Oct 2012 12:05:50 +0200 -Subject: [PATCH 38/86] vdpau: advanced settings for auto deinterlacing +Subject: [PATCH 38/92] vdpau: advanced settings for auto deinterlacing --- xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp | 8 ++++---- @@ -6033,10 +6033,10 @@ index 7d16957..bb70f3e 100644 1.8.4 -From 2114d34ca5e9e86bb17ec27dffdbe6a5cc27488e Mon Sep 17 00:00:00 2001 +From 3892f36a30931488a5ccc0d785f4b1724cbcca5e Mon Sep 17 00:00:00 2001 From: xbmc Date: Fri, 2 Nov 2012 13:20:03 +0100 -Subject: [PATCH 39/86] player: fix rewind +Subject: [PATCH 39/92] player: fix rewind --- xbmc/cores/dvdplayer/DVDMessage.h | 5 ++++- @@ -6251,10 +6251,10 @@ index 59c7f09..65dea76 100644 1.8.4 -From f19853b507d3bbc0d8687dcf99a2834ea39d6a07 Mon Sep 17 00:00:00 2001 +From 8cc7fc21ff37e72e214dc71abf93578353e5b16e Mon Sep 17 00:00:00 2001 From: xbmc Date: Fri, 23 Nov 2012 17:41:12 +0100 -Subject: [PATCH 40/86] xrandr: fix query for multiple screens +Subject: [PATCH 40/92] xrandr: fix query for multiple screens --- xbmc/windowing/X11/XRandR.cpp | 10 ++++++---- @@ -6295,10 +6295,10 @@ index 4685413..e610150 100644 1.8.4 -From 2c711d93fb5cddb4a3d5d642b3911ae5f6371f8b Mon Sep 17 00:00:00 2001 +From 9a9be0c6828c611ec7c723cda805529c185890ad Mon Sep 17 00:00:00 2001 From: xbmc Date: Sun, 2 Dec 2012 15:46:55 +0100 -Subject: [PATCH 41/86] X11: add debug log to print out refresh after xrr event +Subject: [PATCH 41/92] X11: add debug log to print out refresh after xrr event --- xbmc/windowing/X11/WinSystemX11.cpp | 6 ++++++ @@ -6325,10 +6325,10 @@ index 57a8d20..a237dc0 100644 1.8.4 -From 183cefe43d5e1a3278e9d96e8a34dee695d3b431 Mon Sep 17 00:00:00 2001 +From 123fda72360d5f63412ddda6d82e76ae7402934a Mon Sep 17 00:00:00 2001 From: xbmc Date: Tue, 11 Dec 2012 11:08:13 +0100 -Subject: [PATCH 42/86] X11: dont call XCloseDisplay on shutdown, it crashes +Subject: [PATCH 42/92] X11: dont call XCloseDisplay on shutdown, it crashes when powered doen by cec on ATI --- @@ -6353,10 +6353,10 @@ index a237dc0..ab660b1 100644 1.8.4 -From f08011e5a94ea17a2c9b8de8e779edab88d09d18 Mon Sep 17 00:00:00 2001 +From d46b1fab118b3e4871987a0bebbef6403dd44d92 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 43/86] x11: support for multiple x screens +Subject: [PATCH 43/92] x11: support for multiple x screens --- xbmc/windowing/X11/XRandR.cpp | 2 +- @@ -6379,10 +6379,10 @@ index e610150..5c53574 100644 1.8.4 -From 5db651d938b492def498b8e6f5ef43ec69ac26fb Mon Sep 17 00:00:00 2001 +From 9e452d507ae779b85c87cc20f5e684e490134905 Mon Sep 17 00:00:00 2001 From: xbmc Date: Mon, 24 Dec 2012 16:02:42 +0100 -Subject: [PATCH 44/86] pvr: increase changes counter of stream on stream +Subject: [PATCH 44/92] pvr: increase changes counter of stream on stream change, cosmetics after dd307930d39d92f145a01a16600cd00e01ec39be --- @@ -6416,10 +6416,10 @@ index b96d520..df89f6f 100644 1.8.4 -From c61d787bb556c8178688ff4e0128f0909282e153 Mon Sep 17 00:00:00 2001 +From 2a5423bede4f60b0257edc3b8300231872976a3f Mon Sep 17 00:00:00 2001 From: xbmc Date: Thu, 17 Jan 2013 16:03:22 +0100 -Subject: [PATCH 45/86] X11: add keymapping for XF86XK_Sleep +Subject: [PATCH 45/92] X11: add keymapping for XF86XK_Sleep --- xbmc/windowing/WinEventsX11.cpp | 1 + @@ -6441,10 +6441,10 @@ index a62521f..263cb5a 100644 1.8.4 -From 0115de46178a19ab3c7f6d6a0fbb1d02e8511522 Mon Sep 17 00:00:00 2001 +From 3c23c41f56b1e4bafeb55ddec238274501fc5611 Mon Sep 17 00:00:00 2001 From: xbmc Date: Mon, 21 Jan 2013 09:00:19 +0100 -Subject: [PATCH 46/86] X11: remove toggle full screen after resume +Subject: [PATCH 46/92] X11: remove toggle full screen after resume --- xbmc/powermanagement/PowerManager.cpp | 5 ----- @@ -6470,10 +6470,10 @@ index 590a887..35b5a21 100644 1.8.4 -From 92c36158c341ed0a8ef17f9f636977c5bf920abb Mon Sep 17 00:00:00 2001 +From 65bb7ad64c717342afb6d2934aa5bb18075badf2 Mon Sep 17 00:00:00 2001 From: xbmc Date: Wed, 23 Jan 2013 17:03:02 +0100 -Subject: [PATCH 47/86] xrandr: set screen on mode change command +Subject: [PATCH 47/92] xrandr: set screen on mode change command --- xbmc/windowing/X11/XRandR.cpp | 2 +- @@ -6496,10 +6496,10 @@ index 5c53574..4355ef7 100644 1.8.4 -From bded0b28013d5fb71e02d9448152ef375d22a5b5 Mon Sep 17 00:00:00 2001 +From 8924b0b65b4fcfb055c6af201aee09b3863bd790 Mon Sep 17 00:00:00 2001 From: xbmc Date: Wed, 23 Jan 2013 17:03:39 +0100 -Subject: [PATCH 48/86] X11: recreate glx context when output changes +Subject: [PATCH 48/92] X11: recreate glx context when output changes --- xbmc/windowing/X11/WinSystemX11.cpp | 6 +++--- @@ -6550,10 +6550,10 @@ index 3e62cd8..2a1fb41 100644 1.8.4 -From d4232461a749f7beea843e58acea3f40da702030 Mon Sep 17 00:00:00 2001 +From 66f1ee95ec858c0534fb56283c90f032cb16bf91 Mon Sep 17 00:00:00 2001 From: xbmc Date: Fri, 14 Dec 2012 14:19:15 +0100 -Subject: [PATCH 49/86] pvr: do not show selection dialog for a single menu +Subject: [PATCH 49/92] pvr: do not show selection dialog for a single menu hook --- @@ -6591,10 +6591,10 @@ index 5b5706e..2eda43d 100644 1.8.4 -From 0cc5cb68f302f430f5d4dbef4e3f59d74cf51a7b Mon Sep 17 00:00:00 2001 +From 946e6bbde5a45edc94f98f5e3ad8af5d78812d31 Mon Sep 17 00:00:00 2001 From: xbmc Date: Sun, 3 Feb 2013 08:17:16 +0100 -Subject: [PATCH 50/86] X11: use default screen parameters if no output +Subject: [PATCH 50/92] X11: use default screen parameters if no output connected --- @@ -6698,10 +6698,10 @@ index 4329a22..2adf8a0 100644 1.8.4 -From fd3822e5accf2e58f9ab1fda9acd99bcadd0d1cc Mon Sep 17 00:00:00 2001 +From d424e027c1f557396d3cdc347c4bc79affd3bfcf Mon Sep 17 00:00:00 2001 From: xbmc Date: Sat, 23 Mar 2013 15:13:32 +0100 -Subject: [PATCH 51/86] X11: create parent window +Subject: [PATCH 51/92] X11: create parent window --- xbmc/windowing/X11/WinSystemX11.cpp | 69 +++++++++++++++++++++++-------------- @@ -6967,10 +6967,10 @@ index 2a1fb41..e8993f1 100644 1.8.4 -From 2b085f521a9cb330928e709e6525676ec57f2f7d Mon Sep 17 00:00:00 2001 +From 03dc02bed564f2f937889fa9dc8261f0936ba6d5 Mon Sep 17 00:00:00 2001 From: xbmc Date: Sun, 24 Mar 2013 12:30:12 +0100 -Subject: [PATCH 52/86] X11: use system key repeat rate instead of hardcoded +Subject: [PATCH 52/92] X11: use system key repeat rate instead of hardcoded one, taken from 58fd64b194e38b73b5f3132744bab35e994e7441 --- @@ -7172,10 +7172,10 @@ index c69169c..6429291 100644 1.8.4 -From a5889753d2584cf412e9cb537fce5bda1d3c25f4 Mon Sep 17 00:00:00 2001 +From ebd5036b0cb9f80749aae62d2978beb207be2d44 Mon Sep 17 00:00:00 2001 From: xbmc Date: Sun, 24 Mar 2013 16:04:48 +0100 -Subject: [PATCH 53/86] linux: use CLOCK_MONOTONIC_RAW as this is not subject +Subject: [PATCH 53/92] linux: use CLOCK_MONOTONIC_RAW as this is not subject to NTP --- @@ -7213,17 +7213,17 @@ index c06b8c5..4390d2e 100644 1.8.4 -From 3c8b1e44e2ea833362973e7d1d9e7f4ebfe8b13f Mon Sep 17 00:00:00 2001 +From 45e8e8f9bab9250c168303fd25e19754bed88791 Mon Sep 17 00:00:00 2001 From: xbmc Date: Thu, 28 Mar 2013 15:18:53 +0100 -Subject: [PATCH 54/86] OMXPlayer: some caching fixes for pvr +Subject: [PATCH 54/92] OMXPlayer: some caching fixes for pvr --- xbmc/cores/omxplayer/OMXPlayer.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/xbmc/cores/omxplayer/OMXPlayer.cpp b/xbmc/cores/omxplayer/OMXPlayer.cpp -index 2325b63..845d518 100644 +index c926ee3..0a51e8f 100644 --- a/xbmc/cores/omxplayer/OMXPlayer.cpp +++ b/xbmc/cores/omxplayer/OMXPlayer.cpp @@ -2565,7 +2565,8 @@ void COMXPlayer::HandleMessages() @@ -7240,10 +7240,10 @@ index 2325b63..845d518 100644 1.8.4 -From b5de936cde093bdf4b51bdf96bae45a9d4933c43 Mon Sep 17 00:00:00 2001 +From f155a8234eaa9ff6d2a24e9ef8f15c4040081ccc Mon Sep 17 00:00:00 2001 From: xbmc Date: Thu, 28 Mar 2013 20:50:59 +0100 -Subject: [PATCH 55/86] fix incorrect display of fps when dr kicks in +Subject: [PATCH 55/92] fix incorrect display of fps when dr kicks in --- xbmc/Application.cpp | 3 ++- @@ -7270,10 +7270,10 @@ index f701be0..886cedd 100644 1.8.4 -From 5c43b33fecd4535491ff93c197978ac59a2476e1 Mon Sep 17 00:00:00 2001 +From fd9c475361cd318c69529c6ad4375a738b6df146 Mon Sep 17 00:00:00 2001 From: xbmc Date: Sat, 13 Apr 2013 08:32:06 +0200 -Subject: [PATCH 56/86] X11: fix mouse coverage +Subject: [PATCH 56/92] X11: fix mouse coverage --- xbmc/windowing/X11/WinSystemX11.cpp | 11 ++++++++--- @@ -7339,10 +7339,10 @@ index e8993f1..5cccfb7 100644 1.8.4 -From c11b0c93f498bfc14cff517ae36aba80e2910d89 Mon Sep 17 00:00:00 2001 +From 0768c32d1910374ba22c75753f5bcbcc17096a25 Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Wed, 8 May 2013 13:14:58 +0200 -Subject: [PATCH 57/86] X11: fix incorrectly used screen num in desktop +Subject: [PATCH 57/92] X11: fix incorrectly used screen num in desktop resolution --- @@ -7377,10 +7377,10 @@ index 2acb36d..101ba98 100644 1.8.4 -From 8bae9d95fbe269377445f3b6047b83985f9cc879 Mon Sep 17 00:00:00 2001 +From d3f853e6b4ce999a158ee911413a7ea4d108548e Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Thu, 9 May 2013 12:07:09 +0200 -Subject: [PATCH 58/86] X11: do not overwrite user selected monitor with +Subject: [PATCH 58/92] X11: do not overwrite user selected monitor with fallback --- @@ -7505,10 +7505,10 @@ index 5cccfb7..1b658e2 100644 1.8.4 -From 54c33464374a1527b93315eca407f49021d332c4 Mon Sep 17 00:00:00 2001 +From 14ef818d6b18b4b66afaba0fb43941adfc8c8bfc Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Sun, 12 May 2013 10:50:30 +0200 -Subject: [PATCH 59/86] xrandr: add turn on/off to wrapper +Subject: [PATCH 59/92] xrandr: add turn on/off to wrapper --- xbmc/windowing/X11/XRandR.cpp | 78 +++++++++++++++++++++++++++++++++++++++---- @@ -7674,10 +7674,10 @@ index d37838a..059062f 100644 1.8.4 -From 7d7114ee72c68aa33db3a82d326ee727a1dbf162 Mon Sep 17 00:00:00 2001 +From 664214f891d3e86b3cc289973e7af5ee57767380 Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Sun, 19 May 2013 12:55:35 +0200 -Subject: [PATCH 60/86] xrandr: add GetPreferredMode to wrapper +Subject: [PATCH 60/92] xrandr: add GetPreferredMode to wrapper --- xbmc/windowing/X11/XRandR.cpp | 23 +++++++++++++++++++++++ @@ -7734,10 +7734,10 @@ index 059062f..ab7cc63 100644 1.8.4 -From 16dba892a37c626116fad98fd20de32460edad60 Mon Sep 17 00:00:00 2001 +From 5ed2befb7525112306ba92e7b83da1fac5a2dc13 Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Sat, 11 May 2013 17:12:12 +0200 -Subject: [PATCH 61/86] X11: multi-head improvement - poll for desired output +Subject: [PATCH 61/92] X11: multi-head improvement - poll for desired output if we do not get an xrr event --- @@ -7752,7 +7752,7 @@ Subject: [PATCH 61/86] 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 792a5ce..11d4be5 100755 +index a02eb9a..eb63f11 100755 --- a/language/English/strings.po +++ b/language/English/strings.po @@ -6464,7 +6464,7 @@ msgctxt "#14071" @@ -7779,7 +7779,7 @@ index 792a5ce..11d4be5 100755 #: xbmc/dialogs/GUIDialogFavourites.cpp msgctxt "#15015" diff --git a/system/settings/settings.xml b/system/settings/settings.xml -index 977e90f..15cac91 100644 +index 13bd54e..3d7ef20 100644 --- a/system/settings/settings.xml +++ b/system/settings/settings.xml @@ -2030,6 +2030,11 @@ @@ -8018,10 +8018,10 @@ index 62003f5..8525ede 100644 1.8.4 -From 5066653087274cf1a2e4f798dd837b084a20fb28 Mon Sep 17 00:00:00 2001 +From da3ac4fe6c53765ae0266bb2ea9646f7879759d9 Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Wed, 15 May 2013 09:14:34 +0200 -Subject: [PATCH 62/86] X11: ignore mouse move event form other windows +Subject: [PATCH 62/92] X11: ignore mouse move event form other windows --- xbmc/windowing/WinEventsX11.cpp | 4 +++- @@ -8053,10 +8053,10 @@ index 908c8b6..938ad26 100644 1.8.4 -From 6054f8294c83a95ea171bf6f17746c76a495662e Mon Sep 17 00:00:00 2001 +From a1a3f92e7907318b96931242c070db069bf06527 Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Tue, 11 Jun 2013 16:20:29 +0200 -Subject: [PATCH 63/86] renderer: allow some lateness within vblank interval +Subject: [PATCH 63/92] renderer: allow some lateness within vblank interval --- xbmc/cores/VideoRenderers/RenderManager.cpp | 12 ++++++++++-- @@ -8116,10 +8116,10 @@ index 949c652b..d84ff6c 100644 1.8.4 -From dddfcdf1742f48f89c498b3919bae14fdc2d0298 Mon Sep 17 00:00:00 2001 +From 0996b9485c66c6b915d1ccf82d180720bddb292d Mon Sep 17 00:00:00 2001 From: xbmc Date: Sun, 16 Jun 2013 13:22:58 +0200 -Subject: [PATCH 64/86] X11: another fix for mouse coverage +Subject: [PATCH 64/92] X11: another fix for mouse coverage --- xbmc/windowing/WinEventsX11.cpp | 6 ++++-- @@ -8152,10 +8152,10 @@ index 938ad26..e4ca56d 100644 1.8.4 -From bffacd40a5ac6840fdc92a928595111afed5b222 Mon Sep 17 00:00:00 2001 +From e23bfb6ea51cd198801ebfcc0b9bb52748143729 Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Fri, 5 Jul 2013 12:14:00 +0200 -Subject: [PATCH 65/86] X11: set windows class name +Subject: [PATCH 65/92] X11: set windows class name --- xbmc/windowing/X11/WinSystemX11.cpp | 9 ++++++++- @@ -8197,17 +8197,17 @@ index b3fe5102..df5fe9b 100644 1.8.4 -From 0b1f4e5e718abbe33bbaffa79b323f64a4073eee Mon Sep 17 00:00:00 2001 +From 2cef61fd79b7009c2998082f5b30ae663205cd0f Mon Sep 17 00:00:00 2001 From: spiff Date: Tue, 16 Jul 2013 14:34:04 +0200 -Subject: [PATCH 66/86] fixed: typo +Subject: [PATCH 66/92] 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 11d4be5..89e533d 100755 +index eb63f11..d21ea31 100755 --- a/language/English/strings.po +++ b/language/English/strings.po @@ -6598,7 +6598,7 @@ msgstr "" @@ -8223,10 +8223,10 @@ index 11d4be5..89e533d 100755 1.8.4 -From 97f12fc309d051958aa7e6370dff592f4bc2443f Mon Sep 17 00:00:00 2001 +From fbd5b549a0a8d35c67a5433f03ebf1d9450ff276 Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Thu, 25 Jul 2013 17:18:13 +0200 -Subject: [PATCH 67/86] ActiveAE: slightly reduce buffer size +Subject: [PATCH 67/92] ActiveAE: slightly reduce buffer size --- xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAE.cpp | 4 ++-- @@ -8251,10 +8251,10 @@ index 20fd56e..7c07eec 100644 1.8.4 -From 4ce3c13d3d897876ed1fb91ed902062ae6cb434c Mon Sep 17 00:00:00 2001 +From 488fc12e9fb6d05adc5036f0befbb90b8caa5f7c Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Sun, 4 Aug 2013 10:11:16 +0200 -Subject: [PATCH 68/86] Revert "vdpau: comment some features that will be added +Subject: [PATCH 68/92] Revert "vdpau: comment some features that will be added later" This reverts commit e00b4f65864d623ab4d2e9e5c06db138e661f1cf. @@ -8310,10 +8310,10 @@ index 57bb704..55f17e5 100644 1.8.4 -From 9d1d816244e92bff7109a58c3da47aaa58e75607 Mon Sep 17 00:00:00 2001 +From 10838a10a60f9ebe3c43355e82ea41dfe570a30b Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Fri, 9 Aug 2013 18:01:40 +0200 -Subject: [PATCH 69/86] X11: fix keysyms +Subject: [PATCH 69/92] X11: fix keysyms --- xbmc/windowing/WinEventsX11.cpp | 2 +- @@ -8336,10 +8336,10 @@ index e4ca56d..b20130c 100644 1.8.4 -From 9ca5df2724e71cb0e4151d95a03c5ae0cbba582a Mon Sep 17 00:00:00 2001 +From 731c3968e9a2bb6532d4b60449b7b772422a2d30 Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Fri, 9 Aug 2013 18:42:36 +0200 -Subject: [PATCH 70/86] X11: fix keysym for non-IM +Subject: [PATCH 70/92] X11: fix keysym for non-IM --- xbmc/windowing/WinEventsX11.cpp | 2 +- @@ -8362,10 +8362,10 @@ index b20130c..a38890c 100644 1.8.4 -From ef3804963c9e656ba98e4c41661ff9578c3b118e Mon Sep 17 00:00:00 2001 +From b8ce7dffce7461b031ed0c7bd71463390036f522 Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Sat, 10 Aug 2013 11:18:16 +0200 -Subject: [PATCH 71/86] add some missing multi media keys +Subject: [PATCH 71/92] add some missing multi media keys --- system/keymaps/keyboard.xml | 3 +++ @@ -8420,10 +8420,10 @@ index ee6bb69..364b45a 100644 1.8.4 -From f274b13ff3e6b2f2a650606cda5b7d65d4825ed0 Mon Sep 17 00:00:00 2001 +From 5ee9de3b4c30e6dd864d8e5dab6211d57fb79021 Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Sat, 10 Aug 2013 15:53:45 +0200 -Subject: [PATCH 72/86] X11: squash multi +Subject: [PATCH 72/92] X11: squash multi --- xbmc/windowing/X11/WinSystemX11.cpp | 2 +- @@ -8446,10 +8446,10 @@ index df5fe9b..d8e04d6 100644 1.8.4 -From 2ff95340a57015519b908f150dfa2faa37bef121 Mon Sep 17 00:00:00 2001 +From 003e2fbfdf641afaa4c0355cfc755ad1f611f1c7 Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Tue, 3 Sep 2013 20:46:17 +0200 -Subject: [PATCH 73/86] X11: do not poll default monitor +Subject: [PATCH 73/92] X11: do not poll default monitor --- xbmc/windowing/X11/WinSystemX11.cpp | 2 +- @@ -8472,10 +8472,10 @@ index d8e04d6..01f5272 100644 1.8.4 -From 094529fc10de406f3dfc6c12d346dd26c4723704 Mon Sep 17 00:00:00 2001 +From 75ec097d9f69ef5be2a9f0532d248067a83390aa Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Tue, 29 Oct 2013 20:57:28 +0100 -Subject: [PATCH 74/86] X11: fix broken monitor switching +Subject: [PATCH 74/92] X11: fix broken monitor switching --- system/settings/settings.xml | 1 - @@ -8483,7 +8483,7 @@ Subject: [PATCH 74/86] X11: fix broken monitor switching 2 files changed, 27 insertions(+), 14 deletions(-) diff --git a/system/settings/settings.xml b/system/settings/settings.xml -index 15cac91..2ef5ca5 100644 +index 3d7ef20..a6428cd 100644 --- a/system/settings/settings.xml +++ b/system/settings/settings.xml @@ -2074,7 +2074,6 @@ @@ -8578,10 +8578,10 @@ index 40bc3b3..1663836 100644 1.8.4 -From 05ce471514bffb53de489a907ce1096c6bcd2a37 Mon Sep 17 00:00:00 2001 +From 82b404aa18bba2465e7d25936cae953b11c19ab7 Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Tue, 29 Oct 2013 20:57:59 +0100 -Subject: [PATCH 75/86] X11: remove polling for connected outputs, use xrr +Subject: [PATCH 75/92] X11: remove polling for connected outputs, use xrr events --- @@ -8882,10 +8882,10 @@ index 7ec5be4..14622cb 100644 1.8.4 -From 34438ff7cb0e001028617ef589d518c74138eecf Mon Sep 17 00:00:00 2001 +From dc430db96bd2b53e3e09b97692e3539e22bf41ff Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Thu, 31 Oct 2013 09:37:13 +0100 -Subject: [PATCH 76/86] X11: remove grabbing of keyboard and mouse +Subject: [PATCH 76/92] X11: remove grabbing of keyboard and mouse --- xbmc/windowing/WinEventsX11.cpp | 4 ---- @@ -9003,10 +9003,10 @@ index 14622cb..d1c8729 100644 1.8.4 -From afeac845b0c0e4c3d58fa3afde1f69f62241366b Mon Sep 17 00:00:00 2001 +From 8deaacb9e959e3a5cc12c030c158a7304f54a444 Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Thu, 31 Oct 2013 10:46:40 +0100 -Subject: [PATCH 77/86] X11: set ExposureMask on gl window, fixes not updated +Subject: [PATCH 77/92] X11: set ExposureMask on gl window, fixes not updated areas --- @@ -9032,10 +9032,10 @@ index 695b352..e55583c 100644 1.8.4 -From 21dc0a211d6047396d03ce12320f725d47f6a8bf Mon Sep 17 00:00:00 2001 +From e470d347c529fe996db35b777e1ef022fcba378a Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Thu, 31 Oct 2013 11:25:19 +0100 -Subject: [PATCH 78/86] X11: drop shortcuts, have WM do this +Subject: [PATCH 78/92] X11: drop shortcuts, have WM do this --- xbmc/windowing/WinEventsX11.cpp | 21 --------------------- @@ -9097,17 +9097,17 @@ index 6429291..4334d21 100644 1.8.4 -From 5ba968be56449e8ab8972dc722bb7be4a5fc0b25 Mon Sep 17 00:00:00 2001 +From 40097fd1984f97775dd89c5e0e8d99af172714d7 Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Thu, 7 Nov 2013 15:02:00 +0100 -Subject: [PATCH 79/86] X11: adapt to new settings +Subject: [PATCH 79/92] X11: adapt to new settings --- system/settings/settings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/system/settings/settings.xml b/system/settings/settings.xml -index 2ef5ca5..0bd6a92 100644 +index a6428cd..5e6a312 100644 --- a/system/settings/settings.xml +++ b/system/settings/settings.xml @@ -2034,6 +2034,7 @@ @@ -9122,17 +9122,17 @@ index 2ef5ca5..0bd6a92 100644 1.8.4 -From f3763367f2d97f40fb9924e4a204246a89dee881 Mon Sep 17 00:00:00 2001 +From 6457913ab9bdb2ab9d2c4e886c9a0814516cb4b4 Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Sat, 9 Nov 2013 12:20:05 +0100 -Subject: [PATCH 80/86] vdpau: move cropping of top and bottom lines to +Subject: [PATCH 80/92] vdpau: move cropping of top and bottom lines to renderer --- - xbmc/cores/VideoRenderers/LinuxRendererGL.cpp | 33 ++++++++++-------- - xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp | 48 ++++++++------------------ + xbmc/cores/VideoRenderers/LinuxRendererGL.cpp | 33 +++++++++-------- + xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp | 49 ++++++++------------------ xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.h | 2 +- - 3 files changed, 33 insertions(+), 50 deletions(-) + 3 files changed, 34 insertions(+), 50 deletions(-) diff --git a/xbmc/cores/VideoRenderers/LinuxRendererGL.cpp b/xbmc/cores/VideoRenderers/LinuxRendererGL.cpp index 600ffa7..9df5cdb 100644 @@ -9200,7 +9200,7 @@ index 600ffa7..9df5cdb 100644 plane.rect.x2 /= plane.texwidth; } diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp b/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp -index 55f17e5..6a53237 100644 +index 55f17e5..b8dfa2c 100644 --- a/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp +++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp @@ -1681,11 +1681,6 @@ void CMixer::CreateVdpauMixer() @@ -9241,19 +9241,20 @@ index 55f17e5..6a53237 100644 if (!(flags & DVP_FLAG_NO_POSTPROC) && (mode == VS_DEINTERLACEMODE_FORCE || -@@ -2373,6 +2369,11 @@ void CMixer::InitCycle() +@@ -2373,6 +2369,12 @@ void CMixer::InitCycle() m_processPicture.outputSurface = m_outputSurfaces.front(); m_mixerInput[1].DVDPic.iWidth = m_config.outWidth; m_mixerInput[1].DVDPic.iHeight = m_config.outHeight; + if (m_SeenInterlaceFlag) + { ++ double ratio = (double)m_mixerInput[1].DVDPic.iDisplayHeight / m_mixerInput[1].DVDPic.iHeight; + m_mixerInput[1].DVDPic.iHeight -= 6; -+ m_mixerInput[1].DVDPic.iDisplayHeight -= 6; ++ m_mixerInput[1].DVDPic.iDisplayHeight = lrint(ratio*m_mixerInput[1].DVDPic.iHeight) & ~1; + } } else { -@@ -2507,32 +2508,6 @@ void CMixer::ProcessPicture() +@@ -2507,32 +2509,6 @@ void CMixer::ProcessPicture() 0, NULL); CheckStatus(vdp_st, __LINE__); @@ -9286,7 +9287,7 @@ index 55f17e5..6a53237 100644 } -@@ -3063,7 +3038,12 @@ CVdpauRenderPicture* COutput::ProcessMixerPicture() +@@ -3063,7 +3039,12 @@ CVdpauRenderPicture* COutput::ProcessMixerPicture() GLMapSurfaces(); retPic->sourceIdx = procPic.outputSurface; retPic->texture[0] = m_bufferPool.glOutputSurfaceMap[procPic.outputSurface].texture[0]; @@ -9318,269 +9319,10 @@ index abe8da2..2dd3c28 100644 1.8.4 -From c52b3f33cce010c26be8832c16c3232e73dfd5e7 Mon Sep 17 00:00:00 2001 -From: fritsch -Date: Wed, 13 Nov 2013 08:06:51 +0100 -Subject: [PATCH 82/86] VSync: Drop OML Swap Method - ---- - xbmc/windowing/X11/WinSystemX11GL.cpp | 31 ------------------------------- - xbmc/windowing/X11/WinSystemX11GL.h | 2 -- - 2 files changed, 33 deletions(-) - -diff --git a/xbmc/windowing/X11/WinSystemX11GL.cpp b/xbmc/windowing/X11/WinSystemX11GL.cpp -index d0a8c41..aead6cc 100644 ---- a/xbmc/windowing/X11/WinSystemX11GL.cpp -+++ b/xbmc/windowing/X11/WinSystemX11GL.cpp -@@ -32,8 +32,6 @@ - m_glXWaitVideoSyncSGI = NULL; - m_glXSwapIntervalSGI = NULL; - m_glXSwapIntervalMESA = NULL; -- m_glXGetSyncValuesOML = NULL; -- m_glXSwapBuffersMscOML = NULL; - - m_iVSyncErrors = 0; - } -@@ -109,14 +107,6 @@ bool CWinSystemX11GL::PresentRenderImpl(const CDirtyRegionList& dirty) - m_iVSyncErrors = 0; - } - } -- else if (m_iVSyncMode == 5) -- { -- int64_t ust, msc, sbc; -- if(m_glXGetSyncValuesOML(m_dpy, m_glWindow, &ust, &msc, &sbc)) -- m_glXSwapBuffersMscOML(m_dpy, m_glWindow, msc, 0, 0); -- else -- CLog::Log(LOGERROR, "%s - glXSwapBuffersMscOML - Failed to get current retrace count", __FUNCTION__); -- } - else - glXSwapBuffers(m_dpy, m_glWindow); - -@@ -150,16 +140,6 @@ void CWinSystemX11GL::SetVSyncImpl(bool enable) - CLog::Log(LOGWARNING, "%s - glXSwapIntervalMESA failed", __FUNCTION__); - } - -- if(m_glXGetSyncValuesOML && m_glXSwapBuffersMscOML && m_glXSwapIntervalMESA && !m_iVSyncMode) -- { -- m_glXSwapIntervalMESA(1); -- -- int64_t ust, msc, sbc; -- if(m_glXGetSyncValuesOML(m_dpy, m_glWindow, &ust, &msc, &sbc)) -- m_iVSyncMode = 5; -- else -- CLog::Log(LOGWARNING, "%s - glXGetSyncValuesOML failed", __FUNCTION__); -- } - if (m_glXWaitVideoSyncSGI && m_glXGetVideoSyncSGI && !m_iVSyncMode && !vendor_nvidia) - { - unsigned int count; -@@ -210,17 +190,6 @@ bool CWinSystemX11GL::CreateNewWindow(const CStdString& name, bool fullScreen, R - - CLog::Log(LOGDEBUG, "GLX_EXTENSIONS:%s", m_glxext.c_str()); - -- /* any time window is recreated we need new pointers */ -- if (IsExtSupported("GLX_OML_sync_control")) -- m_glXGetSyncValuesOML = (Bool (*)(Display*, GLXDrawable, int64_t*, int64_t*, int64_t*))glXGetProcAddress((const GLubyte*)"glXGetSyncValuesOML"); -- else -- m_glXGetSyncValuesOML = NULL; -- -- if (IsExtSupported("GLX_OML_sync_control")) -- m_glXSwapBuffersMscOML = (int64_t (*)(Display*, GLXDrawable, int64_t, int64_t, int64_t))glXGetProcAddress((const GLubyte*)"glXSwapBuffersMscOML"); -- else -- m_glXSwapBuffersMscOML = NULL; -- - if (IsExtSupported("GLX_SGI_video_sync")) - m_glXWaitVideoSyncSGI = (int (*)(int, int, unsigned int*))glXGetProcAddress((const GLubyte*)"glXWaitVideoSyncSGI"); - else -diff --git a/xbmc/windowing/X11/WinSystemX11GL.h b/xbmc/windowing/X11/WinSystemX11GL.h -index 27b246f..fdc86ec 100644 ---- a/xbmc/windowing/X11/WinSystemX11GL.h -+++ b/xbmc/windowing/X11/WinSystemX11GL.h -@@ -48,8 +48,6 @@ class CWinSystemX11GL : public CWinSystemX11, public CRenderSystemGL - int (*m_glXSwapIntervalSGI)(int); - int (*m_glXSwapIntervalMESA)(int); - -- Bool (*m_glXGetSyncValuesOML)(Display* dpy, GLXDrawable drawable, int64_t* ust, int64_t* msc, int64_t* sbc); -- int64_t (*m_glXSwapBuffersMscOML)(Display* dpy, GLXDrawable drawable, int64_t target_msc, int64_t divisor,int64_t remainder); - - int m_iVSyncErrors; - }; --- -1.8.4 - - -From a148d2b05a00e0c07adebf16541afeea135da651 Mon Sep 17 00:00:00 2001 -From: fritsch -Date: Wed, 13 Nov 2013 08:09:28 +0100 -Subject: [PATCH 83/86] VSync: Prefer Mesa Swaps to SGI Swaps - ---- - xbmc/windowing/X11/WinSystemX11GL.cpp | 12 +----------- - 1 file changed, 1 insertion(+), 11 deletions(-) - -diff --git a/xbmc/windowing/X11/WinSystemX11GL.cpp b/xbmc/windowing/X11/WinSystemX11GL.cpp -index aead6cc..42200bc 100644 ---- a/xbmc/windowing/X11/WinSystemX11GL.cpp -+++ b/xbmc/windowing/X11/WinSystemX11GL.cpp -@@ -130,16 +130,14 @@ void CWinSystemX11GL::SetVSyncImpl(bool enable) - return; - - bool vendor_nvidia = strVendor.find("nvidia") != std::string::npos; -- bool vendor_ati = StringUtils::StartsWith(strVendor, "ati"); - -- if (m_glXSwapIntervalMESA && !m_iVSyncMode && vendor_ati) -+ if (m_glXSwapIntervalMESA && !m_iVSyncMode && !vendor_nvidia) - { - if(m_glXSwapIntervalMESA(1) == 0) - m_iVSyncMode = 2; - else - CLog::Log(LOGWARNING, "%s - glXSwapIntervalMESA failed", __FUNCTION__); - } -- - if (m_glXWaitVideoSyncSGI && m_glXGetVideoSyncSGI && !m_iVSyncMode && !vendor_nvidia) - { - unsigned int count; -@@ -155,14 +153,6 @@ void CWinSystemX11GL::SetVSyncImpl(bool enable) - else - CLog::Log(LOGWARNING, "%s - glXSwapIntervalSGI failed", __FUNCTION__); - } -- if (m_glXSwapIntervalMESA && !m_iVSyncMode && !vendor_ati) -- { -- if(m_glXSwapIntervalMESA(1) == 0) -- m_iVSyncMode = 2; -- else -- CLog::Log(LOGWARNING, "%s - glXSwapIntervalMESA failed", __FUNCTION__); -- } -- - } - - bool CWinSystemX11GL::IsExtSupported(const char* extension) --- -1.8.4 - - -From c28d563db4f7ecdfffe66557e43cde12a9b1b2b3 Mon Sep 17 00:00:00 2001 -From: Rainer Hochecker -Date: Wed, 13 Nov 2013 09:58:58 +0100 -Subject: [PATCH 84/86] X11: use GLX_EXT_swap_control if available - ---- - xbmc/windowing/X11/WinSystemX11GL.cpp | 27 +++++++++++++++++---------- - xbmc/windowing/X11/WinSystemX11GL.h | 2 +- - 2 files changed, 18 insertions(+), 11 deletions(-) - -diff --git a/xbmc/windowing/X11/WinSystemX11GL.cpp b/xbmc/windowing/X11/WinSystemX11GL.cpp -index 42200bc..f75ef06 100644 ---- a/xbmc/windowing/X11/WinSystemX11GL.cpp -+++ b/xbmc/windowing/X11/WinSystemX11GL.cpp -@@ -32,6 +32,7 @@ - m_glXWaitVideoSyncSGI = NULL; - m_glXSwapIntervalSGI = NULL; - m_glXSwapIntervalMESA = NULL; -+ m_glXSwapIntervalEXT = NULL; - - m_iVSyncErrors = 0; - } -@@ -116,29 +117,31 @@ bool CWinSystemX11GL::PresentRenderImpl(const CDirtyRegionList& dirty) - void CWinSystemX11GL::SetVSyncImpl(bool enable) - { - /* turn of current setting first */ -- if(m_glXSwapIntervalSGI) -- m_glXSwapIntervalSGI(0); -- if(m_glXSwapIntervalMESA) -+ if(m_glXSwapIntervalEXT) -+ m_glXSwapIntervalEXT(m_dpy, m_glWindow, 0); -+ else if(m_glXSwapIntervalMESA) - m_glXSwapIntervalMESA(0); -+ else if(m_glXSwapIntervalSGI) -+ m_glXSwapIntervalSGI(0); - - m_iVSyncErrors = 0; - -- CStdString strVendor(m_RenderVendor); -- StringUtils::ToLower(strVendor); -- - if(!enable) - return; - -- bool vendor_nvidia = strVendor.find("nvidia") != std::string::npos; -- -- if (m_glXSwapIntervalMESA && !m_iVSyncMode && !vendor_nvidia) -+ if (m_glXSwapIntervalEXT && !m_iVSyncMode) -+ { -+ m_glXSwapIntervalEXT(m_dpy, m_glWindow, 1); -+ m_iVSyncMode = 6; -+ } -+ if (m_glXSwapIntervalMESA && !m_iVSyncMode) - { - if(m_glXSwapIntervalMESA(1) == 0) - m_iVSyncMode = 2; - else - CLog::Log(LOGWARNING, "%s - glXSwapIntervalMESA failed", __FUNCTION__); - } -- if (m_glXWaitVideoSyncSGI && m_glXGetVideoSyncSGI && !m_iVSyncMode && !vendor_nvidia) -+ if (m_glXWaitVideoSyncSGI && m_glXGetVideoSyncSGI && !m_iVSyncMode) - { - unsigned int count; - if(m_glXGetVideoSyncSGI(&count) == 0) -@@ -200,6 +203,10 @@ bool CWinSystemX11GL::CreateNewWindow(const CStdString& name, bool fullScreen, R - else - m_glXSwapIntervalMESA = NULL; - -+ if (IsExtSupported("GLX_EXT_swap_control")) -+ m_glXSwapIntervalEXT = (PFNGLXSWAPINTERVALEXTPROC)glXGetProcAddress((const GLubyte*)"glXSwapIntervalEXT"); -+ else -+ m_glXSwapIntervalEXT = NULL; - - return true; - } -diff --git a/xbmc/windowing/X11/WinSystemX11GL.h b/xbmc/windowing/X11/WinSystemX11GL.h -index fdc86ec..3223d96 100644 ---- a/xbmc/windowing/X11/WinSystemX11GL.h -+++ b/xbmc/windowing/X11/WinSystemX11GL.h -@@ -47,7 +47,7 @@ class CWinSystemX11GL : public CWinSystemX11, public CRenderSystemGL - int (*m_glXWaitVideoSyncSGI)(int, int, unsigned int*); - int (*m_glXSwapIntervalSGI)(int); - int (*m_glXSwapIntervalMESA)(int); -- -+ PFNGLXSWAPINTERVALEXTPROC m_glXSwapIntervalEXT; - - int m_iVSyncErrors; - }; --- -1.8.4 - - -From dfdc253cd4350dbccdcddfb71d7542d36786b49f Mon Sep 17 00:00:00 2001 -From: Rainer Hochecker -Date: Wed, 13 Nov 2013 19:18:26 +0100 -Subject: [PATCH 85/86] fix flickering video OSD - ---- - xbmc/video/dialogs/GUIDialogVideoOSD.cpp | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/xbmc/video/dialogs/GUIDialogVideoOSD.cpp b/xbmc/video/dialogs/GUIDialogVideoOSD.cpp -index f6e5111..98c3c5a 100644 ---- a/xbmc/video/dialogs/GUIDialogVideoOSD.cpp -+++ b/xbmc/video/dialogs/GUIDialogVideoOSD.cpp -@@ -55,7 +55,8 @@ void CGUIDialogVideoOSD::FrameMove() - || g_windowManager.IsWindowActive(WINDOW_DIALOG_PVR_OSD_DIRECTOR) - || g_windowManager.IsWindowActive(WINDOW_DIALOG_PVR_OSD_CUTTER) - || g_windowManager.IsWindowActive(WINDOW_DIALOG_OSD_TELETEXT)) -- SetAutoClose(100); // enough for 10fps -+ // extend show time by original value -+ SetAutoClose(m_showDuration); - } - CGUIDialog::FrameMove(); - } --- -1.8.4 - - -From de51f7fcfe43bdb14d0e10aa1aeb3f208b2390dc Mon Sep 17 00:00:00 2001 +From d545dc2b48ae6ab577b62702cb649bf89cf15172 Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Thu, 14 Nov 2013 09:28:24 +0100 -Subject: [PATCH 86/86] X11: adapt to changes in cstdstring +Subject: [PATCH 81/92] X11: adapt to changes in cstdstring --- xbmc/windowing/X11/WinSystemX11.cpp | 4 ++-- @@ -9627,3 +9369,865 @@ index 8525ede..c94f2e3 100644 -- 1.8.4 + +From 54ea16df1ad828b35744eb60ead157fca680ee77 Mon Sep 17 00:00:00 2001 +From: Rainer Hochecker +Date: Thu, 14 Nov 2013 18:50:57 +0100 +Subject: [PATCH 82/92] dvdplayer: fix failed to get stream message, lookup + streams the same way as getting the index + +--- + xbmc/cores/dvdplayer/DVDPlayer.cpp | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/xbmc/cores/dvdplayer/DVDPlayer.cpp b/xbmc/cores/dvdplayer/DVDPlayer.cpp +index 385c1c2..0844ee1 100644 +--- a/xbmc/cores/dvdplayer/DVDPlayer.cpp ++++ b/xbmc/cores/dvdplayer/DVDPlayer.cpp +@@ -110,7 +110,7 @@ void CSelectionStreams::Clear(StreamType type, StreamSource source) + int count = -1; + for(int i=0;i<(int)m_Streams.size();i++) + { +- if(m_Streams[i].type != type) ++ if(type && m_Streams[i].type != type) + continue; + count++; + if(count == index) +-- +1.8.4 + + +From 162adb80bbd65bccc0ae533cadf4b8e5ae1ad068 Mon Sep 17 00:00:00 2001 +From: Rainer Hochecker +Date: Thu, 14 Nov 2013 19:22:01 +0100 +Subject: [PATCH 83/92] omxplayer: fix failed to get stream message + +--- + xbmc/cores/omxplayer/OMXPlayer.cpp | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/xbmc/cores/omxplayer/OMXPlayer.cpp b/xbmc/cores/omxplayer/OMXPlayer.cpp +index 0a51e8f..9e50617 100644 +--- a/xbmc/cores/omxplayer/OMXPlayer.cpp ++++ b/xbmc/cores/omxplayer/OMXPlayer.cpp +@@ -341,7 +341,7 @@ bool COMXSelectionStreams::Get(StreamType type, CDemuxStream::EFlags flag, OMXSe + CSingleLock lock(m_section); + for(int i=0;i<(int)m_Streams.size();i++) + { +- if(m_Streams[i].type != type) ++ if(type && m_Streams[i].type != type) + continue; + if((m_Streams[i].flags & flag) != flag) + continue; +-- +1.8.4 + + +From a5d7f1d30a681ed96e28568ac26f26afa11062e9 Mon Sep 17 00:00:00 2001 +From: Marcel Groothuis +Date: Fri, 8 Nov 2013 21:49:13 +0100 +Subject: [PATCH 84/92] ffmpeg demuxer: faster channel change for PVR addons + without internal demuxing (such as MediaPortal, ArgusTV, MythTV, NextPVR) + Credits: FernetMenta, Davilla, Popcornmix + +--- + lib/DllAvCodec.h | 6 +- + .../cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp | 92 ++++++++++++++++++++-- + xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.h | 3 +- + .../dvdplayer/DVDDemuxers/DVDFactoryDemuxer.cpp | 12 ++- + 4 files changed, 101 insertions(+), 12 deletions(-) + +diff --git a/lib/DllAvCodec.h b/lib/DllAvCodec.h +index 5cef736..3500670 100644 +--- a/lib/DllAvCodec.h ++++ b/lib/DllAvCodec.h +@@ -56,7 +56,7 @@ class DllAvCodecInterface + virtual ~DllAvCodecInterface() {} + virtual void avcodec_register_all(void)=0; + virtual void avcodec_flush_buffers(AVCodecContext *avctx)=0; +- virtual int avcodec_open2_dont_call(AVCodecContext *avctx, AVCodec *codec, AVDictionary **options)=0; ++ virtual int avcodec_open2_dont_call(AVCodecContext *avctx, const AVCodec *codec, AVDictionary **options)=0; + virtual AVCodec *avcodec_find_decoder(enum AVCodecID id)=0; + virtual AVCodec *avcodec_find_encoder(enum AVCodecID id)=0; + virtual int avcodec_close_dont_call(AVCodecContext *avctx)=0; +@@ -178,7 +178,7 @@ class DllAvCodec : public DllDynamic, DllAvCodecInterface + { + DECLARE_DLL_WRAPPER(DllAvCodec, DLL_PATH_LIBAVCODEC) + DEFINE_FUNC_ALIGNED1(void, __cdecl, avcodec_flush_buffers, AVCodecContext*) +- DEFINE_FUNC_ALIGNED3(int, __cdecl, avcodec_open2_dont_call, AVCodecContext*, AVCodec *, AVDictionary **) ++ DEFINE_FUNC_ALIGNED3(int, __cdecl, avcodec_open2_dont_call, AVCodecContext*, const AVCodec *, AVDictionary **) + DEFINE_FUNC_ALIGNED4(int, __cdecl, avcodec_decode_video2, AVCodecContext*, AVFrame*, int*, AVPacket*) + DEFINE_FUNC_ALIGNED4(int, __cdecl, avcodec_decode_audio4, AVCodecContext*, AVFrame*, int*, AVPacket*) + DEFINE_FUNC_ALIGNED4(int, __cdecl, avcodec_decode_subtitle2, AVCodecContext*, AVSubtitle*, int*, AVPacket*) +@@ -255,7 +255,7 @@ class DllAvCodec : public DllDynamic, DllAvCodecInterface + + public: + static CCriticalSection m_critSection; +- int avcodec_open2(AVCodecContext *avctx, AVCodec *codec, AVDictionary **options) ++ int avcodec_open2(AVCodecContext *avctx, const AVCodec *codec, AVDictionary **options) + { + CSingleLock lock(DllAvCodec::m_critSection); + return avcodec_open2_dont_call(avctx,codec, options); +diff --git a/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp b/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp +index 25c3f4f..e81ca03 100644 +--- a/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp ++++ b/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp +@@ -51,6 +51,8 @@ + #include "utils/StringUtils.h" + #include "URL.h" + ++#define FF_MAX_EXTRADATA_SIZE ((1 << 28) - FF_INPUT_BUFFER_PADDING_SIZE) ++ + void CDemuxStreamAudioFFmpeg::GetStreamInfo(std::string& strInfo) + { + if(!m_stream) return; +@@ -217,6 +219,7 @@ static offset_t dvd_file_seek(void *h, offset_t pos, int whence) + m_program = UINT_MAX; + m_pkt.result = -1; + memset(&m_pkt.pkt, 0, sizeof(AVPacket)); ++ m_streaminfo = true; /* set to true if we want to look for streams before playback */ + } + + CDVDDemuxFFmpeg::~CDVDDemuxFFmpeg() +@@ -237,10 +240,11 @@ bool CDVDDemuxFFmpeg::Aborted() + return false; + } + +-bool CDVDDemuxFFmpeg::Open(CDVDInputStream* pInput) ++bool CDVDDemuxFFmpeg::Open(CDVDInputStream* pInput, bool streaminfo) + { + AVInputFormat* iformat = NULL; + std::string strFile; ++ m_streaminfo = streaminfo; + m_iCurrentPts = DVD_NOPTS_VALUE; + m_speed = DVD_PLAYSPEED_NORMAL; + m_program = UINT_MAX; +@@ -259,8 +263,6 @@ bool CDVDDemuxFFmpeg::Open(CDVDInputStream* pInput) + m_pInput = pInput; + strFile = m_pInput->GetFileName(); + +- bool streaminfo = true; /* set to true if we want to look for streams before playback*/ +- + if( m_pInput->GetContent().length() > 0 ) + { + std::string content = m_pInput->GetContent(); +@@ -450,7 +452,7 @@ bool CDVDDemuxFFmpeg::Open(CDVDInputStream* pInput) + m_bMatroska = strncmp(m_pFormatContext->iformat->name, "matroska", 8) == 0; // for "matroska.webm" + m_bAVI = strcmp(m_pFormatContext->iformat->name, "avi") == 0; + +- if (streaminfo) ++ if (m_streaminfo) + { + /* too speed up dvd switches, only analyse very short */ + if(m_pInput->IsStreamType(DVDSTREAM_TYPE_DVD)) +@@ -476,6 +478,9 @@ bool CDVDDemuxFFmpeg::Open(CDVDInputStream* pInput) + } + CLog::Log(LOGDEBUG, "%s - av_find_stream_info finished", __FUNCTION__); + } ++ else ++ m_program = 0; ++ + // reset any timeout + m_timeout.SetInfinite(); + +@@ -533,7 +538,7 @@ void CDVDDemuxFFmpeg::Reset() + { + CDVDInputStream* pInputStream = m_pInput; + Dispose(); +- Open(pInputStream); ++ Open(pInputStream, m_streaminfo); + } + + void CDVDDemuxFFmpeg::Flush() +@@ -730,6 +735,83 @@ DemuxPacket* CDVDDemuxFFmpeg::Read() + { + AVStream *stream = m_pFormatContext->streams[m_pkt.pkt.stream_index]; + ++ AVStream *st = m_pFormatContext->streams[m_pkt.pkt.stream_index]; ++ // Fast udp/mpegts startup and channel switching. ++ // Set streaminfo false to skip avformat_find_stream_info (slow) ++ // But we do need a proper codec extradata so fill it in for ffmpeg. ++ // The idea is to detect an IDR: SPS + PPS + frame which can be decoded. ++ // This block is not entered if we already split extradata. ++ // This routine is based on avformat_find_stream_info and friends. ++ if(st->parser && st->parser->parser->split && !st->codec->extradata) ++ { ++ int i = st->parser->parser->split(st->codec, m_pkt.pkt.data, m_pkt.pkt.size); ++ if (i > 0 && i < FF_MAX_EXTRADATA_SIZE) ++ { ++ // Found extradata, fill it in. This will cause ++ // a new stream to be created and used. ++ st->codec->extradata_size = i; ++ st->codec->extradata = (uint8_t*)m_dllAvUtil.av_malloc(st->codec->extradata_size + FF_INPUT_BUFFER_PADDING_SIZE); ++ if (st->codec->extradata) ++ { ++ CLog::Log(LOGDEBUG, "CDVDDemuxFFmpeg::Read() fetching extradata, extradata_size(%d)", st->codec->extradata_size); ++ memcpy(st->codec->extradata, m_pkt.pkt.data, st->codec->extradata_size); ++ memset(st->codec->extradata + i, 0, FF_INPUT_BUFFER_PADDING_SIZE); ++ ++ if (st->codec->codec_type == AVMEDIA_TYPE_VIDEO) ++ { ++ const AVCodec* codec; ++ AVDictionary *thread_opt = NULL; ++ codec = st->codec->codec ? st->codec->codec : m_dllAvCodec.avcodec_find_decoder(st->codec->codec_id); ++ // Force thread count to 1 since the h264 decoder will not extract ++ // SPS and PPS to extradata during multi-threaded decoding ++ m_dllAvUtil.av_dict_set(&thread_opt, "threads", "1", 0); ++ m_dllAvCodec.avcodec_open2(st->codec, codec, &thread_opt); ++ ++ // We don't need to actually decode here ++ st->codec->skip_idct = AVDISCARD_ALL; ++ st->codec->skip_frame = AVDISCARD_ALL; ++ st->codec->skip_loop_filter = AVDISCARD_ALL; ++ ++ // This assumes that the current ffmpeg pkt contains a key_frame ++ AVFrame picture; ++ memset(&picture, 0, sizeof(AVFrame)); ++ picture.pts = picture.pkt_dts = picture.pkt_pts = picture.best_effort_timestamp = AV_NOPTS_VALUE; ++ picture.pkt_pos = -1; ++ picture.key_frame = 1; ++ picture.format = -1; ++ ++ int rtn, got_picture = 0; ++ rtn = m_dllAvCodec.avcodec_decode_video2(st->codec, &picture, &got_picture, &m_pkt.pkt); ++ if (rtn < 0) ++ { ++ CLog::Log(LOGDEBUG, "CDVDDemuxFFmpeg::Read() decode failed (return value=%d)", rtn); ++ // Clear the extradata to allow entering this extradata section again ++ m_dllAvUtil.av_free(st->codec->extradata); ++ st->codec->extradata = NULL; ++ st->codec->extradata_size = 0; ++ } ++ ++ m_dllAvCodec.avcodec_close(st->codec); ++ m_dllAvUtil.av_dict_free(&thread_opt); ++ ++ st->parser->flags = 0; ++ int has_codec_parameters = st->codec->width && st->codec->pix_fmt != PIX_FMT_NONE; ++ //CLog::Log(LOGDEBUG, "CDVDDemuxFFmpeg::Read() rtn(%d), got_picture(%d), has_codec_parameters(%d)", rtn, got_picture, has_codec_parameters); ++ ++ if (!has_codec_parameters) ++ { ++ pPacket = CDVDDemuxUtils::AllocateDemuxPacket(0); ++ return pPacket; ++ } ++ } ++ } ++ else ++ { ++ st->codec->extradata_size = 0; ++ } ++ } ++ } ++ + if (m_program != UINT_MAX) + { + /* check so packet belongs to selected program */ +diff --git a/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.h b/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.h +index 35abbdf..309f554 100644 +--- a/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.h ++++ b/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.h +@@ -89,7 +89,7 @@ class CDVDDemuxFFmpeg : public CDVDDemux + CDVDDemuxFFmpeg(); + virtual ~CDVDDemuxFFmpeg(); + +- bool Open(CDVDInputStream* pInput); ++ bool Open(CDVDInputStream* pInput, bool streaminfo = true); + void Dispose(); + void Reset(); + void Flush(); +@@ -162,5 +162,6 @@ class CDVDDemuxFFmpeg : public CDVDDemux + + bool m_bPtsWrap, m_bPtsWrapChecked; + int64_t m_iStartTime, m_iMaxTime, m_iEndTime; ++ bool m_streaminfo; + }; + +diff --git a/xbmc/cores/dvdplayer/DVDDemuxers/DVDFactoryDemuxer.cpp b/xbmc/cores/dvdplayer/DVDDemuxers/DVDFactoryDemuxer.cpp +index ca689d0..081219b 100644 +--- a/xbmc/cores/dvdplayer/DVDDemuxers/DVDFactoryDemuxer.cpp ++++ b/xbmc/cores/dvdplayer/DVDDemuxers/DVDFactoryDemuxer.cpp +@@ -99,17 +99,23 @@ CDVDDemux* CDVDFactoryDemuxer::CreateDemuxer(CDVDInputStream* pInputStream) + } + #endif + ++ bool streaminfo = true; /* Look for streams before playback */ + if (pInputStream->IsStreamType(DVDSTREAM_TYPE_PVRMANAGER)) + { + CDVDInputStreamPVRManager* pInputStreamPVR = (CDVDInputStreamPVRManager*)pInputStream; + CDVDInputStream* pOtherStream = pInputStreamPVR->GetOtherStream(); ++ ++ /* Don't parse the streaminfo for live streams to reduce the channel switch time */ ++ bool liveStream = (pInputStream->GetFileName().substr(0, 14) == "pvr://channels"); ++ streaminfo = !liveStream; ++ + if(pOtherStream) + { + /* Used for MediaPortal PVR addon (uses PVR otherstream for playback of rtsp streams) */ + if (pOtherStream->IsStreamType(DVDSTREAM_TYPE_FFMPEG)) + { + auto_ptr demuxer(new CDVDDemuxFFmpeg()); +- if(demuxer->Open(pOtherStream)) ++ if(demuxer->Open(pOtherStream, streaminfo)) + return demuxer.release(); + else + return NULL; +@@ -118,7 +124,7 @@ CDVDDemux* CDVDFactoryDemuxer::CreateDemuxer(CDVDInputStream* pInputStream) + + std::string filename = pInputStream->GetFileName(); + /* Use PVR demuxer only for live streams */ +- if (filename.substr(0, 14) == "pvr://channels") ++ if (liveStream) + { + boost::shared_ptr client; + if (g_PVRClients->GetPlayingClient(client) && +@@ -134,7 +140,7 @@ CDVDDemux* CDVDFactoryDemuxer::CreateDemuxer(CDVDInputStream* pInputStream) + } + + auto_ptr demuxer(new CDVDDemuxFFmpeg()); +- if(demuxer->Open(pInputStream)) ++ if(demuxer->Open(pInputStream, streaminfo)) + return demuxer.release(); + else + return NULL; +-- +1.8.4 + + +From b5912bb3895da563bae59b4f717f376b6d81c2e1 Mon Sep 17 00:00:00 2001 +From: Rainer Hochecker +Date: Sun, 10 Nov 2013 10:13:06 +0100 +Subject: [PATCH 85/92] ffmpeg demuxer: refactoring for fast channel change + +--- + .../cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp | 156 +++++++++++---------- + xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.h | 1 + + 2 files changed, 81 insertions(+), 76 deletions(-) + +diff --git a/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp b/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp +index e81ca03..7fdd465 100644 +--- a/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp ++++ b/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp +@@ -733,85 +733,13 @@ DemuxPacket* CDVDDemuxFFmpeg::Read() + } + else + { +- AVStream *stream = m_pFormatContext->streams[m_pkt.pkt.stream_index]; +- +- AVStream *st = m_pFormatContext->streams[m_pkt.pkt.stream_index]; +- // Fast udp/mpegts startup and channel switching. +- // Set streaminfo false to skip avformat_find_stream_info (slow) +- // But we do need a proper codec extradata so fill it in for ffmpeg. +- // The idea is to detect an IDR: SPS + PPS + frame which can be decoded. +- // This block is not entered if we already split extradata. +- // This routine is based on avformat_find_stream_info and friends. +- if(st->parser && st->parser->parser->split && !st->codec->extradata) ++ if (!m_streaminfo) + { +- int i = st->parser->parser->split(st->codec, m_pkt.pkt.data, m_pkt.pkt.size); +- if (i > 0 && i < FF_MAX_EXTRADATA_SIZE) +- { +- // Found extradata, fill it in. This will cause +- // a new stream to be created and used. +- st->codec->extradata_size = i; +- st->codec->extradata = (uint8_t*)m_dllAvUtil.av_malloc(st->codec->extradata_size + FF_INPUT_BUFFER_PADDING_SIZE); +- if (st->codec->extradata) +- { +- CLog::Log(LOGDEBUG, "CDVDDemuxFFmpeg::Read() fetching extradata, extradata_size(%d)", st->codec->extradata_size); +- memcpy(st->codec->extradata, m_pkt.pkt.data, st->codec->extradata_size); +- memset(st->codec->extradata + i, 0, FF_INPUT_BUFFER_PADDING_SIZE); +- +- if (st->codec->codec_type == AVMEDIA_TYPE_VIDEO) +- { +- const AVCodec* codec; +- AVDictionary *thread_opt = NULL; +- codec = st->codec->codec ? st->codec->codec : m_dllAvCodec.avcodec_find_decoder(st->codec->codec_id); +- // Force thread count to 1 since the h264 decoder will not extract +- // SPS and PPS to extradata during multi-threaded decoding +- m_dllAvUtil.av_dict_set(&thread_opt, "threads", "1", 0); +- m_dllAvCodec.avcodec_open2(st->codec, codec, &thread_opt); +- +- // We don't need to actually decode here +- st->codec->skip_idct = AVDISCARD_ALL; +- st->codec->skip_frame = AVDISCARD_ALL; +- st->codec->skip_loop_filter = AVDISCARD_ALL; +- +- // This assumes that the current ffmpeg pkt contains a key_frame +- AVFrame picture; +- memset(&picture, 0, sizeof(AVFrame)); +- picture.pts = picture.pkt_dts = picture.pkt_pts = picture.best_effort_timestamp = AV_NOPTS_VALUE; +- picture.pkt_pos = -1; +- picture.key_frame = 1; +- picture.format = -1; +- +- int rtn, got_picture = 0; +- rtn = m_dllAvCodec.avcodec_decode_video2(st->codec, &picture, &got_picture, &m_pkt.pkt); +- if (rtn < 0) +- { +- CLog::Log(LOGDEBUG, "CDVDDemuxFFmpeg::Read() decode failed (return value=%d)", rtn); +- // Clear the extradata to allow entering this extradata section again +- m_dllAvUtil.av_free(st->codec->extradata); +- st->codec->extradata = NULL; +- st->codec->extradata_size = 0; +- } +- +- m_dllAvCodec.avcodec_close(st->codec); +- m_dllAvUtil.av_dict_free(&thread_opt); +- +- st->parser->flags = 0; +- int has_codec_parameters = st->codec->width && st->codec->pix_fmt != PIX_FMT_NONE; +- //CLog::Log(LOGDEBUG, "CDVDDemuxFFmpeg::Read() rtn(%d), got_picture(%d), has_codec_parameters(%d)", rtn, got_picture, has_codec_parameters); +- +- if (!has_codec_parameters) +- { +- pPacket = CDVDDemuxUtils::AllocateDemuxPacket(0); +- return pPacket; +- } +- } +- } +- else +- { +- st->codec->extradata_size = 0; +- } +- } ++ GetStreamInfo(&m_pkt.pkt); + } + ++ AVStream *stream = m_pFormatContext->streams[m_pkt.pkt.stream_index]; ++ + if (m_program != UINT_MAX) + { + /* check so packet belongs to selected program */ +@@ -1766,3 +1694,79 @@ bool CDVDDemuxFFmpeg::IsProgramChange() + } + return false; + } ++ ++void CDVDDemuxFFmpeg::GetStreamInfo(AVPacket *pkt) ++{ ++ AVStream *st = m_pFormatContext->streams[pkt->stream_index]; ++ CDemuxStream *stream = GetStreamInternal(pkt->stream_index); ++ ++ // if the stream is new, tell ffmpeg to parse the stream ++ if (!stream && !st->parser) ++ { ++ st->need_parsing = AVSTREAM_PARSE_FULL; ++ } ++ ++ // split extradata and decode some info for video streams ++ if(st->parser && st->parser->parser->split && !st->codec->extradata) ++ { ++ int i = st->parser->parser->split(st->codec, pkt->data, pkt->size); ++ if (i > 0 && i < FF_MAX_EXTRADATA_SIZE) ++ { ++ // Found extradata, fill it in. This will cause ++ // a new stream to be created and used. ++ st->codec->extradata_size = i; ++ st->codec->extradata = (uint8_t*)m_dllAvUtil.av_malloc(st->codec->extradata_size + FF_INPUT_BUFFER_PADDING_SIZE); ++ if (st->codec->extradata) ++ { ++ CLog::Log(LOGDEBUG, "CDVDDemuxFFmpeg::Read() fetching extradata, extradata_size(%d)", st->codec->extradata_size); ++ memcpy(st->codec->extradata, pkt->data, st->codec->extradata_size); ++ memset(st->codec->extradata + i, 0, FF_INPUT_BUFFER_PADDING_SIZE); ++ ++ if (st->codec->codec_type == AVMEDIA_TYPE_VIDEO) ++ { ++ const AVCodec* codec; ++ AVDictionary *thread_opt = NULL; ++ codec = st->codec->codec ? st->codec->codec : m_dllAvCodec.avcodec_find_decoder(st->codec->codec_id); ++ // Force thread count to 1 since the h264 decoder will not extract ++ // SPS and PPS to extradata during multi-threaded decoding ++ m_dllAvUtil.av_dict_set(&thread_opt, "threads", "1", 0); ++ m_dllAvCodec.avcodec_open2(st->codec, codec, &thread_opt); ++ ++ // We don't need to actually decode here ++ st->codec->skip_idct = AVDISCARD_ALL; ++ st->codec->skip_frame = AVDISCARD_ALL; ++ st->codec->skip_loop_filter = AVDISCARD_ALL; ++ ++ // We are looking for an IDR frame ++ AVFrame picture; ++ memset(&picture, 0, sizeof(AVFrame)); ++ picture.pts = picture.pkt_dts = picture.pkt_pts = picture.best_effort_timestamp = AV_NOPTS_VALUE; ++ picture.pkt_pos = -1; ++ picture.key_frame = 1; ++ picture.format = -1; ++ ++ int rtn, got_picture = 0; ++ rtn = m_dllAvCodec.avcodec_decode_video2(st->codec, &picture, &got_picture, pkt); ++ if (rtn < 0 || !st->codec->width || st->codec->pix_fmt == PIX_FMT_NONE) ++ { ++ CLog::Log(LOGDEBUG, "CDVDDemuxFFmpeg::Read() decode failed (return value=%d)", rtn); ++ // Clear the extradata to allow entering this extradata section again ++ m_dllAvUtil.av_free(st->codec->extradata); ++ st->codec->extradata = NULL; ++ st->codec->extradata_size = 0; ++ } ++ ++ m_dllAvCodec.avcodec_close(st->codec); ++ m_dllAvUtil.av_dict_free(&thread_opt); ++ ++ st->parser->flags = 0; ++ } ++ } ++ else ++ { ++ st->codec->extradata_size = 0; ++ } ++ } ++ } ++ ++} +diff --git a/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.h b/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.h +index 309f554..e89022a 100644 +--- a/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.h ++++ b/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.h +@@ -128,6 +128,7 @@ class CDVDDemuxFFmpeg : public CDVDDemux + CDemuxStream* GetStreamInternal(int iStreamId); + void CreateStreams(unsigned int program = UINT_MAX); + void DisposeStreams(); ++ void GetStreamInfo(AVPacket *pkt); + + AVDictionary *GetFFMpegOptionsFromURL(const CURL &url); + double ConvertTimestamp(int64_t pts, int den, int num); +-- +1.8.4 + + +From adbefdeb016916850ef17abeaaa3f62481220265 Mon Sep 17 00:00:00 2001 +From: Rainer Hochecker +Date: Wed, 13 Nov 2013 08:53:04 +0100 +Subject: [PATCH 86/92] ffmpeg demuxer: reduce time for finding stream info + +--- + .../cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp | 141 ++++++++++++--------- + xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.h | 3 +- + 2 files changed, 83 insertions(+), 61 deletions(-) + +diff --git a/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp b/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp +index 7fdd465..2c1aeb6 100644 +--- a/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp ++++ b/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp +@@ -454,10 +454,7 @@ bool CDVDDemuxFFmpeg::Open(CDVDInputStream* pInput, bool streaminfo) + + if (m_streaminfo) + { +- /* too speed up dvd switches, only analyse very short */ +- if(m_pInput->IsStreamType(DVDSTREAM_TYPE_DVD)) +- m_pFormatContext->max_analyze_duration = 500000; +- ++ m_pFormatContext->max_analyze_duration = 500000; + + CLog::Log(LOGDEBUG, "%s - avformat_find_stream_info starting", __FUNCTION__); + int iErr = m_dllAvFormat.avformat_find_stream_info(m_pFormatContext, NULL); +@@ -733,30 +730,32 @@ DemuxPacket* CDVDDemuxFFmpeg::Read() + } + else + { +- if (!m_streaminfo) +- { +- GetStreamInfo(&m_pkt.pkt); +- } ++ ParsePacket(&m_pkt.pkt); + + AVStream *stream = m_pFormatContext->streams[m_pkt.pkt.stream_index]; + +- if (m_program != UINT_MAX) ++ if (IsVideoReady()) + { +- /* check so packet belongs to selected program */ +- for (unsigned int i = 0; i < m_pFormatContext->programs[m_program]->nb_stream_indexes; i++) ++ if (m_program != UINT_MAX) + { +- if(m_pkt.pkt.stream_index == (int)m_pFormatContext->programs[m_program]->stream_index[i]) ++ /* check so packet belongs to selected program */ ++ for (unsigned int i = 0; i < m_pFormatContext->programs[m_program]->nb_stream_indexes; i++) + { +- pPacket = CDVDDemuxUtils::AllocateDemuxPacket(m_pkt.pkt.size); +- break; ++ if(m_pkt.pkt.stream_index == (int)m_pFormatContext->programs[m_program]->stream_index[i]) ++ { ++ pPacket = CDVDDemuxUtils::AllocateDemuxPacket(m_pkt.pkt.size); ++ break; ++ } + } +- } + +- if (!pPacket) +- bReturnEmpty = true; ++ if (!pPacket) ++ bReturnEmpty = true; ++ } ++ else ++ pPacket = CDVDDemuxUtils::AllocateDemuxPacket(m_pkt.pkt.size); + } + else +- pPacket = CDVDDemuxUtils::AllocateDemuxPacket(m_pkt.pkt.size); ++ bReturnEmpty = true; + + if (pPacket) + { +@@ -1695,7 +1694,7 @@ bool CDVDDemuxFFmpeg::IsProgramChange() + return false; + } + +-void CDVDDemuxFFmpeg::GetStreamInfo(AVPacket *pkt) ++void CDVDDemuxFFmpeg::ParsePacket(AVPacket *pkt) + { + AVStream *st = m_pFormatContext->streams[pkt->stream_index]; + CDemuxStream *stream = GetStreamInternal(pkt->stream_index); +@@ -1706,7 +1705,7 @@ void CDVDDemuxFFmpeg::GetStreamInfo(AVPacket *pkt) + st->need_parsing = AVSTREAM_PARSE_FULL; + } + +- // split extradata and decode some info for video streams ++ // split extradata + if(st->parser && st->parser->parser->split && !st->codec->extradata) + { + int i = st->parser->parser->split(st->codec, pkt->data, pkt->size); +@@ -1721,46 +1720,6 @@ void CDVDDemuxFFmpeg::GetStreamInfo(AVPacket *pkt) + CLog::Log(LOGDEBUG, "CDVDDemuxFFmpeg::Read() fetching extradata, extradata_size(%d)", st->codec->extradata_size); + memcpy(st->codec->extradata, pkt->data, st->codec->extradata_size); + memset(st->codec->extradata + i, 0, FF_INPUT_BUFFER_PADDING_SIZE); +- +- if (st->codec->codec_type == AVMEDIA_TYPE_VIDEO) +- { +- const AVCodec* codec; +- AVDictionary *thread_opt = NULL; +- codec = st->codec->codec ? st->codec->codec : m_dllAvCodec.avcodec_find_decoder(st->codec->codec_id); +- // Force thread count to 1 since the h264 decoder will not extract +- // SPS and PPS to extradata during multi-threaded decoding +- m_dllAvUtil.av_dict_set(&thread_opt, "threads", "1", 0); +- m_dllAvCodec.avcodec_open2(st->codec, codec, &thread_opt); +- +- // We don't need to actually decode here +- st->codec->skip_idct = AVDISCARD_ALL; +- st->codec->skip_frame = AVDISCARD_ALL; +- st->codec->skip_loop_filter = AVDISCARD_ALL; +- +- // We are looking for an IDR frame +- AVFrame picture; +- memset(&picture, 0, sizeof(AVFrame)); +- picture.pts = picture.pkt_dts = picture.pkt_pts = picture.best_effort_timestamp = AV_NOPTS_VALUE; +- picture.pkt_pos = -1; +- picture.key_frame = 1; +- picture.format = -1; +- +- int rtn, got_picture = 0; +- rtn = m_dllAvCodec.avcodec_decode_video2(st->codec, &picture, &got_picture, pkt); +- if (rtn < 0 || !st->codec->width || st->codec->pix_fmt == PIX_FMT_NONE) +- { +- CLog::Log(LOGDEBUG, "CDVDDemuxFFmpeg::Read() decode failed (return value=%d)", rtn); +- // Clear the extradata to allow entering this extradata section again +- m_dllAvUtil.av_free(st->codec->extradata); +- st->codec->extradata = NULL; +- st->codec->extradata_size = 0; +- } +- +- m_dllAvCodec.avcodec_close(st->codec); +- m_dllAvUtil.av_dict_free(&thread_opt); +- +- st->parser->flags = 0; +- } + } + else + { +@@ -1769,4 +1728,66 @@ void CDVDDemuxFFmpeg::GetStreamInfo(AVPacket *pkt) + } + } + ++ // for video we need a decoder to get desired information into codec context ++ if (st->codec->codec_type == AVMEDIA_TYPE_VIDEO && ++ (!st->codec->width || st->codec->pix_fmt == PIX_FMT_NONE)) ++ { ++ // open a decoder, it will be cleared down by ffmpeg on closing the stream ++ if (!st->codec->codec) ++ { ++ const AVCodec* codec; ++ AVDictionary *thread_opt = NULL; ++ codec = m_dllAvCodec.avcodec_find_decoder(st->codec->codec_id); ++ // Force thread count to 1 since the h264 decoder will not extract ++ // SPS and PPS to extradata during multi-threaded decoding ++ m_dllAvUtil.av_dict_set(&thread_opt, "threads", "1", 0); ++ m_dllAvCodec.avcodec_open2(st->codec, codec, &thread_opt); ++ ++ m_dllAvUtil.av_dict_free(&thread_opt); ++ } ++ ++ // We don't need to actually decode here ++ // we just want to transport SPS data into codec context ++ st->codec->skip_idct = AVDISCARD_ALL; ++ st->codec->skip_frame = AVDISCARD_ALL; ++ st->codec->skip_loop_filter = AVDISCARD_ALL; ++ ++ // We are looking for an IDR frame ++ AVFrame picture; ++ memset(&picture, 0, sizeof(AVFrame)); ++ picture.pts = picture.pkt_dts = picture.pkt_pts = picture.best_effort_timestamp = AV_NOPTS_VALUE; ++ picture.pkt_pos = -1; ++ picture.key_frame = 1; ++ picture.format = -1; ++ ++ int got_picture = 0; ++ m_dllAvCodec.avcodec_decode_video2(st->codec, &picture, &got_picture, pkt); ++ } ++} ++ ++bool CDVDDemuxFFmpeg::IsVideoReady() ++{ ++ AVStream *st; ++ if(m_program != UINT_MAX) ++ { ++ for (unsigned int i = 0; i < m_pFormatContext->programs[m_program]->nb_stream_indexes; i++) ++ { ++ int idx = m_pFormatContext->programs[m_program]->stream_index[i]; ++ st = m_pFormatContext->streams[idx]; ++ if (st->codec->codec_type == AVMEDIA_TYPE_VIDEO && ++ (!st->codec->width || st->codec->pix_fmt == PIX_FMT_NONE)) ++ return false; ++ } ++ } ++ else ++ { ++ for (unsigned int i = 0; i < m_pFormatContext->nb_streams; i++) ++ { ++ st = m_pFormatContext->streams[i]; ++ if (st->codec->codec_type == AVMEDIA_TYPE_VIDEO && ++ (!st->codec->width || st->codec->pix_fmt == PIX_FMT_NONE)) ++ return false; ++ } ++ } ++ return true; + } +diff --git a/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.h b/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.h +index e89022a..acde9a8 100644 +--- a/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.h ++++ b/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.h +@@ -128,7 +128,8 @@ class CDVDDemuxFFmpeg : public CDVDDemux + CDemuxStream* GetStreamInternal(int iStreamId); + void CreateStreams(unsigned int program = UINT_MAX); + void DisposeStreams(); +- void GetStreamInfo(AVPacket *pkt); ++ void ParsePacket(AVPacket *pkt); ++ bool IsVideoReady(); + + AVDictionary *GetFFMpegOptionsFromURL(const CURL &url); + double ConvertTimestamp(int64_t pts, int den, int num); +-- +1.8.4 + + +From 14d11c27a3f73db5c69d46040e823630f1626654 Mon Sep 17 00:00:00 2001 +From: Rainer Hochecker +Date: Thu, 14 Nov 2013 20:35:04 +0100 +Subject: [PATCH 87/92] ffmoeg demuxer: make sure we start video with an + i-frame + +--- + xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp | 21 ++++++++++++++++++++- + xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.h | 1 + + 2 files changed, 21 insertions(+), 1 deletion(-) + +diff --git a/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp b/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp +index 2c1aeb6..aba9b6c 100644 +--- a/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp ++++ b/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp +@@ -474,6 +474,9 @@ bool CDVDDemuxFFmpeg::Open(CDVDInputStream* pInput, bool streaminfo) + } + } + CLog::Log(LOGDEBUG, "%s - av_find_stream_info finished", __FUNCTION__); ++ ++ // make sure we start video with an i-frame ++ ResetVideoStreams(); + } + else + m_program = 0; +@@ -1729,7 +1732,7 @@ void CDVDDemuxFFmpeg::ParsePacket(AVPacket *pkt) + } + + // for video we need a decoder to get desired information into codec context +- if (st->codec->codec_type == AVMEDIA_TYPE_VIDEO && ++ if (st->codec->codec_type == AVMEDIA_TYPE_VIDEO && st->codec->extradata && + (!st->codec->width || st->codec->pix_fmt == PIX_FMT_NONE)) + { + // open a decoder, it will be cleared down by ffmpeg on closing the stream +@@ -1791,3 +1794,19 @@ bool CDVDDemuxFFmpeg::IsVideoReady() + } + return true; + } ++ ++void CDVDDemuxFFmpeg::ResetVideoStreams() ++{ ++ AVStream *st; ++ for (unsigned int i = 0; i < m_pFormatContext->nb_streams; i++) ++ { ++ st = m_pFormatContext->streams[i]; ++ if (st->codec->codec_type == AVMEDIA_TYPE_VIDEO) ++ { ++ if (st->codec->extradata) ++ m_dllAvUtil.av_free(st->codec->extradata); ++ st->codec->extradata = NULL; ++ st->codec->width = 0; ++ } ++ } ++} +diff --git a/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.h b/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.h +index acde9a8..9ec0877 100644 +--- a/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.h ++++ b/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.h +@@ -130,6 +130,7 @@ class CDVDDemuxFFmpeg : public CDVDDemux + void DisposeStreams(); + void ParsePacket(AVPacket *pkt); + bool IsVideoReady(); ++ void ResetVideoStreams(); + + AVDictionary *GetFFMpegOptionsFromURL(const CURL &url); + double ConvertTimestamp(int64_t pts, int den, int num); +-- +1.8.4 + + +From b62125cabcd716530de6b92918c16df221126d17 Mon Sep 17 00:00:00 2001 +From: Rainer Hochecker +Date: Sat, 16 Nov 2013 16:30:20 +0100 +Subject: [PATCH 91/92] ffmpeg demuxer: short anylyze time for mpegts, squash + me + +--- + xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp | 14 ++++++++++++-- + 1 file changed, 12 insertions(+), 2 deletions(-) + +diff --git a/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp b/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp +index aba9b6c..456c1c0 100644 +--- a/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp ++++ b/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp +@@ -448,6 +448,13 @@ bool CDVDDemuxFFmpeg::Open(CDVDInputStream* pInput, bool streaminfo) + if (iformat && (strcmp(iformat->name, "mjpeg") == 0) && m_ioContext->seekable == 0) + m_pFormatContext->max_analyze_duration = 500000; + ++ bool short_analyze = false; ++ if (iformat && (strcmp(iformat->name, "mpegts") == 0)) ++ { ++ m_pFormatContext->max_analyze_duration = 500000; ++ short_analyze = true; ++ } ++ + // we need to know if this is matroska or avi later + m_bMatroska = strncmp(m_pFormatContext->iformat->name, "matroska", 8) == 0; // for "matroska.webm" + m_bAVI = strcmp(m_pFormatContext->iformat->name, "avi") == 0; +@@ -475,8 +482,11 @@ bool CDVDDemuxFFmpeg::Open(CDVDInputStream* pInput, bool streaminfo) + } + CLog::Log(LOGDEBUG, "%s - av_find_stream_info finished", __FUNCTION__); + +- // make sure we start video with an i-frame +- ResetVideoStreams(); ++ if (short_analyze) ++ { ++ // make sure we start video with an i-frame ++ ResetVideoStreams(); ++ } + } + else + m_program = 0; +-- +1.8.4 diff --git a/packages/mediacenter/xbmc/patches/xbmc-995.02-fm-fix.patch b/packages/mediacenter/xbmc/patches/xbmc-995.02-fm-fix.patch new file mode 100644 index 0000000000..813cd4de04 --- /dev/null +++ b/packages/mediacenter/xbmc/patches/xbmc-995.02-fm-fix.patch @@ -0,0 +1,31 @@ +From d0950a72afe9eb62048084b3444dafa480ffd76b Mon Sep 17 00:00:00 2001 +From: Marcel Groothuis +Date: Sun, 17 Nov 2013 17:40:40 +0100 +Subject: [PATCH] Fixed: compilation against external ffmpeg + +--- + lib/DllAvCodec.h | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/lib/DllAvCodec.h b/lib/DllAvCodec.h +index 3500670..cfffe2d 100644 +--- a/lib/DllAvCodec.h ++++ b/lib/DllAvCodec.h +@@ -109,12 +109,12 @@ class DllAvCodec : public DllDynamic, DllAvCodecInterface + ::avcodec_register_all(); + } + virtual void avcodec_flush_buffers(AVCodecContext *avctx) { ::avcodec_flush_buffers(avctx); } +- virtual int avcodec_open2(AVCodecContext *avctx, AVCodec *codec, AVDictionary **options) ++ virtual int avcodec_open2(AVCodecContext *avctx, const AVCodec *codec, AVDictionary **options) + { + CSingleLock lock(DllAvCodec::m_critSection); + return ::avcodec_open2(avctx, codec, options); + } +- virtual int avcodec_open2_dont_call(AVCodecContext *avctx, AVCodec *codec, AVDictionary **options) { *(volatile int *)0x0 = 0; return 0; } ++ virtual int avcodec_open2_dont_call(AVCodecContext *avctx, const AVCodec *codec, AVDictionary **options) { *(volatile int *)0x0 = 0; return 0; } + virtual int avcodec_close_dont_call(AVCodecContext *avctx) { *(volatile int *)0x0 = 0; return 0; } + virtual AVCodec *avcodec_find_decoder(enum AVCodecID id) { return ::avcodec_find_decoder(id); } + virtual AVCodec *avcodec_find_encoder(enum AVCodecID id) { return ::avcodec_find_encoder(id); } +-- +1.8.4 +