aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/Input/cue
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2009-07-13 20:40:14 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2009-07-13 20:40:14 +0000
commit5c8df5c01f76d86a18b221cd11122abaa0da0478 (patch)
tree5f4d221af4bef348936935859db0b8b6cda69f0f /src/plugins/Input/cue
parent2df29630db7ab26bb1d50d247bd3cd11e6055211 (diff)
downloadqmmp-5c8df5c01f76d86a18b221cd11122abaa0da0478.tar.gz
qmmp-5c8df5c01f76d86a18b221cd11122abaa0da0478.tar.bz2
qmmp-5c8df5c01f76d86a18b221cd11122abaa0da0478.zip
ported cue plugin
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@1025 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src/plugins/Input/cue')
-rw-r--r--src/plugins/Input/cue/cueparser.cpp2
-rw-r--r--src/plugins/Input/cue/decoder_cue.cpp75
-rw-r--r--src/plugins/Input/cue/decoder_cue.h9
3 files changed, 31 insertions, 55 deletions
diff --git a/src/plugins/Input/cue/cueparser.cpp b/src/plugins/Input/cue/cueparser.cpp
index 7d767cf97..3b4053867 100644
--- a/src/plugins/Input/cue/cueparser.cpp
+++ b/src/plugins/Input/cue/cueparser.cpp
@@ -84,7 +84,7 @@ CUEParser::CUEParser(const QString &fileName)
}
else if (words[0] == "INDEX")
{
- if (m_infoList.isEmpty())
+ if (m_infoList.isEmpty() || words[1] != "01")
continue;
m_infoList.last ().setLength(getLength(words[2]));
m_offsets.last() = getLength(words[2]);
diff --git a/src/plugins/Input/cue/decoder_cue.cpp b/src/plugins/Input/cue/decoder_cue.cpp
index 257d6c491..ff2761549 100644
--- a/src/plugins/Input/cue/decoder_cue.cpp
+++ b/src/plugins/Input/cue/decoder_cue.cpp
@@ -18,7 +18,6 @@
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/
-#include <qmmp/constants.h>
#include <qmmp/buffer.h>
#include <qmmp/output.h>
#include <qmmp/recycler.h>
@@ -82,47 +81,43 @@ bool DecoderCUE::initialize()
{
qDebug("DecoderCUE: cannot open input");
stop();
- //m_handler->dispatch(Qmmp::NormalError);
return FALSE;
}
}
- if (!df->properties().noOutput)
+ if (df->properties().noOutput)
{
- m_output2 = Output::create(this);
- if (!m_output2)
- {
- qWarning("DecoderCUE: unable to create output");
- //m_handler->dispatch(Qmmp::FatalError);
- return FALSE;
- }
- if (!m_output2->initialize())
- {
- qWarning("SoundCore: unable to initialize output");
- delete m_output2;
- m_output2 = 0;
- //m_handler->dispatch(Qmmp::FatalError);
- return FALSE;
- }
+ qWarning("DecoderCUE: unsupported file format");
+ return FALSE;
+ }
+ m_output2 = Output::create(this);
+ if (!m_output2)
+ {
+ qWarning("DecoderCUE: unable to create output");
+ return FALSE;
+ }
+ if (!m_output2->initialize())
+ {
+ qWarning("SoundCore: unable to initialize output");
+ delete m_output2;
+ m_output2 = 0;
+ return FALSE;
}
+
m_length = parser.length(track);
m_offset = parser.offset(track);
m_decoder = df->create(this, m_input2, m_output2, path);
m_decoder->setEQ(m_bands2, m_preamp2);
m_decoder->setEQEnabled(m_useEQ2);
- CUEStateHandler *csh = new CUEStateHandler(this, m_offset, m_length);
- m_decoder->setStateHandler(csh);
- connect(csh, SIGNAL(finished()), SLOT(finish()));
connect(m_decoder, SIGNAL(playbackFinished()), SLOT(finish()));
- if (m_output2)
- m_output2->setStateHandler(m_decoder->stateHandler());
+ //replace default state handler to ignore metadata
+ m_decoder->setStateHandler(new CUEStateHandler(m_decoder));
+ m_output2->setStateHandler(m_decoder->stateHandler());
+ //prepare decoder and ouput objects
m_decoder->initialize();
- m_decoder->seek(parser.offset(track));
- if (m_output2)
- m_output2->seek(parser.offset(track));
-
+ m_decoder->setFragment(m_offset, m_length);
//send metadata
QMap<Qmmp::MetaData, QString> metaData = parser.info(track)->metaData();
- StateHandler::instance()->dispatch(metaData);
+ stateHandler()->dispatch(metaData);
return TRUE;
}
@@ -136,21 +131,15 @@ void DecoderCUE::seek(qint64 pos)
if (m_output2 && m_output2->isRunning())
{
m_output2->mutex()->lock ();
- m_output2->seek(m_offset + pos);
+ m_output2->seek(pos);
m_output2->mutex()->unlock();
if (m_decoder && m_decoder->isRunning())
{
m_decoder->mutex()->lock ();
- m_decoder->seek(m_offset + pos);
+ m_decoder->seek(pos);
m_decoder->mutex()->unlock();
}
}
- else if (m_decoder)
- {
- m_decoder->mutex()->lock ();
- m_decoder->seek(m_offset + pos);
- m_decoder->mutex()->unlock();
- }
}
void DecoderCUE::stop()
@@ -259,13 +248,9 @@ void DecoderCUE::run()
}
-CUEStateHandler::CUEStateHandler(QObject *parent, qint64 offset, qint64 length): StateHandler(parent)
-{
- m_offset = offset;
- m_length2 = length;
-}
+CUEStateHandler::CUEStateHandler(QObject *parent): StateHandler(parent){}
-CUEStateHandler::~CUEStateHandler(){};
+CUEStateHandler::~CUEStateHandler(){}
void CUEStateHandler::dispatch(qint64 elapsed,
qint64 totalTime,
@@ -274,11 +259,9 @@ void CUEStateHandler::dispatch(qint64 elapsed,
int precision,
int channels)
{
- Q_UNUSED(totalTime);
- StateHandler::instance()->dispatch(elapsed - m_offset, m_length2, bitrate,
+ StateHandler::instance()->dispatch(elapsed, totalTime, bitrate,
frequency, precision, channels);
- if (elapsed - m_offset > m_length2)
- emit finished();
+
}
void CUEStateHandler::dispatch(const QMap<Qmmp::MetaData, QString> &metaData)
diff --git a/src/plugins/Input/cue/decoder_cue.h b/src/plugins/Input/cue/decoder_cue.h
index 39d41c208..da97735df 100644
--- a/src/plugins/Input/cue/decoder_cue.h
+++ b/src/plugins/Input/cue/decoder_cue.h
@@ -64,7 +64,7 @@ class CUEStateHandler : public StateHandler
{
Q_OBJECT
public:
- CUEStateHandler(QObject *parent, qint64 offset, qint64 length);
+ CUEStateHandler(QObject *parent);
virtual ~CUEStateHandler();
void dispatch(qint64 elapsed,
@@ -77,13 +77,6 @@ public:
void dispatch(const QMap<Qmmp::MetaData, QString> &metaData);
void dispatch(const Qmmp::State &state);
-
-signals:
- void finished();
-
-private:
- qint64 m_length2;
- qint64 m_offset;
};
#endif // DECODER_CUE_H