[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