Hello community,

here is the log from the commit of package phonon-backend-gstreamer-0_10 for 
openSUSE:Factory checked in at 2012-08-07 21:33:49
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/phonon-backend-gstreamer-0_10 (Old)
 and      /work/SRC/openSUSE:Factory/.phonon-backend-gstreamer-0_10.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "phonon-backend-gstreamer-0_10", Maintainer is 
"[email protected]"

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/phonon-backend-gstreamer-0_10/phonon-backend-gstreamer-0_10.changes
      2012-03-20 13:29:21.000000000 +0100
+++ 
/work/SRC/openSUSE:Factory/.phonon-backend-gstreamer-0_10.new/phonon-backend-gstreamer-0_10.changes
 2012-08-07 21:34:03.000000000 +0200
@@ -1,0 +2,14 @@
+Mon Aug  6 09:03:25 UTC 2012 - [email protected]
+
+- Update to 4.6.1 release
+  * Correctly save and resume states when fiddling with the
+    pipeline during playback (kde#297596, kde#302506)
+  * Fix metadata emission for http urls (kde#272243)
+  * Various memory leaks removed
+  * Crash fixes (kde#296606,kde#279791)
+  * Fixed random freezes related to gapless playback
+  * More useful debug output via the PHONON_BACKEND_DEBUG
+    environment variable
+- Add branch diff improving gapless fix
+
+-------------------------------------------------------------------

Old:
----
  phonon-backend-gstreamer-4.6.0.tar.xz

New:
----
  PHONON_GSTREAMER_46_BRANCH.diff
  phonon-backend-gstreamer-4.6.1.tar.xz

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

Other differences:
------------------
++++++ phonon-backend-gstreamer-0_10.spec ++++++
--- /var/tmp/diff_new_pack.NQe4yN/_old  2012-08-07 21:34:04.000000000 +0200
+++ /var/tmp/diff_new_pack.NQe4yN/_new  2012-08-07 21:34:04.000000000 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           phonon-backend-gstreamer-0_10
-Version:        4.6.0
+Version:        4.6.1
 Release:        0
 Summary:        Phonon Multimedia Platform Abstraction
 License:        LGPL-2.0+
@@ -26,6 +26,7 @@
 %define filename phonon-backend-gstreamer
 %define _phonon_version 4.6.0
 Source0:        %{filename}-%{version}.tar.xz
+Patch0:         PHONON_GSTREAMER_46_BRANCH.diff
 BuildRequires:  alsa-devel
 BuildRequires:  automoc4
 BuildRequires:  cmake
@@ -48,7 +49,7 @@
 
 %prep
 %setup -q -n %{filename}-%{version}
-
+%patch0 -p1
 %build
   # compile everything for now, actually we should compile
   # against installed phonon, but this is always the same

++++++ PHONON_GSTREAMER_46_BRANCH.diff ++++++
diff --git a/gstreamer/gstreamer.desktop.cmake 
b/gstreamer/gstreamer.desktop.cmake
index b12f533..8192852 100644
--- a/gstreamer/gstreamer.desktop.cmake
+++ b/gstreamer/gstreamer.desktop.cmake
@@ -77,7 +77,7 @@ Comment[en_GB]=Phonon GStreamer backend
 Comment[es]=Motor GStreamer para Phonon
 Comment[et]=Phononi GStreameri taustaprogramm
 Comment[eu]=Phonon GStreamer backend
-Comment[fi]=Phonon GStreamer-taustaohjelma
+Comment[fi]=Phonon GStreamer -taustaohjelma
 Comment[fr]=Moteur GStreamer pour Phonon 
 Comment[ga]=Inneall GStreamer le haghaidh Phonon
 Comment[gl]=Infraestrutura de GStreamer para Phonon
diff --git a/gstreamer/mediaobject.cpp b/gstreamer/mediaobject.cpp
index dab18ba..d1d4900 100644
--- a/gstreamer/mediaobject.cpp
+++ b/gstreamer/mediaobject.cpp
@@ -77,8 +77,9 @@ MediaObject::MediaObject(Backend *backend, QObject *parent)
         , m_waitingForNextSource(false)
         , m_waitingForPreviousSource(false)
         , m_skippingEOS(false)
-        , m_skipGapless(false)
         , m_doingEOS(false)
+        , m_skipGapless(false)
+        , m_handlingAboutToFinish(false)
 {
     qRegisterMetaType<GstCaps*>("GstCaps*");
     qRegisterMetaType<State>("State");
@@ -338,23 +339,27 @@ void MediaObject::autoDetectSubtitle()
 void MediaObject::setNextSource(const MediaSource &source)
 {
     DEBUG_BLOCK;
-    debug() << "Got next source. Waiting for end of current.";
 
     m_aboutToFinishLock.lock();
-
-    // If next source is valid and is not empty (an empty source is sent by 
Phonon if
-    // there are no more sources) skip EOS for the current source in order to 
seamlessly
-    // pass to the next source.
-    if (source.type() == Phonon::MediaSource::Invalid ||
-        source.type() == Phonon::MediaSource::Empty)
-        m_skippingEOS = false;
-    else
-        m_skippingEOS = true;
-
-    m_waitingForNextSource = true;
-    m_waitingForPreviousSource = false;
-    m_pipeline->setSource(source);
-    m_aboutToFinishWait.wakeAll();
+    if (m_handlingAboutToFinish) {
+        debug() << "Got next source. Waiting for end of current.";
+
+        // If next source is valid and is not empty (an empty source is sent 
by Phonon if
+        // there are no more sources) skip EOS for the current source in order 
to seamlessly
+        // pass to the next source.
+        if (source.type() == Phonon::MediaSource::Invalid ||
+            source.type() == Phonon::MediaSource::Empty)
+            m_skippingEOS = false;
+        else
+            m_skippingEOS = true;
+
+        m_waitingForNextSource = true;
+        m_waitingForPreviousSource = false;
+        m_skipGapless = false;
+        m_pipeline->setSource(source);
+        m_aboutToFinishWait.wakeAll();
+    } else
+        qDebug() << "Ignoring source as no aboutToFinish handling is in 
progress.";
     m_aboutToFinishLock.unlock();
 }
 
@@ -387,6 +392,7 @@ void MediaObject::setSource(const MediaSource &source)
     m_source = source;
     autoDetectSubtitle();
     m_pipeline->setSource(source);
+    m_skipGapless = false;
     m_aboutToFinishWait.wakeAll();
     //emit currentSourceChanged(source);
 }
@@ -816,10 +822,17 @@ void MediaObject::setMetaData(QMultiMap<QString, QString> 
newData)
 void MediaObject::requestState(Phonon::State state)
 {
     DEBUG_BLOCK;
-    m_aboutToFinishLock.tryLock();
-    m_skipGapless = true;
-    m_aboutToFinishWait.wakeAll();
-    m_aboutToFinishLock.unlock();
+    // Only abort handling here iff the handler is active.
+    if (m_aboutToFinishLock.tryLock()) {
+        // Note that this is not condition to unlocking, so the nesting is
+        // necessary.
+        if (m_handlingAboutToFinish) {
+            qDebug() << "Aborting aboutToFinish handling.";
+            m_skipGapless = true;
+            m_aboutToFinishWait.wakeAll();
+        }
+        m_aboutToFinishLock.unlock();
+    }
     debug() << state;
     switch (state) {
         case Phonon::PlayingState:
@@ -846,6 +859,7 @@ void MediaObject::handleAboutToFinish()
     DEBUG_BLOCK;
     debug() << "About to finish";
     m_aboutToFinishLock.lock();
+    m_handlingAboutToFinish = true;
     emit aboutToFinish();
     // Three seconds should be more than enough for any application to get 
their act together.
     // Any longer than that and they have bigger issues.  If Phonon does no 
supply a next source
@@ -853,13 +867,19 @@ void MediaObject::handleAboutToFinish()
     if (!m_skipGapless) {
       if (m_aboutToFinishWait.wait(&m_aboutToFinishLock, 3000)) {
           debug() << "Finally got a source";
+          if (m_skipGapless) { // Was explicitly set by stateChange interrupt
+              debug() << "...oh, no, just got aborted, skipping EOS";
+              m_skippingEOS = false;
+          }
       } else {
+          warning() << "aboutToFinishWait timed out!";
           m_skippingEOS = false;
       }
     } else {
       debug() << "Skipping gapless audio";
+      m_skippingEOS = false;
     }
-    m_skipGapless = false;
+    m_handlingAboutToFinish = false;
     m_aboutToFinishLock.unlock();
 }
 
diff --git a/gstreamer/mediaobject.h b/gstreamer/mediaobject.h
index 62374a2..be62eda 100644
--- a/gstreamer/mediaobject.h
+++ b/gstreamer/mediaobject.h
@@ -283,6 +283,9 @@ private:
 
     qint64 m_lastTime;
     bool m_skipGapless;
+
+    /*** Tracks whereever the MO is actively handling an aboutToFinish CB 
right now. */
+    bool m_handlingAboutToFinish;
 };
 }
 } //namespace Phonon::Gstreamer
-- 
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to