File 0001-Fix-build-with-ffmpeg-8.0.patch of Package kpipewire6

From dee3f8d96e2abcf649b638784a1835b907711bfd Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bernhard=20Rosenkr=C3=A4nzer?= <bero@lindev.ch>
Date: Wed, 27 Aug 2025 16:39:36 +0200
Subject: [PATCH] Fix build with ffmpeg >= 8.0

(amended to add a missing #define)

---
 src/h264vaapiencoder.cpp   | 39 ++++++++++++++++++++++----------------
 src/libopenh264encoder.cpp | 12 +++++++++---
 src/libx264encoder.cpp     | 12 +++++++++---
 3 files changed, 41 insertions(+), 22 deletions(-)

diff --git a/src/h264vaapiencoder.cpp b/src/h264vaapiencoder.cpp
index 0cf251b..75a99b8 100644
--- a/src/h264vaapiencoder.cpp
+++ b/src/h264vaapiencoder.cpp
@@ -18,13 +18,20 @@ extern "C" {
 
 #include "logging_record.h"
 
-H264VAAPIEncoder::H264VAAPIEncoder(H264Profile profile, PipeWireProduce *produce)
+#ifndef AV_PROFILE_H264_BASELINE // ffmpeg before 8.0
+#define AV_PROFILE_H264_BASELINE FF_PROFILE_H264_BASELINE
+#define AV_PROFILE_H264_MAIN FF_PROFILE_H264_MAIN
+#define AV_PROFILE_H264_HIGH FF_PROFILE_H264_HIGH
+#define AV_PROFILE_H264_CONSTRAINED_BASELINE FF_PROFILE_H264_CONSTRAINED_BASELINE
+#endif
+
+H264VAAPIEncoder::H264VAAPIEncoder(H264Profile profile, PipeWireProduce* produce)
     : HardwareEncoder(produce)
     , m_profile(profile)
 {
 }
 
-bool H264VAAPIEncoder::initialize(const QSize &size)
+bool H264VAAPIEncoder::initialize(const QSize& size)
 {
     if (!createDrmContext(size)) {
         return false;
@@ -37,11 +44,11 @@ bool H264VAAPIEncoder::initialize(const QSize &size)
     }
 
     int ret = avfilter_graph_create_filter(&m_inputFilter,
-                                           avfilter_get_by_name("buffer"),
-                                           "in",
-                                           "width=1:height=1:pix_fmt=drm_prime:time_base=1/1",
-                                           nullptr,
-                                           m_avFilterGraph);
+        avfilter_get_by_name("buffer"),
+        "in",
+        "width=1:height=1:pix_fmt=drm_prime:time_base=1/1",
+        nullptr,
+        m_avFilterGraph);
     if (ret < 0) {
         qCWarning(PIPEWIRERECORD_LOGGING) << "Failed to create the buffer filter";
         return false;
@@ -55,7 +62,7 @@ bool H264VAAPIEncoder::initialize(const QSize &size)
     parameters->format = AV_PIX_FMT_DRM_PRIME;
     parameters->width = size.width();
     parameters->height = size.height();
-    parameters->time_base = {1, 1000};
+    parameters->time_base = { 1, 1000 };
     parameters->hw_frames_ctx = m_drmFramesContext;
 
     av_buffersrc_parameters_set(m_inputFilter, parameters);
@@ -120,7 +127,7 @@ bool H264VAAPIEncoder::initialize(const QSize &size)
     m_avCodecContext->max_b_frames = 0;
     m_avCodecContext->gop_size = 100;
     m_avCodecContext->pix_fmt = AV_PIX_FMT_VAAPI;
-    m_avCodecContext->time_base = AVRational{1, 1000};
+    m_avCodecContext->time_base = AVRational { 1, 1000 };
 
     if (m_quality) {
         m_avCodecContext->global_quality = percentageToAbsoluteQuality(m_quality);
@@ -130,17 +137,17 @@ bool H264VAAPIEncoder::initialize(const QSize &size)
 
     switch (m_profile) {
     case H264Profile::Baseline:
-        m_avCodecContext->profile = FF_PROFILE_H264_CONSTRAINED_BASELINE;
+        m_avCodecContext->profile = AV_PROFILE_H264_CONSTRAINED_BASELINE;
         break;
     case H264Profile::Main:
-        m_avCodecContext->profile = FF_PROFILE_H264_MAIN;
+        m_avCodecContext->profile = AV_PROFILE_H264_MAIN;
         break;
     case H264Profile::High:
-        m_avCodecContext->profile = FF_PROFILE_H264_HIGH;
+        m_avCodecContext->profile = AV_PROFILE_H264_HIGH;
         break;
     }
 
-    AVDictionary *options = buildEncodingOptions();
+    AVDictionary* options = buildEncodingOptions();
     maybeLogOptions(options);
 
     // Assign the right hardware context for encoding frames.
@@ -157,7 +164,7 @@ bool H264VAAPIEncoder::initialize(const QSize &size)
     return true;
 }
 
-int H264VAAPIEncoder::percentageToAbsoluteQuality(const std::optional<quint8> &quality)
+int H264VAAPIEncoder::percentageToAbsoluteQuality(const std::optional<quint8>& quality)
 {
     if (!quality) {
         return -1;
@@ -167,9 +174,9 @@ int H264VAAPIEncoder::percentageToAbsoluteQuality(const std::optional<quint8> &q
     return std::max(1, int(MinQuality - (m_quality.value() / 100.0) * MinQuality));
 }
 
-AVDictionary *H264VAAPIEncoder::buildEncodingOptions()
+AVDictionary* H264VAAPIEncoder::buildEncodingOptions()
 {
-    AVDictionary *options = HardwareEncoder::buildEncodingOptions();
+    AVDictionary* options = HardwareEncoder::buildEncodingOptions();
     // Disable motion estimation, not great while dragging windows but speeds up encoding by an order of magnitude
     av_dict_set(&options, "flags", "+mv4", 0);
     // Disable in-loop filtering
diff --git a/src/libopenh264encoder.cpp b/src/libopenh264encoder.cpp
index db6ed4d..294c0f2 100644
--- a/src/libopenh264encoder.cpp
+++ b/src/libopenh264encoder.cpp
@@ -21,6 +21,12 @@ extern "C" {
 
 #include "logging_record.h"
 
+#ifndef AV_PROFILE_H264_BASELINE // ffmpeg before 8.0
+#define AV_PROFILE_H264_CONSTRAINED_BASELINE FF_PROFILE_H264_CONSTRAINED_BASELINE
+#define AV_PROFILE_H264_MAIN FF_PROFILE_H264_MAIN
+#define AV_PROFILE_H264_HIGH FF_PROFILE_H264_HIGH
+#endif
+
 LibOpenH264Encoder::LibOpenH264Encoder(H264Profile profile, PipeWireProduce *produce)
     : SoftwareEncoder(produce)
     , m_profile(profile)
@@ -64,13 +70,13 @@ bool LibOpenH264Encoder::initialize(const QSize &size)
         // passes that through, but libopenh264 only allows BASELINE.
         // Until that bug is fixed there'll always be a warning that the
         // profile is not supported (https://github.com/cisco/openh264/issues/3613)
-        m_avCodecContext->profile = FF_PROFILE_H264_CONSTRAINED_BASELINE;
+        m_avCodecContext->profile = AV_PROFILE_H264_CONSTRAINED_BASELINE;
         break;
     case H264Profile::Main:
-        m_avCodecContext->profile = FF_PROFILE_H264_MAIN;
+        m_avCodecContext->profile = AV_PROFILE_H264_MAIN;
         break;
     case H264Profile::High:
-        m_avCodecContext->profile = FF_PROFILE_H264_HIGH;
+        m_avCodecContext->profile = AV_PROFILE_H264_HIGH;
         break;
     }
 
diff --git a/src/libx264encoder.cpp b/src/libx264encoder.cpp
index d9fe44f..a8f0e21 100644
--- a/src/libx264encoder.cpp
+++ b/src/libx264encoder.cpp
@@ -20,6 +20,12 @@ extern "C" {
 
 #include "logging_record.h"
 
+#ifndef AV_PROFILE_H264_BASELINE // ffmpeg before 8.0
+#define AV_PROFILE_H264_BASELINE FF_PROFILE_H264_BASELINE
+#define AV_PROFILE_H264_MAIN FF_PROFILE_H264_MAIN
+#define AV_PROFILE_H264_HIGH FF_PROFILE_H264_HIGH
+#endif
+
 using namespace Qt::StringLiterals;
 
 LibX264Encoder::LibX264Encoder(H264Profile profile, PipeWireProduce *produce)
@@ -68,13 +74,13 @@ bool LibX264Encoder::initialize(const QSize &size)
 
     switch (m_profile) {
     case H264Profile::Baseline:
-        m_avCodecContext->profile = FF_PROFILE_H264_BASELINE;
+        m_avCodecContext->profile = AV_PROFILE_H264_BASELINE;
         break;
     case H264Profile::Main:
-        m_avCodecContext->profile = FF_PROFILE_H264_MAIN;
+        m_avCodecContext->profile = AV_PROFILE_H264_MAIN;
         break;
     case H264Profile::High:
-        m_avCodecContext->profile = FF_PROFILE_H264_HIGH;
+        m_avCodecContext->profile = AV_PROFILE_H264_HIGH;
         break;
     }
 
-- 
2.51.0

openSUSE Build Service is sponsored by