diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2009-07-13 20:40:14 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2009-07-13 20:40:14 +0000 |
| commit | 5c8df5c01f76d86a18b221cd11122abaa0da0478 (patch) | |
| tree | 5f4d221af4bef348936935859db0b8b6cda69f0f /src/plugins/Input/cue | |
| parent | 2df29630db7ab26bb1d50d247bd3cd11e6055211 (diff) | |
| download | qmmp-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.cpp | 2 | ||||
| -rw-r--r-- | src/plugins/Input/cue/decoder_cue.cpp | 75 | ||||
| -rw-r--r-- | src/plugins/Input/cue/decoder_cue.h | 9 |
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 |
