Bug#1109591: unblock: kpipewire/6.3.6-1
Package: release.debian.org
Severity: normal
X-Debbugs-Cc: kpipewire@packages.debian.org, Debian Qt/KDE Maintainers <debian-qt-kde@lists.debian.org>
Control: affects -1 + src:kpipewire
User: release.debian.org@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 <coucouf@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 <kde@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 to: