Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package phonon4qt5-backend-vlc for 
openSUSE:Factory checked in at 2021-04-06 17:30:25
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/phonon4qt5-backend-vlc (Old)
 and      /work/SRC/openSUSE:Factory/.phonon4qt5-backend-vlc.new.2401 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "phonon4qt5-backend-vlc"

Tue Apr  6 17:30:25 2021 rev:22 rq:882844 version:0.11.3

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/phonon4qt5-backend-vlc/phonon4qt5-backend-vlc.changes
    2021-02-17 18:13:40.478045386 +0100
+++ 
/work/SRC/openSUSE:Factory/.phonon4qt5-backend-vlc.new.2401/phonon4qt5-backend-vlc.changes
  2021-04-06 17:31:50.227263257 +0200
@@ -1,0 +2,14 @@
+Thu Apr  1 13:58:57 UTC 2021 - [email protected]
+
+- Update to 0.11.3
+  * Further extended the PulseSupport shutdown introduced in 0.11.2
+    to now also apply when MediaObject reset. This additionally
+    ought to prevent crashes inside libpulse when playing multiple
+    files on the same MediaObject.
+  * Fixed a wayland crash when using surface painting (e.g. used in
+    Dolphin sidebar previews).
+  * Frame pitch and line calculation for surface painting has been
+    made much cheaper.
+  * The memory footprint of surface painting has been cut in half.
+
+-------------------------------------------------------------------

Old:
----
  phonon-backend-vlc-0.11.2.tar.xz

New:
----
  phonon-backend-vlc-0.11.3.tar.xz

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

Other differences:
------------------
++++++ phonon4qt5-backend-vlc.spec ++++++
--- /var/tmp/diff_new_pack.BwyNVz/_old  2021-04-06 17:31:50.627263709 +0200
+++ /var/tmp/diff_new_pack.BwyNVz/_new  2021-04-06 17:31:50.631263714 +0200
@@ -20,7 +20,7 @@
 %define _phonon4qt5_version 4.10.60
 %bcond_without lang
 Name:           phonon4qt5-backend-vlc
-Version:        0.11.2
+Version:        0.11.3
 Release:        0
 Summary:        Phonon VLC Backend
 License:        LGPL-2.1-or-later

++++++ phonon-backend-vlc-0.11.2.tar.xz -> phonon-backend-vlc-0.11.3.tar.xz 
++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/phonon-backend-vlc-0.11.2/CMakeLists.txt 
new/phonon-backend-vlc-0.11.3/CMakeLists.txt
--- old/phonon-backend-vlc-0.11.2/CMakeLists.txt        2021-02-04 
11:39:36.000000000 +0100
+++ new/phonon-backend-vlc-0.11.3/CMakeLists.txt        2021-03-26 
16:13:01.000000000 +0100
@@ -1,5 +1,5 @@
 cmake_minimum_required(VERSION 3.5 FATAL_ERROR)
-project(PhononVLC VERSION 0.11.2)
+project(PhononVLC VERSION 0.11.3)
 
 set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/phonon-backend-vlc-0.11.2/po/fr/phonon_vlc_qt.po 
new/phonon-backend-vlc-0.11.3/po/fr/phonon_vlc_qt.po
--- old/phonon-backend-vlc-0.11.2/po/fr/phonon_vlc_qt.po        2021-02-04 
11:39:39.000000000 +0100
+++ new/phonon-backend-vlc-0.11.3/po/fr/phonon_vlc_qt.po        2021-03-26 
16:13:04.000000000 +0100
@@ -12,7 +12,7 @@
 "POT-Creation-Date: 2019-07-01 01:50+0200\n"
 "PO-Revision-Date: 2021-01-13 17:49+0100\n"
 "Last-Translator: Xavier Besnard <[email protected]>\n"
-"Language-Team: FR\n"
+"Language-Team: French <[email protected]>\n"
 "Language: fr\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/phonon-backend-vlc-0.11.2/po/sl/phonon_vlc_qt.po 
