diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2019-04-28 09:57:16 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2019-04-28 09:57:16 +0000 |
| commit | 4d8df087fb7eb80ac100e5024348b0917e46e7dd (patch) | |
| tree | 2a2f9aa942f98e1209fc4fedbc89501ab923b8f6 /src/plugins/Input/wavpack/decoderwavpackfactory.cpp | |
| parent | f9e1ec0ba4f33fcfc74eb7f200589721f6a7566a (diff) | |
| download | qmmp-4d8df087fb7eb80ac100e5024348b0917e46e7dd.tar.gz qmmp-4d8df087fb7eb80ac100e5024348b0917e46e7dd.tar.bz2 qmmp-4d8df087fb7eb80ac100e5024348b0917e46e7dd.zip | |
wavpack: using shared cue parser
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@8801 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src/plugins/Input/wavpack/decoderwavpackfactory.cpp')
| -rw-r--r-- | src/plugins/Input/wavpack/decoderwavpackfactory.cpp | 100 |
1 files changed, 50 insertions, 50 deletions
diff --git a/src/plugins/Input/wavpack/decoderwavpackfactory.cpp b/src/plugins/Input/wavpack/decoderwavpackfactory.cpp index 3c4b8e1bd..3b6944bcf 100644 --- a/src/plugins/Input/wavpack/decoderwavpackfactory.cpp +++ b/src/plugins/Input/wavpack/decoderwavpackfactory.cpp @@ -19,10 +19,11 @@ ***************************************************************************/ #include <QMessageBox> +#include <QFileInfo> +#include <qmmp/cueparser.h> #include "wavpackmetadatamodel.h" #include "decoder_wavpack.h" #include "decoderwavpackfactory.h" -#include "cueparser.h" // DecoderWavPackFactory bool DecoderWavPackFactory::canDecode(QIODevice *input) const @@ -37,7 +38,7 @@ DecoderProperties DecoderWavPackFactory::properties() const properties.name = tr("WavPack Plugin"); properties.filters << "*.wv"; properties.description = tr("WavPack Files"); - //properties.contentType = ; + properties.contentTypes << "audio/x-wavpack"; properties.shortName = "wavpack"; properties.hasAbout = true; properties.hasSettings = false; @@ -53,38 +54,31 @@ Decoder *DecoderWavPackFactory::create(const QString &p, QIODevice *) QList<TrackInfo *> DecoderWavPackFactory::createPlayList(const QString &path, TrackInfo::Parts parts, QStringList *ignoredFiles) { - //extract metadata of 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("wvpack://"); filePath.remove(QRegExp("#\\d+$")); - int track = filePath.section("#", -1).toInt(); - QList<TrackInfo *> list = createPlayList(filePath, parts, 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<TrackInfo *>() << info; + track = path.section("#", -1).toInt(); + parts = TrackInfo::AllParts; //extract all metadata for single cue track } - TrackInfo *info = new TrackInfo(path); + TrackInfo *info = new TrackInfo(filePath); if(parts == TrackInfo::NoParts) return QList<TrackInfo *>() << info; - char err[80]; - int cue_len = 0; + char err[80] = { 0 }; #if defined(Q_OS_WIN) && defined(OPEN_FILE_UTF8) - WavpackContext *ctx = WavpackOpenFileInput (path.toUtf8().constData(), + WavpackContext *ctx = WavpackOpenFileInput (filePath.toUtf8().constData(), err, OPEN_WVC | OPEN_TAGS | OPEN_FILE_UTF8, 0); #else - WavpackContext *ctx = WavpackOpenFileInput (path.toLocal8Bit().constData(), + WavpackContext *ctx = WavpackOpenFileInput (filePath.toLocal8Bit().constData(), err, OPEN_WVC | OPEN_TAGS, 0); #endif if (!ctx) @@ -94,18 +88,47 @@ QList<TrackInfo *> DecoderWavPackFactory::createPlayList(const QString &path, Tr return QList<TrackInfo *>(); } + if(parts & TrackInfo::Properties) + { + info->setValue(Qmmp::BITRATE, WavpackGetAverageBitrate(ctx, 1)); + info->setValue(Qmmp::SAMPLERATE, WavpackGetSampleRate(ctx)); + info->setValue(Qmmp::CHANNELS, WavpackGetNumChannels(ctx)); + info->setValue(Qmmp::BITS_PER_SAMPLE, WavpackGetBitsPerSample(ctx)); + info->setValue(Qmmp::FORMAT_NAME, "WavPack"); + info->setValue(Qmmp::FILE_SIZE, QFileInfo(filePath).size()); //adds file size for cue tracks + info->setDuration((qint64)WavpackGetNumSamples(ctx) * 1000 / WavpackGetSampleRate(ctx)); + } + + if(parts & TrackInfo::ReplayGainInfo) + { + char value[200] = { 0 }; + WavpackGetTagItem(ctx, "REPLAYGAIN_TRACK_GAIN", value, sizeof(value)); + info->setValue(Qmmp::REPLAYGAIN_TRACK_GAIN, value); + WavpackGetTagItem(ctx, "REPLAYGAIN_TRACK_PEAK", value, sizeof(value)); + info->setValue(Qmmp::REPLAYGAIN_TRACK_PEAK, value); + WavpackGetTagItem(ctx, "REPLAYGAIN_ALBUM_GAIN", value, sizeof(value)); + info->setValue(Qmmp::REPLAYGAIN_ALBUM_GAIN, value); + WavpackGetTagItem(ctx, "REPLAYGAIN_ALBUM_PEAK", value, sizeof(value)); + info->setValue(Qmmp::REPLAYGAIN_ALBUM_PEAK, value); + } + if(parts & TrackInfo::MetaData) { - cue_len = WavpackGetTagItem (ctx, "cuesheet", nullptr, 0); - if (cue_len) + int cue_len = WavpackGetTagItem (ctx, "cuesheet", nullptr, 0); + if(cue_len > 0) { - delete info; - char value[cue_len + 1]; + char value[cue_len + 1] = { 0 }; memset(value, 0, cue_len + 1); WavpackGetTagItem(ctx, "cuesheet", value, cue_len + 1); + + CueParser parser(value); + parser.setDuration((qint64)WavpackGetNumSamples(ctx) * 1000 / WavpackGetSampleRate(ctx)); + parser.setProperties(info->properties()); + parser.setUrl("wvpack", filePath); + WavpackCloseFile(ctx); - CUEParser parser(value, path); - return parser.createPlayList(); + delete info; + return (track > 0) ? parser.createPlayList(track) : parser.createPlayList(); } else { @@ -133,29 +156,6 @@ QList<TrackInfo *> DecoderWavPackFactory::createPlayList(const QString &path, Tr } } - if(parts & TrackInfo::Properties) - { - info->setValue(Qmmp::BITRATE, WavpackGetAverageBitrate(ctx, 1)); - info->setValue(Qmmp::SAMPLERATE, WavpackGetSampleRate(ctx)); - info->setValue(Qmmp::CHANNELS, WavpackGetNumChannels(ctx)); - info->setValue(Qmmp::BITS_PER_SAMPLE, WavpackGetBitsPerSample(ctx)); - info->setValue(Qmmp::FORMAT_NAME, "WavPack"); - info->setDuration((qint64)WavpackGetNumSamples(ctx) * 1000 / WavpackGetSampleRate(ctx)); - } - - if(parts & TrackInfo::ReplayGainInfo) - { - char value[200] = { 0 }; - WavpackGetTagItem(ctx, "REPLAYGAIN_TRACK_GAIN", value, sizeof(value)); - info->setValue(Qmmp::REPLAYGAIN_TRACK_GAIN, value); - WavpackGetTagItem(ctx, "REPLAYGAIN_TRACK_PEAK", value, sizeof(value)); - info->setValue(Qmmp::REPLAYGAIN_TRACK_PEAK, value); - WavpackGetTagItem(ctx, "REPLAYGAIN_ALBUM_GAIN", value, sizeof(value)); - info->setValue(Qmmp::REPLAYGAIN_ALBUM_GAIN, value); - WavpackGetTagItem(ctx, "REPLAYGAIN_ALBUM_PEAK", value, sizeof(value)); - info->setValue(Qmmp::REPLAYGAIN_ALBUM_PEAK, value); - } - WavpackCloseFile (ctx); return QList<TrackInfo *>() << info; } |
