ソースを参照

kodi: update to 21.2

Waldemar Brodkorb 10 ヶ月 前
コミット
2c87879bff

+ 27 - 21
package/kodi/Makefile

@@ -4,29 +4,29 @@
 include $(ADK_TOPDIR)/rules.mk
 
 PKG_NAME:=		kodi
-PKG_VERSION:=		21.0b2
+PKG_VERSION:=		21.2
 PKG_RELEASE:=		1
-PKG_HASH:=		b9d6ecbb8769cdfe00cbbe5da5c330a7624eee50cffb87d87f6271033f1ee74b
+PKG_HASH:=		da3a5df663684664b9383b65f1c06568222629d935084a59e4e641fcdcb6c383
 PKG_DESCR:=		software media player
 PKG_SECTION:=		mm/video
-PKG_DEPENDS:=		python3 libsquish libressl libxz libfmt rapidjson
+PKG_DEPENDS:=		python3 libsquish libopenssl libfmt rapidjson libpcre
 PKG_DEPENDS+=		libass libmpeg2 libmad libmodplug libcurl libxshmfence
-PKG_DEPENDS+=		libflac libbz2 libtiff libnettle librtmp liblzo
+PKG_DEPENDS+=		libflac libbz2 libtiff libnettle librtmp liblzo libXext
 PKG_DEPENDS+=		yajl tinyxml libsqlite libpcrecpp libncurses libpng
-PKG_DEPENDS+=		libpcre libcdio libfreetype libsamplerate libuuid
-PKG_DEPENDS+=		taglib libjasper libmp3lame libgpg-error giflib
+PKG_DEPENDS+=		libpcre2 libcdio libfreetype libsamplerate libuuid
+PKG_DEPENDS+=		taglib libjasper libmp3lame libgpg-error giflib nghttp2
 PKG_DEPENDS+=		glib libdcadec libffmpeg libxvidcore libiconv harfbuzz
 PKG_DEPENDS+=		flatbuffers fstrcmp spdlog mesa libinput libxkbcommon
 PKG_DEPENDS+=		xkeyboard-config tinyxml2 libdisplay-info libudfread
 PKG_BUILDDEP:=		python3 libass ffmpeg rtmpdump libiconv libudfread
 PKG_BUILDDEP+=		libmpeg2 libmad libjpeg-turbo fmt rapidjson
 PKG_BUILDDEP+=		curl flac bzip2 libtiff yajl cmake-host libdisplay-info
-PKG_BUILDDEP+=		tinyxml tinyxml2 sqlite pcre libcdio freetype libpng
+PKG_BUILDDEP+=		tinyxml tinyxml2 sqlite pcre2 libcdio freetype libpng
 PKG_BUILDDEP+=		libsamplerate taglib libjasper giflib xkeyboard-config
 PKG_BUILDDEP+=		glib libmodplug libgpg-error xvidcore libxshmfence
 PKG_BUILDDEP+=		swig-host liblzo-host libpng-host libjpeg-turbo-host
 PKG_BUILDDEP+=		zip-host unzip-host giflib-host libsquish libdcadec
-PKG_BUILDDEP+=		libcrossguid libressl xz bzip2 liblzo harfbuzz
+PKG_BUILDDEP+=		libcrossguid openssl bzip2 liblzo harfbuzz pcre
 PKG_BUILDDEP+=		flatbuffers fstrcmp spdlog mesa libinput libxkbcommon
 PKG_NEEDS:=		threads c++ data iconv
 PKG_URL:=		http://kodi.tv/
@@ -36,7 +36,7 @@ DISTFILES:=		$(PKG_VERSION)-Omega.tar.gz
 WRKDIST=		${WRKDIR}/xbmc-$(PKG_VERSION)-Omega
 WRKBUILD=               $(WRKDIR)/$(PKG_NAME)-obj
 
-PKG_SYSTEM_DEPENDS:=	raspberry-pi raspberry-pi2 raspberry-pi3 raspberry-pi4 raspberry-pi4-64 rockpi4-plus raspberry-pi5
+PKG_SYSTEM_DEPENDS:=	qemu-x86_64 raspberry-pi raspberry-pi2 raspberry-pi3 raspberry-pi4 raspberry-pi4-64 rockpi4-plus raspberry-pi5
 
 PKG_FLAVOURS_KODI:=	WITH_ALSA WITH_CEC WITH_PULSEAUDIO WITH_SMB
 PKG_FLAVOURS_KODI+=	WITH_MICROHTTPD WITH_SSH WITH_AVAHI