new/phonon-backend-vlc-0.11.3/po/sl/phonon_vlc_qt.po
--- old/phonon-backend-vlc-0.11.2/po/sl/phonon_vlc_qt.po        1970-01-01 
01:00:00.000000000 +0100
+++ new/phonon-backend-vlc-0.11.3/po/sl/phonon_vlc_qt.po        2021-03-26 
16:13:08.000000000 +0100
@@ -0,0 +1,48 @@
+# Slovenian translation of phonon_vlc.
+# Copyright (C) 2011 Free Software Foundation, Inc.
+#
+#
+# Klemen Ko??ir <[email protected]>, 2011.
+# Andrej Vernekar <[email protected]>, 2012.
+# Andrej Mernik <[email protected]>, 2013.
+# Matja?? Jeran <[email protected]>, 2019.
+msgid ""
+msgstr ""
+"Project-Id-Version: phonon_vlc\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n";
+"POT-Creation-Date: \n"
+"PO-Revision-Date: 2021-03-19 15:54+0100\n"
+"Last-Translator: Matja?? Jeran <[email protected]>\n"
+"Language-Team: Slovenian <[email protected]>\n"
+"Language: sl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Translator: Andrej Mernik <[email protected]>\n"
+"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100>=3 && n"
+"%100<=4 ? 2 : 3);\n"
+"X-Generator: Poedit 2.4.2\n"
+"X-Qt-Contexts: true\n"
+
+#: src/backend.cpp:132
+msgctxt "Phonon::VLC::Backend|"
+msgid "LibVLC Failed to Initialize"
+msgstr "Za??etnih vrednosti knji??nice libVLC ni bilo mogo??e nastaviti"
+
+#: src/backend.cpp:133
+msgctxt "Phonon::VLC::Backend|"
+msgid ""
+"Phonon's VLC backend failed to start.\n"
+"\n"
+"This usually means a problem with your VLC installation, please report a bug "
+"with your distributor."
+msgstr ""
+"Zaledja VLC za Phonon ni bilo mogo??e zagnati.\n"
+"\n"
+"Razlog za to napako je ponavadi te??ava z namestitvijo programa VLC. Prosimo "
+"sporo??ite napako va??emu distributerju."
+
+#: src/devicemanager.cpp:214
+msgctxt "Phonon::VLC::DeviceManager|"
+msgid "Default"
+msgstr "Privzeto"
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/phonon-backend-vlc-0.11.2/po/zh_CN/phonon_vlc_qt.po 
new/phonon-backend-vlc-0.11.3/po/zh_CN/phonon_vlc_qt.po
--- old/phonon-backend-vlc-0.11.2/po/zh_CN/phonon_vlc_qt.po     2021-02-04 
11:39:46.000000000 +0100
+++ new/phonon-backend-vlc-0.11.3/po/zh_CN/phonon_vlc_qt.po     2021-03-26 
16:13:10.000000000 +0100
@@ -1,7 +1,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: kdeorg\n"
-"PO-Revision-Date: 2021-02-03 16:17\n"
+"PO-Revision-Date: 2021-03-14 15:44\n"
 "Language-Team: Chinese Simplified\n"
 "Language: zh_CN\n"
 "MIME-Version: 1.0\n"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/phonon-backend-vlc-0.11.2/src/mediaobject.cpp 
new/phonon-backend-vlc-0.11.3/src/mediaobject.cpp
--- old/phonon-backend-vlc-0.11.2/src/mediaobject.cpp   2021-02-04 
11:39:36.000000000 +0100
+++ new/phonon-backend-vlc-0.11.3/src/mediaobject.cpp   2021-03-26 
16:13:01.000000000 +0100
@@ -4,7 +4,7 @@
     Copyright (C) 2009 Fathi Boudra <[email protected]>
     Copyright (C) 2010 Ben Cooksley <[email protected]>
     Copyright (C) 2009-2011 vlc-phonon AUTHORS <[email protected]>
-    Copyright (C) 2010-2015 Harald Sitter <[email protected]>
+    Copyright (C) 2010-2021 Harald Sitter <[email protected]>
 
     This library is free software; you can redistribute it and/or
     modify it under the terms of the GNU Lesser General Public
@@ -109,6 +109,10 @@
     m_stateAfterBuffering = ErrorState;
 
     resetMediaController();
+
+    // Forcefully shutdown plusesupport to prevent crashing between the PS PA 
glib mainloop
+    // and the VLC PA threaded mainloop. See destructor.
+    PulseSupport::shutdown();
 }
 
 void MediaObject::play()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/phonon-backend-vlc-0.11.2/src/video/videowidget.cpp 
new/phonon-backend-vlc-0.11.3/src/video/videowidget.cpp
--- old/phonon-backend-vlc-0.11.2/src/video/videowidget.cpp     2021-02-04 
11:39:36.000000000 +0100
+++ new/phonon-backend-vlc-0.11.3/src/video/videowidget.cpp     2021-03-26 
16:13:01.000000000 +0100
@@ -3,7 +3,7 @@
     Copyright (C) 2008 Lukas Durfina <[email protected]>
     Copyright (C) 2009 Fathi Boudra <[email protected]>
     Copyright (C) 2009-2011 vlc-phonon AUTHORS <[email protected]>
-    Copyright (C) 2011-2019 Harald Sitter <[email protected]>
+    Copyright (C) 2011-2021 Harald Sitter <[email protected]>
 
     This library is free software; you can redistribute it and/or
     modify it under the terms of the GNU Lesser General Public
