diff options
| -rw-r--r-- | src/qmmp/qmmpaudioengine.cpp | 21 | ||||
| -rw-r--r-- | src/qmmp/statehandler.cpp | 8 | ||||
| -rw-r--r-- | src/qmmp/statehandler.h | 2 |
3 files changed, 16 insertions, 15 deletions
diff --git a/src/qmmp/qmmpaudioengine.cpp b/src/qmmp/qmmpaudioengine.cpp index 79421bfd0..8bb13cf24 100644 --- a/src/qmmp/qmmpaudioengine.cpp +++ b/src/qmmp/qmmpaudioengine.cpp @@ -357,7 +357,6 @@ void QmmpAudioEngine::run() addOffset(); //offset mutex()->unlock(); m_output->start(); - m_dithering->setFormats(m_decoder->audioParameters().format(), m_output->format()); StateHandler::instance()->dispatch(Qmmp::Buffering); StateHandler::instance()->dispatch(m_decoder->totalTime()); StateHandler::instance()->dispatch(Qmmp::Playing); @@ -384,7 +383,6 @@ void QmmpAudioEngine::run() info.setValues(m); StateHandler::instance()->dispatch(info); m_trackInfo = QSharedPointer<TrackInfo>(new TrackInfo(info)); - } if(m_inputs[m_decoder]->hasMetaData()) { @@ -486,16 +484,15 @@ void QmmpAudioEngine::run() addOffset(); //offset } } - if(m_output) - { - m_dithering->setFormats(m_decoder->audioParameters().format(), m_output->format()); - continue; - } + if(!m_output) + m_done = true; + + continue; } - flush(true); if (m_output) { + flush(true); m_output->recycler()->mutex()->lock (); // end of stream while (!m_output->recycler()->empty() && !m_user_stop) @@ -596,10 +593,10 @@ void QmmpAudioEngine::sendMetaData() { if(!m_decoder || m_inputs.isEmpty()) return; - QString url = m_inputs.value(m_decoder)->path(); - if (QFile::exists(url)) //send metadata for local files only + QString path = m_inputs.value(m_decoder)->path(); + if (QFileInfo(path).isFile()) //send metadata for local files only { - QList <TrackInfo *> list = MetaDataManager::instance()->createPlayList(url, TrackInfo::MetaData); + QList <TrackInfo *> list = MetaDataManager::instance()->createPlayList(path, TrackInfo::AllParts); if (!list.isEmpty()) { StateHandler::instance()->dispatch(*list.first()); @@ -705,6 +702,8 @@ void QmmpAudioEngine::prepareEffects(Decoder *d) m_effects << effect; tmp_effects.removeAll(effect); } + + m_dithering->setFormats(d->audioParameters().format(), m_ap.format()); } //static members diff --git a/src/qmmp/statehandler.cpp b/src/qmmp/statehandler.cpp index f02612f73..c5d0aa621 100644 --- a/src/qmmp/statehandler.cpp +++ b/src/qmmp/statehandler.cpp @@ -92,18 +92,18 @@ void StateHandler::dispatch(qint64 length) m_mutex.unlock(); } -void StateHandler::dispatch(const TrackInfo &info) +bool StateHandler::dispatch(const TrackInfo &info) { QMutexLocker locker(&m_mutex); if(info.isEmpty()) { qWarning("StateHandler: empty metadata"); - return; + return false; } if(m_state != Qmmp::Playing && m_state != Qmmp::Paused) { qWarning("StateHandler: metadata is ignored"); - return; + return false; } if(m_info.isEmpty() || m_info.path() == info.path()) @@ -120,8 +120,10 @@ void StateHandler::dispatch(const TrackInfo &info) { m_info = tmp; qApp->postEvent(parent(), new TrackInfoEvent(m_info)); + return true; } } + return false; } void StateHandler::dispatch(const QHash<QString, QString> &info) diff --git a/src/qmmp/statehandler.h b/src/qmmp/statehandler.h index 1a35c9755..790ee1195 100644 --- a/src/qmmp/statehandler.h +++ b/src/qmmp/statehandler.h @@ -61,7 +61,7 @@ public: */ void dispatch(qint64 duration); - void dispatch(const TrackInfo &info); + bool dispatch(const TrackInfo &info); /*! * Sends stream information \b info */ |
