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)