@@ -48,16 +48,20 @@
         // Plus VLC can actually skip frames as necessary.
         QMutexLocker lock(&m_mutex);
         Q_UNUSED(event);
+
+        if (m_frame.isNull()) {
+            return;
+        }
+
         QPainter painter(widget);
         // When using OpenGL for the QPaintEngine drawing the same QImage twice
         // does not actually result in a texture change for one reason or 
another.
-        // So we simply create new iamges for every event. This is plenty cheap
+        // So we simply create new images for every event. This is plenty cheap
         // as the QImage only points to the plane data (it can't even make it
         // properly shared as it does not know that the data belongs to a QBA).
-        painter.drawImage(drawFrameRect(),
-                          QImage(reinterpret_cast<const uchar 
*>(m_plane.constData()),
-                                 m_frame.width(), m_frame.height(),
-                                 m_frame.bytesPerLine(), m_frame.format()));
+        // TODO: investigate if this is still necessary. This was added for 
gwenview, but with Qt 5.15 the problem
+        //   can't be produced.
+        painter.drawImage(drawFrameRect(), QImage(m_frame));
         event->accept();
     }
 
@@ -67,7 +71,7 @@
     virtual void *lockCallback(void **planes)
     {
         m_mutex.lock();
-        planes[0] = (void *) m_plane.data();
+        planes[0] = (void *) m_frame.bits();
         return 0;
     }
 
@@ -90,21 +94,42 @@
                                     unsigned *pitches,
                                     unsigned *lines)
     {
+        QMutexLocker lock(&m_mutex);
+        // Surface rendering is a fallback system used when no efficient 
rendering implementation is available.
+        // As such we only support RGB32 for simplicity reasons and this will 
almost always mean software scaling.
+        // And since scaling is unavoidable anyway we take the canonical frame 
size and then scale it on our end via
+        // QPainter, again, greater simplicity at likely no real extra cost 
since this is all super inefficient anyway.
+        // Also, since aspect ratio can be change mid-playback by the user, 
doing the scaling on our end means we
+        // don't need to restart the entire player to retrigger format 
calculation.
+        // With all that in mind we simply use the canonical size and feed VLC 
the QImage's pitch and lines as
+        // effectively the VLC vout is the QImage so its constraints matter.
+
+        // per 
https://wiki.videolan.org/Hacker_Guide/Video_Filters/#Pitch.2C_visible_pitch.2C_planes_et_al.
+        // it would seem that we can use either real or visible pitches and 
lines as VLC generally will iterate the
+        // smallest value when moving data between two entities. i.e. since 
QImage will at most paint NxM anyway,
+        // we may just go with its values as calculating the real pitch/line 
of the VLC picture_t for RV32 wouldn't
+        // change the maximum pitch/lines we can paint on the output side.
+
         qstrcpy(chroma, "RV32");
-        unsigned bufferSize = 
setPitchAndLines(vlc_fourcc_GetChromaDescription(VLC_CODEC_RGB32),
-                                               *width, *height,
-                                               pitches, lines);
-        m_plane.resize(bufferSize);
-        m_frame = QImage(reinterpret_cast<const uchar *>(m_plane.constData()),
-                         *width, *height, pitches[0], QImage::Format_RGB32);
-        return bufferSize;
+        m_frame = QImage(*width, *height, QImage::Format_RGB32);
+        Q_ASSERT(!m_frame.isNull()); // ctor may construct null if allocation 
fails
+        m_frame.fill(0);
+        pitches[0] = m_frame.bytesPerLine();
+        lines[0] = m_frame.sizeInBytes() / m_frame.bytesPerLine();
+
+        return  m_frame.sizeInBytes();
     }
 
     virtual void formatCleanUpCallback()
     {
         // Lazy delete the object to avoid callbacks from VLC after deletion.
-        if (!widget)
+        if (!widget) {
+            // The widget member is set to null by the widget destructor, so 
when this condition is true the
+            // widget had already been destroyed and we can't possibly receive 
a paint event anymore, meaning
+            // we need no lock here. If it were any other way we'd have 
trouble with synchronizing deletion
+            // without deleting a locked mutex.
             delete this;
+        }
     }
 
     QRect scaleToAspect(QRect srcRect, int w, int h) const
@@ -165,9 +190,8 @@
         return drawFrameRect;
     }
 
+    // Could ReadWriteLock two frames so VLC can write while we paint.
     QImage m_frame;
-    // We need an idependent plane as QImage needs to be forced to use the 
right stride/pitch.
-    QByteArray m_plane;
     QMutex m_mutex;
 };
 

Reply via email to