Package: release.debian.org
Severity: normal
X-Debbugs-Cc: kpipew...@packages.debian.org, Debian Qt/KDE Maintainers 
<debian-qt-kde@lists.debian.org>
Control: affects -1 + src:kpipewire
User: release.debian....@packages.debian.org
Usertags: unblock

Dear Release Team,

please unblock package kpipewire.

[ Reason ]
It contains the following changes:
* Fix incorrect backport of commit 0ac4aa41 that broke desktop
  sharing. (Closes: #1109233, thanks Antonio Russo for the detailed
  analysis !)
* New upstream release (6.3.6).
  - Fix build with Qt 6.10.
* Refresh patches.
* Backport upstream commit: [9fe7a568] Adjust timers from the correct
  thread

[ Tests ]
- Original reporter of #1109233 confirmed the fix works.
- No regression spotted running Plasma.

[ Risks ]
- the fix for #1109233 is a 3 liner.
- Other changes one change from the upstream release and one backported
  patch that can easily be backported or the changes reverted.

[ Checklist ]
  [x] all changes are documented in the d/changelog
  [x] I reviewed all changes and I approve them
  [x] attach debdiff against the package in testing


Thanks !


unblock kpipewire/6.3.6-1
diff -Nru kpipewire-6.3.5/CMakeLists.txt kpipewire-6.3.6/CMakeLists.txt
--- kpipewire-6.3.5/CMakeLists.txt      2025-05-06 19:56:52.000000000 +0200
+++ kpipewire-6.3.6/CMakeLists.txt      2025-07-08 13:44:18.000000000 +0200
@@ -1,5 +1,5 @@
 cmake_minimum_required(VERSION 3.16)
-project(KPipewire VERSION "6.3.5")
+project(KPipewire VERSION "6.3.90")
 
 set(KF6_MIN_VERSION "6.10.0")
 find_package(ECM ${KF6_MIN_VERSION} REQUIRED NO_MODULE)
@@ -13,6 +13,11 @@
 include(ECMDeprecationSettings)
 
 find_package(Qt6 REQUIRED COMPONENTS DBus Quick)
+
+if (Qt6Gui_VERSION VERSION_GREATER_EQUAL "6.10.0")
+    find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED NO_MODULE)
+endif()
+
 find_package(KF6 REQUIRED COMPONENTS I18n CoreAddons)
 
 find_package(EGL REQUIRED)
diff -Nru kpipewire-6.3.5/debian/changelog kpipewire-6.3.6/debian/changelog
--- kpipewire-6.3.5/debian/changelog    2025-05-19 00:58:37.000000000 +0200
+++ kpipewire-6.3.6/debian/changelog    2025-07-15 16:45:40.000000000 +0200
@@ -1,3 +1,17 @@
+kpipewire (6.3.6-1) unstable; urgency=medium
+
+  [ Aurélien COUDERC ]
+  * Fix incorrect backport of commit 0ac4aa41 that broke desktop
+    sharing. (Closes: #1109233, thanks Antonio Russo for the detailed
+    analysis !)
+  * New upstream release (6.3.6).
+    - Fix build with Qt 6.10.
+  * Refresh patches.
+  * Backport upstream commit: [9fe7a568] Adjust timers from the correct
+    thread
+
+ -- Aurélien COUDERC <couc...@debian.org>  Tue, 15 Jul 2025 16:45:40 +0200
+
 kpipewire (6.3.5-1) unstable; urgency=medium
 
   [ Aurélien COUDERC ]
diff -Nru kpipewire-6.3.5/debian/patches/series 
kpipewire-6.3.6/debian/patches/series
--- kpipewire-6.3.5/debian/patches/series       2025-05-19 00:58:37.000000000 
+0200
+++ kpipewire-6.3.6/debian/patches/series       2025-07-15 13:42:41.000000000 
+0200
@@ -6,3 +6,4 @@
 upstream_123ae0d2_Tweak-encoding-options-for-VP9.patch
 
