diff options
-rw-r--r-- | package/kodi/Makefile | 48 | ||||
-rw-r--r-- | package/kodi/files/kodi.init | 2 | ||||
-rw-r--r-- | package/kodi/patches/ffmpeg7-debian.patch | 744 | ||||
-rw-r--r-- | package/pcre/Makefile | 49 |
4 files changed, 821 insertions, 22 deletions
diff --git a/package/kodi/Makefile b/package/kodi/Makefile index 9fb6deccb..534269dc8 100644 --- a/package/kodi/Makefile +++ b/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 \ diff --git a/package/kodi/files/kodi.init b/package/kodi/files/kodi.init index c3dfdf893..fc53d4486 100644 --- a/package/kodi/files/kodi.init +++ b/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 & ;; diff --git a/package/kodi/patches/ffmpeg7-debian.patch b/package/kodi/patches/ffmpeg7-debian.patch new file mode 100644 index 000000000..0c1e6851a --- /dev/null +++ b/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; + } + + diff --git a/package/pcre/Makefile b/package/pcre/Makefile new file mode 100644 index 000000000..8964db4aa --- /dev/null +++ b/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 + |