[neon/extras/phonon-backend-vlc/Neon/unstable] debian/patches: remove patches in neon/unstable
Harald Sitter
null at kde.org
Tue Mar 23 11:03:08 GMT 2021
Git commit bef557ac6adc5ed913e47268ddf21438d720d424 by Harald Sitter.
Committed on 23/03/2021 at 11:02.
Pushed by sitter into branch 'Neon/unstable'.
remove patches in neon/unstable
not applicable since they come from the source repo
D +0 -59 debian/patches/0001-fix-surface-painting-format-setup.patch
D +0 -110 debian/patches/0002-stop-using-our-helper-function-to-calculate-pitch-an.patch
D +0 -2 debian/patches/series
https://invent.kde.org/neon/extras/phonon-backend-vlc/commit/bef557ac6adc5ed913e47268ddf21438d720d424
diff --git a/debian/patches/0001-fix-surface-painting-format-setup.patch b/debian/patches/0001-fix-surface-painting-format-setup.patch
deleted file mode 100644
index 3777506..0000000
--- a/debian/patches/0001-fix-surface-painting-format-setup.patch
+++ /dev/null
@@ -1,59 +0,0 @@
-From f263063d1a9c748f92fa8cb021d8d8a85bbace42 Mon Sep 17 00:00:00 2001
-From: Harald Sitter <sitter at kde.org>
-Date: Fri, 19 Mar 2021 16:06:19 +0100
-Subject: [PATCH 1/2] fix surface painting format setup
-
-originally the format callback was not locked, but since we intercept
-qwidget paints that meant we'd be able to receive paints before the
-callback/setup had run. this could then result in a race condition where
-if the user was quick enough, or supposedly the system under sufficient
-load, that paints would be done on random blobs of invalid data. in
-particular when the paint would happen right as the other thread was in
-the format setup callback.
-
-to deal with this simply lock the format callback function and ensure we
-only paint when the frame has been constructed with actual data (frame
-is non-null after the callback since we feed it the plane as data,
-making it non-null)
-
-BUG: 434506
----
- src/video/videowidget.cpp | 8 +++++++-
- 1 file changed, 7 insertions(+), 1 deletion(-)
-
-diff --git a/src/video/videowidget.cpp b/src/video/videowidget.cpp
-index bc03f8e..25543fa 100644
---- a/src/video/videowidget.cpp
-+++ b/src/video/videowidget.cpp
-@@ -3,7 +3,7 @@
- Copyright (C) 2008 Lukas Durfina <lukas.durfina at gmail.com>
- Copyright (C) 2009 Fathi Boudra <fabo at kde.org>
- Copyright (C) 2009-2011 vlc-phonon AUTHORS <kde-multimedia at kde.org>
-- Copyright (C) 2011-2019 Harald Sitter <sitter at kde.org>
-+ Copyright (C) 2011-2021 Harald Sitter <sitter at kde.org>
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
-@@ -48,6 +48,11 @@ public:
- // 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.
-@@ -90,6 +95,7 @@ private:
- unsigned *pitches,
- unsigned *lines)
- {
-+ QMutexLocker lock(&m_mutex);
- qstrcpy(chroma, "RV32");
- unsigned bufferSize = setPitchAndLines(vlc_fourcc_GetChromaDescription(VLC_CODEC_RGB32),
- *width, *height,
---
-2.25.1
-
diff --git a/debian/patches/0002-stop-using-our-helper-function-to-calculate-pitch-an.patch b/debian/patches/0002-stop-using-our-helper-function-to-calculate-pitch-an.patch
deleted file mode 100644
index 09d8ac9..0000000
--- a/debian/patches/0002-stop-using-our-helper-function-to-calculate-pitch-an.patch
+++ /dev/null
@@ -1,110 +0,0 @@
-From 1fe55de0df172829722bab864f05351f244c116e Mon Sep 17 00:00:00 2001
-From: Harald Sitter <sitter at kde.org>
-Date: Tue, 23 Mar 2021 11:19:44 +0100
-Subject: [PATCH 2/2] stop using our helper function to calculate pitch and
- lines
-
-the surface painter was more inefficient than it needed to be by
-manually calculating a pitch and stride but then constructing a qimage
-anyway. after some research it seems that we can simply construct our
-qimage and pass its picture values to VLC with the assumption that VLC
-will adjust the data as it gets passed into vmem output (i.e. our data
-blob). this then also allow us to get rid of the intermediate plane
-bytearray and simply use the memory the qimage allocates anyway.
-
-CCBUG: 434506
----
- src/video/videowidget.cpp | 48 +++++++++++++++++++++++++++------------
- 1 file changed, 33 insertions(+), 15 deletions(-)
-
-diff --git a/src/video/videowidget.cpp b/src/video/videowidget.cpp
-index 25543fa..35d9025 100644
---- a/src/video/videowidget.cpp
-+++ b/src/video/videowidget.cpp
-@@ -59,10 +59,9 @@ public:
- // 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();
- }
-
-@@ -72,7 +71,7 @@ private:
- virtual void *lockCallback(void **planes)
- {
- m_mutex.lock();
-- planes[0] = (void *) m_plane.data();
-+ planes[0] = (void *) m_frame.bits();
- return 0;
- }
-
-@@ -96,21 +95,41 @@ private:
- 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
-@@ -171,9 +190,8 @@ private:
- 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;
- };
-
---
-2.25.1
-
diff --git a/debian/patches/series b/debian/patches/series
deleted file mode 100644
index bc9cc47..0000000
--- a/debian/patches/series
+++ /dev/null
@@ -1,2 +0,0 @@
-0001-fix-surface-painting-format-setup.patch
-0002-stop-using-our-helper-function-to-calculate-pitch-an.patch
More information about the Neon-commits
mailing list