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