diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index f5e47e4299..0045be0e11 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,11 +1,14 @@ -## Questions about OpenELEC? +### Questions about OpenELEC? To get your questions answered, please ask in the OpenELEC [Forum], on IRC: -#openelec on freenode.net, or [webchat]. +\#openelec on freenode.net, or [webchat]. Do not open an issue. -## Issue Reports +### Issue Reports + +**BEFORE you report a bug make sure you got the latest testing version of +OpenELEC. Your bug might be already fixed.** If you are at all unsure whether it's a bug in OpenELEC or a problem with something else, post in the OpenELEC [Forum] instead. If it turns out that it is @@ -17,8 +20,8 @@ and try to answer the following questions: - What did you expect to happen? - What happened instead? -It is also importent to provide logs for debugging. -A zip file can be found in the [logfiles] samba share, this will contain all the logs needed. +**It is also importent to provide logs for debugging. +A zip file can be found in the [logfiles] samba share, this will contain all the logs needed.** Make sure to specify which version of OpenELEC you are using. - OpenELEC version @@ -32,7 +35,7 @@ Feature requests are great, but they usually end up lying around the issue tracker indefinitely. Sending a pull request is a much better way of getting a particular feature into OpenELEC. -## Pull Requests +### Pull Requests - **Create topic branches**. Don't ask us to pull from your master branch. diff --git a/packages/mediacenter/xbmc-pvr-addons/patches/xbmc-pvr-addons-buildfix.patch b/packages/mediacenter/xbmc-pvr-addons/patches/xbmc-pvr-addons-buildfix.patch index 3fbc6daea6..137c54d398 100644 --- a/packages/mediacenter/xbmc-pvr-addons/patches/xbmc-pvr-addons-buildfix.patch +++ b/packages/mediacenter/xbmc-pvr-addons/patches/xbmc-pvr-addons-buildfix.patch @@ -1,3 +1,17 @@ +diff -Naur xbmc-pvr-addons-frodo-910d7e7/addons/Makefile.include.am xbmc-pvr-addons-frodo-910d7e7.patch/addons/Makefile.include.am +--- xbmc-pvr-addons-frodo-910d7e7/addons/Makefile.include.am 2013-09-09 01:56:00.000000000 +0200 ++++ xbmc-pvr-addons-frodo-910d7e7.patch/addons/Makefile.include.am 2013-09-09 18:54:06.000000000 +0200 +@@ -36,7 +36,9 @@ + mkdir -m 755 -p $(DESTDIR)@LIBDIR@/$(ADDONNAME) + mkdir -m 755 -p $(DESTDIR)@DATADIR@/$(ADDONNAME) + cp -f @BINPREFIX@$(ADDONBINNAME)@BIN_EXT@ $(DESTDIR)@LIBDIR@/$(ADDONNAME) ; chmod 655 $(DESTDIR)@LIBDIR@/$(ADDONNAME)/@BINPREFIX@$(ADDONBINNAME)@BIN_EXT@ +- cp -r -f @abs_top_srcdir@/addons/$(ADDONNAME)/addon/* $(DESTDIR)@DATADIR@/$(ADDONNAME) ; chmod -R o+rx $(DESTDIR)@DATADIR@/$(ADDONNAME) ++ cp -r -f @abs_top_srcdir@/addons/$(ADDONNAME)/addon/* $(DESTDIR)@DATADIR@/$(ADDONNAME) ++ cp -r -f @abs_top_builddir@/addons/$(ADDONNAME)/addon/* $(DESTDIR)@DATADIR@/$(ADDONNAME) ++ chmod -R o+rx $(DESTDIR)@DATADIR@/$(ADDONNAME) + endif + + all: @BUILD_TYPE@ diff -Naur xbmc-pvr-addons-frodo-910d7e7/addons/pvr.argustv/Makefile.am xbmc-pvr-addons-frodo-910d7e7.patch/addons/pvr.argustv/Makefile.am --- xbmc-pvr-addons-frodo-910d7e7/addons/pvr.argustv/Makefile.am 2013-09-09 01:56:00.000000000 +0200 +++ xbmc-pvr-addons-frodo-910d7e7.patch/addons/pvr.argustv/Makefile.am 2013-09-09 03:48:49.756563520 +0200 diff --git a/packages/mediacenter/xbmc-theme-Confluence/meta b/packages/mediacenter/xbmc-theme-Confluence/meta index 89a8630529..bdfb7c9cc1 100644 --- a/packages/mediacenter/xbmc-theme-Confluence/meta +++ b/packages/mediacenter/xbmc-theme-Confluence/meta @@ -21,7 +21,7 @@ PKG_NAME="xbmc-theme-Confluence" PKG_VERSION="12.2-58a9d9e" if [ "$XBMC" = "master" ]; then - PKG_VERSION="13.alpha-dcd897b" + PKG_VERSION="13.alpha-2ef8929" elif [ "$XBMC" = "xbmc-aml" ]; then PKG_VERSION="aml-frodo-d9119f2" fi diff --git a/packages/mediacenter/xbmc/package.mk b/packages/mediacenter/xbmc/package.mk index 565d9edab6..e4df14dadd 100644 --- a/packages/mediacenter/xbmc/package.mk +++ b/packages/mediacenter/xbmc/package.mk @@ -21,7 +21,7 @@ PKG_NAME="xbmc" PKG_VERSION="12.2-58a9d9e" if [ "$XBMC" = "master" ]; then - PKG_VERSION="13.alpha-dcd897b" + PKG_VERSION="13.alpha-2ef8929" elif [ "$XBMC" = "xbmc-aml" ]; then PKG_VERSION="aml-frodo-d9119f2" fi diff --git a/packages/mediacenter/xbmc/patches/13.alpha-dcd897b/xbmc-408-enable_PYTHONOPTIMIZE_with_external_Python-0.1.patch b/packages/mediacenter/xbmc/patches/13.alpha-2ef8929/xbmc-408-enable_PYTHONOPTIMIZE_with_external_Python-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc/patches/13.alpha-dcd897b/xbmc-408-enable_PYTHONOPTIMIZE_with_external_Python-0.1.patch rename to packages/mediacenter/xbmc/patches/13.alpha-2ef8929/xbmc-408-enable_PYTHONOPTIMIZE_with_external_Python-0.1.patch diff --git a/packages/mediacenter/xbmc/patches/13.alpha-dcd897b/xbmc-453-add_openelec.tv_RSS_news-0.1.patch b/packages/mediacenter/xbmc/patches/13.alpha-2ef8929/xbmc-453-add_openelec.tv_RSS_news-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc/patches/13.alpha-dcd897b/xbmc-453-add_openelec.tv_RSS_news-0.1.patch rename to packages/mediacenter/xbmc/patches/13.alpha-2ef8929/xbmc-453-add_openelec.tv_RSS_news-0.1.patch diff --git a/packages/mediacenter/xbmc/patches/13.alpha-dcd897b/xbmc-602-add_as.xml_busy_dialog_delay_control.patch b/packages/mediacenter/xbmc/patches/13.alpha-2ef8929/xbmc-602-add_as.xml_busy_dialog_delay_control.patch similarity index 100% rename from packages/mediacenter/xbmc/patches/13.alpha-dcd897b/xbmc-602-add_as.xml_busy_dialog_delay_control.patch rename to packages/mediacenter/xbmc/patches/13.alpha-2ef8929/xbmc-602-add_as.xml_busy_dialog_delay_control.patch diff --git a/packages/mediacenter/xbmc/patches/13.alpha-dcd897b/xbmc-990.15-depends-mark_our_wrapped_functions_as_used.patch b/packages/mediacenter/xbmc/patches/13.alpha-2ef8929/xbmc-990.15-depends-mark_our_wrapped_functions_as_used.patch similarity index 100% rename from packages/mediacenter/xbmc/patches/13.alpha-dcd897b/xbmc-990.15-depends-mark_our_wrapped_functions_as_used.patch rename to packages/mediacenter/xbmc/patches/13.alpha-2ef8929/xbmc-990.15-depends-mark_our_wrapped_functions_as_used.patch diff --git a/packages/mediacenter/xbmc/patches/13.alpha-dcd897b/xbmc-990.25-BP-xbmc-PR3166.patch b/packages/mediacenter/xbmc/patches/13.alpha-2ef8929/xbmc-990.25-BP-xbmc-PR3166.patch similarity index 100% rename from packages/mediacenter/xbmc/patches/13.alpha-dcd897b/xbmc-990.25-BP-xbmc-PR3166.patch rename to packages/mediacenter/xbmc/patches/13.alpha-2ef8929/xbmc-990.25-BP-xbmc-PR3166.patch diff --git a/packages/mediacenter/xbmc/patches/13.alpha-dcd897b/xbmc-990.26-PR3210.patch b/packages/mediacenter/xbmc/patches/13.alpha-2ef8929/xbmc-990.26-PR3210.patch similarity index 100% rename from packages/mediacenter/xbmc/patches/13.alpha-dcd897b/xbmc-990.26-PR3210.patch rename to packages/mediacenter/xbmc/patches/13.alpha-2ef8929/xbmc-990.26-PR3210.patch diff --git a/packages/mediacenter/xbmc/patches/13.alpha-dcd897b/xbmc-995.01-xvba_support-3886e9c.patch b/packages/mediacenter/xbmc/patches/13.alpha-2ef8929/xbmc-995.01-xvba_support-d646570.patch similarity index 96% rename from packages/mediacenter/xbmc/patches/13.alpha-dcd897b/xbmc-995.01-xvba_support-3886e9c.patch rename to packages/mediacenter/xbmc/patches/13.alpha-2ef8929/xbmc-995.01-xvba_support-d646570.patch index 0cffc8b134..c71f1cca3d 100644 --- a/packages/mediacenter/xbmc/patches/13.alpha-dcd897b/xbmc-995.01-xvba_support-3886e9c.patch +++ b/packages/mediacenter/xbmc/patches/13.alpha-2ef8929/xbmc-995.01-xvba_support-d646570.patch @@ -1,7 +1,7 @@ -From eca555600c3640fb0847b3fba0e19773bcea3978 Mon Sep 17 00:00:00 2001 +From c543e00ea5e60aba45fdcb042bdfc47ae1896e8c Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Fri, 2 Aug 2013 18:55:56 +0200 -Subject: [PATCH 01/89] linuxrenderer: do not render if upload texture fails +Subject: [PATCH 01/92] linuxrenderer: do not render if upload texture fails --- xbmc/cores/VideoRenderers/LinuxRendererGL.cpp | 39 ++++++++++++++++----------- @@ -248,10 +248,10 @@ index b986d93..b5c4dec 100644 1.8.4 -From 0a3ca102cd3c44d392405be978bc079284bde1d7 Mon Sep 17 00:00:00 2001 +From c2bb58454a75ab806da153a9c0b3447d2854847d Mon Sep 17 00:00:00 2001 From: xbmc Date: Sat, 7 Apr 2012 09:19:00 +0200 -Subject: [PATCH 02/89] vdpau: redesign +Subject: [PATCH 02/92] vdpau: redesign --- language/English/strings.po | 21 +- @@ -276,10 +276,10 @@ Subject: [PATCH 02/89] vdpau: redesign 19 files changed, 3679 insertions(+), 1236 deletions(-) diff --git a/language/English/strings.po b/language/English/strings.po -index 0e7ecd5..cd53a85 100644 +index acaa021..ef92431 100644 --- a/language/English/strings.po +++ b/language/English/strings.po -@@ -5787,7 +5787,17 @@ msgctxt "#13436" +@@ -5791,7 +5791,17 @@ msgctxt "#13436" msgid "Allow hardware acceleration (libstagefright)" msgstr "" @@ -298,7 +298,7 @@ index 0e7ecd5..cd53a85 100644 #: system/settings/settings.xml msgctxt "#13500" -@@ -6870,7 +6880,7 @@ msgid "Software Blend" +@@ -6874,7 +6884,7 @@ msgid "Software Blend" msgstr "" msgctxt "#16325" @@ -307,7 +307,7 @@ index 0e7ecd5..cd53a85 100644 msgstr "" #empty strings from id 16326 to 16399 -@@ -14182,7 +14192,12 @@ msgctxt "#36420" +@@ -14186,7 +14196,12 @@ msgctxt "#36420" msgid "No info available yet." msgstr "" @@ -6154,10 +6154,10 @@ index a0f7bba..b6b6ec4 100644 1.8.4 -From 3deffe52767c7d9312e0ec0ade54c5276efd977c Mon Sep 17 00:00:00 2001 +From bb2b78823eddcfe6735f5d7706a52327c6c3658c Mon Sep 17 00:00:00 2001 From: xbmc Date: Wed, 12 Dec 2012 09:52:17 +0100 -Subject: [PATCH 03/89] vdpau: make interop gl default and remove setting, +Subject: [PATCH 03/92] vdpau: make interop gl default and remove setting, rename and intvert interop yuv --- @@ -6166,10 +6166,10 @@ Subject: [PATCH 03/89] vdpau: make interop gl default and remove setting, 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/language/English/strings.po b/language/English/strings.po -index cd53a85..df8d841 100644 +index ef92431..b6eee02 100644 --- a/language/English/strings.po +++ b/language/English/strings.po -@@ -5789,15 +5789,10 @@ msgstr "" +@@ -5793,15 +5793,10 @@ msgstr "" #: system/settings/settings.xml msgctxt "#13437" @@ -6263,10 +6263,10 @@ index c10c7ea..41defb6 100644 1.8.4 -From aef4898cd4b5cce247161e945e3d0a73f2437152 Mon Sep 17 00:00:00 2001 +From 06848e8c20883f45cb7cdc84e9530dc685c19da4 Mon Sep 17 00:00:00 2001 From: xbmc Date: Wed, 12 Dec 2012 20:28:49 +0100 -Subject: [PATCH 04/89] vdpau: observe ffmpeg tags for color space +Subject: [PATCH 04/92] vdpau: observe ffmpeg tags for color space --- xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp | 38 ++++++++++++++++++-------- @@ -6370,10 +6370,10 @@ index aae4173..8845a16 100644 1.8.4 -From 8dc0409ab3d4372a6be8e6b334bc8dcec73a58a4 Mon Sep 17 00:00:00 2001 +From 6fa723db3a2892f04c69153e71d9c379523d873c Mon Sep 17 00:00:00 2001 From: xbmc Date: Sun, 27 Jan 2013 12:10:19 +0100 -Subject: [PATCH 05/89] vdpau: switch off de-interlacing on ff +Subject: [PATCH 05/92] vdpau: switch off de-interlacing on ff --- xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp | 5 +++-- @@ -6399,10 +6399,10 @@ index 8a31cd1..6d982a7 100644 1.8.4 -From 51711803a6213fbfb04c8ec121ea622e5591a9e5 Mon Sep 17 00:00:00 2001 +From 8ee700bbcbb04ee7f169809a5119bf9ad37cb21e Mon Sep 17 00:00:00 2001 From: xbmc Date: Tue, 25 Sep 2012 12:14:15 +0200 -Subject: [PATCH 06/89] linuxrenderer: drop method RenderMultiPass +Subject: [PATCH 06/92] linuxrenderer: drop method RenderMultiPass --- xbmc/cores/VideoRenderers/LinuxRendererGL.cpp | 9 ++------- @@ -6452,10 +6452,10 @@ index 8daf72c..b086bae 100644 1.8.4 -From 4aeb96bcd273ada0d890ece46678c7ed9c9aa6ba Mon Sep 17 00:00:00 2001 +From a07e6cc04e50d655fa84b524788bcea73dda86e3 Mon Sep 17 00:00:00 2001 From: xbmc Date: Tue, 25 Sep 2012 13:20:47 +0200 -Subject: [PATCH 07/89] linuxrenderer: implement progressive weave for vdpau +Subject: [PATCH 07/92] linuxrenderer: implement progressive weave for vdpau --- xbmc/cores/VideoRenderers/LinuxRendererGL.cpp | 56 +++++++++++++++++++-------- @@ -6584,10 +6584,10 @@ index b086bae..966733e 100644 1.8.4 -From 2d46c77953dfda684f243d817c466ad44d57ee35 Mon Sep 17 00:00:00 2001 +From 46c43a9cb30c3cb91affbba2e65398b0bb144140 Mon Sep 17 00:00:00 2001 From: xbmc Date: Wed, 6 Mar 2013 07:35:10 +0100 -Subject: [PATCH 08/89] vdpau: set deinterlacing method to auto, if default +Subject: [PATCH 08/92] vdpau: set deinterlacing method to auto, if default method not supported --- @@ -6619,10 +6619,10 @@ index 6d982a7..9ac8186 100644 1.8.4 -From a03d12ee0bec0475a16d5d6b1d081b0d401e4bdc Mon Sep 17 00:00:00 2001 +From 66c57b07b74e18a8d810adc5981ea653ee24689f Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Fri, 14 Jun 2013 09:23:22 +0200 -Subject: [PATCH 09/89] vdpau: calculate timestamp of second field when doing +Subject: [PATCH 09/92] vdpau: calculate timestamp of second field when doing deinterlacing --- @@ -6654,10 +6654,10 @@ index 9ac8186..369a19e 100644 1.8.4 -From e09271e26ca1f841b778bab8877fff7a8890dbc7 Mon Sep 17 00:00:00 2001 +From 312628992e0479f46a2dd9af367d6c2d61bee2c9 Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Fri, 2 Aug 2013 13:57:47 +0200 -Subject: [PATCH 10/89] vdpau: comment some features that will be added later +Subject: [PATCH 10/92] vdpau: comment some features that will be added later --- xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp | 15 ++++++++++----- @@ -6721,10 +6721,10 @@ index 369a19e..ae7cce7 100644 1.8.4 -From 35bc34363b7f07b85cc1772c60329fd84c30f243 Mon Sep 17 00:00:00 2001 +From 01419202b77b5c8ce1ea6167bd6673a4ac8fc2ad Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Tue, 6 Aug 2013 10:37:37 +0200 -Subject: [PATCH 11/89] renderer: protect against div by zero +Subject: [PATCH 11/92] renderer: protect against div by zero --- xbmc/cores/VideoRenderers/LinuxRendererGL.cpp | 7 +++++++ @@ -6752,10 +6752,10 @@ index 1dbb670..fb065ea 100644 1.8.4 -From 11272491db2bb8042895e6745c316de2b1ecd852 Mon Sep 17 00:00:00 2001 +From 5c47161e2dee63228fe0dbba9229693f9366881f Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Fri, 9 Aug 2013 09:52:46 +0200 -Subject: [PATCH 12/89] vdpau: add fence for detecting when a buffer can be +Subject: [PATCH 12/92] vdpau: add fence for detecting when a buffer can be reused --- @@ -7089,10 +7089,10 @@ index 8845a16..c555d2d 100644 1.8.4 -From 52a114962e17931735cfc5970ff08d43935ce9b9 Mon Sep 17 00:00:00 2001 +From 380d726629dfd0bf60a5fba37e6a58b85fd76b97 Mon Sep 17 00:00:00 2001 From: xbmc Date: Mon, 28 May 2012 10:34:39 +0200 -Subject: [PATCH 13/89] videoplayer: adapt lateness detection and dropping to +Subject: [PATCH 13/92] videoplayer: adapt lateness detection and dropping to buffering --- @@ -7673,10 +7673,10 @@ index f8ad541..186e271 100644 1.8.4 -From d5e0132f8a147dd756426be74e910d085aacc022 Mon Sep 17 00:00:00 2001 +From 2d3787a518d16986f750c66e202ad788bf3ddc06 Mon Sep 17 00:00:00 2001 From: xbmc Date: Sun, 2 Sep 2012 16:05:21 +0200 -Subject: [PATCH 14/89] video player: present correct pts to user for a/v sync +Subject: [PATCH 14/92] video player: present correct pts to user for a/v sync (after buffering in renderer) --- @@ -7744,10 +7744,10 @@ index 186e271..59c7f09 100644 1.8.4 -From 88420beb8f08c85a4bc7d7725504090755771c46 Mon Sep 17 00:00:00 2001 +From 0ac0a2f67c114867829e9ede034119de84a28d2e Mon Sep 17 00:00:00 2001 From: xbmc Date: Sat, 16 Feb 2013 18:25:53 +0100 -Subject: [PATCH 15/89] videoplayer: some rework and documentation +Subject: [PATCH 15/92] videoplayer: some rework and documentation --- .../dvdplayer/DVDCodecs/Video/DVDVideoCodec.h | 29 ++++++++++++++++++++-- @@ -7858,10 +7858,10 @@ index 99c8b3c..be3d511 100644 1.8.4 -From 49ac4ae6763c8567c767bc8ffc89efc77fff70b7 Mon Sep 17 00:00:00 2001 +From d15e6e051b103b54be94cb5bed22ab632cb90a3b Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Sat, 1 Jun 2013 11:21:19 +0200 -Subject: [PATCH 16/89] renderer: bump buffers to 5 +Subject: [PATCH 16/92] renderer: bump buffers to 5 --- xbmc/cores/VideoRenderers/BaseRenderer.h | 2 +- @@ -7884,10 +7884,10 @@ index a61d3cf..df5fe0e 100644 1.8.4 -From 228f4c43329fbb128642558aa20dc9e65841f33e Mon Sep 17 00:00:00 2001 +From 67e266be8f0c5f9912dd5a9d5a6967128fc81e62 Mon Sep 17 00:00:00 2001 From: xbmc Date: Mon, 28 May 2012 10:41:31 +0200 -Subject: [PATCH 17/89] videoplayer: update frametime, it might change due to +Subject: [PATCH 17/92] videoplayer: update frametime, it might change due to fps detection --- @@ -7911,10 +7911,10 @@ index be3d511..dbbd11b 100644 1.8.4 -From 8f4d7c67529431e174126ff3ee430ac57c32604d Mon Sep 17 00:00:00 2001 +From e49cfe51e884f0b8f9a5277e6add5250ae14e8d7 Mon Sep 17 00:00:00 2001 From: xbmc Date: Mon, 28 May 2012 10:43:06 +0200 -Subject: [PATCH 18/89] videoplayer: give streams with invalid fps a chance for +Subject: [PATCH 18/92] videoplayer: give streams with invalid fps a chance for fps detection --- @@ -7938,10 +7938,10 @@ index dbbd11b..eb443af 100644 1.8.4 -From 0f11df591c48463d35ac47ff3485ef8d3c1f4919 Mon Sep 17 00:00:00 2001 +From 5fc718526a0184f77a8ef7322595decd2ca26fa4 Mon Sep 17 00:00:00 2001 From: xbmc Date: Mon, 28 May 2012 10:49:05 +0200 -Subject: [PATCH 19/89] dvdplayer: allow rewinding at end of stream, do a seek +Subject: [PATCH 19/92] dvdplayer: allow rewinding at end of stream, do a seek after rewind --- @@ -7978,10 +7978,10 @@ index d12121f..06c9439 100644 1.8.4 -From 678aa04eff0644c90eb6f4506d64c0f10e882505 Mon Sep 17 00:00:00 2001 +From 238cb63d3eb28211f36021b94a153e44de694b9e Mon Sep 17 00:00:00 2001 From: FernetMenta Date: Thu, 5 Jul 2012 15:22:05 +0200 -Subject: [PATCH 20/89] X11: ditch SDL for video and window events +Subject: [PATCH 20/92] X11: ditch SDL for video and window events --- xbmc/Application.cpp | 2 +- @@ -9465,10 +9465,10 @@ index b6b6ec4..448a1bb 100644 1.8.4 -From bc79312701c39dc9c33c6b10eb89803f9b5e0320 Mon Sep 17 00:00:00 2001 +From 13fac052710a7fd9ad7a6ef8397e208715e68c9b Mon Sep 17 00:00:00 2001 From: FernetMenta Date: Thu, 5 Jul 2012 15:24:22 +0200 -Subject: [PATCH 21/89] X11: Add xbmc icon +Subject: [PATCH 21/92] X11: Add xbmc icon --- xbmc/windowing/X11/WinSystemX11.cpp | 126 +++++++++++++++++++++++++++++++++++- @@ -9657,10 +9657,10 @@ index 448a1bb..e618268 100644 1.8.4 -From b2919310142a92096ceb68ac92980ae3167dce4f Mon Sep 17 00:00:00 2001 +From a9cedcc951e0d03c7e554d34a651699be781d2fe Mon Sep 17 00:00:00 2001 From: xbmc Date: Sun, 20 May 2012 14:11:26 +0200 -Subject: [PATCH 22/89] X11: add SDL joystick until we have a better solution +Subject: [PATCH 22/92] X11: add SDL joystick until we have a better solution --- xbmc/windowing/WinEventsX11.cpp | 26 ++++++++++++++++++++++++++ @@ -9714,10 +9714,10 @@ index 5a8bbb8..5bc1de0 100644 1.8.4 -From ed8fdfd99df42974bec1ad04dfb7b76ed1d5de40 Mon Sep 17 00:00:00 2001 +From 11bf4ce1953a74f46d6248acef73486bccadbec9 Mon Sep 17 00:00:00 2001 From: Joakim Plate Date: Thu, 5 Jul 2012 12:35:55 +0200 -Subject: [PATCH 23/89] X11: factor out code handling device reset notification +Subject: [PATCH 23/92] X11: factor out code handling device reset notification --- xbmc/windowing/X11/WinSystemX11.cpp | 22 ++++++++++++++-------- @@ -9780,10 +9780,10 @@ index e618268..c4d4b76 100644 1.8.4 -From 42cf7efae1adc759ad5e6d6cfe4a082bfe09eb9d Mon Sep 17 00:00:00 2001 +From 8d2ab76083ab6183f89609176533bc70d0043e24 Mon Sep 17 00:00:00 2001 From: FernetMenta Date: Thu, 5 Jul 2012 15:02:00 +0200 -Subject: [PATCH 24/89] X11: move xrandr events to WinEventsX11 +Subject: [PATCH 24/92] X11: move xrandr events to WinEventsX11 --- xbmc/windowing/WinEventsX11.cpp | 42 +++++++++++++++++++++++++++++++++++++ @@ -9927,10 +9927,10 @@ index c5938af..9f74dd5 100644 1.8.4 -From af8adaaef31e8072b351b3e6dc6e54b4bc620ec9 Mon Sep 17 00:00:00 2001 +From 5e46a38bb3bd40e5e0dfe1d07e82dbb3a8e0a061 Mon Sep 17 00:00:00 2001 From: FernetMenta Date: Thu, 12 Apr 2012 15:43:56 +0200 -Subject: [PATCH 25/89] xrandr: remove method RestoreState +Subject: [PATCH 25/92] xrandr: remove method RestoreState --- xbmc/windowing/X11/WinSystemX11.cpp | 13 +++++++++++-- @@ -10009,10 +10009,10 @@ index 0aec487..00b49dc 100644 1.8.4 -From bff486ba4e3dccf2f72d10bb6a0caff92e6e2ee7 Mon Sep 17 00:00:00 2001 +From 37bc363a851bf63b7b695e6a102191664ca48672 Mon Sep 17 00:00:00 2001 From: xbmc Date: Sun, 20 May 2012 13:17:10 +0200 -Subject: [PATCH 26/89] xrandr: observe orientation +Subject: [PATCH 26/92] xrandr: observe orientation --- xbmc/windowing/X11/WinSystemX11.cpp | 89 ++++++++++++++++++++++++++++++------- @@ -10227,10 +10227,10 @@ index 00b49dc..508604d 100644 1.8.4 -From 28daf46728a533cdfedc8bf00c8b7cb0f2f647de Mon Sep 17 00:00:00 2001 +From ea847955f0e918add5d2f5cc7507441da33b71ed Mon Sep 17 00:00:00 2001 From: FernetMenta Date: Thu, 5 Jul 2012 11:54:15 +0200 -Subject: [PATCH 27/89] xrandr: allow getting info for multiple screen's +Subject: [PATCH 27/92] xrandr: allow getting info for multiple screen's Refactored by: Joakim Plate --- @@ -10405,10 +10405,10 @@ index 508604d..d37838a 100644 1.8.4 -From 0a4db156a9500f324ee2283e346c540ad7faa03c Mon Sep 17 00:00:00 2001 +From 41daa63aa0b5c3c6a6ccf6274a0f712e2d4924ab Mon Sep 17 00:00:00 2001 From: FernetMenta Date: Thu, 5 Jul 2012 11:44:00 +0200 -Subject: [PATCH 28/89] X11: fix multi-head setups +Subject: [PATCH 28/92] X11: fix multi-head setups --- language/English/strings.po | 4 +- @@ -10423,10 +10423,10 @@ Subject: [PATCH 28/89] 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 df8d841..c2985ec 100644 +index b6eee02..4ea1c4e 100644 --- a/language/English/strings.po +++ b/language/English/strings.po -@@ -999,7 +999,9 @@ msgctxt "#245" +@@ -1003,7 +1003,9 @@ msgctxt "#245" msgid "Sizing: (%i,%i)->(%i,%i) (Zoom x%2.2f) AR:%2.2f:1 (Pixels: %2.2f:1) (VShift: %2.2f)" msgstr "" @@ -11177,10 +11177,10 @@ index 0727bb9..b1eb278 100644 1.8.4 -From 72271a6033634acd241fcceddb6d8a0ad6c3808f Mon Sep 17 00:00:00 2001 +From d9f545829aa5c2d9031ffb622391672002525ca1 Mon Sep 17 00:00:00 2001 From: FernetMenta Date: Thu, 5 Jul 2012 11:36:32 +0200 -Subject: [PATCH 29/89] X11: remove all DefaultScreen and RootWindow macros +Subject: [PATCH 29/92] X11: remove all DefaultScreen and RootWindow macros --- xbmc/windowing/X11/WinSystemX11.cpp | 6 +++--- @@ -11248,10 +11248,10 @@ index 095012f..60a6878 100644 1.8.4 -From b52484f032cfadfcaba370bc853046e04b7f2a18 Mon Sep 17 00:00:00 2001 +From 12f9362c17fc135ead21dd56db24b6d4d3571798 Mon Sep 17 00:00:00 2001 From: FernetMenta Date: Thu, 5 Jul 2012 11:45:22 +0200 -Subject: [PATCH 30/89] X11: remove all DefaultScreen and RootWindow macros +Subject: [PATCH 30/92] X11: remove all DefaultScreen and RootWindow macros (VideoRefClock) Note this is on a separate display connection. @@ -11323,10 +11323,10 @@ index 5bf3656..0b9e7b3 100644 1.8.4 -From fda1da1a299bc890e1ddcd17416a0d0ba4131684 Mon Sep 17 00:00:00 2001 +From edbc516af04507858d4aba14ac20ce09e669e462 Mon Sep 17 00:00:00 2001 From: xbmc Date: Wed, 20 Jun 2012 17:37:11 +0200 -Subject: [PATCH 31/89] X11: recreate gl context after output has changed +Subject: [PATCH 31/92] X11: recreate gl context after output has changed --- xbmc/windowing/X11/WinSystemX11.cpp | 24 ++++++++++++++---------- @@ -11477,10 +11477,10 @@ index 60a6878..d6ba80a 100644 1.8.4 -From 227e85e73999acccfbd5f4e7afeabf3627b57676 Mon Sep 17 00:00:00 2001 +From 7df8409e1df2ef664801446955bd17da53047af6 Mon Sep 17 00:00:00 2001 From: FernetMenta Date: Thu, 5 Jul 2012 12:06:25 +0200 -Subject: [PATCH 32/89] X11: hook video reference clock in windowing +Subject: [PATCH 32/92] X11: hook video reference clock in windowing --- xbmc/video/VideoReferenceClock.cpp | 71 +++++++++++++++++++++++++++----------- @@ -11685,10 +11685,10 @@ index dd65a1b..afd71fc 100644 1.8.4 -From b0e76572dad24bda2830fb9ba94deff6f33f3073 Mon Sep 17 00:00:00 2001 +From 6728f3c34dce4c1359e4572f5f2b33170f809929 Mon Sep 17 00:00:00 2001 From: xbmc Date: Thu, 21 Jun 2012 17:26:51 +0200 -Subject: [PATCH 33/89] X11: fix video calibrations +Subject: [PATCH 33/92] X11: fix video calibrations --- xbmc/windowing/WinSystem.h | 1 + @@ -11780,10 +11780,10 @@ index 05aa60e..95672d1 100644 1.8.4 -From 9a150ea0ce2be482851ffee12694138444819832 Mon Sep 17 00:00:00 2001 +From 2bd0c10cd40582e29fdfeee4ccf2b541dc798d6f Mon Sep 17 00:00:00 2001 From: FernetMenta Date: Thu, 5 Jul 2012 12:00:26 +0200 -Subject: [PATCH 34/89] X11: deactivate screen saver on startup +Subject: [PATCH 34/92] X11: deactivate screen saver on startup --- xbmc/windowing/X11/WinSystemX11.cpp | 29 +++++++++++++++++++++++++++++ @@ -11853,10 +11853,10 @@ index 95672d1..51ac314 100644 1.8.4 -From 20bc26189abf7b5017222ccb78aac580aa74b271 Mon Sep 17 00:00:00 2001 +From 223176fc738c23565a313aedc28a6b99b6200751 Mon Sep 17 00:00:00 2001 From: FernetMenta Date: Thu, 5 Jul 2012 12:10:09 +0200 -Subject: [PATCH 35/89] X11: change method of going full-screen +Subject: [PATCH 35/92] X11: change method of going full-screen --- xbmc/windowing/X11/WinSystemX11.cpp | 9 ++++++++- @@ -11900,10 +11900,10 @@ index 14a4307..66b91fd 100644 1.8.4 -From 758752ce2888e328cbf50ee3539058e3b48f613b Mon Sep 17 00:00:00 2001 +From fe6fd2dd1a49256216d2d9f71ceda5a7e9fe1d6f Mon Sep 17 00:00:00 2001 From: xbmc Date: Thu, 28 Jun 2012 19:12:39 +0200 -Subject: [PATCH 36/89] X11: reset key repeat and key modifier on focus lost +Subject: [PATCH 36/92] X11: reset key repeat and key modifier on focus lost and gain --- @@ -11935,10 +11935,10 @@ index c58067b..c9f8a20 100644 1.8.4 -From 31014a0daf13ddcb1cc1c83f000119b9cf6022a7 Mon Sep 17 00:00:00 2001 +From fea5a39655a61f34aab292bfafc44ef1e7d17452 Mon Sep 17 00:00:00 2001 From: Joakim Plate Date: Thu, 5 Jul 2012 14:18:46 +0200 -Subject: [PATCH 37/89] X11: replace custom utf8 to unicode with charset +Subject: [PATCH 37/92] X11: replace custom utf8 to unicode with charset convertor (squash to x11 events) --- @@ -12155,10 +12155,10 @@ index 6100933..72955ad 100644 1.8.4 -From cef9360ad1f57ade5837e108634d17607ab025cf Mon Sep 17 00:00:00 2001 +From fbe6b58b3083ff053c263ee4feffdb05f6e8e101 Mon Sep 17 00:00:00 2001 From: Joakim Plate Date: Thu, 5 Jul 2012 14:23:54 +0200 -Subject: [PATCH 38/89] X11: fixed invalid usage of sizeof() (squash into x11 +Subject: [PATCH 38/92] X11: fixed invalid usage of sizeof() (squash into x11 changes) --- @@ -12222,10 +12222,10 @@ index 72955ad..102a076 100644 1.8.4 -From 82fb5ea76e1c480888888e84094c345d98a94653 Mon Sep 17 00:00:00 2001 +From c63fd140616c676ff388930bf8cfceb4ca032ad8 Mon Sep 17 00:00:00 2001 From: xbmc Date: Sat, 9 Jun 2012 18:23:53 +0200 -Subject: [PATCH 39/89] add missing keys to xbmc keytable +Subject: [PATCH 39/92] add missing keys to xbmc keytable --- xbmc/input/XBMC_keytable.cpp | 2 ++ @@ -12248,10 +12248,10 @@ index b430f55..246164b 100644 1.8.4 -From 4745bfd4bba075593cd54c9711503aef05d92294 Mon Sep 17 00:00:00 2001 +From ea60694d30c2e06a6f8824c01294f36fbcc73392 Mon Sep 17 00:00:00 2001 From: xbmc Date: Fri, 16 Mar 2012 15:57:51 +0100 -Subject: [PATCH 40/89] videorefclock: temp deactivate of nv settings +Subject: [PATCH 40/92] videorefclock: temp deactivate of nv settings --- xbmc/video/VideoReferenceClock.cpp | 2 +- @@ -12274,10 +12274,10 @@ index 3bd8133..59f924c 100644 1.8.4 -From c305d0c9c06b4b34349958c61f6260385db89ec6 Mon Sep 17 00:00:00 2001 +From 5298be8d4ea65f0ddb7af1342032171cdb8257fc Mon Sep 17 00:00:00 2001 From: xbmc Date: Mon, 20 Aug 2012 09:09:09 +0200 -Subject: [PATCH 41/89] videorefclock: ask graphics context for refresh rate +Subject: [PATCH 41/92] videorefclock: ask graphics context for refresh rate --- xbmc/video/VideoReferenceClock.cpp | 3 ++- @@ -12308,10 +12308,10 @@ index 59f924c..2f8bc69 100644 1.8.4 -From 17464de75451eeb6f5698ecb6636075897de5554 Mon Sep 17 00:00:00 2001 +From b79979f1f1f8edbf67f60b6766d6a9957ff78c87 Mon Sep 17 00:00:00 2001 From: xbmc Date: Mon, 9 Jul 2012 14:00:18 +0200 -Subject: [PATCH 42/89] X11: fix icon texture after +Subject: [PATCH 42/92] X11: fix icon texture after cc5ed3c2474084ebc0373a3046410e6f766e03f4 --- @@ -12419,10 +12419,10 @@ index 66b91fd..b00eddc 100644 1.8.4 -From 2ae04a51c447f32c17a780c6031da3a98363de37 Mon Sep 17 00:00:00 2001 +From 44c2bbd0460ae8c00b744192891245d96dc67414 Mon Sep 17 00:00:00 2001 From: xbmc Date: Tue, 10 Jul 2012 11:14:12 +0200 -Subject: [PATCH 43/89] X11: check for window manager +Subject: [PATCH 43/92] X11: check for window manager --- xbmc/windowing/X11/WinSystemX11.cpp | 74 ++++++++++++++++++++++++++++++++++++- @@ -12543,10 +12543,10 @@ index 51ac314..ce3c289 100644 1.8.4 -From 0506ca4154aaeb734d03cd0dff3be7012b6d5f8d Mon Sep 17 00:00:00 2001 +From 27a40a3b1bd2c8492c033e293d99b8053e0e0ab1 Mon Sep 17 00:00:00 2001 From: xbmc Date: Thu, 12 Jul 2012 11:11:47 +0200 -Subject: [PATCH 44/89] X11: dont set window on xrandr if no mode available +Subject: [PATCH 44/92] X11: dont set window on xrandr if no mode available --- xbmc/windowing/X11/WinSystemX11.cpp | 11 ++++++----- @@ -12583,10 +12583,10 @@ index 05279ad..9697cbb 100644 1.8.4 -From b8ee1b78194d1f4bd719d6641de16e31a5b6531e Mon Sep 17 00:00:00 2001 +From 312891e420e7cecd1a0ecfd10ea61f72dd5c2f22 Mon Sep 17 00:00:00 2001 From: xbmc Date: Thu, 26 Jul 2012 09:34:28 +0200 -Subject: [PATCH 45/89] X11: fix crash after a resolution change on startup +Subject: [PATCH 45/92] X11: fix crash after a resolution change on startup --- xbmc/windowing/X11/WinSystemX11.cpp | 3 ++- @@ -12610,10 +12610,10 @@ index 9697cbb..868071c 100644 1.8.4 -From a8d17b8138d7f7abe01f5c6621aebe95a99a5c51 Mon Sep 17 00:00:00 2001 +From e784d3b2ea5b4e7c5fd9af33462cfc71cca5c66d Mon Sep 17 00:00:00 2001 From: xbmc Date: Sat, 15 Sep 2012 18:27:29 +0200 -Subject: [PATCH 46/89] X11: lock graphics context in NotifyXRREvent +Subject: [PATCH 46/92] X11: lock graphics context in NotifyXRREvent --- xbmc/windowing/X11/WinSystemX11.cpp | 2 ++ @@ -12636,10 +12636,10 @@ index 868071c..9ff947c 100644 1.8.4 -From de4664a82dca60d0f475f34f94cbb4568134a41a Mon Sep 17 00:00:00 2001 +From e4f4ab1cbc25c049107f255b6628932ec0ee67fa Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Sat, 8 Oct 2011 16:45:13 +0200 -Subject: [PATCH 47/89] ffmpeg: add xvba hwaccel, co-author @fritsch +Subject: [PATCH 47/92] ffmpeg: add xvba hwaccel, co-author fritsch --- lib/ffmpeg/configure | 11 ++ @@ -13546,10 +13546,10 @@ index 1c00ac4..6437e29 100644 1.8.4 -From 249d0af689f94f13e3bcdfb3f54ee45d3732bdbc Mon Sep 17 00:00:00 2001 +From 43f0fe351754159238f7e6b8810605821fa64199 Mon Sep 17 00:00:00 2001 From: xbmc Date: Thu, 12 Apr 2012 12:09:31 +0200 -Subject: [PATCH 48/89] xvba: add decoder, co-author @fritsch +Subject: [PATCH 48/92] xvba: add decoder, co-author fritsch --- configure.in | 47 + @@ -13667,10 +13667,10 @@ index 0337705..1b88d24 100644 --enable-pthreads \ --enable-runtime-cpudetect \ diff --git a/language/English/strings.po b/language/English/strings.po -index c2985ec..075e0c6 100644 +index 4ea1c4e..5c7defd 100644 --- a/language/English/strings.po +++ b/language/English/strings.po -@@ -5794,7 +5794,12 @@ msgctxt "#13437" +@@ -5798,7 +5798,12 @@ msgctxt "#13437" msgid "Prefer VDPAU Video Mixer" msgstr "" @@ -13684,7 +13684,7 @@ index c2985ec..075e0c6 100644 #: system/settings/settings.xml msgctxt "#13500" -@@ -6880,7 +6885,11 @@ msgctxt "#16325" +@@ -6884,7 +6889,11 @@ msgctxt "#16325" msgid "VDPAU - Bob" msgstr "" @@ -17057,10 +17057,10 @@ index 8f30248..db58075 100644 1.8.4 -From 20b11001a85ca36750249974f98ea1b6885ac08e Mon Sep 17 00:00:00 2001 +From 3b15c3cfd8fbe0c999fa2479b62e90c155685f96 Mon Sep 17 00:00:00 2001 From: xbmc Date: Sat, 16 Jun 2012 12:46:30 +0200 -Subject: [PATCH 49/89] xvba: do not use vaapi if xvba is present +Subject: [PATCH 49/92] xvba: do not use vaapi if xvba is present --- xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.cpp | 9 +++++++++ @@ -17090,10 +17090,10 @@ index 2d59b09..aa83875 100644 1.8.4 -From c0b1b3e7cb8775a134b9fbc2d1cf1cfcc5e5dd20 Mon Sep 17 00:00:00 2001 +From c8fce53172c241c8309e55c54c591ec1ce6afc15 Mon Sep 17 00:00:00 2001 From: xbmc Date: Thu, 23 Aug 2012 19:39:49 +0200 -Subject: [PATCH 50/89] ffmpeg: add av_find_default_stream_index to interface +Subject: [PATCH 50/92] ffmpeg: add av_find_default_stream_index to interface --- lib/DllAvFormat.h | 4 ++++ @@ -17139,10 +17139,10 @@ index 0016c0b..3514856 100644 1.8.4 -From 35ce17f3bf1e2175635427f5a789a2eb388c6e05 Mon Sep 17 00:00:00 2001 +From f0f1bf20f0442fa843063b04e19c5ed8f0514fb2 Mon Sep 17 00:00:00 2001 From: xbmc Date: Mon, 20 Aug 2012 16:06:39 +0200 -Subject: [PATCH 51/89] dvdplayer: observe pts counter overflow +Subject: [PATCH 51/92] dvdplayer: observe pts counter overflow --- .../cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp | 198 ++++++++++++++++++++- @@ -17429,10 +17429,10 @@ index aef5ab1..35abbdf 100644 1.8.4 -From 4ff9feb5023035324cad3d12d8135d04d72f6652 Mon Sep 17 00:00:00 2001 +From 35effd70277b899bd40c3083094a8dcd51e878de Mon Sep 17 00:00:00 2001 From: xbmc Date: Tue, 2 Oct 2012 13:02:10 +0200 -Subject: [PATCH 52/89] dvdplayer: avoid short screen flicker caused by +Subject: [PATCH 52/92] dvdplayer: avoid short screen flicker caused by unnecessary reconfigure of renderer --- @@ -17465,10 +17465,10 @@ index c2808c3..5d487f4 100644 1.8.4 -From c5f0c48e362eebb0d64ea391673a5e5e0dce616d Mon Sep 17 00:00:00 2001 +From ed58faaede557555b23ba6c16b81233e151bd340 Mon Sep 17 00:00:00 2001 From: xbmc Date: Thu, 11 Oct 2012 12:05:50 +0200 -Subject: [PATCH 53/89] vdpau: advanced settings for auto deinterlacing +Subject: [PATCH 53/92] vdpau: advanced settings for auto deinterlacing --- xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp | 8 ++++---- @@ -17534,10 +17534,10 @@ index 0d792af..b7b7a80 100644 1.8.4 -From b03e5dec167d524df52641e3d94d0c5ff7c6d969 Mon Sep 17 00:00:00 2001 +From dba4c650cf55a92ee60ccce57d9de4bbc204a6d3 Mon Sep 17 00:00:00 2001 From: xbmc Date: Fri, 2 Nov 2012 13:20:03 +0100 -Subject: [PATCH 54/89] player: fix rewind +Subject: [PATCH 54/92] player: fix rewind --- xbmc/cores/dvdplayer/DVDMessage.h | 5 ++++- @@ -17752,10 +17752,10 @@ index 59c7f09..65dea76 100644 1.8.4 -From af1471e4edfd1d7dbe9377c8a5ec93b8093d1857 Mon Sep 17 00:00:00 2001 +From cbd0f850b81dd1d87c1eae20ad74032b398ef913 Mon Sep 17 00:00:00 2001 From: xbmc Date: Fri, 23 Nov 2012 17:41:12 +0100 -Subject: [PATCH 55/89] xrandr: fix query for multiple screens +Subject: [PATCH 55/92] xrandr: fix query for multiple screens --- xbmc/windowing/X11/XRandR.cpp | 10 ++++++---- @@ -17796,10 +17796,10 @@ index 9e181f2..ce0a02b 100644 1.8.4 -From 60bf0adac6c2427fe68dba0cf4cd7afa03257cd4 Mon Sep 17 00:00:00 2001 +From 566f77b7443d382ab8eaaa0dc2b95d5b1bf40c30 Mon Sep 17 00:00:00 2001 From: xbmc Date: Sun, 2 Dec 2012 15:46:55 +0100 -Subject: [PATCH 56/89] X11: add debug log to print out refresh after xrr event +Subject: [PATCH 56/92] X11: add debug log to print out refresh after xrr event --- xbmc/windowing/X11/WinSystemX11.cpp | 6 ++++++ @@ -17826,10 +17826,10 @@ index 9ff947c..a3394e6 100644 1.8.4 -From a69acc91a5af2e5ded984c0342618f425bfadc50 Mon Sep 17 00:00:00 2001 +From 354fb1cb9d3a8d334861d2e7c3422ea27c5c6de7 Mon Sep 17 00:00:00 2001 From: xbmc Date: Tue, 11 Dec 2012 11:08:13 +0100 -Subject: [PATCH 57/89] X11: dont call XCloseDisplay on shutdown, it crashes +Subject: [PATCH 57/92] X11: dont call XCloseDisplay on shutdown, it crashes when powered doen by cec on ATI --- @@ -17854,10 +17854,10 @@ index a3394e6..b941c14 100644 1.8.4 -From 617b4ff7f11e16f7ebd023c82209a1d8ae2d26b7 Mon Sep 17 00:00:00 2001 +From 66b9c4ac765253621bb307413a433186c1c09746 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 58/89] x11: support for multiple x screens +Subject: [PATCH 58/92] x11: support for multiple x screens --- xbmc/windowing/X11/XRandR.cpp | 2 +- @@ -17880,10 +17880,10 @@ index ce0a02b..aa27d2b 100644 1.8.4 -From 0168245eee2e763a9b2dabc55a8745b365ff2a80 Mon Sep 17 00:00:00 2001 +From c7445a98c106f462ead06e7e7d46eb034d42d998 Mon Sep 17 00:00:00 2001 From: xbmc Date: Mon, 24 Dec 2012 16:02:42 +0100 -Subject: [PATCH 59/89] pvr: increase changes counter of stream on stream +Subject: [PATCH 59/92] pvr: increase changes counter of stream on stream change, cosmetics after dd307930d39d92f145a01a16600cd00e01ec39be --- @@ -17891,7 +17891,7 @@ Subject: [PATCH 59/89] pvr: increase changes counter of stream on stream 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxPVRClient.cpp b/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxPVRClient.cpp -index 62fbb41..a80c789 100644 +index b96d520..df89f6f 100644 --- a/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxPVRClient.cpp +++ b/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxPVRClient.cpp @@ -339,9 +339,7 @@ void CDVDDemuxPVRClient::RequestStreams() @@ -17917,10 +17917,10 @@ index 62fbb41..a80c789 100644 1.8.4 -From ba36c5babf99746f6ab01e46605a46da9a0bbe63 Mon Sep 17 00:00:00 2001 +From 2efbf1cc2c374a55763a1e14baaed315caf7bdfa Mon Sep 17 00:00:00 2001 From: xbmc Date: Thu, 17 Jan 2013 16:03:22 +0100 -Subject: [PATCH 60/89] X11: add keymapping for XF86XK_Sleep +Subject: [PATCH 60/92] X11: add keymapping for XF86XK_Sleep --- xbmc/windowing/WinEventsX11.cpp | 1 + @@ -17942,10 +17942,10 @@ index 4a5aab4..da5d412 100644 1.8.4 -From e7cb292b8a5660c59a4f7b77fb90f19e21b2c271 Mon Sep 17 00:00:00 2001 +From 10e5e5457e8670bc5c4a7287657d3fccf8a2c3e6 Mon Sep 17 00:00:00 2001 From: xbmc Date: Mon, 21 Jan 2013 09:00:19 +0100 -Subject: [PATCH 61/89] X11: remove toggle full screen after resume +Subject: [PATCH 61/92] X11: remove toggle full screen after resume --- xbmc/powermanagement/PowerManager.cpp | 5 ----- @@ -17971,10 +17971,10 @@ index 2033574..c79bbc1 100644 1.8.4 -From b972b8da4fb8441f07ff21cb1d5e7dfc44bbed84 Mon Sep 17 00:00:00 2001 +From cb9093718cda92031c7e940b219d15dfb274a239 Mon Sep 17 00:00:00 2001 From: xbmc Date: Wed, 23 Jan 2013 17:03:02 +0100 -Subject: [PATCH 62/89] xrandr: set screen on mode change command +Subject: [PATCH 62/92] xrandr: set screen on mode change command --- xbmc/windowing/X11/XRandR.cpp | 2 +- @@ -17997,10 +17997,10 @@ index aa27d2b..67bf6ca 100644 1.8.4 -From a1dc94956fc9886b60a35a66c9ad81adc9906f66 Mon Sep 17 00:00:00 2001 +From 073d43dc107541c24481945f5acf8cb427f5e704 Mon Sep 17 00:00:00 2001 From: xbmc Date: Wed, 23 Jan 2013 17:03:39 +0100 -Subject: [PATCH 63/89] X11: recreate glx context when output changes +Subject: [PATCH 63/92] X11: recreate glx context when output changes --- xbmc/windowing/X11/WinSystemX11.cpp | 6 +++--- @@ -18051,10 +18051,10 @@ index ce3c289..311e4cc 100644 1.8.4 -From 5f6cbd913b55015a8e4d8263e1c014b18f4b5d99 Mon Sep 17 00:00:00 2001 +From 083ce98319c0c9b849e16efc469f374651e1bd12 Mon Sep 17 00:00:00 2001 From: xbmc Date: Fri, 14 Dec 2012 14:19:15 +0100 -Subject: [PATCH 64/89] pvr: do not show selection dialog for a single menu +Subject: [PATCH 64/92] pvr: do not show selection dialog for a single menu hook --- @@ -18092,10 +18092,10 @@ index aab6345..a880778 100644 1.8.4 -From d93a12d971907a313979a77d3c619fc49baa8bdb Mon Sep 17 00:00:00 2001 +From e859d3f125a8824b65b10136436078e36cbd7b8b Mon Sep 17 00:00:00 2001 From: xbmc Date: Sun, 3 Feb 2013 08:17:16 +0100 -Subject: [PATCH 65/89] X11: use default screen parameters if no output +Subject: [PATCH 65/92] X11: use default screen parameters if no output connected --- @@ -18199,10 +18199,10 @@ index c84e793..5215f4d 100644 1.8.4 -From 70b83f1cea8eff42473dd5b96fd56d976196f1bd Mon Sep 17 00:00:00 2001 +From e7621880632371b72b295e8e9a6ccd24c72e11a9 Mon Sep 17 00:00:00 2001 From: xbmc Date: Sat, 23 Mar 2013 15:13:32 +0100 -Subject: [PATCH 66/89] X11: create parent window +Subject: [PATCH 66/92] X11: create parent window --- xbmc/windowing/X11/WinSystemX11.cpp | 69 +++++++++++++++++++++++-------------- @@ -18468,10 +18468,10 @@ index 311e4cc..49365a8 100644 1.8.4 -From c60e19936076c9b9abe5bde88dcd0eb7bc3f86e1 Mon Sep 17 00:00:00 2001 +From 625665f08a3c7232d95b9b2c1e281dff98b2281e Mon Sep 17 00:00:00 2001 From: xbmc Date: Sun, 24 Mar 2013 12:30:12 +0100 -Subject: [PATCH 67/89] X11: use system key repeat rate instead of hardcoded +Subject: [PATCH 67/92] X11: use system key repeat rate instead of hardcoded one, taken from 58fd64b194e38b73b5f3132744bab35e994e7441 --- @@ -18673,10 +18673,10 @@ index 102a076..5b1f3fa 100644 1.8.4 -From bd7ce9a61bce915cfeb8554cf0b691b299689507 Mon Sep 17 00:00:00 2001 +From 68254ec1769a18a4f56dde4ad849f26fad9532fb Mon Sep 17 00:00:00 2001 From: xbmc Date: Sun, 24 Mar 2013 16:04:48 +0100 -Subject: [PATCH 68/89] linux: use CLOCK_MONOTONIC_RAW as this is not subject +Subject: [PATCH 68/92] linux: use CLOCK_MONOTONIC_RAW as this is not subject to NTP --- @@ -18714,20 +18714,20 @@ index c06b8c5..4390d2e 100644 1.8.4 -From 5a1a4ebda29fea6367646836da34ebd0fed483a4 Mon Sep 17 00:00:00 2001 +From e496631276113a87beb9ea30eee4f14902ba3907 Mon Sep 17 00:00:00 2001 From: xbmc Date: Thu, 28 Mar 2013 15:18:53 +0100 -Subject: [PATCH 69/89] OMXPlayer: some caching fixes for pvr +Subject: [PATCH 69/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 6c13e35..a1d2609 100644 +index 12122e5..982b0a3 100644 --- a/xbmc/cores/omxplayer/OMXPlayer.cpp +++ b/xbmc/cores/omxplayer/OMXPlayer.cpp -@@ -2465,7 +2465,8 @@ void COMXPlayer::HandleMessages() +@@ -2472,7 +2472,8 @@ void COMXPlayer::HandleMessages() m_messenger.Put(new CDVDMsgPlayerSeek(GetTime(), (speed < 0), true, false, false, true)); m_playSpeed = speed; @@ -18741,10 +18741,10 @@ index 6c13e35..a1d2609 100644 1.8.4 -From f13400a994978d22418aab743a477c5675b675a7 Mon Sep 17 00:00:00 2001 +From ba73fd38ab94f7f81c1c1690e411dda228f619da Mon Sep 17 00:00:00 2001 From: xbmc Date: Thu, 28 Mar 2013 20:50:59 +0100 -Subject: [PATCH 70/89] fix incorrect display of fps when dr kicks in +Subject: [PATCH 70/92] fix incorrect display of fps when dr kicks in --- xbmc/Application.cpp | 3 ++- @@ -18771,10 +18771,10 @@ index becf35d..dd9d1e1 100644 1.8.4 -From 17132bac1e5d9354f2c57a054bdca7a1545ab847 Mon Sep 17 00:00:00 2001 +From 9eb4af8e626e9ebbf7f2846e3267cc07be903cf7 Mon Sep 17 00:00:00 2001 From: xbmc Date: Sat, 13 Apr 2013 08:32:06 +0200 -Subject: [PATCH 71/89] X11: fix mouse coverage +Subject: [PATCH 71/92] X11: fix mouse coverage --- xbmc/windowing/X11/WinSystemX11.cpp | 11 ++++++++--- @@ -18840,10 +18840,10 @@ index 49365a8..924af1d 100644 1.8.4 -From 8d410de650dfb1b1782e196f241b3845a4d291aa Mon Sep 17 00:00:00 2001 +From 3fee0a2c4a652327a858f59ed25eb31f91f333f2 Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Wed, 8 May 2013 13:14:58 +0200 -Subject: [PATCH 72/89] X11: fix incorrectly used screen num in desktop +Subject: [PATCH 72/92] X11: fix incorrectly used screen num in desktop resolution --- @@ -18878,10 +18878,10 @@ index 186a28e..66955b8 100644 1.8.4 -From 16bdae923c9f30193dcb9f729cc180da989563a1 Mon Sep 17 00:00:00 2001 +From 47f0800857719e51489d733178a0790bac64c3da Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Thu, 9 May 2013 12:07:09 +0200 -Subject: [PATCH 73/89] X11: do not overwrite user selected monitor with +Subject: [PATCH 73/92] X11: do not overwrite user selected monitor with fallback --- @@ -19006,10 +19006,10 @@ index 924af1d..2fb9e0f 100644 1.8.4 -From 2ed6a56e8bb9c87e23f2eff14027eeb078a88c12 Mon Sep 17 00:00:00 2001 +From 4796ca401d76704a4f45a70bb473e3176d0557a3 Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Sun, 12 May 2013 10:50:30 +0200 -Subject: [PATCH 74/89] xrandr: add turn on/off to wrapper +Subject: [PATCH 74/92] xrandr: add turn on/off to wrapper --- xbmc/windowing/X11/XRandR.cpp | 78 +++++++++++++++++++++++++++++++++++++++---- @@ -19175,10 +19175,10 @@ index d37838a..059062f 100644 1.8.4 -From 0d4f602533f0b8e23efe91ec3e061b13c16b844e Mon Sep 17 00:00:00 2001 +From 2837feba0c6dc8ab40a4ecc387fe2d1958685a19 Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Sun, 19 May 2013 12:55:35 +0200 -Subject: [PATCH 75/89] xrandr: add GetPreferredMode to wrapper +Subject: [PATCH 75/92] xrandr: add GetPreferredMode to wrapper --- xbmc/windowing/X11/XRandR.cpp | 23 +++++++++++++++++++++++ @@ -19235,10 +19235,10 @@ index 059062f..ab7cc63 100644 1.8.4 -From 0581543c0295cb9f41d32f0e73c4dbbcfc34c97a Mon Sep 17 00:00:00 2001 +From 6ec9d5af504822f1f37f8571b3f350d920182b5d Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Sat, 11 May 2013 17:12:12 +0200 -Subject: [PATCH 76/89] X11: multi-head improvement - poll for desired output +Subject: [PATCH 76/92] X11: multi-head improvement - poll for desired output if we do not get an xrr event --- @@ -19253,10 +19253,10 @@ Subject: [PATCH 76/89] 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 075e0c6..71c6d4a 100644 +index 5c7defd..76f56bb 100644 --- a/language/English/strings.po +++ b/language/English/strings.po -@@ -6254,7 +6254,7 @@ msgctxt "#14071" +@@ -6258,7 +6258,7 @@ msgctxt "#14071" msgid "Allow file renaming and deletion" msgstr "" @@ -19265,7 +19265,7 @@ index 075e0c6..71c6d4a 100644 msgctxt "#14074" msgid "Set timezone" -@@ -6386,7 +6386,12 @@ msgctxt "#14100" +@@ -6390,7 +6390,12 @@ msgctxt "#14100" msgid "Stop ripping CD" msgstr "" @@ -19519,10 +19519,10 @@ index 4809821..1ad26b2 100644 1.8.4 -From d56893ca07e4592231fe269e5ff31483dd6dcaee Mon Sep 17 00:00:00 2001 +From dd3e11e1c6847ccee4b101c2632c7c5bccea2dbf Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Wed, 15 May 2013 09:14:34 +0200 -Subject: [PATCH 77/89] X11: ignore mouse move event form other windows +Subject: [PATCH 77/92] X11: ignore mouse move event form other windows --- xbmc/windowing/WinEventsX11.cpp | 4 +++- @@ -19554,10 +19554,10 @@ index 6ddaead..e4451fe 100644 1.8.4 -From e62b8a4aeba9509fd25e72a3f979367f3984ad8e Mon Sep 17 00:00:00 2001 +From 34b584412f5113e90e52bd7d9f587d94564b7ea8 Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Tue, 11 Jun 2013 16:20:29 +0200 -Subject: [PATCH 78/89] renderer: allow some lateness within vblank interval +Subject: [PATCH 78/92] renderer: allow some lateness within vblank interval --- xbmc/cores/VideoRenderers/RenderManager.cpp | 12 ++++++++++-- @@ -19617,10 +19617,10 @@ index befd851..27283ec 100644 1.8.4 -From de89d040f0910bedd2498f5bb22fad98d1f96a2e Mon Sep 17 00:00:00 2001 +From 868b40722fca1e7bd6a722ba4f35368371fefd04 Mon Sep 17 00:00:00 2001 From: xbmc Date: Sun, 16 Jun 2013 13:22:58 +0200 -Subject: [PATCH 79/89] X11: another fix for mouse coverage +Subject: [PATCH 79/92] X11: another fix for mouse coverage --- xbmc/windowing/WinEventsX11.cpp | 6 ++++-- @@ -19653,10 +19653,10 @@ index e4451fe..582b9f5 100644 1.8.4 -From a236cf5fcf766094816f92ac8d335f7d89d93694 Mon Sep 17 00:00:00 2001 +From d171700fd3030c9e26f0491192a781fe1f2390fb Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Fri, 5 Jul 2013 12:14:00 +0200 -Subject: [PATCH 80/89] X11: set windows class name +Subject: [PATCH 80/92] X11: set windows class name --- xbmc/windowing/X11/WinSystemX11.cpp | 9 ++++++++- @@ -19698,20 +19698,20 @@ index 7e4b637..44e40a3 100644 1.8.4 -From 43c73d114e52ee770df95610f6dde308692f13b9 Mon Sep 17 00:00:00 2001 +From 4b6cb92761b437f73161a1823086c1e5e9308f35 Mon Sep 17 00:00:00 2001 From: spiff Date: Tue, 16 Jul 2013 14:34:04 +0200 -Subject: [PATCH 81/89] fixed: typo +Subject: [PATCH 81/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 71c6d4a..4814e69 100644 +index 76f56bb..72be5e1 100644 --- a/language/English/strings.po +++ b/language/English/strings.po -@@ -6388,7 +6388,7 @@ msgstr "" +@@ -6392,7 +6392,7 @@ msgstr "" #: xbmc/settings/settings.xml msgctxt "#14101" @@ -19724,10 +19724,10 @@ index 71c6d4a..4814e69 100644 1.8.4 -From 9b618eb033c13bbfbd801f6fb402fc18fbf3c868 Mon Sep 17 00:00:00 2001 +From 9a82876013f47330a78228bd66e258c09fb7925b Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Thu, 25 Jul 2013 17:18:13 +0200 -Subject: [PATCH 82/89] ActiveAE: slightly reduce buffer size +Subject: [PATCH 82/92] ActiveAE: slightly reduce buffer size --- xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAE.cpp | 4 ++-- @@ -19752,10 +19752,10 @@ index 3f0254d..59847ae 100644 1.8.4 -From fc54b6edfeb762e701d83eb25b73b4fcc75735b7 Mon Sep 17 00:00:00 2001 +From a6505bde2ff740013906bbdfa43c9fdd27c5e7b0 Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Sun, 4 Aug 2013 10:11:16 +0200 -Subject: [PATCH 83/89] Revert "vdpau: comment some features that will be added +Subject: [PATCH 83/92] Revert "vdpau: comment some features that will be added later" This reverts commit e00b4f65864d623ab4d2e9e5c06db138e661f1cf. @@ -19821,10 +19821,10 @@ index 87c0319..2f9e631 100644 1.8.4 -From 6df94a2652ae6daeee32d6e5fab70efa0880c61f Mon Sep 17 00:00:00 2001 +From be2a89452d7d7576eb3a01a95271e59653cb0c26 Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Fri, 9 Aug 2013 18:01:40 +0200 -Subject: [PATCH 84/89] X11: fix keysyms +Subject: [PATCH 84/92] X11: fix keysyms --- xbmc/windowing/WinEventsX11.cpp | 2 +- @@ -19847,10 +19847,10 @@ index 582b9f5..ca31278 100644 1.8.4 -From ae393c69253640c346772c4ce5baf13b803e018d Mon Sep 17 00:00:00 2001 +From 37103f278cdb0926eda8917fec3023fd54750ef5 Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Fri, 9 Aug 2013 18:42:36 +0200 -Subject: [PATCH 85/89] X11: fix keysym for non-IM +Subject: [PATCH 85/92] X11: fix keysym for non-IM --- xbmc/windowing/WinEventsX11.cpp | 2 +- @@ -19873,10 +19873,10 @@ index ca31278..db50d3c 100644 1.8.4 -From 365538c881144bf5cc4c70993356e4502740c37a Mon Sep 17 00:00:00 2001 +From 451d4174afc90f874c6323d84b03720b43aad2b7 Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Sat, 10 Aug 2013 11:18:16 +0200 -Subject: [PATCH 86/89] add some missing multi media keys +Subject: [PATCH 86/92] add some missing multi media keys --- system/keymaps/keyboard.xml | 3 +++ @@ -19931,10 +19931,10 @@ index ee6bb69..364b45a 100644 1.8.4 -From f6c11c7b6e4bdd6312b46f240a03f1b9c91fed5e Mon Sep 17 00:00:00 2001 +From 1dd1ed9be27574166cea7d3a7eeb838ec64a672a Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Sat, 10 Aug 2013 15:32:06 +0200 -Subject: [PATCH 87/89] CWinSystemBase: keep RES_DESKTOP untouched at pos 0, +Subject: [PATCH 87/92] CWinSystemBase: keep RES_DESKTOP untouched at pos 0, fixes toggle fullscreen --- @@ -19969,10 +19969,10 @@ index bad5c95..b789134 100644 1.8.4 -From 86d8693723f05552e6a328bbc38537489905d45f Mon Sep 17 00:00:00 2001 +From 4c2a00eb2464698ec2a279b3455ca610be0509d7 Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Sat, 10 Aug 2013 15:53:45 +0200 -Subject: [PATCH 88/89] X11: squash multi +Subject: [PATCH 88/92] X11: squash multi --- xbmc/windowing/X11/WinSystemX11.cpp | 2 +- @@ -19995,10 +19995,10 @@ index 44e40a3..a00481e 100644 1.8.4 -From 3886e9c703bc50198b8c310ceab36e5fbe6d1a2e Mon Sep 17 00:00:00 2001 +From 93607d509812396eb0b989593c4a3cc65afa6f2d Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Tue, 3 Sep 2013 20:46:17 +0200 -Subject: [PATCH 89/89] X11: do not poll default monitor +Subject: [PATCH 89/92] X11: do not poll default monitor --- xbmc/windowing/X11/WinSystemX11.cpp | 2 +- @@ -20020,3 +20020,240 @@ index a00481e..58ee352 100644 -- 1.8.4 + +From 615c1fe2ff904cdb9ebcd8edc0b2c42c3cd6218c Mon Sep 17 00:00:00 2001 +From: Rainer Hochecker +Date: Mon, 9 Sep 2013 12:13:15 +0200 +Subject: [PATCH 90/92] ffmpeg backport: h264: do not discard NAL_SEI when + skipping frames + +--- + lib/ffmpeg/libavcodec/h264.c | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +diff --git a/lib/ffmpeg/libavcodec/h264.c b/lib/ffmpeg/libavcodec/h264.c +index 4f09c67..62ac8fb 100644 +--- a/lib/ffmpeg/libavcodec/h264.c ++++ b/lib/ffmpeg/libavcodec/h264.c +@@ -4529,8 +4529,7 @@ static int decode_nal_units(H264Context *h, const uint8_t *buf, int buf_size, + first_slice = hx->nal_unit_type; + } + +- // FIXME do not discard SEI id +- if (avctx->skip_frame >= AVDISCARD_NONREF && h->nal_ref_idc == 0) ++ if (avctx->skip_frame >= AVDISCARD_NONREF && h->nal_ref_idc == 0 && h->nal_unit_type != NAL_SEI) + continue; + + again: +-- +1.8.4 + + +From 452bb4cfee19f8d619007c6091a8786188ed4fc9 Mon Sep 17 00:00:00 2001 +From: Rainer Hochecker +Date: Sun, 8 Sep 2013 20:02:17 +0200 +Subject: [PATCH 91/92] ActiveAE: fix toggling stereo upmix for spdif + +--- + .../AudioEngine/Engines/ActiveAE/ActiveAE.cpp | 44 +++++++++++++--------- + xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAE.h | 4 +- + 2 files changed, 29 insertions(+), 19 deletions(-) + +diff --git a/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAE.cpp b/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAE.cpp +index 59847ae..4fa3a2d 100644 +--- a/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAE.cpp ++++ b/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAE.cpp +@@ -796,13 +796,9 @@ void CActiveAE::Process() + } + } + +-void CActiveAE::Configure(AEAudioFormat *desiredFmt) ++AEAudioFormat CActiveAE::GetInputFormat(AEAudioFormat *desiredFmt) + { +- bool initSink = false; +- +- AEAudioFormat sinkInputFormat, inputFormat; +- AEAudioFormat oldInternalFormat = m_internalFormat; +- bool updateMode = true; ++ AEAudioFormat inputFormat; + + if (m_streams.empty()) + { +@@ -822,16 +818,28 @@ void CActiveAE::Configure(AEAudioFormat *desiredFmt) + // keep format when having multiple streams + else if (m_streams.size() > 1 && m_silenceBuffers == NULL) + { +- inputFormat = m_sinkRequestFormat; +- updateMode = false; ++ inputFormat = m_inputFormat; + } + else + { + inputFormat = m_streams.front()->m_format; ++ m_inputFormat = inputFormat; + } + ++ return inputFormat; ++} ++ ++void CActiveAE::Configure(AEAudioFormat *desiredFmt) ++{ ++ bool initSink = false; ++ ++ AEAudioFormat sinkInputFormat, inputFormat; ++ AEAudioFormat oldInternalFormat = m_internalFormat; ++ ++ inputFormat = GetInputFormat(desiredFmt); ++ + m_sinkRequestFormat = inputFormat; +- ApplySettingsToFormat(m_sinkRequestFormat, m_settings, updateMode); ++ ApplySettingsToFormat(m_sinkRequestFormat, m_settings, (int*)&m_mode); + std::string device = AE_IS_RAW(m_sinkRequestFormat.m_dataFormat) ? m_settings.passthoughdevice : m_settings.device; + std::string driver; + CAESinkFactory::ParseDevice(device, driver); +@@ -1202,10 +1210,10 @@ void CActiveAE::ChangeResamplers() + } + } + +-void CActiveAE::ApplySettingsToFormat(AEAudioFormat &format, AudioSettings &settings, bool setmode) ++void CActiveAE::ApplySettingsToFormat(AEAudioFormat &format, AudioSettings &settings, int *mode) + { +- if (setmode) +- m_mode = MODE_PCM; ++ if (mode) ++ *mode = MODE_PCM; + + // raw pass through + if (m_settings.mode != AUDIO_ANALOG && AE_IS_RAW(format.m_dataFormat)) +@@ -1218,8 +1226,8 @@ void CActiveAE::ApplySettingsToFormat(AEAudioFormat &format, AudioSettings &sett + { + CLog::Log(LOGERROR, "CActiveAE::ApplySettingsToFormat - input audio format is wrong"); + } +- if (setmode) +- m_mode = MODE_RAW; ++ if (mode) ++ *mode = MODE_RAW; + } + // transcode + else if (m_settings.mode != AUDIO_ANALOG && +@@ -1231,8 +1239,8 @@ void CActiveAE::ApplySettingsToFormat(AEAudioFormat &format, AudioSettings &sett + format.m_dataFormat = AE_FMT_AC3; + format.m_sampleRate = 48000; + format.m_channelLayout = AE_CH_LAYOUT_2_0; +- if (setmode) +- m_mode = MODE_TRANSCODE; ++ if (mode) ++ *mode = MODE_TRANSCODE; + } + else + { +@@ -1283,7 +1291,7 @@ void CActiveAE::ApplySettingsToFormat(AEAudioFormat &format, AudioSettings &sett + + bool CActiveAE::NeedReconfigureBuffers() + { +- AEAudioFormat newFormat = m_sinkRequestFormat; ++ AEAudioFormat newFormat = GetInputFormat(); + ApplySettingsToFormat(newFormat, m_settings); + + if (newFormat.m_dataFormat != m_sinkRequestFormat.m_dataFormat || +@@ -1296,7 +1304,7 @@ bool CActiveAE::NeedReconfigureBuffers() + + bool CActiveAE::NeedReconfigureSink() + { +- AEAudioFormat newFormat = m_sinkRequestFormat; ++ AEAudioFormat newFormat = GetInputFormat(); + ApplySettingsToFormat(newFormat, m_settings); + + std::string device = AE_IS_RAW(newFormat.m_dataFormat) ? m_settings.passthoughdevice : m_settings.device; +diff --git a/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAE.h b/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAE.h +index 462c993..d684a44 100644 +--- a/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAE.h ++++ b/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAE.h +@@ -252,8 +252,9 @@ class CActiveAE : public IAE, private CThread + void LoadSettings(); + bool NeedReconfigureBuffers(); + bool NeedReconfigureSink(); +- void ApplySettingsToFormat(AEAudioFormat &format, AudioSettings &settings, bool setmode = false); ++ void ApplySettingsToFormat(AEAudioFormat &format, AudioSettings &settings, int *mode = NULL); + void Configure(AEAudioFormat *desiredFmt = NULL); ++ AEAudioFormat GetInputFormat(AEAudioFormat *desiredFmt = NULL); + CActiveAEStream* CreateStream(MsgStreamNew *streamMsg); + void DiscardStream(CActiveAEStream *stream); + void SFlushStream(CActiveAEStream *stream); +@@ -297,6 +298,7 @@ class CActiveAE : public IAE, private CThread + AEAudioFormat m_sinkRequestFormat; + AEAudioFormat m_encoderFormat; + AEAudioFormat m_internalFormat; ++ AEAudioFormat m_inputFormat; + AudioSettings m_settings; + CEngineStats m_stats; + IAEEncoder *m_encoder; +-- +1.8.4 + + +From d64657004969b56678534798ef0aef16838fab21 Mon Sep 17 00:00:00 2001 +From: Rainer Hochecker +Date: Sun, 8 Sep 2013 20:50:40 +0200 +Subject: [PATCH 92/92] ActiveAE: fix channel layout for audiophile mode + +--- + .../AudioEngine/Engines/ActiveAE/ActiveAE.cpp | 31 ++++++++++++---------- + 1 file changed, 17 insertions(+), 14 deletions(-) + +diff --git a/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAE.cpp b/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAE.cpp +index 4fa3a2d..f8a44b5 100644 +--- a/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAE.cpp ++++ b/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAE.cpp +@@ -1249,21 +1249,27 @@ void CActiveAE::ApplySettingsToFormat(AEAudioFormat &format, AudioSettings &sett + settings.stereoupmix || + !g_advancedSettings.m_audioAudiophile) + { ++ CAEChannelInfo stdLayout; + switch (settings.channels) + { + default: +- case 0: format.m_channelLayout = AE_CH_LAYOUT_2_0; break; +- case 1: format.m_channelLayout = AE_CH_LAYOUT_2_0; break; +- case 2: format.m_channelLayout = AE_CH_LAYOUT_2_1; break; +- case 3: format.m_channelLayout = AE_CH_LAYOUT_3_0; break; +- case 4: format.m_channelLayout = AE_CH_LAYOUT_3_1; break; +- case 5: format.m_channelLayout = AE_CH_LAYOUT_4_0; break; +- case 6: format.m_channelLayout = AE_CH_LAYOUT_4_1; break; +- case 7: format.m_channelLayout = AE_CH_LAYOUT_5_0; break; +- case 8: format.m_channelLayout = AE_CH_LAYOUT_5_1; break; +- case 9: format.m_channelLayout = AE_CH_LAYOUT_7_0; break; +- case 10: format.m_channelLayout = AE_CH_LAYOUT_7_1; break; ++ case 0: stdLayout = AE_CH_LAYOUT_2_0; break; ++ case 1: stdLayout = AE_CH_LAYOUT_2_0; break; ++ case 2: stdLayout = AE_CH_LAYOUT_2_1; break; ++ case 3: stdLayout = AE_CH_LAYOUT_3_0; break; ++ case 4: stdLayout = AE_CH_LAYOUT_3_1; break; ++ case 5: stdLayout = AE_CH_LAYOUT_4_0; break; ++ case 6: stdLayout = AE_CH_LAYOUT_4_1; break; ++ case 7: stdLayout = AE_CH_LAYOUT_5_0; break; ++ case 8: stdLayout = AE_CH_LAYOUT_5_1; break; ++ case 9: stdLayout = AE_CH_LAYOUT_7_0; break; ++ case 10: stdLayout = AE_CH_LAYOUT_7_1; break; + } ++ ++ if (g_advancedSettings.m_audioAudiophile) ++ format.m_channelLayout.ResolveChannels(stdLayout); ++ else ++ format.m_channelLayout = stdLayout; + } + + if (m_settings.mode == AUDIO_IEC958 && format.m_sampleRate > 48000) +@@ -1283,9 +1289,6 @@ void CActiveAE::ApplySettingsToFormat(AEAudioFormat &format, AudioSettings &sett + { + format.m_channelLayout = AE_CH_LAYOUT_2_0; + } +- +- CAEChannelInfo stdLayout = format.m_channelLayout; +- format.m_channelLayout.ResolveChannels(stdLayout); + } + } + +-- +1.8.4 + diff --git a/packages/mediacenter/xbmc/patches/13.alpha-dcd897b/xbmc-995.10-disable-alt-tab.patch b/packages/mediacenter/xbmc/patches/13.alpha-2ef8929/xbmc-995.10-disable-alt-tab.patch similarity index 100% rename from packages/mediacenter/xbmc/patches/13.alpha-dcd897b/xbmc-995.10-disable-alt-tab.patch rename to packages/mediacenter/xbmc/patches/13.alpha-2ef8929/xbmc-995.10-disable-alt-tab.patch diff --git a/packages/mediacenter/xbmc/patches/13.alpha-dcd897b/xbmc-990.27-PR3211.patch b/packages/mediacenter/xbmc/patches/13.alpha-dcd897b/xbmc-990.27-PR3211.patch deleted file mode 100644 index 0dc0ce059f..0000000000 --- a/packages/mediacenter/xbmc/patches/13.alpha-dcd897b/xbmc-990.27-PR3211.patch +++ /dev/null @@ -1,290 +0,0 @@ -From 4bdcd85735abd6e6948f2842501d2d949f57b405 Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Wed, 21 Aug 2013 23:48:56 +0100 -Subject: [PATCH] [rbp/omxplayer] Avoid too many calls to GPU - -We currently read the media time once per packet received from demuxer to determine gpu underrun. -We've found that TrueHD audio in particular produces ~1000 packets per second (whether it is the active track or not). -The cost of reading media time (from gpu) is high enough that 1000 calls per second makes us fail to keep up. -So, cache the media time, and only read it at most 50 times per second. ---- - xbmc/cores/omxplayer/OMXPlayer.cpp | 209 +++++++++++++++++++------------------ - xbmc/cores/omxplayer/OMXPlayer.h | 2 + - 2 files changed, 110 insertions(+), 101 deletions(-) - -diff --git a/xbmc/cores/omxplayer/OMXPlayer.cpp b/xbmc/cores/omxplayer/OMXPlayer.cpp -index 6c13e35..12122e5 100644 ---- a/xbmc/cores/omxplayer/OMXPlayer.cpp -+++ b/xbmc/cores/omxplayer/OMXPlayer.cpp -@@ -474,6 +474,8 @@ void COMXSelectionStreams::Update(CDVDInputStream* input, CDVDDemux* demuxer) - m_stepped = false; - m_video_fifo = 0; - m_audio_fifo = 0; -+ m_last_check_time = 0.0; -+ m_stamp = 0.0; - - memset(&m_SpeedState, 0, sizeof(m_SpeedState)); - -@@ -1114,117 +1116,121 @@ void COMXPlayer::Process() - - while (!m_bAbortRequest) - { -- const bool m_Pause = m_playSpeed == DVD_PLAYSPEED_PAUSE; -- const bool not_accepts_data = (!m_omxPlayerAudio.AcceptsData() && m_CurrentAudio.id >= 0) || -- (!m_omxPlayerVideo.AcceptsData() && m_CurrentVideo.id >= 0); -- /* when the video/audio fifos are low, we pause clock, when high we resume */ -- double stamp = m_av_clock.OMXMediaTime(); -- double audio_pts = floor(m_omxPlayerAudio.GetCurrentPts()); -- double video_pts = floor(m_omxPlayerVideo.GetCurrentPts()); -- -- float audio_fifo = audio_pts / DVD_TIME_BASE - stamp * 1e-6; -- float video_fifo = video_pts / DVD_TIME_BASE - stamp * 1e-6; -- float threshold = 0.1f; -- bool audio_fifo_low = false, video_fifo_low = false, audio_fifo_high = false, video_fifo_high = false; -- -- // if deinterlace setting has changed, we should close and open video -- if (current_deinterlace != CMediaSettings::Get().GetCurrentVideoSettings().m_DeinterlaceMode) -+ double now = m_clock.GetAbsoluteClock(); -+ if (m_last_check_time == 0.0 || m_last_check_time + DVD_MSEC_TO_TIME(20) <= now) - { -- int iStream = m_CurrentVideo.id, source = m_CurrentVideo.source; -- CloseVideoStream(false); -- OpenVideoStream(iStream, source); -- if (m_State.canseek) -- m_messenger.Put(new CDVDMsgPlayerSeek(GetTime(), true, true, true, true, true)); -- current_deinterlace = CMediaSettings::Get().GetCurrentVideoSettings().m_DeinterlaceMode; -- } -+ m_last_check_time = now; -+ m_stamp = m_av_clock.OMXMediaTime(); -+ const bool m_Pause = m_playSpeed == DVD_PLAYSPEED_PAUSE; -+ const bool not_accepts_data = (!m_omxPlayerAudio.AcceptsData() && m_CurrentAudio.id >= 0) || -+ (!m_omxPlayerVideo.AcceptsData() && m_CurrentVideo.id >= 0); -+ /* when the video/audio fifos are low, we pause clock, when high we resume */ -+ double audio_pts = floor(m_omxPlayerAudio.GetCurrentPts()); -+ double video_pts = floor(m_omxPlayerVideo.GetCurrentPts()); -+ -+ float audio_fifo = audio_pts / DVD_TIME_BASE - m_stamp * 1e-6; -+ float video_fifo = video_pts / DVD_TIME_BASE - m_stamp * 1e-6; -+ float threshold = 0.1f; -+ bool audio_fifo_low = false, video_fifo_low = false, audio_fifo_high = false, video_fifo_high = false; -+ -+ // if deinterlace setting has changed, we should close and open video -+ if (current_deinterlace != CMediaSettings::Get().GetCurrentVideoSettings().m_DeinterlaceMode) -+ { -+ int iStream = m_CurrentVideo.id, source = m_CurrentVideo.source; -+ CloseVideoStream(false); -+ OpenVideoStream(iStream, source); -+ if (m_State.canseek) -+ m_messenger.Put(new CDVDMsgPlayerSeek(GetTime(), true, true, true, true, true)); -+ current_deinterlace = CMediaSettings::Get().GetCurrentVideoSettings().m_DeinterlaceMode; -+ } - -- m_video_fifo = (int)(100.0*(m_omxPlayerVideo.GetDecoderBufferSize()-m_omxPlayerVideo.GetDecoderFreeSpace())/m_omxPlayerVideo.GetDecoderBufferSize()); -- m_audio_fifo = (int)(100.0*audio_fifo/m_omxPlayerAudio.GetCacheTotal()); -+ m_video_fifo = (int)(100.0*(m_omxPlayerVideo.GetDecoderBufferSize()-m_omxPlayerVideo.GetDecoderFreeSpace())/m_omxPlayerVideo.GetDecoderBufferSize()); -+ m_audio_fifo = (int)(100.0*audio_fifo/m_omxPlayerAudio.GetCacheTotal()); - -- #ifdef _DEBUG -- static unsigned count; -- if ((count++ & 15) == 0) -- { -- char response[80]; -- if (m_omxPlayerVideo.GetDecoderBufferSize() && m_omxPlayerAudio.GetCacheTotal()) -- vc_gencmd(response, sizeof response, "render_bar 4 video_fifo %d %d %d %d", -- m_video_fifo, -- (int)(100.0*video_fifo/m_omxPlayerAudio.GetCacheTotal()), -- 0, 100); -- if (m_omxPlayerAudio.GetCacheTotal()) -- vc_gencmd(response, sizeof response, "render_bar 5 audio_fifo %d %d %d %d", -- m_audio_fifo, -- (int)(100.0*m_omxPlayerAudio.GetDelay()/m_omxPlayerAudio.GetCacheTotal()), -- 0, 100); -- vc_gencmd(response, sizeof response, "render_bar 6 video_queue %d %d %d %d", -- m_omxPlayerVideo.GetLevel(), 0, 0, 100); -- vc_gencmd(response, sizeof response, "render_bar 7 audio_queue %d %d %d %d", -- m_omxPlayerAudio.GetLevel(), 0, 0, 100); -- } -- #endif -- if (audio_pts != DVD_NOPTS_VALUE) -- { -- audio_fifo_low = m_HasAudio && audio_fifo < threshold; -- audio_fifo_high = audio_pts != DVD_NOPTS_VALUE && audio_fifo >= m_threshold; -- } -- if (video_pts != DVD_NOPTS_VALUE) -- { -- video_fifo_low = m_HasVideo && video_fifo < threshold; -- video_fifo_high = video_pts != DVD_NOPTS_VALUE && video_fifo >= m_threshold; -- } -- if (!m_HasAudio && m_HasVideo) -- audio_fifo_high = true; -- if (!m_HasVideo && m_HasAudio) -- video_fifo_high = true; -- -- #ifdef _DEBUG -- CLog::Log(LOGDEBUG, "%s - M:%.6f-%.6f (A:%.6f V:%.6f) PEF:%d%d%d S:%.2f A:%.2f V:%.2f/T:%.2f (A:%d%d V:%d%d) A:%d%% V:%d%% (%.2f,%.2f)", __FUNCTION__, -- stamp*1e-6, m_av_clock.OMXClockAdjustment()*1e-6, audio_pts*1e-6, video_pts*1e-6, m_av_clock.OMXIsPaused(), bOmxSentEOFs, not_accepts_data, m_playSpeed * (1.0f/DVD_PLAYSPEED_NORMAL), -- audio_pts == DVD_NOPTS_VALUE ? 0.0:audio_fifo, video_pts == DVD_NOPTS_VALUE ? 0.0:video_fifo, m_threshold, -- audio_fifo_low, audio_fifo_high, video_fifo_low, video_fifo_high, -- m_omxPlayerAudio.GetLevel(), m_omxPlayerVideo.GetLevel(), m_omxPlayerAudio.GetDelay(), (float)m_omxPlayerAudio.GetCacheTotal()); -- #endif -- -- if (TP(m_playSpeed)) -- { -- if (m_CurrentVideo.started) -+ #ifdef _DEBUG -+ static unsigned count; -+ if ((count++ & 7) == 0) - { -- if (stamp == 0.0) -- { -- /* trickplay modes progress by stepping */ -- CLog::Log(LOGDEBUG, "COMXPlayer::Process - Seeking step speed:%.2f last:%.2f v:%.2f", (double)m_playSpeed / DVD_PLAYSPEED_NORMAL, m_SpeedState.lastpts*1e-6, video_pts*1e-6); -- m_av_clock.OMXStep(); -- } -- else -+ char response[80]; -+ if (m_omxPlayerVideo.GetDecoderBufferSize() && m_omxPlayerAudio.GetCacheTotal()) -+ vc_gencmd(response, sizeof response, "render_bar 4 video_fifo %d %d %d %d", -+ m_video_fifo, -+ (int)(100.0*video_fifo/m_omxPlayerAudio.GetCacheTotal()), -+ 0, 100); -+ if (m_omxPlayerAudio.GetCacheTotal()) -+ vc_gencmd(response, sizeof response, "render_bar 5 audio_fifo %d %d %d %d", -+ m_audio_fifo, -+ (int)(100.0*m_omxPlayerAudio.GetDelay()/m_omxPlayerAudio.GetCacheTotal()), -+ 0, 100); -+ vc_gencmd(response, sizeof response, "render_bar 6 video_queue %d %d %d %d", -+ m_omxPlayerVideo.GetLevel(), 0, 0, 100); -+ vc_gencmd(response, sizeof response, "render_bar 7 audio_queue %d %d %d %d", -+ m_omxPlayerAudio.GetLevel(), 0, 0, 100); -+ } -+ #endif -+ if (audio_pts != DVD_NOPTS_VALUE) -+ { -+ audio_fifo_low = m_HasAudio && audio_fifo < threshold; -+ audio_fifo_high = audio_pts != DVD_NOPTS_VALUE && audio_fifo >= m_threshold; -+ } -+ if (video_pts != DVD_NOPTS_VALUE) -+ { -+ video_fifo_low = m_HasVideo && video_fifo < threshold; -+ video_fifo_high = video_pts != DVD_NOPTS_VALUE && video_fifo >= m_threshold; -+ } -+ if (!m_HasAudio && m_HasVideo) -+ audio_fifo_high = true; -+ if (!m_HasVideo && m_HasAudio) -+ video_fifo_high = true; -+ -+ #ifdef _DEBUG -+ CLog::Log(LOGDEBUG, "%s - M:%.6f-%.6f (A:%.6f V:%.6f) PEF:%d%d%d S:%.2f A:%.2f V:%.2f/T:%.2f (A:%d%d V:%d%d) A:%d%% V:%d%% (%.2f,%.2f)", __FUNCTION__, -+ m_stamp*1e-6, m_av_clock.OMXClockAdjustment()*1e-6, audio_pts*1e-6, video_pts*1e-6, m_av_clock.OMXIsPaused(), bOmxSentEOFs, not_accepts_data, m_playSpeed * (1.0f/DVD_PLAYSPEED_NORMAL), -+ audio_pts == DVD_NOPTS_VALUE ? 0.0:audio_fifo, video_pts == DVD_NOPTS_VALUE ? 0.0:video_fifo, m_threshold, -+ audio_fifo_low, audio_fifo_high, video_fifo_low, video_fifo_high, -+ m_omxPlayerAudio.GetLevel(), m_omxPlayerVideo.GetLevel(), m_omxPlayerAudio.GetDelay(), (float)m_omxPlayerAudio.GetCacheTotal()); -+ #endif -+ -+ if (TP(m_playSpeed)) -+ { -+ if (m_CurrentVideo.started) - { -- m_av_clock.OMXMediaTime(0.0); -- m_stepped = true; -+ if (m_stamp == 0.0 && (!m_stepped || m_playSpeed > 0)) -+ { -+ /* trickplay modes progress by stepping */ -+ CLog::Log(LOGDEBUG, "COMXPlayer::Process - Seeking step speed:%.2f last:%.2f v:%.2f", (double)m_playSpeed / DVD_PLAYSPEED_NORMAL, m_SpeedState.lastpts*1e-6, video_pts*1e-6); -+ m_av_clock.OMXStep(); -+ } -+ else -+ { -+ m_av_clock.OMXMediaTime(0.0); -+ m_last_check_time = 0.0; -+ m_stepped = true; -+ } - } - } -- } -- else if(!m_Pause && (bOmxSentEOFs || not_accepts_data || (audio_fifo_high && video_fifo_high))) -- { -- if (m_av_clock.OMXIsPaused()) -+ else if(!m_Pause && (bOmxSentEOFs || not_accepts_data || (audio_fifo_high && video_fifo_high))) - { -- CLog::Log(LOGDEBUG, "Resume %.2f,%.2f (A:%d%d V:%d%d) EOF:%d FULL:%d T:%.2f\n", audio_fifo, video_fifo, -- audio_fifo_low, audio_fifo_high, video_fifo_low, video_fifo_high, bOmxSentEOFs, not_accepts_data, m_threshold); -- m_av_clock.OMXStateExecute(); -- m_av_clock.OMXResume(); -+ if (m_av_clock.OMXIsPaused()) -+ { -+ CLog::Log(LOGDEBUG, "Resume %.2f,%.2f (A:%d%d V:%d%d) EOF:%d FULL:%d T:%.2f\n", audio_fifo, video_fifo, -+ audio_fifo_low, audio_fifo_high, video_fifo_low, video_fifo_high, bOmxSentEOFs, not_accepts_data, m_threshold); -+ m_av_clock.OMXStateExecute(); -+ m_av_clock.OMXResume(); -+ } - } -- } -- else if (m_Pause || audio_fifo_low || video_fifo_low) -- { -- if (!m_av_clock.OMXIsPaused() && !TPA(m_playSpeed)) -+ else if (m_Pause || audio_fifo_low || video_fifo_low) - { -- if (!m_Pause) -- m_threshold = std::min(2.0f*m_threshold, 16.0f); -- CLog::Log(LOGDEBUG, "Pause %.2f,%.2f (A:%d%d V:%d%d) EOF:%d FULL:%d T:%.2f\n", audio_fifo, video_fifo, -- audio_fifo_low, audio_fifo_high, video_fifo_low, video_fifo_high, bOmxSentEOFs, not_accepts_data, m_threshold); -- m_av_clock.OMXPause(); -+ if (!m_av_clock.OMXIsPaused() && !TPA(m_playSpeed)) -+ { -+ if (!m_Pause) -+ m_threshold = std::min(2.0f*m_threshold, 16.0f); -+ CLog::Log(LOGDEBUG, "Pause %.2f,%.2f (A:%d%d V:%d%d) EOF:%d FULL:%d T:%.2f\n", audio_fifo, video_fifo, -+ audio_fifo_low, audio_fifo_high, video_fifo_low, video_fifo_high, bOmxSentEOFs, not_accepts_data, m_threshold); -+ m_av_clock.OMXPause(); -+ } - } - } -- -- // handle messages send to this thread, like seek or demuxer reset requests - HandleMessages(); - - if(m_bAbortRequest) -@@ -2294,6 +2300,7 @@ void COMXPlayer::HandleMessages() - FlushBuffers(!msg.GetFlush(), start, msg.GetAccurate()); - // mark mediatime as invalid - m_av_clock.OMXMediaTime(0.0); -+ m_last_check_time = 0.0; - } - else - CLog::Log(LOGWARNING, "error while seeking"); -@@ -3044,7 +3051,7 @@ int64_t COMXPlayer::GetTime() - if(offset > limit) offset = limit; - if(offset < -limit) offset = -limit; - } -- //{CLog::Log(LOGINFO, "%s: time:%.2f stamp:%.2f dts:%d m:%d (p:%d,c:%d) =%llu", __func__, (double)m_State.time, (double)m_State.timestamp, (int)DVD_TIME_TO_MSEC(m_State.dts + m_offset_pts), (int)DVD_TIME_TO_MSEC(m_av_clock.OMXMediaTime()), (int)m_playSpeed, (int)m_caching, llrint(m_State.time + DVD_TIME_TO_MSEC(offset)));} -+ //{CLog::Log(LOGINFO, "%s: time:%.2f stamp:%.2f dts:%d m:%d (p:%d,c:%d) =%llu", __func__, (double)m_State.time, (double)m_State.timestamp, (int)DVD_TIME_TO_MSEC(m_State.dts + m_offset_pts), (int)DVD_TIME_TO_MSEC(m_stamp), (int)m_playSpeed, (int)m_caching, llrint(m_State.time + DVD_TIME_TO_MSEC(offset)));} - return llrint(m_State.time + DVD_TIME_TO_MSEC(offset)); - } - -@@ -4300,7 +4307,7 @@ void COMXPlayer::UpdatePlayState(double timeout) - state.cache_bytes = 0; - - state.timestamp = m_clock.GetAbsoluteClock(); -- //{CLog::Log(LOGINFO, "%s: time:%.2f stamp:%.2f dts:%d m:%d (p:%d,c:%d) =%llu", __func__, (double)state.time, (double)state.timestamp, (int)DVD_TIME_TO_MSEC(state.dts + m_offset_pts), (int)DVD_TIME_TO_MSEC(m_av_clock.OMXMediaTime()), (int)m_playSpeed, (int)m_caching, llrint(state.time + DVD_TIME_TO_MSEC(offset)));} -+ //{CLog::Log(LOGINFO, "%s: time:%.2f stamp:%.2f dts:%d m:%d (p:%d,c:%d) =%llu", __func__, (double)state.time, (double)state.timestamp, (int)DVD_TIME_TO_MSEC(state.dts + m_offset_pts), (int)DVD_TIME_TO_MSEC(m_stamp), (int)m_playSpeed, (int)m_caching, llrint(state.time + DVD_TIME_TO_MSEC(offset)));} - - CSingleLock lock(m_StateSection); - m_StateInput = state; -diff --git a/xbmc/cores/omxplayer/OMXPlayer.h b/xbmc/cores/omxplayer/OMXPlayer.h -index 6f0c148..f0e5216 100644 ---- a/xbmc/cores/omxplayer/OMXPlayer.h -+++ b/xbmc/cores/omxplayer/OMXPlayer.h -@@ -378,6 +378,8 @@ class COMXPlayer : public IPlayer, public CThread, public IDVDPlayer - bool m_stepped; - int m_video_fifo; - int m_audio_fifo; -+ double m_last_check_time; // we periodically check for gpu underrun -+ double m_stamp; // last media stamp - - CDVDOverlayContainer m_overlayContainer; - --- -1.8.4 - diff --git a/packages/mediacenter/xbmc/patches/13.alpha-dcd897b/xbmc-990.28-PR3212.patch b/packages/mediacenter/xbmc/patches/13.alpha-dcd897b/xbmc-990.28-PR3212.patch deleted file mode 100644 index 2620df876d..0000000000 --- a/packages/mediacenter/xbmc/patches/13.alpha-dcd897b/xbmc-990.28-PR3212.patch +++ /dev/null @@ -1,256 +0,0 @@ -From 9d6e3524ec14401961f64376f01eaca596ae39da Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Wed, 28 Aug 2013 23:24:51 +0100 -Subject: [PATCH] [rbp/omxplayer] Avoid audio codec when in passthrough modes - -There is no need to open the ffmpeg audio codec when in passthrough mode. -Also there is no need to close/open the OMXAudio component when parameters (like number of channels) change in passthough. -This avoids an unpleasant stutter ---- - xbmc/cores/omxplayer/OMXPlayerAudio.cpp | 137 ++++++++++++-------------------- - xbmc/cores/omxplayer/OMXPlayerAudio.h | 1 - - 2 files changed, 53 insertions(+), 85 deletions(-) - -diff --git a/xbmc/cores/omxplayer/OMXPlayerAudio.cpp b/xbmc/cores/omxplayer/OMXPlayerAudio.cpp -index 4121300..ec60dce 100644 ---- a/xbmc/cores/omxplayer/OMXPlayerAudio.cpp -+++ b/xbmc/cores/omxplayer/OMXPlayerAudio.cpp -@@ -104,22 +104,11 @@ bool OMXPlayerAudio::OpenStream(CDVDStreamInfo &hints) - if(!m_DllBcmHost.Load()) - return false; - -- m_bad_state = false; -- -- COMXAudioCodecOMX *codec = new COMXAudioCodecOMX(); -- -- if(!codec || !codec->Open(hints)) -- { -- CLog::Log(LOGERROR, "Unsupported audio codec"); -- delete codec; codec = NULL; -- return false; -- } -- - if(m_messageQueue.IsInited()) -- m_messageQueue.Put(new COMXMsgAudioCodecChange(hints, codec), 0); -+ m_messageQueue.Put(new COMXMsgAudioCodecChange(hints, NULL), 0); - else - { -- OpenStream(hints, codec); -+ OpenStream(hints, NULL); - m_messageQueue.Init(); - CLog::Log(LOGNOTICE, "Creating audio thread"); - Create(); -@@ -128,30 +117,56 @@ bool OMXPlayerAudio::OpenStream(CDVDStreamInfo &hints) - return true; - } - --void OMXPlayerAudio::OpenStream(CDVDStreamInfo &hints, COMXAudioCodecOMX *codec) -+void OMXPlayerAudio::OpenStream(CDVDStreamInfo &hints, COMXAudioCodecOMX *dummy) - { -- SAFE_DELETE(m_pAudioCodec); -+ bool codec_change = false; -+ -+ m_bad_state = false; -+ m_use_passthrough = (CSettings::Get().GetInt("audiooutput.mode") == AUDIO_HDMI && -+ !CSettings::Get().GetBool("audiooutput.dualaudio")) ? true : false ; -+ m_use_hw_decode = g_advancedSettings.m_omxHWAudioDecode; -+ m_format.m_dataFormat = GetDataFormat(hints); -+ -+ if (m_hints.codec != hints.codec || m_hints.samplerate != hints.samplerate || !m_passthrough ) -+ codec_change = true; -+ -+ if (codec_change) -+ { -+ delete m_pAudioCodec; -+ m_pAudioCodec = NULL; -+ -+ m_format.m_sampleRate = 0; -+ m_format.m_channelLayout = 0; -+ m_speed = DVD_PLAYSPEED_NORMAL; -+ m_audioClock = DVD_NOPTS_VALUE; -+ m_hw_decode = false; -+ m_silence = false; -+ m_started = false; -+ m_flush = false; -+ m_nChannels = 0; -+ m_stalled = m_messageQueue.GetPacketCount(CDVDMsg::DEMUXER_PACKET) == 0; -+ } -+ -+ if (!m_passthrough && !m_pAudioCodec) -+ { -+ m_pAudioCodec = new COMXAudioCodecOMX(); -+ -+ if(!m_pAudioCodec || !m_pAudioCodec->Open(hints)) -+ { -+ CLog::Log(LOGERROR, "Unsupported audio codec"); -+ delete m_pAudioCodec; m_pAudioCodec = NULL; -+ m_bad_state = true; -+ return; -+ } -+ } - - m_hints = hints; -- m_pAudioCodec = codec; - - if(m_hints.bitspersample == 0) - m_hints.bitspersample = 16; - -- m_speed = DVD_PLAYSPEED_NORMAL; -- m_audioClock = DVD_NOPTS_VALUE; -- m_hw_decode = false; -- m_silence = false; -- m_started = false; -- m_flush = false; -- m_nChannels = 0; -- m_stalled = m_messageQueue.GetPacketCount(CDVDMsg::DEMUXER_PACKET) == 0; -- m_use_passthrough = (CSettings::Get().GetInt("audiooutput.mode") == AUDIO_HDMI && -- !CSettings::Get().GetBool("audiooutput.dualaudio")) ? true : false ; -- m_use_hw_decode = g_advancedSettings.m_omxHWAudioDecode; -- m_format.m_dataFormat = GetDataFormat(m_hints); -- m_format.m_sampleRate = 0; -- m_format.m_channelLayout = 0; -+ if (codec_change) -+ m_DecoderOpen = OpenDecoder(); - } - - bool OMXPlayerAudio::CloseStream(bool bWaitForBuffers) -@@ -190,38 +205,9 @@ void OMXPlayerAudio::OnExit() - CLog::Log(LOGNOTICE, "thread end: OMXPlayerAudio::OnExit()"); - } - --bool OMXPlayerAudio::CodecChange() --{ -- unsigned int old_bitrate = m_hints.bitrate; -- unsigned int new_bitrate = m_hints_current.bitrate; -- -- if(m_pAudioCodec) -- { -- m_hints.channels = m_pAudioCodec->GetChannels(); -- m_hints.samplerate = m_pAudioCodec->GetSampleRate(); -- } -- -- /* only check bitrate changes on AV_CODEC_ID_DTS, AV_CODEC_ID_AC3, AV_CODEC_ID_EAC3 */ -- if(m_hints.codec != AV_CODEC_ID_DTS && m_hints.codec != AV_CODEC_ID_AC3 && m_hints.codec != AV_CODEC_ID_EAC3) -- new_bitrate = old_bitrate = 0; -- -- if(m_hints_current.codec != m_hints.codec || -- m_hints_current.channels != m_hints.channels || -- m_hints_current.samplerate != m_hints.samplerate || -- m_hints_current.bitspersample != m_hints.bitspersample || -- old_bitrate != new_bitrate || -- !m_DecoderOpen) -- { -- m_hints_current = m_hints; -- return true; -- } -- -- return false; --} -- - bool OMXPlayerAudio::Decode(DemuxPacket *pkt, bool bDropPacket) - { -- if(!pkt || m_bad_state || !m_pAudioCodec) -+ if(!pkt || m_bad_state) - return false; - - if(pkt->dts != DVD_NOPTS_VALUE) -@@ -230,7 +216,7 @@ bool OMXPlayerAudio::Decode(DemuxPacket *pkt, bool bDropPacket) - const uint8_t *data_dec = pkt->pData; - int data_len = pkt->iSize; - -- if(!OMX_IS_RAW(m_format.m_dataFormat) && !bDropPacket) -+ if(m_pAudioCodec && !OMX_IS_RAW(m_format.m_dataFormat) && !bDropPacket) - { - while(!m_bStop && data_len > 0) - { -@@ -254,13 +240,6 @@ bool OMXPlayerAudio::Decode(DemuxPacket *pkt, bool bDropPacket) - - m_audioStats.AddSampleBytes(decoded_size); - -- if(CodecChange()) -- { -- m_DecoderOpen = OpenDecoder(); -- if(!m_DecoderOpen) -- return false; -- } -- - while(!m_bStop) - { - // discard if flushing as clocks may be stopped and we'll never submit it -@@ -292,15 +271,8 @@ bool OMXPlayerAudio::Decode(DemuxPacket *pkt, bool bDropPacket) - } - } - } -- else if(!bDropPacket) -+ else if(OMX_IS_RAW(m_format.m_dataFormat) && !bDropPacket) - { -- if(CodecChange()) -- { -- m_DecoderOpen = OpenDecoder(); -- if(!m_DecoderOpen) -- return false; -- } -- - while(!m_bStop) - { - if(m_flush) -@@ -473,6 +445,7 @@ void OMXPlayerAudio::Process() - else if (pMsg->IsType(CDVDMsg::GENERAL_STREAMCHANGE)) - { - COMXMsgAudioCodecChange* msg(static_cast(pMsg)); -+ CLog::Log(LOGDEBUG, "COMXPlayerAudio - CDVDMsg::GENERAL_STREAMCHANGE"); - OpenStream(msg->m_hints, msg->m_codec); - msg->m_codec = NULL; - } -@@ -520,7 +493,6 @@ AEDataFormat OMXPlayerAudio::GetDataFormat(CDVDStreamInfo hints) - m_hw_decode = false; - - /* check our audio capabilties */ -- - /* pathrought is overriding hw decode*/ - if(AUDIO_IS_BITSTREAM(CSettings::Get().GetInt("audiooutput.mode")) && m_use_passthrough) - { -@@ -565,10 +537,6 @@ AEDataFormat OMXPlayerAudio::GetDataFormat(CDVDStreamInfo hints) - - bool OMXPlayerAudio::OpenDecoder() - { -- m_nChannels = m_hints.channels; -- m_passthrough = false; -- m_hw_decode = false; -- - if(m_DecoderOpen) - { - WaitCompletion(); -@@ -576,13 +544,14 @@ bool OMXPlayerAudio::OpenDecoder() - m_DecoderOpen = false; - } - -+ m_nChannels = m_hints.channels; -+ m_format.m_dataFormat = GetDataFormat(m_hints); -+ - /* setup audi format for audio render */ - m_format.m_sampleRate = m_hints.samplerate; -- /* GetDataFormat is setting up evrything */ -- m_format.m_dataFormat = GetDataFormat(m_hints); - - m_format.m_channelLayout.Reset(); -- if (m_pAudioCodec && !m_passthrough) -+ if (m_pAudioCodec) - m_format.m_channelLayout = m_pAudioCodec->GetChannelMap(); - else if (m_passthrough) - { -diff --git a/xbmc/cores/omxplayer/OMXPlayerAudio.h b/xbmc/cores/omxplayer/OMXPlayerAudio.h -index 19f50f7..394f309 100644 ---- a/xbmc/cores/omxplayer/OMXPlayerAudio.h -+++ b/xbmc/cores/omxplayer/OMXPlayerAudio.h -@@ -55,7 +55,6 @@ class OMXPlayerAudio : public CThread - bool m_use_hw_decode; - bool m_hw_decode; - AEAudioFormat m_format; -- CAEChannelInfo m_channelLayout; - COMXAudioCodecOMX *m_pAudioCodec; - int m_speed; - bool m_silence; --- -1.8.4 - diff --git a/packages/multimedia/ffmpeg/meta b/packages/multimedia/ffmpeg/meta index 53985e81ce..b76243fd99 100644 --- a/packages/multimedia/ffmpeg/meta +++ b/packages/multimedia/ffmpeg/meta @@ -21,7 +21,7 @@ PKG_NAME="ffmpeg" PKG_VERSION="0.10.7" if [ "$XBMC" = "master" ]; then - PKG_VERSION="1.2.1" + PKG_VERSION="1.2.3" fi PKG_REV="1" PKG_ARCH="any" diff --git a/packages/multimedia/ffmpeg/patches/0.10.7/ffmpeg-0.10.6-913-h264-do_not_discard_NAL_SEI_when_skipping_frames.patch b/packages/multimedia/ffmpeg/patches/0.10.7/ffmpeg-0.10.6-913-h264-do_not_discard_NAL_SEI_when_skipping_frames.patch new file mode 100644 index 0000000000..db07070c34 --- /dev/null +++ b/packages/multimedia/ffmpeg/patches/0.10.7/ffmpeg-0.10.6-913-h264-do_not_discard_NAL_SEI_when_skipping_frames.patch @@ -0,0 +1,13 @@ +diff -Naur ffmpeg-0.10.7/libavcodec/h264.c ffmpeg-0.10.7.patch/libavcodec/h264.c +--- ffmpeg-0.10.7/libavcodec/h264.c 2013-04-10 03:52:33.000000000 +0200 ++++ ffmpeg-0.10.7.patch/libavcodec/h264.c 2013-09-09 17:25:55.377208927 +0200 +@@ -3962,8 +3962,7 @@ + continue; + } + +- //FIXME do not discard SEI id +- if(avctx->skip_frame >= AVDISCARD_NONREF && h->nal_ref_idc == 0) ++ if (avctx->skip_frame >= AVDISCARD_NONREF && h->nal_ref_idc == 0 && h->nal_unit_type != NAL_SEI) + continue; + + again: diff --git a/packages/multimedia/ffmpeg/patches/1.2.1/ffmpeg-0038-backport-vaapi-return-early-from-ff_vaapi_render_picture-without-picture.patch b/packages/multimedia/ffmpeg/patches/1.2.1/ffmpeg-0038-backport-vaapi-return-early-from-ff_vaapi_render_picture-without-picture.patch deleted file mode 100644 index f52c8313b4..0000000000 --- a/packages/multimedia/ffmpeg/patches/1.2.1/ffmpeg-0038-backport-vaapi-return-early-from-ff_vaapi_render_picture-without-picture.patch +++ /dev/null @@ -1,22 +0,0 @@ -Subject: [libav-devel] [PATCH 1/2] vaapi: return early from ff_vaapi_render_picture() without picture -From: Janne Grunau janne-libav at jannau.net - -Fixes an assertion when called on uninitialized frame. Spotted after -seeking in vlc. (backported from libav mailing list) - ---- - -diff --git a/libavcodec/vaapi.c b/libavcodec/vaapi.c -index a220a9d..94959bf 100644 ---- a/libavcodec/vaapi.c -+++ b/libavcodec/vaapi.c -@@ -46,6 +46,9 @@ int ff_vaapi_render_picture(struct vaapi_context *vactx, VASurfaceID surface) - VABufferID va_buffers[3]; - unsigned int n_va_buffers = 0; - -+ if (!vactx->pic_param_buf_id) -+ return 0; -+ - vaUnmapBuffer(vactx->display, vactx->pic_param_buf_id); - va_buffers[n_va_buffers++] = vactx->pic_param_buf_id; - diff --git a/packages/multimedia/ffmpeg/patches/1.2.1/ffmpeg-905.01-VFP_acceleration.patch b/packages/multimedia/ffmpeg/patches/1.2.1/ffmpeg-905.01-VFP_acceleration.patch deleted file mode 100644 index a756285072..0000000000 --- a/packages/multimedia/ffmpeg/patches/1.2.1/ffmpeg-905.01-VFP_acceleration.patch +++ /dev/null @@ -1,1560 +0,0 @@ -From f097ecc4f42e29c6e8013a622bb569702ffe4546 Mon Sep 17 00:00:00 2001 -From: Ben Avison -Date: Fri, 14 Jun 2013 16:07:53 +0100 -Subject: [PATCH 1/6] Add VFP-accelerated version of synth_filter_float(), used - by DTS Coherent Acoustics decoder - ---- - libavcodec/arm/Makefile | 3 +- - libavcodec/arm/fft_init_arm.c | 8 ++ - libavcodec/arm/synth_filter_vfp.S | 206 +++++++++++++++++++++++++++ - 3 files changed, 216 insertions(+), 1 deletion(-) - create mode 100644 libavcodec/arm/synth_filter_vfp.S - -diff --git a/libavcodec/arm/Makefile b/libavcodec/arm/Makefile -index 1c91d62..9079270 100644 ---- a/libavcodec/arm/Makefile -+++ b/libavcodec/arm/Makefile -@@ -58,7 +58,8 @@ ARMV6-OBJS += arm/dsputil_init_armv6.o \ - arm/dsputil_armv6.o \ - arm/simple_idct_armv6.o \ - --VFP-OBJS-$(HAVE_ARMV6) += arm/fmtconvert_vfp.o -+VFP-OBJS-$(HAVE_ARMV6) += arm/fmtconvert_vfp.o \ -+ arm/synth_filter_vfp.o - - NEON-OBJS-$(CONFIG_FFT) += arm/fft_neon.o \ - arm/fft_fixed_neon.o \ -diff --git a/libavcodec/arm/fft_init_arm.c b/libavcodec/arm/fft_init_arm.c -index 8c98abc..44c811d 100644 ---- a/libavcodec/arm/fft_init_arm.c -+++ b/libavcodec/arm/fft_init_arm.c -@@ -32,6 +32,12 @@ - - void ff_rdft_calc_neon(struct RDFTContext *s, FFTSample *z); - -+void ff_synth_filter_float_vfp(FFTContext *imdct, -+ float *synth_buf_ptr, int *synth_buf_offset, -+ float synth_buf2[32], const float window[512], -+ float out[32], const float in[32], -+ float scale); -+ - void ff_synth_filter_float_neon(FFTContext *imdct, - float *synth_buf_ptr, int *synth_buf_offset, - float synth_buf2[32], const float window[512], -@@ -71,6 +77,8 @@ av_cold void ff_synth_filter_init_arm(SynthFilterContext *s) - { - int cpu_flags = av_get_cpu_flags(); - -+ if (have_vfp(cpu_flags)) -+ s->synth_filter_float = ff_synth_filter_float_vfp; - if (have_neon(cpu_flags)) - s->synth_filter_float = ff_synth_filter_float_neon; - } -diff --git a/libavcodec/arm/synth_filter_vfp.S b/libavcodec/arm/synth_filter_vfp.S -new file mode 100644 -index 0000000..451fe5c ---- /dev/null -+++ b/libavcodec/arm/synth_filter_vfp.S -@@ -0,0 +1,206 @@ -+/* -+ * Copyright (c) 2013 RISC OS Open Ltd -+ * -+ * This file is part of FFmpeg. -+ * -+ * FFmpeg is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Lesser General Public -+ * License as published by the Free Software Foundation; either -+ * version 2.1 of the License, or (at your option) any later version. -+ * -+ * FFmpeg is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ * Lesser General Public License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General Public -+ * License along with FFmpeg; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -+ * -+ * Author: Ben Avison -+ */ -+ -+#include "libavutil/arm/asm.S" -+ -+IMDCT .req r0 -+ORIG_P_SB .req r1 -+P_SB_OFF .req r2 -+I .req r0 -+P_SB2_UP .req r1 -+OLDFPSCR .req r2 -+P_SB2_DN .req r3 -+P_WIN_DN .req r4 -+P_OUT_DN .req r5 -+P_SB .req r6 -+J_WRAP .req r7 -+P_WIN_UP .req r12 -+P_OUT_UP .req r14 -+ -+SCALE .req s0 -+SBUF_DAT_REV0 .req s4 -+SBUF_DAT_REV1 .req s5 -+SBUF_DAT_REV2 .req s6 -+SBUF_DAT_REV3 .req s7 -+VA0 .req s8 -+VA3 .req s11 -+VB0 .req s12 -+VB3 .req s15 -+VC0 .req s8 -+VC3 .req s11 -+VD0 .req s12 -+VD3 .req s15 -+SBUF_DAT0 .req s16 -+SBUF_DAT1 .req s17 -+SBUF_DAT2 .req s18 -+SBUF_DAT3 .req s19 -+SBUF_DAT_ALT0 .req s20 -+SBUF_DAT_ALT1 .req s21 -+SBUF_DAT_ALT2 .req s22 -+SBUF_DAT_ALT3 .req s23 -+WIN_DN_DAT0 .req s24 -+WIN_UP_DAT0 .req s28 -+ -+ -+.macro inner_loop half, tail, head -+ .if (OFFSET & (64*4)) == 0 @ even numbered call -+ SBUF_DAT_THIS0 .req SBUF_DAT0 -+ SBUF_DAT_THIS1 .req SBUF_DAT1 -+ SBUF_DAT_THIS2 .req SBUF_DAT2 -+ SBUF_DAT_THIS3 .req SBUF_DAT3 -+ .ifnc "\head","" -+ vldr d8, [P_SB, #OFFSET] @ d8 = SBUF_DAT -+ vldr d9, [P_SB, #OFFSET+8] -+ .endif -+ .else -+ SBUF_DAT_THIS0 .req SBUF_DAT_ALT0 -+ SBUF_DAT_THIS1 .req SBUF_DAT_ALT1 -+ SBUF_DAT_THIS2 .req SBUF_DAT_ALT2 -+ SBUF_DAT_THIS3 .req SBUF_DAT_ALT3 -+ .ifnc "\head","" -+ vldr d10, [P_SB, #OFFSET] @ d10 = SBUF_DAT_ALT -+ vldr d11, [P_SB, #OFFSET+8] -+ .endif -+ .endif -+ .ifnc "\tail","" -+ .ifc "\half","ab" -+ vmls.f VA0, SBUF_DAT_REV0, WIN_DN_DAT0 @ all operands treated as vectors -+ .else -+ vmla.f VD0, SBUF_DAT_REV0, WIN_DN_DAT0 @ all operands treated as vectors -+ .endif -+ .endif -+ .ifnc "\head","" -+ vldr d14, [P_WIN_UP, #OFFSET] @ d14 = WIN_UP_DAT -+ vldr d15, [P_WIN_UP, #OFFSET+8] -+ vldr d12, [P_WIN_DN, #OFFSET] @ d12 = WIN_DN_DAT -+ vldr d13, [P_WIN_DN, #OFFSET+8] -+ vmov SBUF_DAT_REV3, SBUF_DAT_THIS0 -+ vmov SBUF_DAT_REV2, SBUF_DAT_THIS1 -+ vmov SBUF_DAT_REV1, SBUF_DAT_THIS2 -+ vmov SBUF_DAT_REV0, SBUF_DAT_THIS3 -+ .ifc "\half","ab" -+ vmla.f VB0, SBUF_DAT_THIS0, WIN_UP_DAT0 -+ .else -+ vmla.f VC0, SBUF_DAT_THIS0, WIN_UP_DAT0 -+ .endif -+ teq J_WRAP, #J -+ bne 2f @ strongly predictable, so better than cond exec in this case -+ sub P_SB, P_SB, #512*4 -+2: -+ .set J, J - 64 -+ .set OFFSET, OFFSET + 64*4 -+ .endif -+ .unreq SBUF_DAT_THIS0 -+ .unreq SBUF_DAT_THIS1 -+ .unreq SBUF_DAT_THIS2 -+ .unreq SBUF_DAT_THIS3 -+.endm -+ -+ -+/* void ff_synth_filter_float_vfp(FFTContext *imdct, -+ * float *synth_buf_ptr, int *synth_buf_offset, -+ * float synth_buf2[32], const float window[512], -+ * float out[32], const float in[32], float scale) -+ */ -+function ff_synth_filter_float_vfp, export=1 -+ push {r3-r7,lr} -+ vpush {s16-s31} -+ ldr lr, [P_SB_OFF] -+ add a2, ORIG_P_SB, lr, LSL #2 @ calculate synth_buf to pass to imdct_half -+ mov P_SB, a2 @ and keep a copy for ourselves -+ bic J_WRAP, lr, #63 @ mangled to make testing for wrap easier in inner loop -+ sub lr, lr, #32 -+ and lr, lr, #512-32 -+ str lr, [P_SB_OFF] @ rotate offset, modulo buffer size, ready for next call -+ ldr a3, [sp, #(16+6+2)*4] @ fetch in from stack, to pass to imdct_half -+VFP vmov s16, SCALE @ imdct_half is free to corrupt s0, but it contains one of our arguments in hardfp case -+ bl ff_imdct_half_c -+VFP vmov SCALE, s16 -+ -+ vmrs OLDFPSCR, FPSCR -+ ldr lr, =0x03030000 @ RunFast mode, short vectors of length 4, stride 1 -+ vmsr FPSCR, lr -+ ldr P_SB2_DN, [sp, #16*4] -+ ldr P_WIN_DN, [sp, #(16+6+0)*4] -+ ldr P_OUT_DN, [sp, #(16+6+1)*4] -+NOVFP vldr SCALE, [sp, #(16+6+3)*4] -+ -+#define IMM_OFF_SKEW 956 /* also valid immediate constant when you add 16*4 */ -+ add P_SB, P_SB, #IMM_OFF_SKEW @ so we can use -ve offsets to use full immediate offset range -+ add P_SB2_UP, P_SB2_DN, #16*4 -+ add P_WIN_UP, P_WIN_DN, #16*4+IMM_OFF_SKEW -+ add P_OUT_UP, P_OUT_DN, #16*4 -+ add P_SB2_DN, P_SB2_DN, #16*4 -+ add P_WIN_DN, P_WIN_DN, #12*4+IMM_OFF_SKEW -+ add P_OUT_DN, P_OUT_DN, #16*4 -+ mov I, #4 -+1: -+ vldmia P_SB2_UP!, {VB0-VB3} -+ vldmdb P_SB2_DN!, {VA0-VA3} -+ .set J, 512 - 64 -+ .set OFFSET, -IMM_OFF_SKEW -+ inner_loop ab,, head -+ .rept 7 -+ inner_loop ab, tail, head -+ .endr -+ inner_loop ab, tail -+ add P_WIN_UP, P_WIN_UP, #4*4 -+ sub P_WIN_DN, P_WIN_DN, #4*4 -+ vmul.f VB0, VB0, SCALE @ SCALE treated as scalar -+ add P_SB, P_SB, #(512+4)*4 -+ subs I, I, #1 -+ vmul.f VA0, VA0, SCALE -+ vstmia P_OUT_UP!, {VB0-VB3} -+ vstmdb P_OUT_DN!, {VA0-VA3} -+ bne 1b -+ -+ add P_SB2_DN, P_SB2_DN, #(16+28-12)*4 -+ sub P_SB2_UP, P_SB2_UP, #(16+16)*4 -+ add P_WIN_DN, P_WIN_DN, #(32+16+28-12)*4 -+ mov I, #4 -+1: -+ vldr.d d4, zero @ d4 = VC0 -+ vldr.d d5, zero -+ vldr.d d6, zero @ d6 = VD0 -+ vldr.d d7, zero -+ .set J, 512 - 64 -+ .set OFFSET, -IMM_OFF_SKEW -+ inner_loop cd,, head -+ .rept 7 -+ inner_loop cd, tail, head -+ .endr -+ inner_loop cd, tail -+ add P_WIN_UP, P_WIN_UP, #4*4 -+ sub P_WIN_DN, P_WIN_DN, #4*4 -+ add P_SB, P_SB, #(512+4)*4 -+ subs I, I, #1 -+ vstmia P_SB2_UP!, {VC0-VC3} -+ vstmdb P_SB2_DN!, {VD0-VD3} -+ bne 1b -+ -+ vmsr FPSCR, OLDFPSCR -+ vpop {s16-s31} -+ pop {r3-r7,pc} -+endfunc -+ -+ .align 3 -+zero: .word 0, 0 --- -1.8.1.6 - - -From 36ddeb1bc2f84c42ea29333444efad04f82a0f92 Mon Sep 17 00:00:00 2001 -From: Ben Avison -Date: Tue, 25 Jun 2013 17:22:50 +0100 -Subject: [PATCH 2/6] 1st version of ff_int32_to_float_fmul_scalar_vfp - ---- - libavcodec/arm/fmtconvert_init_arm.c | 11 +++++-- - libavcodec/arm/fmtconvert_vfp.S | 38 +++++++++++++++++++++++++ - 2 files changed, 47 insertions(+), 2 deletions(-) - -diff --git a/libavcodec/arm/fmtconvert_init_arm.c b/libavcodec/arm/fmtconvert_init_arm.c -index 1d99c97..fc32bdd 100644 ---- a/libavcodec/arm/fmtconvert_init_arm.c -+++ b/libavcodec/arm/fmtconvert_init_arm.c -@@ -31,14 +31,21 @@ void ff_int32_to_float_fmul_scalar_neon(float *dst, const int *src, - void ff_float_to_int16_neon(int16_t *dst, const float *src, long len); - void ff_float_to_int16_interleave_neon(int16_t *, const float **, long, int); - -+void ff_int32_to_float_fmul_scalar_vfp(float *dst, const int *src, -+ float mul, int len); -+ - void ff_float_to_int16_vfp(int16_t *dst, const float *src, long len); - - av_cold void ff_fmt_convert_init_arm(FmtConvertContext *c, AVCodecContext *avctx) - { - int cpu_flags = av_get_cpu_flags(); - -- if (have_vfp(cpu_flags) && have_armv6(cpu_flags)) { -- c->float_to_int16 = ff_float_to_int16_vfp; -+ if (have_vfp(cpu_flags)) { -+ c->int32_to_float_fmul_scalar = ff_int32_to_float_fmul_scalar_vfp; -+ -+ if (have_armv6(cpu_flags)) { -+ c->float_to_int16 = ff_float_to_int16_vfp; -+ } - } - - if (have_neon(cpu_flags)) { -diff --git a/libavcodec/arm/fmtconvert_vfp.S b/libavcodec/arm/fmtconvert_vfp.S -index 7b012bc..817ce49 100644 ---- a/libavcodec/arm/fmtconvert_vfp.S -+++ b/libavcodec/arm/fmtconvert_vfp.S -@@ -1,5 +1,6 @@ - /* - * Copyright (c) 2008 Siarhei Siamashka -+ * Copyright (c) 2013 RISC OS Open Ltd - * - * This file is part of FFmpeg. - * -@@ -76,3 +77,40 @@ function ff_float_to_int16_vfp, export=1 - vpop {d8-d11} - pop {r4-r8,pc} - endfunc -+ -+/** -+ * ARM VFP optimised int32 to float conversion. -+ * Assume len is a multiple of 8, destination buffer is at least 4 bytes aligned -+ * (16 bytes alignment is best for BCM2835), little-endian. -+ */ -+@ void ff_int32_to_float_fmul_scalar_vfp(float *dst, const int *src, float mul, int len) -+function ff_int32_to_float_fmul_scalar_vfp, export=1 -+VFP tmp .req a4 -+VFP len .req a3 -+NOVFP tmp .req a3 -+NOVFP len .req a4 -+NOVFP vmov s0, a3 -+ ldr tmp, =0x03070000 @ RunFast mode, short vectors of length 8, stride 1 -+ vmrs ip, FPSCR -+ vmsr FPSCR, tmp -+1: -+ vldmia a2!, {s8-s15} -+ vcvt.f32.s32 s8, s8 -+ vcvt.f32.s32 s9, s9 -+ vcvt.f32.s32 s10, s10 -+ vcvt.f32.s32 s11, s11 -+ vcvt.f32.s32 s12, s12 -+ vcvt.f32.s32 s13, s13 -+ vcvt.f32.s32 s14, s14 -+ vcvt.f32.s32 s15, s15 -+ vmul.f32 s8, s8, s0 -+ subs len, len, #8 -+ vstmia a1!, {s8-s11} -+ vstmia a1!, {s12-s15} -+ bne 1b -+ -+ vmsr FPSCR, ip -+ bx lr -+endfunc -+ .unreq tmp -+ .unreq len --- -1.8.1.6 - - -From 1e6f32e2f6330bfbf8ae661069eb3ce1cb1b33d3 Mon Sep 17 00:00:00 2001 -From: Ben Avison -Date: Wed, 26 Jun 2013 00:49:15 +0100 -Subject: [PATCH 3/6] 2nd version of fmul_scalar - ---- - libavcodec/arm/fmtconvert_init_arm.c | 5 + - libavcodec/arm/fmtconvert_vfp.S | 162 ++++++++++++++++++++++++ - libavcodec/dcadec.c | 23 ++-- - libavcodec/fmtconvert.c | 7 + - libavcodec/fmtconvert.h | 14 ++ - 5 files changed, 203 insertions(+), 8 deletions(-) - -diff --git a/libavcodec/arm/fmtconvert_init_arm.c b/libavcodec/arm/fmtconvert_init_arm.c -index fc32bdd..0a71417 100644 ---- a/libavcodec/arm/fmtconvert_init_arm.c -+++ b/libavcodec/arm/fmtconvert_init_arm.c -@@ -33,6 +33,8 @@ void ff_int32_to_float_fmul_scalar_neon(float *dst, const int *src, - - void ff_int32_to_float_fmul_scalar_vfp(float *dst, const int *src, - float mul, int len); -+void ff_int32_to_float_fmul_scalar_array_vfp(FmtConvertContext *c, float *dst, const int *src, -+ float *mul, int len); - - void ff_float_to_int16_vfp(int16_t *dst, const float *src, long len); - -@@ -43,6 +45,9 @@ av_cold void ff_fmt_convert_init_arm(FmtConvertContext *c, AVCodecContext *avctx - if (have_vfp(cpu_flags)) { - c->int32_to_float_fmul_scalar = ff_int32_to_float_fmul_scalar_vfp; - -+ if (!have_neon(cpu_flags)) { -+ c->int32_to_float_fmul_scalar_array = ff_int32_to_float_fmul_scalar_array_vfp; -+ } - if (have_armv6(cpu_flags)) { - c->float_to_int16 = ff_float_to_int16_vfp; - } -diff --git a/libavcodec/arm/fmtconvert_vfp.S b/libavcodec/arm/fmtconvert_vfp.S -index 817ce49..ae7a43c 100644 ---- a/libavcodec/arm/fmtconvert_vfp.S -+++ b/libavcodec/arm/fmtconvert_vfp.S -@@ -83,6 +83,168 @@ endfunc - * Assume len is a multiple of 8, destination buffer is at least 4 bytes aligned - * (16 bytes alignment is best for BCM2835), little-endian. - */ -+@ void ff_int32_to_float_fmul_scalar_array_vfp(if (FmtConvertContext *c, float *dst, const int *src, float *mul, int len) -+function ff_int32_to_float_fmul_scalar_array_vfp, export=1 -+ push {lr} -+ ldr a1, [sp, #4] -+ subs lr, a1, #3*8 -+ bcc 50f @ too short to pipeline -+ @ Now need to find (len / 8) % 3. The approximation -+ @ x / 24 = (x * 0xAB) >> 12 -+ @ is good for x < 4096, which is true for both AC3 and DCA. -+ mov a1, #0xAB -+ ldr ip, =0x03070000 @ RunFast mode, short vectors of length 8, stride 1 -+ mul a1, lr, a1 -+ vpush {s16-s31} -+ mov a1, a1, lsr #12 -+ add a1, a1, a1, lsl #1 -+ rsb a1, a1, lr, lsr #3 -+ cmp a1, #1 -+ vmrs a1, FPSCR -+ vmsr FPSCR, ip -+ beq 11f -+ blo 10f -+ @ Array is (2 + multiple of 3) x 8 floats long -+ @ drop through... -+ vldmia a3!, {s16-s23} -+ vldmia a4!, {s2,s3} -+ vldmia a3!, {s24-s31} -+ vcvt.f32.s32 s16, s16 -+ vcvt.f32.s32 s17, s17 -+ vcvt.f32.s32 s18, s18 -+ vcvt.f32.s32 s19, s19 -+ vcvt.f32.s32 s20, s20 -+ vcvt.f32.s32 s21, s21 -+ vcvt.f32.s32 s22, s22 -+ vcvt.f32.s32 s23, s23 -+ vmul.f32 s16, s16, s2 -+ @ drop through... -+3: -+ vldmia a3!, {s8-s15} -+ vldmia a4!, {s1} -+ vcvt.f32.s32 s24, s24 -+ vcvt.f32.s32 s25, s25 -+ vcvt.f32.s32 s26, s26 -+ vcvt.f32.s32 s27, s27 -+ vcvt.f32.s32 s28, s28 -+ vcvt.f32.s32 s29, s29 -+ vcvt.f32.s32 s30, s30 -+ vcvt.f32.s32 s31, s31 -+ vmul.f32 s24, s24, s3 -+ vstmia a2!, {s16-s19} -+ vstmia a2!, {s20-s23} -+2: -+ vldmia a3!, {s16-s23} -+ vldmia a4!, {s2} -+ vcvt.f32.s32 s8, s8 -+ vcvt.f32.s32 s9, s9 -+ vcvt.f32.s32 s10, s10 -+ vcvt.f32.s32 s11, s11 -+ vcvt.f32.s32 s12, s12 -+ vcvt.f32.s32 s13, s13 -+ vcvt.f32.s32 s14, s14 -+ vcvt.f32.s32 s15, s15 -+ vmul.f32 s8, s8, s1 -+ vstmia a2!, {s24-s27} -+ vstmia a2!, {s28-s31} -+1: -+ vldmia a3!, {s24-s31} -+ vldmia a4!, {s3} -+ vcvt.f32.s32 s16, s16 -+ vcvt.f32.s32 s17, s17 -+ vcvt.f32.s32 s18, s18 -+ vcvt.f32.s32 s19, s19 -+ vcvt.f32.s32 s20, s20 -+ vcvt.f32.s32 s21, s21 -+ vcvt.f32.s32 s22, s22 -+ vcvt.f32.s32 s23, s23 -+ vmul.f32 s16, s16, s2 -+ vstmia a2!, {s8-s11} -+ vstmia a2!, {s12-s15} -+ -+ subs lr, lr, #8*3 -+ bpl 3b -+ -+ vcvt.f32.s32 s24, s24 -+ vcvt.f32.s32 s25, s25 -+ vcvt.f32.s32 s26, s26 -+ vcvt.f32.s32 s27, s27 -+ vcvt.f32.s32 s28, s28 -+ vcvt.f32.s32 s29, s29 -+ vcvt.f32.s32 s30, s30 -+ vcvt.f32.s32 s31, s31 -+ vmul.f32 s24, s24, s3 -+ vstmia a2!, {s16-s19} -+ vstmia a2!, {s20-s23} -+ vstmia a2!, {s24-s27} -+ vstmia a2!, {s28-s31} -+ -+ vmsr FPSCR, a1 -+ vpop {s16-s31} -+ pop {pc} -+ -+10: @ Array is (multiple of 3) x 8 floats long -+ vldmia a3!, {s8-s15} -+ vldmia a4!, {s1,s2} -+ vldmia a3!, {s16-s23} -+ vcvt.f32.s32 s8, s8 -+ vcvt.f32.s32 s9, s9 -+ vcvt.f32.s32 s10, s10 -+ vcvt.f32.s32 s11, s11 -+ vcvt.f32.s32 s12, s12 -+ vcvt.f32.s32 s13, s13 -+ vcvt.f32.s32 s14, s14 -+ vcvt.f32.s32 s15, s15 -+ vmul.f32 s8, s8, s1 -+ b 1b -+ -+11: @ Array is (1 + multiple of 3) x 8 floats long -+ vldmia a3!, {s24-s31} -+ vldmia a4!, {s3} -+ vldmia a3!, {s8-s15} -+ vldmia a4!, {s1} -+ vcvt.f32.s32 s24, s24 -+ vcvt.f32.s32 s25, s25 -+ vcvt.f32.s32 s26, s26 -+ vcvt.f32.s32 s27, s27 -+ vcvt.f32.s32 s28, s28 -+ vcvt.f32.s32 s29, s29 -+ vcvt.f32.s32 s30, s30 -+ vcvt.f32.s32 s31, s31 -+ vmul.f32 s24, s24, s3 -+ b 2b -+ -+50: -+ ldr lr, =0x03070000 @ RunFast mode, short vectors of length 8, stride 1 -+ vmrs ip, FPSCR -+ vmsr FPSCR, lr -+51: -+ vldmia a3!, {s8-s15} -+ vldmia a4!, {s0} -+ vcvt.f32.s32 s8, s8 -+ vcvt.f32.s32 s9, s9 -+ vcvt.f32.s32 s10, s10 -+ vcvt.f32.s32 s11, s11 -+ vcvt.f32.s32 s12, s12 -+ vcvt.f32.s32 s13, s13 -+ vcvt.f32.s32 s14, s14 -+ vcvt.f32.s32 s15, s15 -+ vmul.f32 s8, s8, s0 -+ subs a1, a1, #8 -+ vstmia a2!, {s8-s11} -+ vstmia a2!, {s12-s15} -+ bne 51b -+ -+ vmsr FPSCR, ip -+ pop {pc} -+endfunc -+ -+/** -+ * ARM VFP optimised int32 to float conversion. -+ * Assume len is a multiple of 8, destination buffer is at least 4 bytes aligned -+ * (16 bytes alignment is best for BCM2835), little-endian. -+ * TODO: could be further optimised by unrolling and interleaving, as above -+ */ - @ void ff_int32_to_float_fmul_scalar_vfp(float *dst, const int *src, float mul, int len) - function ff_int32_to_float_fmul_scalar_vfp, export=1 - VFP tmp .req a4 -diff --git a/libavcodec/dcadec.c b/libavcodec/dcadec.c -index 1b955e4..fe568ee 100644 ---- a/libavcodec/dcadec.c -+++ b/libavcodec/dcadec.c -@@ -1302,7 +1302,7 @@ static int dca_subsubframe(DCAContext *s, int base_channel, int block_index) - - /* FIXME */ - float (*subband_samples)[DCA_SUBBANDS][8] = s->subband_samples[block_index]; -- LOCAL_ALIGNED_16(int, block, [8]); -+ LOCAL_ALIGNED_16(int, block, [8 * DCA_SUBBANDS]); - - /* - * Audio data -@@ -1315,6 +1315,8 @@ static int dca_subsubframe(DCAContext *s, int base_channel, int block_index) - quant_step_table = lossy_quant_d; - - for (k = base_channel; k < s->prim_channels; k++) { -+ float rscale[DCA_SUBBANDS]; -+ - if (get_bits_left(&s->gb) < 0) - return AVERROR_INVALIDDATA; - -@@ -1337,11 +1339,12 @@ static int dca_subsubframe(DCAContext *s, int base_channel, int block_index) - * Extract bits from the bit stream - */ - if (!abits) { -- memset(subband_samples[k][l], 0, 8 * sizeof(subband_samples[0][0][0])); -+ rscale[l] = 0; -+ memset(block + 8 * l, 0, 8 * sizeof(block[0])); - } else { - /* Deal with transients */ - int sfi = s->transition_mode[k][l] && subsubframe >= s->transition_mode[k][l]; -- float rscale = quant_step_size * s->scale_factor[k][l][sfi] * -+ rscale[l] = quant_step_size * s->scale_factor[k][l][sfi] * - s->scalefactor_adj[k][sel]; - - if (abits >= 11 || !dca_smpl_bitalloc[abits].vlc[sel].table) { -@@ -1355,7 +1358,7 @@ static int dca_subsubframe(DCAContext *s, int base_channel, int block_index) - block_code1 = get_bits(&s->gb, size); - block_code2 = get_bits(&s->gb, size); - err = decode_blockcodes(block_code1, block_code2, -- levels, block); -+ levels, block + 8 * l); - if (err) { - av_log(s->avctx, AV_LOG_ERROR, - "ERROR: block code look-up failed\n"); -@@ -1364,19 +1367,23 @@ static int dca_subsubframe(DCAContext *s, int base_channel, int block_index) - } else { - /* no coding */ - for (m = 0; m < 8; m++) -- block[m] = get_sbits(&s->gb, abits - 3); -+ block[8 * l + m] = get_sbits(&s->gb, abits - 3); - } - } else { - /* Huffman coded */ - for (m = 0; m < 8; m++) -- block[m] = get_bitalloc(&s->gb, -+ block[8 * l + m] = get_bitalloc(&s->gb, - &dca_smpl_bitalloc[abits], sel); - } - -- s->fmt_conv.int32_to_float_fmul_scalar(subband_samples[k][l], -- block, rscale, 8); - } -+ } - -+ s->fmt_conv.int32_to_float_fmul_scalar_array(&s->fmt_conv, subband_samples[k][0], -+ block, rscale, 8 * s->vq_start_subband[k]); -+ -+ for (l = 0; l < s->vq_start_subband[k]; l++) { -+ int m; - /* - * Inverse ADPCM if in prediction mode - */ -diff --git a/libavcodec/fmtconvert.c b/libavcodec/fmtconvert.c -index 79e9645..0fb2436 100644 ---- a/libavcodec/fmtconvert.c -+++ b/libavcodec/fmtconvert.c -@@ -30,6 +30,12 @@ static void int32_to_float_fmul_scalar_c(float *dst, const int *src, float mul, - dst[i] = src[i] * mul; - } - -+static void int32_to_float_fmul_scalar_array_c(FmtConvertContext *c, float *dst, const int *src, float *mul, int len){ -+ int i; -+ for(i=0; iint32_to_float_fmul_scalar(dst, src, *mul++, 8); -+} -+ - static av_always_inline int float_to_int16_one(const float *src){ - return av_clip_int16(lrintf(*src)); - } -@@ -79,6 +85,7 @@ void ff_float_interleave_c(float *dst, const float **src, unsigned int len, - av_cold void ff_fmt_convert_init(FmtConvertContext *c, AVCodecContext *avctx) - { - c->int32_to_float_fmul_scalar = int32_to_float_fmul_scalar_c; -+ c->int32_to_float_fmul_scalar_array = int32_to_float_fmul_scalar_array_c; - c->float_to_int16 = float_to_int16_c; - c->float_to_int16_interleave = float_to_int16_interleave_c; - c->float_interleave = ff_float_interleave_c; -diff --git a/libavcodec/fmtconvert.h b/libavcodec/fmtconvert.h -index 3fb9f4e..f5768c2 100644 ---- a/libavcodec/fmtconvert.h -+++ b/libavcodec/fmtconvert.h -@@ -38,6 +38,20 @@ - void (*int32_to_float_fmul_scalar)(float *dst, const int *src, float mul, int len); - - /** -+ * Convert an array of int32_t to float and multiply by a float value from another array, -+ * stepping along the float array once for each 8 integers. -+ * @param c pointer to FmtConvertContext. -+ * @param dst destination array of float. -+ * constraints: 16-byte aligned -+ * @param src source array of int32_t. -+ * constraints: 16-byte aligned -+ * @param mul source array of float multipliers. -+ * @param len number of elements to convert. -+ * constraints: multiple of 8 -+ */ -+ void (*int32_to_float_fmul_scalar_array)(struct FmtConvertContext *c, float *dst, const int *src, float *mul, int len); -+ -+ /** - * Convert an array of float to an array of int16_t. - * - * Convert floats from in the range [-32768.0,32767.0] to ints --- -1.8.1.6 - - -From e8d7a9e5e58b9dd5b57713c0ce860b51e19b62a0 Mon Sep 17 00:00:00 2001 -From: Ben Avison -Date: Thu, 27 Jun 2013 23:11:44 +0100 -Subject: [PATCH 4/6] Add VFP-accelerated version of imdct_half - ---- - libavcodec/arm/Makefile | 1 + - libavcodec/arm/fft_init_arm.c | 6 + - libavcodec/arm/mdct_vfp.S | 193 +++++++++++++++++++++++++++ - libavcodec/arm/synth_filter_vfp.S | 2 +- - 4 files changed, 201 insertions(+), 1 deletion(-) - create mode 100644 libavcodec/arm/mdct_vfp.S - -diff --git a/libavcodec/arm/Makefile b/libavcodec/arm/Makefile -index 9079270..457e9a8 100644 ---- a/libavcodec/arm/Makefile -+++ b/libavcodec/arm/Makefile -@@ -59,6 +59,7 @@ ARMV6-OBJS += arm/dsputil_init_armv6.o \ - arm/simple_idct_armv6.o \ - - VFP-OBJS-$(HAVE_ARMV6) += arm/fmtconvert_vfp.o \ -+ arm/mdct_vfp.o \ - arm/synth_filter_vfp.o - - NEON-OBJS-$(CONFIG_FFT) += arm/fft_neon.o \ -diff --git a/libavcodec/arm/fft_init_arm.c b/libavcodec/arm/fft_init_arm.c -index 44c811d..131c6c4 100644 ---- a/libavcodec/arm/fft_init_arm.c -+++ b/libavcodec/arm/fft_init_arm.c -@@ -26,6 +26,8 @@ - void ff_fft_permute_neon(FFTContext *s, FFTComplex *z); - void ff_fft_calc_neon(FFTContext *s, FFTComplex *z); - -+void ff_imdct_half_vfp(FFTContext *s, FFTSample *output, const FFTSample *input); -+ - void ff_imdct_calc_neon(FFTContext *s, FFTSample *output, const FFTSample *input); - void ff_imdct_half_neon(FFTContext *s, FFTSample *output, const FFTSample *input); - void ff_mdct_calc_neon(FFTContext *s, FFTSample *output, const FFTSample *input); -@@ -48,6 +50,10 @@ av_cold void ff_fft_init_arm(FFTContext *s) - { - int cpu_flags = av_get_cpu_flags(); - -+ if (have_vfp(cpu_flags)) { -+ s->imdct_half = ff_imdct_half_vfp; -+ } -+ - if (have_neon(cpu_flags)) { - #if CONFIG_FFT - s->fft_permute = ff_fft_permute_neon; -diff --git a/libavcodec/arm/mdct_vfp.S b/libavcodec/arm/mdct_vfp.S -new file mode 100644 -index 0000000..7d55e7d ---- /dev/null -+++ b/libavcodec/arm/mdct_vfp.S -@@ -0,0 +1,193 @@ -+/* -+ * Copyright (c) 2013 RISC OS Open Ltd -+ * -+ * This file is part of FFmpeg. -+ * -+ * FFmpeg is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Lesser General Public -+ * License as published by the Free Software Foundation; either -+ * version 2.1 of the License, or (at your option) any later version. -+ * -+ * FFmpeg is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ * Lesser General Public License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General Public -+ * License along with FFmpeg; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -+ * -+ * Author: Ben Avison -+ */ -+ -+#include "libavutil/arm/asm.S" -+ -+CONTEXT .req a1 -+ORIGOUT .req a2 -+IN .req a3 -+OUT .req v1 -+REVTAB .req v2 -+TCOS .req v3 -+TSIN .req v4 -+OLDFPSCR .req v5 -+J0 .req a2 -+J1 .req a4 -+J2 .req ip -+J3 .req lr -+ -+.macro prerotation_innerloop -+ .set trig_lo, k -+ .set trig_hi, n4 - k - 2 -+ .set in_lo, trig_lo * 2 -+ .set in_hi, trig_hi * 2 -+ vldr d8, [TCOS, #trig_lo*4] @ s16,s17 -+ vldr d9, [TCOS, #trig_hi*4] @ s18,s19 -+ vldr s0, [IN, #in_hi*4 + 12] -+ vldr s1, [IN, #in_hi*4 + 4] -+ vldr s2, [IN, #in_lo*4 + 12] -+ vldr s3, [IN, #in_lo*4 + 4] -+ vmul.f s8, s0, s16 @ vector operation -+ vldr d10, [TSIN, #trig_lo*4] @ s20,s21 -+ vldr d11, [TSIN, #trig_hi*4] @ s22,s23 -+ vldr s4, [IN, #in_lo*4] -+ vldr s5, [IN, #in_lo*4 + 8] -+ vldr s6, [IN, #in_hi*4] -+ vldr s7, [IN, #in_hi*4 + 8] -+ ldr J0, [REVTAB, #trig_lo*2] -+ vmul.f s12, s0, s20 @ vector operation -+ ldr J2, [REVTAB, #trig_hi*2] -+ mov J1, J0, lsr #16 -+ and J0, J0, #255 @ halfword value will be < n4 -+ vmls.f s8, s4, s20 @ vector operation -+ mov J3, J2, lsr #16 -+ and J2, J2, #255 @ halfword value will be < n4 -+ add J0, OUT, J0, lsl #3 -+ vmla.f s12, s4, s16 @ vector operation -+ add J1, OUT, J1, lsl #3 -+ add J2, OUT, J2, lsl #3 -+ add J3, OUT, J3, lsl #3 -+ vstr s8, [J0] -+ vstr s9, [J1] -+ vstr s10, [J2] -+ vstr s11, [J3] -+ vstr s12, [J0, #4] -+ vstr s13, [J1, #4] -+ vstr s14, [J2, #4] -+ vstr s15, [J3, #4] -+ .set k, k + 2 -+.endm -+ -+.macro postrotation_innerloop tail, head -+ .set trig_lo_head, n8 - k - 2 -+ .set trig_hi_head, n8 + k -+ .set out_lo_head, trig_lo_head * 2 -+ .set out_hi_head, trig_hi_head * 2 -+ .set trig_lo_tail, n8 - (k - 2) - 2 -+ .set trig_hi_tail, n8 + (k - 2) -+ .set out_lo_tail, trig_lo_tail * 2 -+ .set out_hi_tail, trig_hi_tail * 2 -+ .if (k & 2) == 0 -+ TCOS_D0_HEAD .req d10 @ s20,s21 -+ TCOS_D1_HEAD .req d11 @ s22,s23 -+ TCOS_S0_TAIL .req s24 -+ .else -+ TCOS_D0_HEAD .req d12 @ s24,s25 -+ TCOS_D1_HEAD .req d13 @ s26,s27 -+ TCOS_S0_TAIL .req s20 -+ .endif -+ .ifnc "\tail","" -+ vmls.f s8, s0, TCOS_S0_TAIL @ vector operation -+ .endif -+ .ifnc "\head","" -+ vldr d8, [TSIN, #trig_lo_head*4] @ s16,s17 -+ vldr d9, [TSIN, #trig_hi_head*4] @ s18,s19 -+ vldr TCOS_D0_HEAD, [TCOS, #trig_lo_head*4] -+ .endif -+ .ifnc "\tail","" -+ vmla.f s12, s4, TCOS_S0_TAIL @ vector operation -+ .endif -+ .ifnc "\head","" -+ vldr s0, [OUT, #out_lo_head*4] -+ vldr s1, [OUT, #out_lo_head*4 + 8] -+ vldr s2, [OUT, #out_hi_head*4] -+ vldr s3, [OUT, #out_hi_head*4 + 8] -+ vldr s4, [OUT, #out_lo_head*4 + 4] -+ vldr s5, [OUT, #out_lo_head*4 + 12] -+ vldr s6, [OUT, #out_hi_head*4 + 4] -+ vldr s7, [OUT, #out_hi_head*4 + 12] -+ .endif -+ .ifnc "\tail","" -+ vstr s8, [OUT, #out_lo_tail*4] -+ vstr s9, [OUT, #out_lo_tail*4 + 8] -+ vstr s10, [OUT, #out_hi_tail*4] -+ vstr s11, [OUT, #out_hi_tail*4 + 8] -+ .endif -+ .ifnc "\head","" -+ vmul.f s8, s4, s16 @ vector operation -+ .endif -+ .ifnc "\tail","" -+ vstr s12, [OUT, #out_hi_tail*4 + 12] -+ vstr s13, [OUT, #out_hi_tail*4 + 4] -+ vstr s14, [OUT, #out_lo_tail*4 + 12] -+ vstr s15, [OUT, #out_lo_tail*4 + 4] -+ .endif -+ .ifnc "\head","" -+ vmul.f s12, s0, s16 @ vector operation -+ vldr TCOS_D1_HEAD, [TCOS, #trig_hi_head*4] -+ .endif -+ .unreq TCOS_D0_HEAD -+ .unreq TCOS_D1_HEAD -+ .unreq TCOS_S0_TAIL -+ .ifnc "\head","" -+ .set k, k + 2 -+ .endif -+.endm -+ -+ -+/* void ff_imdct_half_vfp(FFTContext *s, -+ * FFTSample *output, -+ * const FFTSample *input) -+ */ -+function ff_imdct_half_vfp, export=1 -+ ldr ip, [CONTEXT, #5*4] @ mdct_bits -+ teq ip, #6 -+ bne ff_imdct_half_c @ only case currently accelerated is the one used by DCA -+ -+ .set n, 1<<6 -+ .set n2, n/2 -+ .set n4, n/4 -+ .set n8, n/8 -+ -+ push {v1-v5,lr} -+ vpush {s16-s27} -+ vmrs OLDFPSCR, FPSCR -+ ldr lr, =0x03030000 @ RunFast mode, short vectors of length 4, stride 1 -+ vmsr FPSCR, lr -+ mov OUT, ORIGOUT -+ ldr REVTAB, [CONTEXT, #2*4] -+ ldr TCOS, [CONTEXT, #6*4] -+ ldr TSIN, [CONTEXT, #7*4] -+ -+ .set k, 0 -+ .rept n8/2 -+ prerotation_innerloop -+ .endr -+ -+ vmsr FPSCR, OLDFPSCR -+ mov ORIGOUT, OUT -+ ldr ip, [CONTEXT, #9*4] -+ blx ip @ s->fft_calc(s, output) -+ ldr lr, =0x03030000 @ RunFast mode, short vectors of length 4, stride 1 -+ vmsr FPSCR, lr -+ -+ .set k, 0 -+ postrotation_innerloop , head -+ .rept n8/2 - 1 -+ postrotation_innerloop tail, head -+ .endr -+ postrotation_innerloop tail -+ -+ vmsr FPSCR, OLDFPSCR -+ vpop {s16-s27} -+ pop {v1-v5,pc} -+endfunc -diff --git a/libavcodec/arm/synth_filter_vfp.S b/libavcodec/arm/synth_filter_vfp.S -index 451fe5c..f5845fb 100644 ---- a/libavcodec/arm/synth_filter_vfp.S -+++ b/libavcodec/arm/synth_filter_vfp.S -@@ -133,7 +133,7 @@ function ff_synth_filter_float_vfp, export=1 - str lr, [P_SB_OFF] @ rotate offset, modulo buffer size, ready for next call - ldr a3, [sp, #(16+6+2)*4] @ fetch in from stack, to pass to imdct_half - VFP vmov s16, SCALE @ imdct_half is free to corrupt s0, but it contains one of our arguments in hardfp case -- bl ff_imdct_half_c -+ bl ff_imdct_half_vfp - VFP vmov SCALE, s16 - - vmrs OLDFPSCR, FPSCR --- -1.8.1.6 - - -From b11427a8aa2ea581a8a8a28bf8e5847e42451f26 Mon Sep 17 00:00:00 2001 -From: Ben Avison -Date: Fri, 28 Jun 2013 21:21:06 +0100 -Subject: [PATCH 5/6] Add VFP_accelerated version of dca_lfe_fir - ---- - libavcodec/arm/Makefile | 3 +- - libavcodec/arm/dcadsp_init_arm.c | 4 + - libavcodec/arm/dcadsp_vfp.S | 189 ++++++++++++++++++++++++++++ - 3 files changed, 195 insertions(+), 1 deletion(-) - create mode 100644 libavcodec/arm/dcadsp_vfp.S - -diff --git a/libavcodec/arm/Makefile b/libavcodec/arm/Makefile -index 457e9a8..8538276 100644 ---- a/libavcodec/arm/Makefile -+++ b/libavcodec/arm/Makefile -@@ -58,7 +58,8 @@ ARMV6-OBJS += arm/dsputil_init_armv6.o \ - arm/dsputil_armv6.o \ - arm/simple_idct_armv6.o \ - --VFP-OBJS-$(HAVE_ARMV6) += arm/fmtconvert_vfp.o \ -+VFP-OBJS-$(HAVE_ARMV6) += arm/dcadsp_vfp.o \ -+ arm/fmtconvert_vfp.o \ - arm/mdct_vfp.o \ - arm/synth_filter_vfp.o - -diff --git a/libavcodec/arm/dcadsp_init_arm.c b/libavcodec/arm/dcadsp_init_arm.c -index 56568e0..9406b86 100644 ---- a/libavcodec/arm/dcadsp_init_arm.c -+++ b/libavcodec/arm/dcadsp_init_arm.c -@@ -24,6 +24,8 @@ - #include "libavutil/attributes.h" - #include "libavcodec/dcadsp.h" - -+void ff_dca_lfe_fir_vfp(float *out, const float *in, const float *coefs, -+ int decifactor, float scale); - void ff_dca_lfe_fir_neon(float *out, const float *in, const float *coefs, - int decifactor, float scale); - -@@ -31,6 +33,8 @@ av_cold void ff_dcadsp_init_arm(DCADSPContext *s) - { - int cpu_flags = av_get_cpu_flags(); - -+ if (have_vfp(cpu_flags)) -+ s->lfe_fir = ff_dca_lfe_fir_vfp; - if (have_neon(cpu_flags)) - s->lfe_fir = ff_dca_lfe_fir_neon; - } -diff --git a/libavcodec/arm/dcadsp_vfp.S b/libavcodec/arm/dcadsp_vfp.S -new file mode 100644 -index 0000000..a479831 ---- /dev/null -+++ b/libavcodec/arm/dcadsp_vfp.S -@@ -0,0 +1,189 @@ -+/* -+ * Copyright (c) 2013 RISC OS Open Ltd -+ * -+ * This file is part of FFmpeg. -+ * -+ * FFmpeg is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Lesser General Public -+ * License as published by the Free Software Foundation; either -+ * version 2.1 of the License, or (at your option) any later version. -+ * -+ * FFmpeg is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ * Lesser General Public License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General Public -+ * License along with FFmpeg; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -+ * -+ * Author: Ben Avison -+ */ -+ -+#include "libavutil/arm/asm.S" -+ -+POUT .req a1 -+PIN .req a2 -+PCOEF .req a3 -+DECIFACTOR .req a4 -+OLDFPSCR .req a4 -+COUNTER .req ip -+ -+SCALE32 .req s28 @ use vector of 4 in place of 9th scalar when decifactor=32 / JMAX=8 -+SCALE64 .req s0 @ spare register in scalar bank when decifactor=64 / JMAX=4 -+IN0 .req s4 -+IN1 .req s5 -+IN2 .req s6 -+IN3 .req s7 -+IN4 .req s0 -+IN5 .req s1 -+IN6 .req s2 -+IN7 .req s3 -+COEF0 .req s8 @ coefficient elements -+COEF1 .req s9 -+COEF2 .req s10 -+COEF3 .req s11 -+COEF4 .req s12 -+COEF5 .req s13 -+COEF6 .req s14 -+COEF7 .req s15 -+ACCUM0 .req s16 @ double-buffered multiply-accumulate results -+ACCUM4 .req s20 -+POST0 .req s24 @ do long-latency post-multiply in this vector in parallel -+POST1 .req s25 -+POST2 .req s26 -+POST3 .req s27 -+ -+ -+.macro inner_loop decifactor, dir, tail, head -+ .ifc "\dir","up" -+ .set X, 0 -+ .set Y, 4 -+ .else -+ .set X, 4*JMAX*4 - 4 -+ .set Y, -4 -+ .endif -+ .ifnc "\head","" -+ vldr COEF0, [PCOEF, #X + (0*JMAX + 0) * Y] -+ vldr COEF1, [PCOEF, #X + (1*JMAX + 0) * Y] -+ vldr COEF2, [PCOEF, #X + (2*JMAX + 0) * Y] -+ vldr COEF3, [PCOEF, #X + (3*JMAX + 0) * Y] -+ .endif -+ .ifnc "\tail","" -+ vadd.f POST0, ACCUM0, ACCUM4 @ vector operation -+ .endif -+ .ifnc "\head","" -+ vmul.f ACCUM0, COEF0, IN0 @ vector = vector * scalar -+ vldr COEF4, [PCOEF, #X + (0*JMAX + 1) * Y] -+ vldr COEF5, [PCOEF, #X + (1*JMAX + 1) * Y] -+ vldr COEF6, [PCOEF, #X + (2*JMAX + 1) * Y] -+ .endif -+ .ifnc "\tail","" -+ vmul.f POST0, POST0, SCALE\decifactor @ vector operation (SCALE may be scalar) -+ .endif -+ .ifnc "\head","" -+ vldr COEF7, [PCOEF, #X + (3*JMAX + 1) * Y] -+ .ifc "\tail","" -+ vmul.f ACCUM4, COEF4, IN1 @ vector operation -+ .endif -+ vldr COEF0, [PCOEF, #X + (0*JMAX + 2) * Y] -+ vldr COEF1, [PCOEF, #X + (1*JMAX + 2) * Y] -+ .ifnc "\tail","" -+ vmul.f ACCUM4, COEF4, IN1 @ vector operation -+ .endif -+ vldr COEF2, [PCOEF, #X + (2*JMAX + 2) * Y] -+ vldr COEF3, [PCOEF, #X + (3*JMAX + 2) * Y] -+ .endif -+ .ifnc "\tail","" -+ vstmia POUT!, {POST0-POST3} -+ .endif -+ .ifnc "\head","" -+ vmla.f ACCUM0, COEF0, IN2 @ vector = vector * scalar -+ vldr COEF4, [PCOEF, #X + (0*JMAX + 3) * Y] -+ vldr COEF5, [PCOEF, #X + (1*JMAX + 3) * Y] -+ vldr COEF6, [PCOEF, #X + (2*JMAX + 3) * Y] -+ vldr COEF7, [PCOEF, #X + (3*JMAX + 3) * Y] -+ vmla.f ACCUM4, COEF4, IN3 @ vector = vector * scalar -+ .if \decifactor == 32 -+ vldr COEF0, [PCOEF, #X + (0*JMAX + 4) * Y] -+ vldr COEF1, [PCOEF, #X + (1*JMAX + 4) * Y] -+ vldr COEF2, [PCOEF, #X + (2*JMAX + 4) * Y] -+ vldr COEF3, [PCOEF, #X + (3*JMAX + 4) * Y] -+ vmla.f ACCUM0, COEF0, IN4 @ vector = vector * scalar -+ vldr COEF4, [PCOEF, #X + (0*JMAX + 5) * Y] -+ vldr COEF5, [PCOEF, #X + (1*JMAX + 5) * Y] -+ vldr COEF6, [PCOEF, #X + (2*JMAX + 5) * Y] -+ vldr COEF7, [PCOEF, #X + (3*JMAX + 5) * Y] -+ vmla.f ACCUM4, COEF4, IN5 @ vector = vector * scalar -+ vldr COEF0, [PCOEF, #X + (0*JMAX + 6) * Y] -+ vldr COEF1, [PCOEF, #X + (1*JMAX + 6) * Y] -+ vldr COEF2, [PCOEF, #X + (2*JMAX + 6) * Y] -+ vldr COEF3, [PCOEF, #X + (3*JMAX + 6) * Y] -+ vmla.f ACCUM0, COEF0, IN6 @ vector = vector * scalar -+ vldr COEF4, [PCOEF, #X + (0*JMAX + 7) * Y] -+ vldr COEF5, [PCOEF, #X + (1*JMAX + 7) * Y] -+ vldr COEF6, [PCOEF, #X + (2*JMAX + 7) * Y] -+ vldr COEF7, [PCOEF, #X + (3*JMAX + 7) * Y] -+ vmla.f ACCUM4, COEF4, IN7 @ vector = vector * scalar -+ .endif -+ .endif -+.endm -+ -+.macro dca_lfe_fir decifactor -+ .if \decifactor == 32 -+ .set JMAX, 8 -+ vpush {s16-s31} -+ vmov SCALE32, s0 @ duplicate scalar across vector -+ vldr IN4, [PIN, #-4*4] -+ vldr IN5, [PIN, #-5*4] -+ vldr IN6, [PIN, #-6*4] -+ vldr IN7, [PIN, #-7*4] -+ .else -+ .set JMAX, 4 -+ vpush {s16-s27} -+ .endif -+ -+ mov COUNTER, #\decifactor/4 - 1 -+ inner_loop \decifactor, up,, head -+1: add PCOEF, PCOEF, #4*JMAX*4 -+ subs COUNTER, COUNTER, #1 -+ inner_loop \decifactor, up, tail, head -+ bne 1b -+ inner_loop \decifactor, up, tail -+ -+ mov COUNTER, #\decifactor/4 - 1 -+ inner_loop \decifactor, down,, head -+1: sub PCOEF, PCOEF, #4*JMAX*4 -+ subs COUNTER, COUNTER, #1 -+ inner_loop \decifactor, down, tail, head -+ bne 1b -+ inner_loop \decifactor, down, tail -+ -+ .if \decifactor == 32 -+ vpop {s16-s31} -+ .else -+ vpop {s16-s27} -+ .endif -+ vmsr FPSCR, OLDFPSCR -+ bx lr -+.endm -+ -+ -+/* void ff_dca_lfe_fir_vfp(float *out, const float *in, const float *coefs, -+ * int decifactor, float scale) -+ */ -+function ff_dca_lfe_fir_vfp, export=1 -+ teq DECIFACTOR, #32 -+ vmrs OLDFPSCR, FPSCR -+ ldr ip, =0x03030000 @ RunFast mode, short vectors of length 4, stride 1 -+ vmsr FPSCR, ip -+NOVFP vldr s0, [sp] -+ vldr IN0, [PIN, #-0*4] -+ vldr IN1, [PIN, #-1*4] -+ vldr IN2, [PIN, #-2*4] -+ vldr IN3, [PIN, #-3*4] -+ beq 32f -+64: dca_lfe_fir 64 -+ .ltorg -+32: dca_lfe_fir 32 -+endfunc --- -1.8.1.6 - - -From 24b72b0117acebae215cb5abb997f68cd0fe1938 Mon Sep 17 00:00:00 2001 -From: Ben Avison -Date: Tue, 9 Jul 2013 17:44:50 +0100 -Subject: [PATCH 6/6] Add VFP-accelerated version of fft16 - ---- - libavcodec/arm/Makefile | 1 + - libavcodec/arm/fft_vfp.S | 299 +++++++++++++++++++++++++++++++++++ - libavcodec/arm/mdct_vfp.S | 5 +- - 3 files changed, 302 insertions(+), 3 deletions(-) - create mode 100644 libavcodec/arm/fft_vfp.S - -diff --git a/libavcodec/arm/Makefile b/libavcodec/arm/Makefile -index 8538276..660d1d4 100644 ---- a/libavcodec/arm/Makefile -+++ b/libavcodec/arm/Makefile -@@ -59,6 +59,7 @@ ARMV6-OBJS += arm/dsputil_init_armv6.o \ - arm/simple_idct_armv6.o \ - - VFP-OBJS-$(HAVE_ARMV6) += arm/dcadsp_vfp.o \ -+ arm/fft_vfp.o \ - arm/fmtconvert_vfp.o \ - arm/mdct_vfp.o \ - arm/synth_filter_vfp.o -diff --git a/libavcodec/arm/fft_vfp.S b/libavcodec/arm/fft_vfp.S -new file mode 100644 -index 0000000..32ea0aa ---- /dev/null -+++ b/libavcodec/arm/fft_vfp.S -@@ -0,0 +1,299 @@ -+/* -+ * Copyright (c) 2013 RISC OS Open Ltd -+ * -+ * This file is part of FFmpeg. -+ * -+ * FFmpeg is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Lesser General Public -+ * License as published by the Free Software Foundation; either -+ * version 2.1 of the License, or (at your option) any later version. -+ * -+ * FFmpeg is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ * Lesser General Public License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General Public -+ * License along with FFmpeg; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -+ * -+ * Author: Ben Avison -+ */ -+ -+#include "libavutil/arm/asm.S" -+ -+@ TODO: * FFTs wider than 16 -+@ * dispatch code -+ -+function fft4_vfp -+ vldr d0, [a1, #0*2*4] @ s0,s1 = z[0] -+ vldr d4, [a1, #1*2*4] @ s8,s9 = z[1] -+ vldr d1, [a1, #2*2*4] @ s2,s3 = z[2] -+ vldr d5, [a1, #3*2*4] @ s10,s11 = z[3] -+ @ stall -+ vadd.f s12, s0, s8 @ i0 -+ vadd.f s13, s1, s9 @ i1 -+ vadd.f s14, s2, s10 @ i2 -+ vadd.f s15, s3, s11 @ i3 -+ vsub.f s8, s0, s8 @ i4 -+ vsub.f s9, s1, s9 @ i5 -+ vsub.f s10, s2, s10 @ i6 -+ vsub.f s11, s3, s11 @ i7 -+ @ stall -+ @ stall -+ vadd.f s0, s12, s14 @ z[0].re -+ vsub.f s4, s12, s14 @ z[2].re -+ vadd.f s1, s13, s15 @ z[0].im -+ vsub.f s5, s13, s15 @ z[2].im -+ vadd.f s7, s9, s10 @ z[3].im -+ vsub.f s3, s9, s10 @ z[1].im -+ vadd.f s2, s8, s11 @ z[1].re -+ vsub.f s6, s8, s11 @ z[3].re -+ @ stall -+ @ stall -+ vstr d0, [a1, #0*2*4] -+ vstr d2, [a1, #2*2*4] -+ @ stall -+ @ stall -+ vstr d1, [a1, #1*2*4] -+ vstr d3, [a1, #3*2*4] -+ -+ bx lr -+endfunc -+ -+.macro macro_fft8_head -+ @ FFT4 -+ vldr d4, [a1, #0 * 2*4] -+ vldr d6, [a1, #1 * 2*4] -+ vldr d5, [a1, #2 * 2*4] -+ vldr d7, [a1, #3 * 2*4] -+ @ BF -+ vldr d12, [a1, #4 * 2*4] -+ vadd.f s16, s8, s12 @ vector op -+ vldr d14, [a1, #5 * 2*4] -+ vldr d13, [a1, #6 * 2*4] -+ vldr d15, [a1, #7 * 2*4] -+ vsub.f s20, s8, s12 @ vector op -+ vadd.f s0, s16, s18 -+ vsub.f s2, s16, s18 -+ vadd.f s1, s17, s19 -+ vsub.f s3, s17, s19 -+ vadd.f s7, s21, s22 -+ vsub.f s5, s21, s22 -+ vadd.f s4, s20, s23 -+ vsub.f s6, s20, s23 -+ vsub.f s20, s24, s28 @ vector op -+ vstr d0, [a1, #0 * 2*4] @ transfer s0-s7 to s24-s31 via memory -+ vstr d1, [a1, #1 * 2*4] -+ vldr s0, cos1pi4 -+ vadd.f s16, s24, s28 @ vector op -+ vstr d2, [a1, #2 * 2*4] -+ vstr d3, [a1, #3 * 2*4] -+ vldr d12, [a1, #0 * 2*4] -+ @ TRANSFORM -+ vmul.f s20, s20, s0 @ vector x scalar op -+ vldr d13, [a1, #1 * 2*4] -+ vldr d14, [a1, #2 * 2*4] -+ vldr d15, [a1, #3 * 2*4] -+ @ BUTTERFLIES -+ vadd.f s0, s18, s16 -+ vadd.f s1, s17, s19 -+ vsub.f s2, s17, s19 -+ vsub.f s3, s18, s16 -+ vadd.f s4, s21, s20 -+ vsub.f s5, s21, s20 -+ vadd.f s6, s22, s23 -+ vsub.f s7, s22, s23 -+ vadd.f s8, s0, s24 @ vector op -+ vstr d0, [a1, #0 * 2*4] @ transfer s0-s3 to s12-s15 via memory -+ vstr d1, [a1, #1 * 2*4] -+ vldr d6, [a1, #0 * 2*4] -+ vldr d7, [a1, #1 * 2*4] -+ vadd.f s1, s5, s6 -+ vadd.f s0, s7, s4 -+ vsub.f s2, s5, s6 -+ vsub.f s3, s7, s4 -+ vsub.f s12, s24, s12 @ vector op -+ vsub.f s5, s29, s1 -+ vsub.f s4, s28, s0 -+ vsub.f s6, s30, s2 -+ vsub.f s7, s31, s3 -+ vadd.f s16, s0, s28 @ vector op -+ vstr d6, [a1, #4 * 2*4] -+ vstr d7, [a1, #6 * 2*4] -+ vstr d4, [a1, #0 * 2*4] -+ vstr d5, [a1, #2 * 2*4] -+ vstr d2, [a1, #5 * 2*4] -+ vstr d3, [a1, #7 * 2*4] -+.endm -+ -+.macro macro_fft8_tail -+ vstr d8, [a1, #1 * 2*4] -+ vstr d9, [a1, #3 * 2*4] -+.endm -+ -+function fft8_vfp -+ ldr a3, =0x03030000 @ RunFast mode, vector length 4, stride 1 -+ vmrs a2, FPSCR -+ vmsr FPSCR, a3 -+ vpush {s16-s31} -+ -+ macro_fft8_head -+ macro_fft8_tail -+ -+ vpop {s16-s31} -+ vmsr FPSCR, a2 -+ bx lr -+endfunc -+ -+.align 3 -+cos1pi4: @ cos(1*pi/4) = sqrt(2) -+ .float 0.707106769084930419921875 -+cos1pi8: @ cos(1*pi/8) = sqrt(2+sqrt(2))/2 -+ .float 0.92387950420379638671875 -+cos3pi8: @ cos(2*pi/8) = sqrt(2-sqrt(2))/2 -+ .float 0.3826834261417388916015625 -+ -+function ff_fft16_vfp, export=1 -+ ldr a3, =0x03030000 @ RunFast mode, vector length 4, stride 1 -+ vmrs a2, FPSCR -+ vmsr FPSCR, a3 -+ vpush {s16-s31} -+ -+ macro_fft8_head -+ @ FFT4(z+8) -+ vldr d10, [a1, #8 * 2*4] -+ vldr d12, [a1, #9 * 2*4] -+ vldr d11, [a1, #10 * 2*4] -+ vldr d13, [a1, #11 * 2*4] -+ macro_fft8_tail -+ vadd.f s16, s20, s24 @ vector op -+ @ FFT4(z+12) -+ vldr d4, [a1, #12 * 2*4] -+ vldr d6, [a1, #13 * 2*4] -+ vldr d5, [a1, #14 * 2*4] -+ vsub.f s20, s20, s24 @ vector op -+ vldr d7, [a1, #15 * 2*4] -+ vadd.f s0, s16, s18 -+ vsub.f s4, s16, s18 -+ vadd.f s1, s17, s19 -+ vsub.f s5, s17, s19 -+ vadd.f s7, s21, s22 -+ vsub.f s3, s21, s22 -+ vadd.f s2, s20, s23 -+ vsub.f s6, s20, s23 -+ vadd.f s16, s8, s12 @ vector op -+ vstr d0, [a1, #8 * 2*4] -+ vstr d2, [a1, #10 * 2*4] -+ vstr d1, [a1, #9 * 2*4] -+ vsub.f s20, s8, s12 -+ vstr d3, [a1, #11 * 2*4] -+ @ TRANSFORM(z[2],z[6],z[10],z[14],cos1pi4,cos1pi4) -+ vldr d12, [a1, #10 * 2*4] -+ vadd.f s0, s16, s18 -+ vadd.f s1, s17, s19 -+ vsub.f s6, s16, s18 -+ vsub.f s7, s17, s19 -+ vsub.f s3, s21, s22 -+ vadd.f s2, s20, s23 -+ vadd.f s5, s21, s22 -+ vsub.f s4, s20, s23 -+ vstr d0, [a1, #12 * 2*4] -+ vmov s0, s6 -+ @ TRANSFORM(z[1],z[5],z[9],z[13],cos1pi8,cos3pi8) -+ vldr d6, [a1, #9 * 2*4] -+ vstr d1, [a1, #13 * 2*4] -+ vldr d1, cos1pi4 @ s2 = cos1pi4, s3 = cos1pi8 -+ vstr d2, [a1, #15 * 2*4] -+ vldr d7, [a1, #13 * 2*4] -+ vadd.f s4, s25, s24 -+ vsub.f s5, s25, s24 -+ vsub.f s6, s0, s7 -+ vadd.f s7, s0, s7 -+ vmul.f s20, s12, s3 @ vector op -+ @ TRANSFORM(z[3],z[7],z[11],z[15],cos3pi8,cos1pi8) -+ vldr d4, [a1, #11 * 2*4] -+ vldr d5, [a1, #15 * 2*4] -+ vldr s1, cos3pi8 -+ vmul.f s24, s4, s2 @ vector * scalar op -+ vmul.f s28, s12, s1 @ vector * scalar op -+ vmul.f s12, s8, s1 @ vector * scalar op -+ vadd.f s4, s20, s29 -+ vsub.f s5, s21, s28 -+ vsub.f s6, s22, s31 -+ vadd.f s7, s23, s30 -+ vmul.f s8, s8, s3 @ vector * scalar op -+ vldr d8, [a1, #1 * 2*4] -+ vldr d9, [a1, #5 * 2*4] -+ vldr d10, [a1, #3 * 2*4] -+ vldr d11, [a1, #7 * 2*4] -+ vldr d14, [a1, #2 * 2*4] -+ vadd.f s0, s6, s4 -+ vadd.f s1, s5, s7 -+ vsub.f s2, s5, s7 -+ vsub.f s3, s6, s4 -+ vadd.f s4, s12, s9 -+ vsub.f s5, s13, s8 -+ vsub.f s6, s14, s11 -+ vadd.f s7, s15, s10 -+ vadd.f s12, s0, s16 @ vector op -+ vstr d0, [a1, #1 * 2*4] -+ vstr d1, [a1, #5 * 2*4] -+ vldr d4, [a1, #1 * 2*4] -+ vldr d5, [a1, #5 * 2*4] -+ vadd.f s0, s6, s4 -+ vadd.f s1, s5, s7 -+ vsub.f s2, s5, s7 -+ vsub.f s3, s6, s4 -+ vsub.f s8, s16, s8 @ vector op -+ vstr d6, [a1, #1 * 2*4] -+ vstr d7, [a1, #5 * 2*4] -+ vldr d15, [a1, #6 * 2*4] -+ vsub.f s4, s20, s0 -+ vsub.f s5, s21, s1 -+ vsub.f s6, s22, s2 -+ vsub.f s7, s23, s3 -+ vadd.f s20, s0, s20 @ vector op -+ vstr d4, [a1, #9 * 2*4] -+ @ TRANSFORM_ZERO(z[0],z[4],z[8],z[12]) -+ vldr d6, [a1, #8 * 2*4] -+ vstr d5, [a1, #13 * 2*4] -+ vldr d7, [a1, #12 * 2*4] -+ vstr d2, [a1, #11 * 2*4] -+ vldr d8, [a1, #0 * 2*4] -+ vstr d3, [a1, #15 * 2*4] -+ vldr d9, [a1, #4 * 2*4] -+ vadd.f s0, s26, s24 -+ vadd.f s1, s25, s27 -+ vsub.f s2, s25, s27 -+ vsub.f s3, s26, s24 -+ vadd.f s4, s14, s12 -+ vadd.f s5, s13, s15 -+ vsub.f s6, s13, s15 -+ vsub.f s7, s14, s12 -+ vadd.f s8, s0, s28 @ vector op -+ vstr d0, [a1, #3 * 2*4] -+ vstr d1, [a1, #7 * 2*4] -+ vldr d6, [a1, #3 * 2*4] -+ vldr d7, [a1, #7 * 2*4] -+ vsub.f s0, s16, s4 -+ vsub.f s1, s17, s5 -+ vsub.f s2, s18, s6 -+ vsub.f s3, s19, s7 -+ vsub.f s12, s28, s12 @ vector op -+ vadd.f s16, s4, s16 @ vector op -+ vstr d10, [a1, #3 * 2*4] -+ vstr d11, [a1, #7 * 2*4] -+ vstr d4, [a1, #2 * 2*4] -+ vstr d5, [a1, #6 * 2*4] -+ vstr d0, [a1, #8 * 2*4] -+ vstr d1, [a1, #12 * 2*4] -+ vstr d6, [a1, #10 * 2*4] -+ vstr d7, [a1, #14 * 2*4] -+ vstr d8, [a1, #0 * 2*4] -+ vstr d9, [a1, #4 * 2*4] -+ -+ vpop {s16-s31} -+ vmsr FPSCR, a2 -+ bx lr -+endfunc -diff --git a/libavcodec/arm/mdct_vfp.S b/libavcodec/arm/mdct_vfp.S -index 7d55e7d..5374dd5 100644 ---- a/libavcodec/arm/mdct_vfp.S -+++ b/libavcodec/arm/mdct_vfp.S -@@ -174,9 +174,8 @@ function ff_imdct_half_vfp, export=1 - .endr - - vmsr FPSCR, OLDFPSCR -- mov ORIGOUT, OUT -- ldr ip, [CONTEXT, #9*4] -- blx ip @ s->fft_calc(s, output) -+ mov a1, OUT -+ bl ff_fft16_vfp - ldr lr, =0x03030000 @ RunFast mode, short vectors of length 4, stride 1 - vmsr FPSCR, lr - --- -1.8.1.6 - diff --git a/packages/multimedia/ffmpeg/patches/1.2.1/ffmpeg-0001-Support-raw-dvdsub-palette-as-stored-on-normal-dvd-s.patch b/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0001-Support-raw-dvdsub-palette-as-stored-on-normal-dvd-s.patch similarity index 100% rename from packages/multimedia/ffmpeg/patches/1.2.1/ffmpeg-0001-Support-raw-dvdsub-palette-as-stored-on-normal-dvd-s.patch rename to packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0001-Support-raw-dvdsub-palette-as-stored-on-normal-dvd-s.patch diff --git a/packages/multimedia/ffmpeg/patches/1.2.1/ffmpeg-0002-Change-fallthrough-logic-for-read_seek-to-be-based-o.patch b/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0002-Change-fallthrough-logic-for-read_seek-to-be-based-o.patch similarity index 100% rename from packages/multimedia/ffmpeg/patches/1.2.1/ffmpeg-0002-Change-fallthrough-logic-for-read_seek-to-be-based-o.patch rename to packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0002-Change-fallthrough-logic-for-read_seek-to-be-based-o.patch diff --git a/packages/multimedia/ffmpeg/patches/1.2.1/ffmpeg-0003-matroska-Check-return-value-of-avio_seek-and-avoid-m.patch b/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0003-matroska-Check-return-value-of-avio_seek-and-avoid-m.patch similarity index 100% rename from packages/multimedia/ffmpeg/patches/1.2.1/ffmpeg-0003-matroska-Check-return-value-of-avio_seek-and-avoid-m.patch rename to packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0003-matroska-Check-return-value-of-avio_seek-and-avoid-m.patch diff --git a/packages/multimedia/ffmpeg/patches/1.2.1/ffmpeg-0004-asf-hacks.patch b/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0004-asf-hacks.patch similarity index 100% rename from packages/multimedia/ffmpeg/patches/1.2.1/ffmpeg-0004-asf-hacks.patch rename to packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0004-asf-hacks.patch diff --git a/packages/multimedia/ffmpeg/patches/1.2.1/ffmpeg-0005-if-av_read_packet-returns-AVERROR_IO-we-are-done.-ff.patch b/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0005-if-av_read_packet-returns-AVERROR_IO-we-are-done.-ff.patch similarity index 100% rename from packages/multimedia/ffmpeg/patches/1.2.1/ffmpeg-0005-if-av_read_packet-returns-AVERROR_IO-we-are-done.-ff.patch rename to packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0005-if-av_read_packet-returns-AVERROR_IO-we-are-done.-ff.patch diff --git a/packages/multimedia/ffmpeg/patches/1.2.1/ffmpeg-0006-added-Ticket-7187-TV-Teletext-support-for-DVB-EBU-Te.patch b/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0006-added-Ticket-7187-TV-Teletext-support-for-DVB-EBU-Te.patch similarity index 100% rename from packages/multimedia/ffmpeg/patches/1.2.1/ffmpeg-0006-added-Ticket-7187-TV-Teletext-support-for-DVB-EBU-Te.patch rename to packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0006-added-Ticket-7187-TV-Teletext-support-for-DVB-EBU-Te.patch diff --git a/packages/multimedia/ffmpeg/patches/1.2.1/ffmpeg-0007-Don-t-accept-mpegts-PMT-that-isn-t-current.patch b/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0007-Don-t-accept-mpegts-PMT-that-isn-t-current.patch similarity index 100% rename from packages/multimedia/ffmpeg/patches/1.2.1/ffmpeg-0007-Don-t-accept-mpegts-PMT-that-isn-t-current.patch rename to packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0007-Don-t-accept-mpegts-PMT-that-isn-t-current.patch diff --git a/packages/multimedia/ffmpeg/patches/1.2.1/ffmpeg-0008-Don-t-reparse-PMT-unless-it-s-version-has-changed.patch b/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0008-Don-t-reparse-PMT-unless-it-s-version-has-changed.patch similarity index 100% rename from packages/multimedia/ffmpeg/patches/1.2.1/ffmpeg-0008-Don-t-reparse-PMT-unless-it-s-version-has-changed.patch rename to packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0008-Don-t-reparse-PMT-unless-it-s-version-has-changed.patch diff --git a/packages/multimedia/ffmpeg/patches/1.2.1/ffmpeg-0009-fixed-compile-with-VDPAU-header-versions-without-MPE.patch b/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0009-fixed-compile-with-VDPAU-header-versions-without-MPE.patch similarity index 100% rename from packages/multimedia/ffmpeg/patches/1.2.1/ffmpeg-0009-fixed-compile-with-VDPAU-header-versions-without-MPE.patch rename to packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0009-fixed-compile-with-VDPAU-header-versions-without-MPE.patch diff --git a/packages/multimedia/ffmpeg/patches/1.2.1/ffmpeg-0010-Read-PID-timestamps-as-well-as-PCR-timestamps-to-fin.patch b/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0010-Read-PID-timestamps-as-well-as-PCR-timestamps-to-fin.patch similarity index 100% rename from packages/multimedia/ffmpeg/patches/1.2.1/ffmpeg-0010-Read-PID-timestamps-as-well-as-PCR-timestamps-to-fin.patch rename to packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0010-Read-PID-timestamps-as-well-as-PCR-timestamps-to-fin.patch diff --git a/packages/multimedia/ffmpeg/patches/1.2.1/ffmpeg-0011-Get-stream-durations-using-read_timestamp.patch b/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0011-Get-stream-durations-using-read_timestamp.patch similarity index 100% rename from packages/multimedia/ffmpeg/patches/1.2.1/ffmpeg-0011-Get-stream-durations-using-read_timestamp.patch rename to packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0011-Get-stream-durations-using-read_timestamp.patch diff --git a/packages/multimedia/ffmpeg/patches/1.2.1/ffmpeg-0013-aacenc-add-recognized-profiles-array.patch b/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0013-aacenc-add-recognized-profiles-array.patch similarity index 100% rename from packages/multimedia/ffmpeg/patches/1.2.1/ffmpeg-0013-aacenc-add-recognized-profiles-array.patch rename to packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0013-aacenc-add-recognized-profiles-array.patch diff --git a/packages/multimedia/ffmpeg/patches/1.2.1/ffmpeg-0014-changed-allow-4-second-skew-between-streams-in-mov-b.patch b/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0014-changed-allow-4-second-skew-between-streams-in-mov-b.patch similarity index 100% rename from packages/multimedia/ffmpeg/patches/1.2.1/ffmpeg-0014-changed-allow-4-second-skew-between-streams-in-mov-b.patch rename to packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0014-changed-allow-4-second-skew-between-streams-in-mov-b.patch diff --git a/packages/multimedia/ffmpeg/patches/1.2.1/ffmpeg-0015-fixed-memleak-in-mpegts-demuxer-on-some-malformed-mp.patch b/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0015-fixed-memleak-in-mpegts-demuxer-on-some-malformed-mp.patch similarity index 100% rename from packages/multimedia/ffmpeg/patches/1.2.1/ffmpeg-0015-fixed-memleak-in-mpegts-demuxer-on-some-malformed-mp.patch rename to packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0015-fixed-memleak-in-mpegts-demuxer-on-some-malformed-mp.patch diff --git a/packages/multimedia/ffmpeg/patches/1.2.1/ffmpeg-0016-Speed-up-mpegts-av_find_stream_info.patch b/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0016-Speed-up-mpegts-av_find_stream_info.patch similarity index 100% rename from packages/multimedia/ffmpeg/patches/1.2.1/ffmpeg-0016-Speed-up-mpegts-av_find_stream_info.patch rename to packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0016-Speed-up-mpegts-av_find_stream_info.patch diff --git a/packages/multimedia/ffmpeg/patches/1.2.1/ffmpeg-0017-allow-customizing-shared-library-soname-name-with-ma.patch b/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0017-allow-customizing-shared-library-soname-name-with-ma.patch similarity index 100% rename from packages/multimedia/ffmpeg/patches/1.2.1/ffmpeg-0017-allow-customizing-shared-library-soname-name-with-ma.patch rename to packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0017-allow-customizing-shared-library-soname-name-with-ma.patch diff --git a/packages/multimedia/ffmpeg/patches/1.2.1/ffmpeg-0018-dxva-mpeg2-Allocate-slices-array-dynamically-fixes-v.patch b/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0018-dxva-mpeg2-Allocate-slices-array-dynamically-fixes-v.patch similarity index 100% rename from packages/multimedia/ffmpeg/patches/1.2.1/ffmpeg-0018-dxva-mpeg2-Allocate-slices-array-dynamically-fixes-v.patch rename to packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0018-dxva-mpeg2-Allocate-slices-array-dynamically-fixes-v.patch diff --git a/packages/multimedia/ffmpeg/patches/1.2.1/ffmpeg-0019-dxva-mpeg2-speed-up-slice-allocation.patch b/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0019-dxva-mpeg2-speed-up-slice-allocation.patch similarity index 100% rename from packages/multimedia/ffmpeg/patches/1.2.1/ffmpeg-0019-dxva-mpeg2-speed-up-slice-allocation.patch rename to packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0019-dxva-mpeg2-speed-up-slice-allocation.patch diff --git a/packages/multimedia/ffmpeg/patches/1.2.1/ffmpeg-0020-dxva-vc1-Take-BI-into-account-for-forward-and-backwa.patch b/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0020-dxva-vc1-Take-BI-into-account-for-forward-and-backwa.patch similarity index 100% rename from packages/multimedia/ffmpeg/patches/1.2.1/ffmpeg-0020-dxva-vc1-Take-BI-into-account-for-forward-and-backwa.patch rename to packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0020-dxva-vc1-Take-BI-into-account-for-forward-and-backwa.patch diff --git a/packages/multimedia/ffmpeg/patches/1.2.1/ffmpeg-0021-dxva-vc1-Pass-overlapping-transforms-hint.patch b/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0021-dxva-vc1-Pass-overlapping-transforms-hint.patch similarity index 100% rename from packages/multimedia/ffmpeg/patches/1.2.1/ffmpeg-0021-dxva-vc1-Pass-overlapping-transforms-hint.patch rename to packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0021-dxva-vc1-Pass-overlapping-transforms-hint.patch diff --git a/packages/multimedia/ffmpeg/patches/1.2.1/ffmpeg-0022-dxva-h264-Fix-dxva-playback-of-streams-that-don-t-st.patch b/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0022-dxva-h264-Fix-dxva-playback-of-streams-that-don-t-st.patch similarity index 100% rename from packages/multimedia/ffmpeg/patches/1.2.1/ffmpeg-0022-dxva-h264-Fix-dxva-playback-of-streams-that-don-t-st.patch rename to packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0022-dxva-h264-Fix-dxva-playback-of-streams-that-don-t-st.patch diff --git a/packages/multimedia/ffmpeg/patches/1.2.1/ffmpeg-0024-add-public-version-of-ff_read_frame_flush.patch b/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0024-add-public-version-of-ff_read_frame_flush.patch similarity index 100% rename from packages/multimedia/ffmpeg/patches/1.2.1/ffmpeg-0024-add-public-version-of-ff_read_frame_flush.patch rename to packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0024-add-public-version-of-ff_read_frame_flush.patch diff --git a/packages/multimedia/ffmpeg/patches/1.2.1/ffmpeg-0026-Handle-return-value-of-BeginFrame-better.patch b/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0026-Handle-return-value-of-BeginFrame-better.patch similarity index 100% rename from packages/multimedia/ffmpeg/patches/1.2.1/ffmpeg-0026-Handle-return-value-of-BeginFrame-better.patch rename to packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0026-Handle-return-value-of-BeginFrame-better.patch diff --git a/packages/multimedia/ffmpeg/patches/1.2.1/ffmpeg-0028-ffmpeg-1.2-fixed-dvd-still-frames-ended-up-in-intern.patch b/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0028-ffmpeg-1.2-fixed-dvd-still-frames-ended-up-in-intern.patch similarity index 100% rename from packages/multimedia/ffmpeg/patches/1.2.1/ffmpeg-0028-ffmpeg-1.2-fixed-dvd-still-frames-ended-up-in-intern.patch rename to packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0028-ffmpeg-1.2-fixed-dvd-still-frames-ended-up-in-intern.patch diff --git a/packages/multimedia/ffmpeg/patches/1.2.1/ffmpeg-0029-stop-forcing-gas-preprocessor-for-darwin.patch b/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0029-stop-forcing-gas-preprocessor-for-darwin.patch similarity index 100% rename from packages/multimedia/ffmpeg/patches/1.2.1/ffmpeg-0029-stop-forcing-gas-preprocessor-for-darwin.patch rename to packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0029-stop-forcing-gas-preprocessor-for-darwin.patch diff --git a/packages/multimedia/ffmpeg/patches/1.2.1/ffmpeg-0036-backport-register-vdpau-hwaccel-for-mpeg12-fe1f36547d0be963e352de0cde1a6cba59ea2e78.patch b/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0036-backport-register-vdpau-hwaccel-for-mpeg12-fe1f36547d0be963e352de0cde1a6cba59ea2e78.patch similarity index 100% rename from packages/multimedia/ffmpeg/patches/1.2.1/ffmpeg-0036-backport-register-vdpau-hwaccel-for-mpeg12-fe1f36547d0be963e352de0cde1a6cba59ea2e78.patch rename to packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0036-backport-register-vdpau-hwaccel-for-mpeg12-fe1f36547d0be963e352de0cde1a6cba59ea2e78.patch diff --git a/packages/multimedia/ffmpeg/patches/1.2.1/ffmpeg-0037-backport-fix-vdpau-vc1-interlace-modes-b37cc5995b88ec68a68cb8e496a008e1cd467077.patch b/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0037-backport-fix-vdpau-vc1-interlace-modes-b37cc5995b88ec68a68cb8e496a008e1cd467077.patch similarity index 100% rename from packages/multimedia/ffmpeg/patches/1.2.1/ffmpeg-0037-backport-fix-vdpau-vc1-interlace-modes-b37cc5995b88ec68a68cb8e496a008e1cd467077.patch rename to packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0037-backport-fix-vdpau-vc1-interlace-modes-b37cc5995b88ec68a68cb8e496a008e1cd467077.patch diff --git a/packages/multimedia/ffmpeg/patches/1.2.1/ffmpeg-0039-h264-expose-h264-frame-packing-as-stereo_mode-metada.patch b/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0039-h264-expose-h264-frame-packing-as-stereo_mode-metada.patch similarity index 100% rename from packages/multimedia/ffmpeg/patches/1.2.1/ffmpeg-0039-h264-expose-h264-frame-packing-as-stereo_mode-metada.patch rename to packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0039-h264-expose-h264-frame-packing-as-stereo_mode-metada.patch diff --git a/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0040-ffmpeg-backport-arm-Add-VFP-accelerated-version-of-s.patch b/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0040-ffmpeg-backport-arm-Add-VFP-accelerated-version-of-s.patch new file mode 100644 index 0000000000..7c2c9d2237 --- /dev/null +++ b/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0040-ffmpeg-backport-arm-Add-VFP-accelerated-version-of-s.patch @@ -0,0 +1,311 @@ +From 40daea3c1bafa9cea37b65f856c3c0432767d760 Mon Sep 17 00:00:00 2001 +From: Ben Avison +Date: Mon, 15 Jul 2013 18:28:09 +0100 +Subject: [PATCH 39/49] [ffmpeg] - backport - arm: Add VFP-accelerated version + of synth_filter_float +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + + Before After + Mean StdDev Mean StdDev Change +This function 9295.0 114.9 4853.2 83.5 +91.5% +Overall 23699.8 397.6 19285.5 292.0 +22.9% + +Signed-off-by: Martin Storsjö +--- + libavcodec/arm/Makefile | 1 + + libavcodec/arm/fft_init_arm.c | 8 + + libavcodec/arm/synth_filter_vfp.S | 243 ++++++++++++++++++++++++++ + 3 files changed, 252 insertions(+) + create mode 100644 libavcodec/arm/synth_filter_vfp.S + +diff --git a/libavcodec/arm/Makefile b/libavcodec/arm/Makefile +index 1c91d62..aee9d73 100644 +--- a/libavcodec/arm/Makefile ++++ b/libavcodec/arm/Makefile +@@ -58,6 +58,7 @@ ARMV6-OBJS += arm/dsputil_init_armv6.o \ + arm/dsputil_armv6.o \ + arm/simple_idct_armv6.o \ + ++VFP-OBJS-$(CONFIG_DCA_DECODER) += arm/synth_filter_vfp.o + VFP-OBJS-$(HAVE_ARMV6) += arm/fmtconvert_vfp.o + + NEON-OBJS-$(CONFIG_FFT) += arm/fft_neon.o \ +diff --git a/libavcodec/arm/fft_init_arm.c b/libavcodec/arm/fft_init_arm.c +index 8c98abc..fe0acc5 100644 +--- a/libavcodec/arm/fft_init_arm.c ++++ b/libavcodec/arm/fft_init_arm.c +@@ -32,6 +32,12 @@ void ff_mdct_calc_neon(FFTContext *s, FFTSample *output, const FFTSample *input) + + void ff_rdft_calc_neon(struct RDFTContext *s, FFTSample *z); + ++void ff_synth_filter_float_vfp(FFTContext *imdct, ++ float *synth_buf_ptr, int *synth_buf_offset, ++ float synth_buf2[32], const float window[512], ++ float out[32], const float in[32], ++ float scale); ++ + void ff_synth_filter_float_neon(FFTContext *imdct, + float *synth_buf_ptr, int *synth_buf_offset, + float synth_buf2[32], const float window[512], +@@ -71,6 +77,8 @@ av_cold void ff_synth_filter_init_arm(SynthFilterContext *s) + { + int cpu_flags = av_get_cpu_flags(); + ++ if (have_vfp(cpu_flags) && !have_vfpv3(cpu_flags)) ++ s->synth_filter_float = ff_synth_filter_float_vfp; + if (have_neon(cpu_flags)) + s->synth_filter_float = ff_synth_filter_float_neon; + } +diff --git a/libavcodec/arm/synth_filter_vfp.S b/libavcodec/arm/synth_filter_vfp.S +new file mode 100644 +index 0000000..c219c41 +--- /dev/null ++++ b/libavcodec/arm/synth_filter_vfp.S +@@ -0,0 +1,243 @@ ++/* ++ * Copyright (c) 2013 RISC OS Open Ltd ++ * Author: Ben Avison ++ * ++ * This file is part of Libav. ++ * ++ * Libav is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * Libav is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with Libav; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#include "libavutil/arm/asm.S" ++ ++IMDCT .req r0 ++ORIG_P_SB .req r1 ++P_SB_OFF .req r2 ++I .req r0 ++P_SB2_UP .req r1 ++OLDFPSCR .req r2 ++P_SB2_DN .req r3 ++P_WIN_DN .req r4 ++P_OUT_DN .req r5 ++P_SB .req r6 ++J_WRAP .req r7 ++P_WIN_UP .req r12 ++P_OUT_UP .req r14 ++ ++SCALE .req s0 ++SBUF_DAT_REV0 .req s4 ++SBUF_DAT_REV1 .req s5 ++SBUF_DAT_REV2 .req s6 ++SBUF_DAT_REV3 .req s7 ++VA0 .req s8 ++VA3 .req s11 ++VB0 .req s12 ++VB3 .req s15 ++VC0 .req s8 ++VC3 .req s11 ++VD0 .req s12 ++VD3 .req s15 ++SBUF_DAT0 .req s16 ++SBUF_DAT1 .req s17 ++SBUF_DAT2 .req s18 ++SBUF_DAT3 .req s19 ++SBUF_DAT_ALT0 .req s20 ++SBUF_DAT_ALT1 .req s21 ++SBUF_DAT_ALT2 .req s22 ++SBUF_DAT_ALT3 .req s23 ++WIN_DN_DAT0 .req s24 ++WIN_UP_DAT0 .req s28 ++ ++ ++.macro inner_loop half, tail, head ++ .if (OFFSET & (64*4)) == 0 @ even numbered call ++ SBUF_DAT_THIS0 .req SBUF_DAT0 ++ SBUF_DAT_THIS1 .req SBUF_DAT1 ++ SBUF_DAT_THIS2 .req SBUF_DAT2 ++ SBUF_DAT_THIS3 .req SBUF_DAT3 ++ .ifnc "\head","" ++ vldr d8, [P_SB, #OFFSET] @ d8 = SBUF_DAT ++ vldr d9, [P_SB, #OFFSET+8] ++ .endif ++ .else ++ SBUF_DAT_THIS0 .req SBUF_DAT_ALT0 ++ SBUF_DAT_THIS1 .req SBUF_DAT_ALT1 ++ SBUF_DAT_THIS2 .req SBUF_DAT_ALT2 ++ SBUF_DAT_THIS3 .req SBUF_DAT_ALT3 ++ .ifnc "\head","" ++ vldr d10, [P_SB, #OFFSET] @ d10 = SBUF_DAT_ALT ++ vldr d11, [P_SB, #OFFSET+8] ++ .endif ++ .endif ++ .ifnc "\tail","" ++ .ifc "\half","ab" ++ vmls.f VA0, SBUF_DAT_REV0, WIN_DN_DAT0 @ all operands treated as vectors ++ .else ++ vmla.f VD0, SBUF_DAT_REV0, WIN_DN_DAT0 @ all operands treated as vectors ++ .endif ++ .endif ++ .ifnc "\head","" ++ vldr d14, [P_WIN_UP, #OFFSET] @ d14 = WIN_UP_DAT ++ vldr d15, [P_WIN_UP, #OFFSET+8] ++ vldr d12, [P_WIN_DN, #OFFSET] @ d12 = WIN_DN_DAT ++ vldr d13, [P_WIN_DN, #OFFSET+8] ++ vmov SBUF_DAT_REV3, SBUF_DAT_THIS0 ++ vmov SBUF_DAT_REV2, SBUF_DAT_THIS1 ++ vmov SBUF_DAT_REV1, SBUF_DAT_THIS2 ++ vmov SBUF_DAT_REV0, SBUF_DAT_THIS3 ++ .ifc "\half","ab" ++ vmla.f VB0, SBUF_DAT_THIS0, WIN_UP_DAT0 ++ .else ++ vmla.f VC0, SBUF_DAT_THIS0, WIN_UP_DAT0 ++ .endif ++ teq J_WRAP, #J ++ bne 2f @ strongly predictable, so better than cond exec in this case ++ sub P_SB, P_SB, #512*4 ++2: ++ .set J, J - 64 ++ .set OFFSET, OFFSET + 64*4 ++ .endif ++ .unreq SBUF_DAT_THIS0 ++ .unreq SBUF_DAT_THIS1 ++ .unreq SBUF_DAT_THIS2 ++ .unreq SBUF_DAT_THIS3 ++.endm ++ ++ ++/* void ff_synth_filter_float_vfp(FFTContext *imdct, ++ * float *synth_buf_ptr, int *synth_buf_offset, ++ * float synth_buf2[32], const float window[512], ++ * float out[32], const float in[32], float scale) ++ */ ++function ff_synth_filter_float_vfp, export=1 ++ push {r3-r7,lr} ++ vpush {s16-s31} ++ ldr lr, [P_SB_OFF] ++ add a2, ORIG_P_SB, lr, LSL #2 @ calculate synth_buf to pass to imdct_half ++ mov P_SB, a2 @ and keep a copy for ourselves ++ bic J_WRAP, lr, #63 @ mangled to make testing for wrap easier in inner loop ++ sub lr, lr, #32 ++ and lr, lr, #512-32 ++ str lr, [P_SB_OFF] @ rotate offset, modulo buffer size, ready for next call ++ ldr a3, [sp, #(16+6+2)*4] @ fetch in from stack, to pass to imdct_half ++VFP vmov s16, SCALE @ imdct_half is free to corrupt s0, but it contains one of our arguments in hardfp case ++ bl ff_imdct_half_vfp ++VFP vmov SCALE, s16 ++ ++ fmrx OLDFPSCR, FPSCR ++ ldr lr, =0x03030000 @ RunFast mode, short vectors of length 4, stride 1 ++ fmxr FPSCR, lr ++ ldr P_SB2_DN, [sp, #16*4] ++ ldr P_WIN_DN, [sp, #(16+6+0)*4] ++ ldr P_OUT_DN, [sp, #(16+6+1)*4] ++NOVFP vldr SCALE, [sp, #(16+6+3)*4] ++ ++#define IMM_OFF_SKEW 956 /* also valid immediate constant when you add 16*4 */ ++ add P_SB, P_SB, #IMM_OFF_SKEW @ so we can use -ve offsets to use full immediate offset range ++ add P_SB2_UP, P_SB2_DN, #16*4 ++ add P_WIN_UP, P_WIN_DN, #16*4+IMM_OFF_SKEW ++ add P_OUT_UP, P_OUT_DN, #16*4 ++ add P_SB2_DN, P_SB2_DN, #16*4 ++ add P_WIN_DN, P_WIN_DN, #12*4+IMM_OFF_SKEW ++ add P_OUT_DN, P_OUT_DN, #16*4 ++ mov I, #4 ++1: ++ vldmia P_SB2_UP!, {VB0-VB3} ++ vldmdb P_SB2_DN!, {VA0-VA3} ++ .set J, 512 - 64 ++ .set OFFSET, -IMM_OFF_SKEW ++ inner_loop ab,, head ++ .rept 7 ++ inner_loop ab, tail, head ++ .endr ++ inner_loop ab, tail ++ add P_WIN_UP, P_WIN_UP, #4*4 ++ sub P_WIN_DN, P_WIN_DN, #4*4 ++ vmul.f VB0, VB0, SCALE @ SCALE treated as scalar ++ add P_SB, P_SB, #(512+4)*4 ++ subs I, I, #1 ++ vmul.f VA0, VA0, SCALE ++ vstmia P_OUT_UP!, {VB0-VB3} ++ vstmdb P_OUT_DN!, {VA0-VA3} ++ bne 1b ++ ++ add P_SB2_DN, P_SB2_DN, #(16+28-12)*4 ++ sub P_SB2_UP, P_SB2_UP, #(16+16)*4 ++ add P_WIN_DN, P_WIN_DN, #(32+16+28-12)*4 ++ mov I, #4 ++1: ++ vldr.d d4, zero @ d4 = VC0 ++ vldr.d d5, zero ++ vldr.d d6, zero @ d6 = VD0 ++ vldr.d d7, zero ++ .set J, 512 - 64 ++ .set OFFSET, -IMM_OFF_SKEW ++ inner_loop cd,, head ++ .rept 7 ++ inner_loop cd, tail, head ++ .endr ++ inner_loop cd, tail ++ add P_WIN_UP, P_WIN_UP, #4*4 ++ sub P_WIN_DN, P_WIN_DN, #4*4 ++ add P_SB, P_SB, #(512+4)*4 ++ subs I, I, #1 ++ vstmia P_SB2_UP!, {VC0-VC3} ++ vstmdb P_SB2_DN!, {VD0-VD3} ++ bne 1b ++ ++ fmxr FPSCR, OLDFPSCR ++ vpop {s16-s31} ++ pop {r3-r7,pc} ++endfunc ++ ++ .unreq IMDCT ++ .unreq ORIG_P_SB ++ .unreq P_SB_OFF ++ .unreq I ++ .unreq P_SB2_UP ++ .unreq OLDFPSCR ++ .unreq P_SB2_DN ++ .unreq P_WIN_DN ++ .unreq P_OUT_DN ++ .unreq P_SB ++ .unreq J_WRAP ++ .unreq P_WIN_UP ++ .unreq P_OUT_UP ++ ++ .unreq SCALE ++ .unreq SBUF_DAT_REV0 ++ .unreq SBUF_DAT_REV1 ++ .unreq SBUF_DAT_REV2 ++ .unreq SBUF_DAT_REV3 ++ .unreq VA0 ++ .unreq VA3 ++ .unreq VB0 ++ .unreq VB3 ++ .unreq VC0 ++ .unreq VC3 ++ .unreq VD0 ++ .unreq VD3 ++ .unreq SBUF_DAT0 ++ .unreq SBUF_DAT1 ++ .unreq SBUF_DAT2 ++ .unreq SBUF_DAT3 ++ .unreq SBUF_DAT_ALT0 ++ .unreq SBUF_DAT_ALT1 ++ .unreq SBUF_DAT_ALT2 ++ .unreq SBUF_DAT_ALT3 ++ .unreq WIN_DN_DAT0 ++ .unreq WIN_UP_DAT0 ++ ++ .align 3 ++zero: .word 0, 0 +-- +1.7.9.5 diff --git a/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0041-ffmpeg-backport-arm-Add-VFP-accelerated-version-of-i.patch b/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0041-ffmpeg-backport-arm-Add-VFP-accelerated-version-of-i.patch new file mode 100644 index 0000000000..72dee038f0 --- /dev/null +++ b/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0041-ffmpeg-backport-arm-Add-VFP-accelerated-version-of-i.patch @@ -0,0 +1,102 @@ +From 8ead63b22d31bf71976fc6964922b43d8e0d660b Mon Sep 17 00:00:00 2001 +From: Ben Avison +Date: Mon, 15 Jul 2013 18:28:10 +0100 +Subject: [PATCH 40/49] [ffmpeg] - backport - arm: Add VFP-accelerated version + of int32_to_float_fmul_scalar +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + + Before After + Mean StdDev Mean StdDev Change +This function 1175.0 4.4 366.2 18.3 +220.8% +Overall 19285.5 292.0 18420.5 489.1 +4.7% + +Signed-off-by: Martin Storsjö +--- + libavcodec/arm/fmtconvert_init_arm.c | 10 ++++++ + libavcodec/arm/fmtconvert_vfp.S | 38 +++++++++++++++++++++++ + 2 files changed, 48 insertions(+) + +diff --git a/libavcodec/arm/fmtconvert_init_arm.c b/libavcodec/arm/fmtconvert_init_arm.c +index 1d99c97..de3b78b 100644 +--- a/libavcodec/arm/fmtconvert_init_arm.c ++++ b/libavcodec/arm/fmtconvert_init_arm.c +@@ -28,6 +28,9 @@ + void ff_int32_to_float_fmul_scalar_neon(float *dst, const int *src, + float mul, int len); + ++void ff_int32_to_float_fmul_scalar_vfp(float *dst, const int32_t *src, ++ float mul, int len); ++ + void ff_float_to_int16_neon(int16_t *dst, const float *src, long len); + void ff_float_to_int16_interleave_neon(int16_t *, const float **, long, int); + +@@ -38,6 +41,13 @@ av_cold void ff_fmt_convert_init_arm(FmtConvertContext *c, AVCodecContext *avctx + int cpu_flags = av_get_cpu_flags(); + + if (have_vfp(cpu_flags) && have_armv6(cpu_flags)) { ++ if (!have_vfpv3(cpu_flags)) { ++ // This function doesn't use anything armv6 specific in itself, ++ // but ff_float_to_int16_vfp which is in the same assembly source ++ // file does, thus the whole file requires armv6 to be built. ++ c->int32_to_float_fmul_scalar = ff_int32_to_float_fmul_scalar_vfp; ++ } ++ + c->float_to_int16 = ff_float_to_int16_vfp; + } + +diff --git a/libavcodec/arm/fmtconvert_vfp.S b/libavcodec/arm/fmtconvert_vfp.S +index 7b012bc..3cc3e56 100644 +--- a/libavcodec/arm/fmtconvert_vfp.S ++++ b/libavcodec/arm/fmtconvert_vfp.S +@@ -1,5 +1,6 @@ + /* + * Copyright (c) 2008 Siarhei Siamashka ++ * Copyright (c) 2013 RISC OS Open Ltd + * + * This file is part of FFmpeg. + * +@@ -76,3 +77,40 @@ function ff_float_to_int16_vfp, export=1 + vpop {d8-d11} + pop {r4-r8,pc} + endfunc ++ ++/** ++ * ARM VFP optimised int32 to float conversion. ++ * Assume len is a multiple of 8, destination buffer is at least 4 bytes aligned ++ * (16 bytes alignment is best for BCM2835), little-endian. ++ */ ++@ void ff_int32_to_float_fmul_scalar_vfp(float *dst, const int32_t *src, float mul, int len) ++function ff_int32_to_float_fmul_scalar_vfp, export=1 ++VFP tmp .req a4 ++VFP len .req a3 ++NOVFP tmp .req a3 ++NOVFP len .req a4 ++NOVFP vmov s0, a3 ++ ldr tmp, =0x03070000 @ RunFast mode, short vectors of length 8, stride 1 ++ fmrx ip, FPSCR ++ fmxr FPSCR, tmp ++1: ++ vldmia a2!, {s8-s15} ++ vcvt.f32.s32 s8, s8 ++ vcvt.f32.s32 s9, s9 ++ vcvt.f32.s32 s10, s10 ++ vcvt.f32.s32 s11, s11 ++ vcvt.f32.s32 s12, s12 ++ vcvt.f32.s32 s13, s13 ++ vcvt.f32.s32 s14, s14 ++ vcvt.f32.s32 s15, s15 ++ vmul.f32 s8, s8, s0 ++ subs len, len, #8 ++ vstmia a1!, {s8-s11} ++ vstmia a1!, {s12-s15} ++ bne 1b ++ ++ fmxr FPSCR, ip ++ bx lr ++endfunc ++ .unreq tmp ++ .unreq len +-- +1.7.9.5 diff --git a/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0042-ffmpeg-backport-fmtconvert-Add-a-new-method-int32_to.patch b/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0042-ffmpeg-backport-fmtconvert-Add-a-new-method-int32_to.patch new file mode 100644 index 0000000000..960ea13972 --- /dev/null +++ b/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0042-ffmpeg-backport-fmtconvert-Add-a-new-method-int32_to.patch @@ -0,0 +1,78 @@ +From 7901e7216cf6406a2ea430c71af94ebee72f262b Mon Sep 17 00:00:00 2001 +From: Ben Avison +Date: Mon, 15 Jul 2013 18:28:11 +0100 +Subject: [PATCH 41/49] [ffmpeg] - backport - fmtconvert: Add a new method, + int32_to_float_fmul_array8 +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +This is similar to int32_to_float_fmul_scalar, but +loads a new scalar multiplier every 8 input samples. +This enables the use of much larger input arrays, which +is important for pipelining on some CPUs (such as +ARMv6). + +Signed-off-by: Martin Storsjö +--- + libavcodec/fmtconvert.c | 10 ++++++++++ + libavcodec/fmtconvert.h | 16 ++++++++++++++++ + 2 files changed, 26 insertions(+) + +diff --git a/libavcodec/fmtconvert.c b/libavcodec/fmtconvert.c +index 79e9645..1c45d35 100644 +--- a/libavcodec/fmtconvert.c ++++ b/libavcodec/fmtconvert.c +@@ -30,6 +30,15 @@ static void int32_to_float_fmul_scalar_c(float *dst, const int *src, float mul, + dst[i] = src[i] * mul; + } + ++static void int32_to_float_fmul_array8_c(FmtConvertContext *c, float *dst, ++ const int32_t *src, const float *mul, ++ int len) ++{ ++ int i; ++ for (i = 0; i < len; i += 8) ++ c->int32_to_float_fmul_scalar(&dst[i], &src[i], *mul++, 8); ++} ++ + static av_always_inline int float_to_int16_one(const float *src){ + return av_clip_int16(lrintf(*src)); + } +@@ -79,6 +88,7 @@ void ff_float_interleave_c(float *dst, const float **src, unsigned int len, + av_cold void ff_fmt_convert_init(FmtConvertContext *c, AVCodecContext *avctx) + { + c->int32_to_float_fmul_scalar = int32_to_float_fmul_scalar_c; ++ c->int32_to_float_fmul_array8 = int32_to_float_fmul_array8_c; + c->float_to_int16 = float_to_int16_c; + c->float_to_int16_interleave = float_to_int16_interleave_c; + c->float_interleave = ff_float_interleave_c; +diff --git a/libavcodec/fmtconvert.h b/libavcodec/fmtconvert.h +index 3fb9f4e..02468dc 100644 +--- a/libavcodec/fmtconvert.h ++++ b/libavcodec/fmtconvert.h +@@ -38,6 +38,22 @@ typedef struct FmtConvertContext { + void (*int32_to_float_fmul_scalar)(float *dst, const int *src, float mul, int len); + + /** ++ * Convert an array of int32_t to float and multiply by a float value from another array, ++ * stepping along the float array once for each 8 integers. ++ * @param c pointer to FmtConvertContext. ++ * @param dst destination array of float. ++ * constraints: 16-byte aligned ++ * @param src source array of int32_t. ++ * constraints: 16-byte aligned ++ * @param mul source array of float multipliers. ++ * @param len number of elements to convert. ++ * constraints: multiple of 8 ++ */ ++ void (*int32_to_float_fmul_array8)(struct FmtConvertContext *c, ++ float *dst, const int32_t *src, ++ const float *mul, int len); ++ ++ /** + * Convert an array of float to an array of int16_t. + * + * Convert floats from in the range [-32768.0,32767.0] to ints +-- +1.7.9.5 diff --git a/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0043-ffmpeg-backport-dcadec-Use-int32_to_float_fmul_array.patch b/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0043-ffmpeg-backport-dcadec-Use-int32_to_float_fmul_array.patch new file mode 100644 index 0000000000..5fc52e9fd4 --- /dev/null +++ b/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0043-ffmpeg-backport-dcadec-Use-int32_to_float_fmul_array.patch @@ -0,0 +1,90 @@ +From fa755fe82fe4cfbb85b7c57501912da2e1f316bc Mon Sep 17 00:00:00 2001 +From: Ben Avison +Date: Tue, 16 Jul 2013 15:41:18 +0300 +Subject: [PATCH 42/49] [ffmpeg] - backport - dcadec: Use + int32_to_float_fmul_array8 +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Signed-off-by: Martin Storsjö +--- + libavcodec/dcadec.c | 23 +++++++++++++++-------- + 1 file changed, 15 insertions(+), 8 deletions(-) + +diff --git a/libavcodec/dcadec.c b/libavcodec/dcadec.c +index 1b955e4..b648613 100644 +--- a/libavcodec/dcadec.c ++++ b/libavcodec/dcadec.c +@@ -1302,7 +1302,7 @@ static int dca_subsubframe(DCAContext *s, int base_channel, int block_index) + + /* FIXME */ + float (*subband_samples)[DCA_SUBBANDS][8] = s->subband_samples[block_index]; +- LOCAL_ALIGNED_16(int, block, [8]); ++ LOCAL_ALIGNED_16(int, block, [8 * DCA_SUBBANDS]); + + /* + * Audio data +@@ -1315,6 +1315,8 @@ static int dca_subsubframe(DCAContext *s, int base_channel, int block_index) + quant_step_table = lossy_quant_d; + + for (k = base_channel; k < s->prim_channels; k++) { ++ float rscale[DCA_SUBBANDS]; ++ + if (get_bits_left(&s->gb) < 0) + return AVERROR_INVALIDDATA; + +@@ -1337,11 +1339,12 @@ static int dca_subsubframe(DCAContext *s, int base_channel, int block_index) + * Extract bits from the bit stream + */ + if (!abits) { +- memset(subband_samples[k][l], 0, 8 * sizeof(subband_samples[0][0][0])); ++ rscale[l] = 0; ++ memset(block + 8 * l, 0, 8 * sizeof(block[0])); + } else { + /* Deal with transients */ + int sfi = s->transition_mode[k][l] && subsubframe >= s->transition_mode[k][l]; +- float rscale = quant_step_size * s->scale_factor[k][l][sfi] * ++ rscale[l] = quant_step_size * s->scale_factor[k][l][sfi] * + s->scalefactor_adj[k][sel]; + + if (abits >= 11 || !dca_smpl_bitalloc[abits].vlc[sel].table) { +@@ -1355,7 +1358,7 @@ static int dca_subsubframe(DCAContext *s, int base_channel, int block_index) + block_code1 = get_bits(&s->gb, size); + block_code2 = get_bits(&s->gb, size); + err = decode_blockcodes(block_code1, block_code2, +- levels, block); ++ levels, block + 8 * l); + if (err) { + av_log(s->avctx, AV_LOG_ERROR, + "ERROR: block code look-up failed\n"); +@@ -1364,19 +1367,23 @@ static int dca_subsubframe(DCAContext *s, int base_channel, int block_index) + } else { + /* no coding */ + for (m = 0; m < 8; m++) +- block[m] = get_sbits(&s->gb, abits - 3); ++ block[8 * l + m] = get_sbits(&s->gb, abits - 3); + } + } else { + /* Huffman coded */ + for (m = 0; m < 8; m++) +- block[m] = get_bitalloc(&s->gb, ++ block[8 * l + m] = get_bitalloc(&s->gb, + &dca_smpl_bitalloc[abits], sel); + } + +- s->fmt_conv.int32_to_float_fmul_scalar(subband_samples[k][l], +- block, rscale, 8); + } ++ } + ++ s->fmt_conv.int32_to_float_fmul_array8(&s->fmt_conv, subband_samples[k][0], ++ block, rscale, 8 * s->vq_start_subband[k]); ++ ++ for (l = 0; l < s->vq_start_subband[k]; l++) { ++ int m; + /* + * Inverse ADPCM if in prediction mode + */ +-- +1.7.9.5 diff --git a/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0044-ffmpeg-backport-arm-Add-VFP-accelerated-version-of-i.patch b/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0044-ffmpeg-backport-arm-Add-VFP-accelerated-version-of-i.patch new file mode 100644 index 0000000000..5048613376 --- /dev/null +++ b/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0044-ffmpeg-backport-arm-Add-VFP-accelerated-version-of-i.patch @@ -0,0 +1,222 @@ +From c908a710261f33130569c4360175d8f19a282d67 Mon Sep 17 00:00:00 2001 +From: Ben Avison +Date: Mon, 15 Jul 2013 18:28:12 +0100 +Subject: [PATCH 43/49] [ffmpeg] - backport - arm: Add VFP-accelerated version + of int32_to_float_fmul_array8 +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + + Before After + Mean StdDev Mean StdDev Change +This function 366.2 18.3 277.8 13.7 +31.9% +Overall 18420.5 489.1 17049.5 408.2 +8.0% + +Signed-off-by: Martin Storsjö +--- + libavcodec/arm/fmtconvert_init_arm.c | 6 +- + libavcodec/arm/fmtconvert_vfp.S | 162 +++++++++++++++++++++++ + 2 files changed, 167 insertions(+), 1 deletion(-) + +diff --git a/libavcodec/arm/fmtconvert_init_arm.c b/libavcodec/arm/fmtconvert_init_arm.c +index de3b78b..92d94a0 100644 +--- a/libavcodec/arm/fmtconvert_init_arm.c ++++ b/libavcodec/arm/fmtconvert_init_arm.c +@@ -30,6 +30,9 @@ void ff_int32_to_float_fmul_scalar_neon(float *dst, const int *src, + + void ff_int32_to_float_fmul_scalar_vfp(float *dst, const int32_t *src, + float mul, int len); ++void ff_int32_to_float_fmul_array8_vfp(FmtConvertContext *c, float *dst, ++ const int32_t *src, const float *mul, ++ int len); + + void ff_float_to_int16_neon(int16_t *dst, const float *src, long len); + void ff_float_to_int16_interleave_neon(int16_t *, const float **, long, int); +@@ -42,10 +45,11 @@ av_cold void ff_fmt_convert_init_arm(FmtConvertContext *c, AVCodecContext *avctx + + if (have_vfp(cpu_flags) && have_armv6(cpu_flags)) { + if (!have_vfpv3(cpu_flags)) { +- // This function doesn't use anything armv6 specific in itself, ++ // These functions don't use anything armv6 specific in themselves, + // but ff_float_to_int16_vfp which is in the same assembly source + // file does, thus the whole file requires armv6 to be built. + c->int32_to_float_fmul_scalar = ff_int32_to_float_fmul_scalar_vfp; ++ c->int32_to_float_fmul_array8 = ff_int32_to_float_fmul_array8_vfp; + } + + c->float_to_int16 = ff_float_to_int16_vfp; +diff --git a/libavcodec/arm/fmtconvert_vfp.S b/libavcodec/arm/fmtconvert_vfp.S +index 3cc3e56..a6d4ebd 100644 +--- a/libavcodec/arm/fmtconvert_vfp.S ++++ b/libavcodec/arm/fmtconvert_vfp.S +@@ -83,6 +83,168 @@ endfunc + * Assume len is a multiple of 8, destination buffer is at least 4 bytes aligned + * (16 bytes alignment is best for BCM2835), little-endian. + */ ++@ void ff_int32_to_float_fmul_array8_vfp(FmtConvertContext *c, float *dst, const int32_t *src, const float *mul, int len) ++function ff_int32_to_float_fmul_array8_vfp, export=1 ++ push {lr} ++ ldr a1, [sp, #4] ++ subs lr, a1, #3*8 ++ bcc 50f @ too short to pipeline ++ @ Now need to find (len / 8) % 3. The approximation ++ @ x / 24 = (x * 0xAB) >> 12 ++ @ is good for x < 4096, which is true for both AC3 and DCA. ++ mov a1, #0xAB ++ ldr ip, =0x03070000 @ RunFast mode, short vectors of length 8, stride 1 ++ mul a1, lr, a1 ++ vpush {s16-s31} ++ mov a1, a1, lsr #12 ++ add a1, a1, a1, lsl #1 ++ rsb a1, a1, lr, lsr #3 ++ cmp a1, #1 ++ fmrx a1, FPSCR ++ fmxr FPSCR, ip ++ beq 11f ++ blo 10f ++ @ Array is (2 + multiple of 3) x 8 floats long ++ @ drop through... ++ vldmia a3!, {s16-s23} ++ vldmia a4!, {s2,s3} ++ vldmia a3!, {s24-s31} ++ vcvt.f32.s32 s16, s16 ++ vcvt.f32.s32 s17, s17 ++ vcvt.f32.s32 s18, s18 ++ vcvt.f32.s32 s19, s19 ++ vcvt.f32.s32 s20, s20 ++ vcvt.f32.s32 s21, s21 ++ vcvt.f32.s32 s22, s22 ++ vcvt.f32.s32 s23, s23 ++ vmul.f32 s16, s16, s2 ++ @ drop through... ++3: ++ vldmia a3!, {s8-s15} ++ vldmia a4!, {s1} ++ vcvt.f32.s32 s24, s24 ++ vcvt.f32.s32 s25, s25 ++ vcvt.f32.s32 s26, s26 ++ vcvt.f32.s32 s27, s27 ++ vcvt.f32.s32 s28, s28 ++ vcvt.f32.s32 s29, s29 ++ vcvt.f32.s32 s30, s30 ++ vcvt.f32.s32 s31, s31 ++ vmul.f32 s24, s24, s3 ++ vstmia a2!, {s16-s19} ++ vstmia a2!, {s20-s23} ++2: ++ vldmia a3!, {s16-s23} ++ vldmia a4!, {s2} ++ vcvt.f32.s32 s8, s8 ++ vcvt.f32.s32 s9, s9 ++ vcvt.f32.s32 s10, s10 ++ vcvt.f32.s32 s11, s11 ++ vcvt.f32.s32 s12, s12 ++ vcvt.f32.s32 s13, s13 ++ vcvt.f32.s32 s14, s14 ++ vcvt.f32.s32 s15, s15 ++ vmul.f32 s8, s8, s1 ++ vstmia a2!, {s24-s27} ++ vstmia a2!, {s28-s31} ++1: ++ vldmia a3!, {s24-s31} ++ vldmia a4!, {s3} ++ vcvt.f32.s32 s16, s16 ++ vcvt.f32.s32 s17, s17 ++ vcvt.f32.s32 s18, s18 ++ vcvt.f32.s32 s19, s19 ++ vcvt.f32.s32 s20, s20 ++ vcvt.f32.s32 s21, s21 ++ vcvt.f32.s32 s22, s22 ++ vcvt.f32.s32 s23, s23 ++ vmul.f32 s16, s16, s2 ++ vstmia a2!, {s8-s11} ++ vstmia a2!, {s12-s15} ++ ++ subs lr, lr, #8*3 ++ bpl 3b ++ ++ vcvt.f32.s32 s24, s24 ++ vcvt.f32.s32 s25, s25 ++ vcvt.f32.s32 s26, s26 ++ vcvt.f32.s32 s27, s27 ++ vcvt.f32.s32 s28, s28 ++ vcvt.f32.s32 s29, s29 ++ vcvt.f32.s32 s30, s30 ++ vcvt.f32.s32 s31, s31 ++ vmul.f32 s24, s24, s3 ++ vstmia a2!, {s16-s19} ++ vstmia a2!, {s20-s23} ++ vstmia a2!, {s24-s27} ++ vstmia a2!, {s28-s31} ++ ++ fmxr FPSCR, a1 ++ vpop {s16-s31} ++ pop {pc} ++ ++10: @ Array is (multiple of 3) x 8 floats long ++ vldmia a3!, {s8-s15} ++ vldmia a4!, {s1,s2} ++ vldmia a3!, {s16-s23} ++ vcvt.f32.s32 s8, s8 ++ vcvt.f32.s32 s9, s9 ++ vcvt.f32.s32 s10, s10 ++ vcvt.f32.s32 s11, s11 ++ vcvt.f32.s32 s12, s12 ++ vcvt.f32.s32 s13, s13 ++ vcvt.f32.s32 s14, s14 ++ vcvt.f32.s32 s15, s15 ++ vmul.f32 s8, s8, s1 ++ b 1b ++ ++11: @ Array is (1 + multiple of 3) x 8 floats long ++ vldmia a3!, {s24-s31} ++ vldmia a4!, {s3} ++ vldmia a3!, {s8-s15} ++ vldmia a4!, {s1} ++ vcvt.f32.s32 s24, s24 ++ vcvt.f32.s32 s25, s25 ++ vcvt.f32.s32 s26, s26 ++ vcvt.f32.s32 s27, s27 ++ vcvt.f32.s32 s28, s28 ++ vcvt.f32.s32 s29, s29 ++ vcvt.f32.s32 s30, s30 ++ vcvt.f32.s32 s31, s31 ++ vmul.f32 s24, s24, s3 ++ b 2b ++ ++50: ++ ldr lr, =0x03070000 @ RunFast mode, short vectors of length 8, stride 1 ++ fmrx ip, FPSCR ++ fmxr FPSCR, lr ++51: ++ vldmia a3!, {s8-s15} ++ vldmia a4!, {s0} ++ vcvt.f32.s32 s8, s8 ++ vcvt.f32.s32 s9, s9 ++ vcvt.f32.s32 s10, s10 ++ vcvt.f32.s32 s11, s11 ++ vcvt.f32.s32 s12, s12 ++ vcvt.f32.s32 s13, s13 ++ vcvt.f32.s32 s14, s14 ++ vcvt.f32.s32 s15, s15 ++ vmul.f32 s8, s8, s0 ++ subs a1, a1, #8 ++ vstmia a2!, {s8-s11} ++ vstmia a2!, {s12-s15} ++ bne 51b ++ ++ fmxr FPSCR, ip ++ pop {pc} ++endfunc ++ ++/** ++ * ARM VFP optimised int32 to float conversion. ++ * Assume len is a multiple of 8, destination buffer is at least 4 bytes aligned ++ * (16 bytes alignment is best for BCM2835), little-endian. ++ * TODO: could be further optimised by unrolling and interleaving, as above ++ */ + @ void ff_int32_to_float_fmul_scalar_vfp(float *dst, const int32_t *src, float mul, int len) + function ff_int32_to_float_fmul_scalar_vfp, export=1 + VFP tmp .req a4 +-- +1.7.9.5 diff --git a/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0045-ffmpeg-backport-arm-Add-VFP-accelerated-version-of-i.patch b/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0045-ffmpeg-backport-arm-Add-VFP-accelerated-version-of-i.patch new file mode 100644 index 0000000000..aef7f47ffd --- /dev/null +++ b/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0045-ffmpeg-backport-arm-Add-VFP-accelerated-version-of-i.patch @@ -0,0 +1,274 @@ +From 15520de67fc951213ab32661b8b368a9439e8b9a Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Martin=20Storsj=C3=B6?= +Date: Fri, 19 Jul 2013 10:59:17 +0300 +Subject: [PATCH 44/49] [ffmpeg] - backport - arm: Add VFP-accelerated version + of imdct_half +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + + Before After + Mean StdDev Mean StdDev Change +This function 2653.0 28.5 1108.8 51.4 +139.3% +Overall 17049.5 408.2 15973.0 223.2 +6.7% + +Signed-off-by: Martin Storsjö +--- + libavcodec/arm/Makefile | 1 + + libavcodec/arm/fft_init_arm.c | 9 ++ + libavcodec/arm/mdct_vfp.S | 205 ++++++++++++++++++++++++++++++ + 3 files changed, 215 insertions(+) + create mode 100644 libavcodec/arm/mdct_vfp.S + +diff --git a/libavcodec/arm/Makefile b/libavcodec/arm/Makefile +index aee9d73..27e80d5 100644 +--- a/libavcodec/arm/Makefile ++++ b/libavcodec/arm/Makefile +@@ -59,6 +59,7 @@ ARMV6-OBJS += arm/dsputil_init_armv6.o \ + arm/simple_idct_armv6.o \ + + VFP-OBJS-$(CONFIG_DCA_DECODER) += arm/synth_filter_vfp.o ++VFP-OBJS-$(CONFIG_MDCT) += arm/mdct_vfp.o + VFP-OBJS-$(HAVE_ARMV6) += arm/fmtconvert_vfp.o + + NEON-OBJS-$(CONFIG_FFT) += arm/fft_neon.o \ +diff --git a/libavcodec/arm/fft_init_arm.c b/libavcodec/arm/fft_init_arm.c +index fe0acc5..a000ea5 100644 +--- a/libavcodec/arm/fft_init_arm.c ++++ b/libavcodec/arm/fft_init_arm.c +@@ -26,6 +26,8 @@ + void ff_fft_permute_neon(FFTContext *s, FFTComplex *z); + void ff_fft_calc_neon(FFTContext *s, FFTComplex *z); + ++void ff_imdct_half_vfp(FFTContext *s, FFTSample *output, const FFTSample *input); ++ + void ff_imdct_calc_neon(FFTContext *s, FFTSample *output, const FFTSample *input); + void ff_imdct_half_neon(FFTContext *s, FFTSample *output, const FFTSample *input); + void ff_mdct_calc_neon(FFTContext *s, FFTSample *output, const FFTSample *input); +@@ -48,6 +50,13 @@ av_cold void ff_fft_init_arm(FFTContext *s) + { + int cpu_flags = av_get_cpu_flags(); + ++ if (have_vfp(cpu_flags)) { ++#if CONFIG_MDCT ++ if (!have_vfpv3(cpu_flags)) ++ s->imdct_half = ff_imdct_half_vfp; ++#endif ++ } ++ + if (have_neon(cpu_flags)) { + #if CONFIG_FFT + s->fft_permute = ff_fft_permute_neon; +diff --git a/libavcodec/arm/mdct_vfp.S b/libavcodec/arm/mdct_vfp.S +new file mode 100644 +index 0000000..0623e96 +--- /dev/null ++++ b/libavcodec/arm/mdct_vfp.S +@@ -0,0 +1,205 @@ ++/* ++ * Copyright (c) 2013 RISC OS Open Ltd ++ * Author: Ben Avison ++ * ++ * This file is part of Libav. ++ * ++ * Libav is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * Libav is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with Libav; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#include "libavutil/arm/asm.S" ++ ++CONTEXT .req a1 ++ORIGOUT .req a2 ++IN .req a3 ++OUT .req v1 ++REVTAB .req v2 ++TCOS .req v3 ++TSIN .req v4 ++OLDFPSCR .req v5 ++J0 .req a2 ++J1 .req a4 ++J2 .req ip ++J3 .req lr ++ ++.macro prerotation_innerloop ++ .set trig_lo, k ++ .set trig_hi, n4 - k - 2 ++ .set in_lo, trig_lo * 2 ++ .set in_hi, trig_hi * 2 ++ vldr d8, [TCOS, #trig_lo*4] @ s16,s17 ++ vldr d9, [TCOS, #trig_hi*4] @ s18,s19 ++ vldr s0, [IN, #in_hi*4 + 12] ++ vldr s1, [IN, #in_hi*4 + 4] ++ vldr s2, [IN, #in_lo*4 + 12] ++ vldr s3, [IN, #in_lo*4 + 4] ++ vmul.f s8, s0, s16 @ vector operation ++ vldr d10, [TSIN, #trig_lo*4] @ s20,s21 ++ vldr d11, [TSIN, #trig_hi*4] @ s22,s23 ++ vldr s4, [IN, #in_lo*4] ++ vldr s5, [IN, #in_lo*4 + 8] ++ vldr s6, [IN, #in_hi*4] ++ vldr s7, [IN, #in_hi*4 + 8] ++ ldr J0, [REVTAB, #trig_lo*2] ++ vmul.f s12, s0, s20 @ vector operation ++ ldr J2, [REVTAB, #trig_hi*2] ++ mov J1, J0, lsr #16 ++ and J0, J0, #255 @ halfword value will be < n4 ++ vmls.f s8, s4, s20 @ vector operation ++ mov J3, J2, lsr #16 ++ and J2, J2, #255 @ halfword value will be < n4 ++ add J0, OUT, J0, lsl #3 ++ vmla.f s12, s4, s16 @ vector operation ++ add J1, OUT, J1, lsl #3 ++ add J2, OUT, J2, lsl #3 ++ add J3, OUT, J3, lsl #3 ++ vstr s8, [J0] ++ vstr s9, [J1] ++ vstr s10, [J2] ++ vstr s11, [J3] ++ vstr s12, [J0, #4] ++ vstr s13, [J1, #4] ++ vstr s14, [J2, #4] ++ vstr s15, [J3, #4] ++ .set k, k + 2 ++.endm ++ ++.macro postrotation_innerloop tail, head ++ .set trig_lo_head, n8 - k - 2 ++ .set trig_hi_head, n8 + k ++ .set out_lo_head, trig_lo_head * 2 ++ .set out_hi_head, trig_hi_head * 2 ++ .set trig_lo_tail, n8 - (k - 2) - 2 ++ .set trig_hi_tail, n8 + (k - 2) ++ .set out_lo_tail, trig_lo_tail * 2 ++ .set out_hi_tail, trig_hi_tail * 2 ++ .if (k & 2) == 0 ++ TCOS_D0_HEAD .req d10 @ s20,s21 ++ TCOS_D1_HEAD .req d11 @ s22,s23 ++ TCOS_S0_TAIL .req s24 ++ .else ++ TCOS_D0_HEAD .req d12 @ s24,s25 ++ TCOS_D1_HEAD .req d13 @ s26,s27 ++ TCOS_S0_TAIL .req s20 ++ .endif ++ .ifnc "\tail","" ++ vmls.f s8, s0, TCOS_S0_TAIL @ vector operation ++ .endif ++ .ifnc "\head","" ++ vldr d8, [TSIN, #trig_lo_head*4] @ s16,s17 ++ vldr d9, [TSIN, #trig_hi_head*4] @ s18,s19 ++ vldr TCOS_D0_HEAD, [TCOS, #trig_lo_head*4] ++ .endif ++ .ifnc "\tail","" ++ vmla.f s12, s4, TCOS_S0_TAIL @ vector operation ++ .endif ++ .ifnc "\head","" ++ vldr s0, [OUT, #out_lo_head*4] ++ vldr s1, [OUT, #out_lo_head*4 + 8] ++ vldr s2, [OUT, #out_hi_head*4] ++ vldr s3, [OUT, #out_hi_head*4 + 8] ++ vldr s4, [OUT, #out_lo_head*4 + 4] ++ vldr s5, [OUT, #out_lo_head*4 + 12] ++ vldr s6, [OUT, #out_hi_head*4 + 4] ++ vldr s7, [OUT, #out_hi_head*4 + 12] ++ .endif ++ .ifnc "\tail","" ++ vstr s8, [OUT, #out_lo_tail*4] ++ vstr s9, [OUT, #out_lo_tail*4 + 8] ++ vstr s10, [OUT, #out_hi_tail*4] ++ vstr s11, [OUT, #out_hi_tail*4 + 8] ++ .endif ++ .ifnc "\head","" ++ vmul.f s8, s4, s16 @ vector operation ++ .endif ++ .ifnc "\tail","" ++ vstr s12, [OUT, #out_hi_tail*4 + 12] ++ vstr s13, [OUT, #out_hi_tail*4 + 4] ++ vstr s14, [OUT, #out_lo_tail*4 + 12] ++ vstr s15, [OUT, #out_lo_tail*4 + 4] ++ .endif ++ .ifnc "\head","" ++ vmul.f s12, s0, s16 @ vector operation ++ vldr TCOS_D1_HEAD, [TCOS, #trig_hi_head*4] ++ .endif ++ .unreq TCOS_D0_HEAD ++ .unreq TCOS_D1_HEAD ++ .unreq TCOS_S0_TAIL ++ .ifnc "\head","" ++ .set k, k + 2 ++ .endif ++.endm ++ ++ ++/* void ff_imdct_half_vfp(FFTContext *s, ++ * FFTSample *output, ++ * const FFTSample *input) ++ */ ++function ff_imdct_half_vfp, export=1 ++ ldr ip, [CONTEXT, #5*4] @ mdct_bits ++ teq ip, #6 ++ it ne ++ bne ff_imdct_half_c @ only case currently accelerated is the one used by DCA ++ ++ .set n, 1<<6 ++ .set n2, n/2 ++ .set n4, n/4 ++ .set n8, n/8 ++ ++ push {v1-v5,lr} ++ vpush {s16-s27} ++ fmrx OLDFPSCR, FPSCR ++ ldr lr, =0x03030000 @ RunFast mode, short vectors of length 4, stride 1 ++ fmxr FPSCR, lr ++ mov OUT, ORIGOUT ++ ldr REVTAB, [CONTEXT, #2*4] ++ ldr TCOS, [CONTEXT, #6*4] ++ ldr TSIN, [CONTEXT, #7*4] ++ ++ .set k, 0 ++ .rept n8/2 ++ prerotation_innerloop ++ .endr ++ ++ fmxr FPSCR, OLDFPSCR ++ mov a1, OUT ++ bl ff_fft16_vfp ++ ldr lr, =0x03030000 @ RunFast mode, short vectors of length 4, stride 1 ++ fmxr FPSCR, lr ++ ++ .set k, 0 ++ postrotation_innerloop , head ++ .rept n8/2 - 1 ++ postrotation_innerloop tail, head ++ .endr ++ postrotation_innerloop tail ++ ++ fmxr FPSCR, OLDFPSCR ++ vpop {s16-s27} ++ pop {v1-v5,pc} ++endfunc ++ ++ .unreq CONTEXT ++ .unreq ORIGOUT ++ .unreq IN ++ .unreq OUT ++ .unreq REVTAB ++ .unreq TCOS ++ .unreq TSIN ++ .unreq OLDFPSCR ++ .unreq J0 ++ .unreq J1 ++ .unreq J2 ++ .unreq J3 +-- +1.7.9.5 diff --git a/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0046-ffmpeg-backport-arm-Add-VFP-accelerated-version-of-d.patch b/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0046-ffmpeg-backport-arm-Add-VFP-accelerated-version-of-d.patch new file mode 100644 index 0000000000..2e0ea7815f --- /dev/null +++ b/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0046-ffmpeg-backport-arm-Add-VFP-accelerated-version-of-d.patch @@ -0,0 +1,58 @@ +From 8e0babd84c7e03cf678aab8bcf7e2106fe2b3de6 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Martin=20Storsj=C3=B6?= +Date: Fri, 19 Jul 2013 11:03:32 +0300 +Subject: [PATCH 45/49] [ffmpeg] - backport - arm: Add VFP-accelerated version + of dca_lfe_fir +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + + Before After + Mean StdDev Mean StdDev Change +This function 868.2 33.5 436.0 27.0 +99.1% +Overall 15973.0 223.2 15577.5 83.2 +2.5% + +Signed-off-by: Martin Storsjö +--- + libavcodec/arm/Makefile | 3 ++- + libavcodec/arm/dcadsp_init_arm.c | 4 ++++ + 2 files changed, 6 insertions(+), 1 deletion(-) + +diff --git a/libavcodec/arm/Makefile b/libavcodec/arm/Makefile +index 27e80d5..7fe5bb5 100644 +--- a/libavcodec/arm/Makefile ++++ b/libavcodec/arm/Makefile +@@ -58,7 +58,8 @@ ARMV6-OBJS += arm/dsputil_init_armv6.o \ + arm/dsputil_armv6.o \ + arm/simple_idct_armv6.o \ + +-VFP-OBJS-$(CONFIG_DCA_DECODER) += arm/synth_filter_vfp.o ++VFP-OBJS-$(CONFIG_DCA_DECODER) += arm/dcadsp_vfp.o \ ++ arm/synth_filter_vfp.o + VFP-OBJS-$(CONFIG_MDCT) += arm/mdct_vfp.o + VFP-OBJS-$(HAVE_ARMV6) += arm/fmtconvert_vfp.o + +diff --git a/libavcodec/arm/dcadsp_init_arm.c b/libavcodec/arm/dcadsp_init_arm.c +index 56568e0..a1efbff 100644 +--- a/libavcodec/arm/dcadsp_init_arm.c ++++ b/libavcodec/arm/dcadsp_init_arm.c +@@ -24,6 +24,8 @@ + #include "libavutil/attributes.h" + #include "libavcodec/dcadsp.h" + ++void ff_dca_lfe_fir_vfp(float *out, const float *in, const float *coefs, ++ int decifactor, float scale); + void ff_dca_lfe_fir_neon(float *out, const float *in, const float *coefs, + int decifactor, float scale); + +@@ -31,6 +33,8 @@ av_cold void ff_dcadsp_init_arm(DCADSPContext *s) + { + int cpu_flags = av_get_cpu_flags(); + ++ if (have_vfp(cpu_flags) && !have_vfpv3(cpu_flags)) ++ s->lfe_fir = ff_dca_lfe_fir_vfp; + if (have_neon(cpu_flags)) + s->lfe_fir = ff_dca_lfe_fir_neon; + } +-- +1.7.9.5 diff --git a/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0047-ffmpeg-backport-arm-Add-VFP-accelerated-version-of-f.patch b/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0047-ffmpeg-backport-arm-Add-VFP-accelerated-version-of-f.patch new file mode 100644 index 0000000000..37284fd7ed --- /dev/null +++ b/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0047-ffmpeg-backport-arm-Add-VFP-accelerated-version-of-f.patch @@ -0,0 +1,339 @@ +From 018b74ea9d8f52788db18ed40838afca05e7b4df Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Martin=20Storsj=C3=B6?= +Date: Fri, 19 Jul 2013 11:23:57 +0300 +Subject: [PATCH 46/49] [ffmpeg] - backport - arm: Add VFP-accelerated version + of fft16 +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + + Before After + Mean StdDev Mean StdDev Change +This function 1389.3 4.2 967.8 35.1 +43.6% +Overall 15577.5 83.2 15400.0 336.4 +1.2% + +Signed-off-by: Martin Storsjö +--- + libavcodec/arm/Makefile | 1 + + libavcodec/arm/fft_vfp.S | 298 +++++++++++++++++++++++++++++++++++ + 2 files changed, 299 insertions(+) + create mode 100644 libavcodec/arm/fft_vfp.S + +diff --git a/libavcodec/arm/Makefile b/libavcodec/arm/Makefile +index 7fe5bb5..7390a8b 100644 +--- a/libavcodec/arm/Makefile ++++ b/libavcodec/arm/Makefile +@@ -60,6 +60,7 @@ ARMV6-OBJS += arm/dsputil_init_armv6.o \ + + VFP-OBJS-$(CONFIG_DCA_DECODER) += arm/dcadsp_vfp.o \ + arm/synth_filter_vfp.o ++VFP-OBJS-$(CONFIG_FFT) += arm/fft_vfp.o + VFP-OBJS-$(CONFIG_MDCT) += arm/mdct_vfp.o + VFP-OBJS-$(HAVE_ARMV6) += arm/fmtconvert_vfp.o + +diff --git a/libavcodec/arm/fft_vfp.S b/libavcodec/arm/fft_vfp.S +new file mode 100644 +index 0000000..7845ebb +--- /dev/null ++++ b/libavcodec/arm/fft_vfp.S +@@ -0,0 +1,298 @@ ++/* ++ * Copyright (c) 2013 RISC OS Open Ltd ++ * Author: Ben Avison ++ * ++ * This file is part of Libav. ++ * ++ * Libav is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * Libav is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with Libav; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#include "libavutil/arm/asm.S" ++ ++@ TODO: * FFTs wider than 16 ++@ * dispatch code ++ ++function fft4_vfp ++ vldr d0, [a1, #0*2*4] @ s0,s1 = z[0] ++ vldr d4, [a1, #1*2*4] @ s8,s9 = z[1] ++ vldr d1, [a1, #2*2*4] @ s2,s3 = z[2] ++ vldr d5, [a1, #3*2*4] @ s10,s11 = z[3] ++ @ stall ++ vadd.f s12, s0, s8 @ i0 ++ vadd.f s13, s1, s9 @ i1 ++ vadd.f s14, s2, s10 @ i2 ++ vadd.f s15, s3, s11 @ i3 ++ vsub.f s8, s0, s8 @ i4 ++ vsub.f s9, s1, s9 @ i5 ++ vsub.f s10, s2, s10 @ i6 ++ vsub.f s11, s3, s11 @ i7 ++ @ stall ++ @ stall ++ vadd.f s0, s12, s14 @ z[0].re ++ vsub.f s4, s12, s14 @ z[2].re ++ vadd.f s1, s13, s15 @ z[0].im ++ vsub.f s5, s13, s15 @ z[2].im ++ vadd.f s7, s9, s10 @ z[3].im ++ vsub.f s3, s9, s10 @ z[1].im ++ vadd.f s2, s8, s11 @ z[1].re ++ vsub.f s6, s8, s11 @ z[3].re ++ @ stall ++ @ stall ++ vstr d0, [a1, #0*2*4] ++ vstr d2, [a1, #2*2*4] ++ @ stall ++ @ stall ++ vstr d1, [a1, #1*2*4] ++ vstr d3, [a1, #3*2*4] ++ ++ bx lr ++endfunc ++ ++.macro macro_fft8_head ++ @ FFT4 ++ vldr d4, [a1, #0 * 2*4] ++ vldr d6, [a1, #1 * 2*4] ++ vldr d5, [a1, #2 * 2*4] ++ vldr d7, [a1, #3 * 2*4] ++ @ BF ++ vldr d12, [a1, #4 * 2*4] ++ vadd.f s16, s8, s12 @ vector op ++ vldr d14, [a1, #5 * 2*4] ++ vldr d13, [a1, #6 * 2*4] ++ vldr d15, [a1, #7 * 2*4] ++ vsub.f s20, s8, s12 @ vector op ++ vadd.f s0, s16, s18 ++ vsub.f s2, s16, s18 ++ vadd.f s1, s17, s19 ++ vsub.f s3, s17, s19 ++ vadd.f s7, s21, s22 ++ vsub.f s5, s21, s22 ++ vadd.f s4, s20, s23 ++ vsub.f s6, s20, s23 ++ vsub.f s20, s24, s28 @ vector op ++ vstr d0, [a1, #0 * 2*4] @ transfer s0-s7 to s24-s31 via memory ++ vstr d1, [a1, #1 * 2*4] ++ vldr s0, cos1pi4 ++ vadd.f s16, s24, s28 @ vector op ++ vstr d2, [a1, #2 * 2*4] ++ vstr d3, [a1, #3 * 2*4] ++ vldr d12, [a1, #0 * 2*4] ++ @ TRANSFORM ++ vmul.f s20, s20, s0 @ vector x scalar op ++ vldr d13, [a1, #1 * 2*4] ++ vldr d14, [a1, #2 * 2*4] ++ vldr d15, [a1, #3 * 2*4] ++ @ BUTTERFLIES ++ vadd.f s0, s18, s16 ++ vadd.f s1, s17, s19 ++ vsub.f s2, s17, s19 ++ vsub.f s3, s18, s16 ++ vadd.f s4, s21, s20 ++ vsub.f s5, s21, s20 ++ vadd.f s6, s22, s23 ++ vsub.f s7, s22, s23 ++ vadd.f s8, s0, s24 @ vector op ++ vstr d0, [a1, #0 * 2*4] @ transfer s0-s3 to s12-s15 via memory ++ vstr d1, [a1, #1 * 2*4] ++ vldr d6, [a1, #0 * 2*4] ++ vldr d7, [a1, #1 * 2*4] ++ vadd.f s1, s5, s6 ++ vadd.f s0, s7, s4 ++ vsub.f s2, s5, s6 ++ vsub.f s3, s7, s4 ++ vsub.f s12, s24, s12 @ vector op ++ vsub.f s5, s29, s1 ++ vsub.f s4, s28, s0 ++ vsub.f s6, s30, s2 ++ vsub.f s7, s31, s3 ++ vadd.f s16, s0, s28 @ vector op ++ vstr d6, [a1, #4 * 2*4] ++ vstr d7, [a1, #6 * 2*4] ++ vstr d4, [a1, #0 * 2*4] ++ vstr d5, [a1, #2 * 2*4] ++ vstr d2, [a1, #5 * 2*4] ++ vstr d3, [a1, #7 * 2*4] ++.endm ++ ++.macro macro_fft8_tail ++ vstr d8, [a1, #1 * 2*4] ++ vstr d9, [a1, #3 * 2*4] ++.endm ++ ++function fft8_vfp ++ ldr a3, =0x03030000 @ RunFast mode, vector length 4, stride 1 ++ fmrx a2, FPSCR ++ fmxr FPSCR, a3 ++ vpush {s16-s31} ++ ++ macro_fft8_head ++ macro_fft8_tail ++ ++ vpop {s16-s31} ++ fmxr FPSCR, a2 ++ bx lr ++endfunc ++ ++.align 3 ++cos1pi4: @ cos(1*pi/4) = sqrt(2) ++ .float 0.707106769084930419921875 ++cos1pi8: @ cos(1*pi/8) = sqrt(2+sqrt(2))/2 ++ .float 0.92387950420379638671875 ++cos3pi8: @ cos(2*pi/8) = sqrt(2-sqrt(2))/2 ++ .float 0.3826834261417388916015625 ++ ++function ff_fft16_vfp, export=1 ++ ldr a3, =0x03030000 @ RunFast mode, vector length 4, stride 1 ++ fmrx a2, FPSCR ++ fmxr FPSCR, a3 ++ vpush {s16-s31} ++ ++ macro_fft8_head ++ @ FFT4(z+8) ++ vldr d10, [a1, #8 * 2*4] ++ vldr d12, [a1, #9 * 2*4] ++ vldr d11, [a1, #10 * 2*4] ++ vldr d13, [a1, #11 * 2*4] ++ macro_fft8_tail ++ vadd.f s16, s20, s24 @ vector op ++ @ FFT4(z+12) ++ vldr d4, [a1, #12 * 2*4] ++ vldr d6, [a1, #13 * 2*4] ++ vldr d5, [a1, #14 * 2*4] ++ vsub.f s20, s20, s24 @ vector op ++ vldr d7, [a1, #15 * 2*4] ++ vadd.f s0, s16, s18 ++ vsub.f s4, s16, s18 ++ vadd.f s1, s17, s19 ++ vsub.f s5, s17, s19 ++ vadd.f s7, s21, s22 ++ vsub.f s3, s21, s22 ++ vadd.f s2, s20, s23 ++ vsub.f s6, s20, s23 ++ vadd.f s16, s8, s12 @ vector op ++ vstr d0, [a1, #8 * 2*4] ++ vstr d2, [a1, #10 * 2*4] ++ vstr d1, [a1, #9 * 2*4] ++ vsub.f s20, s8, s12 ++ vstr d3, [a1, #11 * 2*4] ++ @ TRANSFORM(z[2],z[6],z[10],z[14],cos1pi4,cos1pi4) ++ vldr d12, [a1, #10 * 2*4] ++ vadd.f s0, s16, s18 ++ vadd.f s1, s17, s19 ++ vsub.f s6, s16, s18 ++ vsub.f s7, s17, s19 ++ vsub.f s3, s21, s22 ++ vadd.f s2, s20, s23 ++ vadd.f s5, s21, s22 ++ vsub.f s4, s20, s23 ++ vstr d0, [a1, #12 * 2*4] ++ vmov s0, s6 ++ @ TRANSFORM(z[1],z[5],z[9],z[13],cos1pi8,cos3pi8) ++ vldr d6, [a1, #9 * 2*4] ++ vstr d1, [a1, #13 * 2*4] ++ vldr d1, cos1pi4 @ s2 = cos1pi4, s3 = cos1pi8 ++ vstr d2, [a1, #15 * 2*4] ++ vldr d7, [a1, #13 * 2*4] ++ vadd.f s4, s25, s24 ++ vsub.f s5, s25, s24 ++ vsub.f s6, s0, s7 ++ vadd.f s7, s0, s7 ++ vmul.f s20, s12, s3 @ vector op ++ @ TRANSFORM(z[3],z[7],z[11],z[15],cos3pi8,cos1pi8) ++ vldr d4, [a1, #11 * 2*4] ++ vldr d5, [a1, #15 * 2*4] ++ vldr s1, cos3pi8 ++ vmul.f s24, s4, s2 @ vector * scalar op ++ vmul.f s28, s12, s1 @ vector * scalar op ++ vmul.f s12, s8, s1 @ vector * scalar op ++ vadd.f s4, s20, s29 ++ vsub.f s5, s21, s28 ++ vsub.f s6, s22, s31 ++ vadd.f s7, s23, s30 ++ vmul.f s8, s8, s3 @ vector * scalar op ++ vldr d8, [a1, #1 * 2*4] ++ vldr d9, [a1, #5 * 2*4] ++ vldr d10, [a1, #3 * 2*4] ++ vldr d11, [a1, #7 * 2*4] ++ vldr d14, [a1, #2 * 2*4] ++ vadd.f s0, s6, s4 ++ vadd.f s1, s5, s7 ++ vsub.f s2, s5, s7 ++ vsub.f s3, s6, s4 ++ vadd.f s4, s12, s9 ++ vsub.f s5, s13, s8 ++ vsub.f s6, s14, s11 ++ vadd.f s7, s15, s10 ++ vadd.f s12, s0, s16 @ vector op ++ vstr d0, [a1, #1 * 2*4] ++ vstr d1, [a1, #5 * 2*4] ++ vldr d4, [a1, #1 * 2*4] ++ vldr d5, [a1, #5 * 2*4] ++ vadd.f s0, s6, s4 ++ vadd.f s1, s5, s7 ++ vsub.f s2, s5, s7 ++ vsub.f s3, s6, s4 ++ vsub.f s8, s16, s8 @ vector op ++ vstr d6, [a1, #1 * 2*4] ++ vstr d7, [a1, #5 * 2*4] ++ vldr d15, [a1, #6 * 2*4] ++ vsub.f s4, s20, s0 ++ vsub.f s5, s21, s1 ++ vsub.f s6, s22, s2 ++ vsub.f s7, s23, s3 ++ vadd.f s20, s0, s20 @ vector op ++ vstr d4, [a1, #9 * 2*4] ++ @ TRANSFORM_ZERO(z[0],z[4],z[8],z[12]) ++ vldr d6, [a1, #8 * 2*4] ++ vstr d5, [a1, #13 * 2*4] ++ vldr d7, [a1, #12 * 2*4] ++ vstr d2, [a1, #11 * 2*4] ++ vldr d8, [a1, #0 * 2*4] ++ vstr d3, [a1, #15 * 2*4] ++ vldr d9, [a1, #4 * 2*4] ++ vadd.f s0, s26, s24 ++ vadd.f s1, s25, s27 ++ vsub.f s2, s25, s27 ++ vsub.f s3, s26, s24 ++ vadd.f s4, s14, s12 ++ vadd.f s5, s13, s15 ++ vsub.f s6, s13, s15 ++ vsub.f s7, s14, s12 ++ vadd.f s8, s0, s28 @ vector op ++ vstr d0, [a1, #3 * 2*4] ++ vstr d1, [a1, #7 * 2*4] ++ vldr d6, [a1, #3 * 2*4] ++ vldr d7, [a1, #7 * 2*4] ++ vsub.f s0, s16, s4 ++ vsub.f s1, s17, s5 ++ vsub.f s2, s18, s6 ++ vsub.f s3, s19, s7 ++ vsub.f s12, s28, s12 @ vector op ++ vadd.f s16, s4, s16 @ vector op ++ vstr d10, [a1, #3 * 2*4] ++ vstr d11, [a1, #7 * 2*4] ++ vstr d4, [a1, #2 * 2*4] ++ vstr d5, [a1, #6 * 2*4] ++ vstr d0, [a1, #8 * 2*4] ++ vstr d1, [a1, #12 * 2*4] ++ vstr d6, [a1, #10 * 2*4] ++ vstr d7, [a1, #14 * 2*4] ++ vstr d8, [a1, #0 * 2*4] ++ vstr d9, [a1, #4 * 2*4] ++ ++ vpop {s16-s31} ++ fmxr FPSCR, a2 ++ bx lr ++endfunc +-- +1.7.9.5 diff --git a/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0048-ffmpeg-backport-dcadsp-Add-a-new-method-qmf_32_subba.patch b/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0048-ffmpeg-backport-dcadsp-Add-a-new-method-qmf_32_subba.patch new file mode 100644 index 0000000000..1fdb8c0ae9 --- /dev/null +++ b/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0048-ffmpeg-backport-dcadsp-Add-a-new-method-qmf_32_subba.patch @@ -0,0 +1,140 @@ +From ed16009b0a05fbd344832d5ad2e982c169aec42c Mon Sep 17 00:00:00 2001 +From: Ben Avison +Date: Mon, 15 Jul 2013 18:28:16 +0100 +Subject: [PATCH 47/49] [ffmpeg] - backport - dcadsp: Add a new method, + qmf_32_subbands +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +This does most of the work formerly carried out by +the static function qmf_32_subbands() in dcadec.c. + +Signed-off-by: Martin Storsjö +--- + libavcodec/dcadec.c | 26 +++++--------------------- + libavcodec/dcadsp.c | 30 ++++++++++++++++++++++++++++++ + libavcodec/dcadsp.h | 9 +++++++++ + 3 files changed, 44 insertions(+), 21 deletions(-) + +diff --git a/libavcodec/dcadec.c b/libavcodec/dcadec.c +index b648613..4054d63 100644 +--- a/libavcodec/dcadec.c ++++ b/libavcodec/dcadec.c +@@ -1108,10 +1108,8 @@ static void qmf_32_subbands(DCAContext *s, int chans, + float scale) + { + const float *prCoeff; +- int i; + + int sb_act = s->subband_activity[chans]; +- int subindex; + + scale *= sqrt(1 / 8.0); + +@@ -1121,25 +1119,11 @@ static void qmf_32_subbands(DCAContext *s, int chans, + else /* Perfect reconstruction */ + prCoeff = fir_32bands_perfect; + +- for (i = sb_act; i < 32; i++) +- s->raXin[i] = 0.0; +- +- /* Reconstructed channel sample index */ +- for (subindex = 0; subindex < 8; subindex++) { +- /* Load in one sample from each subband and clear inactive subbands */ +- for (i = 0; i < sb_act; i++) { +- unsigned sign = (i - 1) & 2; +- uint32_t v = AV_RN32A(&samples_in[i][subindex]) ^ sign << 30; +- AV_WN32A(&s->raXin[i], v); +- } +- +- s->synth.synth_filter_float(&s->imdct, +- s->subband_fir_hist[chans], +- &s->hist_index[chans], +- s->subband_fir_noidea[chans], prCoeff, +- samples_out, s->raXin, scale); +- samples_out += 32; +- } ++ s->dcadsp.qmf_32_subbands(samples_in, sb_act, &s->synth, &s->imdct, ++ s->subband_fir_hist[chans], ++ &s->hist_index[chans], ++ s->subband_fir_noidea[chans], prCoeff, ++ samples_out, s->raXin, scale); + } + + static void lfe_interpolation_fir(DCAContext *s, int decimation_select, +diff --git a/libavcodec/dcadsp.c b/libavcodec/dcadsp.c +index dd4994d..ab63f1b 100644 +--- a/libavcodec/dcadsp.c ++++ b/libavcodec/dcadsp.c +@@ -20,6 +20,7 @@ + */ + + #include "config.h" ++#include "libavutil/intreadwrite.h" + #include "dcadsp.h" + + static void dca_lfe_fir_c(float *out, const float *in, const float *coefs, +@@ -44,8 +45,37 @@ static void dca_lfe_fir_c(float *out, const float *in, const float *coefs, + } + } + ++static void dca_qmf_32_subbands(float samples_in[32][8], int sb_act, ++ SynthFilterContext *synth, FFTContext *imdct, ++ float synth_buf_ptr[512], ++ int *synth_buf_offset, float synth_buf2[32], ++ const float window[512], float *samples_out, ++ float raXin[32], float scale) ++{ ++ int i; ++ int subindex; ++ ++ for (i = sb_act; i < 32; i++) ++ raXin[i] = 0.0; ++ ++ /* Reconstructed channel sample index */ ++ for (subindex = 0; subindex < 8; subindex++) { ++ /* Load in one sample from each subband and clear inactive subbands */ ++ for (i = 0; i < sb_act; i++) { ++ unsigned sign = (i - 1) & 2; ++ uint32_t v = AV_RN32A(&samples_in[i][subindex]) ^ sign << 30; ++ AV_WN32A(&raXin[i], v); ++ } ++ ++ synth->synth_filter_float(imdct, synth_buf_ptr, synth_buf_offset, ++ synth_buf2, window, samples_out, raXin, scale); ++ samples_out += 32; ++ } ++} ++ + void ff_dcadsp_init(DCADSPContext *s) + { + s->lfe_fir = dca_lfe_fir_c; ++ s->qmf_32_subbands = dca_qmf_32_subbands; + if (ARCH_ARM) ff_dcadsp_init_arm(s); + } +diff --git a/libavcodec/dcadsp.h b/libavcodec/dcadsp.h +index bb157f7..d86c1f3 100644 +--- a/libavcodec/dcadsp.h ++++ b/libavcodec/dcadsp.h +@@ -19,9 +19,18 @@ + #ifndef AVCODEC_DCADSP_H + #define AVCODEC_DCADSP_H + ++#include "avfft.h" ++#include "synth_filter.h" ++ + typedef struct DCADSPContext { + void (*lfe_fir)(float *out, const float *in, const float *coefs, + int decifactor, float scale); ++ void (*qmf_32_subbands)(float samples_in[32][8], int sb_act, ++ SynthFilterContext *synth, FFTContext *imdct, ++ float synth_buf_ptr[512], ++ int *synth_buf_offset, float synth_buf2[32], ++ const float window[512], float *samples_out, ++ float raXin[32], float scale); + } DCADSPContext; + + void ff_dcadsp_init(DCADSPContext *s); +-- +1.7.9.5 diff --git a/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0049-ffmpeg-backport-arm-Add-VFP-accelerated-version-of-q.patch b/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0049-ffmpeg-backport-arm-Add-VFP-accelerated-version-of-q.patch new file mode 100644 index 0000000000..72e0ff21d4 --- /dev/null +++ b/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0049-ffmpeg-backport-arm-Add-VFP-accelerated-version-of-q.patch @@ -0,0 +1,551 @@ +From a6c273927c5bb212e806be6ae10c81dcd81b2152 Mon Sep 17 00:00:00 2001 +From: Ben Avison +Date: Mon, 15 Jul 2013 18:28:17 +0100 +Subject: [PATCH 48/49] [ffmpeg] - backport - arm: Add VFP-accelerated version + of qmf_32_subbands +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + + Before After + Mean StdDev Mean StdDev Change +This function 1323.0 98.0 746.2 60.6 +77.3% +Overall 15400.0 336.4 14147.5 288.4 +8.9% + +Signed-off-by: Martin Storsjö +--- + libavcodec/arm/dcadsp_init_arm.c | 10 +- + libavcodec/arm/dcadsp_vfp.S | 493 +++++++++++++++++++++++++++ + 2 files changed, 502 insertions(+), 1 deletion(-) + create mode 100644 libavcodec/arm/dcadsp_vfp.S + +diff --git a/libavcodec/arm/dcadsp_init_arm.c b/libavcodec/arm/dcadsp_init_arm.c +index a1efbff..58267a2 100644 +--- a/libavcodec/arm/dcadsp_init_arm.c ++++ b/libavcodec/arm/dcadsp_init_arm.c +@@ -26,6 +26,12 @@ + + void ff_dca_lfe_fir_vfp(float *out, const float *in, const float *coefs, + int decifactor, float scale); ++void ff_dca_qmf_32_subbands_vfp(float samples_in[32][8], int sb_act, ++ SynthFilterContext *synth, FFTContext *imdct, ++ float synth_buf_ptr[512], ++ int *synth_buf_offset, float synth_buf2[32], ++ const float window[512], float *samples_out, ++ float raXin[32], float scale); + void ff_dca_lfe_fir_neon(float *out, const float *in, const float *coefs, + int decifactor, float scale); + +@@ -33,8 +39,10 @@ av_cold void ff_dcadsp_init_arm(DCADSPContext *s) + { + int cpu_flags = av_get_cpu_flags(); + +- if (have_vfp(cpu_flags) && !have_vfpv3(cpu_flags)) ++ if (have_vfp(cpu_flags) && !have_vfpv3(cpu_flags)) { + s->lfe_fir = ff_dca_lfe_fir_vfp; ++ s->qmf_32_subbands = ff_dca_qmf_32_subbands_vfp; ++ } + if (have_neon(cpu_flags)) + s->lfe_fir = ff_dca_lfe_fir_neon; + } +diff --git a/libavcodec/arm/dcadsp_vfp.S b/libavcodec/arm/dcadsp_vfp.S +new file mode 100644 +index 0000000..6039e87 +--- /dev/null ++++ b/libavcodec/arm/dcadsp_vfp.S +@@ -0,0 +1,493 @@ ++/* ++ * Copyright (c) 2013 RISC OS Open Ltd ++ * Author: Ben Avison ++ * ++ * This file is part of Libav. ++ * ++ * Libav is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * Libav is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with Libav; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#include "libavutil/arm/asm.S" ++ ++POUT .req a1 ++PIN .req a2 ++PCOEF .req a3 ++DECIFACTOR .req a4 ++OLDFPSCR .req a4 ++COUNTER .req ip ++ ++SCALE32 .req s28 @ use vector of 4 in place of 9th scalar when decifactor=32 / JMAX=8 ++SCALE64 .req s0 @ spare register in scalar bank when decifactor=64 / JMAX=4 ++IN0 .req s4 ++IN1 .req s5 ++IN2 .req s6 ++IN3 .req s7 ++IN4 .req s0 ++IN5 .req s1 ++IN6 .req s2 ++IN7 .req s3 ++COEF0 .req s8 @ coefficient elements ++COEF1 .req s9 ++COEF2 .req s10 ++COEF3 .req s11 ++COEF4 .req s12 ++COEF5 .req s13 ++COEF6 .req s14 ++COEF7 .req s15 ++ACCUM0 .req s16 @ double-buffered multiply-accumulate results ++ACCUM4 .req s20 ++POST0 .req s24 @ do long-latency post-multiply in this vector in parallel ++POST1 .req s25 ++POST2 .req s26 ++POST3 .req s27 ++ ++ ++.macro inner_loop decifactor, dir, tail, head ++ .ifc "\dir","up" ++ .set X, 0 ++ .set Y, 4 ++ .else ++ .set X, 4*JMAX*4 - 4 ++ .set Y, -4 ++ .endif ++ .ifnc "\head","" ++ vldr COEF0, [PCOEF, #X + (0*JMAX + 0) * Y] ++ vldr COEF1, [PCOEF, #X + (1*JMAX + 0) * Y] ++ vldr COEF2, [PCOEF, #X + (2*JMAX + 0) * Y] ++ vldr COEF3, [PCOEF, #X + (3*JMAX + 0) * Y] ++ .endif ++ .ifnc "\tail","" ++ vadd.f POST0, ACCUM0, ACCUM4 @ vector operation ++ .endif ++ .ifnc "\head","" ++ vmul.f ACCUM0, COEF0, IN0 @ vector = vector * scalar ++ vldr COEF4, [PCOEF, #X + (0*JMAX + 1) * Y] ++ vldr COEF5, [PCOEF, #X + (1*JMAX + 1) * Y] ++ vldr COEF6, [PCOEF, #X + (2*JMAX + 1) * Y] ++ .endif ++ .ifnc "\tail","" ++ vmul.f POST0, POST0, SCALE\decifactor @ vector operation (SCALE may be scalar) ++ .endif ++ .ifnc "\head","" ++ vldr COEF7, [PCOEF, #X + (3*JMAX + 1) * Y] ++ .ifc "\tail","" ++ vmul.f ACCUM4, COEF4, IN1 @ vector operation ++ .endif ++ vldr COEF0, [PCOEF, #X + (0*JMAX + 2) * Y] ++ vldr COEF1, [PCOEF, #X + (1*JMAX + 2) * Y] ++ .ifnc "\tail","" ++ vmul.f ACCUM4, COEF4, IN1 @ vector operation ++ .endif ++ vldr COEF2, [PCOEF, #X + (2*JMAX + 2) * Y] ++ vldr COEF3, [PCOEF, #X + (3*JMAX + 2) * Y] ++ .endif ++ .ifnc "\tail","" ++ vstmia POUT!, {POST0-POST3} ++ .endif ++ .ifnc "\head","" ++ vmla.f ACCUM0, COEF0, IN2 @ vector = vector * scalar ++ vldr COEF4, [PCOEF, #X + (0*JMAX + 3) * Y] ++ vldr COEF5, [PCOEF, #X + (1*JMAX + 3) * Y] ++ vldr COEF6, [PCOEF, #X + (2*JMAX + 3) * Y] ++ vldr COEF7, [PCOEF, #X + (3*JMAX + 3) * Y] ++ vmla.f ACCUM4, COEF4, IN3 @ vector = vector * scalar ++ .if \decifactor == 32 ++ vldr COEF0, [PCOEF, #X + (0*JMAX + 4) * Y] ++ vldr COEF1, [PCOEF, #X + (1*JMAX + 4) * Y] ++ vldr COEF2, [PCOEF, #X + (2*JMAX + 4) * Y] ++ vldr COEF3, [PCOEF, #X + (3*JMAX + 4) * Y] ++ vmla.f ACCUM0, COEF0, IN4 @ vector = vector * scalar ++ vldr COEF4, [PCOEF, #X + (0*JMAX + 5) * Y] ++ vldr COEF5, [PCOEF, #X + (1*JMAX + 5) * Y] ++ vldr COEF6, [PCOEF, #X + (2*JMAX + 5) * Y] ++ vldr COEF7, [PCOEF, #X + (3*JMAX + 5) * Y] ++ vmla.f ACCUM4, COEF4, IN5 @ vector = vector * scalar ++ vldr COEF0, [PCOEF, #X + (0*JMAX + 6) * Y] ++ vldr COEF1, [PCOEF, #X + (1*JMAX + 6) * Y] ++ vldr COEF2, [PCOEF, #X + (2*JMAX + 6) * Y] ++ vldr COEF3, [PCOEF, #X + (3*JMAX + 6) * Y] ++ vmla.f ACCUM0, COEF0, IN6 @ vector = vector * scalar ++ vldr COEF4, [PCOEF, #X + (0*JMAX + 7) * Y] ++ vldr COEF5, [PCOEF, #X + (1*JMAX + 7) * Y] ++ vldr COEF6, [PCOEF, #X + (2*JMAX + 7) * Y] ++ vldr COEF7, [PCOEF, #X + (3*JMAX + 7) * Y] ++ vmla.f ACCUM4, COEF4, IN7 @ vector = vector * scalar ++ .endif ++ .endif ++.endm ++ ++.macro dca_lfe_fir decifactor ++ .if \decifactor == 32 ++ .set JMAX, 8 ++ vpush {s16-s31} ++ vmov SCALE32, s0 @ duplicate scalar across vector ++ vldr IN4, [PIN, #-4*4] ++ vldr IN5, [PIN, #-5*4] ++ vldr IN6, [PIN, #-6*4] ++ vldr IN7, [PIN, #-7*4] ++ .else ++ .set JMAX, 4 ++ vpush {s16-s27} ++ .endif ++ ++ mov COUNTER, #\decifactor/4 - 1 ++ inner_loop \decifactor, up,, head ++1: add PCOEF, PCOEF, #4*JMAX*4 ++ subs COUNTER, COUNTER, #1 ++ inner_loop \decifactor, up, tail, head ++ bne 1b ++ inner_loop \decifactor, up, tail ++ ++ mov COUNTER, #\decifactor/4 - 1 ++ inner_loop \decifactor, down,, head ++1: sub PCOEF, PCOEF, #4*JMAX*4 ++ subs COUNTER, COUNTER, #1 ++ inner_loop \decifactor, down, tail, head ++ bne 1b ++ inner_loop \decifactor, down, tail ++ ++ .if \decifactor == 32 ++ vpop {s16-s31} ++ .else ++ vpop {s16-s27} ++ .endif ++ fmxr FPSCR, OLDFPSCR ++ bx lr ++.endm ++ ++ ++/* void ff_dca_lfe_fir_vfp(float *out, const float *in, const float *coefs, ++ * int decifactor, float scale) ++ */ ++function ff_dca_lfe_fir_vfp, export=1 ++ teq DECIFACTOR, #32 ++ fmrx OLDFPSCR, FPSCR ++ ldr ip, =0x03030000 @ RunFast mode, short vectors of length 4, stride 1 ++ fmxr FPSCR, ip ++NOVFP vldr s0, [sp] ++ vldr IN0, [PIN, #-0*4] ++ vldr IN1, [PIN, #-1*4] ++ vldr IN2, [PIN, #-2*4] ++ vldr IN3, [PIN, #-3*4] ++ beq 32f ++64: dca_lfe_fir 64 ++ .ltorg ++32: dca_lfe_fir 32 ++endfunc ++ ++ .unreq POUT ++ .unreq PIN ++ .unreq PCOEF ++ .unreq DECIFACTOR ++ .unreq OLDFPSCR ++ .unreq COUNTER ++ ++ .unreq SCALE32 ++ .unreq SCALE64 ++ .unreq IN0 ++ .unreq IN1 ++ .unreq IN2 ++ .unreq IN3 ++ .unreq IN4 ++ .unreq IN5 ++ .unreq IN6 ++ .unreq IN7 ++ .unreq COEF0 ++ .unreq COEF1 ++ .unreq COEF2 ++ .unreq COEF3 ++ .unreq COEF4 ++ .unreq COEF5 ++ .unreq COEF6 ++ .unreq COEF7 ++ .unreq ACCUM0 ++ .unreq ACCUM4 ++ .unreq POST0 ++ .unreq POST1 ++ .unreq POST2 ++ .unreq POST3 ++ ++ ++IN .req a1 ++SBACT .req a2 ++OLDFPSCR .req a3 ++IMDCT .req a4 ++WINDOW .req v1 ++OUT .req v2 ++BUF .req v3 ++SCALEINT .req v4 @ only used in softfp case ++COUNT .req v5 ++ ++SCALE .req s0 ++ ++/* Stack layout differs in softfp and hardfp cases: ++ * ++ * hardfp ++ * fp -> 6 arg words saved by caller ++ * a3,a4,v1-v3,v5,fp,lr on entry (a3 just to pad to 8 bytes) ++ * s16-s23 on entry ++ * align 16 ++ * buf -> 8*32*4 bytes buffer ++ * s0 on entry ++ * sp -> 3 arg words for callee ++ * ++ * softfp ++ * fp -> 7 arg words saved by caller ++ * a4,v1-v5,fp,lr on entry ++ * s16-s23 on entry ++ * align 16 ++ * buf -> 8*32*4 bytes buffer ++ * sp -> 4 arg words for callee ++ */ ++ ++/* void ff_dca_qmf_32_subbands_vfp(float samples_in[32][8], int sb_act, ++ * SynthFilterContext *synth, FFTContext *imdct, ++ * float (*synth_buf_ptr)[512], ++ * int *synth_buf_offset, float (*synth_buf2)[32], ++ * const float (*window)[512], float *samples_out, ++ * float (*raXin)[32], float scale); ++ */ ++function ff_dca_qmf_32_subbands_vfp, export=1 ++VFP push {a3-a4,v1-v3,v5,fp,lr} ++NOVFP push {a4,v1-v5,fp,lr} ++ add fp, sp, #8*4 ++ vpush {s16-s23} ++ @ The buffer pointed at by raXin isn't big enough for us to do a ++ @ complete matrix transposition as we want to, so allocate an ++ @ alternative buffer from the stack. Align to 4 words for speed. ++ sub BUF, sp, #8*32*4 ++ bic BUF, BUF, #15 ++ mov sp, BUF ++ ldr lr, =0x03330000 @ RunFast mode, short vectors of length 4, stride 2 ++ fmrx OLDFPSCR, FPSCR ++ fmxr FPSCR, lr ++ @ COUNT is used to count down 2 things at once: ++ @ bits 0-4 are the number of word pairs remaining in the output row ++ @ bits 5-31 are the number of words to copy (with possible negation) ++ @ from the source matrix before we start zeroing the remainder ++ mov COUNT, #(-4 << 5) + 16 ++ adds COUNT, COUNT, SBACT, lsl #5 ++ bmi 2f ++1: ++ vldr s8, [IN, #(0*8+0)*4] ++ vldr s10, [IN, #(0*8+1)*4] ++ vldr s12, [IN, #(0*8+2)*4] ++ vldr s14, [IN, #(0*8+3)*4] ++ vldr s16, [IN, #(0*8+4)*4] ++ vldr s18, [IN, #(0*8+5)*4] ++ vldr s20, [IN, #(0*8+6)*4] ++ vldr s22, [IN, #(0*8+7)*4] ++ vneg.f s8, s8 ++ vldr s9, [IN, #(1*8+0)*4] ++ vldr s11, [IN, #(1*8+1)*4] ++ vldr s13, [IN, #(1*8+2)*4] ++ vldr s15, [IN, #(1*8+3)*4] ++ vneg.f s16, s16 ++ vldr s17, [IN, #(1*8+4)*4] ++ vldr s19, [IN, #(1*8+5)*4] ++ vldr s21, [IN, #(1*8+6)*4] ++ vldr s23, [IN, #(1*8+7)*4] ++ vstr d4, [BUF, #(0*32+0)*4] ++ vstr d5, [BUF, #(1*32+0)*4] ++ vstr d6, [BUF, #(2*32+0)*4] ++ vstr d7, [BUF, #(3*32+0)*4] ++ vstr d8, [BUF, #(4*32+0)*4] ++ vstr d9, [BUF, #(5*32+0)*4] ++ vstr d10, [BUF, #(6*32+0)*4] ++ vstr d11, [BUF, #(7*32+0)*4] ++ vldr s9, [IN, #(3*8+0)*4] ++ vldr s11, [IN, #(3*8+1)*4] ++ vldr s13, [IN, #(3*8+2)*4] ++ vldr s15, [IN, #(3*8+3)*4] ++ vldr s17, [IN, #(3*8+4)*4] ++ vldr s19, [IN, #(3*8+5)*4] ++ vldr s21, [IN, #(3*8+6)*4] ++ vldr s23, [IN, #(3*8+7)*4] ++ vneg.f s9, s9 ++ vldr s8, [IN, #(2*8+0)*4] ++ vldr s10, [IN, #(2*8+1)*4] ++ vldr s12, [IN, #(2*8+2)*4] ++ vldr s14, [IN, #(2*8+3)*4] ++ vneg.f s17, s17 ++ vldr s16, [IN, #(2*8+4)*4] ++ vldr s18, [IN, #(2*8+5)*4] ++ vldr s20, [IN, #(2*8+6)*4] ++ vldr s22, [IN, #(2*8+7)*4] ++ vstr d4, [BUF, #(0*32+2)*4] ++ vstr d5, [BUF, #(1*32+2)*4] ++ vstr d6, [BUF, #(2*32+2)*4] ++ vstr d7, [BUF, #(3*32+2)*4] ++ vstr d8, [BUF, #(4*32+2)*4] ++ vstr d9, [BUF, #(5*32+2)*4] ++ vstr d10, [BUF, #(6*32+2)*4] ++ vstr d11, [BUF, #(7*32+2)*4] ++ add IN, IN, #4*8*4 ++ add BUF, BUF, #4*4 ++ subs COUNT, COUNT, #(4 << 5) + 2 ++ bpl 1b ++2: @ Now deal with trailing < 4 samples ++ adds COUNT, COUNT, #3 << 5 ++ bmi 4f @ sb_act was a multiple of 4 ++ bics lr, COUNT, #0x1F ++ bne 3f ++ @ sb_act was n*4+1 ++ vldr s8, [IN, #(0*8+0)*4] ++ vldr s10, [IN, #(0*8+1)*4] ++ vldr s12, [IN, #(0*8+2)*4] ++ vldr s14, [IN, #(0*8+3)*4] ++ vldr s16, [IN, #(0*8+4)*4] ++ vldr s18, [IN, #(0*8+5)*4] ++ vldr s20, [IN, #(0*8+6)*4] ++ vldr s22, [IN, #(0*8+7)*4] ++ vneg.f s8, s8 ++ vldr s9, zero ++ vldr s11, zero ++ vldr s13, zero ++ vldr s15, zero ++ vneg.f s16, s16 ++ vldr s17, zero ++ vldr s19, zero ++ vldr s21, zero ++ vldr s23, zero ++ vstr d4, [BUF, #(0*32+0)*4] ++ vstr d5, [BUF, #(1*32+0)*4] ++ vstr d6, [BUF, #(2*32+0)*4] ++ vstr d7, [BUF, #(3*32+0)*4] ++ vstr d8, [BUF, #(4*32+0)*4] ++ vstr d9, [BUF, #(5*32+0)*4] ++ vstr d10, [BUF, #(6*32+0)*4] ++ vstr d11, [BUF, #(7*32+0)*4] ++ add BUF, BUF, #2*4 ++ sub COUNT, COUNT, #1 ++ b 4f ++3: @ sb_act was n*4+2 or n*4+3, so do the first 2 ++ vldr s8, [IN, #(0*8+0)*4] ++ vldr s10, [IN, #(0*8+1)*4] ++ vldr s12, [IN, #(0*8+2)*4] ++ vldr s14, [IN, #(0*8+3)*4] ++ vldr s16, [IN, #(0*8+4)*4] ++ vldr s18, [IN, #(0*8+5)*4] ++ vldr s20, [IN, #(0*8+6)*4] ++ vldr s22, [IN, #(0*8+7)*4] ++ vneg.f s8, s8 ++ vldr s9, [IN, #(1*8+0)*4] ++ vldr s11, [IN, #(1*8+1)*4] ++ vldr s13, [IN, #(1*8+2)*4] ++ vldr s15, [IN, #(1*8+3)*4] ++ vneg.f s16, s16 ++ vldr s17, [IN, #(1*8+4)*4] ++ vldr s19, [IN, #(1*8+5)*4] ++ vldr s21, [IN, #(1*8+6)*4] ++ vldr s23, [IN, #(1*8+7)*4] ++ vstr d4, [BUF, #(0*32+0)*4] ++ vstr d5, [BUF, #(1*32+0)*4] ++ vstr d6, [BUF, #(2*32+0)*4] ++ vstr d7, [BUF, #(3*32+0)*4] ++ vstr d8, [BUF, #(4*32+0)*4] ++ vstr d9, [BUF, #(5*32+0)*4] ++ vstr d10, [BUF, #(6*32+0)*4] ++ vstr d11, [BUF, #(7*32+0)*4] ++ add BUF, BUF, #2*4 ++ sub COUNT, COUNT, #(2 << 5) + 1 ++ bics lr, COUNT, #0x1F ++ bne 4f ++ @ sb_act was n*4+3 ++ vldr s8, [IN, #(2*8+0)*4] ++ vldr s10, [IN, #(2*8+1)*4] ++ vldr s12, [IN, #(2*8+2)*4] ++ vldr s14, [IN, #(2*8+3)*4] ++ vldr s16, [IN, #(2*8+4)*4] ++ vldr s18, [IN, #(2*8+5)*4] ++ vldr s20, [IN, #(2*8+6)*4] ++ vldr s22, [IN, #(2*8+7)*4] ++ vldr s9, zero ++ vldr s11, zero ++ vldr s13, zero ++ vldr s15, zero ++ vldr s17, zero ++ vldr s19, zero ++ vldr s21, zero ++ vldr s23, zero ++ vstr d4, [BUF, #(0*32+0)*4] ++ vstr d5, [BUF, #(1*32+0)*4] ++ vstr d6, [BUF, #(2*32+0)*4] ++ vstr d7, [BUF, #(3*32+0)*4] ++ vstr d8, [BUF, #(4*32+0)*4] ++ vstr d9, [BUF, #(5*32+0)*4] ++ vstr d10, [BUF, #(6*32+0)*4] ++ vstr d11, [BUF, #(7*32+0)*4] ++ add BUF, BUF, #2*4 ++ sub COUNT, COUNT, #1 ++4: @ Now fill the remainder with 0 ++ vldr s8, zero ++ vldr s9, zero ++ ands COUNT, COUNT, #0x1F ++ beq 6f ++5: vstr d4, [BUF, #(0*32+0)*4] ++ vstr d4, [BUF, #(1*32+0)*4] ++ vstr d4, [BUF, #(2*32+0)*4] ++ vstr d4, [BUF, #(3*32+0)*4] ++ vstr d4, [BUF, #(4*32+0)*4] ++ vstr d4, [BUF, #(5*32+0)*4] ++ vstr d4, [BUF, #(6*32+0)*4] ++ vstr d4, [BUF, #(7*32+0)*4] ++ add BUF, BUF, #2*4 ++ subs COUNT, COUNT, #1 ++ bne 5b ++6: ++ fmxr FPSCR, OLDFPSCR ++ ldr WINDOW, [fp, #3*4] ++ ldr OUT, [fp, #4*4] ++ sub BUF, BUF, #32*4 ++NOVFP ldr SCALEINT, [fp, #6*4] ++ mov COUNT, #8 ++VFP vpush {SCALE} ++VFP sub sp, sp, #3*4 ++NOVFP sub sp, sp, #4*4 ++7: ++VFP ldr a1, [fp, #-7*4] @ imdct ++NOVFP ldr a1, [fp, #-8*4] ++ ldmia fp, {a2-a4} ++VFP stmia sp, {WINDOW, OUT, BUF} ++NOVFP stmia sp, {WINDOW, OUT, BUF, SCALEINT} ++VFP vldr SCALE, [sp, #3*4] ++ bl ff_synth_filter_float_vfp ++ add OUT, OUT, #32*4 ++ add BUF, BUF, #32*4 ++ subs COUNT, COUNT, #1 ++ bne 7b ++ ++A sub sp, fp, #(8+8)*4 ++T sub fp, fp, #(8+8)*4 ++T mov sp, fp ++ vpop {s16-s23} ++VFP pop {a3-a4,v1-v3,v5,fp,pc} ++NOVFP pop {a4,v1-v5,fp,pc} ++endfunc ++ ++ .unreq IN ++ .unreq SBACT ++ .unreq OLDFPSCR ++ .unreq IMDCT ++ .unreq WINDOW ++ .unreq OUT ++ .unreq BUF ++ .unreq SCALEINT ++ .unreq COUNT ++ ++ .unreq SCALE ++ ++ .align 2 ++zero: .word 0 +-- +1.7.9.5 diff --git a/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0050-ffmpeg-backport-arm-Mangle-external-symbols-properly.patch b/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0050-ffmpeg-backport-arm-Mangle-external-symbols-properly.patch new file mode 100644 index 0000000000..1b64e2bdb2 --- /dev/null +++ b/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0050-ffmpeg-backport-arm-Mangle-external-symbols-properly.patch @@ -0,0 +1,64 @@ +From 101f5a2c5db12605c24fe4aa41b3fabacfd3bad3 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Martin=20Storsj=C3=B6?= +Date: Mon, 22 Jul 2013 12:33:22 +0300 +Subject: [PATCH 49/49] [ffmpeg] - backport - arm: Mangle external symbols + properly in new vfp assembly files + +Reviewed-by: Kostya Shishkov +Signed-off-by: Michael Niedermayer +--- + libavcodec/arm/dcadsp_vfp.S | 2 +- + libavcodec/arm/mdct_vfp.S | 4 ++-- + libavcodec/arm/synth_filter_vfp.S | 2 +- + 3 files changed, 4 insertions(+), 4 deletions(-) + +diff --git a/libavcodec/arm/dcadsp_vfp.S b/libavcodec/arm/dcadsp_vfp.S +index 6039e87..5892a84 100644 +--- a/libavcodec/arm/dcadsp_vfp.S ++++ b/libavcodec/arm/dcadsp_vfp.S +@@ -463,7 +463,7 @@ NOVFP ldr a1, [fp, #-8*4] + VFP stmia sp, {WINDOW, OUT, BUF} + NOVFP stmia sp, {WINDOW, OUT, BUF, SCALEINT} + VFP vldr SCALE, [sp, #3*4] +- bl ff_synth_filter_float_vfp ++ bl X(ff_synth_filter_float_vfp) + add OUT, OUT, #32*4 + add BUF, BUF, #32*4 + subs COUNT, COUNT, #1 +diff --git a/libavcodec/arm/mdct_vfp.S b/libavcodec/arm/mdct_vfp.S +index 0623e96..94db24f 100644 +--- a/libavcodec/arm/mdct_vfp.S ++++ b/libavcodec/arm/mdct_vfp.S +@@ -151,7 +151,7 @@ function ff_imdct_half_vfp, export=1 + ldr ip, [CONTEXT, #5*4] @ mdct_bits + teq ip, #6 + it ne +- bne ff_imdct_half_c @ only case currently accelerated is the one used by DCA ++ bne X(ff_imdct_half_c) @ only case currently accelerated is the one used by DCA + + .set n, 1<<6 + .set n2, n/2 +@@ -175,7 +175,7 @@ function ff_imdct_half_vfp, export=1 + + fmxr FPSCR, OLDFPSCR + mov a1, OUT +- bl ff_fft16_vfp ++ bl X(ff_fft16_vfp) + ldr lr, =0x03030000 @ RunFast mode, short vectors of length 4, stride 1 + fmxr FPSCR, lr + +diff --git a/libavcodec/arm/synth_filter_vfp.S b/libavcodec/arm/synth_filter_vfp.S +index c219c41..e6e6408 100644 +--- a/libavcodec/arm/synth_filter_vfp.S ++++ b/libavcodec/arm/synth_filter_vfp.S +@@ -132,7 +132,7 @@ function ff_synth_filter_float_vfp, export=1 + str lr, [P_SB_OFF] @ rotate offset, modulo buffer size, ready for next call + ldr a3, [sp, #(16+6+2)*4] @ fetch in from stack, to pass to imdct_half + VFP vmov s16, SCALE @ imdct_half is free to corrupt s0, but it contains one of our arguments in hardfp case +- bl ff_imdct_half_vfp ++ bl X(ff_imdct_half_vfp) + VFP vmov SCALE, s16 + + fmrx OLDFPSCR, FPSCR +-- +1.7.9.5 diff --git a/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0051-ffmpeg-backport-avio-Add-an-internal-function-for-re.patch b/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0051-ffmpeg-backport-avio-Add-an-internal-function-for-re.patch new file mode 100644 index 0000000000..1b17ab596c --- /dev/null +++ b/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0051-ffmpeg-backport-avio-Add-an-internal-function-for-re.patch @@ -0,0 +1,72 @@ +From 5ce8f2bf354b7adf904ac3e1438915586c5a0bb1 Mon Sep 17 00:00:00 2001 +From: Ben Avison +Date: Wed, 31 Jul 2013 23:46:08 +0100 +Subject: [PATCH 51/54] [ffmpeg] - backport - avio: Add an internal function + for reading without copying +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +As long as there is enough contiguous data in the avio buffer, +just return a pointer to it instead of copying it to the caller +provided buffer. + +Signed-off-by: Martin Storsjö +--- + libavformat/avio_internal.h | 17 +++++++++++++++++ + libavformat/aviobuf.c | 12 ++++++++++++ + 2 files changed, 29 insertions(+) + +diff --git a/libavformat/avio_internal.h b/libavformat/avio_internal.h +index cf36764..e9ece57 100644 +--- a/libavformat/avio_internal.h ++++ b/libavformat/avio_internal.h +@@ -38,6 +38,23 @@ int ffio_init_context(AVIOContext *s, + + + /** ++ * Read size bytes from AVIOContext, returning a pointer. ++ * Note that the data pointed at by the returned pointer is only ++ * valid until the next call that references the same IO context. ++ * @param s IO context ++ * @param buf pointer to buffer into which to assemble the requested ++ * data if it is not available in contiguous addresses in the ++ * underlying buffer ++ * @param size number of bytes requested ++ * @param data address at which to store pointer: this will be a ++ * a direct pointer into the underlying buffer if the requested ++ * number of bytes are available at contiguous addresses, otherwise ++ * will be a copy of buf ++ * @return number of bytes read or AVERROR ++ */ ++int ffio_read_indirect(AVIOContext *s, unsigned char *buf, int size, unsigned char **data); ++ ++/** + * Read size bytes from AVIOContext into buf. + * This reads at most 1 packet. If that is not enough fewer bytes will be + * returned. +diff --git a/libavformat/aviobuf.c b/libavformat/aviobuf.c +index 7a73a17..465c46d 100644 +--- a/libavformat/aviobuf.c ++++ b/libavformat/aviobuf.c +@@ -522,6 +522,18 @@ int avio_read(AVIOContext *s, unsigned char *buf, int size) + return size1 - size; + } + ++int ffio_read_indirect(AVIOContext *s, unsigned char *buf, int size, unsigned char **data) ++{ ++ if (s->buf_end - s->buf_ptr >= size && !s->write_flag) { ++ *data = s->buf_ptr; ++ s->buf_ptr += size; ++ return size; ++ } else { ++ *data = buf; ++ return avio_read(s, buf, size); ++ } ++} ++ + int ffio_read_partial(AVIOContext *s, unsigned char *buf, int size) + { + int len; +-- +1.7.9.5 diff --git a/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0052-ffmpeg-backport-mpegts-Remove-one-memcpy-per-packet.patch b/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0052-ffmpeg-backport-mpegts-Remove-one-memcpy-per-packet.patch new file mode 100644 index 0000000000..3bc1814dde --- /dev/null +++ b/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0052-ffmpeg-backport-mpegts-Remove-one-memcpy-per-packet.patch @@ -0,0 +1,149 @@ +From 1496d8c12075c0f3783e348a5d73fef9e3000b0f Mon Sep 17 00:00:00 2001 +From: Ben Avison +Date: Wed, 31 Jul 2013 23:46:08 +0100 +Subject: [PATCH 52/54] [ffmpeg] - backport - mpegts: Remove one memcpy per + packet +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +This was being performed to ensure that a complete packet was held in +contiguous memory, prior to parsing the packet. However, the source buffer +is typically large enough that the packet was already contiguous, so it is +beneficial to return the packet by reference in most cases. + + Before After + Mean StdDev Mean StdDev Change +memcpy 720.7 32.7 649.8 25.1 +10.9% +Overall 2372.7 46.1 2291.7 21.8 +3.5% + +Signed-off-by: Martin Storsjö +--- + libavformat/mpegts.c | 41 ++++++++++++++++++++++++++------------- + 1 file changed, 28 insertions(+), 13 deletions(-) + +diff --git a/libavformat/mpegts.c b/libavformat/mpegts.c +index b5f5d63..5307521 100644 +--- a/libavformat/mpegts.c ++++ b/libavformat/mpegts.c +@@ -1863,17 +1863,17 @@ static int mpegts_resync(AVFormatContext *s) + } + + /* return -1 if error or EOF. Return 0 if OK. */ +-static int read_packet(AVFormatContext *s, uint8_t *buf, int raw_packet_size) ++static int read_packet(AVFormatContext *s, uint8_t *buf, int raw_packet_size, uint8_t **data) + { + AVIOContext *pb = s->pb; +- int skip, len; ++ int len; + + for(;;) { +- len = avio_read(pb, buf, TS_PACKET_SIZE); ++ len = ffio_read_indirect(pb, buf, TS_PACKET_SIZE, data); + if (len != TS_PACKET_SIZE) + return len < 0 ? len : AVERROR_EOF; + /* check packet sync byte */ +- if (buf[0] != 0x47) { ++ if ((*data)[0] != 0x47) { + /* find a new packet start */ + avio_seek(pb, -TS_PACKET_SIZE, SEEK_CUR); + if (mpegts_resync(s) < 0) +@@ -1881,19 +1881,25 @@ static int read_packet(AVFormatContext *s, uint8_t *buf, int raw_packet_size) + else + continue; + } else { +- skip = raw_packet_size - TS_PACKET_SIZE; +- if (skip > 0) +- avio_skip(pb, skip); + break; + } + } + return 0; + } + ++static void finished_reading_packet(AVFormatContext *s, int raw_packet_size) ++{ ++ AVIOContext *pb = s->pb; ++ int skip = raw_packet_size - TS_PACKET_SIZE; ++ if (skip > 0) ++ avio_skip(pb, skip); ++} ++ + static int handle_packets(MpegTSContext *ts, int nb_packets) + { + AVFormatContext *s = ts->stream; + uint8_t packet[TS_PACKET_SIZE + FF_INPUT_BUFFER_PADDING_SIZE]; ++ uint8_t *data; + int packet_num, ret = 0; + + if (avio_tell(s->pb) != ts->last_pos) { +@@ -1926,10 +1932,11 @@ static int handle_packets(MpegTSContext *ts, int nb_packets) + if (ts->stop_parse > 0) + break; + +- ret = read_packet(s, packet, ts->raw_packet_size); ++ ret = read_packet(s, packet, ts->raw_packet_size, &data); + if (ret != 0) + break; +- ret = handle_packet(ts, packet); ++ ret = handle_packet(ts, data); ++ finished_reading_packet(s, ts->raw_packet_size); + if (ret != 0) + break; + } +@@ -2087,6 +2094,7 @@ static int mpegts_read_header(AVFormatContext *s) + int64_t pcrs[2], pcr_h; + int packet_count[2]; + uint8_t packet[TS_PACKET_SIZE]; ++ uint8_t *data; + + /* only read packets */ + +@@ -2102,18 +2110,21 @@ static int mpegts_read_header(AVFormatContext *s) + nb_pcrs = 0; + nb_packets = 0; + for(;;) { +- ret = read_packet(s, packet, ts->raw_packet_size); ++ ret = read_packet(s, packet, ts->raw_packet_size, &data); + if (ret < 0) + return -1; +- pid = AV_RB16(packet + 1) & 0x1fff; ++ pid = AV_RB16(data + 1) & 0x1fff; + if ((pcr_pid == -1 || pcr_pid == pid) && +- parse_pcr(&pcr_h, &pcr_l, packet) == 0) { ++ parse_pcr(&pcr_h, &pcr_l, data) == 0) { ++ finished_reading_packet(s, ts->raw_packet_size); + pcr_pid = pid; + packet_count[nb_pcrs] = nb_packets; + pcrs[nb_pcrs] = pcr_h * 300 + pcr_l; + nb_pcrs++; + if (nb_pcrs >= 2) + break; ++ } else { ++ finished_reading_packet(s, ts->raw_packet_size); + } + nb_packets++; + } +@@ -2145,15 +2156,19 @@ static int mpegts_raw_read_packet(AVFormatContext *s, + int64_t pcr_h, next_pcr_h, pos; + int pcr_l, next_pcr_l; + uint8_t pcr_buf[12]; ++ uint8_t *data; + + if (av_new_packet(pkt, TS_PACKET_SIZE) < 0) + return AVERROR(ENOMEM); + pkt->pos= avio_tell(s->pb); +- ret = read_packet(s, pkt->data, ts->raw_packet_size); ++ ret = read_packet(s, pkt->data, ts->raw_packet_size, &data); + if (ret < 0) { + av_free_packet(pkt); + return ret; + } ++ if (data != pkt->data) ++ memcpy(pkt->data, data, ts->raw_packet_size); ++ finished_reading_packet(s, ts->raw_packet_size); + if (ts->mpeg2ts_compute_pcr) { + /* compute exact PCR for each packet */ + if (parse_pcr(&pcr_h, &pcr_l, pkt->data) == 0) { +-- +1.7.9.5 diff --git a/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0053-ffmpeg-backport-mpegts-Make-discard_pid-faster-for-s.patch b/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0053-ffmpeg-backport-mpegts-Make-discard_pid-faster-for-s.patch new file mode 100644 index 0000000000..744f7683d5 --- /dev/null +++ b/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0053-ffmpeg-backport-mpegts-Make-discard_pid-faster-for-s.patch @@ -0,0 +1,47 @@ +From 6aec5772fd5331b3514f308ab0895f6234b60045 Mon Sep 17 00:00:00 2001 +From: Ben Avison +Date: Mon, 5 Aug 2013 13:12:51 +0100 +Subject: [PATCH 53/54] [ffmpeg] - backport - mpegts: Make discard_pid() + faster for single-program streams +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +When a stream contains a single program, there's no point in doing a +PID -> program lookup. Normally the one and only program isn't disabled, +so no packets should be discarded. + + Before After + Mean StdDev Mean StdDev Change +discard_pid() 73.8 9.4 20.2 1.5 +264.8% +Overall 2300.8 28.0 2253.1 20.6 +2.1% + +Signed-off-by: Martin Storsjö +--- + libavformat/mpegts.c | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +diff --git a/libavformat/mpegts.c b/libavformat/mpegts.c +index 5307521..82dd209 100644 +--- a/libavformat/mpegts.c ++++ b/libavformat/mpegts.c +@@ -268,6 +268,17 @@ static int discard_pid(MpegTSContext *ts, unsigned int pid) + int i, j, k; + int used = 0, discarded = 0; + struct Program *p; ++ ++ /* If none of the programs have .discard=AVDISCARD_ALL then there's ++ * no way we have to discard this packet ++ */ ++ for (k = 0; k < ts->stream->nb_programs; k++) { ++ if (ts->stream->programs[k]->discard == AVDISCARD_ALL) ++ break; ++ } ++ if (k == ts->stream->nb_programs) ++ return 0; ++ + for(i=0; inb_prg; i++) { + p = &ts->prg[i]; + for(j=0; jnb_pids; j++) { +-- +1.7.9.5 diff --git a/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0054-ffmpeg-backport-mpegts-Remove-one-64-bit-integer-mod.patch b/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0054-ffmpeg-backport-mpegts-Remove-one-64-bit-integer-mod.patch new file mode 100644 index 0000000000..e684da9133 --- /dev/null +++ b/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0054-ffmpeg-backport-mpegts-Remove-one-64-bit-integer-mod.patch @@ -0,0 +1,76 @@ +From b79aa2b89ed9027a72a10c1d26ccdf2bb385d57b Mon Sep 17 00:00:00 2001 +From: Ben Avison +Date: Mon, 5 Aug 2013 13:12:49 +0100 +Subject: [PATCH 54/54] [ffmpeg] - backport - mpegts: Remove one 64-bit + integer modulus operation per packet +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +The common case of the pointer having increased by one packet (which results +in no change to the modulus) can be detected with a 64-bit subtraction, +which is far cheaper than a division on many platforms. + + Before After + Mean StdDev Mean StdDev Change +Divisions 248.3 8.8 51.5 7.4 +381.7% +Overall 2773.2 25.6 2372.5 43.1 +16.9% + +Signed-off-by: Martin Storsjö +--- + libavcodec/mathops.h | 9 +++++++++ + libavformat/mpegts.c | 5 ++++- + 2 files changed, 13 insertions(+), 1 deletion(-) + +diff --git a/libavcodec/mathops.h b/libavcodec/mathops.h +index 592f5a5..1d57342 100644 +--- a/libavcodec/mathops.h ++++ b/libavcodec/mathops.h +@@ -195,6 +195,15 @@ if ((y) < (x)) {\ + # define FASTDIV(a,b) ((uint32_t)((((uint64_t)a) * ff_inverse[b]) >> 32)) + #endif /* FASTDIV */ + ++#ifndef MOD_UNLIKELY ++# define MOD_UNLIKELY(modulus, dividend, divisor, prev_dividend) \ ++ do { \ ++ if ((prev_dividend) == 0 || (dividend) - (prev_dividend) != (divisor)) \ ++ (modulus) = (dividend) % (divisor); \ ++ (prev_dividend) = (dividend); \ ++ } while (0) ++#endif ++ + static inline av_const unsigned int ff_sqrt(unsigned int a) + { + unsigned int b; +diff --git a/libavformat/mpegts.c b/libavformat/mpegts.c +index 82dd209..b995f60 100644 +--- a/libavformat/mpegts.c ++++ b/libavformat/mpegts.c +@@ -28,6 +28,7 @@ + #include "libavutil/avassert.h" + #include "libavcodec/bytestream.h" + #include "libavcodec/get_bits.h" ++#include "libavcodec/mathops.h" + #include "avformat.h" + #include "mpegts.h" + #include "internal.h" +@@ -99,6 +100,8 @@ struct MpegTSContext { + int raw_packet_size; + + int pos47; ++ /** position corresponding to pos47, or 0 if pos47 invalid */ ++ int64_t pos; + + /** if true, all pids are analyzed to find streams */ + int auto_guess; +@@ -1814,7 +1817,7 @@ static int handle_packet(MpegTSContext *ts, const uint8_t *packet) + return 0; + + pos = avio_tell(ts->stream->pb); +- ts->pos47= pos % ts->raw_packet_size; ++ MOD_UNLIKELY(ts->pos47, pos, ts->raw_packet_size, ts->pos); + + if (tss->type == MPEGTS_SECTION) { + if (is_start) { +-- +1.7.9.5 diff --git a/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0055-ffmpeg-backport-fix-compilation-droid-gcc-4-7.patch b/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0055-ffmpeg-backport-fix-compilation-droid-gcc-4-7.patch new file mode 100644 index 0000000000..5e986fe0df --- /dev/null +++ b/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-0055-ffmpeg-backport-fix-compilation-droid-gcc-4-7.patch @@ -0,0 +1,110 @@ +From 8067f55edf3719182aed6e5b57b7863889f80218 Mon Sep 17 00:00:00 2001 +From: =?utf8?q?Reimar=20D=C3=B6ffinger?= +Date: Sat, 16 Mar 2013 13:36:20 +0100 +Subject: [PATCH] Fix compilation on ARM with android gcc 4.7 +MIME-Version: 1.0 +Content-Type: text/plain; charset=utf8 +Content-Transfer-Encoding: 8bit + +With the current code it fails due to running out +of registers. +So code the store offsets manually into the assembler +instead. +Passes "make fate-dts". + +Signed-off-by: Reimar Döffinger +--- + libavcodec/arm/dca.h | 74 ++++++++++++++++++++++++-------------------------- + 1 file changed, 36 insertions(+), 38 deletions(-) + +diff --git a/libavcodec/arm/dca.h b/libavcodec/arm/dca.h +index 2cfd18a..431b62e 100644 +--- a/libavcodec/arm/dca.h ++++ b/libavcodec/arm/dca.h +@@ -34,46 +34,44 @@ static inline int decode_blockcodes(int code1, int code2, int levels, + { + int v0, v1, v2, v3, v4, v5; + +- __asm__ ("smmul %8, %14, %18 \n" +- "smmul %11, %15, %18 \n" +- "smlabb %14, %8, %17, %14 \n" +- "smlabb %15, %11, %17, %15 \n" +- "smmul %9, %8, %18 \n" +- "smmul %12, %11, %18 \n" +- "sub %14, %14, %16, lsr #1 \n" +- "sub %15, %15, %16, lsr #1 \n" +- "smlabb %8, %9, %17, %8 \n" +- "smlabb %11, %12, %17, %11 \n" +- "smmul %10, %9, %18 \n" +- "smmul %13, %12, %18 \n" +- "str %14, %0 \n" +- "str %15, %4 \n" +- "sub %8, %8, %16, lsr #1 \n" +- "sub %11, %11, %16, lsr #1 \n" +- "smlabb %9, %10, %17, %9 \n" +- "smlabb %12, %13, %17, %12 \n" +- "smmul %14, %10, %18 \n" +- "smmul %15, %13, %18 \n" +- "str %8, %1 \n" +- "str %11, %5 \n" +- "sub %9, %9, %16, lsr #1 \n" +- "sub %12, %12, %16, lsr #1 \n" +- "smlabb %10, %14, %17, %10 \n" +- "smlabb %13, %15, %17, %13 \n" +- "str %9, %2 \n" +- "str %12, %6 \n" +- "sub %10, %10, %16, lsr #1 \n" +- "sub %13, %13, %16, lsr #1 \n" +- "str %10, %3 \n" +- "str %13, %7 \n" +- : "=m"(values[0]), "=m"(values[1]), +- "=m"(values[2]), "=m"(values[3]), +- "=m"(values[4]), "=m"(values[5]), +- "=m"(values[6]), "=m"(values[7]), +- "=&r"(v0), "=&r"(v1), "=&r"(v2), ++ __asm__ ("smmul %0, %6, %10 \n" ++ "smmul %3, %7, %10 \n" ++ "smlabb %6, %0, %9, %6 \n" ++ "smlabb %7, %3, %9, %7 \n" ++ "smmul %1, %0, %10 \n" ++ "smmul %4, %3, %10 \n" ++ "sub %6, %6, %8, lsr #1 \n" ++ "sub %7, %7, %8, lsr #1 \n" ++ "smlabb %0, %1, %9, %0 \n" ++ "smlabb %3, %4, %9, %3 \n" ++ "smmul %2, %1, %10 \n" ++ "smmul %5, %4, %10 \n" ++ "str %6, [%11, #0] \n" ++ "str %7, [%11, #16] \n" ++ "sub %0, %0, %8, lsr #1 \n" ++ "sub %3, %3, %8, lsr #1 \n" ++ "smlabb %1, %2, %9, %1 \n" ++ "smlabb %4, %5, %9, %4 \n" ++ "smmul %6, %2, %10 \n" ++ "smmul %7, %5, %10 \n" ++ "str %0, [%11, #4] \n" ++ "str %3, [%11, #20] \n" ++ "sub %1, %1, %8, lsr #1 \n" ++ "sub %4, %4, %8, lsr #1 \n" ++ "smlabb %2, %6, %9, %2 \n" ++ "smlabb %5, %7, %9, %5 \n" ++ "str %1, [%11, #8] \n" ++ "str %4, [%11, #24] \n" ++ "sub %2, %2, %8, lsr #1 \n" ++ "sub %5, %5, %8, lsr #1 \n" ++ "str %2, [%11, #12] \n" ++ "str %5, [%11, #28] \n" ++ : "=&r"(v0), "=&r"(v1), "=&r"(v2), + "=&r"(v3), "=&r"(v4), "=&r"(v5), + "+&r"(code1), "+&r"(code2) +- : "r"(levels - 1), "r"(-levels), "r"(ff_inverse[levels])); ++ : "r"(levels - 1), "r"(-levels), ++ "r"(ff_inverse[levels]), "r"(values) ++ : "memory"); + + return code1 | code2; + } +-- +1.7.10.4 + + diff --git a/packages/multimedia/ffmpeg/patches/1.2.1/ffmpeg-901.01-add_xvba_support.patch b/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-901.01-add_xvba_support.patch similarity index 88% rename from packages/multimedia/ffmpeg/patches/1.2.1/ffmpeg-901.01-add_xvba_support.patch rename to packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-901.01-add_xvba_support.patch index f384f8632f..7cab84567d 100644 --- a/packages/multimedia/ffmpeg/patches/1.2.1/ffmpeg-901.01-add_xvba_support.patch +++ b/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-901.01-add_xvba_support.patch @@ -1,42 +1,15 @@ -From 67895a77c9e5f519166dd0ce4a2a98649194b11b Mon Sep 17 00:00:00 2001 -From: Rainer Hochecker -Date: Sat, 8 Oct 2011 16:45:13 +0200 -Subject: [PATCH] ffmpeg: add xvba hwaccel - ---- - configure | 11 ++ - libavcodec/Makefile | 6 ++ - libavcodec/allcodecs.c | 4 + - libavcodec/h264.c | 3 + - libavcodec/xvba.c | 66 ++++++++++++ - libavcodec/xvba.h | 71 +++++++++++++ - libavcodec/xvba_h264.c | 192 ++++++++++++++++++++++++++++++++++ - libavcodec/xvba_internal.h | 24 +++++ - libavcodec/xvba_mpeg2.c | 52 +++++++++ - libavcodec/xvba_vc1.c | 190 +++++++++++++++++++++++++++++++++ - libavutil/pixdesc.c | 6 ++ - libavutil/pixfmt.h | 1 + - 12 files changed, 626 insertions(+) - create mode 100644 libavcodec/xvba.c - create mode 100644 libavcodec/xvba.h - create mode 100644 libavcodec/xvba_h264.c - create mode 100644 libavcodec/xvba_internal.h - create mode 100644 libavcodec/xvba_mpeg2.c - create mode 100644 libavcodec/xvba_vc1.c - -diff --git a/configure b/configure -index 351611d..876a6ea 100755 ---- a/configure -+++ b/configure -@@ -144,6 +144,7 @@ Hardware accelerators: - --enable-vaapi enable VAAPI code +diff -Naur ffmpeg-1.2.3/configure ffmpeg-1.2.3.patch/configure +--- ffmpeg-1.2.3/configure 2013-09-09 22:46:04.636832059 +0200 ++++ ffmpeg-1.2.3.patch/configure 2013-09-09 22:47:15.023872481 +0200 +@@ -144,6 +144,7 @@ + --disable-vaapi disable VAAPI code [autodetect] --enable-vda enable VDA code - --enable-vdpau enable VDPAU code + --disable-vdpau disable VDPAU code [autodetect] + --disable-xvba disable XVBA code Individual component options: --disable-everything disable all components listed below -@@ -1197,6 +1198,7 @@ HWACCEL_LIST=" +@@ -1197,6 +1198,7 @@ vaapi vda vdpau @@ -44,7 +17,7 @@ index 351611d..876a6ea 100755 " LIBRARY_LIST=" -@@ -1827,6 +1829,7 @@ crystalhd_deps="libcrystalhd_libcrystalhd_if_h" +@@ -1827,6 +1829,7 @@ dxva2_deps="dxva2api_h" vaapi_deps="va_va_h" vda_deps="VideoDecodeAcceleration_VDADecoder_h pthreads" @@ -52,7 +25,7 @@ index 351611d..876a6ea 100755 vda_extralibs="-framework CoreFoundation -framework VideoDecodeAcceleration -framework QuartzCore" vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h" -@@ -1847,6 +1850,8 @@ h264_vdpau_decoder_deps="vdpau" +@@ -1847,6 +1850,8 @@ h264_vdpau_decoder_select="h264_decoder" h264_vdpau_hwaccel_deps="vdpau" h264_vdpau_hwaccel_select="h264_decoder" @@ -61,7 +34,7 @@ index 351611d..876a6ea 100755 mpeg_vdpau_decoder_deps="vdpau" mpeg_vdpau_decoder_select="mpegvideo_decoder" mpeg1_vdpau_decoder_deps="vdpau" -@@ -1859,6 +1864,8 @@ mpeg2_dxva2_hwaccel_select="mpeg2video_decoder" +@@ -1859,6 +1864,8 @@ mpeg2_vaapi_hwaccel_deps="vaapi" mpeg2_vaapi_hwaccel_select="mpeg2video_decoder" mpeg2_vdpau_hwaccel_deps="vdpau" @@ -70,7 +43,7 @@ index 351611d..876a6ea 100755 mpeg2_vdpau_hwaccel_select="mpeg2video_decoder" mpeg4_crystalhd_decoder_select="crystalhd" mpeg4_vaapi_hwaccel_deps="vaapi" -@@ -1877,11 +1884,14 @@ vc1_vdpau_decoder_deps="vdpau" +@@ -1877,11 +1884,14 @@ vc1_vdpau_decoder_select="vc1_decoder" vc1_vdpau_hwaccel_deps="vdpau" vc1_vdpau_hwaccel_select="vc1_decoder" @@ -85,71 +58,18 @@ index 351611d..876a6ea 100755 # parsers h264_parser_select="golomb h264chroma h264dsp h264pred h264qpel videodsp" -@@ -3832,6 +3842,7 @@ check_header termios.h - check_header unistd.h +@@ -3836,6 +3846,7 @@ check_header vdpau/vdpau.h check_header vdpau/vdpau_x11.h -+check_header amd/amdxvba.h check_cpp_condition vdpau/vdpau.h "defined(VDP_DECODER_PROFILE_MPEG4_PART2_SP)" && enable vdpau_mpeg4_support ++check_header amd/amdxvba.h check_header VideoDecodeAcceleration/VDADecoder.h -diff --git a/libavcodec/Makefile b/libavcodec/Makefile -index dc065a5..c386923 100644 ---- a/libavcodec/Makefile -+++ b/libavcodec/Makefile -@@ -12,6 +12,7 @@ HEADERS = avcodec.h \ - vdpau.h \ - version.h \ - xvmc.h \ -+ xvba.h \ - - OBJS = allcodecs.o \ - audioconvert.o \ -@@ -73,6 +74,7 @@ OBJS-$(CONFIG_SHARED) += log2_tab.o - OBJS-$(CONFIG_SINEWIN) += sinewin.o - OBJS-$(CONFIG_VAAPI) += vaapi.o - OBJS-$(CONFIG_VDPAU) += vdpau.o -+OBJS-$(CONFIG_XVBA) += xvba.o - OBJS-$(CONFIG_VIDEODSP) += videodsp.o - OBJS-$(CONFIG_VP3DSP) += vp3dsp.o - -@@ -232,6 +234,7 @@ OBJS-$(CONFIG_H264_VAAPI_HWACCEL) += vaapi_h264.o - OBJS-$(CONFIG_H264_VDA_HWACCEL) += vda_h264.o - OBJS-$(CONFIG_H264_VDA_DECODER) += vda_h264_dec.o - OBJS-$(CONFIG_H264_VDPAU_HWACCEL) += vdpau_h264.o -+OBJS-$(CONFIG_H264_XVBA_HWACCEL) += xvba_h264.o - OBJS-$(CONFIG_HUFFYUV_DECODER) += huffyuv.o huffyuvdec.o - OBJS-$(CONFIG_HUFFYUV_ENCODER) += huffyuv.o huffyuvenc.o - OBJS-$(CONFIG_IAC_DECODER) += imc.o -@@ -295,6 +298,7 @@ OBJS-$(CONFIG_MPEG1VIDEO_ENCODER) += mpeg12enc.o mpeg12.o \ - OBJS-$(CONFIG_MPEG2_DXVA2_HWACCEL) += dxva2_mpeg2.o - OBJS-$(CONFIG_MPEG2_VAAPI_HWACCEL) += vaapi_mpeg2.o - OBJS-$(CONFIG_MPEG2_VDPAU_HWACCEL) += vdpau_mpeg12.o -+OBJS-$(CONFIG_MPEG2_XVBA_HWACCEL) += xvba_mpeg2.o - OBJS-$(CONFIG_MPEG2VIDEO_DECODER) += mpeg12.o mpeg12data.o - OBJS-$(CONFIG_MPEG2VIDEO_ENCODER) += mpeg12enc.o mpeg12.o \ - timecode.o -@@ -459,6 +463,7 @@ OBJS-$(CONFIG_VC1_DECODER) += vc1dec.o vc1.o vc1data.o vc1dsp.o \ - OBJS-$(CONFIG_VC1_DXVA2_HWACCEL) += dxva2_vc1.o - OBJS-$(CONFIG_VC1_VAAPI_HWACCEL) += vaapi_vc1.o - OBJS-$(CONFIG_VC1_VDPAU_HWACCEL) += vdpau_vc1.o -+OBJS-$(CONFIG_VC1_XVBA_HWACCEL) += xvba_vc1.o - OBJS-$(CONFIG_VCR1_DECODER) += vcr1.o - OBJS-$(CONFIG_VMDAUDIO_DECODER) += vmdav.o - OBJS-$(CONFIG_VMDVIDEO_DECODER) += vmdav.o -@@ -788,6 +793,7 @@ SKIPHEADERS-$(CONFIG_LIBSCHROEDINGER) += libschroedinger.h - SKIPHEADERS-$(CONFIG_LIBUTVIDEO) += libutvideo.h - SKIPHEADERS-$(CONFIG_MPEG_XVMC_DECODER) += xvmc.h - SKIPHEADERS-$(CONFIG_VAAPI) += vaapi_internal.h -+SKIPHEADERS-$(CONFIG_XVBA) += xvba_internal.h - SKIPHEADERS-$(CONFIG_VDA) += vda.h - SKIPHEADERS-$(CONFIG_VDPAU) += vdpau.h - SKIPHEADERS-$(HAVE_OS2THREADS) += os2threads.h -diff --git a/libavcodec/allcodecs.c b/libavcodec/allcodecs.c -index 584446f..7a8f61c 100644 ---- a/libavcodec/allcodecs.c -+++ b/libavcodec/allcodecs.c -@@ -79,18 +79,22 @@ void avcodec_register_all(void) + check_header windows.h +diff -Naur ffmpeg-1.2.3/libavcodec/allcodecs.c ffmpeg-1.2.3.patch/libavcodec/allcodecs.c +--- ffmpeg-1.2.3/libavcodec/allcodecs.c 2013-08-27 02:13:44.000000000 +0200 ++++ ffmpeg-1.2.3.patch/libavcodec/allcodecs.c 2013-09-09 22:46:40.577852790 +0200 +@@ -79,18 +79,22 @@ REGISTER_HWACCEL(H264_VAAPI, h264_vaapi); REGISTER_HWACCEL(H264_VDA, h264_vda); REGISTER_HWACCEL(H264_VDPAU, h264_vdpau); @@ -172,10 +92,9 @@ index 584446f..7a8f61c 100644 /* video codecs */ REGISTER_ENCODER(A64MULTI, a64multi); -diff --git a/libavcodec/h264.c b/libavcodec/h264.c -index 937ad7a..299039f 100644 ---- a/libavcodec/h264.c -+++ b/libavcodec/h264.c +diff -Naur ffmpeg-1.2.3/libavcodec/h264.c ffmpeg-1.2.3.patch/libavcodec/h264.c +--- ffmpeg-1.2.3/libavcodec/h264.c 2013-09-09 22:46:04.639832061 +0200 ++++ ffmpeg-1.2.3.patch/libavcodec/h264.c 2013-09-09 22:46:40.579852792 +0200 @@ -81,6 +81,9 @@ #if CONFIG_H264_VDPAU_HWACCEL AV_PIX_FMT_VDPAU, @@ -186,11 +105,60 @@ index 937ad7a..299039f 100644 AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE }; -diff --git a/libavcodec/xvba.c b/libavcodec/xvba.c -new file mode 100644 -index 0000000..be29e5d ---- /dev/null -+++ b/libavcodec/xvba.c +diff -Naur ffmpeg-1.2.3/libavcodec/Makefile ffmpeg-1.2.3.patch/libavcodec/Makefile +--- ffmpeg-1.2.3/libavcodec/Makefile 2013-08-27 02:13:44.000000000 +0200 ++++ ffmpeg-1.2.3.patch/libavcodec/Makefile 2013-09-09 22:46:40.580852793 +0200 +@@ -12,6 +12,7 @@ + vdpau.h \ + version.h \ + xvmc.h \ ++ xvba.h \ + + OBJS = allcodecs.o \ + audioconvert.o \ +@@ -73,6 +74,7 @@ + OBJS-$(CONFIG_SINEWIN) += sinewin.o + OBJS-$(CONFIG_VAAPI) += vaapi.o + OBJS-$(CONFIG_VDPAU) += vdpau.o ++OBJS-$(CONFIG_XVBA) += xvba.o + OBJS-$(CONFIG_VIDEODSP) += videodsp.o + OBJS-$(CONFIG_VP3DSP) += vp3dsp.o + +@@ -232,6 +234,7 @@ + OBJS-$(CONFIG_H264_VDA_HWACCEL) += vda_h264.o + OBJS-$(CONFIG_H264_VDA_DECODER) += vda_h264_dec.o + OBJS-$(CONFIG_H264_VDPAU_HWACCEL) += vdpau_h264.o ++OBJS-$(CONFIG_H264_XVBA_HWACCEL) += xvba_h264.o + OBJS-$(CONFIG_HUFFYUV_DECODER) += huffyuv.o huffyuvdec.o + OBJS-$(CONFIG_HUFFYUV_ENCODER) += huffyuv.o huffyuvenc.o + OBJS-$(CONFIG_IAC_DECODER) += imc.o +@@ -295,6 +298,7 @@ + OBJS-$(CONFIG_MPEG2_DXVA2_HWACCEL) += dxva2_mpeg2.o + OBJS-$(CONFIG_MPEG2_VAAPI_HWACCEL) += vaapi_mpeg2.o + OBJS-$(CONFIG_MPEG2_VDPAU_HWACCEL) += vdpau_mpeg12.o ++OBJS-$(CONFIG_MPEG2_XVBA_HWACCEL) += xvba_mpeg2.o + OBJS-$(CONFIG_MPEG2VIDEO_DECODER) += mpeg12.o mpeg12data.o + OBJS-$(CONFIG_MPEG2VIDEO_ENCODER) += mpeg12enc.o mpeg12.o \ + timecode.o +@@ -459,6 +463,7 @@ + OBJS-$(CONFIG_VC1_DXVA2_HWACCEL) += dxva2_vc1.o + OBJS-$(CONFIG_VC1_VAAPI_HWACCEL) += vaapi_vc1.o + OBJS-$(CONFIG_VC1_VDPAU_HWACCEL) += vdpau_vc1.o ++OBJS-$(CONFIG_VC1_XVBA_HWACCEL) += xvba_vc1.o + OBJS-$(CONFIG_VCR1_DECODER) += vcr1.o + OBJS-$(CONFIG_VMDAUDIO_DECODER) += vmdav.o + OBJS-$(CONFIG_VMDVIDEO_DECODER) += vmdav.o +@@ -788,6 +793,7 @@ + SKIPHEADERS-$(CONFIG_LIBUTVIDEO) += libutvideo.h + SKIPHEADERS-$(CONFIG_MPEG_XVMC_DECODER) += xvmc.h + SKIPHEADERS-$(CONFIG_VAAPI) += vaapi_internal.h ++SKIPHEADERS-$(CONFIG_XVBA) += xvba_internal.h + SKIPHEADERS-$(CONFIG_VDA) += vda.h + SKIPHEADERS-$(CONFIG_VDPAU) += vdpau.h + SKIPHEADERS-$(HAVE_OS2THREADS) += os2threads.h +diff -Naur ffmpeg-1.2.3/libavcodec/xvba.c ffmpeg-1.2.3.patch/libavcodec/xvba.c +--- ffmpeg-1.2.3/libavcodec/xvba.c 1970-01-01 01:00:00.000000000 +0100 ++++ ffmpeg-1.2.3.patch/libavcodec/xvba.c 2013-09-09 22:46:40.580852793 +0200 @@ -0,0 +1,66 @@ +/* + * HW decode acceleration for MPEG-2, H.264 and VC-1 @@ -258,11 +226,9 @@ index 0000000..be29e5d + render->num_slices++; +} + -diff --git a/libavcodec/xvba.h b/libavcodec/xvba.h -new file mode 100644 -index 0000000..9f9ff0c ---- /dev/null -+++ b/libavcodec/xvba.h +diff -Naur ffmpeg-1.2.3/libavcodec/xvba.h ffmpeg-1.2.3.patch/libavcodec/xvba.h +--- ffmpeg-1.2.3/libavcodec/xvba.h 1970-01-01 01:00:00.000000000 +0100 ++++ ffmpeg-1.2.3.patch/libavcodec/xvba.h 2013-09-09 22:46:40.581852794 +0200 @@ -0,0 +1,71 @@ +/* + * HW decode acceleration for MPEG-2, H.264 and VC-1 @@ -335,11 +301,9 @@ index 0000000..9f9ff0c +}; + +#endif /* AVCODEC_XVBA_H */ -diff --git a/libavcodec/xvba_h264.c b/libavcodec/xvba_h264.c -new file mode 100644 -index 0000000..ae45f3a ---- /dev/null -+++ b/libavcodec/xvba_h264.c +diff -Naur ffmpeg-1.2.3/libavcodec/xvba_h264.c ffmpeg-1.2.3.patch/libavcodec/xvba_h264.c +--- ffmpeg-1.2.3/libavcodec/xvba_h264.c 1970-01-01 01:00:00.000000000 +0100 ++++ ffmpeg-1.2.3.patch/libavcodec/xvba_h264.c 2013-09-09 22:46:40.582852794 +0200 @@ -0,0 +1,192 @@ +/* + * H.264 HW decode acceleration through XVBA @@ -533,11 +497,9 @@ index 0000000..ae45f3a + .end_frame = end_frame, + .decode_slice = decode_slice, +}; -diff --git a/libavcodec/xvba_internal.h b/libavcodec/xvba_internal.h -new file mode 100644 -index 0000000..9653f85 ---- /dev/null -+++ b/libavcodec/xvba_internal.h +diff -Naur ffmpeg-1.2.3/libavcodec/xvba_internal.h ffmpeg-1.2.3.patch/libavcodec/xvba_internal.h +--- ffmpeg-1.2.3/libavcodec/xvba_internal.h 1970-01-01 01:00:00.000000000 +0100 ++++ ffmpeg-1.2.3.patch/libavcodec/xvba_internal.h 2013-09-09 22:46:40.582852794 +0200 @@ -0,0 +1,24 @@ +/* + * HW decode acceleration for MPEG-2, H.264 and VC-1 @@ -563,11 +525,9 @@ index 0000000..9653f85 + +int ff_xvba_translate_profile(int profile); +void ff_xvba_add_slice_data(struct xvba_render_state *render, const uint8_t *buffer, uint32_t size); -diff --git a/libavcodec/xvba_mpeg2.c b/libavcodec/xvba_mpeg2.c -new file mode 100644 -index 0000000..0fc7d78 ---- /dev/null -+++ b/libavcodec/xvba_mpeg2.c +diff -Naur ffmpeg-1.2.3/libavcodec/xvba_mpeg2.c ffmpeg-1.2.3.patch/libavcodec/xvba_mpeg2.c +--- ffmpeg-1.2.3/libavcodec/xvba_mpeg2.c 1970-01-01 01:00:00.000000000 +0100 ++++ ffmpeg-1.2.3.patch/libavcodec/xvba_mpeg2.c 2013-09-09 22:46:40.582852794 +0200 @@ -0,0 +1,52 @@ +/* + * MPEG-2 HW decode acceleration through XVBA @@ -621,11 +581,9 @@ index 0000000..0fc7d78 + .decode_slice = decode_slice, + .priv_data_size = 0, +}; -diff --git a/libavcodec/xvba_vc1.c b/libavcodec/xvba_vc1.c -new file mode 100644 -index 0000000..bf3d9c2 ---- /dev/null -+++ b/libavcodec/xvba_vc1.c +diff -Naur ffmpeg-1.2.3/libavcodec/xvba_vc1.c ffmpeg-1.2.3.patch/libavcodec/xvba_vc1.c +--- ffmpeg-1.2.3/libavcodec/xvba_vc1.c 1970-01-01 01:00:00.000000000 +0100 ++++ ffmpeg-1.2.3.patch/libavcodec/xvba_vc1.c 2013-09-09 22:46:40.583852794 +0200 @@ -0,0 +1,190 @@ +/* + * VC-1 HW decode acceleration through XVBA @@ -817,11 +775,10 @@ index 0000000..bf3d9c2 + .end_frame = end_frame, + .decode_slice = decode_slice, +}; -diff --git a/libavutil/pixdesc.c b/libavutil/pixdesc.c -index 1016dba..53dfec1 100644 ---- a/libavutil/pixdesc.c -+++ b/libavutil/pixdesc.c -@@ -1141,6 +1141,12 @@ void av_write_image_line(const uint16_t *src, +diff -Naur ffmpeg-1.2.3/libavutil/pixdesc.c ffmpeg-1.2.3.patch/libavutil/pixdesc.c +--- ffmpeg-1.2.3/libavutil/pixdesc.c 2013-08-27 02:13:47.000000000 +0200 ++++ ffmpeg-1.2.3.patch/libavutil/pixdesc.c 2013-09-09 22:46:40.584852795 +0200 +@@ -1141,6 +1141,12 @@ .log2_chroma_h = 1, .flags = PIX_FMT_HWACCEL, }, @@ -834,11 +791,10 @@ index 1016dba..53dfec1 100644 [AV_PIX_FMT_YUV420P9LE] = { .name = "yuv420p9le", .nb_components = 3, -diff --git a/libavutil/pixfmt.h b/libavutil/pixfmt.h -index 1c00ac4..6437e29 100644 ---- a/libavutil/pixfmt.h -+++ b/libavutil/pixfmt.h -@@ -124,6 +124,7 @@ enum AVPixelFormat { +diff -Naur ffmpeg-1.2.3/libavutil/pixfmt.h ffmpeg-1.2.3.patch/libavutil/pixfmt.h +--- ffmpeg-1.2.3/libavutil/pixfmt.h 2013-08-27 02:13:47.000000000 +0200 ++++ ffmpeg-1.2.3.patch/libavutil/pixfmt.h 2013-09-09 22:46:40.585852796 +0200 +@@ -124,6 +124,7 @@ AV_PIX_FMT_VAAPI_MOCO, ///< HW acceleration through VA API at motion compensation entry-point, Picture.data[3] contains a vaapi_render_state struct which contains macroblocks as well as various fields extracted from headers AV_PIX_FMT_VAAPI_IDCT, ///< HW acceleration through VA API at IDCT entry-point, Picture.data[3] contains a vaapi_render_state struct which contains fields extracted from headers AV_PIX_FMT_VAAPI_VLD, ///< HW decoding through VA API, Picture.data[3] contains a vaapi_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers @@ -846,6 +802,3 @@ index 1c00ac4..6437e29 100644 AV_PIX_FMT_YUV420P16LE, ///< planar YUV 4:2:0, 24bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian AV_PIX_FMT_YUV420P16BE, ///< planar YUV 4:2:0, 24bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian --- -1.8.1.5 - diff --git a/packages/multimedia/ffmpeg/patches/1.2.1/ffmpeg-901.05-XVBA-revisit_draw_functions.patch b/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-901.05-XVBA-revisit_draw_functions.patch similarity index 100% rename from packages/multimedia/ffmpeg/patches/1.2.1/ffmpeg-901.05-XVBA-revisit_draw_functions.patch rename to packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-901.05-XVBA-revisit_draw_functions.patch diff --git a/packages/multimedia/ffmpeg/patches/1.2.1/ffmpeg-901.05-xvba_fix_pix_fmt_vda_vld_assert.patch b/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-901.05-xvba_fix_pix_fmt_vda_vld_assert.patch similarity index 100% rename from packages/multimedia/ffmpeg/patches/1.2.1/ffmpeg-901.05-xvba_fix_pix_fmt_vda_vld_assert.patch rename to packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-901.05-xvba_fix_pix_fmt_vda_vld_assert.patch diff --git a/packages/multimedia/ffmpeg/patches/1.2.1/ffmpeg-901.06-XVBA-Make_XVBA_codec_available.patch b/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-901.06-XVBA-Make_XVBA_codec_available.patch similarity index 100% rename from packages/multimedia/ffmpeg/patches/1.2.1/ffmpeg-901.06-XVBA-Make_XVBA_codec_available.patch rename to packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-901.06-XVBA-Make_XVBA_codec_available.patch diff --git a/packages/multimedia/ffmpeg/patches/1.2.1/ffmpeg-901.09-make_vc1_interlaced_working.patch b/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-901.09-make_vc1_interlaced_working.patch similarity index 100% rename from packages/multimedia/ffmpeg/patches/1.2.1/ffmpeg-901.09-make_vc1_interlaced_working.patch rename to packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-901.09-make_vc1_interlaced_working.patch diff --git a/packages/multimedia/ffmpeg/patches/1.2.1/ffmpeg-901.10-XVBA_Only_set_second_field_when_we_are_interlaced_and_an_interlaced.patch b/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-901.10-XVBA_Only_set_second_field_when_we_are_interlaced_and_an_interlaced.patch similarity index 100% rename from packages/multimedia/ffmpeg/patches/1.2.1/ffmpeg-901.10-XVBA_Only_set_second_field_when_we_are_interlaced_and_an_interlaced.patch rename to packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-901.10-XVBA_Only_set_second_field_when_we_are_interlaced_and_an_interlaced.patch diff --git a/packages/multimedia/ffmpeg/patches/1.2.1/ffmpeg-901.11-XVBA-translate_picture_structure_to_a_value_xvba_understands.patch b/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-901.11-XVBA-translate_picture_structure_to_a_value_xvba_understands.patch similarity index 100% rename from packages/multimedia/ffmpeg/patches/1.2.1/ffmpeg-901.11-XVBA-translate_picture_structure_to_a_value_xvba_understands.patch rename to packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-901.11-XVBA-translate_picture_structure_to_a_value_xvba_understands.patch diff --git a/packages/multimedia/ffmpeg/patches/1.2.1/ffmpeg-901.12-XVBA-fix_vc1_field_interlace.patch b/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-901.12-XVBA-fix_vc1_field_interlace.patch similarity index 100% rename from packages/multimedia/ffmpeg/patches/1.2.1/ffmpeg-901.12-XVBA-fix_vc1_field_interlace.patch rename to packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-901.12-XVBA-fix_vc1_field_interlace.patch diff --git a/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-913-h264-do_not_discard_NAL_SEI_when_skipping_frames.patch b/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-913-h264-do_not_discard_NAL_SEI_when_skipping_frames.patch new file mode 100644 index 0000000000..7b9d7c6be5 --- /dev/null +++ b/packages/multimedia/ffmpeg/patches/1.2.3/ffmpeg-913-h264-do_not_discard_NAL_SEI_when_skipping_frames.patch @@ -0,0 +1,27 @@ +From 615c1fe2ff904cdb9ebcd8edc0b2c42c3cd6218c Mon Sep 17 00:00:00 2001 +From: Rainer Hochecker +Date: Mon, 9 Sep 2013 12:13:15 +0200 +Subject: [PATCH] ffmpeg backport: h264: do not discard NAL_SEI when skipping + frames + +--- + libavcodec/h264.c | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +diff --git a/libavcodec/h264.c b/libavcodec/h264.c +index 4f09c67..62ac8fb 100644 +--- a/libavcodec/h264.c ++++ b/libavcodec/h264.c +@@ -4529,8 +4529,7 @@ static int decode_nal_units(H264Context *h, const uint8_t *buf, int buf_size, + first_slice = hx->nal_unit_type; + } + +- // FIXME do not discard SEI id +- if (avctx->skip_frame >= AVDISCARD_NONREF && h->nal_ref_idc == 0) ++ if (avctx->skip_frame >= AVDISCARD_NONREF && h->nal_ref_idc == 0 && h->nal_unit_type != NAL_SEI) + continue; + + again: +-- +1.8.4 +