Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package kpipewire for openSUSE:Factory 
checked in at 2023-03-02 23:02:18
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/kpipewire (Old)
 and      /work/SRC/openSUSE:Factory/.kpipewire.new.31432 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "kpipewire"

Thu Mar  2 23:02:18 2023 rev:10 rq:1068261 version:5.27.2

Changes:
--------
--- /work/SRC/openSUSE:Factory/kpipewire/kpipewire.changes      2023-02-24 
18:07:03.469029942 +0100
+++ /work/SRC/openSUSE:Factory/.kpipewire.new.31432/kpipewire.changes   
2023-03-02 23:02:34.330911588 +0100
@@ -1,0 +2,13 @@
+Tue Feb 28 17:34:15 UTC 2023 - Fabian Vogt <fab...@ritter-vogt.de>
+
+- Update to 5.27.2
+  * New bugfix release
+  * For more details please see:
+  * https://kde.org/announcements/plasma/5/5.27.2
+- Changes since 5.27.1:
+  * PipewireSourceItem: Expose stream state
+  * Finish the recording when the last frame has arrived
+  * Export logging categories where they belong
+  * sourcestream: Allocate the buffer outside together with the pods
+
+-------------------------------------------------------------------

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

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

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

Other differences:
------------------
++++++ kpipewire.spec ++++++
--- /var/tmp/diff_new_pack.sZ2G0L/_old  2023-03-02 23:02:34.890914124 +0100
+++ /var/tmp/diff_new_pack.sZ2G0L/_new  2023-03-02 23:02:34.894914142 +0100
@@ -21,7 +21,7 @@
 %{!?_plasma5_bugfix: %global _plasma5_bugfix %{version}}
 %bcond_without released
 Name:           kpipewire
-Version:        5.27.1
+Version:        5.27.2
 Release:        0
 Summary:        PipeWire integration for KDE Plasma
 License:        LGPL-2.0-only AND LGPL-3.0-only

++++++ kpipewire-5.27.1.tar.xz -> kpipewire-5.27.2.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kpipewire-5.27.1/CMakeLists.txt 
new/kpipewire-5.27.2/CMakeLists.txt
--- old/kpipewire-5.27.1/CMakeLists.txt 2023-02-21 12:36:51.000000000 +0100
+++ new/kpipewire-5.27.2/CMakeLists.txt 2023-02-28 13:18:22.000000000 +0100
@@ -1,6 +1,6 @@
 cmake_minimum_required(VERSION 3.16)
 project(KPipewire)
-set(PROJECT_VERSION "5.27.1")
+set(PROJECT_VERSION "5.27.2")
 set(PROJECT_VERSION_MAJOR 5)
 
 set(KF5_MIN_VERSION "5.102.0")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kpipewire-5.27.1/po/zh_CN/kpipewire5.po 
new/kpipewire-5.27.2/po/zh_CN/kpipewire5.po
--- old/kpipewire-5.27.1/po/zh_CN/kpipewire5.po 2023-02-21 12:36:51.000000000 
+0100
+++ new/kpipewire-5.27.2/po/zh_CN/kpipewire5.po 2023-02-28 13:18:22.000000000 
+0100
@@ -3,7 +3,7 @@
 "Project-Id-Version: kdeorg\n"
 "Report-Msgid-Bugs-To: https://bugs.kde.org\n";
 "POT-Creation-Date: 2022-05-31 00:52+0000\n"
-"PO-Revision-Date: 2023-02-15 11:08\n"
+"PO-Revision-Date: 2023-02-24 12:59\n"
 "Last-Translator: \n"
 "Language-Team: Chinese Simplified\n"
 "Language: zh_CN\n"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kpipewire-5.27.1/src/CMakeLists.txt 
new/kpipewire-5.27.2/src/CMakeLists.txt
--- old/kpipewire-5.27.1/src/CMakeLists.txt     2023-02-21 12:36:51.000000000 
+0100
+++ new/kpipewire-5.27.2/src/CMakeLists.txt     2023-02-28 13:18:22.000000000 
+0100
@@ -32,7 +32,7 @@
 )
 
 ecm_qt_install_logging_categories(
-    EXPORT KPipeWire
+    EXPORT KPipeWireRecord
     FILE kpipewirerecord.categories
     DESTINATION "${KDE_INSTALL_LOGGINGCATEGORIESDIR}"
 )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kpipewire-5.27.1/src/pipewirerecord.cpp 
