Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package kpipewire6 for openSUSE:Factory 
checked in at 2024-10-16 23:40:43
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/kpipewire6 (Old)
 and      /work/SRC/openSUSE:Factory/.kpipewire6.new.19354 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "kpipewire6"

Wed Oct 16 23:40:43 2024 rev:14 rq:1208314 version:6.2.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/kpipewire6/kpipewire6.changes    2024-10-07 
21:47:44.895059264 +0200
+++ /work/SRC/openSUSE:Factory/.kpipewire6.new.19354/kpipewire6.changes 
2024-10-16 23:41:28.807787886 +0200
@@ -1,0 +2,11 @@
+Tue Oct 15 16:53:25 UTC 2024 - Fabian Vogt <fab...@ritter-vogt.de>
+
+- Update to 6.2.1:
+  * New bugfix release
+  * For more details see https://kde.org/announcements/plasma/6/6.2.1
+- Changes since 6.2.0:
+  * PipeWireSourceStream: work around crashes for pipewire < 0.3.49 
(kde#492400)
+  * produce: Flush remaining frames when we are deactivating (kde#471159)
+  * update version for new release
+
+-------------------------------------------------------------------

Old:
----
  kpipewire-6.2.0.tar.xz
  kpipewire-6.2.0.tar.xz.sig

New:
----
  kpipewire-6.2.1.tar.xz
  kpipewire-6.2.1.tar.xz.sig

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ kpipewire6.spec ++++++
--- /var/tmp/diff_new_pack.TBbl08/_old  2024-10-16 23:41:30.303850286 +0200
+++ /var/tmp/diff_new_pack.TBbl08/_new  2024-10-16 23:41:30.303850286 +0200
@@ -27,14 +27,14 @@
 %{!?_plasma6_version: %define _plasma6_version %(echo %{_plasma6_bugfix} | awk 
-F. '{print $1"."$2}')}
 %bcond_without released
 Name:           kpipewire6
-Version:        6.2.0
+Version:        6.2.1
 Release:        0
 Summary:        PipeWire integration for KDE Plasma
 License:        LGPL-2.0-only AND LGPL-3.0-only
 URL:            https://www.kde.org
-Source:         %{rname}-%{version}.tar.xz
+Source:         
https://download.kde.org/stable/plasma/%{version}/%{rname}-%{version}.tar.xz
 %if %{with released}
-Source1:        %{rname}-%{version}.tar.xz.sig
+Source1:        
https://download.kde.org/stable/plasma/%{version}/%{rname}-%{version}.tar.xz.sig
 Source2:        plasma.keyring
 %endif
 BuildRequires:  kf6-extra-cmake-modules

++++++ kpipewire-6.2.0.tar.xz -> kpipewire-6.2.1.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kpipewire-6.2.0/CMakeLists.txt 
new/kpipewire-6.2.1/CMakeLists.txt
--- old/kpipewire-6.2.0/CMakeLists.txt  2024-10-03 14:37:02.000000000 +0200
+++ new/kpipewire-6.2.1/CMakeLists.txt  2024-10-15 15:13:37.000000000 +0200
@@ -1,5 +1,5 @@
 cmake_minimum_required(VERSION 3.16)
-project(KPipewire VERSION "6.2.0")
+project(KPipewire VERSION "6.2.1")
 
 set(KF6_MIN_VERSION "6.5.0")
 find_package(ECM ${KF6_MIN_VERSION} REQUIRED NO_MODULE)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kpipewire-6.2.0/po/zh_CN/kpipewire6.po 
new/kpipewire-6.2.1/po/zh_CN/kpipewire6.po
--- old/kpipewire-6.2.0/po/zh_CN/kpipewire6.po  2024-10-03 14:37:02.000000000 
+0200
+++ new/kpipewire-6.2.1/po/zh_CN/kpipewire6.po  2024-10-15 15:13:37.000000000 
+0200
@@ -14,8 +14,8 @@
 "X-Crowdin-Project: kdeorg\n"
 "X-Crowdin-Project-ID: 269464\n"
 "X-Crowdin-Language: zh-CN\n"
-"X-Crowdin-File: /kf6-trunk/messages/kpipewire/kpipewire6.pot\n"
-"X-Crowdin-File-ID: 44497\n"
+"X-Crowdin-File: /kf6-stable/messages/kpipewire/kpipewire6.pot\n"
+"X-Crowdin-File-ID: 51424\n"
 
 #: pipewirecore.cpp:98
 #, kde-format
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kpipewire-6.2.0/src/pipewireproduce.cpp 
new/kpipewire-6.2.1/src/pipewireproduce.cpp
--- old/kpipewire-6.2.0/src/pipewireproduce.cpp 2024-10-03 14:37:02.000000000 
+0200
+++ new/kpipewire-6.2.1/src/pipewireproduce.cpp 2024-10-15 15:13:37.000000000 
+0200
@@ -145,6 +145,11 @@
 
             auto received = m_encoder->receivePacket();
             m_pendingEncodeFrames -= received;
+
+            // Notify the produce thread that the count of processed frames has
+            // changed and it can do cleanup if needed, making sure that that
+            // handling is done on the right thread.
+            QMetaObject::invokeMethod(this, 
&PipeWireProduce::handleEncodedFramesChanged, Qt::QueuedConnection);
         }
     });
     pthread_setname_np(m_outputThread.native_handle(), 
"PipeWireProduce::output");
@@ -174,6 +179,10 @@
     // created it in.
     Q_ASSERT_X(QThread::currentThread() == thread(), "PipeWireProduce", 
"destroy() called from a different thread than PipeWireProduce's thread");
 
