[kodi/f41] Fix the ffmpeg7 patch
by Leigh Scott
Summary of changes:
2fa097d... Fix the ffmpeg7 patch (*)
(*) This commit already existed in another branch; no separate mail sent
1 month, 2 weeks
[kodi] Fix the ffmpeg7 patch
by Leigh Scott
commit 2fa097d8c9562e52e9a204492d076b26c0456d2f
Author: Leigh Scott <leigh123linux(a)gmail.com>
Date: Wed Oct 9 00:19:51 2024 +0100
Fix the ffmpeg7 patch
24972.patch | 748 ----------------------------------------------------------
ffmpeg7.patch | 355 ++++++++++++++++++++++++++++
kodi.spec | 2 +-
3 files changed, 356 insertions(+), 749 deletions(-)
---
diff --git a/ffmpeg7.patch b/ffmpeg7.patch
new file mode 100644
index 0000000..6ec3110
--- /dev/null
+++ b/ffmpeg7.patch
@@ -0,0 +1,355 @@
+From 296f238388de29d107ad1534de0057b0794b23be Mon Sep 17 00:00:00 2001
+From: Stephan Sundermann <stephansundermann(a)gmail.com>
+Date: Thu, 11 Apr 2024 17:11:32 +0200
+Subject: [PATCH] [ffmpeg] Update to 7.1
+
+---
+ 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 | 116 +++++++++---------
+ .../DVDDemuxers/DVDDemuxFFmpeg.cpp | 71 +----------
+ 8 files changed, 72 insertions(+), 146 deletions(-)
+
+diff --git a/cmake/modules/FindFFMPEG.cmake b/cmake/modules/FindFFMPEG.cmake
+index 26dd6e8301da1..49f18ca9c2ad3 100644
+--- a/cmake/modules/FindFFMPEG.cmake
++++ b/cmake/modules/FindFFMPEG.cmake
+@@ -168,14 +168,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 5034ff26c4073..776c0b4b35ac0 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/CMakeLists.txt b/tools/depends/target/ffmpeg/CMakeLists.txt
+index 5cadafe29485b..8924dc8c7305b 100644
+--- a/tools/depends/target/ffmpeg/CMakeLists.txt
++++ b/tools/depends/target/ffmpeg/CMakeLists.txt
+@@ -92,14 +92,12 @@ elseif(CORE_SYSTEM_NAME STREQUAL android)
+ list(APPEND ffmpeg_conf --extra-cflags=-mno-stackrealign)
+ endif()
+ elseif(CORE_SYSTEM_NAME STREQUAL darwin_embedded)
+- list(APPEND ffmpeg_conf --disable-crystalhd
+- --enable-videotoolbox
++ list(APPEND ffmpeg_conf --enable-videotoolbox
+ --disable-filter=yadif_videotoolbox
+ --target-os=darwin
+ )
+ elseif(CORE_SYSTEM_NAME STREQUAL osx)
+- list(APPEND ffmpeg_conf --disable-crystalhd
+- --enable-videotoolbox
++ list(APPEND ffmpeg_conf --enable-videotoolbox
+ --target-os=darwin
+ --disable-securetransport
+ )
+diff --git a/tools/depends/target/ffmpeg/FFMPEG-VERSION b/tools/depends/target/ffmpeg/FFMPEG-VERSION
+index f2ba09402e25a..3cb7bc8e0cd9e 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.1
+ ARCHIVE=$(LIBNAME)-$(VERSION).tar.gz
+-SHA512=945e34840092dc0fd3824eb1af2be79868af2afb4fe13159b19a9bcfc464cc4d53243c13ff065199290e9393ddbf4b1c5c8abccf83a31a31d6c7490e499fd1fc
++SHA512=b0a82ca1a34fb9fa16ee4b7fa682d7c3fdcc68cd703c72487a2de434c714f2dede68d390e61dbb3669e435e271e4580d6bae00875d71a17ad39f43644c5fdd07
+
+diff --git a/xbmc/cdrip/EncoderFFmpeg.cpp b/xbmc/cdrip/EncoderFFmpeg.cpp
+index 85f5fa412e961..907d2591ddba7 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 48471a4b10f70..4e9f0f5bbbad4 100644
+--- a/xbmc/cdrip/EncoderFFmpeg.h
++++ b/xbmc/cdrip/EncoderFFmpeg.h
+@@ -33,7 +33,7 @@ class CEncoderFFmpeg : public CEncoder
+ 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 70e946a1160ef..a4fc91554f471 100644
+--- a/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEResampleFFMPEG.cpp
++++ b/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEResampleFFMPEG.cpp
+@@ -66,51 +66,7 @@
+ 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 @@
+ 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,14 +118,63 @@
+ }
+ }
+
++ hasMatrix = true;
+ av_channel_layout_uninit(&dstChLayout);
+-
+- if (swr_set_matrix(m_pContext, (const double*)m_rematrix, AE_CH_MAX) < 0)
++ }
++
++ 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 (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)
+ {
+diff --git a/xbmc/cores/VideoPlayer/DVDDemuxers/DVDDemuxFFmpeg.cpp b/xbmc/cores/VideoPlayer/DVDDemuxers/DVDDemuxFFmpeg.cpp
+index 458b54114df84..3c6fccceb069f 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;
+ }
diff --git a/kodi.spec b/kodi.spec
index 074124c..e71084d 100644
--- a/kodi.spec
+++ b/kodi.spec
@@ -82,7 +82,7 @@ Patch1: fix_py313.patch
# ffmpeg-7 fix
# https://github.com/xbmc/xbmc/pull/24972
-Patch2: 24972.patch
+Patch2: ffmpeg7.patch
%ifarch x86_64
%global _with_crystalhd 1
1 month, 2 weeks
[kodi/f41] (2 commits) ...fix build
by Leigh Scott
Summary of changes:
a9bd754... Rebuilt (*)
5068d86... fix build (*)
(*) This commit already existed in another branch; no separate mail sent
1 month, 2 weeks
[kodi] fix build
by Leigh Scott
commit 5068d86da807b69a7d284e821bc13c39229844b4
Author: Leigh Scott <leigh123linux(a)gmail.com>
Date: Tue Oct 8 23:33:24 2024 +0100
fix build
24972.patch | 748 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
kodi.spec | 5 +
2 files changed, 753 insertions(+)
---
diff --git a/24972.patch b/24972.patch
new file mode 100644
index 0000000..9957792
--- /dev/null
+++ b/24972.patch
@@ -0,0 +1,748 @@
+From 296f238388de29d107ad1534de0057b0794b23be Mon Sep 17 00:00:00 2001
+From: Stephan Sundermann <stephansundermann(a)gmail.com>
+Date: Thu, 11 Apr 2024 17:11:32 +0200
+Subject: [PATCH 1/7] [ffmpeg] Update to 7.1
+
+---
+ 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 | 116 +++++++++---------
+ .../DVDDemuxers/DVDDemuxFFmpeg.cpp | 71 +----------
+ 8 files changed, 72 insertions(+), 146 deletions(-)
+
+diff --git a/cmake/modules/FindFFMPEG.cmake b/cmake/modules/FindFFMPEG.cmake
+index 26dd6e8301da1..49f18ca9c2ad3 100644
+--- a/cmake/modules/FindFFMPEG.cmake
++++ b/cmake/modules/FindFFMPEG.cmake
+@@ -168,14 +168,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 5034ff26c4073..776c0b4b35ac0 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/CMakeLists.txt b/tools/depends/target/ffmpeg/CMakeLists.txt
+index 5cadafe29485b..8924dc8c7305b 100644
+--- a/tools/depends/target/ffmpeg/CMakeLists.txt
++++ b/tools/depends/target/ffmpeg/CMakeLists.txt
+@@ -92,14 +92,12 @@ elseif(CORE_SYSTEM_NAME STREQUAL android)
+ list(APPEND ffmpeg_conf --extra-cflags=-mno-stackrealign)
+ endif()
+ elseif(CORE_SYSTEM_NAME STREQUAL darwin_embedded)
+- list(APPEND ffmpeg_conf --disable-crystalhd
+- --enable-videotoolbox
++ list(APPEND ffmpeg_conf --enable-videotoolbox
+ --disable-filter=yadif_videotoolbox
+ --target-os=darwin
+ )
+ elseif(CORE_SYSTEM_NAME STREQUAL osx)
+- list(APPEND ffmpeg_conf --disable-crystalhd
+- --enable-videotoolbox
++ list(APPEND ffmpeg_conf --enable-videotoolbox
+ --target-os=darwin
+ --disable-securetransport
+ )
+diff --git a/tools/depends/target/ffmpeg/FFMPEG-VERSION b/tools/depends/target/ffmpeg/FFMPEG-VERSION
+index f2ba09402e25a..3cb7bc8e0cd9e 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.1
+ ARCHIVE=$(LIBNAME)-$(VERSION).tar.gz
+-SHA512=945e34840092dc0fd3824eb1af2be79868af2afb4fe13159b19a9bcfc464cc4d53243c13ff065199290e9393ddbf4b1c5c8abccf83a31a31d6c7490e499fd1fc
++SHA512=b0a82ca1a34fb9fa16ee4b7fa682d7c3fdcc68cd703c72487a2de434c714f2dede68d390e61dbb3669e435e271e4580d6bae00875d71a17ad39f43644c5fdd07
+
+diff --git a/xbmc/cdrip/EncoderFFmpeg.cpp b/xbmc/cdrip/EncoderFFmpeg.cpp
+index 85f5fa412e961..907d2591ddba7 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 48471a4b10f70..4e9f0f5bbbad4 100644
+--- a/xbmc/cdrip/EncoderFFmpeg.h
++++ b/xbmc/cdrip/EncoderFFmpeg.h
+@@ -33,7 +33,7 @@ class CEncoderFFmpeg : public CEncoder
+ 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 70e946a1160ef..a4fc91554f471 100644
+--- a/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEResampleFFMPEG.cpp
++++ b/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEResampleFFMPEG.cpp
+@@ -66,51 +66,7 @@ bool CActiveAEResampleFFMPEG::Init(Sampl
+ 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
+@@ -130,28 +83,19 @@ bool CActiveAEResampleFFMPEG::Init(SampleConfig dstConfig,
+ 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++)
+ {
+@@ -181,15 +125,67 @@ bool CActiveAEResampleFFMPEG::Init(SampleConfig dstConfig,
+ }
+ }
+
++ 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 (sublevel > 0.0f)
++ av_opt_set_double(m_pContext, "lfe_mix_level", static_cast<double>(sublevel), 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 458b54114df84..3c6fccceb069f 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;
+ }
+
+From b8e6ca32ee703831f5879027f529feea2d839c8e Mon Sep 17 00:00:00 2001
+From: Stephan Sundermann <stephansundermann(a)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 eb2943bb8ccb9..4da0722d5c118 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 d66378fa07886..9586d211e9156 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 6ace85dc9244d..cc3629d33d620 100644
+--- a/xbmc/cores/VideoPlayer/DVDCodecs/Video/VAAPI.cpp
++++ b/xbmc/cores/VideoPlayer/DVDCodecs/Video/VAAPI.cpp
+@@ -3070,8 +3070,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 1f71f643d229a..567d63559d456 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)
+
+From 85165398c2e90eb83aa5723fbd77667b5394e56c Mon Sep 17 00:00:00 2001
+From: Stephan Sundermann <stephansundermann(a)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 0cdf8c3864ac3..477a2e82ece51 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);
+
+From d8222ed25398532253594f559d33e221db4b49fe Mon Sep 17 00:00:00 2001
+From: Stephan Sundermann <stephansundermann(a)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 3c6fccceb069f..b63453dc707e6 100644
+--- a/xbmc/cores/VideoPlayer/DVDDemuxers/DVDDemuxFFmpeg.cpp
++++ b/xbmc/cores/VideoPlayer/DVDDemuxers/DVDDemuxFFmpeg.cpp
+@@ -1650,42 +1650,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;
+ }
+ }
+
+@@ -2508,7 +2515,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;
+@@ -2516,7 +2525,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;
+
+From a013275443236e65cfc6698c605e757278829b3c Mon Sep 17 00:00:00 2001
+From: Stephan Sundermann <stephansundermann(a)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 46d1d6174f504..1f606163ec489 100644
+--- a/addons/resource.language.en_gb/resources/strings.po
++++ b/addons/resource.language.en_gb/resources/strings.po
+@@ -7447,10 +7447,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"
+@@ -19800,11 +19797,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
+
+From 2ab365ecda8ec4c5a2c59ff8bb2975f9b5796b08 Mon Sep 17 00:00:00 2001
+From: Stephan Sundermann <stephansundermann(a)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 c4e8d9fc58b8f..1bfccc0d49df1 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;
+@@ -580,7 +579,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 0f4c5a7871be4..9a57a7d6c919d 100644
+--- a/xbmc/settings/AdvancedSettings.h
++++ b/xbmc/settings/AdvancedSettings.h
+@@ -121,7 +121,6 @@ class CAdvancedSettings : public ISettingCallback, public ISettingsHandler
+
+ std::string m_audioDefaultPlayer;
+ float m_audioPlayCountMinimumPercent;
+- bool m_VideoPlayerIgnoreDTSinWAV;
+ float m_limiterHold;
+ float m_limiterRelease;
+
+
+From 1b74893115db37de76632bc5b95e129d11cb533b Mon Sep 17 00:00:00 2001
+From: Stephan Sundermann <stephansundermann(a)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 63fb9264a8348..e9aa468dd0bd7 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 daf66ce0cd98b..902f38ade2708 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/kodi.spec b/kodi.spec
index 9d8e8e6..074124c 100644
--- a/kodi.spec
+++ b/kodi.spec
@@ -80,6 +80,10 @@ Patch0: kodi-20-versioning.patch
# Python-3.13 fix
Patch1: fix_py313.patch
+# ffmpeg-7 fix
+# https://github.com/xbmc/xbmc/pull/24972
+Patch2: 24972.patch
+
%ifarch x86_64
%global _with_crystalhd 1
%endif
@@ -315,6 +319,7 @@ unzip %{SOURCE6}
popd
%patch -P 0 -p1 -b.versioning
%patch -P 1 -p1 -b.py313
+%patch -P 2 -p1 -b.ffmpeg7
# Fix up Python shebangs
%py3_shebang_fix \
1 month, 2 weeks
[mplayer/f41] fix build
by Leigh Scott
Summary of changes:
40c07b1... fix build (*)
(*) This commit already existed in another branch; no separate mail sent
1 month, 2 weeks
[mplayer] fix build
by Leigh Scott
commit 40c07b1263addd744cb8b7f46dff55c5af2529fa
Author: Leigh Scott <leigh123linux(a)gmail.com>
Date: Tue Oct 8 23:06:13 2024 +0100
fix build
0204_fix-ftbfs-jack-ffmpeg7.patch | 129 ++++++++++++++++++++++++++++++++++++++
mplayer.spec | 2 +
2 files changed, 131 insertions(+)
---
diff --git a/0204_fix-ftbfs-jack-ffmpeg7.patch b/0204_fix-ftbfs-jack-ffmpeg7.patch
new file mode 100644
index 0000000..a6eff13
--- /dev/null
+++ b/0204_fix-ftbfs-jack-ffmpeg7.patch
@@ -0,0 +1,129 @@
+From 98f80775dff2b9f83ba9b2e247ef7b2174a107bf Mon Sep 17 00:00:00 2001
+From: Alexander Strasser <eclipse7(a)gmx.net>
+Date: Wed, 3 Apr 2024 22:57:40 +0200
+Subject: [PATCH] ao jack: Switch from AVFifoBuffer to AVFifo
+
+Removed from lavu on major bump to 59
+
+TODO: Check for potential concurrency problems
+---
+ libao2/ao_jack.c | 30 ++++++++++++++++--------------
+ 1 file changed, 16 insertions(+), 14 deletions(-)
+
+--- a/libao2/ao_jack.c
++++ b/libao2/ao_jack.c
+@@ -71,7 +71,7 @@
+ #define BUFFSIZE (NUM_CHUNKS * CHUNK_SIZE)
+
+ //! buffer for audio data
+-static AVFifoBuffer *buffer;
++static AVFifo *buffer;
+
+ /**
+ * \brief insert len bytes into buffer
+@@ -82,9 +82,10 @@
+ * If there is not enough room, the buffer is filled up
+ */
+ static int write_buffer(unsigned char* data, int len) {
+- int free = av_fifo_space(buffer);
++ int free = av_fifo_can_write(buffer);
+ if (len > free) len = free;
+- return av_fifo_generic_write(buffer, data, len, NULL);
++ av_fifo_write(buffer, data, len);
++ return len;
+ }
+
+ static void silence(float **bufs, int cnt, int num_bufs);
+@@ -96,10 +97,11 @@
+ int pos;
+ };
+
+-static void deinterleave(void *info, void *src, int len) {
++static int deinterleave(void *info, void *src, size_t *lenp) {
+ struct deinterleave *di = info;
+ float *s = src;
+ int i;
++ int len = *lenp;
+ len /= sizeof(float);
+ for (i = 0; i < len; i++) {
+ di->bufs[di->cur_buf++][di->pos] = s[i];
+@@ -108,6 +110,7 @@
+ di->pos++;
+ }
+ }
++ return 0;
+ }
+
+ /**
+@@ -125,12 +128,13 @@
+ */
+ static int read_buffer(float **bufs, int cnt, int num_bufs) {
+ struct deinterleave di = {bufs, num_bufs, 0, 0};
+- int buffered = av_fifo_size(buffer);
++ size_t len = cnt * num_bufs * sizeof(float);
++ int buffered = av_fifo_can_read(buffer);
+ if (cnt * sizeof(float) * num_bufs > buffered) {
+ silence(bufs, cnt, num_bufs);
+ cnt = buffered / sizeof(float) / num_bufs;
+ }
+- av_fifo_generic_read(buffer, &di, cnt * num_bufs * sizeof(float), deinterleave);
++ av_fifo_read_to_cb(buffer, deinterleave, &di, &len);
+ return cnt;
+ }
+
+@@ -242,7 +246,7 @@
+ mp_msg(MSGT_AO, MSGL_FATAL, "[JACK] cannot open server\n");
+ goto err_out;
+ }
+- buffer = av_fifo_alloc(BUFFSIZE);
++ buffer = av_fifo_alloc2(BUFFSIZE, 1, 0);
+ jack_set_process_callback(client, outputaudio, 0);
+
+ // list matching ports if connections should be made
+@@ -302,8 +306,7 @@
+ free(client_name);
+ if (client)
+ jack_client_close(client);
+- av_fifo_free(buffer);
+- buffer = NULL;
++ av_fifo_freep2(&buffer);
+ return 0;
+ }
+
+@@ -315,8 +318,7 @@
+ reset();
+ usec_sleep(100 * 1000);
+ jack_client_close(client);
+- av_fifo_free(buffer);
+- buffer = NULL;
++ av_fifo_freep2(&buffer);
+ }
+
+ /**
+@@ -324,7 +326,7 @@
+ */
+ static void reset(void) {
+ paused = 1;
+- av_fifo_reset(buffer);
++ av_fifo_reset2(buffer);
+ paused = 0;
+ }
+
+@@ -343,7 +345,7 @@
+ }
+
+ static int get_space(void) {
+- return av_fifo_space(buffer);
++ return av_fifo_can_write(buffer);
+ }
+
+ /**
+@@ -357,7 +359,7 @@
+ }
+
+ static float get_delay(void) {
+- int buffered = av_fifo_size(buffer); // could be less
++ int buffered = av_fifo_can_read(buffer); // could be less
+ float in_jack = jack_latency;
+ if (estimate && callback_interval > 0) {
+ float elapsed = (float)GetTimer() / 1000000.0 - callback_time;
diff --git a/mplayer.spec b/mplayer.spec
index f46c1fb..dcbc8c9 100644
--- a/mplayer.spec
+++ b/mplayer.spec
@@ -34,6 +34,7 @@ Patch0: %{name}-config.patch
Patch1: %{name}-manlinks.patch
# use system FFmpeg libraries
Patch2: %{name}-ffmpeg.patch
+Patch3: 0204_fix-ftbfs-jack-ffmpeg7.patch
BuildRequires: SDL-devel
BuildRequires: a52dec-devel
@@ -217,6 +218,7 @@ rm -rf ffmpeg
%patch -P 0 -p1 -b .config
%patch -P 1 -p1 -b .manlinks
%patch -P 2 -p1 -b .ffmpeg
+%patch -P 3 -p1 -b .ffmpeg7
sed -i '1s=^#! */usr/bin/\(python\|env python\)[23]\?=#!%{__python3}=' TOOLS/{mphelp_check,vobshift}.py
1 month, 2 weeks
[mplayer/f41] Update snapshot
by Nicolas Chauvet
Summary of changes:
6000ff0... Update snapshot (*)
(*) This commit already existed in another branch; no separate mail sent
1 month, 2 weeks
[mplayer] Update snapshot
by Nicolas Chauvet
commit 6000ff0eca4908348b6aa46fd2a6452663734e71
Author: Nicolas Chauvet <kwizart(a)gmail.com>
Date: Tue Oct 8 22:50:24 2024 +0200
Update snapshot
.gitignore | 1 +
mplayer.spec | 11 +++++++----
sources | 2 +-
3 files changed, 9 insertions(+), 5 deletions(-)
---
diff --git a/.gitignore b/.gitignore
index c4a8c79..ee7b403 100644
--- a/.gitignore
+++ b/.gitignore
@@ -15,3 +15,4 @@ MPlayer-1.3.0.tar.xz
/mplayer-export-2024-03-17.tar.xz
/mplayer-export-2024-04-09.tar.xz
/mplayer-export-2024-04-15.tar.xz
+/mplayer-export-2024-10-08.tar.xz
diff --git a/mplayer.spec b/mplayer.spec
index 741f051..f46c1fb 100644
--- a/mplayer.spec
+++ b/mplayer.spec
@@ -2,16 +2,16 @@
%global build_type_safety_c 0
%global codecdir %{_libdir}/codecs
-%global pre 20240415svn
+%global pre 20241008svn
%global svn 1
-%global svnbuild 2024-04-15
+%global svnbuild 2024-10-08
Name: mplayer
Version: 1.5.1
%if 0%{?svn}
-Release: 0.15%{?pre:.%{pre}}%{?dist}
+Release: 0.16%{?pre:.%{pre}}%{?dist}
%else
-Release: 15%{?dist}
+Release: 16%{?dist}
%endif
Summary: Movie player playing most video formats and DVDs
@@ -315,6 +315,9 @@ sed -i '1s:#!/usr/bin/env python:#!/usr/bin/env python2:' %{buildroot}%{_bindir}
%{_datadir}/mplayer/*.fp
%changelog
+* Tue Oct 08 2024 Nicolas Chauvet <kwizart(a)gmail.com> - 1.5.1-0.16.20241008svn
+- Update snapshot
+
* Fri Aug 02 2024 RPM Fusion Release Engineering <sergiomb(a)rpmfusion.org> - 1.5.1-0.15.20240415svn
- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild
diff --git a/sources b/sources
index b6b009d..fa0bf96 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (mplayer-export-2024-04-15.tar.xz) = 53e60bca5b724ee25221aa4da9e867d37aca629b7abe59a5f4ce04a1fcb1024e06818dfb0293eab81686d671c0f035b8894edb6c711b9babb55afc92ab4efaec
+SHA512 (mplayer-export-2024-10-08.tar.xz) = 85a4be345532ee2dd913ecc50dd29170100c2a636f2f4f4b6462e2a3dca743986eedd4b75296ea26213fd523177af3178411d13745ad00bbca5014c51dc46ecb
1 month, 2 weeks
[HandBrake/f41] (6 commits) ...- bump to rebuild
by Dominik Mierzejewski
Summary of changes:
b303f16... drop unused patch (*)
9d35c2f... drop support for building without FFmpeg (*)
199a0b9... Rebuild for x265 (*)
4369922... Revert "Rebuild for x265" (*)
488834f... bump FFmpeg requirement to 7.0 (*)
732f088... - bump to rebuild (*)
(*) This commit already existed in another branch; no separate mail sent
1 month, 2 weeks
[kodi] Rebuilt
by Nicolas Chauvet
commit a9bd754b1c515aac3e9d619dc738d35a97b650fc
Author: Nicolas Chauvet <kwizart(a)gmail.com>
Date: Tue Oct 8 19:06:58 2024 +0200
Rebuilt
kodi.spec | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
---
diff --git a/kodi.spec b/kodi.spec
index 908e37a..9d8e8e6 100644
--- a/kodi.spec
+++ b/kodi.spec
@@ -39,7 +39,7 @@
Name: kodi
Version: 21.1
-Release: 1%{?dist}
+Release: 2%{?dist}
Summary: Media center
License: GPLv2+ and GPLv3+ and LGPLv2+ and BSD and MIT
@@ -449,6 +449,9 @@ rm -f %{buildroot}%{_bindir}/TexturePacker
%changelog
+* Tue Oct 08 2024 Nicolas Chauvet <kwizart(a)gmail.com> - 21.1-2
+- Rebuilt
+
* Tue Aug 20 2024 Leigh Scott <leigh123linux(a)gmail.com> - 21.1-1
- Update to 21.1
1 month, 2 weeks