upstream_0ac4aa41_encodedstream-Deprecate-setActive-and-replace-with-an-explicit-API.patch
 upstream_8793ae86_encodedstream-Don-t-query-VAAPI-in-the-constructor.patch
+upstream_9fe7a568_Adjust-timers-from-the-correct-thread.patch
diff -Nru 
kpipewire-6.3.5/debian/patches/upstream_0ac4aa41_encodedstream-Deprecate-setActive-and-replace-with-an-explicit-API.patch
 
kpipewire-6.3.6/debian/patches/upstream_0ac4aa41_encodedstream-Deprecate-setActive-and-replace-with-an-explicit-API.patch
--- 
kpipewire-6.3.5/debian/patches/upstream_0ac4aa41_encodedstream-Deprecate-setActive-and-replace-with-an-explicit-API.patch
   2025-05-19 00:58:37.000000000 +0200
+++ 
kpipewire-6.3.6/debian/patches/upstream_0ac4aa41_encodedstream-Deprecate-setActive-and-replace-with-an-explicit-API.patch
   2025-07-15 13:22:09.000000000 +0200
@@ -26,8 +26,6 @@
  tests/HeadlessTest.cpp            |  20 ++++--
  6 files changed, 127 insertions(+), 49 deletions(-)
 
-diff --git a/src/pipewirebaseencodedstream.cpp 
b/src/pipewirebaseencodedstream.cpp
-index 67c5445..27ef198 100644
 --- a/src/pipewirebaseencodedstream.cpp
 +++ b/src/pipewirebaseencodedstream.cpp
 @@ -17,6 +17,8 @@ extern "C" {
@@ -62,7 +60,7 @@
  }
  
  PipeWireBaseEncodedStream::PipeWireBaseEncodedStream(QObject *parent)
-@@ -65,10 +62,10 @@ 
PipeWireBaseEncodedStream::PipeWireBaseEncodedStream(QObject *parent)
+@@ -65,10 +62,10 @@ PipeWireBaseEncodedStream::PipeWireBaseE
  
  PipeWireBaseEncodedStream::~PipeWireBaseEncodedStream()
  {
@@ -76,7 +74,7 @@
      }
  }
  
-@@ -78,7 +75,6 @@ void PipeWireBaseEncodedStream::setNodeId(uint nodeId)
+@@ -78,7 +75,6 @@ void PipeWireBaseEncodedStream::setNodeI
          return;
  
      d->m_nodeId = nodeId;
@@ -84,7 +82,7 @@
      Q_EMIT nodeIdChanged(nodeId);
  }
  
-@@ -91,7 +87,6 @@ void PipeWireBaseEncodedStream::setFd(uint fd)
+@@ -91,7 +87,6 @@ void PipeWireBaseEncodedStream::setFd(ui
          close(*d->m_fd);
      }
      d->m_fd = fd;
@@ -92,7 +90,7 @@
      Q_EMIT fdChanged(fd);
  }
  
-@@ -141,50 +136,84 @@ int PipeWireBaseEncodedStream::maxBufferSize() const
+@@ -141,50 +136,84 @@ int PipeWireBaseEncodedStream::maxBuffer
  
  void PipeWireBaseEncodedStream::setActive(bool active)
  {
@@ -206,11 +204,9 @@
  }
  
  void PipeWireBaseEncodedStream::setEncoder(Encoder encoder)
-diff --git a/src/pipewirebaseencodedstream.h b/src/pipewirebaseencodedstream.h
-index 9f4c0fd..8728252 100644
 --- a/src/pipewirebaseencodedstream.h
 +++ b/src/pipewirebaseencodedstream.h
-@@ -25,7 +25,7 @@ class KPIPEWIRE_EXPORT PipeWireBaseEncodedStream : public 
QObject
+@@ -25,7 +25,7 @@ class KPIPEWIRE_EXPORT PipeWireBaseEncod
       * Transfers the ownership of the fd, will close it when it's done with 
