diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2019-04-27 19:58:19 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2019-04-27 19:58:19 +0000 |
| commit | 66ae0bd66aabf25c13171836a3a2cbb6e8d83b23 (patch) | |
| tree | fa4ae6a884cb708866d9ecd4cdb8248ce524acca /src/plugins/Input/flac/decoder_flac.cpp | |
| parent | d33ea6f849241f163c430d49e2920bf0e66dc35e (diff) | |
| download | qmmp-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.cpp | 36 |
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; } } |
