From c08ac018c4a5c9d74c272ded434e9c664dd2ff1a Mon Sep 17 00:00:00 2001 From: trialuser02 Date: Sat, 4 Dec 2010 22:05:43 +0000 Subject: some code optimizations git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@1996 90c681e8-e032-0410-971d-27865f9a5e38 --- src/plugins/Input/mad/decodermadfactory.cpp | 1 - src/qmmp/abstractengine.cpp | 29 +++++++++++++++++++++ src/qmmp/abstractengine.h | 3 +++ src/qmmp/soundcore.cpp | 39 +++++++++++------------------ 4 files changed, 46 insertions(+), 26 deletions(-) (limited to 'src') diff --git a/src/plugins/Input/mad/decodermadfactory.cpp b/src/plugins/Input/mad/decodermadfactory.cpp index 39f31d9da..77d6b3ed2 100644 --- a/src/plugins/Input/mad/decodermadfactory.cpp +++ b/src/plugins/Input/mad/decodermadfactory.cpp @@ -55,7 +55,6 @@ bool DecoderMADFactory::supports(const QString &source) const return true; } } - qDebug("false"); return false; } diff --git a/src/qmmp/abstractengine.cpp b/src/qmmp/abstractengine.cpp index a9115d777..a5af83637 100644 --- a/src/qmmp/abstractengine.cpp +++ b/src/qmmp/abstractengine.cpp @@ -23,6 +23,7 @@ #include #include #include "enginefactory.h" +#include "qmmpaudioengine.h" #include "qmmp.h" #include "abstractengine.h" @@ -93,6 +94,34 @@ void AbstractEngine::checkFactories() } } +AbstractEngine *AbstractEngine::create(InputSource *s, QObject *parent) +{ + AbstractEngine *engine = new QmmpAudioEngine(parent); //internal engine + if(!engine->enqueue(s)) + { + engine->deleteLater(); + engine = 0; + } + else + return engine; + + + foreach(EngineFactory *f, *m_factories) + { + if(!isEnabled(f)) + continue; + engine = f->create(parent); //engine plugin + if(!engine->enqueue(s)) + { + engine->deleteLater(); + engine = 0; + } + else + break; + } + return engine; +} + QList *AbstractEngine::factories() { checkFactories(); diff --git a/src/qmmp/abstractengine.h b/src/qmmp/abstractengine.h index 5792bb775..007288d1f 100644 --- a/src/qmmp/abstractengine.h +++ b/src/qmmp/abstractengine.h @@ -79,6 +79,9 @@ public: * Returns wait condition pointer. */ QWaitCondition *cond(); + + + static AbstractEngine *create(InputSource *s, QObject *parent = 0); /*! * Returns a list of decoder factories. */ diff --git a/src/qmmp/soundcore.cpp b/src/qmmp/soundcore.cpp index b0dd90cdd..bb51780c5 100644 --- a/src/qmmp/soundcore.cpp +++ b/src/qmmp/soundcore.cpp @@ -227,8 +227,19 @@ bool SoundCore::enqueue(InputSource *s) m_url = s->url(); if(!m_engine) { - m_engine = new QmmpAudioEngine(this); - connect(m_engine, SIGNAL(playbackFinished()), SIGNAL(finished())); + if((m_engine = AbstractEngine::create(s, this))) + { + connect(m_engine, SIGNAL(playbackFinished()), SIGNAL(finished())); + m_engine->play(); + m_handler->setCurrentEngine(m_engine); + return true; + } + else + { + s->deleteLater(); + m_handler->setCurrentEngine(0); + return false; + } } if(m_engine->enqueue(s)) @@ -241,30 +252,8 @@ bool SoundCore::enqueue(InputSource *s) } else { - //current engine doesn't support this stream, trying to find another - AbstractEngine *engine = new QmmpAudioEngine(this); //internal engine - if(!engine->enqueue(s)) - { - engine->deleteLater(); - engine = 0; - } - + AbstractEngine *engine = AbstractEngine::create(s, this); if(!engine) - { - foreach(EngineFactory *f, *AbstractEngine::factories()) - { - engine = f->create(this); //engine plugin - if(!engine->enqueue(s)) - { - engine->deleteLater(); - engine = 0; - } - else - break; - } - } - - if(!engine) //unsupported file format { s->deleteLater(); m_handler->setCurrentEngine(0); -- cgit v1.2.3-13-gbd6f