diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2018-05-27 09:54:53 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2018-05-27 09:54:53 +0000 |
| commit | c955fb39c62596a38e63f00bd802aac48f2d7db0 (patch) | |
| tree | cabdd51892af80ab35ae0af0b4ee3d8a060f9c71 /src/plugins/Input/flac/decoderflacfactory.cpp | |
| parent | 5b0ac983106a2116cc46b34d57adb3689c8cd4b8 (diff) | |
| download | qmmp-c955fb39c62596a38e63f00bd802aac48f2d7db0.tar.gz qmmp-c955fb39c62596a38e63f00bd802aac48f2d7db0.tar.bz2 qmmp-c955fb39c62596a38e63f00bd802aac48f2d7db0.zip | |
ported flac plugin to new api
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@7962 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src/plugins/Input/flac/decoderflacfactory.cpp')
| -rw-r--r-- | src/plugins/Input/flac/decoderflacfactory.cpp | 106 |
1 files changed, 61 insertions, 45 deletions
diff --git a/src/plugins/Input/flac/decoderflacfactory.cpp b/src/plugins/Input/flac/decoderflacfactory.cpp index 82332d83c..0be3739b0 100644 --- a/src/plugins/Input/flac/decoderflacfactory.cpp +++ b/src/plugins/Input/flac/decoderflacfactory.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2008-2016 by Ilya Kotov * + * Copyright (C) 2008-2018 by Ilya Kotov * * forkotov02@ya.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -66,9 +66,9 @@ Decoder *DecoderFLACFactory::create(const QString &path, QIODevice *i) return new DecoderFLAC(path, i); } -QList<FileInfo *> DecoderFLACFactory::createPlayList(const QString &fileName, bool useMetaData, QStringList *ignoredFiles) +QList<TrackInfo*> DecoderFLACFactory::createPlayList(const QString &path, TrackInfo::Parts parts, QStringList *ignoredFiles) { - QList <FileInfo*> list; + QList <TrackInfo*> list; TagLib::Ogg::XiphComment *tag = 0; TagLib::FLAC::Properties *ap = 0; @@ -76,67 +76,53 @@ QList<FileInfo *> DecoderFLACFactory::createPlayList(const QString &fileName, bo TagLib::Ogg::FLAC::File *oggFlacFile = 0; //extract metadata of the one cue track - if(fileName.contains("://")) + if(path.contains("://")) { - QString path = fileName; + QString path = path; path.remove("flac://"); path.remove(QRegExp("#\\d+$")); - int track = fileName.section("#", -1).toInt(); - list = createPlayList(path, true, ignoredFiles); + int track = path.section("#", -1).toInt(); + list = createPlayList(path, parts, ignoredFiles); if (list.isEmpty() || track <= 0 || track > list.count()) { qDeleteAll(list); list.clear(); return list; } - FileInfo *info = list.takeAt(track - 1); + TrackInfo *info = list.takeAt(track - 1); qDeleteAll(list); - return QList<FileInfo *>() << info; + return QList<TrackInfo *>() << info; } - TagLib::FileStream stream(QStringToFileName(fileName), true); + TagLib::FileStream stream(QStringToFileName(path), true); - if(fileName.endsWith(".flac", Qt::CaseInsensitive)) + if(path.endsWith(".flac", Qt::CaseInsensitive)) { flacFile = new TagLib::FLAC::File(&stream, TagLib::ID3v2::FrameFactory::instance()); - tag = useMetaData ? flacFile->xiphComment() : 0; + tag = parts ? flacFile->xiphComment() : 0; ap = flacFile->audioProperties(); } - else if(fileName.endsWith(".oga", Qt::CaseInsensitive)) + else if(path.endsWith(".oga", Qt::CaseInsensitive)) { oggFlacFile = new TagLib::Ogg::FLAC::File(&stream); - tag = useMetaData ? oggFlacFile->tag() : 0; + tag = parts ? oggFlacFile->tag() : 0; ap = oggFlacFile->audioProperties(); } else return list; - FileInfo *info = new FileInfo(fileName); - if (tag && !tag->isEmpty()) + TrackInfo *info = new TrackInfo(path); + if(tag && !tag->isEmpty()) { - info->setMetaData(Qmmp::ALBUM, - QString::fromUtf8(tag->album().toCString(true)).trimmed()); - info->setMetaData(Qmmp::ARTIST, - QString::fromUtf8(tag->artist().toCString(true)).trimmed()); - info->setMetaData(Qmmp::COMMENT, - QString::fromUtf8(tag->comment().toCString(true)).trimmed()); - info->setMetaData(Qmmp::GENRE, - QString::fromUtf8(tag->genre().toCString(true)).trimmed()); - info->setMetaData(Qmmp::TITLE, - QString::fromUtf8(tag->title().toCString(true)).trimmed()); - info->setMetaData(Qmmp::YEAR, tag->year()); - info->setMetaData(Qmmp::TRACK, tag->track()); - if (tag->fieldListMap().contains("CUESHEET")) { - CUEParser parser(tag->fieldListMap()["CUESHEET"].toString().toCString(true), fileName); + CUEParser parser(tag->fieldListMap()["CUESHEET"].toString().toCString(true), path); if(tag->contains("DISCNUMBER") && !tag->fieldListMap()["DISCNUMBER"].isEmpty()) { TagLib::StringList fld = tag->fieldListMap()["DISCNUMBER"]; for(int i = 1; i <= parser.count(); i++) { - parser.info(i)->setMetaData(Qmmp::DISCNUMBER, - QString::fromUtf8(fld.toString().toCString(true)).trimmed()); + parser.info(i)->setValue(Qmmp::DISCNUMBER, TStringToQString(fld.toString())); } } list = parser.createPlayList(); @@ -148,20 +134,50 @@ QList<FileInfo *> DecoderFLACFactory::createPlayList(const QString &fileName, bo return list; } - //additional metadata - TagLib::StringList fld; - if(!(fld = tag->fieldListMap()["ALBUMARTIST"]).isEmpty()) - info->setMetaData(Qmmp::ALBUMARTIST, - QString::fromUtf8(fld.front().toCString(true)).trimmed()); - if(!(fld = tag->fieldListMap()["COMPOSER"]).isEmpty()) - info->setMetaData(Qmmp::COMPOSER, - QString::fromUtf8(fld.front().toCString(true)).trimmed()); - if(!(fld = tag->fieldListMap()["DISCNUMBER"]).isEmpty()) - info->setMetaData(Qmmp::DISCNUMBER, - QString::fromUtf8(fld.front().toCString(true)).trimmed()); + if(parts & TrackInfo::MetaData) + { + info->setValue(Qmmp::ALBUM, TStringToQString(tag->album())); + info->setValue(Qmmp::ARTIST, TStringToQString(tag->artist())); + info->setValue(Qmmp::COMMENT, TStringToQString(tag->comment())); + info->setValue(Qmmp::GENRE, TStringToQString(tag->genre())); + info->setValue(Qmmp::TITLE, TStringToQString(tag->title())); + info->setValue(Qmmp::YEAR, tag->year()); + info->setValue(Qmmp::TRACK, tag->track()); + //additional metadata + TagLib::StringList fld; + if(!(fld = tag->fieldListMap()["ALBUMARTIST"]).isEmpty()) + info->setValue(Qmmp::ALBUMARTIST, TStringToQString(fld.front())); + if(!(fld = tag->fieldListMap()["COMPOSER"]).isEmpty()) + info->setValue(Qmmp::COMPOSER, TStringToQString(fld.front())); + if(!(fld = tag->fieldListMap()["DISCNUMBER"]).isEmpty()) + info->setValue(Qmmp::DISCNUMBER, TStringToQString(fld.front())); + } } if(ap) - info->setLength(ap->length()); + { + info->setDuration(ap->lengthInMilliseconds()); + if(parts & TrackInfo::Properties) + { + 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"); + } + } + 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())); + } + list << info; if(flacFile) delete flacFile; @@ -170,7 +186,7 @@ QList<FileInfo *> DecoderFLACFactory::createPlayList(const QString &fileName, bo return list; } -MetaDataModel*DecoderFLACFactory::createMetaDataModel(const QString &path, QObject *parent) +MetaDataModel* DecoderFLACFactory::createMetaDataModel(const QString &path, QObject *parent) { if (!path.contains("://") || path.startsWith("flac://")) return new FLACMetaDataModel(path, parent); |