@@ -69,17 +69,18 @@ $(eval $(call PKG_template,KODI,kodi,$(PKG_VERSION)-${PKG_RELEASE},${PKG_DEPENDS
 HOST_CXXFLAGS:=		-DTARGET_POSIX -DTARGET_LINUX -D_LINUX -I$(WRKSRC)/xbmc/linux
 CONFIG_STYLE:=		cmake
 CMAKE_FLAGS+= 		-DENABLE_CCACHE=OFF \
+			-DENABLE_TESTING=OFF \
 			-DCMAKE_BUILD_TYPE=Release \
 			-DVERBOSE=ON \
 			-DENABLE_DVDCSS=ON \
-			-DENABLE_INTERNAL_CROSSGUID=OFF \
 			-DENABLE_INTERNAL_FFMPEG=OFF \
+			-DENABLE_INTERNAL_CROSSGUID=OFF \
 			-DENABLE_INTERNAL_RapidJSON=OFF \
 			-DWITH_FFMPEG=$(STAGING_TARGET_DIR)/usr \
 			-DPYTHON_EXECUTABLE=$(STAGING_HOST_DIR)/usr/bin/python3 \
-			-DPYTHON_INCLUDE_DIRS=$(STAGING_TARGET_DIR)/usr/include/python3.11 \
-			-DPYTHON_PATH=$(STAGING_TARGET_DIR)/usr/lib/python3.11 \
-			-DPYTHON_VER=3.11 \
+			-DPYTHON_INCLUDE_DIRS=$(STAGING_TARGET_DIR)/usr/include/python3.13 \
+			-DPYTHON_PATH=$(STAGING_TARGET_DIR)/usr/lib/python3.13 \
+			-DPYTHON_VER=3.13 \
 			-DKODI_DEPENDSBUILD=OFF \
 			-DENABLE_OPENSSL=ON \
 			-DENABLE_MYSQLCLIENT=OFF \
@@ -99,9 +100,8 @@ CMAKE_FLAGS+= 		-DENABLE_CCACHE=OFF \
 			-DENABLE_PLIST=OFF \
 			-DNATIVEPREFIX=$(STAGING_HOST_DIR)/usr \
 			-DDEPENDS_PATH=$(STAGING_TARGET_DIR)/usr \
-			-DWITH_TEXTUREPACKER=$(STAGING_HOST_DIR)/usr/bin/TexturePacker \
 			-DWITH_JSONSCHEMABUILDER=$(STAGING_HOST_DIR)/usr/bin/JsonSchemaBuilder \
-			-DCMAKE_EXE_LINKER_FLAGS=-latomic \
+			-DCMAKE_EXE_LINKER_FLAGS="-latomic -liconv" \
 			-DLIBDVDCSS_URL=$(DL_DIR)/libdvdcss-1.4.3-Next-Nexus-Alpha2-2.tar.gz \
 			-DLIBDVDNAV_URL=$(DL_DIR)/libdvdnav-6.1.1-Next-Nexus-Alpha2-2.tar.gz \
 			-DLIBDVDREAD_URL=$(DL_DIR)/libdvdread-6.1.3-Next-Nexus-Alpha2-2.tar.gz
@@ -112,10 +112,17 @@ CMAKE_FLAGS+=		-DWITH_ARCH=aarch64 \
 			-DENABLE_NEON=OFF
 endif
 ifeq ($(ADK_TARGET_ARCH_ARM),y)
-			-DWITH_ARCH=arm \
+CMAKE_FLAGS+=		-DWITH_ARCH=arm \
 			-DWITH_CPU=arm \
 			-DENABLE_NEON=ON
 endif
+ifeq ($(ADK_TARGET_ARCH_X86_64),y)
+CMAKE_FLAGS+=		-DWITH_ARCH=x86_64 \
+			-DAPP_RENDER_SYSTEM=gl \
+			-DCORE_PLATFORM_NAME=x11 \
+			-DENABLE_OPENGL=ON \
+			-DENABLE_X11=ON
+endif
 
 ifeq ($(ADK_TARGET_BOARD_BCM28XX),y)
 CMAKE_FLAGS+=		-DCORE_PLATFORM_NAME=gbm \
@@ -162,17 +169,16 @@ CMAKE_FLAGS+=		-DENABLE_SSH=OFF
 endif
 
 XAKE_FLAGS+=		VERBOSE=1
-TARGET_LDFLAGS+=	-latomic -liconv
 
 KODI_LIBDVDCSS_VERSION 	= 1.4.3-Next-Nexus-Alpha2-2
 KODI_LIBDVDNAV_VERSION 	= 6.1.1-Next-Nexus-Alpha2-2
 KODI_LIBDVDREAD_VERSION = 6.1.3-Next-Nexus-Alpha2-2
 
 pre-configure:
-	#(cd $(WRKSRC)/tools/depends/native/JsonSchemaBuilder/src && PATH='$(HOST_PATH)' cmake .)
-	#PATH='$(HOST_PATH)' make -C $(WRKSRC)/tools/depends/native/JsonSchemaBuilder/src
-	#cp $(WRKSRC)/tools/depends/native/JsonSchemaBuilder/src/JsonSchemaBuilder \
-	#	$(STAGING_HOST_DIR)/usr/bin/JsonSchemaBuilder
+	(cd $(WRKSRC)/tools/depends/native/JsonSchemaBuilder/src && PATH='$(HOST_PATH)' cmake .)
+	PATH='$(HOST_PATH)' make -C $(WRKSRC)/tools/depends/native/JsonSchemaBuilder/src
+	cp $(WRKSRC)/tools/depends/native/JsonSchemaBuilder/src/JsonSchemaBuilder \
+		$(STAGING_HOST_DIR)/usr/bin/JsonSchemaBuilder
 	#(cd $(WRKSRC)/tools/depends/native/TexturePacker/src && PATH='$(HOST_PATH)' cmake \
 	#	-DKODI_SOURCE_DIR=$(WRKSRC) \
 	#	-DCMAKE_MODULE_PATH=$(WRKSRC)/cmake/modules \

+ 1 - 1
package/kodi/files/kodi.init

@@ -13,7 +13,7 @@ autostart)
 	;;
 start)
 	if [ ! -d /data/kodi ]; then
-		mkdir /data/kodi
+		mkdir -p /data/kodi
 	fi
 	cd / && /usr/lib/kodi/kodi-gbm &
 	;;

+ 744 - 0
package/kodi/patches/ffmpeg7-debian.patch

@@ -0,0 +1,744 @@
+From 5f731d1c62ebee57c0a545fe255c53b8018ca754 Mon Sep 17 00:00:00 2001
+From: Stephan Sundermann <stephansundermann@gmail.com>
+Date: Thu, 11 Apr 2024 17:11:32 +0200
+Subject: [PATCH 1/7] [ffmpeg] Update to 7.0
+
+---
+ cmake/modules/FindFFMPEG.cmake                |  16 +--
+ tools/buildsteps/windows/ffmpeg_options.txt   |   1 -
+ tools/depends/target/ffmpeg/CMakeLists.txt    |   6 +-
+ tools/depends/target/ffmpeg/FFMPEG-VERSION    |   4 +-
+ xbmc/cdrip/EncoderFFmpeg.cpp                  |   2 +-
+ xbmc/cdrip/EncoderFFmpeg.h                    |   2 +-
+ .../ActiveAE/ActiveAEResampleFFMPEG.cpp       | 110 +++++++++---------
+ .../DVDDemuxers/DVDDemuxFFmpeg.cpp            |  71 +----------
+ 8 files changed, 69 insertions(+), 143 deletions(-)
+
+diff --git a/cmake/modules/FindFFMPEG.cmake b/cmake/modules/FindFFMPEG.cmake
+index 6c6bf973de..6bd05e9f3d 100644
+--- a/cmake/modules/FindFFMPEG.cmake
++++ b/cmake/modules/FindFFMPEG.cmake
+@@ -163,14 +163,14 @@ if(WITH_FFMPEG)
+   set(REQUIRED_FFMPEG_VERSION undef)
+ else()
+   # required ffmpeg library versions
+-  set(REQUIRED_FFMPEG_VERSION 6.0.0)
+-  set(_avcodec_ver ">=60.2.100")
+-  set(_avfilter_ver ">=9.3.100")
+-  set(_avformat_ver ">=60.3.100")
+-  set(_avutil_ver ">=58.2.100")
+-  set(_postproc_ver ">=57.1.100")
+-  set(_swresample_ver ">=4.10.100")
+-  set(_swscale_ver ">=7.1.100")
++  set(REQUIRED_FFMPEG_VERSION 7.0.0)
++  set(_avcodec_ver ">=61.3.100")
++  set(_avfilter_ver ">=10.1.100")
++  set(_avformat_ver ">=61.1.100")
++  set(_avutil_ver ">=59.8.100")
++  set(_postproc_ver ">=58.1.100")
++  set(_swresample_ver ">=5.1.100")
++  set(_swscale_ver ">=8.1.100")
+ endif()
+ 
+ # Allows building with external ffmpeg not found in system paths,
+diff --git a/tools/buildsteps/windows/ffmpeg_options.txt b/tools/buildsteps/windows/ffmpeg_options.txt
+index 5034ff26c4..776c0b4b35 100644
+--- a/tools/buildsteps/windows/ffmpeg_options.txt
++++ b/tools/buildsteps/windows/ffmpeg_options.txt
+@@ -1,5 +1,4 @@
+ --disable-avdevice
+---disable-crystalhd
+ --disable-cuda
+ --disable-cuvid
+ --disable-devices
+diff --git a/tools/depends/target/ffmpeg/FFMPEG-VERSION b/tools/depends/target/ffmpeg/FFMPEG-VERSION
+index f2ba09402e..60b8887de3 100644
+--- a/tools/depends/target/ffmpeg/FFMPEG-VERSION
++++ b/tools/depends/target/ffmpeg/FFMPEG-VERSION
+@@ -1,5 +1,5 @@
+ LIBNAME=ffmpeg
+-VERSION=6.0.1
++VERSION=7.0.1
+ ARCHIVE=$(LIBNAME)-$(VERSION).tar.gz
+-SHA512=945e34840092dc0fd3824eb1af2be79868af2afb4fe13159b19a9bcfc464cc4d53243c13ff065199290e9393ddbf4b1c5c8abccf83a31a31d6c7490e499fd1fc
++SHA512=43b639b0bc0597e95dea2dce3e925f4b71ca8c4d9eadaef614941053e287f2d5c2e78d95413f0f7142da0f6ea1dbf443457e4fa1c2296cd8cf4081c185ed9c04
+ 
+diff --git a/xbmc/cdrip/EncoderFFmpeg.cpp b/xbmc/cdrip/EncoderFFmpeg.cpp
+index 85f5fa412e..907d2591dd 100644
+--- a/xbmc/cdrip/EncoderFFmpeg.cpp
++++ b/xbmc/cdrip/EncoderFFmpeg.cpp
+@@ -235,7 +235,7 @@ void CEncoderFFmpeg::SetTag(const std::string& tag, const std::string& value)
+   av_dict_set(&m_formatCtx->metadata, tag.c_str(), value.c_str(), 0);
+ }
+ 
+-int CEncoderFFmpeg::avio_write_callback(void* opaque, uint8_t* buf, int buf_size)
++int CEncoderFFmpeg::avio_write_callback(void* opaque, const uint8_t* buf, int buf_size)
+ {
+   CEncoderFFmpeg* enc = static_cast<CEncoderFFmpeg*>(opaque);
+   if (enc->Write(buf, buf_size) != buf_size)
+diff --git a/xbmc/cdrip/EncoderFFmpeg.h b/xbmc/cdrip/EncoderFFmpeg.h
+index 48471a4b10..4e9f0f5bbb 100644
+--- a/xbmc/cdrip/EncoderFFmpeg.h
++++ b/xbmc/cdrip/EncoderFFmpeg.h
+@@ -33,7 +33,7 @@ public:
+   bool Close() override;
+ 
+ private:
+-  static int avio_write_callback(void* opaque, uint8_t* buf, int buf_size);
++  static int avio_write_callback(void* opaque, const uint8_t* buf, int buf_size);
+   static int64_t avio_seek_callback(void* opaque, int64_t offset, int whence);
+ 
+   void SetTag(const std::string& tag, const std::string& value);
+diff --git a/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEResampleFFMPEG.cpp b/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEResampleFFMPEG.cpp
+index e897cbd3ea..6fce0af981 100644
+--- a/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEResampleFFMPEG.cpp
++++ b/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEResampleFFMPEG.cpp
+@@ -66,51 +66,7 @@ bool CActiveAEResampleFFMPEG::Init(SampleConfig dstConfig, SampleConfig srcConfi
+   AVChannelLayout dstChLayout = {};
+   AVChannelLayout srcChLayout = {};
+ 
+-  av_channel_layout_from_mask(&dstChLayout, m_dst_chan_layout);
+-  av_channel_layout_from_mask(&srcChLayout, m_src_chan_layout);
+-
+-  int ret = swr_alloc_set_opts2(&m_pContext, &dstChLayout, m_dst_fmt, m_dst_rate, &srcChLayout,
+-                                m_src_fmt, m_src_rate, 0, NULL);
+-
+-  if (ret)
+-  {
+-    CLog::Log(LOGERROR, "CActiveAEResampleFFMPEG::Init - create context failed");
+-    return false;
+-  }
+-
+-  if(quality == AE_QUALITY_HIGH)
+-  {
+-    av_opt_set_double(m_pContext, "cutoff", 1.0, 0);
+-    av_opt_set_int(m_pContext,"filter_size", 256, 0);
+-  }
+-  else if(quality == AE_QUALITY_MID)
+-  {
+-    // 0.97 is default cutoff so use (1.0 - 0.97) / 2.0 + 0.97
+-    av_opt_set_double(m_pContext, "cutoff", 0.985, 0);
+-    av_opt_set_int(m_pContext,"filter_size", 64, 0);
+-  }
+-  else if(quality == AE_QUALITY_LOW)
+-  {
+-    av_opt_set_double(m_pContext, "cutoff", 0.97, 0);
+-    av_opt_set_int(m_pContext,"filter_size", 32, 0);
+-  }
+-
+-  if (m_dst_fmt == AV_SAMPLE_FMT_S32 || m_dst_fmt == AV_SAMPLE_FMT_S32P)
+-  {
+-    av_opt_set_int(m_pContext, "output_sample_bits", m_dst_bits, 0);
+-  }
+-
+-  // tell resampler to clamp float values
+-  // not required for sink stage (remapLayout == true)
+-  if ((m_dst_fmt == AV_SAMPLE_FMT_FLT || m_dst_fmt == AV_SAMPLE_FMT_FLTP) &&
+-      (m_src_fmt == AV_SAMPLE_FMT_FLT || m_src_fmt == AV_SAMPLE_FMT_FLTP) &&
+-      !remapLayout && normalize)
+-  {
+-     av_opt_set_double(m_pContext, "rematrix_maxval", 1.0, 0);
+-  }
+-
+-  av_opt_set_double(m_pContext, "center_mix_level", centerMix, 0);
+-
++  bool hasMatrix = false;
+   if (remapLayout)
+   {
+     // one-to-one mapping of channels
+@@ -120,28 +76,19 @@ bool CActiveAEResampleFFMPEG::Init(SampleConfig dstConfig, SampleConfig srcConfi
+     m_dst_chan_layout = 0;
+     for (unsigned int out=0; out<remapLayout->Count(); out++)
+     {
+-      m_dst_chan_layout += ((uint64_t)1) << out;
++      m_dst_chan_layout += static_cast<uint64_t>(1) << out;
+       int idx = CAEUtil::GetAVChannelIndex((*remapLayout)[out], m_src_chan_layout);
+       if (idx >= 0)
+       {
+         m_rematrix[out][idx] = 1.0;
+       }
+     }
+-
+-    av_opt_set_int(m_pContext, "out_channel_count", m_dst_channels, 0);
+-    av_opt_set_int(m_pContext, "out_channel_layout", m_dst_chan_layout, 0);
+-
+-    if (swr_set_matrix(m_pContext, (const double*)m_rematrix, AE_CH_MAX) < 0)
+-    {
+-      CLog::Log(LOGERROR, "CActiveAEResampleFFMPEG::Init - setting channel matrix failed");
+-      return false;
+-    }
++    hasMatrix = true;
+   }
+   // stereo upmix
+   else if (upmix && m_src_channels == 2 && m_dst_channels > 2)
+   {
+     memset(m_rematrix, 0, sizeof(m_rematrix));
+-    av_channel_layout_uninit(&dstChLayout);
+     av_channel_layout_from_mask(&dstChLayout, m_dst_chan_layout);
+     for (int out=0; out<m_dst_channels; out++)
+     {
+@@ -171,15 +118,64 @@ bool CActiveAEResampleFFMPEG::Init(SampleConfig dstConfig, SampleConfig srcConfi
+       }
+     }
+ 
++    hasMatrix = true;
+     av_channel_layout_uninit(&dstChLayout);
++  }
++
++  av_channel_layout_from_mask(&dstChLayout, m_dst_chan_layout);
++  av_channel_layout_from_mask(&srcChLayout, m_src_chan_layout);
++
++  int ret = swr_alloc_set_opts2(&m_pContext, &dstChLayout, m_dst_fmt, m_dst_rate, &srcChLayout,
++                                m_src_fmt, m_src_rate, 0, NULL);
++
++  if (ret)
++  {
++    CLog::Log(LOGERROR, "CActiveAEResampleFFMPEG::Init - create context failed");
++    return false;
++  }
+ 
+-    if (swr_set_matrix(m_pContext, (const double*)m_rematrix, AE_CH_MAX) < 0)
++  if (hasMatrix)
++  {
++    if (swr_set_matrix(m_pContext, reinterpret_cast<const double*>(m_rematrix), AE_CH_MAX) < 0)
+     {
+       CLog::Log(LOGERROR, "CActiveAEResampleFFMPEG::Init - setting channel matrix failed");
+       return false;
+     }
+   }
+ 
++  if (quality == AE_QUALITY_HIGH)
++  {
++    av_opt_set_double(m_pContext, "cutoff", 1.0, 0);
++    av_opt_set_int(m_pContext, "filter_size", 256, 0);
++  }
++  else if (quality == AE_QUALITY_MID)
++  {
++    // 0.97 is default cutoff so use (1.0 - 0.97) / 2.0 + 0.97
++    av_opt_set_double(m_pContext, "cutoff", 0.985, 0);
++    av_opt_set_int(m_pContext, "filter_size", 64, 0);
++  }
++  else if (quality == AE_QUALITY_LOW)
++  {
++    av_opt_set_double(m_pContext, "cutoff", 0.97, 0);
++    av_opt_set_int(m_pContext, "filter_size", 32, 0);
++  }
++
++  if (m_dst_fmt == AV_SAMPLE_FMT_S32 || m_dst_fmt == AV_SAMPLE_FMT_S32P)
++  {
++    av_opt_set_int(m_pContext, "output_sample_bits", m_dst_bits, 0);
++  }
++
++  // tell resampler to clamp float values
++  // not required for sink stage (remapLayout == true)
++  if ((m_dst_fmt == AV_SAMPLE_FMT_FLT || m_dst_fmt == AV_SAMPLE_FMT_FLTP) &&
++      (m_src_fmt == AV_SAMPLE_FMT_FLT || m_src_fmt == AV_SAMPLE_FMT_FLTP) && !remapLayout &&
++      normalize)
++  {
++    av_opt_set_double(m_pContext, "rematrix_maxval", 1.0, 0);
++  }
++
++  av_opt_set_double(m_pContext, "center_mix_level", centerMix, 0);
++
+   if(swr_init(m_pContext) < 0)
+   {
+     CLog::Log(LOGERROR, "CActiveAEResampleFFMPEG::Init - init resampler failed");
+diff --git a/xbmc/cores/VideoPlayer/DVDDemuxers/DVDDemuxFFmpeg.cpp b/xbmc/cores/VideoPlayer/DVDDemuxers/DVDDemuxFFmpeg.cpp
+index 1aebc3dcbc..174df53f16 100644
+--- a/xbmc/cores/VideoPlayer/DVDDemuxers/DVDDemuxFFmpeg.cpp
++++ b/xbmc/cores/VideoPlayer/DVDDemuxers/DVDDemuxFFmpeg.cpp
+@@ -376,74 +376,7 @@ bool CDVDDemuxFFmpeg::Open(const std::shared_ptr<CDVDInputStream>& pInput, bool
+     if (iformat == nullptr)
+     {
+       // let ffmpeg decide which demuxer we have to open
+-      bool trySPDIFonly = (m_pInput->GetContent() == "audio/x-spdif-compressed");
+-
+-      if (!trySPDIFonly)
+-        av_probe_input_buffer(m_ioContext, &iformat, strFile.c_str(), NULL, 0, 0);
+-
+-      // Use the more low-level code in case we have been built against an old
+-      // FFmpeg without the above av_probe_input_buffer(), or in case we only
+-      // want to probe for spdif (DTS or IEC 61937) compressed audio
+-      // specifically, or in case the file is a wav which may contain DTS or
+-      // IEC 61937 (e.g. ac3-in-wav) and we want to check for those formats.
+-      if (trySPDIFonly || (iformat && strcmp(iformat->name, "wav") == 0))
+-      {
+-        AVProbeData pd;
+-        int probeBufferSize = 32768;
+-        std::unique_ptr<uint8_t[]> probe_buffer (new uint8_t[probeBufferSize + AVPROBE_PADDING_SIZE]);
+-
+-        // init probe data
+-        pd.buf = probe_buffer.get();
+-        pd.filename = strFile.c_str();
+-
+-        // read data using avformat's buffers
+-        pd.buf_size = avio_read(m_ioContext, pd.buf, probeBufferSize);
+-        if (pd.buf_size <= 0)
+-        {
+-          CLog::Log(LOGERROR, "{} - error reading from input stream, {}", __FUNCTION__,
+-                    CURL::GetRedacted(strFile));
+-          return false;
+-        }
+-        memset(pd.buf + pd.buf_size, 0, AVPROBE_PADDING_SIZE);
+-
+-        // restore position again
+-        avio_seek(m_ioContext , 0, SEEK_SET);
+-
+-        // the advancedsetting is for allowing the user to force outputting the
+-        // 44.1 kHz DTS wav file as PCM, so that an A/V receiver can decode
+-        // it (this is temporary until we handle 44.1 kHz passthrough properly)
+-        if (trySPDIFonly || (iformat && strcmp(iformat->name, "wav") == 0 && !CServiceBroker::GetSettingsComponent()->GetAdvancedSettings()->m_VideoPlayerIgnoreDTSinWAV))
+-        {
+-          // check for spdif and dts
+-          // This is used with wav files and audio CDs that may contain
+-          // a DTS or AC3 track padded for S/PDIF playback. If neither of those
+-          // is present, we assume it is PCM audio.
+-          // AC3 is always wrapped in iec61937 (ffmpeg "spdif"), while DTS
+-          // may be just padded.
+-          const AVInputFormat* iformat2 = av_find_input_format("spdif");
+-          if (iformat2 && iformat2->read_probe(&pd) > AVPROBE_SCORE_MAX / 4)
+-          {
+-            iformat = iformat2;
+-          }
+-          else
+-          {
+-            // not spdif or no spdif demuxer, try dts
+-            iformat2 = av_find_input_format("dts");
+-
+-            if (iformat2 && iformat2->read_probe(&pd) > AVPROBE_SCORE_MAX / 4)
+-            {
+-              iformat = iformat2;
+-            }
+-            else if (trySPDIFonly)
+-            {
+-              // not dts either, return false in case we were explicitly
+-              // requested to only check for S/PDIF padded compressed audio
+-              CLog::Log(LOGDEBUG, "{} - not spdif or dts file, falling back", __FUNCTION__);
+-              return false;
+-            }
+-          }
+-        }
+-      }
++      av_probe_input_buffer(m_ioContext, &iformat, strFile.c_str(), NULL, 0, 0);
+ 
+       if (!iformat)
+       {
+@@ -1353,7 +1286,7 @@ bool CDVDDemuxFFmpeg::SeekTime(double time, bool backwards, double* startpts)
+ 
+     if (ret >= 0)
+     {
+-      if (m_pFormatContext->iformat->read_seek)
++      if (!(m_pFormatContext->iformat->flags & AVFMT_NOTIMESTAMPS))
+         m_seekToKeyFrame = true;
+       m_currentPts = DVD_NOPTS_VALUE;
+     }
+-- 
+2.43.0
+
+
+From 17ce23505f171235ac6bfff7fbaa3a5b4bc9a8bf Mon Sep 17 00:00:00 2001
+From: Stephan Sundermann <stephansundermann@gmail.com>
+Date: Thu, 11 Apr 2024 17:13:36 +0200
+Subject: [PATCH 2/7] [ffmpeg] Remove deprecated use of FF_API_INTERLACED_FRAME
+
+---
+ .../DVDCodecs/Video/DVDVideoCodecDRMPRIME.cpp            | 5 +++--
+ .../VideoPlayer/DVDCodecs/Video/DVDVideoCodecFFmpeg.cpp  | 9 +++++----
+ xbmc/cores/VideoPlayer/DVDCodecs/Video/VAAPI.cpp         | 6 ++++--
+ xbmc/cores/VideoPlayer/DVDCodecs/Video/VTB.cpp           | 2 +-
+ 4 files changed, 13 insertions(+), 9 deletions(-)
+
+diff --git a/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecDRMPRIME.cpp b/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecDRMPRIME.cpp
+index eb2943bb8c..4da0722d5c 100644
+--- a/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecDRMPRIME.cpp
++++ b/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecDRMPRIME.cpp
+@@ -582,8 +582,9 @@ void CDVDVideoCodecDRMPRIME::SetPictureParams(VideoPicture* pVideoPicture)
+ 
+   pVideoPicture->iRepeatPicture = 0;
+   pVideoPicture->iFlags = 0;
+-  pVideoPicture->iFlags |= m_pFrame->interlaced_frame ? DVP_FLAG_INTERLACED : 0;
+-  pVideoPicture->iFlags |= m_pFrame->top_field_first ? DVP_FLAG_TOP_FIELD_FIRST : 0;
++  pVideoPicture->iFlags |= m_pFrame->flags & AV_FRAME_FLAG_INTERLACED ? DVP_FLAG_INTERLACED : 0;
++  pVideoPicture->iFlags |=
++      m_pFrame->flags & AV_FRAME_FLAG_TOP_FIELD_FIRST ? DVP_FLAG_TOP_FIELD_FIRST : 0;
+   pVideoPicture->iFlags |= m_pFrame->data[0] ? 0 : DVP_FLAG_DROPPED;
+ 
+   if (m_codecControlFlags & DVD_CODEC_CTRL_DROP)
+diff --git a/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecFFmpeg.cpp b/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecFFmpeg.cpp
+index d66378fa07..9586d211e9 100644
+--- a/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecFFmpeg.cpp
++++ b/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecFFmpeg.cpp
+@@ -792,12 +792,12 @@ CDVDVideoCodec::VCReturn CDVDVideoCodecFFmpeg::GetPicture(VideoPicture* pVideoPi
+   }
+   m_dropCtrl.Process(framePTS, m_pCodecContext->skip_frame > AVDISCARD_DEFAULT);
+ 
+-  if (m_pDecodedFrame->key_frame)
++  if (m_pDecodedFrame->flags & AV_FRAME_FLAG_KEY)
+   {
+     m_started = true;
+     m_iLastKeyframe = m_pCodecContext->has_b_frames + 2;
+   }
+-  if (m_pDecodedFrame->interlaced_frame)
++  if (m_pDecodedFrame->flags & AV_FRAME_FLAG_INTERLACED)
+     m_interlaced = true;
+   else
+     m_interlaced = false;
+@@ -1013,8 +1013,9 @@ bool CDVDVideoCodecFFmpeg::GetPictureCommon(VideoPicture* pVideoPicture)
+ 
+   pVideoPicture->iRepeatPicture = 0.5 * m_pFrame->repeat_pict;
+   pVideoPicture->iFlags = 0;
+-  pVideoPicture->iFlags |= m_pFrame->interlaced_frame ? DVP_FLAG_INTERLACED : 0;
+-  pVideoPicture->iFlags |= m_pFrame->top_field_first ? DVP_FLAG_TOP_FIELD_FIRST: 0;
++  pVideoPicture->iFlags |= m_pFrame->flags & AV_FRAME_FLAG_INTERLACED ? DVP_FLAG_INTERLACED : 0;
++  pVideoPicture->iFlags |=
++      m_pFrame->flags & AV_FRAME_FLAG_TOP_FIELD_FIRST ? DVP_FLAG_TOP_FIELD_FIRST : 0;
+ 
+   if (m_codecControlFlags & DVD_CODEC_CTRL_DROP)
+   {
+diff --git a/xbmc/cores/VideoPlayer/DVDCodecs/Video/VAAPI.cpp b/xbmc/cores/VideoPlayer/DVDCodecs/Video/VAAPI.cpp
+index fb7606e0d0..a62fa6273d 100644
+--- a/xbmc/cores/VideoPlayer/DVDCodecs/Video/VAAPI.cpp
++++ b/xbmc/cores/VideoPlayer/DVDCodecs/Video/VAAPI.cpp
+@@ -3068,8 +3068,10 @@ bool CFFmpegPostproc::AddPicture(CVaapiDecodedPicture &inPic)
+   m_pFilterFrameIn->height = m_config.vidHeight;
+   m_pFilterFrameIn->linesize[0] = image.pitches[0];
+   m_pFilterFrameIn->linesize[1] = image.pitches[1];
+-  m_pFilterFrameIn->interlaced_frame = (inPic.DVDPic.iFlags & DVP_FLAG_INTERLACED) ? 1 : 0;
+-  m_pFilterFrameIn->top_field_first = (inPic.DVDPic.iFlags & DVP_FLAG_TOP_FIELD_FIRST) ? 1 : 0;
++  if (inPic.DVDPic.iFlags & DVP_FLAG_INTERLACED)
++    m_pFilterFrameIn->flags |= AV_FRAME_FLAG_INTERLACED;
++  if (inPic.DVDPic.iFlags & DVP_FLAG_TOP_FIELD_FIRST)
++    m_pFilterFrameIn->flags |= AV_FRAME_FLAG_TOP_FIELD_FIRST;
+ 
+   if (inPic.DVDPic.pts == DVD_NOPTS_VALUE)
+     m_pFilterFrameIn->pts = AV_NOPTS_VALUE;
+diff --git a/xbmc/cores/VideoPlayer/DVDCodecs/Video/VTB.cpp b/xbmc/cores/VideoPlayer/DVDCodecs/Video/VTB.cpp
+index 1f71f643d2..567d63559d 100644
+--- a/xbmc/cores/VideoPlayer/DVDCodecs/Video/VTB.cpp
++++ b/xbmc/cores/VideoPlayer/DVDCodecs/Video/VTB.cpp
+@@ -196,7 +196,7 @@ CDVDVideoCodec::VCReturn CDecoder::Decode(AVCodecContext* avctx, AVFrame* frame)
+ 
+   if(frame)
+   {
+-    if (frame->interlaced_frame)
++    if (frame->flags & AV_FRAME_FLAG_INTERLACED)
+       return CDVDVideoCodec::VC_FATAL;
+ 
+     if (m_renderBuffer)
+-- 
+2.43.0
+
+
+From 01aa01d5c096ff7554c79493eab65dd41b00402f Mon Sep 17 00:00:00 2001
+From: Stephan Sundermann <stephansundermann@gmail.com>
+Date: Thu, 11 Apr 2024 17:14:48 +0200
+Subject: [PATCH 3/7] [ffmpeg] Remove deprecated use of avcodec_close
+
+---
+ xbmc/cores/VideoPlayer/DVDDemuxers/DVDDemuxClient.cpp | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/xbmc/cores/VideoPlayer/DVDDemuxers/DVDDemuxClient.cpp b/xbmc/cores/VideoPlayer/DVDDemuxers/DVDDemuxClient.cpp
+index 0cdf8c3864..477a2e82ec 100644
+--- a/xbmc/cores/VideoPlayer/DVDDemuxers/DVDDemuxClient.cpp
++++ b/xbmc/cores/VideoPlayer/DVDDemuxers/DVDDemuxClient.cpp
+@@ -188,7 +188,6 @@ bool CDVDDemuxClient::ParsePacket(DemuxPacket* pkt)
+       if (!avcodec_open2(stream->m_context, stream->m_context->codec, nullptr))
+       {
+         avcodec_send_packet(stream->m_context, avpkt);
+-        avcodec_close(stream->m_context);
+       }
+     }
+     av_packet_free(&avpkt);
+-- 
+2.43.0
+
+
+From b509d439c18bebcf35cc80d18a0997caf6eda8a6 Mon Sep 17 00:00:00 2001
+From: Stephan Sundermann <stephansundermann@gmail.com>
+Date: Thu, 11 Apr 2024 17:15:16 +0200
+Subject: [PATCH 4/7] [ffmpeg] Remove deprecated use av_stream_get_side_data
+
+---
+ .../DVDDemuxers/DVDDemuxFFmpeg.cpp            | 53 +++++++++++--------
+ 1 file changed, 32 insertions(+), 21 deletions(-)
+
+diff --git a/xbmc/cores/VideoPlayer/DVDDemuxers/DVDDemuxFFmpeg.cpp b/xbmc/cores/VideoPlayer/DVDDemuxers/DVDDemuxFFmpeg.cpp
+index 174df53f16..f917bf719f 100644
+--- a/xbmc/cores/VideoPlayer/DVDDemuxers/DVDDemuxFFmpeg.cpp
++++ b/xbmc/cores/VideoPlayer/DVDDemuxers/DVDDemuxFFmpeg.cpp
+@@ -1630,42 +1630,49 @@ CDemuxStream* CDVDDemuxFFmpeg::AddStream(int streamIdx)
+         st->colorRange = pStream->codecpar->color_range;
+         st->hdr_type = DetermineHdrType(pStream);
+ 
+-        // https://github.com/FFmpeg/FFmpeg/blob/release/5.0/doc/APIchanges
+-        size_t size = 0;
+-        uint8_t* side_data = nullptr;
++        // https://github.com/FFmpeg/FFmpeg/blob/release/7.0/doc/APIchanges
++        const AVPacketSideData* sideData = nullptr;
+ 
+         if (st->hdr_type == StreamHdrType::HDR_TYPE_DOLBYVISION)
+         {
+-          side_data = av_stream_get_side_data(pStream, AV_PKT_DATA_DOVI_CONF, &size);
+-          if (side_data && size)
++
++          sideData =
++              av_packet_side_data_get(pStream->codecpar->coded_side_data,
++                                      pStream->codecpar->nb_coded_side_data, AV_PKT_DATA_DOVI_CONF);
++          if (sideData && sideData->size)
+           {
+-            st->dovi = *reinterpret_cast<AVDOVIDecoderConfigurationRecord*>(side_data);
++            st->dovi = *reinterpret_cast<const AVDOVIDecoderConfigurationRecord*>(sideData->data);
+           }
+         }
+ 
+-        side_data = av_stream_get_side_data(pStream, AV_PKT_DATA_MASTERING_DISPLAY_METADATA, &size);
+-        if (side_data && size)
++        sideData = av_packet_side_data_get(pStream->codecpar->coded_side_data,
++                                           pStream->codecpar->nb_coded_side_data,
++                                           AV_PKT_DATA_MASTERING_DISPLAY_METADATA);
++        if (sideData && sideData->size)
+         {
+           st->masteringMetaData = std::make_shared<AVMasteringDisplayMetadata>(
+-              *reinterpret_cast<AVMasteringDisplayMetadata*>(side_data));
++              *reinterpret_cast<const AVMasteringDisplayMetadata*>(sideData->data));
+         }
+ 
+-        side_data = av_stream_get_side_data(pStream, AV_PKT_DATA_CONTENT_LIGHT_LEVEL, &size);
+-        if (side_data && size)
++        sideData = av_packet_side_data_get(pStream->codecpar->coded_side_data,
++                                           pStream->codecpar->nb_coded_side_data,
++                                           AV_PKT_DATA_CONTENT_LIGHT_LEVEL);
++        if (sideData && sideData->size)
+         {
+           st->contentLightMetaData = std::make_shared<AVContentLightMetadata>(
+-              *reinterpret_cast<AVContentLightMetadata*>(side_data));
++              *reinterpret_cast<const AVContentLightMetadata*>(sideData->data));
+         }
+ 
+-        uint8_t* displayMatrixSideData =
+-            av_stream_get_side_data(pStream, AV_PKT_DATA_DISPLAYMATRIX, nullptr);
+-        if (displayMatrixSideData)
++        sideData = av_packet_side_data_get(pStream->codecpar->coded_side_data,
++                                           pStream->codecpar->nb_coded_side_data,
++                                           AV_PKT_DATA_DISPLAYMATRIX);
++        if (sideData)
+         {
+-          const double tetha =
+-              av_display_rotation_get(reinterpret_cast<int32_t*>(displayMatrixSideData));
+-          if (!std::isnan(tetha))
++          const double theta =
++              av_display_rotation_get(reinterpret_cast<const int32_t*>(sideData->data));
++          if (!std::isnan(theta))
+           {
+-            st->iOrientation = ((static_cast<int>(-tetha) % 360) + 360) % 360;
++            st->iOrientation = ((static_cast<int>(-theta) % 360) + 360) % 360;
+           }
+         }
+ 
+@@ -2488,7 +2495,9 @@ StreamHdrType CDVDDemuxFFmpeg::DetermineHdrType(AVStream* pStream)
+ {
+   StreamHdrType hdrType = StreamHdrType::HDR_TYPE_NONE;
+ 
+-  if (av_stream_get_side_data(pStream, AV_PKT_DATA_DOVI_CONF, nullptr)) // DoVi
++  if (av_packet_side_data_get(pStream->codecpar->coded_side_data,
++                              pStream->codecpar->nb_coded_side_data,
++                              AV_PKT_DATA_DOVI_CONF)) // DoVi
+     hdrType = StreamHdrType::HDR_TYPE_DOLBYVISION;
+   else if (pStream->codecpar->color_trc == AVCOL_TRC_SMPTE2084) // HDR10
+     hdrType = StreamHdrType::HDR_TYPE_HDR10;
+@@ -2496,7 +2505,9 @@ StreamHdrType CDVDDemuxFFmpeg::DetermineHdrType(AVStream* pStream)
+     hdrType = StreamHdrType::HDR_TYPE_HLG;
+   // file could be SMPTE2086 which FFmpeg currently returns as unknown
+   // so use the presence of static metadata to detect it
+-  else if (av_stream_get_side_data(pStream, AV_PKT_DATA_MASTERING_DISPLAY_METADATA, nullptr))
++  else if (av_packet_side_data_get(pStream->codecpar->coded_side_data,
++                                   pStream->codecpar->nb_coded_side_data,
++                                   AV_PKT_DATA_MASTERING_DISPLAY_METADATA))
+     hdrType = StreamHdrType::HDR_TYPE_HDR10;
+ 
+   return hdrType;
+-- 
+2.43.0
+
+
+From 5e7609bfee5e0559d6c29b01fbc4294d27168921 Mon Sep 17 00:00:00 2001
+From: Stephan Sundermann <stephansundermann@gmail.com>
+Date: Thu, 11 Apr 2024 17:15:43 +0200
+Subject: [PATCH 5/7] [ffmpeg] Remove CrystalHD hw acceleration strings
+
+---
+ addons/resource.language.en_gb/resources/strings.po | 11 ++---------
+ 1 file changed, 2 insertions(+), 9 deletions(-)
+
+diff --git a/addons/resource.language.en_gb/resources/strings.po b/addons/resource.language.en_gb/resources/strings.po
+index 056b1747a0..292aae4a1b 100644
+--- a/addons/resource.language.en_gb/resources/strings.po
++++ b/addons/resource.language.en_gb/resources/strings.po
+@@ -7342,10 +7342,7 @@ msgctxt "#13427"
+ msgid "Allow hardware acceleration - DXVA2"
+ msgstr ""
+ 
+-#: system/settings/settings.xml
+-msgctxt "#13428"
+-msgid "Allow hardware acceleration - CrystalHD"
+-msgstr ""
++#empty string with id 13428
+ 
+ #: system/settings/settings.xml
+ msgctxt "#13429"
+@@ -19502,11 +19499,7 @@ msgctxt "#36158"
+ msgid "Enable DXVA2 hardware decoding of video files."
+ msgstr ""
+ 
+-#. Description of setting with label #13428 "Allow hardware acceleration (CrystalHD)"
+-#: system/settings/settings.xml
+-msgctxt "#36159"
+-msgid "Enable CrystalHD decoding of video files."
+-msgstr ""
++#empty string with id 36159
+ 
+ #. Description of setting with label #13429 "Allow hardware acceleration (VDADecoder)"
+ #: system/settings/settings.xml
+-- 
+2.43.0
+
+
+From 813a40bb30285b1b32a7ab6e63953eb3665f051a Mon Sep 17 00:00:00 2001
+From: Stephan Sundermann <stephansundermann@gmail.com>
+Date: Sat, 13 Apr 2024 10:31:36 +0200
+Subject: [PATCH 6/7] [settings] Remove VideoPlayerignoredtsinwav advanced
+ setting
+
+---
+ xbmc/settings/AdvancedSettings.cpp | 2 --
+ xbmc/settings/AdvancedSettings.h   | 1 -
+ 2 files changed, 3 deletions(-)
+
+diff --git a/xbmc/settings/AdvancedSettings.cpp b/xbmc/settings/AdvancedSettings.cpp
+index cc06244799..4e2d6badd6 100644
+--- a/xbmc/settings/AdvancedSettings.cpp
++++ b/xbmc/settings/AdvancedSettings.cpp
+@@ -129,7 +129,6 @@ void CAdvancedSettings::Initialize()
+     return;
+ 
+   m_audioApplyDrc = -1.0f;
+-  m_VideoPlayerIgnoreDTSinWAV = false;
+ 
+   //default hold time of 25 ms, this allows a 20 hertz sine to pass undistorted
+   m_limiterHold = 0.025f;
+@@ -579,7 +578,6 @@ void CAdvancedSettings::ParseSettingsFile(const std::string &file)
+       GetCustomRegexps(pAudioExcludes, m_audioExcludeFromScanRegExps);
+ 
+     XMLUtils::GetFloat(pElement, "applydrc", m_audioApplyDrc);
+-    XMLUtils::GetBoolean(pElement, "VideoPlayerignoredtsinwav", m_VideoPlayerIgnoreDTSinWAV);
+ 
+     XMLUtils::GetFloat(pElement, "limiterhold", m_limiterHold, 0.0f, 100.0f);
+     XMLUtils::GetFloat(pElement, "limiterrelease", m_limiterRelease, 0.001f, 100.0f);
+diff --git a/xbmc/settings/AdvancedSettings.h b/xbmc/settings/AdvancedSettings.h
+index 3351caff55..8eabfe8240 100644
+--- a/xbmc/settings/AdvancedSettings.h
++++ b/xbmc/settings/AdvancedSettings.h
+@@ -120,7 +120,6 @@ class CAdvancedSettings : public ISettingCallback, public ISettingsHandler
+ 
+     std::string m_audioDefaultPlayer;
+     float m_audioPlayCountMinimumPercent;
+-    bool m_VideoPlayerIgnoreDTSinWAV;
+     float m_limiterHold;
+     float m_limiterRelease;
+ 
+-- 
+2.43.0
+
+
+From 03449b80c2e00a56912b9612afc11f3d53dd4a05 Mon Sep 17 00:00:00 2001
+From: Stephan Sundermann <stephansundermann@gmail.com>
+Date: Sat, 13 Apr 2024 13:07:58 +0200
+Subject: [PATCH 7/7] [ffmpeg] Use new audio DTS and ATMOS profiles
+
+---
+ .../VideoPlayer/DVDDemuxers/DVDDemux.cpp      | 20 +++++++++++++------
+ .../DVDInputStreams/InputStreamAddon.cpp      |  9 +++------
+ 2 files changed, 17 insertions(+), 12 deletions(-)
+
+diff --git a/xbmc/cores/VideoPlayer/DVDDemuxers/DVDDemux.cpp b/xbmc/cores/VideoPlayer/DVDDemuxers/DVDDemux.cpp
+index 63fb9264a8..e9aa468dd0 100644
+--- a/xbmc/cores/VideoPlayer/DVDDemuxers/DVDDemux.cpp
++++ b/xbmc/cores/VideoPlayer/DVDDemuxers/DVDDemux.cpp
+@@ -15,15 +15,15 @@ std::string CDemuxStreamAudio::GetStreamType()
+   std::string strInfo;
+   switch (codec)
+   {
+-    //! @todo: With ffmpeg >= 6.1 add new AC4 codec
+     case AV_CODEC_ID_AC3:
+       strInfo = "AC3 ";
+       break;
++    case AV_CODEC_ID_AC4:
++      strInfo = "AC4 ";
++      break;
+     case AV_CODEC_ID_EAC3:
+     {
+-      //! @todo: With ffmpeg >= 6.1 add new atmos profile case
+-      // "JOC" its EAC3 Atmos underlying profile, there is no standard codec name string
+-      if (StringUtils::Contains(codecName, "JOC"))
++      if (profile == FF_PROFILE_EAC3_DDP_ATMOS)
+         strInfo = "DD+ ATMOS ";
+       else
+         strInfo = "DD+ ";
+@@ -31,7 +31,6 @@ std::string CDemuxStreamAudio::GetStreamType()
+     }
+     case AV_CODEC_ID_DTS:
+     {
+-      //! @todo: With ffmpeg >= 6.1 add new DTSX profile cases
+       switch (profile)
+       {
+         case FF_PROFILE_DTS_96_24:
+@@ -49,6 +48,12 @@ std::string CDemuxStreamAudio::GetStreamType()
+         case FF_PROFILE_DTS_HD_HRA:
+           strInfo = "DTS-HD HRA ";
+           break;
++        case FF_PROFILE_DTS_HD_MA_X:
++          strInfo = "DTS-HD MA X ";
++          break;
++        case FF_PROFILE_DTS_HD_MA_X_IMAX:
++          strInfo = "DTS-HD MA X (IMAX) ";
++          break;
+         default:
+           strInfo = "DTS ";
+           break;
+@@ -62,7 +67,10 @@ std::string CDemuxStreamAudio::GetStreamType()
+       strInfo = "MP3 ";
+       break;
+     case AV_CODEC_ID_TRUEHD:
+-      strInfo = "TrueHD ";
++      if (profile == FF_PROFILE_TRUEHD_ATMOS)
++        strInfo = "TrueHD ATMOS ";
++      else
++        strInfo = "TrueHD ";
+       break;
+     case AV_CODEC_ID_AAC:
+     {
+diff --git a/xbmc/cores/VideoPlayer/DVDInputStreams/InputStreamAddon.cpp b/xbmc/cores/VideoPlayer/DVDInputStreams/InputStreamAddon.cpp
+index daf66ce0cd..902f38ade2 100644
+--- a/xbmc/cores/VideoPlayer/DVDInputStreams/InputStreamAddon.cpp
++++ b/xbmc/cores/VideoPlayer/DVDInputStreams/InputStreamAddon.cpp
+@@ -762,14 +762,11 @@ int CInputStreamAddon::ConvertAudioCodecProfile(STREAMCODEC_PROFILE profile)
+     case DTSCodecProfileHDExpress:
+       return FF_PROFILE_DTS_EXPRESS;
+     case DTSCodecProfileHDMAX:
+-      //! @todo: with ffmpeg >= 6.1 set the appropriate profile
+-      return FF_PROFILE_UNKNOWN; // FF_PROFILE_DTS_HD_MA_X
++      return FF_PROFILE_DTS_HD_MA_X;
+     case DTSCodecProfileHDMAIMAX:
+-      //! @todo: with ffmpeg >= 6.1 set the appropriate profile
+-      return FF_PROFILE_UNKNOWN; // FF_PROFILE_DTS_HD_MA_X_IMAX
++      return FF_PROFILE_DTS_HD_MA_X_IMAX;
+     case DDPlusCodecProfileAtmos:
+-      //! @todo: with ffmpeg >= 6.1 set the appropriate profile
+-      return FF_PROFILE_UNKNOWN; // FF_PROFILE_EAC3_DDP_ATMOS
++      return FF_PROFILE_EAC3_DDP_ATMOS;
+     default:
+       return FF_PROFILE_UNKNOWN;
+   }
+
+

+ 49 - 0
package/pcre/Makefile

@@ -0,0 +1,49 @@
+# This file is part of the OpenADK project. OpenADK is copyrighted
+# material, please see the LICENCE file in the top-level directory.
+
+include ${ADK_TOPDIR}/rules.mk
+
+PKG_NAME:=		pcre
+PKG_VERSION:=		8.45
+PKG_RELEASE:=		1
+PKG_HASH:=		4e6ce03e0336e8b4a3d6c2b70b1c5e18590a5673a98186da90d4f33c23defc09
+PKG_DESCR:=		perl compatible regular expression library
+PKG_SECTION:=		libs/misc
+PKG_URL:=		http://www.pcre.org/
+PKG_SITES:=		${MASTER_SITE_SOURCEFORGE:=pcre/}
+PKG_LIBNAME:=		libpcre
+PKG_OPTS:=		dev
+
+DISTFILES:=		${PKG_NAME}-${PKG_VERSION}.tar.gz
+
+PKG_SUBPKGS:=		LIBPCRE LIBPCRECPP
+PKGSD_LIBPCRECPP:=	pcre c++ library
+
+include ${ADK_TOPDIR}/mk/host.mk
+include ${ADK_TOPDIR}/mk/package.mk
+
+$(eval $(call HOST_template,PCRE,pcre,${PKG_VERSION}-${PKG_RELEASE}))
+$(eval $(call PKG_template,LIBPCRE,libpcre,${PKG_VERSION}-${PKG_RELEASE},${PKG_DEPENDS},${PKG_DESCR},${PKG_SECTION},${PKG_OPTS}))
+$(eval $(call PKG_template,LIBPCRECPP,libpcrecpp,${PKG_VERSION}-${PKG_RELEASE},${PKG_DEPENDS},${PKGSD_LIBPCRECPP},${PKG_SECTION}))
+
+CONFIGURE_ARGS+=	--enable-utf \
+			--enable-unicode-properties
+XAKE_FLAGS+=		${TARGET_CONFIGURE_OPTS}
+
+ifeq ($(ADK_PACKAGE_LIBPCRECPP),y)
+CONFIGURE_ARGS+=	--enable-cpp
+else
+CONFIGURE_ARGS+=	--disable-cpp
+endif
+
+libpcre-install:
+	${INSTALL_DIR} ${IDIR_LIBPCRE}/usr/lib
+	${CP} ${WRKINST}/usr/lib/libpcre{,posix}.so* ${IDIR_LIBPCRE}/usr/lib
+
+libpcrecpp-install:
+	${INSTALL_DIR} ${IDIR_LIBPCRECPP}/usr/lib
+	${CP} ${WRKINST}/usr/lib/libpcrecpp.so* ${IDIR_LIBPCRECPP}/usr/lib
+
+include ${ADK_TOPDIR}/mk/host-bottom.mk
+include ${ADK_TOPDIR}/mk/pkg-bottom.mk
+