From 66ae0bd66aabf25c13171836a3a2cbb6e8d83b23 Mon Sep 17 00:00:00 2001 From: trialuser02 Date: Sat, 27 Apr 2019 19:58:19 +0000 Subject: 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 --- src/plugins/Input/flac/decoderflacfactory.cpp | 93 +++++++++++++-------------- 1 file changed, 45 insertions(+), 48 deletions(-) (limited to 'src/plugins/Input/flac/decoderflacfactory.cpp') diff --git a/src/plugins/Input/flac/decoderflacfactory.cpp b/src/plugins/Input/flac/decoderflacfactory.cpp index 74066316b..05d9c7881 100644 --- a/src/plugins/Input/flac/decoderflacfactory.cpp +++ b/src/plugins/Input/flac/decoderflacfactory.cpp @@ -27,7 +27,7 @@ #include #include #include -#include "cueparser.h" +#include #include "decoder_flac.h" #include "flacmetadatamodel.h" #include "decoderflacfactory.h" @@ -67,23 +67,17 @@ Decoder *DecoderFLACFactory::create(const QString &path, QIODevice *i) QList DecoderFLACFactory::createPlayList(const QString &path, TrackInfo::Parts parts, QStringList *ignoredFiles) { - //extract metadata of the one cue track - if(path.contains("://")) + Q_UNUSED(ignoredFiles); + + int track = -1; //cue track + QString filePath = path; + + if(path.contains("://")) //is it cue track? { - QString filePath = path; filePath.remove("flac://"); filePath.remove(QRegExp("#\\d+$")); - int track = filePath.section("#", -1).toInt(); - QList list = createPlayList(filePath, TrackInfo::Properties, ignoredFiles); - if (list.isEmpty() || track <= 0 || track > list.count()) - { - qDeleteAll(list); - list.clear(); - return list; - } - TrackInfo *info = list.takeAt(track - 1); - qDeleteAll(list); - return QList() << info; + track = filePath.section("#", -1).toInt(); + parts = TrackInfo::AllParts; //extract all metadata for single cue track } TrackInfo *info = new TrackInfo(path); @@ -117,12 +111,33 @@ QList DecoderFLACFactory::createPlayList(const QString &path, TrackI return QList(); } + if((parts & TrackInfo::Properties) && ap) + { + info->setValue(Qmmp::BITRATE, ap->bitrate()); + info->setValue(Qmmp::SAMPLERATE, ap->sampleRate()); + info->setValue(Qmmp::CHANNELS, ap->channels()); + info->setValue(Qmmp::BITS_PER_SAMPLE, ap->bitsPerSample()); + info->setValue(Qmmp::FORMAT_NAME, flacFile ? "FLAC" : "Ogg FLAC"); + info->setDuration(ap->lengthInMilliseconds()); + } + + if((parts & TrackInfo::ReplayGainInfo) && tag && !tag->isEmpty()) + { + TagLib::Ogg::FieldListMap items = tag->fieldListMap(); + if (items.contains("REPLAYGAIN_TRACK_GAIN")) + info->setValue(Qmmp::REPLAYGAIN_TRACK_GAIN,TStringToQString(items["REPLAYGAIN_TRACK_GAIN"].front())); + if (items.contains("REPLAYGAIN_TRACK_PEAK")) + info->setValue(Qmmp::REPLAYGAIN_TRACK_PEAK,TStringToQString(items["REPLAYGAIN_TRACK_PEAK"].front())); + if (items.contains("REPLAYGAIN_ALBUM_GAIN")) + info->setValue(Qmmp::REPLAYGAIN_ALBUM_GAIN,TStringToQString(items["REPLAYGAIN_ALBUM_GAIN"].front())); + if (items.contains("REPLAYGAIN_ALBUM_PEAK")) + info->setValue(Qmmp::REPLAYGAIN_ALBUM_PEAK,TStringToQString(items["REPLAYGAIN_ALBUM_PEAK"].front())); + } + if((parts & TrackInfo::MetaData) && tag && !tag->isEmpty()) { - if (tag->fieldListMap().contains("CUESHEET")) + if (tag->fieldListMap().contains("CUESHEET") && ap) { - delete info; - QByteArray data(tag->fieldListMap()["CUESHEET"].toString().toCString(true)); QString diskNumber; @@ -132,19 +147,24 @@ QList DecoderFLACFactory::createPlayList(const QString &path, TrackI diskNumber = TStringToQString(fld.toString()).trimmed(); } - if(flacFile) - delete flacFile; - if(oggFlacFile) - delete oggFlacFile; + CueParser parser(data); - CUEParser parser(data, path); if(!diskNumber.isEmpty()) { for(int i = 1; i <= parser.count(); ++i) - parser.info(i)->setValue(Qmmp::DISCNUMBER, diskNumber); + parser.setMetaData(i, Qmmp::DISCNUMBER, diskNumber); } + parser.setDuration(ap->lengthInMilliseconds()); + parser.setProperties(info->properties()); + parser.setUrl("flac", path); + + if(flacFile) + delete flacFile; + if(oggFlacFile) + delete oggFlacFile; - return parser.createPlayList(); + delete info; + return (track > 0) ? parser.createPlayList(track) : parser.createPlayList(); } info->setValue(Qmmp::ALBUM, TStringToQString(tag->album())); @@ -165,29 +185,6 @@ QList DecoderFLACFactory::createPlayList(const QString &path, TrackI } - if((parts & TrackInfo::Properties) && ap) - { - info->setValue(Qmmp::BITRATE, ap->bitrate()); - info->setValue(Qmmp::SAMPLERATE, ap->sampleRate()); - info->setValue(Qmmp::CHANNELS, ap->channels()); - info->setValue(Qmmp::BITS_PER_SAMPLE, ap->bitsPerSample()); - info->setValue(Qmmp::FORMAT_NAME, flacFile ? "FLAC" : "Ogg FLAC"); - info->setDuration(ap->lengthInMilliseconds()); - } - - if((parts & TrackInfo::ReplayGainInfo) && tag && !tag->isEmpty()) - { - TagLib::Ogg::FieldListMap items = tag->fieldListMap(); - if (items.contains("REPLAYGAIN_TRACK_GAIN")) - info->setValue(Qmmp::REPLAYGAIN_TRACK_GAIN,TStringToQString(items["REPLAYGAIN_TRACK_GAIN"].front())); - if (items.contains("REPLAYGAIN_TRACK_PEAK")) - info->setValue(Qmmp::REPLAYGAIN_TRACK_PEAK,TStringToQString(items["REPLAYGAIN_TRACK_PEAK"].front())); - if (items.contains("REPLAYGAIN_ALBUM_GAIN")) - info->setValue(Qmmp::REPLAYGAIN_ALBUM_GAIN,TStringToQString(items["REPLAYGAIN_ALBUM_GAIN"].front())); - if (items.contains("REPLAYGAIN_ALBUM_PEAK")) - info->setValue(Qmmp::REPLAYGAIN_ALBUM_PEAK,TStringToQString(items["REPLAYGAIN_ALBUM_PEAK"].front())); - } - if(flacFile) delete flacFile; if(oggFlacFile) -- cgit v1.2.3-13-gbd6f