it.
       */
      Q_PROPERTY(uint fd READ fd WRITE setFd NOTIFY fdChanged)
@@ -270,19 +266,17 @@
 -    void refresh();
      QScopedPointer<PipeWireEncodedStreamPrivate> d;
  };
-diff --git a/src/pipewireproduce.cpp b/src/pipewireproduce.cpp
-index aa6acbb..e5b05cc 100644
 --- a/src/pipewireproduce.cpp
 +++ b/src/pipewireproduce.cpp
-@@ -201,6 +201,7 @@ void PipeWireProduce::setupStream()
-     if (!m_encoder || streamState != PW_STREAM_STATE_STREAMING) {
-         QMetaObject::invokeMethod(this, &PipeWireProduce::destroy, 
Qt::QueuedConnection);
-     }
+@@ -183,6 +183,7 @@ void PipeWireProduce::setupStream()
+         }
+     });
+     pthread_setname_np(m_outputThread.native_handle(), 
"PipeWireProduce::output");
 +    Q_EMIT started();
  }
  
- void PipeWireProduce::destroy()
-@@ -251,6 +252,7 @@ void PipeWireProduce::destroy()
+ void PipeWireProduce::deactivate()
+@@ -231,6 +232,7 @@ void PipeWireProduce::destroy()
  
      qCDebug(PIPEWIRERECORD_LOGGING) << "finished";
      cleanup();
@@ -290,11 +284,9 @@
      QThread::currentThread()->quit();
  }
  
-diff --git a/src/pipewireproduce_p.h b/src/pipewireproduce_p.h
-index 71ca34b..7cc49df 100644
 --- a/src/pipewireproduce_p.h
 +++ b/src/pipewireproduce_p.h
-@@ -154,6 +154,8 @@ public:
+@@ -151,6 +151,8 @@ public:
  
  Q_SIGNALS:
      void producedFrames();
@@ -303,11 +295,9 @@
  
  private:
      void initFiltersVaapi();
-diff --git a/src/pipewirerecord.cpp b/src/pipewirerecord.cpp
-index 7293b57..cff7ade 100644
 --- a/src/pipewirerecord.cpp
 +++ b/src/pipewirerecord.cpp
-@@ -69,7 +69,6 @@ void PipeWireRecord::setOutput(const QString &_output)
+@@ -69,7 +69,6 @@ void PipeWireRecord::setOutput(const QSt
          return;
  
      d->m_output = output;
@@ -315,11 +305,9 @@
      Q_EMIT outputChanged(output);
  }
  
-diff --git a/tests/HeadlessTest.cpp b/tests/HeadlessTest.cpp
-index 33db742..6d31f77 100644
 --- a/tests/HeadlessTest.cpp
 +++ b/tests/HeadlessTest.cpp
-@@ -55,16 +55,29 @@ void createStream(int nodeId, std::optional<int> fd = {})
+@@ -55,16 +55,29 @@ void createStream(int nodeId, std::optio
              }
              encoded->setEncoder(enc);
          }
@@ -352,7 +340,7 @@
          });
          return;
      }
-@@ -96,7 +109,6 @@ void createStream(int nodeId, std::optional<int> fd = {})
+@@ -96,7 +109,6 @@ void createStream(int nodeId, std::optio
      });
      QObject::connect(KSignalHandler::self(), &KSignalHandler::signalReceived, 
pwStream, [pwStream] {
          pwStream->setActive(false);
@@ -360,6 +348,3 @@
      });
  }
  
--- 
-GitLab
-
diff -Nru 
kpipewire-6.3.5/debian/patches/upstream_686df1e3_Tweak-compiler-warning-flags-to-reduce-unneeded-output.patch
 
