diff -Nru kodi-inputstream-adaptive-19.0.0+ds1/CMakeLists.txt kodi-inputstream-adaptive-19.0.4+ds1/CMakeLists.txt --- kodi-inputstream-adaptive-19.0.0+ds1/CMakeLists.txt 2021-09-14 14:28:17.000000000 +0000 +++ kodi-inputstream-adaptive-19.0.4+ds1/CMakeLists.txt 2022-04-24 22:53:40.000000000 +0000 @@ -30,6 +30,7 @@ src/main.h src/oscompat.h src/SSD_dll.h + src/common/AdaptiveDecrypter.h src/common/AdaptiveStream.h src/common/AdaptiveTree.h src/parser/DASHTree.h diff -Nru kodi-inputstream-adaptive-19.0.0+ds1/debian/changelog kodi-inputstream-adaptive-19.0.4+ds1/debian/changelog --- kodi-inputstream-adaptive-19.0.0+ds1/debian/changelog 2021-10-28 12:08:40.000000000 +0000 +++ kodi-inputstream-adaptive-19.0.4+ds1/debian/changelog 2022-04-29 12:40:12.000000000 +0000 @@ -1,3 +1,17 @@ +kodi-inputstream-adaptive (19.0.4+ds1-1) unstable; urgency=medium + + * New upstream version 19.0.4+ds1 + + -- Vasyl Gello Fri, 29 Apr 2022 12:40:12 +0000 + +kodi-inputstream-adaptive (19.0.3+ds1-1) unstable; urgency=medium + + * New upstream version 19.0.3+ds1 + * Modernize package + * Drop patches merged upstream + + -- Vasyl Gello Mon, 21 Mar 2022 18:25:30 +0000 + kodi-inputstream-adaptive (19.0.0+ds1-2) unstable; urgency=medium * fix FTBFS on riscv64 diff -Nru kodi-inputstream-adaptive-19.0.0+ds1/debian/control kodi-inputstream-adaptive-19.0.4+ds1/debian/control --- kodi-inputstream-adaptive-19.0.0+ds1/debian/control 2021-10-24 15:36:12.000000000 +0000 +++ kodi-inputstream-adaptive-19.0.4+ds1/debian/control 2022-04-15 16:31:29.000000000 +0000 @@ -4,9 +4,8 @@ Maintainer: Debian Multimedia Maintainers Uploaders: Vasyl Gello Build-Depends: debhelper-compat (= 13) -Build-Depends-Arch: dh-sequence-kodiaddon, +Build-Depends-Arch: dh-sequence-kodiaddon (>= 2:19~), cmake, - kodi-addons-dev (>= 2:19~), libexpat1-dev, libgtest-dev (>= 1.10.0~), libwebm-dev, diff -Nru kodi-inputstream-adaptive-19.0.0+ds1/debian/patches/0001-powerpc-support.diff kodi-inputstream-adaptive-19.0.4+ds1/debian/patches/0001-powerpc-support.diff --- kodi-inputstream-adaptive-19.0.0+ds1/debian/patches/0001-powerpc-support.diff 2020-12-21 17:18:37.000000000 +0000 +++ kodi-inputstream-adaptive-19.0.4+ds1/debian/patches/0001-powerpc-support.diff 1970-01-01 00:00:00.000000000 +0000 @@ -1,27 +0,0 @@ -Subject: Declare configuration for PPC64 -Author: Christian Marillat -Forwarded: not-needed - ---- a/wvdecrypter/cdm/build/build_config.h -+++ b/wvdecrypter/cdm/build/build_config.h -@@ -138,8 +138,18 @@ - #define ARCH_CPU_32_BITS 1 - #define ARCH_CPU_LITTLE_ENDIAN 1 - #endif --#else --#error Please add support for your architecture in build/build_config.h -+#elif (defined(__PPC64__) || defined(__PPC__)) && defined(__BIG_ENDIAN__) -+#define ARCH_CPU_PPC64_FAMILY 1 -+#define ARCH_CPU_PPC64 1 -+#define ARCH_CPU_64_BITS 1 -+#define ARCH_CPU_BIG_ENDIAN 1 -+#elif defined(__PPC64__) -+#define ARCH_CPU_PPC64_FAMILY 1 -+#define ARCH_CPU_PPC64 1 -+#define ARCH_CPU_64_BITS 1 -+#define ARCH_CPU_LITTLE_ENDIAN 1 -+# else -+#error Please add support for your architecture in build/build_config. - #endif - - // Type detection for wchar_t. diff -Nru kodi-inputstream-adaptive-19.0.0+ds1/debian/patches/0001-Use-packaged-libwebm.patch kodi-inputstream-adaptive-19.0.4+ds1/debian/patches/0001-Use-packaged-libwebm.patch --- kodi-inputstream-adaptive-19.0.0+ds1/debian/patches/0001-Use-packaged-libwebm.patch 1970-01-01 00:00:00.000000000 +0000 +++ kodi-inputstream-adaptive-19.0.4+ds1/debian/patches/0001-Use-packaged-libwebm.patch 2022-04-15 16:31:29.000000000 +0000 @@ -0,0 +1,76 @@ +Subject: Use packaged libwebm +Author: Vasyl Gello +Forwarded: not-needed + +--- + +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -56,7 +56,6 @@ + include_directories(${INCLUDES} + ${KODI_INCLUDE_DIR}/.. # Hack way with "/..", need bigger Kodi cmake rework to match right include ways (becomes done in future) + lib/libbento4/Core +- lib/webm_parser/include + ) + + set(CMAKE_FIND_FRAMEWORK LAST) +@@ -66,6 +65,11 @@ + include_directories(${EXPAT_INCLUDE_DIRS}) + list(APPEND DEPLIBS ${EXPAT_LIBRARIES}) + ++include(FindWEBM) ++find_package(WEBM REQUIRED) ++include_directories(${WEBM_INCLUDE_DIRS}) ++list(APPEND DEPLIBS ${WEBM_LIBRARIES}) ++ + if(WIN32) + add_definitions(-DXML_STATIC -D_CRT_NONSTDC_NO_DEPRECATE) + list(APPEND DEPLIBS ws2_32) +@@ -77,8 +81,6 @@ + + add_subdirectory(lib/mpegts) + +-add_subdirectory(lib/webm_parser) +- + if(CORE_SYSTEM_NAME STREQUAL ios OR CORE_SYSTEM_NAME STREQUAL darwin_embedded) + set(BENTOUSESTCFS 1) + add_subdirectory(lib/libbento4) +@@ -91,7 +93,6 @@ + + list(APPEND DEPLIBS bento4) + list(APPEND DEPLIBS mpegts) +-list(APPEND DEPLIBS webm_parser) + + build_addon(inputstream.adaptive ADP DEPLIBS) + +--- /dev/null ++++ b/FindWEBM.cmake +@@ -0,0 +1,28 @@ ++# - Try to find webm ++# Once done this will define ++# ++# WEBM_FOUND - system has libwebm ++# WEBM_INCLUDE_DIRS - the libwebm include directory ++# WEBM_LIBRARIES - The libwebm libraries ++ ++if(PKG_CONFIG_FOUND) ++ pkg_check_modules(PC_WEBM libwebm QUIET) ++endif() ++ ++find_path(WEBM_INCLUDE_DIR webm/webm_parser.h PATHS ${PC_WEBM_INCLUDEDIR}) ++find_library(WEBM_LIBRARY webm libwebm PATHS ${PC_WEBM_LIBDIR}) ++ ++set(WEBM_VERSION ${PC_WEBM_VERSION}) ++ ++include(FindPackageHandleStandardArgs) ++find_package_handle_standard_args(WEBM ++ REQUIRED_VARS WEBM_INCLUDE_DIR WEBM_LIBRARY ++ VERSION_VAR WEBM_VERSION) ++ ++if(WEBM_FOUND) ++ set(WEBM_LIBRARIES ${WEBM_LIBRARY}) ++ set(WEBM_INCLUDE_DIRS ${WEBM_INCLUDE_DIR}) ++endif() ++ ++ ++mark_as_advanced(WEBM_INCLUDE_DIRS WEBM_LIBRARIES) diff -Nru kodi-inputstream-adaptive-19.0.0+ds1/debian/patches/0002-Use-packaged-libwebm.patch kodi-inputstream-adaptive-19.0.4+ds1/debian/patches/0002-Use-packaged-libwebm.patch --- kodi-inputstream-adaptive-19.0.0+ds1/debian/patches/0002-Use-packaged-libwebm.patch 2021-06-04 20:43:09.000000000 +0000 +++ kodi-inputstream-adaptive-19.0.4+ds1/debian/patches/0002-Use-packaged-libwebm.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,76 +0,0 @@ -Subject: Use packaged libwebm -Author: Vasyl Gello -Forwarded: not-needed - ---- - ---- a/CMakeLists.txt -+++ b/CMakeLists.txt -@@ -56,7 +56,6 @@ - include_directories(${INCLUDES} - ${KODI_INCLUDE_DIR}/.. # Hack way with "/..", need bigger Kodi cmake rework to match right include ways (becomes done in future) - lib/libbento4/Core -- lib/webm_parser/include - ) - - set(CMAKE_FIND_FRAMEWORK LAST) -@@ -66,6 +65,11 @@ - include_directories(${EXPAT_INCLUDE_DIRS}) - list(APPEND DEPLIBS ${EXPAT_LIBRARIES}) - -+include(FindWEBM) -+find_package(WEBM REQUIRED) -+include_directories(${WEBM_INCLUDE_DIRS}) -+list(APPEND DEPLIBS ${WEBM_LIBRARIES}) -+ - if(WIN32) - add_definitions(-DXML_STATIC -D_CRT_NONSTDC_NO_DEPRECATE) - list(APPEND DEPLIBS ws2_32) -@@ -77,8 +81,6 @@ - - add_subdirectory(lib/mpegts) - --add_subdirectory(lib/webm_parser) -- - if(CORE_SYSTEM_NAME STREQUAL ios OR CORE_SYSTEM_NAME STREQUAL darwin_embedded) - set(BENTOUSESTCFS 1) - add_subdirectory(lib/libbento4) -@@ -91,7 +93,6 @@ - - list(APPEND DEPLIBS bento4) - list(APPEND DEPLIBS mpegts) --list(APPEND DEPLIBS webm_parser) - - build_addon(inputstream.adaptive ADP DEPLIBS) - ---- /dev/null -+++ b/FindWEBM.cmake -@@ -0,0 +1,28 @@ -+# - Try to find webm -+# Once done this will define -+# -+# WEBM_FOUND - system has libwebm -+# WEBM_INCLUDE_DIRS - the libwebm include directory -+# WEBM_LIBRARIES - The libwebm libraries -+ -+if(PKG_CONFIG_FOUND) -+ pkg_check_modules(PC_WEBM libwebm QUIET) -+endif() -+ -+find_path(WEBM_INCLUDE_DIR webm/webm_parser.h PATHS ${PC_WEBM_INCLUDEDIR}) -+find_library(WEBM_LIBRARY webm libwebm PATHS ${PC_WEBM_LIBDIR}) -+ -+set(WEBM_VERSION ${PC_WEBM_VERSION}) -+ -+include(FindPackageHandleStandardArgs) -+find_package_handle_standard_args(WEBM -+ REQUIRED_VARS WEBM_INCLUDE_DIR WEBM_LIBRARY -+ VERSION_VAR WEBM_VERSION) -+ -+if(WEBM_FOUND) -+ set(WEBM_LIBRARIES ${WEBM_LIBRARY}) -+ set(WEBM_INCLUDE_DIRS ${WEBM_INCLUDE_DIR}) -+endif() -+ -+ -+mark_as_advanced(WEBM_INCLUDE_DIRS WEBM_LIBRARIES) diff -Nru kodi-inputstream-adaptive-19.0.0+ds1/debian/patches/0003-riscv-support.patch kodi-inputstream-adaptive-19.0.4+ds1/debian/patches/0003-riscv-support.patch --- kodi-inputstream-adaptive-19.0.0+ds1/debian/patches/0003-riscv-support.patch 2021-10-28 12:08:40.000000000 +0000 +++ kodi-inputstream-adaptive-19.0.4+ds1/debian/patches/0003-riscv-support.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,20 +0,0 @@ ---- a/wvdecrypter/cdm/build/build_config.h -+++ b/wvdecrypter/cdm/build/build_config.h -@@ -148,6 +148,17 @@ - #define ARCH_CPU_PPC64 1 - #define ARCH_CPU_64_BITS 1 - #define ARCH_CPU_LITTLE_ENDIAN 1 -+#elif defined(__riscv) || defined(__riscv__) -+#define ARCH_CPU_RISCV_FAMILY 1 -+#define ARCH_CPU_RISCV 1 -+#define ARCH_CPU_LITTLE_ENDIAN 1 -+#if defined(__riscv_xlen) -+# if (__riscv_xlen == 64) -+# define ARCH_CPU_64_BITS 1 -+# else -+# define ARCH_CPU_32_BITS 1 -+# endif -+#endif - # else - #error Please add support for your architecture in build/build_config. - #endif diff -Nru kodi-inputstream-adaptive-19.0.0+ds1/debian/patches/series kodi-inputstream-adaptive-19.0.4+ds1/debian/patches/series --- kodi-inputstream-adaptive-19.0.0+ds1/debian/patches/series 2021-10-28 12:08:40.000000000 +0000 +++ kodi-inputstream-adaptive-19.0.4+ds1/debian/patches/series 2022-04-15 16:31:29.000000000 +0000 @@ -1,3 +1 @@ -0001-powerpc-support.diff -0002-Use-packaged-libwebm.patch -0003-riscv-support.patch +0001-Use-packaged-libwebm.patch diff -Nru kodi-inputstream-adaptive-19.0.0+ds1/debian/rules kodi-inputstream-adaptive-19.0.4+ds1/debian/rules --- kodi-inputstream-adaptive-19.0.0+ds1/debian/rules 2021-10-24 15:36:12.000000000 +0000 +++ kodi-inputstream-adaptive-19.0.4+ds1/debian/rules 2022-04-15 16:31:29.000000000 +0000 @@ -11,8 +11,11 @@ dh $@ override_dh_auto_configure: + # basilgello: -DCMAKE_INSTALL_DIR silences Kodi buildsystem + # warning triggered by dh_configure unnecessarily overriding + # install directory + # -DUSE_LTO=0 disables LTO and makes build reproducible dh_auto_configure -- -DCMAKE_BUILD_TYPE=ReleaseWithDebInfo \ -DBUILD_SHARED_LIBS=1 \ -DCMAKE_INSTALL_LIBDIR=/usr/lib/$(DEB_HOST_MULTIARCH)/kodi \ - -DOVERRIDE_PATHS=1 \ -DUSE_LTO=0 diff -Nru kodi-inputstream-adaptive-19.0.0+ds1/inputstream.adaptive/addon.xml.in kodi-inputstream-adaptive-19.0.4+ds1/inputstream.adaptive/addon.xml.in --- kodi-inputstream-adaptive-19.0.0+ds1/inputstream.adaptive/addon.xml.in 2021-09-14 14:28:17.000000000 +0000 +++ kodi-inputstream-adaptive-19.0.4+ds1/inputstream.adaptive/addon.xml.in 2022-04-24 22:53:40.000000000 +0000 @@ -1,7 +1,7 @@ @ADDON_DEPENDS@ @@ -15,6 +15,23 @@ @PLATFORM@ +v19.0.4 (2022-04-24) +- Translations updates from Weblate -be_by, fi_fi, cs_cz +- [DRM] Keep same session from pre-init +- Fix crash related to mp4 webvtt subtitles + +v19.0.3 (2022-02-10) +- Translations updates from Weblate - hr_hr, nl_nl, sk_s +- [HLS] Fix for large media sequence numbers +- [DASH] Allow for multiple representation/bandwidth placeholders + +v19.0.2 (2022-01-11) +- update nl translations +- [webvtt] only read payl boxes for text + +v19.0.1 (2021-12-10) +- Fix compile error by GCC 11 + v19.0.0 (2021-09-14) - Change test builds to released 'Kodi 19 Matrix' - Increase version to 19.0.0 @@ -213,24 +230,37 @@ - Add WebM container parser Client InputStream per a transmissions adaptatives + Klient adaptivních toků protokolu InputStream InputStream-klient til adaptive streams InputStream-Client für adaptive Streams InputStream client for adaptive streams Cliente InputStream para flujo de datos adaptativos + Cliente InputStream para transmisiones adaptativas + InputStream-asiakaspääte mukautuville mediavirroille + Client InputStream pour les flux adaptatifs לקוח InputStream לתזרימים מסתגלים + InputStream klijent za prilagodljiva strujanja InputStream kliens az adaptív streamekhez 가변 스트림을 위한 InputStream 클라이언트 + InputStream client voor adaptive streams Klient InputStream dla strumieni adaptacyjnych InputStream клиент для адаптивных трансляций + 用于自适应流的 InputStream 客户端 Client InputStream per a transmissions adaptatives + Klient adaptivních toků protokolu InputStream InputStream-klient til adaptive streams InputStream-Client für adaptive Streams InputStream client for adaptive streams Cliente InputStream para flujo de datos adaptativos + Cliente InputStream para transmisiones adaptativas + InputStream-asiakaspääte mukautuville mediavirroille + Client InputStream pour les flux adaptatifs לקוח InputStream לתזרימים מסתגלים + InputStream klijent za prilagodljiva strujanja InputStream kliens az adaptív streamekhez 가변 스트림을 위한 InputStream 클라이언트 Klient InputStream dla strumieni adaptacyjnych InputStream клиент для адаптивных трансляций + 用于自适应流的 InputStream 客户端 diff -Nru kodi-inputstream-adaptive-19.0.0+ds1/inputstream.adaptive/resources/language/resource.language.be_by/strings.po kodi-inputstream-adaptive-19.0.4+ds1/inputstream.adaptive/resources/language/resource.language.be_by/strings.po --- kodi-inputstream-adaptive-19.0.0+ds1/inputstream.adaptive/resources/language/resource.language.be_by/strings.po 2021-09-14 14:28:17.000000000 +0000 +++ kodi-inputstream-adaptive-19.0.4+ds1/inputstream.adaptive/resources/language/resource.language.be_by/strings.po 2022-04-24 22:53:40.000000000 +0000 @@ -4,12 +4,16 @@ # Addon Provider: peak3d msgid "" msgstr "" -"Language-Team: none\n" +"Report-Msgid-Bugs-To: translations@kodi.tv\n" +"PO-Revision-Date: 2022-02-22 08:53+0000\n" +"Last-Translator: Christian Gade \n" +"Language-Team: Belarusian \n" "Language: be_by\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"X-Generator: Weblate 4.10.1\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" @@ -21,7 +25,7 @@ msgctxt "#30100" msgid "General" -msgstr "" +msgstr "Асноўныя" # The minimum bandwidth which should not be deceeded. msgctxt "#30101" diff -Nru kodi-inputstream-adaptive-19.0.0+ds1/inputstream.adaptive/resources/language/resource.language.cs_cz/strings.po kodi-inputstream-adaptive-19.0.4+ds1/inputstream.adaptive/resources/language/resource.language.cs_cz/strings.po --- kodi-inputstream-adaptive-19.0.0+ds1/inputstream.adaptive/resources/language/resource.language.cs_cz/strings.po 2021-09-14 14:28:17.000000000 +0000 +++ kodi-inputstream-adaptive-19.0.4+ds1/inputstream.adaptive/resources/language/resource.language.cs_cz/strings.po 2022-04-24 22:53:40.000000000 +0000 @@ -4,125 +4,129 @@ # Addon Provider: peak3d msgid "" msgstr "" -"Language-Team: none\n" +"Report-Msgid-Bugs-To: translations@kodi.tv\n" +"PO-Revision-Date: 2022-03-29 22:18+0000\n" +"Last-Translator: Kryštof Černý \n" +"Language-Team: Czech \n" "Language: cs_cz\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"X-Generator: Weblate 4.11.2\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" -msgstr "" +msgstr "Klient adaptivních toků protokolu InputStream" msgctxt "Addon Description" msgid "InputStream client for adaptive streams" -msgstr "" +msgstr "Klient adaptivních toků protokolu InputStream" msgctxt "#30100" msgid "General" -msgstr "" +msgstr "Obecné" # The minimum bandwidth which should not be deceeded. msgctxt "#30101" msgid "Min. Bandwidth (Bit/s)" -msgstr "" +msgstr "Min. šířka pásma (b/s)" # The maximum bandwidth which should not be exceeded. 0=unlimited msgctxt "#30102" msgid "Max. Bandwidth (Bit/s)" -msgstr "" +msgstr "Max. šířka pásma (b/s)" # Absolute path to the folder containing the decrypters msgctxt "#30103" msgid "Decrypter path" -msgstr "" +msgstr "Cesta k dešifrovači" # Maximum Resolution msgctxt "#30110" msgid "Max. Resolution general decoder" -msgstr "" +msgstr "Max. rozlišení obecného dekodéru" msgctxt "#30111" msgid "Stream Selection" -msgstr "" +msgstr "Výběr proudu" msgctxt "#30112" msgid "Media" -msgstr "" +msgstr "Média" # Maximum allowed resolution if decoded through secure path msgctxt "#30113" msgid "Max. Resolution secure decoder" -msgstr "" +msgstr "Max. rozlišení zabezpečeného dekodŕu" # Select streams without respecting HDCP status msgctxt "#30114" msgid "Override HDCP status" -msgstr "" +msgstr "Přepsat stav DHCP" # Do not respect display resolution when selecting streams msgctxt "#30115" msgid "Ignore Display Resolution" -msgstr "" +msgstr "Ignorovat rozlišení displeje" msgctxt "#30120" msgid "Expert" -msgstr "" +msgstr "Expert" msgctxt "#30121" msgid "Enable Pre-Release Features" -msgstr "" +msgstr "Povolit nestabilní funkce" msgctxt "#30122" msgid "Don't use secure decoder if possible" -msgstr "" +msgstr "Pokud možno nepoužívat zabezpečený dekodér" msgctxt "#30150" msgid "Max" -msgstr "" +msgstr "Max" msgctxt "#30151" msgid "480p" -msgstr "" +msgstr "480p" msgctxt "#30152" msgid "640p" -msgstr "" +msgstr "640p" msgctxt "#30153" msgid "720p" -msgstr "" +msgstr "720p" msgctxt "#30154" msgid "1080p" -msgstr "" +msgstr "1080p" msgctxt "#30155" msgid "Automatically select streams" -msgstr "" +msgstr "Automaticky vybrat proudy" msgctxt "#30156" msgid "Manually select all streams" -msgstr "" +msgstr "Ručně vybrat proudy" msgctxt "#30157" msgid "All" -msgstr "" +msgstr "Všechno" msgctxt "#30158" msgid "Audio" -msgstr "" +msgstr "Zvuk" msgctxt "#30159" msgid "Video" -msgstr "" +msgstr "Obraz" # Show all video streams msgctxt "#30160" msgid "Manually select video stream" -msgstr "" +msgstr "Ručně vybrat proud obrazu" msgctxt "#30161" msgid "Video + Subtitles" -msgstr "" +msgstr "Obraz + titulky" diff -Nru kodi-inputstream-adaptive-19.0.0+ds1/inputstream.adaptive/resources/language/resource.language.da_dk/strings.po kodi-inputstream-adaptive-19.0.4+ds1/inputstream.adaptive/resources/language/resource.language.da_dk/strings.po --- kodi-inputstream-adaptive-19.0.0+ds1/inputstream.adaptive/resources/language/resource.language.da_dk/strings.po 2021-09-14 14:28:17.000000000 +0000 +++ kodi-inputstream-adaptive-19.0.4+ds1/inputstream.adaptive/resources/language/resource.language.da_dk/strings.po 2022-04-24 22:53:40.000000000 +0000 @@ -5,7 +5,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2021-08-20 08:26+0000\n" +"PO-Revision-Date: 2021-10-16 22:41+0000\n" "Last-Translator: Christian Gade \n" "Language-Team: Danish \n" "Language: da_dk\n" @@ -13,7 +13,7 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.7.2\n" +"X-Generator: Weblate 4.8\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" @@ -45,7 +45,7 @@ # Maximum Resolution msgctxt "#30110" msgid "Max. Resolution general decoder" -msgstr "Maksimal opløsning for generel dekoder" +msgstr "Maksimal opløsning for generel afkoder" msgctxt "#30111" msgid "Stream Selection" @@ -58,7 +58,7 @@ # Maximum allowed resolution if decoded through secure path msgctxt "#30113" msgid "Max. Resolution secure decoder" -msgstr "Maksimal opløsning for sikker dekoder" +msgstr "Maksimal opløsning for sikker afkoder" # Select streams without respecting HDCP status msgctxt "#30114" @@ -80,7 +80,7 @@ msgctxt "#30122" msgid "Don't use secure decoder if possible" -msgstr "Brug ikke sikker dekoder, hvis det er muligt" +msgstr "Brug ikke sikker afkoder, hvis det er muligt" msgctxt "#30150" msgid "Max" diff -Nru kodi-inputstream-adaptive-19.0.0+ds1/inputstream.adaptive/resources/language/resource.language.es_es/strings.po kodi-inputstream-adaptive-19.0.4+ds1/inputstream.adaptive/resources/language/resource.language.es_es/strings.po --- kodi-inputstream-adaptive-19.0.0+ds1/inputstream.adaptive/resources/language/resource.language.es_es/strings.po 2021-09-14 14:28:17.000000000 +0000 +++ kodi-inputstream-adaptive-19.0.4+ds1/inputstream.adaptive/resources/language/resource.language.es_es/strings.po 2022-04-24 22:53:40.000000000 +0000 @@ -4,13 +4,16 @@ # Addon Provider: peak3d msgid "" msgstr "" -"Last-Translator: roliverosc\n" -"Language-Team: Spanish\n" -"Language: es\n" +"Report-Msgid-Bugs-To: translations@kodi.tv\n" +"PO-Revision-Date: 2022-01-22 09:13+0000\n" +"Last-Translator: Alfonso Cachero \n" +"Language-Team: Spanish (Spain) \n" +"Language: es_es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.10.1\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" @@ -77,7 +80,7 @@ msgctxt "#30122" msgid "Don't use secure decoder if possible" -msgstr "" +msgstr "No usar decodificador seguro si es posible" msgctxt "#30150" msgid "Max" @@ -101,11 +104,11 @@ msgctxt "#30155" msgid "Automatically select streams" -msgstr "" +msgstr "Elegir automáticamente los flujos" msgctxt "#30156" msgid "Manually select all streams" -msgstr "" +msgstr "Elegir manualmente todos los flujos" msgctxt "#30157" msgid "All" @@ -122,7 +125,7 @@ # Show all video streams msgctxt "#30160" msgid "Manually select video stream" -msgstr "" +msgstr "Elegir manualmente el flujo de video" msgctxt "#30161" msgid "Video + Subtitles" diff -Nru kodi-inputstream-adaptive-19.0.0+ds1/inputstream.adaptive/resources/language/resource.language.es_mx/strings.po kodi-inputstream-adaptive-19.0.4+ds1/inputstream.adaptive/resources/language/resource.language.es_mx/strings.po --- kodi-inputstream-adaptive-19.0.0+ds1/inputstream.adaptive/resources/language/resource.language.es_mx/strings.po 2021-09-14 14:28:17.000000000 +0000 +++ kodi-inputstream-adaptive-19.0.4+ds1/inputstream.adaptive/resources/language/resource.language.es_mx/strings.po 2022-04-24 22:53:40.000000000 +0000 @@ -4,125 +4,129 @@ # Addon Provider: peak3d msgid "" msgstr "" -"Language-Team: none\n" +"Report-Msgid-Bugs-To: translations@kodi.tv\n" +"PO-Revision-Date: 2021-10-02 17:30+0000\n" +"Last-Translator: Edson Armando \n" +"Language-Team: Spanish (Mexico) \n" "Language: es_mx\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.8\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" -msgstr "" +msgstr "Cliente InputStream para transmisiones adaptativas" msgctxt "Addon Description" msgid "InputStream client for adaptive streams" -msgstr "" +msgstr "Cliente InputStream para transmisiones adaptativas" msgctxt "#30100" msgid "General" -msgstr "" +msgstr "General" # The minimum bandwidth which should not be deceeded. msgctxt "#30101" msgid "Min. Bandwidth (Bit/s)" -msgstr "" +msgstr "Ancho de banda mínimo (Bit/s)" # The maximum bandwidth which should not be exceeded. 0=unlimited msgctxt "#30102" msgid "Max. Bandwidth (Bit/s)" -msgstr "" +msgstr "Ancho de banda máximo (Bit/s)" # Absolute path to the folder containing the decrypters msgctxt "#30103" msgid "Decrypter path" -msgstr "" +msgstr "Ruta absoluta a los decodificadores" # Maximum Resolution msgctxt "#30110" msgid "Max. Resolution general decoder" -msgstr "" +msgstr "Resolución máxima del decodificador" msgctxt "#30111" msgid "Stream Selection" -msgstr "" +msgstr "Selección de flujo de datos" msgctxt "#30112" msgid "Media" -msgstr "" +msgstr "Medios" # Maximum allowed resolution if decoded through secure path msgctxt "#30113" msgid "Max. Resolution secure decoder" -msgstr "" +msgstr "Resolución máxima del decodificador seguro" # Select streams without respecting HDCP status msgctxt "#30114" msgid "Override HDCP status" -msgstr "" +msgstr "Ignorar estado HDCP" # Do not respect display resolution when selecting streams msgctxt "#30115" msgid "Ignore Display Resolution" -msgstr "" +msgstr "Ignorar la resolución de pantalla" msgctxt "#30120" msgid "Expert" -msgstr "" +msgstr "Experto" msgctxt "#30121" msgid "Enable Pre-Release Features" -msgstr "" +msgstr "Activar características experimentales" msgctxt "#30122" msgid "Don't use secure decoder if possible" -msgstr "" +msgstr "No utilizar el decodificador seguro si es posible" msgctxt "#30150" msgid "Max" -msgstr "" +msgstr "Máx" msgctxt "#30151" msgid "480p" -msgstr "" +msgstr "480p" msgctxt "#30152" msgid "640p" -msgstr "" +msgstr "640p" msgctxt "#30153" msgid "720p" -msgstr "" +msgstr "720p" msgctxt "#30154" msgid "1080p" -msgstr "" +msgstr "1080p" msgctxt "#30155" msgid "Automatically select streams" -msgstr "" +msgstr "Seleccionar flujo de datos automáticamente" msgctxt "#30156" msgid "Manually select all streams" -msgstr "" +msgstr "Seleccionar todos los flujos manualmente" msgctxt "#30157" msgid "All" -msgstr "" +msgstr "Todo" msgctxt "#30158" msgid "Audio" -msgstr "" +msgstr "Audio" msgctxt "#30159" msgid "Video" -msgstr "" +msgstr "Video" # Show all video streams msgctxt "#30160" msgid "Manually select video stream" -msgstr "" +msgstr "Seleccionar flujo de video manualmente" msgctxt "#30161" msgid "Video + Subtitles" -msgstr "" +msgstr "Video + Subtítulos" diff -Nru kodi-inputstream-adaptive-19.0.0+ds1/inputstream.adaptive/resources/language/resource.language.fi_fi/strings.po kodi-inputstream-adaptive-19.0.4+ds1/inputstream.adaptive/resources/language/resource.language.fi_fi/strings.po --- kodi-inputstream-adaptive-19.0.0+ds1/inputstream.adaptive/resources/language/resource.language.fi_fi/strings.po 2021-09-14 14:28:17.000000000 +0000 +++ kodi-inputstream-adaptive-19.0.4+ds1/inputstream.adaptive/resources/language/resource.language.fi_fi/strings.po 2022-04-24 22:53:40.000000000 +0000 @@ -4,125 +4,129 @@ # Addon Provider: peak3d msgid "" msgstr "" -"Language-Team: none\n" +"Report-Msgid-Bugs-To: translations@kodi.tv\n" +"PO-Revision-Date: 2022-03-24 15:09+0000\n" +"Last-Translator: Oskari Lavinto \n" +"Language-Team: Finnish \n" "Language: fi_fi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.11.2\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" -msgstr "" +msgstr "InputStream-asiakaspääte mukautuville mediavirroille" msgctxt "Addon Description" msgid "InputStream client for adaptive streams" -msgstr "" +msgstr "InputStream-asiakaspääte mukautuville mediavirroille" msgctxt "#30100" msgid "General" -msgstr "" +msgstr "Yleiset" # The minimum bandwidth which should not be deceeded. msgctxt "#30101" msgid "Min. Bandwidth (Bit/s)" -msgstr "" +msgstr "Vähimmäiskaistanleveys (Bit/s)" # The maximum bandwidth which should not be exceeded. 0=unlimited msgctxt "#30102" msgid "Max. Bandwidth (Bit/s)" -msgstr "" +msgstr "Enimmäiskaistanleveys (Bit/s)" # Absolute path to the folder containing the decrypters msgctxt "#30103" msgid "Decrypter path" -msgstr "" +msgstr "Salauksen purkaimen polku" # Maximum Resolution msgctxt "#30110" msgid "Max. Resolution general decoder" -msgstr "" +msgstr "Yleisen dekoodauksen enimmäistresoluutio" msgctxt "#30111" msgid "Stream Selection" -msgstr "" +msgstr "Mediavirran valinta" msgctxt "#30112" msgid "Media" -msgstr "" +msgstr "Media" # Maximum allowed resolution if decoded through secure path msgctxt "#30113" msgid "Max. Resolution secure decoder" -msgstr "" +msgstr "Suojatun dekoodauksen enimmäistresoluutio" # Select streams without respecting HDCP status msgctxt "#30114" msgid "Override HDCP status" -msgstr "" +msgstr "Ohita HDCP-tila" # Do not respect display resolution when selecting streams msgctxt "#30115" msgid "Ignore Display Resolution" -msgstr "" +msgstr "Älä huomioi näytön resoluutiota" msgctxt "#30120" msgid "Expert" -msgstr "" +msgstr "Lisäasetukset" msgctxt "#30121" msgid "Enable Pre-Release Features" -msgstr "" +msgstr "Käytä testiominaisuuksia" msgctxt "#30122" msgid "Don't use secure decoder if possible" -msgstr "" +msgstr "Älä käytä suojattua dekoodausta, jos mahdollista" msgctxt "#30150" msgid "Max" -msgstr "" +msgstr "Enimmäis" msgctxt "#30151" msgid "480p" -msgstr "" +msgstr "480p" msgctxt "#30152" msgid "640p" -msgstr "" +msgstr "640p" msgctxt "#30153" msgid "720p" -msgstr "" +msgstr "720p" msgctxt "#30154" msgid "1080p" -msgstr "" +msgstr "1080p" msgctxt "#30155" msgid "Automatically select streams" -msgstr "" +msgstr "Valitse mediavirrat automaattisesti" msgctxt "#30156" msgid "Manually select all streams" -msgstr "" +msgstr "Valitse kaikki mediavirrat manuaalisesti" msgctxt "#30157" msgid "All" -msgstr "" +msgstr "Kaikki" msgctxt "#30158" msgid "Audio" -msgstr "" +msgstr "Ääni" msgctxt "#30159" msgid "Video" -msgstr "" +msgstr "Video" # Show all video streams msgctxt "#30160" msgid "Manually select video stream" -msgstr "" +msgstr "Valitse videovirta manuaalisesti" msgctxt "#30161" msgid "Video + Subtitles" -msgstr "" +msgstr "Video + Tekstitykset" diff -Nru kodi-inputstream-adaptive-19.0.0+ds1/inputstream.adaptive/resources/language/resource.language.fr_fr/strings.po kodi-inputstream-adaptive-19.0.4+ds1/inputstream.adaptive/resources/language/resource.language.fr_fr/strings.po --- kodi-inputstream-adaptive-19.0.0+ds1/inputstream.adaptive/resources/language/resource.language.fr_fr/strings.po 2021-09-14 14:28:17.000000000 +0000 +++ kodi-inputstream-adaptive-19.0.4+ds1/inputstream.adaptive/resources/language/resource.language.fr_fr/strings.po 2022-04-24 22:53:40.000000000 +0000 @@ -4,20 +4,24 @@ # Addon Provider: peak3d msgid "" msgstr "" -"Language-Team: Français\n" -"Language: fr\n" +"Report-Msgid-Bugs-To: translations@kodi.tv\n" +"PO-Revision-Date: 2022-03-24 15:09+0000\n" +"Last-Translator: darodi \n" +"Language-Team: French (France) \n" +"Language: fr_fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Weblate 4.11.2\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" -msgstr "" +msgstr "Client InputStream pour les flux adaptatifs" msgctxt "Addon Description" msgid "InputStream client for adaptive streams" -msgstr "" +msgstr "Client InputStream pour les flux adaptatifs" msgctxt "#30100" msgid "General" @@ -26,17 +30,17 @@ # The minimum bandwidth which should not be deceeded. msgctxt "#30101" msgid "Min. Bandwidth (Bit/s)" -msgstr "La bande passante minimale qui ne devrait pas être réduite." +msgstr "Bande passante min (Bit/s)" # The maximum bandwidth which should not be exceeded. 0=unlimited msgctxt "#30102" msgid "Max. Bandwidth (Bit/s)" -msgstr "La bande passante maximale qui ne devrait pas être dépassée. 0=illimitée" +msgstr "Bande passante max (Bit/s) 0=illimitée" # Absolute path to the folder containing the decrypters msgctxt "#30103" msgid "Decrypter path" -msgstr "Chemin absolu du répertoire contenant le décodeur" +msgstr "Répertoire du décodeur" # Maximum Resolution msgctxt "#30110" @@ -54,17 +58,17 @@ # Maximum allowed resolution if decoded through secure path msgctxt "#30113" msgid "Max. Resolution secure decoder" -msgstr "Résolution maximale autorisée si le décodage est réalisé par une voie sécurisée" +msgstr "Résolution maximale décodage sécurisé" # Select streams without respecting HDCP status msgctxt "#30114" msgid "Override HDCP status" -msgstr "Sélection du flux sans tenir compte du status HDCP" +msgstr "Outrepasser statut HDCP" # Do not respect display resolution when selecting streams msgctxt "#30115" msgid "Ignore Display Resolution" -msgstr "Ne pas tenir compte de la résolution d'écran lors de la sélection du flux" +msgstr "Ignorer la résolution d'écran" msgctxt "#30120" msgid "Expert" @@ -72,11 +76,11 @@ msgctxt "#30121" msgid "Enable Pre-Release Features" -msgstr "Activer les fonctions exprérimentales" +msgstr "Activer les fonctions expérimentales" msgctxt "#30122" msgid "Don't use secure decoder if possible" -msgstr "" +msgstr "Pas de décodeur sécurisé si possible" msgctxt "#30150" msgid "Max" @@ -100,11 +104,11 @@ msgctxt "#30155" msgid "Automatically select streams" -msgstr "" +msgstr "Sélection automatique des flux" msgctxt "#30156" msgid "Manually select all streams" -msgstr "" +msgstr "Sélectionner manuellement tous les flux" msgctxt "#30157" msgid "All" @@ -121,8 +125,8 @@ # Show all video streams msgctxt "#30160" msgid "Manually select video stream" -msgstr "" +msgstr "Sélectionner manuellement le flux vidéo" msgctxt "#30161" msgid "Video + Subtitles" -msgstr "" +msgstr "Vidéo + Sous-titres" diff -Nru kodi-inputstream-adaptive-19.0.0+ds1/inputstream.adaptive/resources/language/resource.language.hr_hr/strings.po kodi-inputstream-adaptive-19.0.4+ds1/inputstream.adaptive/resources/language/resource.language.hr_hr/strings.po --- kodi-inputstream-adaptive-19.0.0+ds1/inputstream.adaptive/resources/language/resource.language.hr_hr/strings.po 2021-09-14 14:28:17.000000000 +0000 +++ kodi-inputstream-adaptive-19.0.4+ds1/inputstream.adaptive/resources/language/resource.language.hr_hr/strings.po 2022-04-24 22:53:40.000000000 +0000 @@ -5,52 +5,53 @@ msgid "" msgstr "" "Project-Id-Version: inputstream.adaptive\n" +"Report-Msgid-Bugs-To: translations@kodi.tv\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-03-28 19:02+0100\n" -"Last-Translator: arvvoid\n" -"Language-Team: Croatian\n" -"Language: hr_HR\n" +"PO-Revision-Date: 2022-02-14 12:13+0000\n" +"Last-Translator: gogogogi \n" +"Language-Team: Croatian \n" +"Language: hr_hr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" -"X-Generator: Poedit 2.3\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"X-Generator: Weblate 4.10.1\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" -msgstr "" +msgstr "InputStream klijent za prilagodljiva strujanja" msgctxt "Addon Description" msgid "InputStream client for adaptive streams" -msgstr "" +msgstr "InputStream klijent za prilagodljiva strujanja" msgctxt "#30100" msgid "General" -msgstr "Opće" +msgstr "Općenito" # The minimum bandwidth which should not be deceeded. msgctxt "#30101" msgid "Min. Bandwidth (Bit/s)" -msgstr "Minimalna propusnost (bit/s)" +msgstr "Najmanja propusnost (Bit/s)" # The maximum bandwidth which should not be exceeded. 0=unlimited msgctxt "#30102" msgid "Max. Bandwidth (Bit/s)" -msgstr "Maksimalna propusnost (bit/s)" +msgstr "Najveća propusnost (Bit/s)" # Absolute path to the folder containing the decrypters msgctxt "#30103" msgid "Decrypter path" -msgstr "Apsolutni put do mape koja sadrži dekripter" +msgstr "Putanja do dekôdera" # Maximum Resolution msgctxt "#30110" msgid "Max. Resolution general decoder" -msgstr "Maksimalna rezolucija opći dekoder" +msgstr "Najveća razlučivost općeg dekôdera" msgctxt "#30111" msgid "Stream Selection" -msgstr "Odabir stream-a" +msgstr "Odabir strujanja" msgctxt "#30112" msgid "Media" @@ -59,33 +60,33 @@ # Maximum allowed resolution if decoded through secure path msgctxt "#30113" msgid "Max. Resolution secure decoder" -msgstr "Maksimalna rezolucija za sigurni dekoder" +msgstr "Najveća razlučivost sigurnog dekôdera" # Select streams without respecting HDCP status msgctxt "#30114" msgid "Override HDCP status" -msgstr "Zanemari HDCP status" +msgstr "Zaobiđi HDCP stanje" # Do not respect display resolution when selecting streams msgctxt "#30115" msgid "Ignore Display Resolution" -msgstr "Zanemari rezoluciju ekrana" +msgstr "Zanemari razlučivost zaslona" msgctxt "#30120" msgid "Expert" -msgstr "Stručnjak" +msgstr "Stručno" msgctxt "#30121" msgid "Enable Pre-Release Features" -msgstr "Omogući eksperimentalne značajke" +msgstr "Omogući značajke predizdanja" msgctxt "#30122" msgid "Don't use secure decoder if possible" -msgstr "" +msgstr "Ako je moguće, ne koristi sigurni dekôder" msgctxt "#30150" msgid "Max" -msgstr "Maks" +msgstr "Najveća" msgctxt "#30151" msgid "480p" @@ -105,19 +106,19 @@ msgctxt "#30155" msgid "Automatically select streams" -msgstr "" +msgstr "Automatski odabir strujanja" msgctxt "#30156" msgid "Manually select all streams" -msgstr "" +msgstr "Ručni odabir svih strujanja" msgctxt "#30157" msgid "All" -msgstr "Sve" +msgstr "Svi" msgctxt "#30158" msgid "Audio" -msgstr "Audio" +msgstr "Zvuk" msgctxt "#30159" msgid "Video" @@ -126,8 +127,8 @@ # Show all video streams msgctxt "#30160" msgid "Manually select video stream" -msgstr "" +msgstr "Ručni odabir video strujanja" msgctxt "#30161" msgid "Video + Subtitles" -msgstr "Video + Titlovi" +msgstr "Video + Podnaslovi" diff -Nru kodi-inputstream-adaptive-19.0.0+ds1/inputstream.adaptive/resources/language/resource.language.nl_nl/strings.po kodi-inputstream-adaptive-19.0.4+ds1/inputstream.adaptive/resources/language/resource.language.nl_nl/strings.po --- kodi-inputstream-adaptive-19.0.0+ds1/inputstream.adaptive/resources/language/resource.language.nl_nl/strings.po 2021-09-14 14:28:17.000000000 +0000 +++ kodi-inputstream-adaptive-19.0.4+ds1/inputstream.adaptive/resources/language/resource.language.nl_nl/strings.po 2022-04-24 22:53:40.000000000 +0000 @@ -4,16 +4,20 @@ # Addon Provider: peak3d msgid "" msgstr "" -"Language-Team: Dutch\n" -"Language: nl\n" +"Report-Msgid-Bugs-To: translations@kodi.tv\n" +"PO-Revision-Date: 2022-02-08 22:13+0000\n" +"Last-Translator: Robin \n" +"Language-Team: Dutch \n" +"Language: nl_nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.10.1\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" -msgstr "" +msgstr "InputStream client voor adaptive streams" msgctxt "Addon Description" msgid "InputStream client for adaptive streams" @@ -76,7 +80,7 @@ msgctxt "#30122" msgid "Don't use secure decoder if possible" -msgstr "" +msgstr "Beveiligde decoder niet gebruiken indien mogelijk" msgctxt "#30150" msgid "Max" @@ -100,11 +104,11 @@ msgctxt "#30155" msgid "Automatically select streams" -msgstr "" +msgstr "Automatisch streams selecteren" msgctxt "#30156" msgid "Manually select all streams" -msgstr "" +msgstr "Handmatig alle streams selecteren" msgctxt "#30157" msgid "All" @@ -121,7 +125,7 @@ # Show all video streams msgctxt "#30160" msgid "Manually select video stream" -msgstr "" +msgstr "Handmatig videostream selecteren" msgctxt "#30161" msgid "Video + Subtitles" diff -Nru kodi-inputstream-adaptive-19.0.0+ds1/inputstream.adaptive/resources/language/resource.language.ro_md/strings.po kodi-inputstream-adaptive-19.0.4+ds1/inputstream.adaptive/resources/language/resource.language.ro_md/strings.po --- kodi-inputstream-adaptive-19.0.0+ds1/inputstream.adaptive/resources/language/resource.language.ro_md/strings.po 2021-09-14 14:28:17.000000000 +0000 +++ kodi-inputstream-adaptive-19.0.4+ds1/inputstream.adaptive/resources/language/resource.language.ro_md/strings.po 1970-01-01 00:00:00.000000000 +0000 @@ -1,128 +0,0 @@ -# Kodi Media Center language file -# Addon Name: Inputstream.adaptive -# Addon id: inputstream.adaptive -# Addon Provider: peak3d -msgid "" -msgstr "" -"Language-Team: none\n" -"Language: ro_md\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n == 0 || n % 100 >= 2 && n % 100 <= 19) ? 1 : 2);\n" - -msgctxt "Addon Summary" -msgid "InputStream client for adaptive streams" -msgstr "" - -msgctxt "Addon Description" -msgid "InputStream client for adaptive streams" -msgstr "" - -msgctxt "#30100" -msgid "General" -msgstr "" - -# The minimum bandwidth which should not be deceeded. -msgctxt "#30101" -msgid "Min. Bandwidth (Bit/s)" -msgstr "" - -# The maximum bandwidth which should not be exceeded. 0=unlimited -msgctxt "#30102" -msgid "Max. Bandwidth (Bit/s)" -msgstr "" - -# Absolute path to the folder containing the decrypters -msgctxt "#30103" -msgid "Decrypter path" -msgstr "" - -# Maximum Resolution -msgctxt "#30110" -msgid "Max. Resolution general decoder" -msgstr "" - -msgctxt "#30111" -msgid "Stream Selection" -msgstr "" - -msgctxt "#30112" -msgid "Media" -msgstr "" - -# Maximum allowed resolution if decoded through secure path -msgctxt "#30113" -msgid "Max. Resolution secure decoder" -msgstr "" - -# Select streams without respecting HDCP status -msgctxt "#30114" -msgid "Override HDCP status" -msgstr "" - -# Do not respect display resolution when selecting streams -msgctxt "#30115" -msgid "Ignore Display Resolution" -msgstr "" - -msgctxt "#30120" -msgid "Expert" -msgstr "" - -msgctxt "#30121" -msgid "Enable Pre-Release Features" -msgstr "" - -msgctxt "#30122" -msgid "Don't use secure decoder if possible" -msgstr "" - -msgctxt "#30150" -msgid "Max" -msgstr "" - -msgctxt "#30151" -msgid "480p" -msgstr "" - -msgctxt "#30152" -msgid "640p" -msgstr "" - -msgctxt "#30153" -msgid "720p" -msgstr "" - -msgctxt "#30154" -msgid "1080p" -msgstr "" - -msgctxt "#30155" -msgid "Automatically select streams" -msgstr "" - -msgctxt "#30156" -msgid "Manually select all streams" -msgstr "" - -msgctxt "#30157" -msgid "All" -msgstr "" - -msgctxt "#30158" -msgid "Audio" -msgstr "" - -msgctxt "#30159" -msgid "Video" -msgstr "" - -# Show all video streams -msgctxt "#30160" -msgid "Manually select video stream" -msgstr "" - -msgctxt "#30161" -msgid "Video + Subtitles" -msgstr "" diff -Nru kodi-inputstream-adaptive-19.0.0+ds1/inputstream.adaptive/resources/language/resource.language.ru_ru/strings.po kodi-inputstream-adaptive-19.0.4+ds1/inputstream.adaptive/resources/language/resource.language.ru_ru/strings.po --- kodi-inputstream-adaptive-19.0.0+ds1/inputstream.adaptive/resources/language/resource.language.ru_ru/strings.po 2021-09-14 14:28:17.000000000 +0000 +++ kodi-inputstream-adaptive-19.0.4+ds1/inputstream.adaptive/resources/language/resource.language.ru_ru/strings.po 2022-04-24 22:53:40.000000000 +0000 @@ -5,7 +5,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2021-08-16 15:29+0000\n" +"PO-Revision-Date: 2021-10-25 09:22+0000\n" "Last-Translator: Dmitry Petrov \n" "Language-Team: Russian \n" "Language: ru_ru\n" @@ -13,7 +13,7 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Weblate 4.7.2\n" +"X-Generator: Weblate 4.8\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" @@ -45,7 +45,7 @@ # Maximum Resolution msgctxt "#30110" msgid "Max. Resolution general decoder" -msgstr "Макс. разрешение общего декодера" +msgstr "Макс. разрешение основного декодера" msgctxt "#30111" msgid "Stream Selection" diff -Nru kodi-inputstream-adaptive-19.0.0+ds1/inputstream.adaptive/resources/language/resource.language.scn/strings.po kodi-inputstream-adaptive-19.0.4+ds1/inputstream.adaptive/resources/language/resource.language.scn/strings.po --- kodi-inputstream-adaptive-19.0.0+ds1/inputstream.adaptive/resources/language/resource.language.scn/strings.po 2021-09-14 14:28:17.000000000 +0000 +++ kodi-inputstream-adaptive-19.0.4+ds1/inputstream.adaptive/resources/language/resource.language.scn/strings.po 1970-01-01 00:00:00.000000000 +0000 @@ -1,128 +0,0 @@ -# Kodi Media Center language file -# Addon Name: Inputstream.adaptive -# Addon id: inputstream.adaptive -# Addon Provider: peak3d -msgid "" -msgstr "" -"Language-Team: none\n" -"Language: scn\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=n != 1;\n" - -msgctxt "Addon Summary" -msgid "InputStream client for adaptive streams" -msgstr "" - -msgctxt "Addon Description" -msgid "InputStream client for adaptive streams" -msgstr "" - -msgctxt "#30100" -msgid "General" -msgstr "" - -# The minimum bandwidth which should not be deceeded. -msgctxt "#30101" -msgid "Min. Bandwidth (Bit/s)" -msgstr "" - -# The maximum bandwidth which should not be exceeded. 0=unlimited -msgctxt "#30102" -msgid "Max. Bandwidth (Bit/s)" -msgstr "" - -# Absolute path to the folder containing the decrypters -msgctxt "#30103" -msgid "Decrypter path" -msgstr "" - -# Maximum Resolution -msgctxt "#30110" -msgid "Max. Resolution general decoder" -msgstr "" - -msgctxt "#30111" -msgid "Stream Selection" -msgstr "" - -msgctxt "#30112" -msgid "Media" -msgstr "" - -# Maximum allowed resolution if decoded through secure path -msgctxt "#30113" -msgid "Max. Resolution secure decoder" -msgstr "" - -# Select streams without respecting HDCP status -msgctxt "#30114" -msgid "Override HDCP status" -msgstr "" - -# Do not respect display resolution when selecting streams -msgctxt "#30115" -msgid "Ignore Display Resolution" -msgstr "" - -msgctxt "#30120" -msgid "Expert" -msgstr "" - -msgctxt "#30121" -msgid "Enable Pre-Release Features" -msgstr "" - -msgctxt "#30122" -msgid "Don't use secure decoder if possible" -msgstr "" - -msgctxt "#30150" -msgid "Max" -msgstr "" - -msgctxt "#30151" -msgid "480p" -msgstr "" - -msgctxt "#30152" -msgid "640p" -msgstr "" - -msgctxt "#30153" -msgid "720p" -msgstr "" - -msgctxt "#30154" -msgid "1080p" -msgstr "" - -msgctxt "#30155" -msgid "Automatically select streams" -msgstr "" - -msgctxt "#30156" -msgid "Manually select all streams" -msgstr "" - -msgctxt "#30157" -msgid "All" -msgstr "" - -msgctxt "#30158" -msgid "Audio" -msgstr "" - -msgctxt "#30159" -msgid "Video" -msgstr "" - -# Show all video streams -msgctxt "#30160" -msgid "Manually select video stream" -msgstr "" - -msgctxt "#30161" -msgid "Video + Subtitles" -msgstr "" diff -Nru kodi-inputstream-adaptive-19.0.0+ds1/inputstream.adaptive/resources/language/resource.language.sk_sk/strings.po kodi-inputstream-adaptive-19.0.4+ds1/inputstream.adaptive/resources/language/resource.language.sk_sk/strings.po --- kodi-inputstream-adaptive-19.0.0+ds1/inputstream.adaptive/resources/language/resource.language.sk_sk/strings.po 2021-09-14 14:28:17.000000000 +0000 +++ kodi-inputstream-adaptive-19.0.4+ds1/inputstream.adaptive/resources/language/resource.language.sk_sk/strings.po 2022-04-24 22:53:40.000000000 +0000 @@ -4,13 +4,16 @@ # Addon Provider: peak3d msgid "" msgstr "" -"Last-Translator: Matej Moško \n" -"Language-Team: Slovak\n" -"Language: sk_SK\n" +"Report-Msgid-Bugs-To: translations@kodi.tv\n" +"PO-Revision-Date: 2022-02-08 22:13+0000\n" +"Last-Translator: Patrik Špaňo \n" +"Language-Team: Slovak \n" +"Language: sk_sk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n>=2 && n<=4 ? 1 : 2);\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"X-Generator: Weblate 4.10.1\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" @@ -113,7 +116,7 @@ msgctxt "#30158" msgid "Audio" -msgstr "Zvuk" +msgstr "Audio" msgctxt "#30159" msgid "Video" diff -Nru kodi-inputstream-adaptive-19.0.0+ds1/inputstream.adaptive/resources/language/resource.language.vi_vn/strings.po kodi-inputstream-adaptive-19.0.4+ds1/inputstream.adaptive/resources/language/resource.language.vi_vn/strings.po --- kodi-inputstream-adaptive-19.0.0+ds1/inputstream.adaptive/resources/language/resource.language.vi_vn/strings.po 2021-09-14 14:28:17.000000000 +0000 +++ kodi-inputstream-adaptive-19.0.4+ds1/inputstream.adaptive/resources/language/resource.language.vi_vn/strings.po 2022-04-24 22:53:40.000000000 +0000 @@ -5,15 +5,15 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2021-08-16 15:29+0000\n" -"Last-Translator: Nguyễn Trung Hậu \n" +"PO-Revision-Date: 2021-09-11 23:30+0000\n" +"Last-Translator: Christian Gade \n" "Language-Team: Vietnamese \n" "Language: vi_vn\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.7.2\n" +"X-Generator: Weblate 4.8\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" @@ -86,7 +86,6 @@ msgid "Max" msgstr "Tối đa" -#, fuzzy msgctxt "#30151" msgid "480p" msgstr "480p" diff -Nru kodi-inputstream-adaptive-19.0.0+ds1/inputstream.adaptive/resources/language/resource.language.zh_cn/strings.po kodi-inputstream-adaptive-19.0.4+ds1/inputstream.adaptive/resources/language/resource.language.zh_cn/strings.po --- kodi-inputstream-adaptive-19.0.0+ds1/inputstream.adaptive/resources/language/resource.language.zh_cn/strings.po 2021-09-14 14:28:17.000000000 +0000 +++ kodi-inputstream-adaptive-19.0.4+ds1/inputstream.adaptive/resources/language/resource.language.zh_cn/strings.po 2022-04-24 22:53:40.000000000 +0000 @@ -4,125 +4,129 @@ # Addon Provider: peak3d msgid "" msgstr "" -"Language-Team: none\n" +"Report-Msgid-Bugs-To: translations@kodi.tv\n" +"PO-Revision-Date: 2021-09-14 10:01+0000\n" +"Last-Translator: taxigps \n" +"Language-Team: Chinese (China) \n" "Language: zh_cn\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.8\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" -msgstr "" +msgstr "用于自适应流的 InputStream 客户端" msgctxt "Addon Description" msgid "InputStream client for adaptive streams" -msgstr "" +msgstr "用于自适应流的 InputStream 客户端" msgctxt "#30100" msgid "General" -msgstr "" +msgstr "常规" # The minimum bandwidth which should not be deceeded. msgctxt "#30101" msgid "Min. Bandwidth (Bit/s)" -msgstr "" +msgstr "最小带宽(位/秒)" # The maximum bandwidth which should not be exceeded. 0=unlimited msgctxt "#30102" msgid "Max. Bandwidth (Bit/s)" -msgstr "" +msgstr "最大带宽(位/秒)" # Absolute path to the folder containing the decrypters msgctxt "#30103" msgid "Decrypter path" -msgstr "" +msgstr "解密程序路径" # Maximum Resolution msgctxt "#30110" msgid "Max. Resolution general decoder" -msgstr "" +msgstr "最大分辨率通用解码器" msgctxt "#30111" msgid "Stream Selection" -msgstr "" +msgstr "流选择" msgctxt "#30112" msgid "Media" -msgstr "" +msgstr "媒体" # Maximum allowed resolution if decoded through secure path msgctxt "#30113" msgid "Max. Resolution secure decoder" -msgstr "" +msgstr "最大分辨率安全解码器" # Select streams without respecting HDCP status msgctxt "#30114" msgid "Override HDCP status" -msgstr "" +msgstr "覆盖 HDCP 状态" # Do not respect display resolution when selecting streams msgctxt "#30115" msgid "Ignore Display Resolution" -msgstr "" +msgstr "忽略显示分辨率" msgctxt "#30120" msgid "Expert" -msgstr "" +msgstr "专家" msgctxt "#30121" msgid "Enable Pre-Release Features" -msgstr "" +msgstr "启用预发布功能" msgctxt "#30122" msgid "Don't use secure decoder if possible" -msgstr "" +msgstr "尽可能不使用安全解码器" msgctxt "#30150" msgid "Max" -msgstr "" +msgstr "大" msgctxt "#30151" msgid "480p" -msgstr "" +msgstr "480p" msgctxt "#30152" msgid "640p" -msgstr "" +msgstr "640p" msgctxt "#30153" msgid "720p" -msgstr "" +msgstr "720p" msgctxt "#30154" msgid "1080p" -msgstr "" +msgstr "1080p" msgctxt "#30155" msgid "Automatically select streams" -msgstr "" +msgstr "自动选择流" msgctxt "#30156" msgid "Manually select all streams" -msgstr "" +msgstr "手动选择所有流" msgctxt "#30157" msgid "All" -msgstr "" +msgstr "全部" msgctxt "#30158" msgid "Audio" -msgstr "" +msgstr "音频" msgctxt "#30159" msgid "Video" -msgstr "" +msgstr "视频" # Show all video streams msgctxt "#30160" msgid "Manually select video stream" -msgstr "" +msgstr "手动选择视频流" msgctxt "#30161" msgid "Video + Subtitles" -msgstr "" +msgstr "视频 + 字幕" diff -Nru kodi-inputstream-adaptive-19.0.0+ds1/src/common/AdaptiveDecrypter.h kodi-inputstream-adaptive-19.0.4+ds1/src/common/AdaptiveDecrypter.h --- kodi-inputstream-adaptive-19.0.0+ds1/src/common/AdaptiveDecrypter.h 1970-01-01 00:00:00.000000000 +0000 +++ kodi-inputstream-adaptive-19.0.4+ds1/src/common/AdaptiveDecrypter.h 2022-04-24 22:53:40.000000000 +0000 @@ -0,0 +1,44 @@ +/* +* Copyright (C) 2022 Team Kodi +* This file is part of Kodi - https://kodi.tv +* +* This Program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2, or (at your option) +* any later version. +* +* This Program 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 General Public License for more details. +* +* . +* +*/ + +#include "Ap4.h" + +#include +#include + +class Adaptive_CencSingleSampleDecrypter : public AP4_CencSingleSampleDecrypter +{ +public: + Adaptive_CencSingleSampleDecrypter() : AP4_CencSingleSampleDecrypter(nullptr){}; + + /*! \brief Add a Key ID to the current session + * \param keyId The KID + */ + virtual void AddKeyId(const std::string& keyId) + { + throw std::logic_error("AddKeyId method not implemented."); + }; + + /*! \brief Set a Key ID as default + * \param keyId The KID + */ + virtual void SetDefaultKeyId(const std::string& keyId) + { + throw std::logic_error("SetDefaultKeyId method not implemented."); + }; +}; diff -Nru kodi-inputstream-adaptive-19.0.0+ds1/src/common/AdaptiveStream.h kodi-inputstream-adaptive-19.0.4+ds1/src/common/AdaptiveStream.h --- kodi-inputstream-adaptive-19.0.0+ds1/src/common/AdaptiveStream.h 2021-09-14 14:28:17.000000000 +0000 +++ kodi-inputstream-adaptive-19.0.4+ds1/src/common/AdaptiveStream.h 2022-04-24 22:53:40.000000000 +0000 @@ -147,7 +147,7 @@ uint32_t hdcpLimit_; uint16_t hdcpVersion_; uint16_t download_pssh_set_; - unsigned int download_segNum_; + uint64_t download_segNum_; bool stopped_; uint8_t m_iv[16]; bool m_fixateInitialization; diff -Nru kodi-inputstream-adaptive-19.0.0+ds1/src/common/AdaptiveTree.cpp kodi-inputstream-adaptive-19.0.4+ds1/src/common/AdaptiveTree.cpp --- kodi-inputstream-adaptive-19.0.0+ds1/src/common/AdaptiveTree.cpp 2021-09-14 14:28:17.000000000 +0000 +++ kodi-inputstream-adaptive-19.0.4+ds1/src/common/AdaptiveTree.cpp 2022-04-24 22:53:40.000000000 +0000 @@ -168,7 +168,13 @@ (*b)->segments_.insert(seg); } - void AdaptiveTree::OnDataArrived(unsigned int segNum, uint16_t psshSet, uint8_t iv[16], const uint8_t *src, uint8_t *dst, size_t dstOffset, size_t dataSize) + void AdaptiveTree::OnDataArrived(uint64_t segNum, + uint16_t psshSet, + uint8_t iv[16], + const uint8_t* src, + uint8_t* dst, + size_t dstOffset, + size_t dataSize) { memcpy(dst + dstOffset, src, dataSize); } diff -Nru kodi-inputstream-adaptive-19.0.0+ds1/src/common/AdaptiveTree.h kodi-inputstream-adaptive-19.0.4+ds1/src/common/AdaptiveTree.h --- kodi-inputstream-adaptive-19.0.0+ds1/src/common/AdaptiveTree.h 2021-09-14 14:28:17.000000000 +0000 +++ kodi-inputstream-adaptive-19.0.4+ds1/src/common/AdaptiveTree.h 2022-04-24 22:53:40.000000000 +0000 @@ -204,7 +204,7 @@ uint32_t expired_segments_; ContainerType containerType_; SegmentTemplate segtpl_; - unsigned int startNumber_; + uint64_t startNumber_; uint64_t nextPts_; //SegmentList uint64_t ptsOffset_; @@ -245,9 +245,11 @@ return get_segment_pos(current_segment_); }; - uint32_t getCurrentSegmentNumber() const + uint64_t getCurrentSegmentNumber() const { - return current_segment_ ? get_segment_pos(current_segment_) + startNumber_ : ~0U; + return current_segment_ + ? static_cast(get_segment_pos(current_segment_) + startNumber_) + : ~0ULL; }; void SetScaling() @@ -402,7 +404,9 @@ std::vector adaptationSets_; std::string base_url_, id_; - uint32_t timescale_ = 1000, startNumber_ = 1, sequence_ = 0; + uint32_t timescale_ = 1000; + uint32_t sequence_ = 0; + uint64_t startNumber_ = 1; uint64_t start_ = 0; uint64_t startPTS_ = 0; uint64_t duration_ = 0; @@ -463,7 +467,13 @@ { return PREPARE_RESULT_OK; }; - virtual void OnDataArrived(unsigned int segNum, uint16_t psshSet, uint8_t iv[16], const uint8_t *src, uint8_t *dst, size_t dstOffset, size_t dataSize); + virtual void OnDataArrived(uint64_t segNum, + uint16_t psshSet, + uint8_t iv[16], + const uint8_t* src, + uint8_t* dst, + size_t dstOffset, + size_t dataSize); virtual void RefreshSegments(Period* period, AdaptationSet* adp, Representation* rep, diff -Nru kodi-inputstream-adaptive-19.0.0+ds1/src/main.cpp kodi-inputstream-adaptive-19.0.4+ds1/src/main.cpp --- kodi-inputstream-adaptive-19.0.0+ds1/src/main.cpp 2021-09-14 14:28:17.000000000 +0000 +++ kodi-inputstream-adaptive-19.0.4+ds1/src/main.cpp 2022-04-24 22:53:40.000000000 +0000 @@ -1067,7 +1067,7 @@ AP4_Movie* movie, AP4_Track* track, AP4_UI32 streamId, - AP4_CencSingleSampleDecrypter* ssd, + Adaptive_CencSingleSampleDecrypter* ssd, const SSD::SSD_DECRYPTER::SSD_CAPS& dcaps) : AP4_LinearReader(*movie, input), m_track(track), @@ -1506,7 +1506,7 @@ const AP4_UI08* m_defaultKey; AP4_ProtectedSampleDescription* m_protectedDesc; - AP4_CencSingleSampleDecrypter* m_singleSampleDecryptor; + Adaptive_CencSingleSampleDecrypter* m_singleSampleDecryptor; AP4_CencSampleDecrypter* m_decrypter; uint64_t m_nextDuration, m_nextTimestamp; }; @@ -2226,6 +2226,7 @@ // Preinitialize the DRM, if pre-initialisation data are provided std::map additionalHeaders = std::map(); + bool isSessionOpened{false}; if (!drmPreInitData_.empty()) { @@ -2233,16 +2234,13 @@ std::string sessionId; // Pre-initialize the DRM allow to generate the challenge and session ID data // used to make licensed manifest requests (via proxy callback) - if (PreInitializeDRM(challengeB64, sessionId)) + if (PreInitializeDRM(challengeB64, sessionId, isSessionOpened)) { additionalHeaders["challengeB64"] = challengeB64; additionalHeaders["sessionId"] = sessionId; } else - { - kodi::Log(ADDON_LOG_ERROR, "%s - DRM pre-initialization failed", __FUNCTION__); return false; - } } // Open manifest file with location redirect support bool mpdSuccess; @@ -2262,10 +2260,12 @@ drmConfig_ = config; maxUserBandwidth_ = max_user_bandwidth; - return InitializePeriod(); + return InitializePeriod(isSessionOpened); } -bool Session::PreInitializeDRM(std::string& challengeB64, std::string& sessionId) +bool Session::PreInitializeDRM(std::string& challengeB64, + std::string& sessionId, + bool& isSessionOpened) { std::string psshData; std::string kidData; @@ -2345,12 +2345,17 @@ cdm_sessions_[1].single_sample_decryptor_ = nullptr; return false; } - - DisposeSampleDecrypter(); +#if defined(ANDROID) + // On android is not possible add the default KID key + // then we cannot re-use same session + DisposeSampleDecrypter(); +#else + isSessionOpened = true; +#endif return true; } -bool Session::InitializeDRM() +bool Session::InitializeDRM(bool addDefaultKID /* = false */) { cdm_sessions_.resize(adaptiveTree_->current_period_->psshSets_.size()); memset(&cdm_sessions_.front(), 0, sizeof(CDMSESSION)); @@ -2531,9 +2536,17 @@ } CDMSESSION& session(cdm_sessions_[ses]); - const char* defkid = adaptiveTree_->current_period_->psshSets_[ses].defaultKID_.empty() - ? nullptr - : adaptiveTree_->current_period_->psshSets_[ses].defaultKID_.data(); + std::string defaultKid{adaptiveTree_->current_period_->psshSets_[ses].defaultKID_}; + const char* defkid = defaultKid.empty() ? nullptr : defaultKid.data(); + + if (addDefaultKID && ses == 1 && session.single_sample_decryptor_) + { + // If the CDM has been pre-initialized, on non-android systems + // we use the same session opened then we have to add the current KID + // because the session has been opened with a different PSSH/KID + session.single_sample_decryptor_->AddKeyId(defaultKid); + session.single_sample_decryptor_->SetDefaultKeyId(defaultKid); + } if (decrypter_ && defkid) { @@ -2598,7 +2611,7 @@ return true; } -bool Session::InitializePeriod() +bool Session::InitializePeriod(bool isSessionOpened /* = false */) { bool psshChanged = true; if (adaptiveTree_->next_period_) @@ -2642,9 +2655,16 @@ kodi::Log(ADDON_LOG_DEBUG, "Reusing DRM psshSets for new period!"); else { - kodi::Log(ADDON_LOG_DEBUG, "New period, dispose sample decrypter and reinitialize"); - DisposeSampleDecrypter(); - if (!InitializeDRM()) + if (isSessionOpened) + { + kodi::Log(ADDON_LOG_DEBUG, "New period, reinitialize by using same session"); + } + else + { + kodi::Log(ADDON_LOG_DEBUG, "New period, dispose sample decrypter and reinitialize"); + DisposeSampleDecrypter(); + } + if (!InitializeDRM(isSessionOpened)) return false; } @@ -3199,7 +3219,7 @@ return ret; } -AP4_CencSingleSampleDecrypter* Session::GetSingleSampleDecrypter(std::string sessionId) +Adaptive_CencSingleSampleDecrypter* Session::GetSingleSampleDecrypter(std::string sessionId) { for (std::vector::iterator b(cdm_sessions_.begin() + 1), e(cdm_sessions_.end()); b != e; ++b) @@ -3950,7 +3970,7 @@ bool ret = m_session->SeekTime(static_cast(ms) * 0.001f, 0, false); m_failedSeekTime = ret ? ~0 : ms; - return m_session->SeekTime(static_cast(ms) * 0.001f, 0, false); + return ret; } int CInputStreamAdaptive::GetTotalTime() @@ -4055,7 +4075,7 @@ m_name += ".decoder"; std::string sessionId(initData.GetCryptoSession().GetSessionId()); - AP4_CencSingleSampleDecrypter* ssd(m_session->GetSingleSampleDecrypter(sessionId)); + Adaptive_CencSingleSampleDecrypter* ssd(m_session->GetSingleSampleDecrypter(sessionId)); return m_session->GetDecrypter()->OpenVideoDecoder( ssd, reinterpret_cast(initData.GetCStructure())); diff -Nru kodi-inputstream-adaptive-19.0.0+ds1/src/main.h kodi-inputstream-adaptive-19.0.4+ds1/src/main.h --- kodi-inputstream-adaptive-19.0.0+ds1/src/main.h 2021-09-14 14:28:17.000000000 +0000 +++ kodi-inputstream-adaptive-19.0.4+ds1/src/main.h 2022-04-24 22:53:40.000000000 +0000 @@ -22,6 +22,7 @@ #include #include +#include "common/AdaptiveDecrypter.h" #include "common/AdaptiveTree.h" #include "common/AdaptiveStream.h" #include @@ -98,9 +99,28 @@ const std::string& drm_preinit_data); virtual ~Session(); bool Initialize(const std::uint8_t config, uint32_t max_user_bandwidth); - bool PreInitializeDRM(std::string& challengeB64, std::string& sessionId); - bool InitializeDRM(); - bool InitializePeriod(); + + /*! \brief Pre-Initialize the DRM + * \param challengeB64 [OUT] Provide the challenge data as base64 + * \param sessionId [OUT] Provide the session ID + * \param isSessionOpened [OUT] Will be true if the DRM session has been opened + * \return True if has success, false otherwise + */ + bool PreInitializeDRM(std::string& challengeB64, std::string& sessionId, bool& isSessionOpened); + + /*! \brief Initialize the DRM + * \param addDefaultKID Set True to add the default KID to the first session + * \return True if has success, false otherwise + */ + bool InitializeDRM(bool addDefaultKID = false); + + /*! \brief Initialize adaptive tree period + * \param isSessionOpened Set True to kept and re-use the DRM session opened, + * otherwise False to reinitialize the DRM session + * \return True if has success, false otherwise + */ + bool InitializePeriod(bool isSessionOpened = false); + SampleReader *GetNextSample(); struct STREAM @@ -136,9 +156,9 @@ uint8_t GetMediaTypeMask() const { return media_type_mask_; }; std::uint16_t GetVideoWidth()const; std::uint16_t GetVideoHeight()const; - AP4_CencSingleSampleDecrypter * GetSingleSampleDecryptor(unsigned int nIndex)const{ return cdm_sessions_[nIndex].single_sample_decryptor_; }; + Adaptive_CencSingleSampleDecrypter * GetSingleSampleDecryptor(unsigned int nIndex)const{ return cdm_sessions_[nIndex].single_sample_decryptor_; }; SSD::SSD_DECRYPTER *GetDecrypter() { return decrypter_; }; - AP4_CencSingleSampleDecrypter *GetSingleSampleDecrypter(std::string sessionId); + Adaptive_CencSingleSampleDecrypter *GetSingleSampleDecrypter(std::string sessionId); const SSD::SSD_DECRYPTER::SSD_CAPS &GetDecrypterCaps(unsigned int nIndex) const{ return cdm_sessions_[nIndex].decrypter_caps_; }; uint64_t GetTotalTimeMs()const { return adaptiveTree_->overallSeconds_ * 1000; }; uint64_t GetElapsedTimeMs()const { return elapsed_time_ / 1000; }; @@ -190,7 +210,7 @@ struct CDMSESSION { SSD::SSD_DECRYPTER::SSD_CAPS decrypter_caps_; - AP4_CencSingleSampleDecrypter *single_sample_decryptor_; + Adaptive_CencSingleSampleDecrypter *single_sample_decryptor_; const char* cdm_session_str_ = nullptr; bool shared_single_sample_decryptor_ = false; }; diff -Nru kodi-inputstream-adaptive-19.0.0+ds1/src/parser/DASHTree.cpp kodi-inputstream-adaptive-19.0.4+ds1/src/parser/DASHTree.cpp --- kodi-inputstream-adaptive-19.0.0+ds1/src/parser/DASHTree.cpp 2021-09-14 14:28:17.000000000 +0000 +++ kodi-inputstream-adaptive-19.0.4+ds1/src/parser/DASHTree.cpp 2022-04-24 22:53:40.000000000 +0000 @@ -87,11 +87,11 @@ return 0; } -static unsigned int ParseSegmentTemplate(const char** attr, +static uint64_t ParseSegmentTemplate(const char** attr, std::string baseURL, std::string baseDomain, DASHTree::SegmentTemplate& tpl, - unsigned int startNumber) + uint64_t startNumber) { for (; *attr;) { @@ -236,17 +236,8 @@ static void ReplacePlaceHolders(std::string& rep, const std::string& id, uint32_t bandwidth) { - std::string::size_type repPos = rep.find("$RepresentationID$"); - if (repPos != std::string::npos) - rep.replace(repPos, 18, id); - - repPos = rep.find("$Bandwidth$"); - if (repPos != std::string::npos) - { - char bw[32]; - sprintf(bw, "%u", bandwidth); - rep.replace(repPos, 11, bw); - } + replaceAll(rep, "$RepresentationID$", id, false); + replaceAll(rep, "$Bandwidth$", std::to_string(bandwidth), false); } static void XMLCALL start(void* data, const char* el, const char** attr) @@ -1623,7 +1614,7 @@ { std::string replaced; uint32_t numReplace = ~0U; - unsigned int nextStartNumber(~0); + uint64_t nextStartNumber(~0ULL); std::string::size_type update_parameter_pos = update_parameter_.find("$START_NUMBER$"); if (~update_parameter_pos) @@ -1653,7 +1644,7 @@ replaced = update_parameter_; char buf[32]; - sprintf(buf, "%u", nextStartNumber); + sprintf(buf, "%llu", nextStartNumber); replaced.replace(update_parameter_pos, 14, buf); } @@ -1753,7 +1744,7 @@ else if ((*br)->startNumber_ <= 1) //Full update, be careful with startnumbers! { //TODO: check if first element or size differs - unsigned int segmentId((*brd)->getCurrentSegmentNumber()); + uint64_t segmentId((*brd)->getCurrentSegmentNumber()); if ((*br)->flags_ & DASHTree::Representation::TIMELINE) { uint64_t search_pts = (*br)->segments_[0]->range_begin_; @@ -1804,8 +1795,8 @@ { if (segmentId >= (*brd)->startNumber_ + (*brd)->segments_.size()) segmentId = (*brd)->startNumber_ + (*brd)->segments_.size() - 1; - (*brd)->current_segment_ = - (*brd)->get_segment(segmentId - (*brd)->startNumber_); + (*brd)->current_segment_ = (*brd)->get_segment( + static_cast(segmentId - (*brd)->startNumber_)); } if (((*brd)->flags_ & Representation::WAITFORSEGMENT) && @@ -1820,7 +1811,7 @@ ((*br)->startNumber_ == (*brd)->startNumber_ && (*br)->segments_.size() > (*brd)->segments_.size())) { - unsigned int segmentId((*brd)->getCurrentSegmentNumber()); + uint64_t segmentId((*brd)->getCurrentSegmentNumber()); (*br)->segments_.swap((*brd)->segments_); (*brd)->startNumber_ = (*br)->startNumber_; if (!~segmentId || segmentId < (*brd)->startNumber_) @@ -1829,8 +1820,8 @@ { if (segmentId >= (*brd)->startNumber_ + (*brd)->segments_.size()) segmentId = (*brd)->startNumber_ + (*brd)->segments_.size() - 1; - (*brd)->current_segment_ = - (*brd)->get_segment(segmentId - (*brd)->startNumber_); + (*brd)->current_segment_ = (*brd)->get_segment( + static_cast(segmentId - (*brd)->startNumber_)); } if (((*brd)->flags_ & Representation::WAITFORSEGMENT) && diff -Nru kodi-inputstream-adaptive-19.0.0+ds1/src/parser/DASHTree.h kodi-inputstream-adaptive-19.0.4+ds1/src/parser/DASHTree.h --- kodi-inputstream-adaptive-19.0.0+ds1/src/parser/DASHTree.h 2021-09-14 14:28:17.000000000 +0000 +++ kodi-inputstream-adaptive-19.0.4+ds1/src/parser/DASHTree.h 2022-04-24 22:53:40.000000000 +0000 @@ -45,7 +45,7 @@ virtual void SetLastUpdated(std::chrono::system_clock::time_point tm){}; void SetUpdateInterval(uint32_t interval) { updateInterval_ = interval; }; uint64_t pts_helper_, timeline_time_; - uint32_t firstStartNumber_; + uint64_t firstStartNumber_; std::string current_playready_wrmheader_; std::string mpd_url_; diff -Nru kodi-inputstream-adaptive-19.0.0+ds1/src/parser/HLSTree.cpp kodi-inputstream-adaptive-19.0.4+ds1/src/parser/HLSTree.cpp --- kodi-inputstream-adaptive-19.0.0+ds1/src/parser/HLSTree.cpp 2021-09-14 14:28:17.000000000 +0000 +++ kodi-inputstream-adaptive-19.0.4+ds1/src/parser/HLSTree.cpp 2022-04-24 22:53:40.000000000 +0000 @@ -390,9 +390,9 @@ if (!rep->source_url_.empty()) { SPINCACHE newSegments; - unsigned int newStartNumber; + uint64_t newStartNumber; Segment newInitialization; - uint32_t segmentId(rep->getCurrentSegmentNumber()); + uint64_t segmentId(rep->getCurrentSegmentNumber()); std::stringstream stream; uint32_t adp_pos = std::find(period->adaptationSets_.begin(), period->adaptationSets_.end(), adp) - @@ -527,7 +527,7 @@ } else if (line.compare(0, 22, "#EXT-X-MEDIA-SEQUENCE:") == 0) { - newStartNumber = atol(line.c_str() + 22); + newStartNumber = std::stoull(line.substr(22)); } else if (line.compare(0, 21, "#EXT-X-PLAYLIST-TYPE:") == 0) { @@ -748,7 +748,8 @@ { if (segmentId >= rep->startNumber_ + rep->segments_.size()) segmentId = rep->startNumber_ + rep->segments_.size() - 1; - rep->current_segment_ = rep->get_segment(segmentId - rep->startNumber_); + rep->current_segment_ = + rep->get_segment(static_cast(segmentId - rep->startNumber_)); } if ((rep->flags_ & Representation::WAITFORSEGMENT) && (rep->get_next_segment(rep->current_segment_) || current_period_ != periods_.back())) @@ -773,7 +774,7 @@ return true; } -void HLSTree::OnDataArrived(unsigned int segNum, +void HLSTree::OnDataArrived(uint64_t segNum, uint16_t psshSet, uint8_t iv[16], const uint8_t* src, diff -Nru kodi-inputstream-adaptive-19.0.0+ds1/src/parser/HLSTree.h kodi-inputstream-adaptive-19.0.4+ds1/src/parser/HLSTree.h --- kodi-inputstream-adaptive-19.0.0+ds1/src/parser/HLSTree.h 2021-09-14 14:28:17.000000000 +0000 +++ kodi-inputstream-adaptive-19.0.4+ds1/src/parser/HLSTree.h 2022-04-24 22:53:40.000000000 +0000 @@ -51,7 +51,7 @@ Representation* rep, bool update = false) override; virtual bool write_data(void* buffer, size_t buffer_size, void* opaque) override; - virtual void OnDataArrived(unsigned int segNum, + virtual void OnDataArrived(uint64_t segNum, uint16_t psshSet, uint8_t iv[16], const uint8_t* src, diff -Nru kodi-inputstream-adaptive-19.0.0+ds1/src/parser/WebVTT.cpp kodi-inputstream-adaptive-19.0.4+ds1/src/parser/WebVTT.cpp --- kodi-inputstream-adaptive-19.0.0+ds1/src/parser/WebVTT.cpp 2021-09-14 14:28:17.000000000 +0000 +++ kodi-inputstream-adaptive-19.0.4+ds1/src/parser/WebVTT.cpp 2022-04-24 22:53:40.000000000 +0000 @@ -20,6 +20,17 @@ #include "../helpers.h" #include +uint32_t WebVTT::ReadNextUnsignedInt(const char* data) +{ + if (!data) + return 0; + + return (static_cast(data[0]) & 0xFF) << 24 | + (static_cast(data[1]) & 0xFF) << 16 | + (static_cast(data[2]) & 0xFF) << 8 | + (static_cast(data[3]) & 0xFF); +} + bool WebVTT::Parse(uint64_t pts, uint32_t duration, const void *buffer, size_t buffer_size, uint64_t timescale, uint64_t ptsOffset) { m_timescale = timescale; @@ -29,7 +40,8 @@ const char *cbuf(reinterpret_cast(buffer)), *cbufe(cbuf + buffer_size); - if (buffer_size >= 8 && (memcmp(cbuf + 4, "vtte", 4) == 0 || memcmp(cbuf + 4, "vttc", 4) == 0)) + if (buffer_size >= 8 && (memcmp(cbuf + 4, "vtte", 4) == 0 || memcmp(cbuf + 4, "vttc", 4) == 0 || + memcmp(cbuf + 4, "vttx", 4) == 0)) { if (memcmp(cbuf + 4, "vtte", 4) == 0) { @@ -38,14 +50,38 @@ } else if (memcmp(cbuf + 4, "vttc", 4) == 0) { - if (memcmp(cbuf + 12, "payl", 4) == 0) - cbuf += 4, buffer_size -= 4; + uint32_t remainingVttcBoxSize = ReadNextUnsignedInt(cbuf); + int pos = 8; - std::string text(cbuf + 12, buffer_size - 12); - if (m_subTitles.empty() || ~m_subTitles.back().end) + while (remainingVttcBoxSize > 8) { - m_subTitles.push_back(SUBTITLE(pts)); - m_subTitles.back().text.push_back(text); + uint32_t boxSize = ReadNextUnsignedInt(cbuf + pos); + if (boxSize == 0) + break; + + pos += 4; + int payloadLength = boxSize - 8; + remainingVttcBoxSize -= 8; + remainingVttcBoxSize -= payloadLength; + + if (memcmp(cbuf + pos, "payl", 4) == 0) + { + pos += 4; + std::string text(cbuf + pos, payloadLength); + pos += payloadLength; + if (m_subTitles.empty() || ~m_subTitles.back().end) + { + m_subTitles.push_back(SUBTITLE(pts)); + m_subTitles.back().text.push_back(text); + } + break; + } + else + { + // Skip this box + pos += 4; + pos += payloadLength; + } } } } diff -Nru kodi-inputstream-adaptive-19.0.0+ds1/src/parser/WebVTT.h kodi-inputstream-adaptive-19.0.4+ds1/src/parser/WebVTT.h --- kodi-inputstream-adaptive-19.0.0+ds1/src/parser/WebVTT.h 2021-09-14 14:28:17.000000000 +0000 +++ kodi-inputstream-adaptive-19.0.4+ds1/src/parser/WebVTT.h 2022-04-24 22:53:40.000000000 +0000 @@ -52,6 +52,7 @@ uint32_t m_pos; uint64_t m_tickRate; private: + uint32_t ReadNextUnsignedInt(const char* data); std::deque m_subTitles; std::string m_SRT, m_lastId; diff -Nru kodi-inputstream-adaptive-19.0.0+ds1/src/SSD_dll.h kodi-inputstream-adaptive-19.0.4+ds1/src/SSD_dll.h --- kodi-inputstream-adaptive-19.0.0+ds1/src/SSD_dll.h 2021-09-14 14:28:17.000000000 +0000 +++ kodi-inputstream-adaptive-19.0.4+ds1/src/SSD_dll.h 2022-04-24 22:53:40.000000000 +0000 @@ -1,7 +1,7 @@ #pragma once //Functionality wich is supported by the Decrypter -class AP4_CencSingleSampleDecrypter; +class Adaptive_CencSingleSampleDecrypter; class AP4_DataBuffer; namespace SSD @@ -21,7 +21,7 @@ { PROPERTY_HEADER }; - static const uint32_t version = 13; + static const uint32_t version = 14; #if defined(ANDROID) virtual void* GetJNIEnv() = 0; virtual int GetSDKVersion() = 0; @@ -182,15 +182,15 @@ // Return supported URN if type matches to capabilities, otherwise null virtual const char *SelectKeySytem(const char* keySystem) = 0; virtual bool OpenDRMSystem(const char *licenseURL, const AP4_DataBuffer &serverCertificate, const uint8_t config) = 0; - virtual AP4_CencSingleSampleDecrypter *CreateSingleSampleDecrypter(AP4_DataBuffer &pssh, const char *optionalKeyParameter, const uint8_t *defaultkeyid, bool skipSessionMessage) = 0; - virtual void DestroySingleSampleDecrypter(AP4_CencSingleSampleDecrypter* decrypter) = 0; + virtual Adaptive_CencSingleSampleDecrypter *CreateSingleSampleDecrypter(AP4_DataBuffer &pssh, const char *optionalKeyParameter, const uint8_t *defaultkeyid, bool skipSessionMessage) = 0; + virtual void DestroySingleSampleDecrypter(Adaptive_CencSingleSampleDecrypter* decrypter) = 0; - virtual void GetCapabilities(AP4_CencSingleSampleDecrypter* decrypter, const uint8_t *keyid, uint32_t media, SSD_DECRYPTER::SSD_CAPS &caps) = 0; - virtual bool HasLicenseKey(AP4_CencSingleSampleDecrypter* decrypter, const uint8_t *keyid) = 0; + virtual void GetCapabilities(Adaptive_CencSingleSampleDecrypter* decrypter, const uint8_t *keyid, uint32_t media, SSD_DECRYPTER::SSD_CAPS &caps) = 0; + virtual bool HasLicenseKey(Adaptive_CencSingleSampleDecrypter* decrypter, const uint8_t *keyid) = 0; virtual bool HasCdmSession() = 0; - virtual std::string GetChallengeB64Data(AP4_CencSingleSampleDecrypter* decrypter) = 0; + virtual std::string GetChallengeB64Data(Adaptive_CencSingleSampleDecrypter* decrypter) = 0; - virtual bool OpenVideoDecoder(AP4_CencSingleSampleDecrypter* decrypter, const SSD_VIDEOINITDATA *initData) = 0; + virtual bool OpenVideoDecoder(Adaptive_CencSingleSampleDecrypter* decrypter, const SSD_VIDEOINITDATA *initData) = 0; virtual SSD_DECODE_RETVAL DecodeVideo(void* instance, SSD_SAMPLE *sample, SSD_PICTURE *picture) = 0; virtual void ResetVideo() = 0; }; diff -Nru kodi-inputstream-adaptive-19.0.0+ds1/wvdecrypter/cdm/build/build_config.h kodi-inputstream-adaptive-19.0.4+ds1/wvdecrypter/cdm/build/build_config.h --- kodi-inputstream-adaptive-19.0.0+ds1/wvdecrypter/cdm/build/build_config.h 2021-09-14 14:28:17.000000000 +0000 +++ kodi-inputstream-adaptive-19.0.4+ds1/wvdecrypter/cdm/build/build_config.h 2022-04-24 22:53:40.000000000 +0000 @@ -138,8 +138,29 @@ #define ARCH_CPU_32_BITS 1 #define ARCH_CPU_LITTLE_ENDIAN 1 #endif -#else -#error Please add support for your architecture in build/build_config.h +#elif (defined(__PPC64__) || defined(__PPC__)) && defined(__BIG_ENDIAN__) +#define ARCH_CPU_PPC64_FAMILY 1 +#define ARCH_CPU_PPC64 1 +#define ARCH_CPU_64_BITS 1 +#define ARCH_CPU_BIG_ENDIAN 1 +#elif defined(__PPC64__) +#define ARCH_CPU_PPC64_FAMILY 1 +#define ARCH_CPU_PPC64 1 +#define ARCH_CPU_64_BITS 1 +#define ARCH_CPU_LITTLE_ENDIAN 1 +#elif defined(__riscv) || defined(__riscv__) +#define ARCH_CPU_RISCV_FAMILY 1 +#define ARCH_CPU_RISCV 1 +#define ARCH_CPU_LITTLE_ENDIAN 1 +#if defined(__riscv_xlen) +# if (__riscv_xlen == 64) +# define ARCH_CPU_64_BITS 1 +# else +# define ARCH_CPU_32_BITS 1 +# endif +#endif +# else +#error Please add support for your architecture in build/build_config. #endif // Type detection for wchar_t. diff -Nru kodi-inputstream-adaptive-19.0.0+ds1/wvdecrypter/wvdecrypter.cpp kodi-inputstream-adaptive-19.0.4+ds1/wvdecrypter/wvdecrypter.cpp --- kodi-inputstream-adaptive-19.0.0+ds1/wvdecrypter/wvdecrypter.cpp 2021-09-14 14:28:17.000000000 +0000 +++ kodi-inputstream-adaptive-19.0.4+ds1/wvdecrypter/wvdecrypter.cpp 2022-04-24 22:53:40.000000000 +0000 @@ -17,6 +17,7 @@ */ #include "cdm/media/cdm/cdm_adapter.h" +#include "../src/common/AdaptiveDecrypter.h" #include "../src/helpers.h" #include "../src/SSD_dll.h" #include "../src/md5.h" @@ -165,7 +166,7 @@ +---------------------------------------------------------------------*/ class WV_DRM; -class WV_CencSingleSampleDecrypter : public AP4_CencSingleSampleDecrypter +class WV_CencSingleSampleDecrypter : public Adaptive_CencSingleSampleDecrypter { public: // methods @@ -216,6 +217,9 @@ SSD_DECODE_RETVAL DecodeVideo(void* hostInstance, SSD_SAMPLE *sample, SSD_PICTURE *picture); void ResetVideo(); + void SetDefaultKeyId(const std::string& keyId) override; + void AddKeyId(const std::string& keyId) override; + private: void CheckLicenseRenewal(); bool SendSessionMessage(); @@ -405,19 +409,21 @@ | WV_CencSingleSampleDecrypter::WV_CencSingleSampleDecrypter +---------------------------------------------------------------------*/ -WV_CencSingleSampleDecrypter::WV_CencSingleSampleDecrypter(WV_DRM &drm, AP4_DataBuffer &pssh, const uint8_t *defaultKeyId, bool skipSessionMessage) - : AP4_CencSingleSampleDecrypter(0) - , drm_(drm) - , pssh_(pssh) - , hdcp_version_(99) - , hdcp_limit_(0) - , resolution_limit_ (0) - , max_subsample_count_decrypt_(0) - , max_subsample_count_video_(0) - , subsample_buffer_decrypt_(0) - , subsample_buffer_video_(0) - , promise_id_(1) - , drained_(true) +WV_CencSingleSampleDecrypter::WV_CencSingleSampleDecrypter(WV_DRM& drm, + AP4_DataBuffer& pssh, + const uint8_t* defaultKeyId, + bool skipSessionMessage) + : drm_(drm), + pssh_(pssh), + hdcp_version_(99), + hdcp_limit_(0), + resolution_limit_(0), + max_subsample_count_decrypt_(0), + max_subsample_count_video_(0), + subsample_buffer_decrypt_(0), + subsample_buffer_video_(0), + promise_id_(1), + drained_(true) { SetParentIsOwner(false); @@ -476,7 +482,7 @@ if (session_.empty()) { - Log(SSD_HOST::LL_ERROR, "License update not successful (no session)"); + Log(SSD_HOST::LL_ERROR, "Cannot perform License update, no session available"); return; } @@ -484,14 +490,6 @@ return; while (challenge_.GetDataSize() > 0 && SendSessionMessage()); - - if (keys_.empty()) - { - Log(SSD_HOST::LL_ERROR, "License update not successful (no keys)"); - CloseSessionId(); - return; - } - Log(SSD_HOST::LL_DEBUG, "License update successful"); } WV_CencSingleSampleDecrypter::~WV_CencSingleSampleDecrypter() @@ -935,11 +933,24 @@ Log(SSD_HOST::LL_ERROR, "Unsupported License request template (response)"); goto SSMFAIL; } - } else //its binary - simply push the returned data as update + } + else // its binary - simply push the returned data as update + { drm_.GetCdmAdapter()->UpdateSession(++promise_id_, session_.data(), session_.size(), - reinterpret_cast(response.data()), response.size()); + reinterpret_cast(response.data()), + response.size()); + } + if (keys_.empty()) + { + Log(SSD_HOST::LL_ERROR, "License update not successful (no keys)"); + CloseSessionId(); + return false; + } + + Log(SSD_HOST::LL_DEBUG, "License update successful"); return true; + SSMFAIL: if (file) host->CloseFile(file); @@ -1407,6 +1418,23 @@ drained_ = true; } +void WV_CencSingleSampleDecrypter::SetDefaultKeyId(const std::string& keyId) +{ + memcpy(defaultKeyId_, keyId.c_str(), 16); +} + +void WV_CencSingleSampleDecrypter::AddKeyId(const std::string& keyId) +{ + WVSKEY key; + key.keyid = keyId; + key.status = cdm::KeyStatus::kUsable; + + if (std::find(keys_.begin(), keys_.end(), key) == keys_.end()) + { + keys_.push_back(key); + } +} + /*********************************************************************************************/ class WVDecrypter : public SSD_DECRYPTER @@ -1434,7 +1462,7 @@ return cdmsession_->GetCdmAdapter() != nullptr; } - virtual AP4_CencSingleSampleDecrypter *CreateSingleSampleDecrypter(AP4_DataBuffer &pssh, const char *optionalKeyParameter, const uint8_t *defaultkeyid, bool skipSessionMessage) override + virtual Adaptive_CencSingleSampleDecrypter *CreateSingleSampleDecrypter(AP4_DataBuffer &pssh, const char *optionalKeyParameter, const uint8_t *defaultkeyid, bool skipSessionMessage) override { WV_CencSingleSampleDecrypter *decrypter = new WV_CencSingleSampleDecrypter(*cdmsession_, pssh, defaultkeyid, skipSessionMessage); if (!decrypter->GetSessionId()) @@ -1445,7 +1473,7 @@ return decrypter; } - virtual void DestroySingleSampleDecrypter(AP4_CencSingleSampleDecrypter* decrypter) override + virtual void DestroySingleSampleDecrypter(Adaptive_CencSingleSampleDecrypter* decrypter) override { if (decrypter) { @@ -1455,7 +1483,7 @@ } } - virtual void GetCapabilities(AP4_CencSingleSampleDecrypter* decrypter, const uint8_t *keyid, uint32_t media, SSD_DECRYPTER::SSD_CAPS &caps) override + virtual void GetCapabilities(Adaptive_CencSingleSampleDecrypter* decrypter, const uint8_t *keyid, uint32_t media, SSD_DECRYPTER::SSD_CAPS &caps) override { if (!decrypter) { @@ -1466,7 +1494,7 @@ static_cast(decrypter)->GetCapabilities(keyid, media, caps); } - virtual bool HasLicenseKey(AP4_CencSingleSampleDecrypter* decrypter, const uint8_t *keyid) override + virtual bool HasLicenseKey(Adaptive_CencSingleSampleDecrypter* decrypter, const uint8_t *keyid) override { if (decrypter) return static_cast(decrypter)->HasKeyId(keyid); @@ -1478,7 +1506,7 @@ return cdmsession_ != nullptr; } - virtual std::string GetChallengeB64Data(AP4_CencSingleSampleDecrypter* decrypter) override + virtual std::string GetChallengeB64Data(Adaptive_CencSingleSampleDecrypter* decrypter) override { if (!decrypter) return nullptr; @@ -1488,7 +1516,7 @@ return b64_encode(challengeData.GetData(), challengeData.GetDataSize(), true); } - virtual bool OpenVideoDecoder(AP4_CencSingleSampleDecrypter* decrypter, const SSD_VIDEOINITDATA *initData) override + virtual bool OpenVideoDecoder(Adaptive_CencSingleSampleDecrypter* decrypter, const SSD_VIDEOINITDATA *initData) override { if (!decrypter || !initData) return false;