From 8acaa2ca41a930b8cb45ac90797417f0d3aa0016 Mon Sep 17 00:00:00 2001 From: Rex Dieter Date: Jun 23 2014 16:23:42 +0000 Subject: 4.7.2 --- diff --git a/.gitignore b/.gitignore index a576675..ce8373b 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -/phonon-backend-gstreamer-4.7.1.tar.xz +/phonon-backend-gstreamer-4.7.2.tar.xz diff --git a/0002-do-not-unlock-not-locked-mutexes-prevent-crashing-wi.patch b/0002-do-not-unlock-not-locked-mutexes-prevent-crashing-wi.patch deleted file mode 100644 index 65ff45c..0000000 --- a/0002-do-not-unlock-not-locked-mutexes-prevent-crashing-wi.patch +++ /dev/null @@ -1,35 +0,0 @@ -From 57f22699f6f9db224f952e7df4ac5ae246c4a37a Mon Sep 17 00:00:00 2001 -From: Harald Sitter -Date: Wed, 26 Feb 2014 17:05:11 +0100 -Subject: [PATCH 2/3] do not unlock not locked mutexes, prevent crashing with - qt5 - -handleEOS does not actually need mutex protection, or well, if it did then -unlocking would be counter productive. -from high level testing it seems that handleEOS only ought to be called -after handleAboutToFinish returned, so at that point we are done with -decision making. the other way is to have abouttonfinish waiting and -issue a state change which ought to trigger EOS while ATF is still pending -, in that case EOS will interrupt ATF which will result in essentially -the same result anyway. - -eitherway, nothing to lock, so not unlocking is the way to go ---- - gstreamer/mediaobject.cpp | 1 - - 1 file changed, 1 deletion(-) - -diff --git a/gstreamer/mediaobject.cpp b/gstreamer/mediaobject.cpp -index 02a9b68..78b4d2b 100644 ---- a/gstreamer/mediaobject.cpp -+++ b/gstreamer/mediaobject.cpp -@@ -589,7 +589,6 @@ void MediaObject::handleEndOfStream() - { // When working on EOS we do not want signals emitted to avoid bogus UI updates. - emit stateChanged(Phonon::StoppedState, m_state); - m_aboutToFinishWait.wakeAll(); -- m_aboutToFinishLock.unlock(); - m_pipeline->setState(GST_STATE_READY); - emit finished(); - } --- -1.9.0 - diff --git a/0003-Only-call-QApplication-syncX-from-the-main-thread.patch b/0003-Only-call-QApplication-syncX-from-the-main-thread.patch deleted file mode 100644 index 003d50e..0000000 --- a/0003-Only-call-QApplication-syncX-from-the-main-thread.patch +++ /dev/null @@ -1,106 +0,0 @@ -From 2cafb9db34ed1079eca22c913a48011b67ff9c70 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Dan=20Vr=C3=A1til?= -Date: Tue, 8 Apr 2014 19:46:25 +0200 -Subject: [PATCH 3/3] Only call QApplication::syncX() from the main thread - -This fixes a regression introduced in 2db4c4. In order to pass WID to gstreamer -synchronously, a Qt::DirectConnection between Pipeline signal and a VideoWidget -slot must be created. However the signal from Pipeline can be emitted from an -arbitrary thread, so we can't call QApplication::syncX() directly from the slot -callchain. This patch moves the call to VideoWidget::syncX() slot that is called -from X11Renderer via queued invocation to make sure it's always executed from the -main thread. - -FIXED-IN: 4.7.3 -BUG: 327367 -BUG: 332977 -CCBUG: 305333 ---- - gstreamer/videowidget.cpp | 13 +++++++++++++ - gstreamer/videowidget.h | 1 + - gstreamer/x11renderer.cpp | 19 +++++-------------- - 3 files changed, 19 insertions(+), 14 deletions(-) - -diff --git a/gstreamer/videowidget.cpp b/gstreamer/videowidget.cpp -index a3948ba..51b088f 100644 ---- a/gstreamer/videowidget.cpp -+++ b/gstreamer/videowidget.cpp -@@ -18,6 +18,7 @@ - - #include "videowidget.h" - #include -+#include - #include - #include - #include -@@ -81,6 +82,18 @@ void VideoWidget::updateWindowID() - render->setOverlay(); - } - -+void Gstreamer::VideoWidget::syncX() -+{ -+ Q_ASSERT(QThread::currentThread() == QApplication::instance()->thread()); -+ -+#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) -+#warning syncx -+// QApplication::syncX(); -+#else -+ QApplication::syncX(); -+#endif -+} -+ - void VideoWidget::finalizeLink() - { - connect(root()->pipeline(), SIGNAL(mouseOverActive(bool)), this, SLOT(mouseOverActive(bool))); -diff --git a/gstreamer/videowidget.h b/gstreamer/videowidget.h -index d2bac6a..f36f327 100644 ---- a/gstreamer/videowidget.h -+++ b/gstreamer/videowidget.h -@@ -87,6 +87,7 @@ public: - public slots: - void setMovieSize(const QSize &size); - void mouseOverActive(bool active); -+ void syncX(); - - protected: - virtual void keyPressEvent(QKeyEvent *event); -diff --git a/gstreamer/x11renderer.cpp b/gstreamer/x11renderer.cpp -index a8e922b..8b1d9ef 100644 ---- a/gstreamer/x11renderer.cpp -+++ b/gstreamer/x11renderer.cpp -@@ -162,14 +162,6 @@ void X11Renderer::setOverlay() - { - if (m_videoSink && GST_IS_X_OVERLAY(m_videoSink)) { - WId windowId = m_renderWidget->winId(); -- // Even if we have created a winId at this point, other X applications -- // need to be aware of it. --#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) --#warning syncx --// QApplication::syncX(); --#else -- QApplication::syncX(); --#endif - #if GST_VERSION >= GST_VERSION_CHECK(0,10,31,0) - gst_x_overlay_set_window_handle(GST_X_OVERLAY(m_videoSink), windowId); - #else -@@ -182,12 +174,11 @@ void X11Renderer::setOverlay() - - void X11Renderer::windowExposed() - { --#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) --#warning syncx --// QApplication::syncX(); --#else -- QApplication::syncX(); --#endif -+ // This can be invoked within a callchain in an arbitrary thread, so make -+ // sure we call syncX() from the main thread -+ QMetaObject::invokeMethod(m_videoWidget, "syncX", -+ Qt::QueuedConnection); -+ - if (m_videoSink && GST_IS_X_OVERLAY(m_videoSink)) - gst_x_overlay_expose(GST_X_OVERLAY(m_videoSink)); - } --- -1.9.0 - diff --git a/phonon-backend-gstreamer.spec b/phonon-backend-gstreamer.spec index 7fb1076..0f78e68 100644 --- a/phonon-backend-gstreamer.spec +++ b/phonon-backend-gstreamer.spec @@ -2,8 +2,8 @@ Summary: Gstreamer phonon backend Name: phonon-backend-gstreamer Epoch: 2 -Version: 4.7.1 -Release: 3%{?dist} +Version: 4.7.2 +Release: 1%{?dist} License: LGPLv2+ URL: http://phonon.kde.org/ @@ -12,12 +12,10 @@ Source0: phonon-backend-gstreamer-%{version}-%{snap}.tar.bz2 # run this script to generate a snapshot tarball Source1: phonon-gstreamer_snapshot.sh %else -Source0: http://download.kde.org/stable/phonon/phonon-backend-gstreamer/%{version}/phonon-backend-gstreamer-%{version}.tar.xz +Source0: http://download.kde.org/stable/phonon/phonon-backend-gstreamer/%{version}/src/phonon-backend-gstreamer-%{version}.tar.xz %endif ## upstream patches -Patch2: 0002-do-not-unlock-not-locked-mutexes-prevent-crashing-wi.patch -Patch3: 0003-Only-call-QApplication-syncX-from-the-main-thread.patch BuildRequires: automoc4 BuildRequires: cmake @@ -63,9 +61,6 @@ Requires: gstreamer-plugins-good %prep %setup -q -n phonon-backend-gstreamer-%{version} -%patch2 -p1 -b .0002 -%patch3 -p1 -b .0003 - %build mkdir -p %{_target_platform} @@ -117,6 +112,9 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &> /dev/null ||: %changelog +* Mon Jun 23 2014 Rex Dieter 4.7.2-1 +- 4.7.2 + * Sat Jun 07 2014 Fedora Release Engineering - 2:4.7.1-3 - Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild diff --git a/sources b/sources index f66939b..6bc2246 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -7c0cfab4ec0bbe1f201503e6ccc7290a phonon-backend-gstreamer-4.7.1.tar.xz +d437478c3ef2da2cda0da0abda20ef11 phonon-backend-gstreamer-4.7.2.tar.xz