aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/qmmp/qmmpaudioengine.cpp21
-rw-r--r--src/qmmp/statehandler.cpp5
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)
{