new/kpipewire-5.27.2/src/pipewirerecord.cpp
--- old/kpipewire-5.27.1/src/pipewirerecord.cpp 2023-02-21 12:36:51.000000000 
+0100
+++ new/kpipewire-5.27.2/src/pipewirerecord.cpp 2023-02-28 13:18:22.000000000 
+0100
@@ -167,11 +167,11 @@
         return;
     }
     connect(m_stream.get(), &PipeWireSourceStream::streamParametersChanged, 
this, &PipeWireRecordProduce::setupStream);
+    connect(m_stream.get(), &PipeWireSourceStream::stateChanged, this, 
&PipeWireRecordProduce::stateChanged);
 }
 
-PipeWireRecordProduce::~PipeWireRecordProduce() noexcept
+PipeWireRecordProduce::~PipeWireRecordProduce()
 {
-    finish();
 }
 
 void PipeWireRecordProduceThread::run()
@@ -190,13 +190,17 @@
 
 void PipeWireRecordProduceThread::deactivate()
 {
+    m_producer->m_deactivated = true;
     if (m_producer) {
         m_producer->m_stream->setActive(false);
     }
 }
 
-void PipeWireRecordProduce::finish()
+void PipeWireRecordProduce::stateChanged(pw_stream_state state)
 {
+    if (state != PW_STREAM_STATE_PAUSED || !m_deactivated) {
+        return;
+    }
     if (!m_stream) {
         qCDebug(PIPEWIRERECORD_LOGGING) << "finished without a stream";
         return;
@@ -216,6 +220,7 @@
         av_free(m_avCodecContext);
         avformat_free_context(m_avFormatContext);
     }
+    QThread::currentThread()->quit();
 }
 
 QString PipeWireRecord::extension()
@@ -355,7 +360,6 @@
         d->m_recordThread->start();
     } else if (d->m_recordThread) {
         d->m_recordThread->deactivate();
-        d->m_recordThread->quit();
 
         connect(d->m_recordThread.get(), 
&PipeWireRecordProduceThread::finished, this, [this] {
             qCDebug(PIPEWIRERECORD_LOGGING) << "produce thread finished" << 
d->m_output;
@@ -364,7 +368,6 @@
             Q_EMIT stateChanged();
         });
         d->m_produceThreadFinished = false;
-        d->m_recordThread.release();
     }
     Q_EMIT stateChanged();
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kpipewire-5.27.1/src/pipewirerecord_p.h 
new/kpipewire-5.27.2/src/pipewirerecord_p.h
--- old/kpipewire-5.27.1/src/pipewirerecord_p.h 2023-02-21 12:36:51.000000000 
+0100
+++ new/kpipewire-5.27.2/src/pipewirerecord_p.h 2023-02-28 13:18:22.000000000 
+0100
@@ -56,7 +56,6 @@
     PipeWireRecordProduce(const QByteArray &encoder, uint nodeId, uint fd, 
const QString &output);
     ~PipeWireRecordProduce() override;
 
-    void finish();
     QString error() const
     {
         return m_error;
@@ -68,6 +67,7 @@
     void processFrame(const PipeWireFrame &frame);
     void updateTextureImage(const QImage &image, const PipeWireFrame &frame);
     void render(const PipeWireFrame &frame);
+    void stateChanged(pw_stream_state state);
 
     AVCodecContext *m_avCodecContext = nullptr;
     const AVCodec *m_codec = nullptr;
@@ -93,6 +93,7 @@
     DmaBufHandler m_dmabufHandler;
     uint m_lastKeyFrame = 0;
     int64_t m_lastPts = -1;
+    QAtomicInt m_deactivated = false;
 };
 
 class PipeWireRecordProduceThread : public QThread
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kpipewire-5.27.1/src/pipewiresourceitem.cpp 
new/kpipewire-5.27.2/src/pipewiresourceitem.cpp
--- old/kpipewire-5.27.1/src/pipewiresourceitem.cpp     2023-02-21 
12:36:51.000000000 +0100
+++ new/kpipewire-5.27.2/src/pipewiresourceitem.cpp     2023-02-28 
13:18:22.000000000 +0100
@@ -177,7 +177,9 @@
         d->m_stream->setActive(isVisible() && isComponentComplete());
 
         connect(d->m_stream.data(), &PipeWireSourceStream::frameReceived, 
this, &PipeWireSourceItem::processFrame);
+        connect(d->m_stream.data(), &PipeWireSourceStream::stateChanged, this, 
&PipeWireSourceItem::stateChanged);
     }
