kodi-gbm: 21.0 -> 21.1
This commit is contained in:
parent
dbe221489f
commit
239388fcab
@ -248,7 +248,7 @@ drwxr-xr-x root/root usr/share/icons/hicolor/64x64/apps/
|
||||
-rw-r--r-- root/root usr/share/icons/hicolor/64x64/apps/kodi.png
|
||||
drwxr-xr-x root/root usr/share/icons/hicolor/scalable/
|
||||
drwxr-xr-x root/root usr/share/icons/hicolor/scalable/apps/
|
||||
-rw-r--r-- root/root usr/share/icons/hicolor/scalable/apps/kodi.png
|
||||
-rw-r--r-- root/root usr/share/icons/hicolor/scalable/apps/kodi.svg
|
||||
drwxr-xr-x root/root usr/share/kodi/
|
||||
drwxr-xr-x root/root usr/share/kodi/addons/
|
||||
drwxr-xr-x root/root usr/share/kodi/addons/audioencoder.kodi.builtin.aac/
|
||||
@ -2245,6 +2245,7 @@ drwxr-xr-x root/root usr/share/kodi/addons/resource.language.en_gb/
|
||||
drwxr-xr-x root/root usr/share/kodi/addons/resource.language.en_gb/resources/
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/resource.language.en_gb/resources/langinfo.xml
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/resource.language.en_gb/resources/strings.po
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/resource.language.en_gb/resources/strings.po.orig
|
||||
drwxr-xr-x root/root usr/share/kodi/addons/resource.uisounds.kodi/
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/resource.uisounds.kodi/addon.xml
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/resource.uisounds.kodi/icon.png
|
||||
@ -2955,20 +2956,84 @@ drwxr-xr-x root/root usr/share/kodi/addons/webinterface.default/js/
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/js/kodi-webinterface.js
|
||||
drwxr-xr-x root/root usr/share/kodi/addons/webinterface.default/lang/
|
||||
drwxr-xr-x root/root usr/share/kodi/addons/webinterface.default/lang/_strings/
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/lang/_strings/af.json
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/lang/_strings/am.json
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/lang/_strings/ar.json
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/lang/_strings/ast.json
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/lang/_strings/az.json
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/lang/_strings/be.json
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/lang/_strings/bg.json
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/lang/_strings/bs.json
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/lang/_strings/ca.json
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/lang/_strings/cs.json
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/lang/_strings/cy.json
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/lang/_strings/da.json
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/lang/_strings/de.json
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/lang/_strings/el.json
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/lang/_strings/en.json
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/lang/_strings/en_au.json
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/lang/_strings/en_nz.json
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/lang/_strings/en_us.json
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/lang/_strings/eo.json
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/lang/_strings/es.json
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/lang/_strings/es_ar.json
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/lang/_strings/es_mx.json
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/lang/_strings/et.json
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/lang/_strings/eu.json
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/lang/_strings/fa.json
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/lang/_strings/fa_ir.json
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/lang/_strings/fi.json
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/lang/_strings/fo.json
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/lang/_strings/fr.json
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/lang/_strings/fr_ca.json
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/lang/_strings/gl.json
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/lang/_strings/gr.json
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/lang/_strings/hi.json
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/lang/_strings/hr.json
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/lang/_strings/hu.json
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/lang/_strings/hy.json
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/lang/_strings/id.json
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/lang/_strings/is.json
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/lang/_strings/it.json
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/lang/_strings/iw.json
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/lang/_strings/ja.json
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/lang/_strings/kn.json
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/lang/_strings/ko.json
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/lang/_strings/lt.json
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/lang/_strings/lv.json
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/lang/_strings/mi.json
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/lang/_strings/mk.json
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/lang/_strings/ml.json
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/lang/_strings/mn.json
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/lang/_strings/ms.json
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/lang/_strings/mt.json
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/lang/_strings/my.json
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/lang/_strings/nb.json
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/lang/_strings/nl.json
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/lang/_strings/oc_fr.json
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/lang/_strings/pl.json
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/lang/_strings/pt.json
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/lang/_strings/pt_br.json
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/lang/_strings/ro.json
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/lang/_strings/ru.json
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/lang/_strings/si.json
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/lang/_strings/sk.json
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/lang/_strings/zh_hans.json
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/lang/_strings/zh_hant.json
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/lang/_strings/sl.json
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/lang/_strings/sq.json
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/lang/_strings/sr.json
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/lang/_strings/sr_rs@latin.json
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/lang/_strings/sv.json
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/lang/_strings/szl.json
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/lang/_strings/ta.json
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/lang/_strings/te.json
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/lang/_strings/tg.json
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/lang/_strings/th.json
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/lang/_strings/tr.json
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/lang/_strings/uk.json
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/lang/_strings/uz.json
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/lang/_strings/vi.json
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/lang/_strings/zh_cn.json
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/lang/_strings/zh_tw.json
|
||||
drwxr-xr-x root/root usr/share/kodi/addons/webinterface.default/lang/de/
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/lang/de/app-readme.html
|
||||
-rw-r--r-- root/root usr/share/kodi/addons/webinterface.default/lang/de/keybind-readme.html
|
||||
|
@ -1,5 +1,6 @@
|
||||
untrusted comment: verify with /etc/ports/contrib.pub
|
||||
RWSagIOpLGJF30Ds2jd5A6MTsh3dnSL6pJgrf/yVEsyAZych9l6OToex5L8euyAE4FMNxdr8NqH+hOTuZXTS+KzTMaO6OKn20Q0=
|
||||
SHA256 (Pkgfile) = e64b59b82a04829a806db57ed4cc65d4a8afaf6e3cbf7cebeeab3591260ccfc5
|
||||
SHA256 (.footprint) = 3ece3335239560401ccd3bf79b7fe7803de11cba2ba56dd93882d86b8613e2a5
|
||||
SHA256 (xbmc-21.0-Omega.tar.gz) = 7f54c1fd8456ac46221fbc85e447362bdc209163c6cb19fca98d106560071b7c
|
||||
RWSagIOpLGJF37BGpyM1Oks3VOMRsiBcAGfbk02oae0dsucXRY85Igeqmwjfn5p9C70iBdwyWKTvpa31zIE4K5nvIunFWxJAVQE=
|
||||
SHA256 (Pkgfile) = ba221d3f75956abe802c68dec2ae7c1de734e838d4856e0b1b7faaae9aaf2784
|
||||
SHA256 (.footprint) = a2decb0c79f7604765d2152a6d5715f1afa0d136071235b260f022d563966c72
|
||||
SHA256 (xbmc-21.1-Omega.tar.gz) = ad6e40b0912c8318635f0501dc1f7f27ce3a29e671f2ddb608cad34babae80ef
|
||||
SHA256 (24972.patch) = abcad95b0b5decba67ea4612b315a690e257cb9485ea2d5e774c012789ddf0a1
|
||||
|
745
kodi-gbm/24972.patch
Normal file
745
kodi-gbm/24972.patch
Normal file
@ -0,0 +1,745 @@
|
||||
From c5a02e272ab466c91c244cec881e1c0b09d34d88 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 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..60b8887de3d17 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 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 e897cbd3ea801..6fce0af9812f0 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 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 e8af4c24588e5e51ce7a2620610dd8ac1a3837c8 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 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 fac94de3b9bb54b5caa116595e7e59205f504eac 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 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 a8831a58e1a05096ea8cb3f96047210e03f1e0b2 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 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 dd2f0bb85c87612fb148fde30156534826bb07eb 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 53523fc9e6359..3565d2961fdaa 100644
|
||||
--- a/addons/resource.language.en_gb/resources/strings.po
|
||||
+++ b/addons/resource.language.en_gb/resources/strings.po
|
||||
@@ -7394,10 +7394,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"
|
||||
@@ -19680,11 +19677,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 8be5519701fedc6ce861339942040ae06cbc0020 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 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 c5e2c85fbd8d7ceb299365c3a9a696a1fce8669a 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 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;
|
||||
}
|
@ -1,15 +1,16 @@
|
||||
# Description: Open source home theater software, running in a gbm buffer
|
||||
# URL: https://kodi.tv/
|
||||
# Maintainer: Tim Biermann, tbier at posteo dot de
|
||||
# Depends on: crossguid dbus flatbuffers fstrcmp libass libcdio libdisplay-info libdvdread libinput libmicrohttpd libxkbcommon mesa openjdk20-jdk rapidjson spdlog swig taglib tinyxml tinyxml2 xkeyboard-config
|
||||
# Depends on: crossguid dbus ffmpeg flatbuffers fstrcmp libass libcdio libdisplay-info libdvdread libinput libmicrohttpd libxkbcommon mesa openjdk20-jdk rapidjson spdlog swig taglib tinyxml tinyxml2 xkeyboard-config
|
||||
# Optional: alsa-lib avahi bluez dav1d libmicrohttpd libnfs libnghttp2 libva libva-vdpau-driver libxslt mariadb mysql pipewire pulseaudio
|
||||
|
||||
name=kodi-gbm
|
||||
version=21.0
|
||||
version=21.1
|
||||
release=1
|
||||
_codename=Omega
|
||||
|
||||
source=(https://github.com/xbmc/xbmc/archive/$version-$_codename/xbmc-$version-$_codename.tar.gz)
|
||||
source=(https://github.com/xbmc/xbmc/archive/$version-$_codename/xbmc-$version-$_codename.tar.gz
|
||||
24972.patch)
|
||||
|
||||
build() {
|
||||
# clang? {{{
|
||||
@ -49,6 +50,7 @@ build() {
|
||||
xbmc-$version-$_codename/tools/depends/native/TexturePacker/src/autogen.sh \
|
||||
xbmc-$version-$_codename/tools/depends/native/JsonSchemaBuilder/src/autogen.sh
|
||||
|
||||
patch -Np1 -d xbmc-$version-$_codename -i $SRC/24972.patch
|
||||
|
||||
cmake -S xbmc-$version-$_codename -B build -G Ninja $KODI_EXTRA \
|
||||
-D CMAKE_INSTALL_PREFIX=/usr \
|
||||
|
Loading…
Reference in New Issue
Block a user