aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/Input/wavpack/decoder_wavpack.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/Input/wavpack/decoder_wavpack.cpp')
-rw-r--r--src/plugins/Input/wavpack/decoder_wavpack.cpp23
1 files changed, 12 insertions, 11 deletions
diff --git a/src/plugins/Input/wavpack/decoder_wavpack.cpp b/src/plugins/Input/wavpack/decoder_wavpack.cpp
index a9daaf20a..0c75cb914 100644
--- a/src/plugins/Input/wavpack/decoder_wavpack.cpp
+++ b/src/plugins/Input/wavpack/decoder_wavpack.cpp
@@ -24,8 +24,8 @@
#include <QRegExp>
#include <math.h>
#include <stdint.h>
+#include <qmmp/cueparser.h>
#include <qmmp/buffer.h>
-#include <qmmp/output.h>
#include <stdlib.h>
#include "decoder_wavpack.h"
#include "cueparser.h"
@@ -62,7 +62,7 @@ bool DecoderWavPack::initialize()
m_chan = 0;
m_totalTime = 0;
- char err [80];
+ char err[80] = { 0 };
if (m_path.startsWith("wvpack://")) //embeded cue track
{
QString p = m_path;
@@ -80,14 +80,15 @@ bool DecoderWavPack::initialize()
return false;
}
int cue_len = WavpackGetTagItem (m_context, "cuesheet", nullptr, 0);
- char *value;
- if (cue_len)
+ if (cue_len > 0)
{
- value = (char*)malloc (cue_len * 2 + 1);
- WavpackGetTagItem (m_context, "cuesheet", value, cue_len + 1);
- m_parser = new CUEParser(value, p);
+ char *value = (char*)malloc (cue_len * 2 + 1);
+ WavpackGetTagItem(m_context, "cuesheet", value, cue_len + 1);
+ m_parser = new CueParser(value);
+ m_parser->setDuration((qint64)WavpackGetNumSamples(m_context) * 1000 / WavpackGetSampleRate(m_context));
+ m_parser->setUrl("wvpack", p);
m_track = m_path.section("#", -1).toInt();
- if(m_track > m_parser->count())
+ if(m_track < 1 || m_track > m_parser->count())
{
qWarning("DecoderWavPack: invalid cuesheet comment");
return false;
@@ -155,7 +156,7 @@ bool DecoderWavPack::initialize()
m_offset = m_parser->offset(m_track);
m_length_in_bytes = audioParameters().sampleRate() *
audioParameters().frameSize() * m_length/1000;
- setReplayGainInfo(m_parser->replayGain(m_track));
+ setReplayGainInfo(m_parser->info(m_track)->replayGainInfo());
seek(0);
}
m_totalBytes = 0;
@@ -218,7 +219,7 @@ qint64 DecoderWavPack::read(unsigned char *data, qint64 size)
const QString DecoderWavPack::nextURL() const
{
if(m_parser && m_track +1 <= m_parser->count())
- return m_parser->trackURL(m_track + 1);
+ return m_parser->url(m_track + 1);
else
return QString();
}
@@ -234,7 +235,7 @@ void DecoderWavPack::next()
audioParameters().channels() *
audioParameters().sampleSize() * m_length/1000;
addMetaData(m_parser->info(m_track)->metaData());
- setReplayGainInfo(m_parser->replayGain(m_track));
+ setReplayGainInfo(m_parser->info(m_track)->replayGainInfo());
m_totalBytes = 0;
}
}