[packages/blender] - add fixes for ffmpeg 9
baggins
baggins at pld-linux.org
Fri Oct 23 01:50:38 CEST 2026
commit 526108ba2ca54accf244ed7dae2334445265c046
Author: Jan Rękorajski <baggins at pld-linux.org>
Date: Fri Oct 23 01:50:19 2026 +0200
- add fixes for ffmpeg 9
blender.spec | 2 +
ffmpeg9.patch | 137 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 139 insertions(+)
---
diff --git a/blender.spec b/blender.spec
index dcd6a02..de996b2 100644
--- a/blender.spec
+++ b/blender.spec
@@ -23,6 +23,7 @@ Group: X11/Applications/Graphics
Source0: https://download.blender.org/source/%{name}-%{version}.tar.xz
# Source0-md5: 8fcb442090c29a4f12652dcd9d6ae1f8
Patch0: eigen3.patch
+Patch1: ffmpeg9.patch
URL: https://www.blender.org/
BuildRequires: OpenAL-devel
BuildRequires: OpenCOLLADA-devel
@@ -116,6 +117,7 @@ Blender to darmowy i w pełni funkcjonalny pakiet do tworzenia animacji
%prep
%setup -q
%patch -P0 -p1
+%patch -P1 -p1
%build
install -d build
diff --git a/ffmpeg9.patch b/ffmpeg9.patch
new file mode 100644
index 0000000..bd13e29
--- /dev/null
+++ b/ffmpeg9.patch
@@ -0,0 +1,137 @@
+From e3c92c22817dc0310a460c22f6b1e8e397517e3b Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?J=C3=B6rg=20M=C3=BCller?= <nexyon at gmail.com>
+Date: Wed, 19 Aug 2026 18:22:35 +0200
+Subject: [PATCH] Audaspace: port ffmpeg 9 support from upstream.
+
+---
+ .../audaspace/plugins/ffmpeg/FFMPEGWriter.cpp | 103 ++++++++++++++++++
+ 1 file changed, 103 insertions(+)
+
+diff --git a/extern/audaspace/plugins/ffmpeg/FFMPEGWriter.cpp b/extern/audaspace/plugins/ffmpeg/FFMPEGWriter.cpp
+index 10a80bc6f9bd..2204b0549666 100644
+--- a/extern/audaspace/plugins/ffmpeg/FFMPEGWriter.cpp
++++ b/extern/audaspace/plugins/ffmpeg/FFMPEGWriter.cpp
+@@ -38,6 +38,10 @@ AUD_NAMESPACE_BEGIN
+ #if LIBAVCODEC_VERSION_MAJOR < 59
+ #define FFMPEG_OLD_CH_LAYOUT
+ #endif
++/* FFmpeg >= 8.0 */
++#if LIBAVCODEC_VERSION_MAJOR >= 62
++#define FFMPEG_SUPPORTED_CONFIG
++#endif
+
+ void FFMPEGWriter::encode()
+ {
+@@ -330,6 +334,104 @@ FFMPEGWriter::FFMPEGWriter(const std::string &filename, DeviceSpecs specs, Conta
+ if(m_formatCtx->oformat->flags & AVFMT_GLOBALHEADER)
+ m_codecCtx->flags |= AV_CODEC_FLAG_GLOBAL_HEADER;
+
++#ifdef FFMPEG_SUPPORTED_CONFIG
++ const AVSampleFormat* supported_sample_fmts = nullptr;
++ int num_sample_fmts = 0;
++ if(avcodec_get_supported_config(m_codecCtx, codec, AV_CODEC_CONFIG_SAMPLE_FORMAT, 0,
++ reinterpret_cast<const void**>(&supported_sample_fmts), &num_sample_fmts) < 0)
++ AUD_THROW(FileException, "File couldn't be written, couldn't retrieve supported sample formats.");
++
++ bool format_supported = false;
++
++ if(supported_sample_fmts)
++ {
++ for(int i = 0; i < num_sample_fmts; i++)
++ {
++ if(av_get_alt_sample_fmt(supported_sample_fmts[i], false) == m_codecCtx->sample_fmt)
++ {
++ m_deinterleave = av_sample_fmt_is_planar(supported_sample_fmts[i]);
++ m_codecCtx->sample_fmt = supported_sample_fmts[i];
++ format_supported = true;
++ }
++ }
++
++ if(!format_supported && num_sample_fmts > 0)
++ {
++ int chosen_index = 0;
++ auto chosen = av_get_alt_sample_fmt(supported_sample_fmts[chosen_index], false);
++ for(int i = 1; i < num_sample_fmts; i++)
++ {
++ auto fmt = av_get_alt_sample_fmt(supported_sample_fmts[i], false);
++ if((fmt > chosen && chosen < m_codecCtx->sample_fmt) || (fmt > m_codecCtx->sample_fmt && fmt < chosen))
++ {
++ chosen = fmt;
++ chosen_index = i;
++ }
++ }
++
++ m_codecCtx->sample_fmt = supported_sample_fmts[chosen_index];
++ m_deinterleave = av_sample_fmt_is_planar(m_codecCtx->sample_fmt);
++ switch(av_get_alt_sample_fmt(m_codecCtx->sample_fmt, false))
++ {
++ case AV_SAMPLE_FMT_U8:
++ specs.format = FORMAT_U8;
++ m_convert = convert_float_u8;
++ break;
++ case AV_SAMPLE_FMT_S16:
++ specs.format = FORMAT_S16;
++ m_convert = convert_float_s16;
++ break;
++ case AV_SAMPLE_FMT_S32:
++ specs.format = FORMAT_S32;
++ m_convert = convert_float_s32;
++ break;
++ case AV_SAMPLE_FMT_FLT:
++ specs.format = FORMAT_FLOAT32;
++ m_convert = convert_copy<sample_t>;
++ break;
++ case AV_SAMPLE_FMT_DBL:
++ specs.format = FORMAT_FLOAT64;
++ m_convert = convert_float_double;
++ break;
++ default:
++ AUD_THROW(FileException, "File couldn't be written, sample format not supported with ffmpeg.");
++ }
++ }
++ }
++ else
++ {
++ m_codecCtx->sample_fmt = av_get_alt_sample_fmt(m_codecCtx->sample_fmt, false);
++ m_deinterleave = av_sample_fmt_is_planar(m_codecCtx->sample_fmt);
++ }
++
++ const int* supported_samplerates = nullptr;
++ int num_samplerates = 0;
++ if(avcodec_get_supported_config(m_codecCtx, codec, AV_CODEC_CONFIG_SAMPLE_RATE, 0,
++ reinterpret_cast<const void**>(&supported_samplerates), &num_samplerates) < 0)
++ AUD_THROW(FileException, "File couldn't be written, couldn't retrieve supported sample rates.");
++
++ m_codecCtx->sample_rate = 0;
++
++ if(supported_samplerates)
++ {
++ for(int i = 0; i < num_samplerates; i++)
++ {
++ if(supported_samplerates[i] == m_specs.rate)
++ {
++ m_codecCtx->sample_rate = supported_samplerates[i];
++ break;
++ }
++ else if((supported_samplerates[i] > m_codecCtx->sample_rate && m_specs.rate > m_codecCtx->sample_rate) ||
++ (supported_samplerates[i] < m_codecCtx->sample_rate && m_specs.rate < supported_samplerates[i]))
++ {
++ m_codecCtx->sample_rate = supported_samplerates[i];
++ }
++ }
++ }
++
++ if(m_codecCtx->sample_rate == 0)
++ m_codecCtx->sample_rate = m_specs.rate;
++#else
+ bool format_supported = false;
+
+ for(int i = 0; codec->sample_fmts[i] != -1; i++)
+@@ -406,6 +508,7 @@ FFMPEGWriter::FFMPEGWriter(const std::string &filename, DeviceSpecs specs, Conta
+
+ if(m_codecCtx->sample_rate == 0)
+ m_codecCtx->sample_rate = m_specs.rate;
++#endif
+
+ m_specs.rate = m_codecCtx->sample_rate;
+
================================================================
---- gitweb:
http://git.pld-linux.org/gitweb.cgi/packages/blender.git/commitdiff/526108ba2ca54accf244ed7dae2334445265c046
More information about the pld-cvs-commit
mailing list