+    if (!m_stream) {
+        return;
+    }
+
     if (m_passthroughThread.joinable()) {
         m_passthroughRunning = false;
         m_passthroughCondition.notify_all();
@@ -261,12 +270,42 @@
 
     disconnect(m_stream.data(), &PipeWireSourceStream::frameReceived, this, 
&PipeWireProduce::processFrame);
 
-    m_encoder->finish();
+    if (m_pendingFilterFrames <= 0 && m_pendingEncodeFrames <= 0) {
+        // If we have nothing pending, cleanup immediately.
+        m_encoder->finish();
+
+        // We want to clean up the source stream while in the input thread, 
but we
+        // need to do so while not handling any PipeWire callback as that risks
+        // crashing because we're stil executing PipeWire handling code.
+        QMetaObject::invokeMethod(this, &PipeWireProduce::destroy, 
Qt::QueuedConnection);
+    } else {
+        // If we have pending frames, wait with cleanup until all frames have 
been processed.
+        qCDebug(PIPEWIRERECORD_LOGGING) << "Waiting for frame queues to empty, 
still pending filter" << m_pendingFilterFrames << "encode"
+                                        << m_pendingEncodeFrames;
+        m_passthroughCondition.notify_all();
+    }
+}
+
+void PipeWireProduce::handleEncodedFramesChanged()
+{
+    if (!m_deactivated) {
+        return;
+    }
 
-    // We want to clean up the source stream while in the input thread, but we
-    // need to do so while not handling any PipeWire callback as that risks
-    // crashing because we're stil executing PipeWire handling code.
-    QMetaObject::invokeMethod(this, &PipeWireProduce::destroy, 
Qt::QueuedConnection);
+    // If we're deactivating but still have frames in the queue, we want to
+    // flush everything. Since at that point we are not receiving new frames, 
we
+    // need a different trigger to make the filtering thread process frames.
+    // Triggering here means the filter thread runs as fast as the encode 
thread
+    // can process the frames.
+    m_passthroughCondition.notify_all();
+
+    if (m_pendingFilterFrames <= 0) {
+        m_encoder->finish();
+
+        if (m_pendingEncodeFrames <= 0) {
+            destroy();
+        }
+    }
 }
 
 std::unique_ptr<Encoder> PipeWireProduce::makeEncoder()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kpipewire-6.2.0/src/pipewireproduce_p.h 
new/kpipewire-6.2.1/src/pipewireproduce_p.h
--- old/kpipewire-6.2.0/src/pipewireproduce_p.h 2024-10-03 14:37:02.000000000 
+0200
+++ new/kpipewire-6.2.1/src/pipewireproduce_p.h 2024-10-15 15:13:37.000000000 
+0200
@@ -97,6 +97,8 @@
 
     void setEncodingPreference(const 
PipeWireBaseEncodedStream::EncodingPreference &encodingPreference);
 
+    void handleEncodedFramesChanged();
+
     const uint m_nodeId;
     QScopedPointer<PipeWireSourceStream> m_stream;
     QString m_error;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kpipewire-6.2.0/src/pipewirerecord.cpp 
new/kpipewire-6.2.1/src/pipewirerecord.cpp
--- old/kpipewire-6.2.0/src/pipewirerecord.cpp  2024-10-03 14:37:02.000000000 
+0200
+++ new/kpipewire-6.2.1/src/pipewirerecord.cpp  2024-10-15 15:13:37.000000000 
+0200
@@ -192,11 +192,6 @@
 
 void PipeWireRecordProduce::cleanup()
 {
-    if (m_encoder) {
-        // Clear the queue of encoded packets.
-        m_encoder->receivePacket();
-    }
-
     if (m_avFormatContext) {
         if (auto result = av_write_trailer(m_avFormatContext); result < 0) {
             qCWarning(PIPEWIRERECORD_LOGGING) << "Could not write trailer";
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kpipewire-6.2.0/src/pipewiresourcestream.cpp 
new/kpipewire-6.2.1/src/pipewiresourcestream.cpp
--- old/kpipewire-6.2.0/src/pipewiresourcestream.cpp    2024-10-03 
14:37:02.000000000 +0200
+++ new/kpipewire-6.2.1/src/pipewiresourcestream.cpp    2024-10-15 
15:13:37.000000000 +0200
@@ -515,6 +515,9 @@
 
         params += buildFormat(&podBuilder, it.key(), {}, withDontFixate, 
d->maxFramerate);
     }
+
+    // BUG 492400: Workaround for pipewire < 0.3.49 
https://github.com/PipeWire/pipewire/commit/8646117374df6fa3b73f63f9b35cda78a6aaa2f4
+    params.removeAll(nullptr);
     return params;
 }
 

Reply via email to