+    Q_EMIT stateChanged();
 }
 
 void PipeWireSourceItem::setNodeId(uint nodeId)
@@ -410,6 +412,27 @@
     }
 }
 
+PipeWireSourceItem::StreamState PipeWireSourceItem::state() const
+{
+    if (!d->m_stream) {
+        return StreamState::Unconnected;
+    }
+    switch (d->m_stream->state()) {
+    case PW_STREAM_STATE_ERROR:
+        return StreamState::Error;
+    case PW_STREAM_STATE_UNCONNECTED:
+        return StreamState::Unconnected;
+    case PW_STREAM_STATE_CONNECTING:
+        return StreamState::Connecting;
+    case PW_STREAM_STATE_PAUSED:
+        return StreamState::Paused;
+    case PW_STREAM_STATE_STREAMING:
+        return StreamState::Streaming;
+    default:
+        return StreamState::Error;
+    }
+}
+
 uint PipeWireSourceItem::fd() const
 {
     return d->m_fd.value_or(0);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kpipewire-5.27.1/src/pipewiresourceitem.h 
new/kpipewire-5.27.2/src/pipewiresourceitem.h
--- old/kpipewire-5.27.1/src/pipewiresourceitem.h       2023-02-21 
12:36:51.000000000 +0100
+++ new/kpipewire-5.27.2/src/pipewiresourceitem.h       2023-02-28 
13:18:22.000000000 +0100
@@ -31,6 +31,10 @@
 class KPIPEWIRE_EXPORT PipeWireSourceItem : public QQuickItem
 {
     Q_OBJECT
+
+    /// Returns where the streams current state
+    Q_PROPERTY(StreamState state READ state NOTIFY stateChanged)
+
     /// Specify the pipewire node id that we want to play
     Q_PROPERTY(uint nodeId READ nodeId WRITE setNodeId NOTIFY nodeIdChanged)
 
@@ -41,6 +45,9 @@
      */
     Q_PROPERTY(uint fd READ fd WRITE setFd NOTIFY fdChanged RESET resetFd)
 public:
+    enum class StreamState { Error, Unconnected, Connecting, Paused, Streaming 
};
+    Q_ENUM(StreamState);
+
     PipeWireSourceItem(QQuickItem *parent = nullptr);
     ~PipeWireSourceItem() override;
 
@@ -57,9 +64,12 @@
     void componentComplete() override;
     void releaseResources() override;
 
+    StreamState state() const;
+
 Q_SIGNALS:
     void nodeIdChanged(uint nodeId);
     void fdChanged(uint fd);
+    void stateChanged();
 
 private:
     void itemChange(ItemChange change, const ItemChangeData &data) override;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kpipewire-5.27.1/src/pipewiresourcestream.cpp 
new/kpipewire-5.27.2/src/pipewiresourcestream.cpp
--- old/kpipewire-5.27.1/src/pipewiresourcestream.cpp   2023-02-21 
12:36:51.000000000 +0100
+++ new/kpipewire-5.27.2/src/pipewiresourcestream.cpp   2023-02-28 
13:18:22.000000000 +0100
@@ -57,6 +57,7 @@
     std::optional<std::chrono::nanoseconds> m_currentPresentationTimestamp;
 
     QAtomicInt m_stopped = false;
+    pw_stream_state m_state = PW_STREAM_STATE_UNCONNECTED;
 
     spa_video_info_raw videoFormat;
     QString m_error;
@@ -174,6 +175,8 @@
 {
     PipeWireSourceStream *pw = static_cast<PipeWireSourceStream *>(data);
     qCDebug(PIPEWIRE_LOGGING) << "state changed" << 
pw_stream_state_as_string(old) << "->" << pw_stream_state_as_string(state) << 
error_message;
+    pw->d->m_state = state;
+    Q_EMIT pw->stateChanged(state, old);
 
     switch (state) {
     case PW_STREAM_STATE_ERROR:
@@ -198,7 +201,9 @@
 void PipeWireSourceStream::onRenegotiate(void *data, uint64_t)
 {
     PipeWireSourceStream *pw = static_cast<PipeWireSourceStream *>(data);
-    QVector<const spa_pod *> params = pw->createFormatsParams();
+    uint8_t buffer[4096];
+    spa_pod_builder podBuilder = SPA_POD_BUILDER_INIT(buffer, sizeof(buffer));
+    auto params = pw->createFormatsParams(podBuilder);
     pw_stream_update_params(pw->d->pwStream, params.data(), params.size());
 }
 
@@ -328,6 +333,11 @@
     return QSize(d->videoFormat.size.width, d->videoFormat.size.height);
 }
 
+pw_stream_state PipeWireSourceStream::state() const
+{
+    return d->m_state;
+}
+
 std::optional< std::chrono::nanoseconds > 
PipeWireSourceStream::currentPresentationTimestamp() const
 {
     return d->m_currentPresentationTimestamp;
@@ -375,11 +385,9 @@
     return d->pwNodeId;
 }
 
-QVector<const spa_pod *> PipeWireSourceStream::createFormatsParams()
+QVector<const spa_pod *> 
PipeWireSourceStream::createFormatsParams(spa_pod_builder podBuilder)
 {
     const auto pwServerVersion = d->pwCore->serverVersion();
-    uint8_t buffer[4096];
-    spa_pod_builder podBuilder = SPA_POD_BUILDER_INIT(buffer, sizeof(buffer));
     const QVector<spa_video_format> formats =
         {SPA_VIDEO_FORMAT_RGBx, SPA_VIDEO_FORMAT_RGBA, SPA_VIDEO_FORMAT_BGRx, 
SPA_VIDEO_FORMAT_BGRA, SPA_VIDEO_FORMAT_RGB, SPA_VIDEO_FORMAT_BGR};
     QVector<const spa_pod *> params;
@@ -426,7 +434,9 @@
 
     d->m_renegotiateEvent = pw_loop_add_event(d->pwCore->loop(), 
onRenegotiate, this);
 
-    QVector<const spa_pod *> params = createFormatsParams();
+    uint8_t buffer[4096];
+    spa_pod_builder podBuilder = SPA_POD_BUILDER_INIT(buffer, sizeof(buffer));
+    auto params = createFormatsParams(podBuilder);
     pw_stream_flags s = (pw_stream_flags)(PW_STREAM_FLAG_DONT_RECONNECT | 
PW_STREAM_FLAG_AUTOCONNECT);
     if (pw_stream_connect(d->pwStream, PW_DIRECTION_INPUT, d->pwNodeId, s, 
params.data(), params.size()) != 0) {
         qCWarning(PIPEWIRE_LOGGING) << "Could not connect to stream";
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kpipewire-5.27.1/src/pipewiresourcestream.h 
new/kpipewire-5.27.2/src/pipewiresourcestream.h
--- old/kpipewire-5.27.1/src/pipewiresourcestream.h     2023-02-21 
12:36:51.000000000 +0100
+++ new/kpipewire-5.27.2/src/pipewiresourcestream.h     2023-02-28 
13:18:22.000000000 +0100
@@ -82,6 +82,7 @@
     QString error() const;
 
     QSize size() const;
+    pw_stream_state state() const;
     bool createStream(uint nodeid, int fd);
     void setActive(bool active);
     void setDamageEnabled(bool withDamage);
@@ -100,12 +101,13 @@
     void stopStreaming();
     void streamParametersChanged();
     void frameReceived(const PipeWireFrame &frame);
+    void stateChanged(pw_stream_state state, pw_stream_state oldState);
 
 private:
     static void onStreamParamChanged(void *data, uint32_t id, const struct 
spa_pod *format);
     static void onStreamStateChanged(void *data, pw_stream_state old, 
pw_stream_state state, const char *error_message);
     static void onRenegotiate(void *data, uint64_t);
-    QVector<const spa_pod *> createFormatsParams();
+    QVector<const spa_pod *> createFormatsParams(spa_pod_builder podBuilder);
 
     void coreFailed(const QString &errorMessage);
     QScopedPointer<PipeWireSourceStreamPrivate> d;

Reply via email to