aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2010-12-04 22:05:43 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2010-12-04 22:05:43 +0000
commitc08ac018c4a5c9d74c272ded434e9c664dd2ff1a (patch)
treeb278123c6151a034895c15eeb6850a01ff997e06
parent07e1d5d6dcc5c9f9e345e948267c3612e8fa87e0 (diff)
downloadqmmp-c08ac018c4a5c9d74c272ded434e9c664dd2ff1a.tar.gz
qmmp-c08ac018c4a5c9d74c272ded434e9c664dd2ff1a.tar.bz2
qmmp-c08ac018c4a5c9d74c272ded434e9c664dd2ff1a.zip
some code optimizations
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@1996 90c681e8-e032-0410-971d-27865f9a5e38
-rw-r--r--src/plugins/Input/mad/decodermadfactory.cpp1
-rw-r--r--src/qmmp/abstractengine.cpp29
-rw-r--r--src/qmmp/abstractengine.h3
-rw-r--r--src/qmmp/soundcore.cpp39
4 files changed, 46 insertions, 26 deletions
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 <QPluginLoader>
#include <QApplication>
#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<EngineFactory*> *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,31 +252,9 @@ 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);
return false;