diff options
| -rw-r--r-- | src/qmmp/qmmpaudioengine.cpp | 21 | ||||
| -rw-r--r-- | src/qmmp/statehandler.cpp | 5 |
2 files changed, 13 insertions, 13 deletions
diff --git a/src/qmmp/qmmpaudioengine.cpp b/src/qmmp/qmmpaudioengine.cpp index 8bb13cf24..719c07de1 100644 --- a/src/qmmp/qmmpaudioengine.cpp +++ b/src/qmmp/qmmpaudioengine.cpp @@ -376,24 +376,21 @@ void QmmpAudioEngine::run() m_output_at = 0; } //metadata + if(m_inputs[m_decoder]->hasMetaData()) + m_decoder->addMetaData(m_inputs[m_decoder]->takeMetaData()); + + if(m_inputs[m_decoder]->hasStreamInfo()) + StateHandler::instance()->dispatch(m_inputs[m_decoder]->takeStreamInfo()); + if(m_decoder->hasMetaData()) { QMap<Qmmp::MetaData, QString> m = m_decoder->takeMetaData(); TrackInfo info(m_inputs[m_decoder]->path()); info.setValues(m); - StateHandler::instance()->dispatch(info); - m_trackInfo = QSharedPointer<TrackInfo>(new TrackInfo(info)); - } - if(m_inputs[m_decoder]->hasMetaData()) - { - QMap<Qmmp::MetaData, QString> m = m_inputs[m_decoder]->takeMetaData(); - TrackInfo info(m_inputs[m_decoder]->path()); - info.setValues(m); - StateHandler::instance()->dispatch(info); - m_trackInfo = QSharedPointer<TrackInfo>(new TrackInfo(info)); + info.setDuration(m_decoder->totalTime()); + if(StateHandler::instance()->dispatch(info)) + m_trackInfo = QSharedPointer<TrackInfo>(new TrackInfo(info)); } - if(m_inputs[m_decoder]->hasStreamInfo()) - StateHandler::instance()->dispatch(m_inputs[m_decoder]->takeStreamInfo()); //wait more data if(m_inputs[m_decoder]->isWaiting()) { diff --git a/src/qmmp/statehandler.cpp b/src/qmmp/statehandler.cpp index c5d0aa621..ecaea3634 100644 --- a/src/qmmp/statehandler.cpp +++ b/src/qmmp/statehandler.cpp @@ -108,13 +108,16 @@ bool StateHandler::dispatch(const TrackInfo &info) if(m_info.isEmpty() || m_info.path() == info.path()) { - TrackInfo tmp = info; + TrackInfo tmp = m_info; + tmp.setPath(info.path()); if(info.parts() & TrackInfo::MetaData) tmp.setValues(info.metaData()); if(info.parts() & TrackInfo::Properties) tmp.setValues(info.properties()); if(info.parts() & TrackInfo::ReplayGainInfo) tmp.setValues(info.replayGainInfo()); + if(info.duration() > 0) + tmp.setDuration(info.duration()); if(m_info != tmp) { |