kpipewire-6.3.6/debian/patches/upstream_686df1e3_Tweak-compiler-warning-flags-to-reduce-unneeded-output.patch
--- 
kpipewire-6.3.5/debian/patches/upstream_686df1e3_Tweak-compiler-warning-flags-to-reduce-unneeded-output.patch
       2025-05-19 00:58:37.000000000 +0200
+++ 
kpipewire-6.3.6/debian/patches/upstream_686df1e3_Tweak-compiler-warning-flags-to-reduce-unneeded-output.patch
       2025-07-15 13:19:38.000000000 +0200
@@ -14,11 +14,9 @@
  src/libwebpencoder.cpp | 7 -------
  2 files changed, 1 insertion(+), 8 deletions(-)
 
-diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
-index bf53693..05c06f0 100644
 --- a/src/CMakeLists.txt
 +++ b/src/CMakeLists.txt
-@@ -73,7 +73,7 @@ target_sources(KPipeWire PRIVATE
+@@ -66,7 +66,7 @@ target_sources(KPipeWire PRIVATE
  )
  
  # these are features pipewire use extensively and make it hard to look at 
compile logs
@@ -27,11 +25,9 @@
  
  target_link_libraries(KPipeWire PRIVATE Qt::Quick Qt::GuiPrivate KF6::I18n
      KF6::CoreAddons PkgConfig::PipeWire epoxy::epoxy PkgConfig::GBM 
Libdrm::Libdrm PkgConfig::LIBVA PkgConfig::LIBVA-drm)
-diff --git a/src/libwebpencoder.cpp b/src/libwebpencoder.cpp
-index 0006441..c62cecb 100644
 --- a/src/libwebpencoder.cpp
 +++ b/src/libwebpencoder.cpp
-@@ -51,9 +51,6 @@ bool LibWebPEncoder::initialize(const QSize &size)
+@@ -51,9 +51,6 @@ bool LibWebPEncoder::initialize(const QS
      m_avCodecContext->time_base = AVRational{1, 1000};
  
      AVDictionary *options = nullptr;
@@ -41,7 +37,7 @@
      if (int result = avcodec_open2(m_avCodecContext, codec, &options); result 
< 0) {
          qCWarning(PIPEWIRERECORD_LOGGING) << "Could not open codec" << 
av_err2str(result);
          return false;
-@@ -66,7 +63,3 @@ int LibWebPEncoder::percentageToAbsoluteQuality(const 
std::optional<quint8> &qua
+@@ -66,7 +63,3 @@ int LibWebPEncoder::percentageToAbsolute
  {
      return quality.value_or(-1); // Already 0-100. -1 resets to default.
  }
@@ -49,6 +45,3 @@
 -void LibWebPEncoder::applyEncodingPreference([[maybe_unused]] AVDictionary 
*options)
 -{
 -}
--- 
-GitLab
-
diff -Nru 
kpipewire-6.3.5/debian/patches/upstream_9fe7a568_Adjust-timers-from-the-correct-thread.patch
 
kpipewire-6.3.6/debian/patches/upstream_9fe7a568_Adjust-timers-from-the-correct-thread.patch
--- 
kpipewire-6.3.5/debian/patches/upstream_9fe7a568_Adjust-timers-from-the-correct-thread.patch
        1970-01-01 01:00:00.000000000 +0100
+++ 
kpipewire-6.3.6/debian/patches/upstream_9fe7a568_Adjust-timers-from-the-correct-thread.patch
        2025-07-15 13:42:41.000000000 +0200
@@ -0,0 +1,38 @@
+From 9fe7a568d1e20bb2d402d49922ae41c0cce8dde7 Mon Sep 17 00:00:00 2001
+From: David Edmundson <k...@davidedmundson.co.uk>
+Date: Thu, 26 Jun 2025 14:50:27 +0100
+Subject: [PATCH] Adjust timers from the correct thread
+
+PipeWireBaseEncodedStream moves the PipeWireProduce into another thread. It is
+therefore it's responsiblity to ensure that any calls into PipeWireProduce are
+run in the correct thread.
+
+This addresses a warning about timers.
+---
+ src/pipewirebaseencodedstream.cpp | 10 +++++++---
+ 1 file changed, 7 insertions(+), 3 deletions(-)
+
+diff --git a/src/pipewirebaseencodedstream.cpp 
b/src/pipewirebaseencodedstream.cpp
+index de51a90..b17ee1b 100644
+--- a/src/pipewirebaseencodedstream.cpp
++++ b/src/pipewirebaseencodedstream.cpp
+@@ -103,9 +103,13 @@ void PipeWireBaseEncodedStream::setMaxFramerate(const 
Fraction &framerate)
+     }
+     d->m_maxFramerate = framerate;
+ 
+-    if (d->m_produce) {
+-        d->m_produce->setMaxFramerate(d->m_maxFramerate);
+-    }
++    // produce runs in another thread
++    QMetaObject::invokeMethod(
++        d->m_produce.get(),
++        [produce = d->m_produce.get(), framerate]() {
++            produce->setMaxFramerate(framerate);
++        },
++        Qt::QueuedConnection);
+ 
+     Q_EMIT maxFramerateChanged();
+ }
+-- 
+GitLab
+
diff -Nru kpipewire-6.3.5/src/CMakeLists.txt kpipewire-6.3.6/src/CMakeLists.txt
--- kpipewire-6.3.5/src/CMakeLists.txt  2025-05-06 19:56:52.000000000 +0200
+++ kpipewire-6.3.6/src/CMakeLists.txt  2025-07-08 13:44:18.000000000 +0200
@@ -144,7 +144,7 @@
 target_link_libraries(KPipeWireRecord PUBLIC KPipeWire
     PRIVATE Qt::Core Qt::Gui KF6::CoreAddons KPipeWireDmaBuf
     PkgConfig::AVCodec PkgConfig::AVUtil PkgConfig::AVFormat 
PkgConfig::AVFilter PkgConfig::GBM PkgConfig::SWScale
-    epoxy::epoxy Libdrm::Libdrm Qt::GuiPrivate
+    epoxy::epoxy Libdrm::Libdrm
 )
 
 ecm_generate_headers(KPipeWireRecord_HEADERS
diff -Nru kpipewire-6.3.5/src/pipewirerecord.cpp 
kpipewire-6.3.6/src/pipewirerecord.cpp
--- kpipewire-6.3.5/src/pipewirerecord.cpp      2025-05-06 19:56:52.000000000 
+0200
+++ kpipewire-6.3.6/src/pipewirerecord.cpp      2025-07-08 13:44:18.000000000 
+0200
@@ -13,7 +13,6 @@
 #include <QGuiApplication>
 #include <QImage>
 #include <QPainter>
-#include <qpa/qplatformnativeinterface.h>
 
 #include <KShell>
 
diff -Nru kpipewire-6.3.5/tests/CMakeLists.txt 
kpipewire-6.3.6/tests/CMakeLists.txt
--- kpipewire-6.3.5/tests/CMakeLists.txt        2025-05-06 19:56:52.000000000 
+0200
+++ kpipewire-6.3.6/tests/CMakeLists.txt        2025-07-08 13:44:18.000000000 
+0200
@@ -40,7 +40,7 @@
 )
 
 add_executable(xdp-recordme xdp-main.cpp recordme.qrc ${XDP_SRCS} RecordMe.cpp)
-target_link_libraries(xdp-recordme Qt::DBus Qt::Quick KPipeWire Qt::GuiPrivate 
Wayland::Client Qt::WaylandClient )
+target_link_libraries(xdp-recordme Qt::DBus Qt::Quick KPipeWire 
Wayland::Client Qt::WaylandClient )
 
 option(INSTALL_TESTS "The recordme test needs installing, disabled by default 
for convenience" OFF)
 if(INSTALL_TESTS)

Reply via email to