aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/Input/flac/decoder_flac.cpp
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2019-04-27 19:58:19 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2019-04-27 19:58:19 +0000
commit66ae0bd66aabf25c13171836a3a2cbb6e8d83b23 (patch)
treefa4ae6a884cb708866d9ecd4cdb8248ce524acca /src/plugins/Input/flac/decoder_flac.cpp
parentd33ea6f849241f163c430d49e2920bf0e66dc35e (diff)
downloadqmmp-66ae0bd66aabf25c13171836a3a2cbb6e8d83b23.tar.gz
qmmp-66ae0bd66aabf25c13171836a3a2cbb6e8d83b23.tar.bz2
qmmp-66ae0bd66aabf25c13171836a3a2cbb6e8d83b23.zip
flac: using shared cue parser
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@8799 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src/plugins/Input/flac/decoder_flac.cpp')
-rw-r--r--src/plugins/Input/flac/decoder_flac.cpp36
1 files changed, 20 insertions, 16 deletions
diff --git a/src/plugins/Input/flac/decoder_flac.cpp b/src/plugins/Input/flac/decoder_flac.cpp
index 4f515b080..f45b3148e 100644
--- a/src/plugins/Input/flac/decoder_flac.cpp
+++ b/src/plugins/Input/flac/decoder_flac.cpp
@@ -29,12 +29,14 @@
#include <taglib/xiphcomment.h>
#include <taglib/tmap.h>
#include <taglib/id3v2header.h>
+#include <taglib/tfilestream.h>
+#include <taglib/id3v2framefactory.h>
#include <QObject>
#include <QFile>
#include <QIODevice>
#include <FLAC/all.h>
#include <stdint.h>
-#include "cueparser.h"
+#include <qmmp/cueparser.h>
#include "decoder_flac.h"
#define BITRATE_CALC_TIME_MS 2000
@@ -302,33 +304,35 @@ bool DecoderFLAC::initialize()
QString p = m_path;
p.remove("flac://");
p.remove(QRegExp("#\\d+$"));
- TagLib::FLAC::File fileRef(QStringToFileName(p));
+ TagLib::FileStream stream(QStringToFileName(p), true);
+ TagLib::FLAC::File fileRef(&stream, TagLib::ID3v2::FrameFactory::instance());
//looking for cuesheet comment
- TagLib::Ogg::XiphComment *xiph_comment = fileRef.xiphComment();
+ TagLib::Ogg::XiphComment *tag = fileRef.xiphComment();
+ TagLib::FLAC::Properties *ap = fileRef.audioProperties();
- if (xiph_comment && xiph_comment->fieldListMap().contains("CUESHEET"))
+ if (ap && tag && tag->fieldListMap().contains("CUESHEET"))
{
qDebug("DecoderFLAC: using cuesheet xiph comment.");
- m_parser = new CUEParser(xiph_comment->fieldListMap()["CUESHEET"].toString()
- .toCString(true), p);
+ m_parser = new CueParser(tag->fieldListMap()["CUESHEET"].toString() .toCString(true));
+ m_parser->setDuration(fileRef.audioProperties()->lengthInMilliseconds());
+ m_parser->setUrl("flac", p);
m_track = m_path.section("#", -1).toInt();
- if(m_track > m_parser->count())
+ if(m_track < 1 || m_track > m_parser->count())
{
qWarning("DecoderFLAC: invalid cuesheet xiph comment");
return false;
}
m_data->input = new QFile(p);
m_data->input->open(QIODevice::ReadOnly);
- if(xiph_comment->contains("DISCNUMBER") && !xiph_comment->fieldListMap()["DISCNUMBER"].isEmpty())
+ if(tag->contains("DISCNUMBER") && !tag->fieldListMap()["DISCNUMBER"].isEmpty())
{
- TagLib::StringList fld = xiph_comment->fieldListMap()["DISCNUMBER"];
+ TagLib::StringList fld = tag->fieldListMap()["DISCNUMBER"];
for(int i = 1; i <= m_parser->count(); i++)
{
- m_parser->info(i)->setValue(Qmmp::DISCNUMBER, TStringToQString(fld.toString()));
+ m_parser->setMetaData(i, Qmmp::DISCNUMBER, TStringToQString(fld.toString()));
}
}
- QMap<Qmmp::MetaData, QString> metaData = m_parser->info(m_track)->metaData();
- addMetaData(metaData); //send metadata
+ addMetaData(m_parser->info(m_track)->metaData()); //send metadata
}
else
{
@@ -338,7 +342,7 @@ bool DecoderFLAC::initialize()
}
else
{
- qWarning("DecoderFLAC: cannot initialize. No input.");
+ qWarning("DecoderFLAC: cannot initialize. No input.");
return false;
}
}
@@ -456,7 +460,7 @@ bool DecoderFLAC::initialize()
m_offset = m_parser->offset(m_track);
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;
@@ -557,7 +561,7 @@ void DecoderFLAC::deinit()
const QString DecoderFLAC::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();
}
@@ -573,7 +577,7 @@ void DecoderFLAC::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;
}
}