[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdemultimedia/phonon-xine
From:       Matthias Kretz <kretz () kde ! org>
Date:       2007-06-02 14:20:27
Message-ID: 1180794027.796162.28138.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 670716 by mkretz:

stop trying to track seek calls which was broken anyway; send all seek requests to \
XineStream which then can check for m_isSeekable which is always correct - \
XineStream::isSeekable() is async, so there are bad timing conditions where a seek is \
simply ignored. This makes auto-resume at the correct position work with backend \
switching. Yay! :)

 M  +0 -16     mediaobject.cpp  
 M  +0 -2      mediaobject.h  
 M  +8 -2      xinestream.cpp  
 M  +0 -1      xinestream.h  


--- trunk/KDE/kdemultimedia/phonon-xine/mediaobject.cpp #670715:670716
@@ -48,7 +48,6 @@
     m_state(Phonon::LoadingState),
     m_stream(),
     m_videoPath(0),
-    m_seeking(0),
     m_currentTitle(1),
     m_transitionTime(0),
     m_autoplayTitles(true)
@@ -65,7 +64,6 @@
     connect(&m_stream, SIGNAL(seekableChanged(bool)), \
                SIGNAL(seekableChanged(bool)));
     connect(&m_stream, SIGNAL(hasVideoChanged(bool)), \
                SIGNAL(hasVideoChanged(bool)));
     connect(&m_stream, SIGNAL(bufferStatus(int)), SIGNAL(bufferStatus(int)));
-    connect(&m_stream, SIGNAL(seekDone()), SLOT(seekDone()));
     connect(&m_stream, SIGNAL(tick(qint64)), SIGNAL(tick(qint64)));
     connect(&m_stream, SIGNAL(availableChaptersChanged(int)), \
                SIGNAL(availableChaptersChanged(int)));
     connect(&m_stream, SIGNAL(chapterChanged(int)), SIGNAL(chapterChanged(int)));
@@ -78,15 +76,6 @@
     connect(&m_stream, SIGNAL(needNextUrl()), SLOT(needNextUrl()));
 }
 
-void MediaObject::seekDone()
-{
-    //kDebug(610) << k_funcinfo << endl;
-    --m_seeking;
-    if (0 == m_seeking) {
-        emit tick(currentTime());
-    }
-}
-
 MediaObject::~MediaObject()
 {
     foreach (AudioPath *p, m_audioPaths) {
@@ -321,12 +310,7 @@
 void MediaObject::seek(qint64 time)
 {
     //kDebug(610) << k_funcinfo << time << endl;
-    if (!isSeekable()) {
-        return;
-    }
-
     m_stream.seek(time);
-    ++m_seeking;
 }
 
 QString MediaObject::errorString() const
--- trunk/KDE/kdemultimedia/phonon-xine/mediaobject.h #670715:670716
@@ -138,7 +138,6 @@
 
         private slots:
             void handleStateChange(Phonon::State newstate, Phonon::State oldstate);
-            void seekDone();
             void needNextUrl();
             void handleAvailableTitlesChanged(int);
             void handleFinished();
@@ -162,7 +161,6 @@
             QHash<const QObject *, QString> m_currentVideoStream;
             QHash<const QObject *, QString> m_currentSubtitleStream;
 
-            int m_seeking;
             mutable int m_currentTimeOverride;
             MediaSource m_mediaSource;
             QList<QByteArray> m_titles;
--- trunk/KDE/kdemultimedia/phonon-xine/xinestream.cpp #670715:670716
@@ -229,6 +229,13 @@
         case XINE_ERROR_NO_INPUT_PLUGIN:
             error(Phonon::NormalError, i18n("cannot find input plugin for MRL [%1]", \
m_mrl.constData()));  break;
+        case XINE_ERROR_NO_DEMUX_PLUGIN:
+            if (m_mrl.startsWith("kbytestream:/")) {
+                error(Phonon::FatalError, i18n("cannot find demultiplexer plugin for \
the given media data")); +            } else {
+                error(Phonon::FatalError, i18n("cannot find demultiplexer plugin for \
MRL [%1]", m_mrl.constData())); +            }
+            break;
         default:
             {
                 const char *const *logs = xine_get_log(XineEngine::xine(), \
XINE_LOG_MSG); @@ -1254,7 +1261,7 @@
         case SeekCommand:
             m_lastSeekCommand = 0;
             ev->accept();
-            if (m_state == Phonon::ErrorState) {
+            if (m_state == Phonon::ErrorState || !m_isSeekable) {
                 return true;
             }
             {
@@ -1277,7 +1284,6 @@
                             gettimeofday(&m_lastTimeUpdate, 0);
                         }
                         //}
-                        emit seekDone();
                         break;
                     case Phonon::StoppedState:
                     case Phonon::ErrorState:
--- trunk/KDE/kdemultimedia/phonon-xine/xinestream.h #670715:670716
@@ -128,7 +128,6 @@
         void stateChanged(Phonon::State newstate, Phonon::State oldstate);
         void metaDataChanged(const QMultiMap<QString, QString>&);
         void length(qint64);
-        void seekDone();
         void needNextUrl();
         void tick(qint64);
         void prefinishMarkReached(qint32);


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic