commit phonon-backend-gstreamer-0_10 for openSUSE:Factory
![](https://seccdn.libravatar.org/avatar/e2145bc5cf53dda95c308a3c75e8fef3.jpg?s=120&d=mm&r=g)
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 "kde-maintainers@suse.de" 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 - wstephenson@suse.com + +- 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: opensuse-commit+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-commit+help@opensuse.org
participants (1)
-
root@hilbert.suse.de