From 1d242ca85542cb8f4687de7e07d2d3e1977a74e7 Mon Sep 17 00:00:00 2001 From: MilhouseVH Date: Fri, 16 Feb 2018 05:18:46 +0000 Subject: [PATCH 01/11] kodi: update to kodi-f5871d9 --- packages/mediacenter/kodi/package.mk | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/mediacenter/kodi/package.mk b/packages/mediacenter/kodi/package.mk index e66a7cb570..d903edcaa9 100644 --- a/packages/mediacenter/kodi/package.mk +++ b/packages/mediacenter/kodi/package.mk @@ -17,8 +17,8 @@ ################################################################################ PKG_NAME="kodi" -PKG_VERSION="f621a02" -PKG_SHA256="ac4b2e5d5858ed2d07cd547dadae8394430da80bde39e5f191572b6e1f20df01" +PKG_VERSION="f5871d9" +PKG_SHA256="1762381765e5fcecdf4923ed4d02bacba079136b21782f8b3fb17170e423f0f1" PKG_ARCH="any" PKG_LICENSE="GPL" PKG_SITE="http://www.kodi.tv" From ab269496054214c9cf7e9a70e0aeed987066c5c8 Mon Sep 17 00:00:00 2001 From: MilhouseVH Date: Fri, 16 Feb 2018 05:18:46 +0000 Subject: [PATCH 02/11] kodi-binary-addons: update to latest versions --- .../kodi-binary-addons/peripheral.joystick/package.mk | 4 ++-- packages/mediacenter/kodi-binary-addons/pvr.demo/package.mk | 4 ++-- .../mediacenter/kodi-binary-addons/pvr.dvblink/package.mk | 4 ++-- .../mediacenter/kodi-binary-addons/pvr.dvbviewer/package.mk | 4 ++-- packages/mediacenter/kodi-binary-addons/pvr.filmon/package.mk | 4 ++-- packages/mediacenter/kodi-binary-addons/pvr.hts/package.mk | 4 ++-- .../mediacenter/kodi-binary-addons/pvr.iptvsimple/package.mk | 4 ++-- .../kodi-binary-addons/pvr.mediaportal.tvserver/package.mk | 4 ++-- .../mediacenter/kodi-binary-addons/pvr.nextpvr/package.mk | 4 ++-- packages/mediacenter/kodi-binary-addons/pvr.pctv/package.mk | 4 ++-- .../mediacenter/kodi-binary-addons/pvr.stalker/package.mk | 4 ++-- packages/mediacenter/kodi-binary-addons/pvr.vbox/package.mk | 4 ++-- packages/mediacenter/kodi-binary-addons/pvr.vuplus/package.mk | 4 ++-- packages/mediacenter/kodi-binary-addons/pvr.wmc/package.mk | 4 ++-- packages/mediacenter/kodi-binary-addons/pvr.zattoo/package.mk | 4 ++-- .../mediacenter/kodi-binary-addons/vfs.libarchive/package.mk | 4 ++-- packages/mediacenter/kodi-binary-addons/vfs.rar/package.mk | 4 ++-- 17 files changed, 34 insertions(+), 34 deletions(-) diff --git a/packages/mediacenter/kodi-binary-addons/peripheral.joystick/package.mk b/packages/mediacenter/kodi-binary-addons/peripheral.joystick/package.mk index a0e03e8344..5f497408b4 100644 --- a/packages/mediacenter/kodi-binary-addons/peripheral.joystick/package.mk +++ b/packages/mediacenter/kodi-binary-addons/peripheral.joystick/package.mk @@ -17,8 +17,8 @@ ################################################################################ PKG_NAME="peripheral.joystick" -PKG_VERSION="0a20d01" -PKG_SHA256="759a2f8d06de059727cd5ab684826fe7b9dd7ae31bdd2205b0750c3de058da68" +PKG_VERSION="02da6ed" +PKG_SHA256="3c0a8443cc0a0b177ba94d1a2288d57ea20860bee7450411674539d8e8583687" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL" diff --git a/packages/mediacenter/kodi-binary-addons/pvr.demo/package.mk b/packages/mediacenter/kodi-binary-addons/pvr.demo/package.mk index b3d3a048ae..53e50ff49b 100644 --- a/packages/mediacenter/kodi-binary-addons/pvr.demo/package.mk +++ b/packages/mediacenter/kodi-binary-addons/pvr.demo/package.mk @@ -17,8 +17,8 @@ ################################################################################ PKG_NAME="pvr.demo" -PKG_VERSION="0224cbd" -PKG_SHA256="7d4e432031378fef28354cbe46d419438560bbcf760339298ef5e43a71c5f78d" +PKG_VERSION="8f62053" +PKG_SHA256="38abffc3438f75dca8e658df7cb35769734d3dc807b8d3bbc96a12f41d38d947" PKG_REV="2" PKG_ARCH="any" PKG_LICENSE="GPL" diff --git a/packages/mediacenter/kodi-binary-addons/pvr.dvblink/package.mk b/packages/mediacenter/kodi-binary-addons/pvr.dvblink/package.mk index 9a1cf0006c..b0c8b39296 100644 --- a/packages/mediacenter/kodi-binary-addons/pvr.dvblink/package.mk +++ b/packages/mediacenter/kodi-binary-addons/pvr.dvblink/package.mk @@ -17,8 +17,8 @@ ################################################################################ PKG_NAME="pvr.dvblink" -PKG_VERSION="4ac2f2d" -PKG_SHA256="1ce065cf54ccbe537ffb6227371ce53d28405fe63e5b6384869d351e0b41fca2" +PKG_VERSION="89d1687" +PKG_SHA256="2ac81bccee48c5d7367e2cb99b557bdd2d4f0d31b656107ab74f4fef57da908c" PKG_REV="2" PKG_ARCH="any" PKG_LICENSE="GPL" diff --git a/packages/mediacenter/kodi-binary-addons/pvr.dvbviewer/package.mk b/packages/mediacenter/kodi-binary-addons/pvr.dvbviewer/package.mk index 5fb660ecae..4a48745928 100644 --- a/packages/mediacenter/kodi-binary-addons/pvr.dvbviewer/package.mk +++ b/packages/mediacenter/kodi-binary-addons/pvr.dvbviewer/package.mk @@ -17,8 +17,8 @@ ################################################################################ PKG_NAME="pvr.dvbviewer" -PKG_VERSION="c2275e1" -PKG_SHA256="1d9261a223f2ad5f78e9e17bbf23ee199eebf269eac618cfac30bd228a07b7a8" +PKG_VERSION="64c4356" +PKG_SHA256="48d6f4a7eaa3db3cedbe2947c448bea837b93bc16329e374afa092533d4d38b7" PKG_REV="2" PKG_ARCH="any" PKG_LICENSE="GPL" diff --git a/packages/mediacenter/kodi-binary-addons/pvr.filmon/package.mk b/packages/mediacenter/kodi-binary-addons/pvr.filmon/package.mk index ae8d2efc25..26a3ce0aa6 100644 --- a/packages/mediacenter/kodi-binary-addons/pvr.filmon/package.mk +++ b/packages/mediacenter/kodi-binary-addons/pvr.filmon/package.mk @@ -17,8 +17,8 @@ ################################################################################ PKG_NAME="pvr.filmon" -PKG_VERSION="e754b4b" -PKG_SHA256="c90375e63cc191b63e1108cc2a7ce27d5341f815b1772141b672dab21ccca2c0" +PKG_VERSION="2721611" +PKG_SHA256="7c8178f3db13959b74130ab0617cff97b8ab1762527b7891a0ad8b8a8dcf686f" PKG_REV="2" PKG_ARCH="any" PKG_LICENSE="GPL" diff --git a/packages/mediacenter/kodi-binary-addons/pvr.hts/package.mk b/packages/mediacenter/kodi-binary-addons/pvr.hts/package.mk index 4a7aa95c58..a850fd3041 100644 --- a/packages/mediacenter/kodi-binary-addons/pvr.hts/package.mk +++ b/packages/mediacenter/kodi-binary-addons/pvr.hts/package.mk @@ -17,8 +17,8 @@ ################################################################################ PKG_NAME="pvr.hts" -PKG_VERSION="774943f" -PKG_SHA256="df02ad8adfd07422b0640718d9ec680a3626198b80ba46a123eb04cd33a45d41" +PKG_VERSION="095784b" +PKG_SHA256="ef026cf4a696fcaf6463387169bfd3360f191f23a954474b778c2bd8bda2d46f" PKG_REV="2" PKG_ARCH="any" PKG_LICENSE="GPL" diff --git a/packages/mediacenter/kodi-binary-addons/pvr.iptvsimple/package.mk b/packages/mediacenter/kodi-binary-addons/pvr.iptvsimple/package.mk index 1eafd5de9e..d80ee6e9cb 100644 --- a/packages/mediacenter/kodi-binary-addons/pvr.iptvsimple/package.mk +++ b/packages/mediacenter/kodi-binary-addons/pvr.iptvsimple/package.mk @@ -17,8 +17,8 @@ ################################################################################ PKG_NAME="pvr.iptvsimple" -PKG_VERSION="a00d008" -PKG_SHA256="7238c88cc8d8b1fb95bf28811938d9adefd357c7f9cf5303ca5b99e19744c79d" +PKG_VERSION="933a5c4" +PKG_SHA256="83f5966ba909e66976ae18685e9f41c5a924831f8635b806cf91cb3291ff83bc" PKG_REV="2" PKG_ARCH="any" PKG_LICENSE="GPL" diff --git a/packages/mediacenter/kodi-binary-addons/pvr.mediaportal.tvserver/package.mk b/packages/mediacenter/kodi-binary-addons/pvr.mediaportal.tvserver/package.mk index 87254d064a..4682622fe3 100644 --- a/packages/mediacenter/kodi-binary-addons/pvr.mediaportal.tvserver/package.mk +++ b/packages/mediacenter/kodi-binary-addons/pvr.mediaportal.tvserver/package.mk @@ -17,8 +17,8 @@ ################################################################################ PKG_NAME="pvr.mediaportal.tvserver" -PKG_VERSION="0c5ece3" -PKG_SHA256="74087d3403ccd6b394ad831c57f163ce63c9ef1dbd004bb3a7523d9cac1f9340" +PKG_VERSION="dec444f" +PKG_SHA256="796fd3a2f8c86007c26e738f9dc2df85be168960ed0691f74094cedc50360690" PKG_REV="2" PKG_ARCH="any" PKG_LICENSE="GPL" diff --git a/packages/mediacenter/kodi-binary-addons/pvr.nextpvr/package.mk b/packages/mediacenter/kodi-binary-addons/pvr.nextpvr/package.mk index 22db52f3bc..3144210ec9 100644 --- a/packages/mediacenter/kodi-binary-addons/pvr.nextpvr/package.mk +++ b/packages/mediacenter/kodi-binary-addons/pvr.nextpvr/package.mk @@ -17,8 +17,8 @@ ################################################################################ PKG_NAME="pvr.nextpvr" -PKG_VERSION="11dfdbb" -PKG_SHA256="7b02914050f5c6a81fc6fb67c50ef5991c82348b8ae83bde6ea7efb9a921e3e0" +PKG_VERSION="aa1c8d2" +PKG_SHA256="06474ec07083460f600e5fa0299992f357c0ce1ba1540255572e7caa36e710bc" PKG_REV="2" PKG_ARCH="any" PKG_LICENSE="GPL" diff --git a/packages/mediacenter/kodi-binary-addons/pvr.pctv/package.mk b/packages/mediacenter/kodi-binary-addons/pvr.pctv/package.mk index 9b095e1ff2..860624703d 100644 --- a/packages/mediacenter/kodi-binary-addons/pvr.pctv/package.mk +++ b/packages/mediacenter/kodi-binary-addons/pvr.pctv/package.mk @@ -17,8 +17,8 @@ ################################################################################ PKG_NAME="pvr.pctv" -PKG_VERSION="c7a13d7" -PKG_SHA256="20cdbd4e3ff293355d20ea60ef1ae123e04c1fed99bb6939d9127b1982f436f7" +PKG_VERSION="5b47d9f" +PKG_SHA256="fa23524622e1d2a4ebc1de4c6c8766b7a1987e2b900551049bbcec9d6055d354" PKG_REV="2" PKG_ARCH="any" PKG_LICENSE="GPL" diff --git a/packages/mediacenter/kodi-binary-addons/pvr.stalker/package.mk b/packages/mediacenter/kodi-binary-addons/pvr.stalker/package.mk index a557e65a4d..31f465d08d 100644 --- a/packages/mediacenter/kodi-binary-addons/pvr.stalker/package.mk +++ b/packages/mediacenter/kodi-binary-addons/pvr.stalker/package.mk @@ -17,8 +17,8 @@ ################################################################################ PKG_NAME="pvr.stalker" -PKG_VERSION="c91421d" -PKG_SHA256="5062ca5199f08d698aaae3625d8ccd1decdae49281e860b484719f84e5bea902" +PKG_VERSION="77eec69" +PKG_SHA256="c928578693264536dd46f9c0e084301009faf9fd1c6882cc17eabe3e94345a98" PKG_REV="2" PKG_ARCH="any" PKG_LICENSE="GPL" diff --git a/packages/mediacenter/kodi-binary-addons/pvr.vbox/package.mk b/packages/mediacenter/kodi-binary-addons/pvr.vbox/package.mk index 0ac8a4174b..1756209e16 100644 --- a/packages/mediacenter/kodi-binary-addons/pvr.vbox/package.mk +++ b/packages/mediacenter/kodi-binary-addons/pvr.vbox/package.mk @@ -17,8 +17,8 @@ ################################################################################ PKG_NAME="pvr.vbox" -PKG_VERSION="24126fd" -PKG_SHA256="e5ff139d29b53d56552201ed1efaad9599b4f7eca4ff96b7f3f358246dbbb723" +PKG_VERSION="57f3198" +PKG_SHA256="a47a92367e0b9c759752af933ce434ba81a25b2772646e2ee04ac2048665ff1e" PKG_REV="2" PKG_ARCH="any" PKG_LICENSE="GPL" diff --git a/packages/mediacenter/kodi-binary-addons/pvr.vuplus/package.mk b/packages/mediacenter/kodi-binary-addons/pvr.vuplus/package.mk index ad06ada258..493929c4ae 100644 --- a/packages/mediacenter/kodi-binary-addons/pvr.vuplus/package.mk +++ b/packages/mediacenter/kodi-binary-addons/pvr.vuplus/package.mk @@ -17,8 +17,8 @@ ################################################################################ PKG_NAME="pvr.vuplus" -PKG_VERSION="020e1d2" -PKG_SHA256="815314ea7ed64e663be3e36ac94d1b7a850587cc13c39b9f9ac6dc54bcb17de3" +PKG_VERSION="f05f158" +PKG_SHA256="96656716275ec07106ba938a5376bd53670c4f3f1e4fc006be9cfb2c17e58339" PKG_REV="2" PKG_ARCH="any" PKG_LICENSE="GPL" diff --git a/packages/mediacenter/kodi-binary-addons/pvr.wmc/package.mk b/packages/mediacenter/kodi-binary-addons/pvr.wmc/package.mk index 428169fdc8..6aa50c932b 100644 --- a/packages/mediacenter/kodi-binary-addons/pvr.wmc/package.mk +++ b/packages/mediacenter/kodi-binary-addons/pvr.wmc/package.mk @@ -17,8 +17,8 @@ ################################################################################ PKG_NAME="pvr.wmc" -PKG_VERSION="920ade6" -PKG_SHA256="32bf437c8a0cd7be606214b639394e8c580924be8c1548c26e1c23d123c5de27" +PKG_VERSION="38e670a" +PKG_SHA256="622a5e1f9b804bbe5754f7f889147eeca76a218799acf6c1045b3ae0c47617e9" PKG_REV="2" PKG_ARCH="any" PKG_LICENSE="GPL" diff --git a/packages/mediacenter/kodi-binary-addons/pvr.zattoo/package.mk b/packages/mediacenter/kodi-binary-addons/pvr.zattoo/package.mk index 4ec5e14a99..187e8d7c89 100644 --- a/packages/mediacenter/kodi-binary-addons/pvr.zattoo/package.mk +++ b/packages/mediacenter/kodi-binary-addons/pvr.zattoo/package.mk @@ -17,8 +17,8 @@ ################################################################################ PKG_NAME="pvr.zattoo" -PKG_VERSION="fed0aea" -PKG_SHA256="c26a6fd96e49964de0da2d9200d12aa23f348606e6331f80a3d6a134029673cf" +PKG_VERSION="3c46173" +PKG_SHA256="3ddf99f180a84dd0398015f51c3cb8cded472071906e76d2727aa5b513aecd9d" PKG_REV="2" PKG_ARCH="any" PKG_LICENSE="GPL" diff --git a/packages/mediacenter/kodi-binary-addons/vfs.libarchive/package.mk b/packages/mediacenter/kodi-binary-addons/vfs.libarchive/package.mk index f4531b26c7..44e7e60059 100644 --- a/packages/mediacenter/kodi-binary-addons/vfs.libarchive/package.mk +++ b/packages/mediacenter/kodi-binary-addons/vfs.libarchive/package.mk @@ -17,8 +17,8 @@ ################################################################################ PKG_NAME="vfs.libarchive" -PKG_VERSION="568a2a1" -PKG_SHA256="781c2d3a26f5a4c4beadd5e3ec732dc0dc451e303f08e8a034bb584025db2358" +PKG_VERSION="128394c" +PKG_SHA256="c90a889cea5dfa68115084c06bb6b0c61886f49a5676734e6238d93ea9d13a67" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL" diff --git a/packages/mediacenter/kodi-binary-addons/vfs.rar/package.mk b/packages/mediacenter/kodi-binary-addons/vfs.rar/package.mk index 2b7b5cc91d..8214c4e1e2 100644 --- a/packages/mediacenter/kodi-binary-addons/vfs.rar/package.mk +++ b/packages/mediacenter/kodi-binary-addons/vfs.rar/package.mk @@ -17,8 +17,8 @@ ################################################################################ PKG_NAME="vfs.rar" -PKG_VERSION="2904d06" -PKG_SHA256="0de99949939acad8753156cf5bc87a33a2cdc1459ee15ea450c5fee75dd73b70" +PKG_VERSION="2efe917" +PKG_SHA256="fd72d3fed58b5489d71290e57b033f60e8e0501df94e208fb6b95599f20553e8" PKG_REV="2" PKG_ARCH="any" PKG_LICENSE="GPL" From 1050a8218ff42ebee3a76e5ebbba608b52fc0190 Mon Sep 17 00:00:00 2001 From: MilhouseVH Date: Fri, 16 Feb 2018 05:18:46 +0000 Subject: [PATCH 03/11] kodi: fix services patch after PR13443 --- .../kodi-100.09-use-a-wrapper-to-setup-service-addons.patch | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/mediacenter/kodi/patches/kodi-100.09-use-a-wrapper-to-setup-service-addons.patch b/packages/mediacenter/kodi/patches/kodi-100.09-use-a-wrapper-to-setup-service-addons.patch index 00b4d94f79..3f28a51f69 100644 --- a/packages/mediacenter/kodi/patches/kodi-100.09-use-a-wrapper-to-setup-service-addons.patch +++ b/packages/mediacenter/kodi/patches/kodi-100.09-use-a-wrapper-to-setup-service-addons.patch @@ -87,7 +87,7 @@ index e015f0755e..92879f19c1 100644 if (GetAddon(id, addon, ADDON_UNKNOWN, false) && addon != NULL) { + ADDON::LEAddonHook(addon, ADDON::LE_ADDON_DISABLED); - CEventLog::GetInstance().Add(EventPtr(new CAddonManagementEvent(addon, 24141))); + CServiceBroker::GetEventLog().Add(EventPtr(new CAddonManagementEvent(addon, 24141))); } @@ -864,6 +865,7 @@ bool CAddonMgr::EnableSingle(const std::string& id) @@ -96,5 +96,5 @@ index e015f0755e..92879f19c1 100644 m_disabled.erase(id); + ADDON::LEAddonHook(addon, ADDON::LE_ADDON_ENABLED); - CEventLog::GetInstance().Add(EventPtr(new CAddonManagementEvent(addon, 24064))); + CServiceBroker::GetEventLog().Add(EventPtr(new CAddonManagementEvent(addon, 24064))); From ab398940a514f3a9b3c7236da6259c837344dbe2 Mon Sep 17 00:00:00 2001 From: MilhouseVH Date: Fri, 16 Feb 2018 05:18:46 +0000 Subject: [PATCH 04/11] kodi: drop mysql/mariadb patch after PR13318 --- .../patches/kodi-995.20-PR13318-mariadb.patch | 197 ------------------ 1 file changed, 197 deletions(-) delete mode 100644 packages/mediacenter/kodi/patches/kodi-995.20-PR13318-mariadb.patch diff --git a/packages/mediacenter/kodi/patches/kodi-995.20-PR13318-mariadb.patch b/packages/mediacenter/kodi/patches/kodi-995.20-PR13318-mariadb.patch deleted file mode 100644 index b6e8a0334a..0000000000 --- a/packages/mediacenter/kodi/patches/kodi-995.20-PR13318-mariadb.patch +++ /dev/null @@ -1,197 +0,0 @@ -From 35c299575feaf12dd09e9571e981347436063806 Mon Sep 17 00:00:00 2001 -From: "Sascha Kuehndel (InuSasha)" -Date: Fri, 5 Jan 2018 18:14:12 +0100 -Subject: [PATCH] sql-client: add support for mariadb-client mariadb is a - place-in for mysql. only, the search pathes and the include path are changed. - ---- - CMakeLists.txt | 12 +++++- - cmake/modules/FindMariaDBClient.cmake | 69 +++++++++++++++++++++++++++++++++++ - xbmc/dbwrappers/CMakeLists.txt | 2 +- - xbmc/dbwrappers/Database.cpp | 6 +-- - xbmc/dbwrappers/mysqldataset.cpp | 4 ++ - xbmc/dbwrappers/mysqldataset.h | 4 ++ - 6 files changed, 92 insertions(+), 5 deletions(-) - create mode 100644 cmake/modules/FindMariaDBClient.cmake - -diff --git a/CMakeLists.txt b/CMakeLists.txt -index 08bebea13a59..150fe9744ce9 100644 ---- a/CMakeLists.txt -+++ b/CMakeLists.txt -@@ -151,7 +151,6 @@ set(optional_deps Alsa - LCMS2 - MDNS - MicroHttpd -- MySqlClient - PulseAudio - Python - SmbClient -@@ -179,6 +178,17 @@ core_optional_dep(${optional_deps}) - core_require_dyload_dep(${required_dyload}) - core_optional_dyload_dep(${dyload_optional}) - -+if(ENABLE_MARIADBCLIENT AND NOT ENABLE_MARIADBCLIENT STREQUAL AUTO AND ENABLE_MYSQLCLIENT AND NOT ENABLE_MYSQLCLIENT STREQUAL AUTO) -+ MESSAGE(FATAL_ERROR "You can not use MySql and MariaDB at the same time. Disable one by adding -DENABLE_MYSQLCLIENT=OFF or -DENABLE_MARIADBCLIENT=OFF.") -+elseif(ENABLE_MYSQLCLIENT AND NOT ENABLE_MYSQLCLIENT STREQUAL AUTO) -+ set(ENABLE_MARIADBCLIENT OFF CACHE BOOL "") -+endif() -+ -+core_optional_dep(MariaDBClient) -+if(NOT MARIADBCLIENT_FOUND) -+ core_optional_dep(MySqlClient) -+endif() -+ - if(NOT UDEV_FOUND) - core_optional_dep(LibUSB) - endif() -diff --git a/cmake/modules/FindMariaDBClient.cmake b/cmake/modules/FindMariaDBClient.cmake -new file mode 100644 -index 000000000000..1e5e736f46b0 ---- /dev/null -+++ b/cmake/modules/FindMariaDBClient.cmake -@@ -0,0 +1,69 @@ -+#.rst: -+# FindMariaDBClient -+# --------------- -+# Finds the MariaDBClient library -+# -+# This will will define the following variables:: -+# -+# MARIADBCLIENT_FOUND - system has MariaDBClient -+# MARIADBCLIENT_INCLUDE_DIRS - the MariaDBClient include directory -+# MARIADBCLIENT_LIBRARIES - the MariaDBClient libraries -+# MARIADBCLIENT_DEFINITIONS - the MariaDBClient compile definitions -+# -+# and the following imported targets:: -+# -+# MariaDBClient::MariaDBClient - The MariaDBClient library -+ -+# Don't find system wide installed version on Windows -+if(WIN32) -+ set(EXTRA_FIND_ARGS NO_SYSTEM_ENVIRONMENT_PATH) -+else() -+ set(EXTRA_FIND_ARGS) -+endif() -+ -+find_path(MARIADBCLIENT_INCLUDE_DIR NAMES mariadb/mysql.h mariadb/server/mysql.h) -+find_library(MARIADBCLIENT_LIBRARY_RELEASE NAMES mariadbclient libmariadb -+ PATH_SUFFIXES mariadb -+ ${EXTRA_FIND_ARGS}) -+find_library(MARIADBCLIENT_LIBRARY_DEBUG NAMES mariadbclient libmariadb -+ PATH_SUFFIXES mariadb -+ ${EXTRA_FIND_ARGS}) -+ -+if(MARIADBCLIENT_INCLUDE_DIR AND EXISTS "${MARIADBCLIENT_INCLUDE_DIR}/mariadb/mariadb_version.h") -+ file(STRINGS "${MARIADBCLIENT_INCLUDE_DIR}/mariadb/mariadb_version.h" mariadb_version_str REGEX "^#define[\t ]+MARIADB_CLIENT_VERSION_STR[\t ]+\".*\".*") -+ string(REGEX REPLACE "^#define[\t ]+MARIADB_CLIENT_VERSION_STR[\t ]+\"([^\"]+)\".*" "\\1" MARIADBCLIENT_VERSION_STRING "${mariadb_version_str}") -+ unset(mariadb_version_str) -+endif() -+ -+include(SelectLibraryConfigurations) -+select_library_configurations(MARIADBCLIENT) -+ -+include(FindPackageHandleStandardArgs) -+find_package_handle_standard_args(MariaDBClient -+ REQUIRED_VARS MARIADBCLIENT_LIBRARY MARIADBCLIENT_INCLUDE_DIR -+ VERSION_VAR MARIADBCLIENT_VERSION_STRING) -+ -+if(MARIADBCLIENT_FOUND) -+ set(MARIADBCLIENT_LIBRARIES ${MARIADBCLIENT_LIBRARY}) -+ set(MARIADBCLIENT_INCLUDE_DIRS ${MARIADBCLIENT_INCLUDE_DIR}) -+ set(MARIADBCLIENT_DEFINITIONS -DHAS_MARIADB=1) -+ -+ if(NOT TARGET MariaDBClient::MariaDBClient) -+ add_library(MariaDBClient::MariaDBClient UNKNOWN IMPORTED) -+ if(MARIADBCLIENT_LIBRARY_RELEASE) -+ set_target_properties(MariaDBClient::MariaDBClient PROPERTIES -+ IMPORTED_CONFIGURATIONS RELEASE -+ IMPORTED_LOCATION "${MARIADBCLIENT_LIBRARY_RELEASE}") -+ endif() -+ if(MARIADBCLIENT_LIBRARY_DEBUG) -+ set_target_properties(MariaDBClient::MariaDBClient PROPERTIES -+ IMPORTED_CONFIGURATIONS DEBUG -+ IMPORTED_LOCATION "${MARIADBCLIENT_LIBRARY_DEBUG}") -+ endif() -+ set_target_properties(MariaDBClient::MariaDBClient PROPERTIES -+ INTERFACE_INCLUDE_DIRECTORIES "${MARIADBCLIENT_INCLUDE_DIR}" -+ INTERFACE_COMPILE_DEFINITIONS HAS_MARIADB=1) -+ endif() -+endif() -+ -+mark_as_advanced(MARIADBCLIENT_INCLUDE_DIR MARIADBCLIENT_LIBRARY) -diff --git a/xbmc/dbwrappers/CMakeLists.txt b/xbmc/dbwrappers/CMakeLists.txt -index 5ca090f0e4dd..16a03f291a6c 100644 ---- a/xbmc/dbwrappers/CMakeLists.txt -+++ b/xbmc/dbwrappers/CMakeLists.txt -@@ -10,7 +10,7 @@ set(HEADERS Database.h - qry_dat.h - sqlitedataset.h) - --if(MYSQLCLIENT_FOUND) -+if(MYSQLCLIENT_FOUND OR MARIADBCLIENT_FOUND) - list(APPEND SOURCES mysqldataset.cpp) - list(APPEND HEADERS mysqldataset.h) - endif() -diff --git a/xbmc/dbwrappers/Database.cpp b/xbmc/dbwrappers/Database.cpp -index b90b28508e6d..c3ae6480bb74 100644 ---- a/xbmc/dbwrappers/Database.cpp -+++ b/xbmc/dbwrappers/Database.cpp -@@ -30,7 +30,7 @@ - #include "DatabaseManager.h" - #include "DbUrl.h" - --#ifdef HAS_MYSQL -+#if defined(HAS_MYSQL) || defined(HAS_MARIADB) - #include "mysqldataset.h" - #endif - -@@ -378,7 +378,7 @@ void CDatabase::InitSettings(DatabaseSettings &dbSettings) - { - m_sqlite = true; - --#ifdef HAS_MYSQL -+#if defined(HAS_MYSQL) || defined(HAS_MARIADB) - if (dbSettings.type == "mysql") - { - // check we have all information before we cancel the fallback -@@ -421,7 +421,7 @@ bool CDatabase::Connect(const std::string &dbName, const DatabaseSettings &dbSet - { - m_pDB.reset( new SqliteDatabase() ) ; - } --#ifdef HAS_MYSQL -+#if defined(HAS_MYSQL) || defined(HAS_MARIADB) - else if (dbSettings.type == "mysql") - { - m_pDB.reset( new MysqlDatabase() ) ; -diff --git a/xbmc/dbwrappers/mysqldataset.cpp b/xbmc/dbwrappers/mysqldataset.cpp -index 4e561296a630..69d48201483e 100644 ---- a/xbmc/dbwrappers/mysqldataset.cpp -+++ b/xbmc/dbwrappers/mysqldataset.cpp -@@ -30,7 +30,11 @@ - #include "utils/StringUtils.h" - - #include "mysqldataset.h" -+#ifdef HAS_MYSQL - #include "mysql/errmsg.h" -+#elif defined(HAS_MARIADB) -+#include -+#endif - - #ifdef TARGET_POSIX - #include "platform/linux/ConvUtils.h" -diff --git a/xbmc/dbwrappers/mysqldataset.h b/xbmc/dbwrappers/mysqldataset.h -index c3072acb1f8a..65949b013787 100644 ---- a/xbmc/dbwrappers/mysqldataset.h -+++ b/xbmc/dbwrappers/mysqldataset.h -@@ -22,7 +22,11 @@ - - #include - #include "dataset.h" -+#ifdef HAS_MYSQL - #include "mysql/mysql.h" -+#elif defined(HAS_MARIADB) -+#include -+#endif - - namespace dbiplus { - /***************** Class MysqlDatabase definition ****************** From 5fae36db33afcd69f5093031175ee385a37eeb39 Mon Sep 17 00:00:00 2001 From: MilhouseVH Date: Fri, 16 Feb 2018 05:18:46 +0000 Subject: [PATCH 05/11] kodi: USE_LTO for debug builds is not supported --- packages/mediacenter/kodi/package.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/mediacenter/kodi/package.mk b/packages/mediacenter/kodi/package.mk index d903edcaa9..e2cf42dad7 100644 --- a/packages/mediacenter/kodi/package.mk +++ b/packages/mediacenter/kodi/package.mk @@ -203,7 +203,7 @@ KODI_LIBDVD="$KODI_DVDCSS \ -DLIBDVDREAD_URL=$SOURCES/libdvdread/libdvdread-$(get_pkg_version libdvdread).tar.gz" # Build Kodi using parallel LTO -[ "$LTO_SUPPORT" = "yes" ] && PKG_KODI_USE_LTO="-DUSE_LTO=$CONCURRENCY_MAKE_LEVEL" +[ "$LTO_SUPPORT" = "yes" -a "$DEBUG" != "yes" ] && PKG_KODI_USE_LTO="-DUSE_LTO=$CONCURRENCY_MAKE_LEVEL" PKG_CMAKE_OPTS_TARGET="-DNATIVEPREFIX=$TOOLCHAIN \ -DWITH_TEXTUREPACKER=$TOOLCHAIN/bin/TexturePacker \ From 34bd6dcf48d17e6f69344c2d1b47a6b751853b84 Mon Sep 17 00:00:00 2001 From: MilhouseVH Date: Fri, 16 Feb 2018 05:18:46 +0000 Subject: [PATCH 06/11] libdvdcss: update to libdvdcss-8f5dba3 --- packages/multimedia/libdvdcss/package.mk | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/multimedia/libdvdcss/package.mk b/packages/multimedia/libdvdcss/package.mk index 918b218a60..7ef8ece181 100644 --- a/packages/multimedia/libdvdcss/package.mk +++ b/packages/multimedia/libdvdcss/package.mk @@ -17,8 +17,8 @@ ################################################################################ PKG_NAME="libdvdcss" -PKG_VERSION="2f12236" -PKG_SHA256="b6eb2d929ff56cb051152c32010afc5e7cf5fe8c5ae32dca412a2b46b6b57e34" +PKG_VERSION="8f5dba3" +PKG_SHA256="669868984d1cac32e85ea7e2e669b22b960354e3078073b9176d857844fedc3c" PKG_ARCH="any" PKG_LICENSE="GPL" PKG_SITE="https://github.com/xbmc/libdvdcss" From 68162f95800870591ab229cbeccd40061daa2c84 Mon Sep 17 00:00:00 2001 From: MilhouseVH Date: Fri, 16 Feb 2018 05:18:46 +0000 Subject: [PATCH 07/11] libdvdread: update to libdvdread-86f9500 --- packages/multimedia/libdvdread/package.mk | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/multimedia/libdvdread/package.mk b/packages/multimedia/libdvdread/package.mk index 55ada3232b..da44ec3c25 100644 --- a/packages/multimedia/libdvdread/package.mk +++ b/packages/multimedia/libdvdread/package.mk @@ -17,8 +17,8 @@ ################################################################################ PKG_NAME="libdvdread" -PKG_VERSION="17d99db" -PKG_SHA256="e7179b2054163652596a56301c9f025515cb08c6d6310b42b897c3ad11c0199b" +PKG_VERSION="86f9500" +PKG_SHA256="a73888c81d14443d9f09fa02f5e5ecc08d9ab09639789fab810557069d335f34" PKG_ARCH="any" PKG_LICENSE="GPL" PKG_SITE="https://github.com/xbmc/libdvdread" From 5283ba369357badebed7e0031d191656928686ed Mon Sep 17 00:00:00 2001 From: MilhouseVH Date: Fri, 16 Feb 2018 05:18:46 +0000 Subject: [PATCH 08/11] libdvdnav: update to libdvdnav-6501b70 --- packages/multimedia/libdvdnav/package.mk | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/multimedia/libdvdnav/package.mk b/packages/multimedia/libdvdnav/package.mk index c8b089405b..67150281c9 100644 --- a/packages/multimedia/libdvdnav/package.mk +++ b/packages/multimedia/libdvdnav/package.mk @@ -17,8 +17,8 @@ ################################################################################ PKG_NAME="libdvdnav" -PKG_VERSION="43b5f81" -PKG_SHA256="8e3f0563e16df898fe115e1723e3f78dbc953f6e9cf4f04568add215371d9ed2" +PKG_VERSION="6501b70" +PKG_SHA256="4004342489f21ce1d67ef98e95669dbd5c6d3dde1dcdf6ce97358155dc16f6f9" PKG_ARCH="any" PKG_LICENSE="GPL" PKG_SITE="https://github.com/xbmc/libdvdnav" From bce90ccfcd1c3748ee641a68f4c32a5675c16674 Mon Sep 17 00:00:00 2001 From: MilhouseVH Date: Fri, 16 Feb 2018 05:18:46 +0000 Subject: [PATCH 09/11] kodi: cleanup after #768 --- .../kodi/libdvd/libdvd-makefile.in | 34 ------------------- 1 file changed, 34 deletions(-) delete mode 100644 packages/mediacenter/kodi/libdvd/libdvd-makefile.in diff --git a/packages/mediacenter/kodi/libdvd/libdvd-makefile.in b/packages/mediacenter/kodi/libdvd/libdvd-makefile.in deleted file mode 100644 index e99b746177..0000000000 --- a/packages/mediacenter/kodi/libdvd/libdvd-makefile.in +++ /dev/null @@ -1,34 +0,0 @@ -ARCH=@ARCH@ -CC=@CC@ -CXX=@CXX@ - -DVDNAV_A = $(DVD_PREFIX)/usr/lib/libdvdnav.a -DVDREAD_A = $(DVD_PREFIX)/usr/lib/libdvdread.a -DVDCSS_A = $(DVD_PREFIX)/usr/lib/libdvdcss.a - -WRAPPER = @abs_top_srcdir@/xbmc/cores/DllLoader/exports/wrapper.o -WRAPPER_DEF = @abs_top_srcdir@/xbmc/cores/DllLoader/exports/wrapper.def - -SO_LDFLAGS = $(LDFLAGS) -shared -fPIC -rdynamic - -SYSDIR = @abs_top_srcdir@/system/players/VideoPlayer -SOS = libdvdcss-$(ARCH).so libdvdnav-$(ARCH).so -SLIB = $(addprefix $(SYSDIR)/, $(SOS)) - -all: $(SLIB) - -$(SYSDIR)/libdvdcss-$(ARCH).so: $(WRAPPER) $(WRAPPER_DEF) $(DVDCSS_A) - mkdir -p libdvdcss; cd libdvdcss; $(AR) x $(DVDCSS_A) - $(CC) -o $@ $(SO_LDFLAGS) -Wl,--soname,$@ libdvdcss/*.o -Wl,--unresolved-symbols=ignore-all -lm \ - `cat $(WRAPPER_DEF)` $(WRAPPER) - -$(SYSDIR)/libdvdnav-$(ARCH).so: $(WRAPPER) $(WRAPPER_DEF) $(DVDNAV_A) $(DVDREAD_A) $(DVDCSS_A) - mkdir -p libdvdread; cd libdvdread; $(AR) x $(DVDREAD_A) - mkdir -p libdvdnav; cd libdvdnav; $(AR) x $(DVDNAV_A) - mkdir -p libdvdcss; cd libdvdcss; $(AR) x $(DVDCSS_A) - $(CC) -o $@ $(SO_LDFLAGS) -Wl,--soname,$@ libdvdread/*.o libdvdnav/*.o libdvdcss/*.o -lm -Wl,--unresolved-symbols=ignore-all \ - `cat $(WRAPPER_DEF)` $(WRAPPER) - -$(WRAPPER_DEF): - $(MAKE) -C @abs_top_srcdir@/xbmc/cores/DllLoader/exports wrapper.def - From 868de36dedb1aac6d481de93d0d981814311a82c Mon Sep 17 00:00:00 2001 From: MilhouseVH Date: Fri, 16 Feb 2018 05:18:46 +0000 Subject: [PATCH 10/11] kodi: add PR13552 (amlcodec: cleanup and simplify 3D handling code) --- .../kodi/patches/kodi-999.99-PR13552.patch | 349 ++++++++++++++++++ 1 file changed, 349 insertions(+) create mode 100644 packages/mediacenter/kodi/patches/kodi-999.99-PR13552.patch diff --git a/packages/mediacenter/kodi/patches/kodi-999.99-PR13552.patch b/packages/mediacenter/kodi/patches/kodi-999.99-PR13552.patch new file mode 100644 index 0000000000..d3d8032ec2 --- /dev/null +++ b/packages/mediacenter/kodi/patches/kodi-999.99-PR13552.patch @@ -0,0 +1,349 @@ +From ec9e4d1fe085d585b6107fb0bb27645506b540f3 Mon Sep 17 00:00:00 2001 +From: Alex Deryskyba +Date: Thu, 15 Feb 2018 21:48:16 +0200 +Subject: [PATCH] amlcodec: cleanup and simplify 3D handling code + +--- + .../cores/VideoPlayer/DVDCodecs/Video/AMLCodec.cpp | 178 ++++----------------- + xbmc/cores/VideoPlayer/DVDCodecs/Video/AMLCodec.h | 7 +- + xbmc/utils/AMLUtils.cpp | 20 --- + xbmc/utils/AMLUtils.h | 1 - + 4 files changed, 30 insertions(+), 176 deletions(-) + +diff --git a/xbmc/cores/VideoPlayer/DVDCodecs/Video/AMLCodec.cpp b/xbmc/cores/VideoPlayer/DVDCodecs/Video/AMLCodec.cpp +index d83fbda65bd4..d8a14fed1a25 100644 +--- a/xbmc/cores/VideoPlayer/DVDCodecs/Video/AMLCodec.cpp ++++ b/xbmc/cores/VideoPlayer/DVDCodecs/Video/AMLCodec.cpp +@@ -55,8 +55,7 @@ + + // amcodec include + extern "C" { +-#include +-#include ++#include + } // extern "C" + + CEvent g_aml_sync_event; +@@ -346,44 +345,6 @@ typedef struct vframe_states + int buf_avail_num; + } vframe_states_t; + +-static int aml_ioctl_get(CODEC_HANDLE h, int subcmd, unsigned long paramter) +-{ +- struct am_ioctl_parm parm; +- memset(&parm, 0, sizeof(parm)); +- parm.cmd = subcmd; +- parm.data_32 = *(unsigned int *)paramter; +- if (ioctl(h, AMSTREAM_IOC_GET, (unsigned long)&parm) < 0) +- { +- CLog::Log(LOGERROR, "aml_ioctl_get failed: subcmd=%x, errno=%d", subcmd, errno); +- return -1; +- } +- *(unsigned int *)paramter = parm.data_32; +- return 0; +-} +- +- +-#ifndef AMSTREAM_IOC_MAGIC +-#define AMSTREAM_IOC_MAGIC 'S' +-#endif +- +-#ifndef AMSTREAM_IOC_VF_STATUS +-#define AMSTREAM_IOC_VF_STATUS _IOR(AMSTREAM_IOC_MAGIC, 0x60, unsigned long) +-#endif +- +-#ifndef AMSTREAM_IOC_GET_3D_TYPE +-#define AMSTREAM_IOC_GET_3D_TYPE _IOW((AMSTREAM_IOC_MAGIC), 0x3d, unsigned int) +-#endif +- +- +-enum +-{ +- VPP_3D_MODE_NULL = 0, +- VPP_3D_MODE_LR, +- VPP_3D_MODE_TB, +- VPP_3D_MODE_LA, +- VPP_3D_MODE_FA +-}; +- + /*************************************************************************/ + /*************************************************************************/ + void dumpfile_open(am_private_t *para) +@@ -2264,53 +2225,21 @@ void CAMLCodec::SetVideoSaturation(const int saturation) + SysfsUtils::SetInt("/sys/class/video/saturation", saturation); + } + +-bool CAMLCodec::SetVideo3dMode(const int mode3d) +-{ +- bool result = true; +- if (SysfsUtils::Has("/sys/class/ppmgr/ppmgr_3d_mode")) +- { +- CLog::Log(LOGDEBUG, "CAMLCodec::SetVideo3dMode:mode3d(0x%x)", mode3d); +- SysfsUtils::SetInt("/sys/class/ppmgr/ppmgr_3d_mode", mode3d); +- } +- else +- { +- CLog::Log(LOGINFO, "CAMLCodec::SetVideo3dMode: ppmgr_3d support not found in kernel."); +- result = false; +- } +- return result; +-} +- +-std::string CAMLCodec::GetStereoMode() ++std::string CAMLCodec::GetVideoStereoMode() + { + std::string stereoMode; + +- //Get Decoder Stereo mode +- int decoder_sm(VPP_3D_MODE_NULL); +- aml_ioctl_get(am_private->vcodec.handle, AMSTREAM_IOC_GET_3D_TYPE, (unsigned long)&decoder_sm); +- +- switch (decoder_sm) ++ switch (m_processInfo.GetVideoSettings().m_StereoMode) + { +- case VPP_3D_MODE_LR: ++ case RENDER_STEREO_MODE_SPLIT_VERTICAL: + stereoMode = "left_right"; + break; +- case VPP_3D_MODE_TB: ++ case RENDER_STEREO_MODE_SPLIT_HORIZONTAL: + stereoMode = "top_bottom"; + break; +- case VPP_3D_MODE_LA: +- case VPP_3D_MODE_FA: + default: +- switch(m_processInfo.GetVideoSettings().m_StereoMode) +- { +- case RENDER_STEREO_MODE_SPLIT_VERTICAL: +- stereoMode = "left_right"; +- break; +- case RENDER_STEREO_MODE_SPLIT_HORIZONTAL: +- stereoMode = "top_bottom"; +- break; +- default: +- stereoMode = m_hints.stereo_mode; +- break; +- } ++ stereoMode = m_hints.stereo_mode; ++ break; + } + + if (m_processInfo.GetVideoSettings().m_StereoInvert) +@@ -2320,6 +2249,7 @@ std::string CAMLCodec::GetStereoMode() + else if (stereoMode == "left_right") + stereoMode = "right_left"; + } ++ + return stereoMode; + } + +@@ -2359,20 +2289,20 @@ void CAMLCodec::SetVideoRect(const CRect &SrcRect, const CRect &DestRect) + update = true; + } + +- // video stereo mode/view. +- RENDER_STEREO_MODE stereo_mode = g_graphicsContext.GetStereoMode(); +- if (m_stereo_mode != stereo_mode) ++ // GUI stereo mode/view. ++ RENDER_STEREO_MODE guiStereoMode = g_graphicsContext.GetStereoMode(); ++ if (m_guiStereoMode != guiStereoMode) + { +- m_stereo_mode = stereo_mode; ++ m_guiStereoMode = guiStereoMode; + update = true; + } +- RENDER_STEREO_VIEW stereo_view = g_graphicsContext.GetStereoView(); +- if (m_stereo_view != stereo_view) ++ RENDER_STEREO_VIEW guiStereoView = g_graphicsContext.GetStereoView(); ++ if (m_guiStereoView != guiStereoView) + { + // left/right/top/bottom eye, + // this might change every other frame. + // we do not care but just track it. +- m_stereo_view = stereo_view; ++ m_guiStereoView = guiStereoView; + } + + // dest_rect +@@ -2424,9 +2354,9 @@ void CAMLCodec::SetVideoRect(const CRect &SrcRect, const CRect &DestRect) + { + float xscale = display.Width() / gui.Width(); + float yscale = display.Height() / gui.Height(); +- if (m_stereo_mode == RENDER_STEREO_MODE_SPLIT_VERTICAL) ++ if (m_guiStereoMode == RENDER_STEREO_MODE_SPLIT_VERTICAL) + xscale /= 2.0; +- else if (m_stereo_mode == RENDER_STEREO_MODE_SPLIT_HORIZONTAL) ++ else if (m_guiStereoMode == RENDER_STEREO_MODE_SPLIT_HORIZONTAL) + yscale /= 2.0; + dst_rect.x1 *= xscale; + dst_rect.x2 *= xscale; +@@ -2434,75 +2364,21 @@ void CAMLCodec::SetVideoRect(const CRect &SrcRect, const CRect &DestRect) + dst_rect.y2 *= yscale; + } + +- if (m_stereo_mode == RENDER_STEREO_MODE_MONO) ++ if (m_guiStereoMode == RENDER_STEREO_MODE_MONO) + { +- std::string mode = GetStereoMode(); +- if (mode == "left_right") +- { +- if (!SetVideo3dMode(MODE_3D_TO_2D_L)) +- { +- // fall back to software scaling if no hw support +- // was found +- dst_rect.x2 *= 2.0; +- } +- } +- else if (mode == "right_left") +- { +- if (!SetVideo3dMode(MODE_3D_TO_2D_R)) +- { +- // fall back to software scaling if no hw support +- // was found +- dst_rect.x2 *= 2.0; +- } +- } +- else if (mode == "top_bottom") +- { +- if (!SetVideo3dMode(MODE_3D_TO_2D_T)) +- { +- // fall back to software scaling if no hw support +- // was found +- dst_rect.y2 *= 2.0; +- } +- } +- else if (mode == "bottom_top") +- { +- if (!SetVideo3dMode(MODE_3D_TO_2D_B)) +- { +- // fall back to software scaling if no hw support +- // was found +- dst_rect.y2 *= 2.0; +- } +- } +- else +- SetVideo3dMode(MODE_3D_DISABLE); ++ std::string videoStereoMode = GetVideoStereoMode(); ++ if (videoStereoMode == "left_right" || videoStereoMode == "righ_left") ++ dst_rect.x2 *= 2.0; ++ else if (videoStereoMode == "top_bottom" || videoStereoMode == "bottom_top") ++ dst_rect.y2 *= 2.0; + } +- else if (m_stereo_mode == RENDER_STEREO_MODE_SPLIT_VERTICAL) ++ else if (m_guiStereoMode == RENDER_STEREO_MODE_SPLIT_VERTICAL) + { + dst_rect.x2 *= 2.0; +- SetVideo3dMode(MODE_3D_DISABLE); + } +- else if (m_stereo_mode == RENDER_STEREO_MODE_SPLIT_HORIZONTAL) ++ else if (m_guiStereoMode == RENDER_STEREO_MODE_SPLIT_HORIZONTAL) + { + dst_rect.y2 *= 2.0; +- SetVideo3dMode(MODE_3D_DISABLE); +- } +- else if (m_stereo_mode == RENDER_STEREO_MODE_INTERLACED) +- { +- std::string mode = GetStereoMode(); +- if (mode == "left_right") +- SetVideo3dMode(MODE_3D_LR); +- else if (mode == "right_left") +- SetVideo3dMode(MODE_3D_LR_SWITCH); +- else if (mode == "row_interleaved_lr") +- SetVideo3dMode(MODE_3D_LR); +- else if (mode == "row_interleaved_rl") +- SetVideo3dMode(MODE_3D_LR_SWITCH); +- else +- SetVideo3dMode(MODE_3D_DISABLE); +- } +- else +- { +- SetVideo3dMode(MODE_3D_DISABLE); + } + + #if 1 +@@ -2522,8 +2398,8 @@ void CAMLCodec::SetVideoRect(const CRect &SrcRect, const CRect &DestRect) + CLog::Log(LOGDEBUG, "CAMLCodec::SetVideoRect:gui(%s)", s_gui.c_str()); + CLog::Log(LOGDEBUG, "CAMLCodec::SetVideoRect:m_dst_rect(%s)", s_m_dst_rect.c_str()); + CLog::Log(LOGDEBUG, "CAMLCodec::SetVideoRect:dst_rect(%s)", s_dst_rect.c_str()); +- CLog::Log(LOGDEBUG, "CAMLCodec::SetVideoRect:m_stereo_mode(%d)", m_stereo_mode); +- CLog::Log(LOGDEBUG, "CAMLCodec::SetVideoRect:m_stereo_view(%d)", m_stereo_view); ++ CLog::Log(LOGDEBUG, "CAMLCodec::SetVideoRect:m_guiStereoMode(%d)", m_guiStereoMode); ++ CLog::Log(LOGDEBUG, "CAMLCodec::SetVideoRect:m_guiStereoView(%d)", m_guiStereoView); + #endif + + // goofy 0/1 based difference in aml axis coordinates. +diff --git a/xbmc/cores/VideoPlayer/DVDCodecs/Video/AMLCodec.h b/xbmc/cores/VideoPlayer/DVDCodecs/Video/AMLCodec.h +index 378c237c3b38..fdb1b63fffe1 100644 +--- a/xbmc/cores/VideoPlayer/DVDCodecs/Video/AMLCodec.h ++++ b/xbmc/cores/VideoPlayer/DVDCodecs/Video/AMLCodec.h +@@ -71,8 +71,7 @@ class CAMLCodec + void SetVideoContrast(const int contrast); + void SetVideoBrightness(const int brightness); + void SetVideoSaturation(const int saturation); +- bool SetVideo3dMode(const int mode3d); +- std::string GetStereoMode(); ++ std::string GetVideoStereoMode(); + bool OpenAmlVideo(const CDVDStreamInfo &hints); + void CloseAmlVideo(); + std::string GetVfmMap(const std::string &name); +@@ -96,8 +95,8 @@ class CAMLCodec + CRect m_display_rect; + + int m_view_mode = -1; +- RENDER_STEREO_MODE m_stereo_mode = RENDER_STEREO_MODE_OFF; +- RENDER_STEREO_VIEW m_stereo_view = RENDER_STEREO_VIEW_OFF; ++ RENDER_STEREO_MODE m_guiStereoMode = RENDER_STEREO_MODE_OFF; ++ RENDER_STEREO_VIEW m_guiStereoView = RENDER_STEREO_VIEW_OFF; + float m_zoom = -1.0f; + int m_contrast = -1; + int m_brightness = -1; +diff --git a/xbmc/utils/AMLUtils.cpp b/xbmc/utils/AMLUtils.cpp +index 5666236e93a5..9ba833838ff4 100644 +--- a/xbmc/utils/AMLUtils.cpp ++++ b/xbmc/utils/AMLUtils.cpp +@@ -54,22 +54,6 @@ bool aml_present() + return has_aml == 1; + } + +-bool aml_hw3d_present() +-{ +- static int has_hw3d = -1; +- if (has_hw3d == -1) +- { +- if (SysfsUtils::Has("/sys/class/ppmgr/ppmgr_3d_mode") || +- SysfsUtils::Has("/sys/class/amhdmitx/amhdmitx0/config")) +- has_hw3d = 1; +- else +- has_hw3d = 0; +- if (has_hw3d) +- CLog::Log(LOGNOTICE, "AML 3D support detected"); +- } +- return has_hw3d == 1; +-} +- + bool aml_wired_present() + { + static int has_wired = -1; +@@ -138,10 +122,6 @@ bool aml_permissions() + { + CLog::Log(LOGERROR, "AML: no rw on /sys/class/audiodsp/digital_raw"); + } +- if (!SysfsUtils::HasRW("/sys/class/ppmgr/ppmgr_3d_mode")) +- { +- CLog::Log(LOGERROR, "AML: no rw on /sys/class/ppmgr/ppmgr_3d_mode"); +- } + if (!SysfsUtils::HasRW("/sys/class/amhdmitx/amhdmitx0/config")) + { + CLog::Log(LOGERROR, "AML: no rw on /sys/class/amhdmitx/amhdmitx0/config"); +diff --git a/xbmc/utils/AMLUtils.h b/xbmc/utils/AMLUtils.h +index a012d1b0aedc..1fc7dab3e3b3 100644 +--- a/xbmc/utils/AMLUtils.h ++++ b/xbmc/utils/AMLUtils.h +@@ -54,7 +54,6 @@ enum AML_SUPPORT_H264_4K2K + + bool aml_present(); + bool aml_permissions(); +-bool aml_hw3d_present(); + bool aml_wired_present(); + bool aml_support_hevc(); + bool aml_support_hevc_4k2k(); From fa3cfa499565d53277a934eb409abd9335314dae Mon Sep 17 00:00:00 2001 From: MilhouseVH Date: Fri, 16 Feb 2018 05:18:46 +0000 Subject: [PATCH 11/11] ffmpeg: update HEVC support --- ...mpeg-99.1003-pfcd_hevc_optimisations.patch | 1012 +++++++++-------- 1 file changed, 547 insertions(+), 465 deletions(-) diff --git a/packages/multimedia/ffmpeg/patches/ffmpeg-99.1003-pfcd_hevc_optimisations.patch b/packages/multimedia/ffmpeg/patches/ffmpeg-99.1003-pfcd_hevc_optimisations.patch index b3fb4b36ac..325c99a41e 100644 --- a/packages/multimedia/ffmpeg/patches/ffmpeg-99.1003-pfcd_hevc_optimisations.patch +++ b/packages/multimedia/ffmpeg/patches/ffmpeg-99.1003-pfcd_hevc_optimisations.patch @@ -65,7 +65,7 @@ index 18d80ee87a..9e621d09c1 100755 vaguedenoiser_filter_deps="gpl" vidstabdetect_filter_deps="libvidstab" diff --git a/fftools/ffmpeg.c b/fftools/ffmpeg.c -index 3ee31473dc..312864d737 100644 +index 3ee31473dc..6875200380 100644 --- a/fftools/ffmpeg.c +++ b/fftools/ffmpeg.c @@ -24,6 +24,12 @@ @@ -337,15 +337,15 @@ index 3ee31473dc..312864d737 100644 + if (de->conn != NULL) { + mmal_connection_destroy(de->conn); + } ++ if (de->rpi_pool != NULL) { ++ mmal_port_pool_destroy(de->display->input[0], de->rpi_pool); ++ } + if (de->isp != NULL) { + mmal_component_destroy(de->isp); + } + if (de->display != NULL) { + mmal_component_destroy(de->display); + } -+ if (de->rpi_pool != NULL) { -+ mmal_port_pool_destroy(de->display->input[0], de->rpi_pool); -+ } + + av_free(de); + } @@ -388,7 +388,7 @@ index 3ee31473dc..312864d737 100644 } void remove_avoptions(AVDictionary **a, AVDictionary *b) -@@ -1052,6 +1321,15 @@ static void do_video_out(OutputFile *of, +@@ -1052,6 +1321,17 @@ static void do_video_out(OutputFile *of, if (ost->source_index >= 0) ist = input_streams[ost->source_index]; @@ -396,7 +396,9 @@ index 3ee31473dc..312864d737 100644 + if (next_picture && ist != NULL) + { + if (rpi_display_env == NULL) -+ rpi_display_env = display_init(next_picture->format, 0, 0, next_picture->width, next_picture->height); ++ rpi_display_env = display_init(next_picture->format, 0, 0, ++ next_picture->width - next_picture->crop_right, ++ next_picture->height - next_picture->crop_bottom); + display_frame(ist->dec_ctx, rpi_display_env, next_picture); + } +#endif @@ -404,7 +406,7 @@ index 3ee31473dc..312864d737 100644 frame_rate = av_buffersink_get_frame_rate(filter); if (frame_rate.num > 0 && frame_rate.den > 0) duration = 1/(av_q2d(frame_rate) * av_q2d(enc->time_base)); -@@ -2165,8 +2443,8 @@ static int ifilter_send_frame(InputFilter *ifilter, AVFrame *frame) +@@ -2165,8 +2445,8 @@ static int ifilter_send_frame(InputFilter *ifilter, AVFrame *frame) ifilter->channel_layout != frame->channel_layout; break; case AVMEDIA_TYPE_VIDEO: @@ -415,7 +417,7 @@ index 3ee31473dc..312864d737 100644 break; } -@@ -2896,6 +3174,12 @@ static int init_input_stream(int ist_index, char *error, int error_len) +@@ -2896,6 +3176,12 @@ static int init_input_stream(int ist_index, char *error, int error_len) ist->dec_ctx->opaque = ist; ist->dec_ctx->get_format = get_format; ist->dec_ctx->get_buffer2 = get_buffer; @@ -4944,10 +4946,10 @@ index 0000000000..7dfcc2751a + diff --git a/libavcodec/arm/rpi_hevcdsp_sao_neon.S b/libavcodec/arm/rpi_hevcdsp_sao_neon.S new file mode 100644 -index 0000000000..b56dc8ccc5 +index 0000000000..12ffc5708a --- /dev/null +++ b/libavcodec/arm/rpi_hevcdsp_sao_neon.S -@@ -0,0 +1,2156 @@ +@@ -0,0 +1,2199 @@ +/* + * Copyright (c) 2014 - 2015 Seppo Tomperi + * 2017 John Cox (for Raspberry Pi) @@ -4974,45 +4976,72 @@ index 0000000000..b56dc8ccc5 + +.set EDGE_SRC_STRIDE, 160 + -+.macro sao_band_64b_8 XLAT0, XLAT1, Q_K128 -+ vshr.u8 q12, q8, #3 -+ vadd.s8 q8, \Q_K128 -+ vshr.u8 q13, q9, #3 -+ vadd.s8 q9, \Q_K128 ++.macro sao_band_64b_8 XLAT0, XLAT1, Q_K128, I1, I2, I3, I4 ++ vshr.u8 q12, q8, #3 ++ \I1 ++ vadd.i8 q8, \Q_K128 ++ \I2 ++ vshr.u8 q13, q9, #3 ++ \I3 ++ vadd.i8 q9, \Q_K128 ++ \I4 ++ vtbl.8 d24, \XLAT0, d24 ++ vtbl.8 d25, \XLAT0, d25 ++ vtbl.8 d26, \XLAT1, d26 ++ vtbl.8 d27, \XLAT1, d27 + -+ vtbl.8 d24, \XLAT0, d24 -+ vtbl.8 d25, \XLAT0, d25 -+ vtbl.8 d26, \XLAT1, d26 -+ vtbl.8 d27, \XLAT1, d27 ++ vqadd.s8 q8, q12 ++ vshr.u8 q12, q10, #3 ++ vadd.i8 q10, \Q_K128 ++ vqadd.s8 q9, q13 ++ vshr.u8 q13, q11, #3 ++ vadd.i8 q11, \Q_K128 + -+ vqadd.s8 q8, q12 -+ vshr.u8 q12, q10, #3 -+ vadd.s8 q10, \Q_K128 -+ vqadd.s8 q9, q13 -+ vshr.u8 q13, q11, #3 -+ vadd.s8 q11, \Q_K128 -+ -+ vsub.s8 q8, \Q_K128 -+ vtbl.8 d24, \XLAT0, d24 -+ vtbl.8 d25, \XLAT0, d25 -+ vsub.s8 q9, \Q_K128 -+ vtbl.8 d26, \XLAT1, d26 -+ vtbl.8 d27, \XLAT1, d27 -+ vqadd.s8 q10, q12 -+ vqadd.s8 q11, q13 -+ vsub.s8 q10, \Q_K128 -+ vsub.s8 q11, \Q_K128 ++ vtbl.8 d24, \XLAT0, d24 ++ vtbl.8 d25, \XLAT0, d25 ++ vtbl.8 d26, \XLAT1, d26 ++ vtbl.8 d27, \XLAT1, d27 ++ vqadd.s8 q10, q12 ++ vsub.i8 q8, \Q_K128 ++ vqadd.s8 q11, q13 ++ vsub.i8 q9, \Q_K128 ++ vsub.i8 q10, \Q_K128 ++ vsub.i8 q11, \Q_K128 +.endm + -+.macro sao_band_16b_8 XLAT0, XLAT1, Q_K128 -+ vshr.u8 q12, q8, #3 -+ vadd.s8 q8, \Q_K128 -+ -+ vtbl.8 d24, \XLAT0, d24 -+ vtbl.8 d25, \XLAT1, d25 -+ -+ vqadd.s8 q8, q12 -+ vsub.s8 q8, \Q_K128 ++.macro sao_band_16b_8 XLAT0, XLAT1, Q_K128, L1, L2, L3, L4, L5, S1, S2, S3, S4 ++ \L1 ++ \L2 ++ \L3 ++ \L4 ++ \L5 ++ vadd.i8 q12, q8, \Q_K128 ++ vshr.u8 q8, #3 ++ vtbl.8 d16, \XLAT0, d16 ++ vtbl.8 d17, \XLAT1, d17 ++ vqadd.s8 q12, q8 ++ bmi 2f ++1: \L1 ++ \L2 ++ \L3 ++ \L4 ++ \L5 ++ vsub.i8 q13, q12, \Q_K128 ++ vadd.i8 q12, q8, \Q_K128 ++ vshr.u8 q8, #3 ++ \S1 ++ \S2 ++ \S3 ++ \S4 ++ vtbl.8 d16, \XLAT0, d16 ++ vtbl.8 d17, \XLAT1, d17 ++ vqadd.s8 q12, q8 ++ bpl 1b ++2: vsub.i8 q13, q12, \Q_K128 ++ \S1 ++ \S2 ++ \S3 ++ \S4 +.endm + + @@ -5028,13 +5057,15 @@ index 0000000000..b56dc8ccc5 +.endm + +@ Clobbers q12, q13 -+.macro sao_band_64b_16 Q0, Q1, Q2, Q3, XLAT0, XLAT1, Q_MIN, Q_MAX, bit_depth ++.macro sao_band_64b_16 Q0, Q1, Q2, Q3, XLAT0, XLAT1, Q_MIN, Q_MAX, bit_depth, I1, I2 + vshrn.i16 d24, \Q0, #(\bit_depth - 5) + vshrn.i16 d25, \Q1, #(\bit_depth - 5) + vshrn.i16 d26, \Q2, #(\bit_depth - 5) -+ vshrn.i16 d27, \Q3, #(\bit_depth - 5) ++ \I1 + vtbl.8 d24, \XLAT0, d24 ++ vshrn.i16 d27, \Q3, #(\bit_depth - 5) + vtbl.8 d25, \XLAT1, d25 ++ \I2 + vtbl.8 d26, \XLAT0, d26 + vtbl.8 d27, \XLAT1, d27 + vaddw.s8 \Q0, d24 @@ -5044,18 +5075,48 @@ index 0000000000..b56dc8ccc5 + clip16_4 \Q0, \Q1, \Q2, \Q3, \Q_MIN, \Q_MAX +.endm + -+@ Clobbers q12 -+.macro sao_band_32b_16 Q0, Q1, XLAT0, XLAT1, Q_MIN, Q_MAX, bit_depth -+ vshrn.i16 d24, \Q0, #(\bit_depth - 5) -+ vshrn.i16 d25, \Q1, #(\bit_depth - 5) ++@ Clobbers q10, q11, q12 ++.macro sao_band_32b_16 Q0, Q1, XLAT0, XLAT1, Q_MIN, Q_MAX, bit_depth, L1, L2, L3, L4, L5, S1, S2, S3, S4 ++ \L1 ++ \L2 ++ \L3 ++ \L4 ++ \L5 ++ vshrn.i16 d24, \Q0, #\bit_depth - 5 ++ vshrn.i16 d25, \Q1, #\bit_depth - 5 + vtbl.8 d24, \XLAT0, d24 + vtbl.8 d25, \XLAT1, d25 -+ vaddw.s8 \Q0, d24 -+ vaddw.s8 \Q1, d25 -+ vmax.s16 \Q0, \Q_MIN -+ vmax.s16 \Q1, \Q_MIN -+ vmin.s16 \Q0, \Q_MAX -+ vmin.s16 \Q1, \Q_MAX ++ vaddw.s8 q10, \Q0, d24 ++ vaddw.s8 q11, \Q1, d25 ++ bmi 2f ++1: \L1 ++ \L2 ++ \L3 ++ \L4 ++ \L5 ++ vmax.s16 q10, \Q_MIN ++ vmax.s16 q11, \Q_MIN ++ vshrn.i16 d24, \Q0, #\bit_depth - 5 ++ vshrn.i16 d25, \Q1, #\bit_depth - 5 ++ vmin.s16 q10, \Q_MAX ++ vmin.s16 q11, \Q_MAX ++ \S1 ++ \S2 ++ \S3 ++ \S4 ++ vtbl.8 d24, \XLAT0, d24 ++ vtbl.8 d25, \XLAT1, d25 ++ vaddw.s8 q10, \Q0, d24 ++ vaddw.s8 q11, \Q1, d25 ++ bpl 1b ++2: vmax.s16 q10, \Q_MIN ++ vmax.s16 q11, \Q_MIN ++ vmin.s16 q10, \Q_MAX ++ vmin.s16 q11, \Q_MAX ++ \S1 ++ \S2 ++ \S3 ++ \S4 +.endm + + @@ -5072,85 +5133,59 @@ index 0000000000..b56dc8ccc5 +@ +@ It also loads other common regs + ++@ Beware that the offset read here overrreads by 6 bytes so source must be sized appropriately +function band_load_y ++ ldr ip, [sp, #16] @ &sao_offset_val[0] ++ ldr r4, [sp, #20] @ sao_left_class ++ vmov.i64 d4, #0 + vmov.i64 q0, #0 -+ ldr r12, [sp, #8] @ &sao_offset_val[0] -+ add r12, #2 @ 1st interesting val is [1] -+ vld1.16 {d16}, [r12] @ Unaligned -+ vmov.i64 q1, #0 -+ ldr r12, [sp, #12] @ sao_left_class -+ -+ mov r4, sp -+ sub sp, #32 -+ and sp, #~63 @ Align stack so we can wrap with a simple AND -+ vst1.8 {q0, q1}, [sp, :256] @ Put zero array on stack -+ add r12, sp -+ vst1.8 {d16[0]}, [r12]! -+ and r12, #~32 -+ vst1.8 {d16[2]}, [r12]! -+ and r12, #~32 -+ vst1.8 {d16[4]}, [r12]! -+ and r12, #~32 -+ vst1.8 {d16[6]}, [r12] -+ vld1.8 {q0, q1}, [sp, :256] @ Pop modified array -+ mov sp, r4 -+ -+ ldr r12, [sp, #20] @ height + pld [r1] -+ -+ sub r12, #1 ++ vld2.8 {q8}, [ip] ++ sub ip, sp, #8*5 ++ vmov.i64 q1, #0 ++ add r4, ip, r4 ++ vpush {d0-d4} @ Put zero array on stack ++ vshr.u64 d16, d16, #8 @ 1st interesting val is [1] ++ ldr ip, [ip, #8*5 + 28] @ height ++ vst1.32 {d16[0]}, [r4] + add r4, r1, r3 ++ vpop {d0-d4} @ Pop modified array ++ sub ip, ip, #1 ++ vorr d0, d0, d4 + bx lr +endfunc + -+ ++@ Beware that offset reads here overrread by 6 bytes so source must be sized appropriately +function band_load_c -+ vmov.i64 q2, #0 -+ ldr r12, [sp, #8] @ &sao_offset_val1[0] -+ add r12, #2 @ 1st interesting val is [1] -+ vld1.16 {d16}, [r12] @ Unaligned -+ vmov.i64 q3, #0 -+ ldr r12, [sp, #12] @ sao_left_class -+ -+ mov r4, sp @ Remember SP -+ sub sp, #32 -+ and sp, #~63 @ Align stack so we can wrap with a simple AND -+ -+ vst1.8 {q2, q3}, [sp, :256] @ Put zero array on stack -+ add r12, sp -+ vst1.8 {d16[0]}, [r12]! -+ and r12, #~32 -+ vst1.8 {d16[2]}, [r12]! -+ and r12, #~32 -+ vst1.8 {d16[4]}, [r12]! -+ and r12, #~32 -+ vst1.8 {d16[6]}, [r12] -+ vld1.8 {q0, q1}, [sp, :256] @ Pop modified array -+ -+ @ And again for the 2nd set -+ ldr r12, [r4, #16] @ &sao_offset_val2[0] -+ add r12, #2 @ 1st interesting val is [1] -+ vld1.16 {d16}, [r12] @ Unaligned -+ ldr r12, [r4, #20] @ sao_left_class2 -+ -+ vst1.8 {q2, q3}, [sp, :256] @ Put zero array on stack (again) -+ add r12, sp -+ vst1.8 {d16[0]}, [r12]! -+ and r12, #~32 -+ vst1.8 {d16[2]}, [r12]! -+ and r12, #~32 -+ vst1.8 {d16[4]}, [r12]! -+ and r12, #~32 -+ vst1.8 {d16[6]}, [r12] -+ vld1.8 {q2, q3}, [sp, :256] @ Pop modified array -+ -+ mov sp, r4 -+ -+ ldr r12, [sp, #28] @ height ++ ldr ip, [sp, #16] @ &sao_offset_val1[0] ++ ldr r4, [sp, #20] @ sao_left_class1 ++ vmov.i64 d24, #0 ++ vmov.i64 q10, #0 + pld [r1] -+ -+ subs r12, #1 ++ vld2.8 {q8}, [ip] ++ sub ip, sp, #8*5 ++ vmov.i64 q11, #0 ++ add r4, ip, r4 ++ ldr ip, [sp, #24] @ &sao_offset_val2[0] ++ vpush {d20-d24} @ Put zero array on stack ++ vld2.8 {q9}, [ip] ++ vshr.u64 d16, d16, #8 @ 1st interesting val is [1] ++ ldr ip, [sp, #8*5 + 28] @ sao_left_class2 ++ vst1.32 {d16[0]}, [r4] ++ add ip, sp, ip ++ vshr.u64 d18, d18, #8 @ 1st interesting val is [1] ++ vldmia sp, {d0-d3} @ Load modified array ++ vldr d16, [sp, #8*4] + add r4, r1, r3 ++ vstmia sp, {d20-d24} @ Put zero array on stack (again) ++ vst1.32 {d18[0]}, [ip] ++ vorr d0, d0, d16 ++ vldmia sp, {d4-d7} @ Load modified array ++ vldr d18, [sp, #8*4] ++ ldr ip, [sp, #8*5 + 36] @ height ++ add sp, sp, #8*5 ++ vorr d4, d4, d18 ++ sub ip, ip, #1 + bx lr +endfunc + @@ -5166,24 +5201,21 @@ index 0000000000..b56dc8ccc5 +@ int height) [sp, #12] + +function ff_hevc_rpi_sao_band_64_neon_8, export=1 -+ push {r4, lr} -+ bl band_load_y ++ push {r4-r6, lr} + vmov.u8 q15, #128 ++ bl band_load_y + -+1: subs r12, #1 -+ vldm r1, {q8-q11} -+ pld [r4] -+ add r1, r3 -+ -+ sao_band_64b_8 "{d0,d1,d2,d3}", "{d0,d1,d2,d3}", q15 -+ -+ it ne -+ addne r4, r3 -+ vstm r0, {q8-q11} ++1: vldmia r1, {q8-q11} ++ sao_band_64b_8 {d0-d3}, {d0-d3}, q15, \ ++ "pld [r4]", \ ++ "subs ip, #1", \ ++ "it ne; addne r4, r3", \ ++ "add r1, r3" ++ vstmia r0, {q8-q11} + add r0, r2 + bpl 1b + -+ pop {r4, pc} ++ pop {r4-r6, pc} +endfunc + +@ ff_hevc_rpi_sao_band_32_neon_8 ( @@ -5197,21 +5229,25 @@ index 0000000000..b56dc8ccc5 +@ int height) [sp, #12] + +function ff_hevc_rpi_sao_band_32_neon_8, export=1 -+ push {r4, lr} -+ bl band_load_y ++ push {r4-r6, lr} ++ add r5, r0, r2 ++ add r6, r1, r3 ++ lsl r2, #1 ++ lsl r3, #1 + vmov.u8 q15, #128 ++ bl band_load_y + -+1: subs r12, #2 -+ vld1.8 { q8, q9 }, [r1, :128], r3 -+ vld1.8 {q10, q11}, [r1, :128], r3 ++1: vld1.8 { q8, q9 }, [r1, :128], r3 ++ subs ip, #2 ++ vld1.8 {q10, q11}, [r6, :128], r3 + -+ sao_band_64b_8 "{d0,d1,d2,d3}", "{d0,d1,d2,d3}", q15 ++ sao_band_64b_8 {d0-d3}, {d0-d3}, q15 + + vst1.8 { q8, q9 }, [r0, :128], r2 -+ vst1.8 {q10, q11}, [r0, :128], r2 ++ vst1.8 {q10, q11}, [r5, :128], r2 + bpl 1b + -+ pop {r4, pc} ++ pop {r4-r6, pc} +endfunc + +@ ff_hevc_rpi_sao_band_16_neon_8 ( @@ -5225,25 +5261,29 @@ index 0000000000..b56dc8ccc5 +@ int height) [sp, #12] + +function ff_hevc_rpi_sao_band_16_neon_8, export=1 -+ push {r4, lr} -+ bl band_load_y ++ push {r4-r6, lr} ++ add r5, r0, r2 ++ add r6, r1, r3 ++ lsl r2, #1 ++ lsl r3, #1 + vmov.u8 q15, #128 ++ bl band_load_y + -+1: subs r12, #4 -+ vld1.8 { q8}, [r1, :128], r3 -+ vld1.8 { q9}, [r1, :128], r3 ++1: vld1.8 { q8}, [r1, :128], r3 ++ subs ip, #4 ++ vld1.8 { q9}, [r6, :128], r3 + vld1.8 {q10}, [r1, :128], r3 -+ vld1.8 {q11}, [r1, :128], r3 ++ vld1.8 {q11}, [r6, :128], r3 + -+ sao_band_64b_8 "{d0,d1,d2,d3}", "{d0,d1,d2,d3}", q15 ++ sao_band_64b_8 {d0-d3}, {d0-d3}, q15 + + vst1.8 { q8}, [r0, :128], r2 -+ vst1.8 { q9}, [r0, :128], r2 ++ vst1.8 { q9}, [r5, :128], r2 + vst1.8 {q10}, [r0, :128], r2 -+ vst1.8 {q11}, [r0, :128], r2 ++ vst1.8 {q11}, [r5, :128], r2 + bpl 1b + -+ pop {r4, pc} ++ pop {r4-r6, pc} +endfunc + +@ ff_hevc_rpi_sao_band_8_neon_8 ( @@ -5257,39 +5297,38 @@ index 0000000000..b56dc8ccc5 +@ int height) [sp, #12] + +function ff_hevc_rpi_sao_band_8_neon_8, export=1 -+ push {r4, lr} -+ bl band_load_y -+ ldr lr, [sp, #16] @ width ++ ldr ip, [sp, #8] @ width ++ push {r4-r6, lr} + vmov.u8 q15, #128 -+ cmp lr, #8 ++ cmp ip, #8 ++ bl band_load_y ++ add r5, r0, r2 ++ add r6, r1, r3 ++ lsl r2, #1 ++ lsl r3, #1 + blt 4f + -+1: subs r12, #2 -+ vld1.8 {d16}, [r1, :64], r3 -+ vld1.8 {d17}, [r1, :64], r3 -+ -+ sao_band_16b_8 "{d0,d1,d2,d3}", "{d0,d1,d2,d3}", q15 -+ -+ vst1.8 {d16}, [r0, :64], r2 -+ vst1.8 {d17}, [r0, :64], r2 -+ bpl 1b -+ pop {r4, pc} -+ ++ sao_band_16b_8 {d0-d3}, {d0-d3}, q15, \ ++ "vld1.8 {d16}, [r1, :64], r3", \ ++ "subs ip, #2", \ ++ "vld1.8 {d17}, [r6, :64], r3", \ ++ "", \ ++ "", \ ++ "vst1.8 {d26}, [r0, :64], r2", \ ++ "vst1.8 {d27}, [r5, :64], r2" ++ pop {r4-r6, pc} +4: -+1: subs r12, #4 -+ vld1.32 {d16[0]}, [r1, :32], r3 -+ vld1.32 {d16[1]}, [r1, :32], r3 -+ vld1.32 {d17[0]}, [r1, :32], r3 -+ vld1.32 {d17[1]}, [r1, :32], r3 -+ -+ sao_band_16b_8 "{d0,d1,d2,d3}", "{d0,d1,d2,d3}", q15 -+ -+ vst1.32 {d16[0]}, [r0, :32], r2 -+ vst1.32 {d16[1]}, [r0, :32], r2 -+ vst1.32 {d17[0]}, [r0, :32], r2 -+ vst1.32 {d17[1]}, [r0, :32], r2 -+ bpl 1b -+ pop {r4, pc} ++ sao_band_16b_8 {d0-d3}, {d0-d3}, q15, \ ++ "vld1.32 {d16[0]}, [r1, :32], r3", \ ++ "subs ip, #4", \ ++ "vld1.32 {d16[1]}, [r6, :32], r3", \ ++ "vld1.32 {d17[0]}, [r1, :32], r3", \ ++ "vld1.32 {d17[1]}, [r6, :32], r3", \ ++ "vst1.32 {d26[0]}, [r0, :32], r2", \ ++ "vst1.32 {d26[1]}, [r5, :32], r2", \ ++ "vst1.32 {d27[0]}, [r0, :32], r2", \ ++ "vst1.32 {d27[1]}, [r5, :32], r2" ++ pop {r4-r6, pc} +endfunc + +@ ff_hevc_rpi_sao_band_c_32_neon_8( @@ -5305,31 +5344,25 @@ index 0000000000..b56dc8ccc5 +@ int height sp[20] + +function ff_hevc_rpi_sao_band_c_32_neon_8, export=1 -+ push {r4, lr} -+ bl band_load_c ++ push {r4-r6, lr} ++ add r5, r0, #32 ++ add r6, r1, #32 ++ vmov.u8 q15, #128 ++ bl band_load_c + -+ vmov.i8 q15, #128 -+ sub r3, #32 -+ sub r2, #32 ++1: vld2.8 { q8, q9 }, [r1, :128], r3 ++ subs ip, #1 ++ vld2.8 {q10, q11}, [r6, :128], r3 + -+1: subs r12, #1 -+ vld2.8 { q8, q9 }, [r1, :128]! -+ vld2.8 {q10, q11}, [r1, :128], r3 -+ -+ pld [r4] -+ -+ sao_band_64b_8 "{d0,d1,d2,d3}", "{d4,d5,d6,d7}", q15 -+ -+ vst2.8 { q8, q9 }, [r0, :128]! -+ vst2.8 {q10, q11}, [r0, :128], r2 -+ -+ itt ne -+ addne r4, r3 -+ addne r4, #32 ++ sao_band_64b_8 {d0-d3}, {d4-d7}, q15, \ ++ "pld [r4]", \ ++ "it ne; addne r4, r3" + ++ vst2.8 { q8, q9 }, [r0, :128], r2 ++ vst2.8 {q10, q11}, [r5, :128], r2 + bpl 1b + -+ pop {r4, pc} ++ pop {r4-r6, pc} +endfunc + +@ ff_hevc_rpi_sao_band_c_16_neon_8( @@ -5345,21 +5378,25 @@ index 0000000000..b56dc8ccc5 +@ int height sp[20] + +function ff_hevc_rpi_sao_band_c_16_neon_8, export=1 -+ push {r4, lr} -+ bl band_load_c -+ vmov.i8 q15, #128 ++ push {r4-r6, lr} ++ add r5, r0, r2 ++ add r6, r1, r3 ++ lsl r2, #1 ++ lsl r3, #1 ++ vmov.u8 q15, #128 ++ bl band_load_c + -+1: subs r12, #2 -+ vld2.8 { q8, q9 }, [r1, :128], r3 -+ vld2.8 {q10, q11}, [r1, :128], r3 ++1: vld2.8 { q8, q9 }, [r1, :128], r3 ++ subs ip, #2 ++ vld2.8 {q10, q11}, [r6, :128], r3 + -+ sao_band_64b_8 "{d0,d1,d2,d3}", "{d4,d5,d6,d7}", q15 ++ sao_band_64b_8 {d0-d3}, {d4-d7}, q15 + + vst2.8 { q8, q9 }, [r0, :128], r2 -+ vst2.8 {q10, q11}, [r0, :128], r2 -+ ++ vst2.8 {q10, q11}, [r5, :128], r2 + bpl 1b -+ pop {r4, pc} ++ ++ pop {r4-r6, pc} +endfunc + +@ ff_hevc_rpi_sao_band_c_8_neon_8( @@ -5375,35 +5412,36 @@ index 0000000000..b56dc8ccc5 +@ int height sp[20] + +function ff_hevc_rpi_sao_band_c_8_neon_8, export=1 -+ push {r4, lr} -+ bl band_load_c -+ ldr lr, [sp, #16] @ width ++ ldr ip, [sp, #16] @ width ++ push {r4-r6, lr} + vmov.u8 q15, #128 -+ cmp lr, #8 ++ cmp ip, #8 ++ bl band_load_c + blt 4f + -+1: subs r12, #1 -+ vld2.8 {d16, d17}, [r1, :128], r3 -+ -+ sao_band_16b_8 "{d0,d1,d2,d3}", "{d4,d5,d6,d7}", q15 -+ -+ vst2.8 {d16, d17}, [r0, :128], r2 -+ bpl 1b -+ pop {r4, pc} -+ ++ sao_band_16b_8 {d0-d3}, {d4-d7}, q15, \ ++ "vld2.8 {d16-d17}, [r1, :128], r3", \ ++ "subs ip, #1", \ ++ "", \ ++ "", \ ++ "", \ ++ "vst2.8 {d26-d27}, [r0, :128], r2" ++ pop {r4-r6, pc} +4: -+1: subs r12, #1 -+ vld1.8 {d16}, [r1, :64], r3 -+ vld1.8 {d17}, [r1, :64], r3 -+ vuzp.8 d16, d17 -+ -+ sao_band_16b_8 "{d0,d1,d2,d3}", "{d4,d5,d6,d7}", q15 -+ -+ vzip.8 d16, d17 -+ vst1.8 {d16}, [r0, :64], r2 -+ vst1.8 {d17}, [r0, :64], r2 -+ bpl 1b -+ pop {r4, pc} ++ add r5, r0, r2 ++ add r6, r1, r3 ++ lsl r2, #1 ++ lsl r3, #1 ++ sao_band_16b_8 {d0-d3}, {d4-d7}, q15, \ ++ "vld1.8 {d16}, [r1, :64], r3", \ ++ "subs ip, #2", \ ++ "vld1.8 {d17}, [r6, :64], r3", \ ++ "vuzp.8 d16, d17", \ ++ "", \ ++ "vzip.8 d26, d27", \ ++ "vst1.8 {d26}, [r0, :64], r2", \ ++ "vst1.8 {d27}, [r5, :64], r2" ++ pop {r4-r6, pc} +endfunc + + @@ -5418,24 +5456,23 @@ index 0000000000..b56dc8ccc5 +@ int height) [sp, #12] + +.macro band_64_16 bit_depth -+ push {r4, lr} -+ movw lr, #(1 << \bit_depth) - 1 ++ push {r4-r6, lr} + vmov.i64 q2, #0 -+ vdup.i16 q3, lr ++ vmov.i16 q3, #(1 << \bit_depth) - 1 + bl band_load_y + vpush {q4-q7} + -+1: subs r12, #1 -+ vldm r1, {q4-q11} -+ add r1, r3 -+ sao_band_64b_16 q4, q5, q6, q7, "{d0,d1,d2,d3}", "{d0,d1,d2,d3}", q2, q3, \bit_depth -+ sao_band_64b_16 q8, q9, q10, q11, "{d0,d1,d2,d3}", "{d0,d1,d2,d3}", q2, q3, \bit_depth ++1: vldm r1, {q4-q11} ++ sao_band_64b_16 q4, q5, q6, q7, {d0-d3}, {d0-d3}, q2, q3, \bit_depth, \ ++ "subs ip, #1", \ ++ "add r1, r3" ++ sao_band_64b_16 q8, q9, q10, q11, {d0-d3}, {d0-d3}, q2, q3, \bit_depth + vstm r0, {q4-q11} + add r0, r2 + bpl 1b + + vpop {q4-q7} -+ pop {r4, pc} ++ pop {r4-r6, pc} +.endm + +function ff_hevc_rpi_sao_band_64_neon_10, export=1 @@ -5453,21 +5490,20 @@ index 0000000000..b56dc8ccc5 +@ int height) [sp, #12] + +.macro band_32_16 bit_depth -+ push {r4, lr} -+ movw lr, #(1 << \bit_depth) - 1 ++ push {r4-r6, lr} + vmov.i64 q2, #0 -+ vdup.i16 q3, lr ++ vmov.i16 q3, #(1 << \bit_depth) - 1 + bl band_load_y + -+1: subs r12, #1 -+ vldm r1, {q8-q11} -+ add r1, r3 -+ sao_band_64b_16 q8, q9, q10, q11, "{d0,d1,d2,d3}", "{d0,d1,d2,d3}", q2, q3, \bit_depth ++1: vldm r1, {q8-q11} ++ sao_band_64b_16 q8, q9, q10, q11, {d0-d3}, {d0-d3}, q2, q3, \bit_depth, \ ++ "subs ip, #1", \ ++ "add r1, r3" + vstm r0, {q8-q11} + add r0, r2 + bpl 1b + -+ pop {r4, pc} ++ pop {r4-r6, pc} +.endm + +function ff_hevc_rpi_sao_band_32_neon_10, export=1 @@ -5485,21 +5521,24 @@ index 0000000000..b56dc8ccc5 +@ int height) [sp, #12] + +.macro band_16_16 bit_depth -+ push {r4, lr} -+ movw lr, #(1 << \bit_depth) - 1 ++ push {r4-r6, lr} ++ add r5, r0, r2 ++ add r6, r1, r3 ++ lsl r2, #1 ++ lsl r3, #1 + vmov.i64 q14, #0 -+ vdup.i16 q15, lr ++ vmov.i16 q15, #(1 << \bit_depth) - 1 + bl band_load_y + -+1: subs r12, #2 -+ vld1.16 { q8, q9 }, [r1, :128], r3 -+ vld1.16 {q10, q11}, [r1, :128], r3 -+ sao_band_64b_16 q8, q9, q10, q11, "{d0,d1,d2,d3}", "{d0,d1,d2,d3}", q14, q15, \bit_depth ++1: vld1.16 { q8, q9 }, [r1, :128], r3 ++ subs r12, #2 ++ vld1.16 {q10, q11}, [r6, :128], r3 ++ sao_band_64b_16 q8, q9, q10, q11, {d0-d3}, {d0-d3}, q14, q15, \bit_depth + vst1.16 { q8, q9 }, [r0, :128], r2 -+ vst1.16 {q10, q11}, [r0, :128], r2 ++ vst1.16 {q10, q11}, [r5, :128], r2 + bpl 1b + -+ pop {r4, pc} ++ pop {r4-r6, pc} +.endm + +function ff_hevc_rpi_sao_band_16_neon_10, export=1 @@ -5517,37 +5556,39 @@ index 0000000000..b56dc8ccc5 +@ int height) [sp, #12] + +.macro band_8_16 bit_depth -+ push {r4, lr} -+ movw lr, #(1 << \bit_depth) - 1 ++ ldr ip, [sp, #8] @ width ++ push {r4-r6, lr} + vmov.i64 q14, #0 -+ vdup.i16 q15, lr ++ cmp ip, #8 ++ vmov.i16 q15, #(1 << \bit_depth) - 1 + bl band_load_y -+ ldr lr, [sp, #16] -+ cmp lr, #8 ++ add r5, r0, r2 ++ add r6, r1, r3 ++ lsl r2, #1 ++ lsl r3, #1 + blt 4f + -+1: subs r12, #2 -+ vld1.16 { q8}, [r1, :128], r3 -+ vld1.16 { q9}, [r1, :128], r3 -+ sao_band_32b_16 q8, q9, "{d0,d1,d2,d3}", "{d0,d1,d2,d3}", q14, q15, \bit_depth -+ vst1.16 { q8}, [r0, :128], r2 -+ vst1.16 { q9}, [r0, :128], r2 -+ bpl 1b -+ pop {r4, pc} -+ ++ sao_band_32b_16 q8, q9, {d0-d3}, {d0-d3}, q14, q15, \bit_depth, \ ++ "vld1.16 {q8}, [r1, :128], r3", \ ++ "subs ip, #2", \ ++ "vld1.16 {q9}, [r6, :128], r3", \ ++ "", \ ++ "", \ ++ "vst1.16 {q10}, [r0, :128], r2", \ ++ "vst1.16 {q11}, [r5, :128], r2" ++ pop {r4-r6, pc} +4: -+1: subs r12, #4 -+ vld1.16 {d16}, [r1, :64], r3 -+ vld1.16 {d17}, [r1, :64], r3 -+ vld1.16 {d18}, [r1, :64], r3 -+ vld1.16 {d19}, [r1, :64], r3 -+ sao_band_32b_16 q8, q9, "{d0,d1,d2,d3}", "{d0,d1,d2,d3}", q14, q15, \bit_depth -+ vst1.16 {d16}, [r0, :64], r2 -+ vst1.16 {d17}, [r0, :64], r2 -+ vst1.16 {d18}, [r0, :64], r2 -+ vst1.16 {d19}, [r0, :64], r2 -+ bpl 1b -+ pop {r4, pc} ++ sao_band_32b_16 q8, q9, {d0-d3}, {d0-d3}, q14, q15, \bit_depth, \ ++ "vld1.16 {d16}, [r1, :64], r3", \ ++ "subs ip, #4", \ ++ "vld1.16 {d17}, [r6, :64], r3", \ ++ "vld1.16 {d18}, [r1, :64], r3", \ ++ "vld1.16 {d19}, [r6, :64], r3", \ ++ "vst1.16 {d20}, [r0, :64], r2", \ ++ "vst1.16 {d21}, [r5, :64], r2", \ ++ "vst1.16 {d22}, [r0, :64], r2", \ ++ "vst1.16 {d23}, [r5, :64], r2" ++ pop {r4-r6, pc} +.endm + +function ff_hevc_rpi_sao_band_8_neon_10, export=1 @@ -5568,39 +5609,37 @@ index 0000000000..b56dc8ccc5 +@ int height sp[20] + +.macro band_c_32_16 bit_depth -+ push {r4, lr} -+ bl band_load_c -+ vpush {q4-q7} -+ movw lr, #(1 << \bit_depth) - 1 ++ push {r4-r6, lr} ++ add r5, r0, #32 ++ add r6, r1, #32 ++ sub r2, #64 ++ sub r3, #64 + vmov.i64 q14, #0 -+ vdup.i16 q15, lr -+ sub r2, #96 ++ vmov.i16 q15, #(1 << \bit_depth) - 1 ++ bl band_load_c ++ mov lr, #64 ++ vpush {q4-q7} + -+1: subs r12, #1 ++1: vld2.16 { q4, q5 }, [r1, :128], lr ++ subs ip, #1 ++ vld2.16 { q6, q7 }, [r6, :128], lr ++ vld2.16 { q8, q9 }, [r1, :128], r3 ++ vld2.16 {q10, q11}, [r6, :128], r3 + -+ vld2.16 { q4, q5 }, [r1, :128]! -+ vld2.16 { q6, q7 }, [r1, :128]! -+ vld2.16 { q8, q9 }, [r1, :128]! -+ vld2.16 {q10, q11}, [r1, :128], r3 ++ sao_band_64b_16 q4, q5, q6, q7, {d0-d3}, {d4-d7}, q14, q15, \bit_depth, \ ++ "pld [r4]", \ ++ "it ne; addne r4, r3" ++ sao_band_64b_16 q8, q9, q10, q11, {d0-d3}, {d4-d7}, q14, q15, \bit_depth + -+ pld [r4] -+ sub r1, #96 -+ -+ sao_band_64b_16 q4, q5, q6, q7, "{d0,d1,d2,d3}", "{d4,d5,d6,d7}", q14, q15, \bit_depth -+ sao_band_64b_16 q8, q9, q10, q11, "{d0,d1,d2,d3}", "{d4,d5,d6,d7}", q14, q15, \bit_depth -+ -+ it ne -+ addne r4, r3 -+ -+ vst2.16 { q4, q5 }, [r0, :128]! -+ vst2.16 { q6, q7 }, [r0, :128]! -+ vst2.16 { q8, q9 }, [r0, :128]! -+ vst2.16 {q10, q11}, [r0, :128], r2 ++ vst2.16 { q4, q5 }, [r0, :128], lr ++ vst2.16 { q6, q7 }, [r5, :128], lr ++ vst2.16 { q8, q9 }, [r0, :128], r2 ++ vst2.16 {q10, q11}, [r5, :128], r2 + + bpl 1b + + vpop {q4-q7} -+ pop {r4, pc} ++ pop {r4-r6, pc} +.endm + +function ff_hevc_rpi_sao_band_c_32_neon_10, export=1 @@ -5621,26 +5660,25 @@ index 0000000000..b56dc8ccc5 +@ int height sp[20] + +.macro band_c_16_16 bit_depth -+ push {r4, lr} -+ bl band_load_c -+ movw lr, #(1 << \bit_depth) - 1 ++ push {r4-r6, lr} ++ add r5, r0, #32 ++ add r6, r1, #32 + vmov.i64 q14, #0 -+ vdup.i16 q15, lr -+ sub r2, #32 -+ sub r3, #32 ++ vmov.i16 q15, #(1 << \bit_depth) - 1 ++ bl band_load_c + -+1: subs r12, #1 ++1: vld2.16 { q8, q9 }, [r1, :128], r3 ++ subs ip, #1 ++ vld2.16 {q10, q11}, [r6, :128], r3 + -+ vld2.16 { q8, q9 }, [r1, :128]! -+ vld2.16 {q10, q11}, [r1, :128], r3 ++ sao_band_64b_16 q4, q5, q6, q7, {d0-d3}, {d4-d7}, q14, q15, \bit_depth ++ sao_band_64b_16 q8, q9, q10, q11, {d0-d3}, {d4-d7}, q14, q15, \bit_depth + -+ sao_band_64b_16 q8, q9, q10, q11, "{d0,d1,d2,d3}", "{d4,d5,d6,d7}", q14, q15, \bit_depth -+ -+ vst2.16 { q8, q9 }, [r0, :128]! -+ vst2.16 {q10, q11}, [r0, :128], r2 ++ vst2.16 { q8, q9 }, [r0, :128], r2 ++ vst2.16 {q10, q11}, [r5, :128], r2 + + bpl 1b -+ pop {r4, pc} ++ pop {r4-r6, pc} +.endm + +function ff_hevc_rpi_sao_band_c_16_neon_10, export=1 @@ -5661,37 +5699,36 @@ index 0000000000..b56dc8ccc5 +@ int height sp[20] + +.macro band_c_8_16 bit_depth -+ push {r4, lr} -+ bl band_load_c -+ movw lr, #(1 << \bit_depth) - 1 ++ ldr ip, [sp, #16] @ width ++ push {r4-r6, lr} + vmov.i64 q14, #0 -+ vdup.i16 q15, lr -+ ldr lr, [sp, #24] @ width -+ cmp lr, #8 ++ cmp ip, #8 ++ vmov.i16 q15, #(1 << \bit_depth) - 1 ++ bl band_load_c + blt 4f + -+1: subs r12, #1 -+ vld2.16 { q8, q9 }, [r1, :128], r3 -+ -+ sao_band_32b_16 q8, q9, "{d0,d1,d2,d3}", "{d4,d5,d6,d7}", q14, q15, \bit_depth -+ -+ vst2.16 { q8, q9 }, [r0, :128], r2 -+ -+ bpl 1b -+ pop {r4, pc} -+ ++ sao_band_32b_16 q8, q9, {d0-d3}, {d4-d7}, q14, q15, \bit_depth, \ ++ "vld2.16 {q8,q9}, [r1, :128], r3", \ ++ "subs ip, #1", \ ++ "", \ ++ "", \ ++ "", \ ++ "vst2.16 {q10,q11}, [r0, :128], r2" ++ pop {r4-r6, pc} +4: -+1: subs r12, #2 -+ vld2.16 {d16, d17}, [r1, :128], r3 -+ vld2.16 {d18, d19}, [r1, :128], r3 -+ -+ sao_band_32b_16 q8, q9, "{d0,d1,d2,d3}", "{d4,d5,d6,d7}", q14, q15, \bit_depth -+ -+ vst2.16 {d16, d17}, [r0, :128], r2 -+ vst2.16 {d18, d19}, [r0, :128], r2 -+ -+ bpl 1b -+ pop {r4, pc} ++ add r5, r0, r2 ++ add r6, r1, r3 ++ lsl r2, #1 ++ lsl r3, #1 ++ sao_band_32b_16 q8, q9, {d0-d3}, {d4-d7}, q14, q15, \bit_depth, \ ++ "vld2.16 {d16,d18}, [r1, :128], r3", \ ++ "subs ip, #2", \ ++ "vld2.16 {d17,d19}, [r6, :128], r3", \ ++ "", \ ++ "", \ ++ "vst2.16 {d20,d22}, [r0, :128], r2", \ ++ "vst2.16 {d21,d23}, [r5, :128], r2" ++ pop {r4-r6, pc} +.endm + +function ff_hevc_rpi_sao_band_c_8_neon_10, export=1 @@ -6286,8 +6323,10 @@ index 0000000000..b56dc8ccc5 + vmov.64 q0, q4 + pld [r1, r3] + vmov.64 q1, q5 ++ it le + pople {lr} + vmov.64 q2, q6 ++ it le + bxle lr + vmov.64 q3, q7 + add r0, r0, r2 @@ -6323,6 +6362,7 @@ index 0000000000..b56dc8ccc5 + vmov q1, q9 + vst1.8 {q2-q3}, [r0, :256], r2 + vmov q2, q10 ++ it le + bxle r6 + vmov q3, q11 + b 1b @@ -6342,6 +6382,7 @@ index 0000000000..b56dc8ccc5 + subs r12, #1 + // copy c to a + vmov.64 q0, q1 ++ it le + bxle r6 + // copy b to c + vmov.64 q1, q2 @@ -6450,8 +6491,10 @@ index 0000000000..b56dc8ccc5 + vldr d25, [r6, #-8] + vstmia r0, {q0-q3} + vext.8 q3, q6, q7, #16 - \pb ++ it le + pople {lr} + vext.8 q2, q5, q6, #16 - \pb ++ it le + bxle lr + vext.8 q1, q4, q5, #16 - \pb + add r6, r6, r3 @@ -6647,8 +6690,10 @@ index 0000000000..b56dc8ccc5 + vldr d24, [r6, #64] + vstmia r0, {q0-q3} + vext.8 q0, q4, q5, #\pb ++ it le + pople {lr} + vext.8 q1, q5, q6, #\pb ++ it le + bxle lr + vext.8 q2, q6, q7, #\pb + add r6, r6, r3 @@ -9750,10 +9795,10 @@ index 0000000000..0aee673d8b +#endif /* AVCODEC_RPI_HEVC_DATA_H */ diff --git a/libavcodec/rpi_hevc_filter.c b/libavcodec/rpi_hevc_filter.c new file mode 100644 -index 0000000000..a1d6d56b04 +index 0000000000..5ae479dd0b --- /dev/null +++ b/libavcodec/rpi_hevc_filter.c -@@ -0,0 +1,1067 @@ +@@ -0,0 +1,1069 @@ +/* + * HEVC video decoder + * @@ -10709,7 +10754,8 @@ index 0000000000..a1d6d56b04 +// flushes and invalidates all pixel rows in [start,end-1] +static void ff_hevc_rpi_flush_buffer_lines(HEVCRpiContext *s, int start, int end, int flush_luma, int flush_chroma) +{ -+ rpi_cache_flush_env_t * const rfe = rpi_cache_flush_init(); ++ rpi_cache_buf_t cbuf; ++ rpi_cache_flush_env_t * const rfe = rpi_cache_flush_init(&cbuf); + rpi_cache_flush_add_frame_block(rfe, s->frame, RPI_CACHE_FLUSH_MODE_WB_INVALIDATE, + 0, start, s->ps.sps->width, end - start, ctx_vshift(s, 1), flush_luma, flush_chroma); + rpi_cache_flush_finish(rfe); @@ -10749,7 +10795,8 @@ index 0000000000..a1d6d56b04 + + // Call VPU + { -+ const vpu_qpu_job_h vqj = vpu_qpu_job_new(); ++ vpu_qpu_job_env_t qvbuf; ++ const vpu_qpu_job_h vqj = vpu_qpu_job_init(&qvbuf); + vpu_qpu_job_add_vpu(vqj, vpu_get_fn(s->ps.sps->bit_depth), s->dvq->vpu_cmds_vc, 3, 0, 0, 0, 5); // 5 means to do all the commands + vpu_qpu_job_add_sync_this(vqj, &s->dvq->cmd_id); + vpu_qpu_job_finish(vqj); @@ -11780,10 +11827,10 @@ index 0000000000..4b4d032a16 +#endif /* AVCODEC_RPI_HEVC_PARSE_H */ diff --git a/libavcodec/rpi_hevc_ps.c b/libavcodec/rpi_hevc_ps.c new file mode 100644 -index 0000000000..d28ae0ec92 +index 0000000000..93fc26de88 --- /dev/null +++ b/libavcodec/rpi_hevc_ps.c -@@ -0,0 +1,1756 @@ +@@ -0,0 +1,1765 @@ +/* + * HEVC Parameter Set decoding + * @@ -13349,6 +13396,15 @@ index 0000000000..d28ae0ec92 + pps->num_ref_idx_l1_default_active = get_ue_golomb_long(gb) + 1; + + pps->pic_init_qp_minus26 = get_se_golomb(gb); ++ if (pps->pic_init_qp_minus26 > 25 || pps->pic_init_qp_minus26 < -(26 + sps->qp_bd_offset)) { ++ av_log(avctx, AV_LOG_ERROR, ++ "init_qp_minus26 %d is outside the valid range " ++ "[%d, %d].\n", ++ pps->pic_init_qp_minus26, ++ -(26 + sps->qp_bd_offset), 25); ++ ret = AVERROR_INVALIDDATA; ++ goto err; ++ } + + pps->constrained_intra_pred_flag = get_bits1(gb); + pps->transform_skip_enabled_flag = get_bits1(gb); @@ -13542,10 +13598,10 @@ index 0000000000..d28ae0ec92 +} diff --git a/libavcodec/rpi_hevc_ps.h b/libavcodec/rpi_hevc_ps.h new file mode 100644 -index 0000000000..989f8953b4 +index 0000000000..96c3739c4f --- /dev/null +++ b/libavcodec/rpi_hevc_ps.h -@@ -0,0 +1,446 @@ +@@ -0,0 +1,447 @@ +/* + * HEVC parameter set parsing + * @@ -13650,6 +13706,7 @@ index 0000000000..989f8953b4 + int * offset; + int * size; + int num_entry_point_offsets; ++ int offsets_allocated; + + int8_t slice_qp; + @@ -26424,10 +26481,10 @@ index 0000000000..56d5206827 +}; diff --git a/libavcodec/rpi_hevcdec.c b/libavcodec/rpi_hevcdec.c new file mode 100644 -index 0000000000..0ad64f9f19 +index 0000000000..3cee92a11f --- /dev/null +++ b/libavcodec/rpi_hevcdec.c -@@ -0,0 +1,5679 @@ +@@ -0,0 +1,5705 @@ +/* + * HEVC video Decoder + * @@ -27222,6 +27279,38 @@ index 0000000000..0ad64f9f19 + * Section 5.7 + */ + ++// Realloc the entry point arrays ++static int alloc_entry_points(RpiSliceHeader * const sh, const int n) ++{ ++ if (sh->entry_point_offset == NULL || n > sh->offsets_allocated || n == 0) ++ { ++ // Round up alloc to multiple of 32 ++ int a = (n + 31) & ~31; ++ ++ // We don't care about the previous contents so probably fastest to simply discard ++ av_freep(&sh->entry_point_offset); ++ av_freep(&sh->offset); ++ av_freep(&sh->size); ++ ++ if (a != 0) ++ { ++ sh->entry_point_offset = av_malloc_array(a, sizeof(unsigned)); ++ sh->offset = av_malloc_array(a, sizeof(int)); ++ sh->size = av_malloc_array(a, sizeof(int)); ++ ++ if (!sh->entry_point_offset || !sh->offset || !sh->size) { ++ sh->num_entry_point_offsets = 0; ++ sh->offsets_allocated = 0; ++ return AVERROR(ENOMEM); ++ } ++ } ++ ++ sh->offsets_allocated = a; ++ } ++ ++ return 0; ++} ++ +/* free everything allocated by pic_arrays_init() */ +static void pic_arrays_free(HEVCRpiContext *s) +{ @@ -27255,9 +27344,7 @@ index 0000000000..0ad64f9f19 + av_freep(&s->horizontal_bs); + av_freep(&s->vertical_bs); + -+ av_freep(&s->sh.entry_point_offset); -+ av_freep(&s->sh.size); -+ av_freep(&s->sh.offset); ++ alloc_entry_points(&s->sh, 0); + + av_buffer_pool_uninit(&s->tab_mvf_pool); + av_buffer_pool_uninit(&s->rpl_tab_pool); @@ -27328,7 +27415,7 @@ index 0000000000..0ad64f9f19 + s->bs_width = (width >> 2) + 1; + s->bs_height = (height >> 2) + 1; + -+ s->sao = av_mallocz_array(ctb_count, sizeof(*s->sao)); ++ s->sao = av_mallocz(ctb_count * sizeof(*s->sao) + 8); // Our sao code overreads this array slightly + s->deblock = av_mallocz_array(ctb_count, sizeof(*s->deblock)); + if (!s->sao || !s->deblock) + goto fail; @@ -28048,17 +28135,12 @@ index 0000000000..0ad64f9f19 + return AVERROR_INVALIDDATA; + } + -+ av_freep(&sh->entry_point_offset); -+ av_freep(&sh->offset); -+ av_freep(&sh->size); -+ sh->entry_point_offset = av_malloc_array(sh->num_entry_point_offsets, sizeof(unsigned)); -+ sh->offset = av_malloc_array(sh->num_entry_point_offsets, sizeof(int)); -+ sh->size = av_malloc_array(sh->num_entry_point_offsets, sizeof(int)); -+ if (!sh->entry_point_offset || !sh->offset || !sh->size) { -+ sh->num_entry_point_offsets = 0; ++ if ((ret = alloc_entry_points(sh, sh->num_entry_point_offsets)) < 0) ++ { + av_log(s->avctx, AV_LOG_ERROR, "Failed to allocate memory\n"); -+ return AVERROR(ENOMEM); ++ return ret; + } ++ + for (i = 0; i < sh->num_entry_point_offsets; i++) { + uint32_t val_minus1 = get_bits_long(gb, offset_len); + if (val_minus1 > (1 << 28)) @@ -28071,13 +28153,7 @@ index 0000000000..0ad64f9f19 + } + sh->entry_point_offset[i] = val_minus1 + 1; // +1 to get the size + } -+ if (s->threads_number > 1 && (s->ps.pps->num_tile_rows > 1 || s->ps.pps->num_tile_columns > 1)) { -+ s->enable_parallel_tiles = 0; // TODO: you can enable tiles in parallel here -+ s->threads_number = 1; -+ } else -+ s->enable_parallel_tiles = 0; -+ } else -+ s->enable_parallel_tiles = 0; ++ } + } + + if (s->ps.pps->slice_header_extension_present_flag) { @@ -28251,23 +28327,23 @@ index 0000000000..0ad64f9f19 + if (s->ps.pps->cu_qp_delta_enabled_flag && !lc->tu.is_cu_qp_delta_coded) { + lc->tu.cu_qp_delta = ff_hevc_rpi_cu_qp_delta_abs(lc); + if (lc->tu.cu_qp_delta != 0) ++ { + if (ff_hevc_rpi_cu_qp_delta_sign_flag(lc) == 1) + lc->tu.cu_qp_delta = -lc->tu.cu_qp_delta; -+ lc->tu.is_cu_qp_delta_coded = 1; + -+// Was: -+// if (lc->tu.cu_qp_delta < -(26 + s->ps.sps->qp_bd_offset / 2) || -+// if (lc->tu.cu_qp_delta < -(26 + s->ps.sps->qp_bd_offset / 2) || -+// 2016 standard says: -+ if (lc->tu.cu_qp_delta < -(26 + s->ps.sps->qp_bd_offset) || -+ lc->tu.cu_qp_delta > 25) { -+ av_log(s->avctx, AV_LOG_ERROR, -+ "The cu_qp_delta %d is outside the valid range " -+ "[%d, %d].\n", -+ lc->tu.cu_qp_delta, -+ -(26 + s->ps.sps->qp_bd_offset), 25); -+ return AVERROR_INVALIDDATA; ++ if (lc->tu.cu_qp_delta < -(26 + s->ps.sps->qp_bd_offset/2) || ++ lc->tu.cu_qp_delta > (25 + s->ps.sps->qp_bd_offset/2)) ++ { ++ av_log(s->avctx, AV_LOG_ERROR, ++ "The cu_qp_delta %d is outside the valid range " ++ "[%d, %d].\n", ++ lc->tu.cu_qp_delta, ++ -(26 + s->ps.sps->qp_bd_offset/2), ++ (25 + s->ps.sps->qp_bd_offset/2)); ++ return AVERROR_INVALIDDATA; ++ } + } ++ lc->tu.is_cu_qp_delta_coded = 1; + + ff_hevc_rpi_set_qPy(s, lc, cb_xBase, cb_yBase, log2_cb_size); + } @@ -29854,11 +29930,15 @@ index 0000000000..0ad64f9f19 + const unsigned int yb = (s->ps.pps->ctb_ts_flags[jb->ctu_ts_last] & CTB_TS_FLAGS_EOT) != 0 ? + bound_b : y - ctb_size; + -+ rpi_cache_flush_env_t * const rfe = rpi_cache_flush_init(); -+ rpi_cache_flush_add_frame_block(rfe, s->frame, RPI_CACHE_FLUSH_MODE_WB_INVALIDATE, -+ xl, yt, bound_r - xl, yb - yt, -+ ctx_vshift(s, 1), 1, 1); -+ rpi_cache_flush_finish(rfe); ++ if (yb > yt && bound_r > xl) ++ { ++ rpi_cache_buf_t cbuf; ++ rpi_cache_flush_env_t * const rfe = rpi_cache_flush_init(&cbuf); ++ rpi_cache_flush_add_frame_block(rfe, s->frame, RPI_CACHE_FLUSH_MODE_WB_INVALIDATE, ++ xl, yt, bound_r - xl, yb - yt, ++ ctx_vshift(s, 1), 1, 1); ++ rpi_cache_flush_finish(rfe); ++ } + } + + // Signal @@ -30145,9 +30225,10 @@ index 0000000000..0ad64f9f19 + +static void flush_frame(HEVCRpiContext *s,AVFrame *frame) +{ -+ rpi_cache_flush_env_t * rfe = rpi_cache_flush_init(); -+ rpi_cache_flush_add_frame(rfe, frame, RPI_CACHE_FLUSH_MODE_WB_INVALIDATE); -+ rpi_cache_flush_finish(rfe); ++ rpi_cache_buf_t cbuf; ++ rpi_cache_flush_env_t * rfe = rpi_cache_flush_init(&cbuf); ++ rpi_cache_flush_add_frame(rfe, frame, RPI_CACHE_FLUSH_MODE_WB_INVALIDATE); ++ rpi_cache_flush_finish(rfe); +} + +static void job_gen_bounds(const HEVCRpiContext * const s, HEVCRpiJob * const jb) @@ -30181,8 +30262,10 @@ index 0000000000..0ad64f9f19 + const HEVCRpiContext * const s = s0; + vpu_qpu_wait_h sync_y; + int pred_y, pred_c; -+ const vpu_qpu_job_h vqj = vpu_qpu_job_new(); -+ rpi_cache_flush_env_t * const rfe = rpi_cache_flush_init(); ++ vpu_qpu_job_env_t qvbuf; ++ const vpu_qpu_job_h vqj = vpu_qpu_job_init(&qvbuf); ++ rpi_cache_buf_t cbuf; ++ rpi_cache_flush_env_t * const rfe = rpi_cache_flush_init(&cbuf); + + { + const HEVCRpiCoeffsEnv * const cf = &jb->coeffs; @@ -30314,6 +30397,7 @@ index 0000000000..0ad64f9f19 + av_freep(&jb->intra.cmds); + rpi_free_inter_pred(&jb->chroma_ip); + rpi_free_inter_pred(&jb->luma_ip); ++ av_free(jb); +} + +static void jbg_delete(HEVCRpiJobGlobal * const jbg) @@ -31766,7 +31850,6 @@ index 0000000000..0ad64f9f19 + ff_hevc_rpi_progress_kill_state(s->progress_states + i); + } + job_lc_kill(s->HEVClc); -+ av_rpi_zc_uninit(avctx); + + av_freep(&s->sao_pixel_buffer_h[0]); // [1] & [2] allocated with [0] + av_freep(&s->sao_pixel_buffer_v[0]); @@ -31787,10 +31870,6 @@ index 0000000000..0ad64f9f19 + s->ps.pps = NULL; + s->ps.vps = NULL; + -+ av_freep(&s->sh.entry_point_offset); -+ av_freep(&s->sh.offset); -+ av_freep(&s->sh.size); -+ + for (i = 1; i < s->threads_number; i++) { + if (s->sList[i] != NULL) { + av_freep(&s->sList[i]); @@ -31805,6 +31884,11 @@ index 0000000000..0ad64f9f19 + + ff_h2645_packet_uninit(&s->pkt); + ++ // This must be after we free off the DPB ++ // * If the outer code is still holding any frames hopefully it will ++ // have its own ref to zc ++ av_rpi_zc_uninit(avctx); ++ + return 0; +} + @@ -32001,7 +32085,6 @@ index 0000000000..0ad64f9f19 + + hevc_init_worker(s); + -+ s->enable_parallel_tiles = 0; + s->sei.picture_timing.picture_struct = 0; + s->eos = 1; + @@ -32109,10 +32192,10 @@ index 0000000000..0ad64f9f19 + diff --git a/libavcodec/rpi_hevcdec.h b/libavcodec/rpi_hevcdec.h new file mode 100644 -index 0000000000..2201017cb3 +index 0000000000..fcbf102fa1 --- /dev/null +++ b/libavcodec/rpi_hevcdec.h -@@ -0,0 +1,1061 @@ +@@ -0,0 +1,1060 @@ +/* + * HEVC video decoder + * @@ -32932,7 +33015,6 @@ index 0000000000..2201017cb3 + uint16_t seq_decode; + uint16_t seq_output; + -+ int enable_parallel_tiles; + atomic_int wpp_err; + + const uint8_t *data; @@ -37322,10 +37404,10 @@ index 0000000000..b3168788d2 +#endif diff --git a/libavcodec/rpi_qpu.c b/libavcodec/rpi_qpu.c new file mode 100644 -index 0000000000..3dfc35fa5c +index 0000000000..4a8b328236 --- /dev/null +++ b/libavcodec/rpi_qpu.c -@@ -0,0 +1,939 @@ +@@ -0,0 +1,920 @@ +#include +#include +#include @@ -37347,12 +37429,6 @@ index 0000000000..3dfc35fa5c +#include "rpi_hevc_transform10.h" +#include "libavutil/rpi_sand_fns.h" + -+#pragma GCC diagnostic push -+// Many many redundant decls in the header files -+#pragma GCC diagnostic ignored "-Wredundant-decls" -+#include "interface/vmcs_host/vc_vchi_gpuserv.h" -+#pragma GCC diagnostic pop -+ +// Trace time spent waiting for GPU (VPU/QPU) (1=Yes, 0=No) +#define RPI_TRACE_TIME_VPU_QPU_WAIT 0 + @@ -37420,16 +37496,7 @@ index 0000000000..3dfc35fa5c + short transMatrix2even[16*16*2]; +}; + -+#define CFE_ENTS_PER_A 8 -+// If we have a sliced frame 2048 wide @ 64 per slice then there are 32 slices -+// in a line & we want to flush luma + chroma + a couple of bits so ents ~ 70 -+// allow 128 -+#define CFE_ENT_COUNT 128 -+#define CFE_A_COUNT (CFE_ENT_COUNT / CFE_ENTS_PER_A) -+ +struct rpi_cache_flush_env_s { -+// unsigned int n; -+// struct vcsm_user_clean_invalid_s a[CFE_A_COUNT]; + struct vcsm_user_clean_invalid2_s v; +}; + @@ -37777,23 +37844,18 @@ index 0000000000..3dfc35fa5c +// +// Cache flush functions + -+#define CACHE_EL_MAX 16 ++#define CACHE_EL_MAX ((sizeof(rpi_cache_buf_t) - sizeof (struct vcsm_user_clean_invalid2_s)) / sizeof (struct vcsm_user_clean_invalid2_block_s)) + -+rpi_cache_flush_env_t * rpi_cache_flush_init() ++rpi_cache_flush_env_t * rpi_cache_flush_init(rpi_cache_buf_t * const buf) +{ -+ rpi_cache_flush_env_t * const rfe = malloc(sizeof(rpi_cache_flush_env_t) + -+ sizeof(struct vcsm_user_clean_invalid2_block_s) * CACHE_EL_MAX); -+ if (rfe == NULL) -+ return NULL; -+ ++ rpi_cache_flush_env_t * const rfe = (rpi_cache_flush_env_t *)buf; + rfe->v.op_count = 0; + return rfe; +} + +void rpi_cache_flush_abort(rpi_cache_flush_env_t * const rfe) +{ -+ if (rfe != NULL) -+ free(rfe); ++ // Nothing needed +} + +int rpi_cache_flush_execute(rpi_cache_flush_env_t * const rfe) @@ -37814,7 +37876,6 @@ index 0000000000..3dfc35fa5c +{ + int rc = rpi_cache_flush_execute(rfe);; + -+ free(rfe); + return rc; +} + @@ -37944,7 +38005,8 @@ index 0000000000..3dfc35fa5c +// Call this to clean and invalidate a region of memory +void rpi_cache_flush_one_gm_ptr(const GPU_MEM_PTR_T *const p, const rpi_cache_flush_mode_t mode) +{ -+ rpi_cache_flush_env_t * rfe = rpi_cache_flush_init(); ++ rpi_cache_buf_t cbuf; ++ rpi_cache_flush_env_t * rfe = rpi_cache_flush_init(&cbuf); + rpi_cache_flush_add_gm_ptr(rfe, p, mode); + rpi_cache_flush_finish(rfe); +} @@ -38054,26 +38116,22 @@ index 0000000000..3dfc35fa5c +#define VPU_QPU_MASK_QPU 1 +#define VPU_QPU_MASK_VPU 2 + -+#define VPU_QPU_JOB_MAX 4 -+struct vpu_qpu_job_env_s -+{ -+ unsigned int n; -+ unsigned int mask; -+ struct gpu_job_s j[VPU_QPU_JOB_MAX]; -+}; -+ +typedef struct vpu_qpu_job_env_s vpu_qpu_job_env_t; + -+vpu_qpu_job_env_t * vpu_qpu_job_new(void) ++vpu_qpu_job_env_t * vpu_qpu_job_init(vpu_qpu_job_env_t * const buf) +{ -+ vpu_qpu_job_env_t * vqj = calloc(1, sizeof(vpu_qpu_job_env_t)); ++// vpu_qpu_job_env_t * vqj = calloc(1, sizeof(vpu_qpu_job_env_t)); ++ vpu_qpu_job_env_t * vqj = buf; ++// memset(vqj, 0, sizeof(*vqj)); ++ vqj->n = 0; ++ vqj->mask = 0; + return vqj; +} + +void vpu_qpu_job_delete(vpu_qpu_job_env_t * const vqj) +{ -+ memset(vqj, 0, sizeof(*vqj)); -+ free(vqj); ++// memset(vqj, 0, sizeof(*vqj)); ++// free(vqj); +} + +static inline struct gpu_job_s * new_job(vpu_qpu_job_env_t * const vqj) @@ -38091,6 +38149,8 @@ index 0000000000..3dfc35fa5c + vqj->mask |= VPU_QPU_MASK_VPU; + + j->command = EXECUTE_VPU; ++ j->callback.func = 0; ++ j->callback.cookie = NULL; + // The bottom two bits of the execute address contain no-flush flags + // b0 will flush the VPU I-cache if unset so we nearly always want that set + // as we never reload code @@ -38113,6 +38173,9 @@ index 0000000000..3dfc35fa5c + vqj->mask |= VPU_QPU_MASK_QPU; + + j->command = EXECUTE_QPU; ++ j->callback.func = 0; ++ j->callback.cookie = NULL; ++ + j->u.q.jobs = n; +#if RPI_TRACE_QPU_PROFILE_ALL + j->u.q.noflush = QPU_FLAGS_NO_FLUSH_VPU | QPU_FLAGS_PROF_CLEAR_AND_ENABLE | QPU_FLAGS_PROF_OUTPUT_COUNTS; @@ -38267,13 +38330,21 @@ index 0000000000..3dfc35fa5c + diff --git a/libavcodec/rpi_qpu.h b/libavcodec/rpi_qpu.h new file mode 100644 -index 0000000000..9389047f8e +index 0000000000..1aac6babae --- /dev/null +++ b/libavcodec/rpi_qpu.h -@@ -0,0 +1,208 @@ +@@ -0,0 +1,227 @@ +#ifndef RPI_QPU_H +#define RPI_QPU_H + ++#pragma GCC diagnostic push ++// Many many redundant decls in the header files ++#pragma GCC diagnostic ignored "-Wredundant-decls" ++#pragma GCC diagnostic ignored "-Wstrict-prototypes" ++#include "interface/vmcs_host/vc_vchi_gpuserv.h" ++#pragma GCC diagnostic pop ++ ++ +#define RPI_ONE_BUF 1 + +typedef struct gpu_mem_ptr_s { @@ -38399,7 +38470,9 @@ index 0000000000..9389047f8e +struct rpi_cache_flush_env_s; +typedef struct rpi_cache_flush_env_s rpi_cache_flush_env_t; + -+rpi_cache_flush_env_t * rpi_cache_flush_init(void); ++typedef struct {uint32_t t[33];} rpi_cache_buf_t; ++ ++rpi_cache_flush_env_t * rpi_cache_flush_init(rpi_cache_buf_t * const buf); +// Free env without flushing +void rpi_cache_flush_abort(rpi_cache_flush_env_t * const rfe); +// Do the accumulated flush & clear but do not free the env @@ -38457,7 +38530,16 @@ index 0000000000..9389047f8e +struct vpu_qpu_job_env_s; +typedef struct vpu_qpu_job_env_s * vpu_qpu_job_h; + -+vpu_qpu_job_h vpu_qpu_job_new(void); ++#define VPU_QPU_JOB_MAX 4 ++struct vpu_qpu_job_env_s ++{ ++ unsigned int n; ++ unsigned int mask; ++ struct gpu_job_s j[VPU_QPU_JOB_MAX]; ++}; ++typedef struct vpu_qpu_job_env_s vpu_qpu_job_env_t; ++ ++vpu_qpu_job_h vpu_qpu_job_init(vpu_qpu_job_env_t * const buf); +void vpu_qpu_job_delete(const vpu_qpu_job_h vqj); +void vpu_qpu_job_add_vpu(const vpu_qpu_job_h vqj, const uint32_t vpu_code, + const unsigned r0, const unsigned r1, const unsigned r2, const unsigned r3, const unsigned r4, const unsigned r5);