aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/Input/wavpack/decoderwavpackfactory.cpp
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2018-05-27 21:02:29 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2018-05-27 21:02:29 +0000
commit75a3fb1184673e6bf0be1bdc1785db07ab87aaf2 (patch)
tree894cee0020fa1ced6a32e1bb6ca8b6f36325af3f /src/plugins/Input/wavpack/decoderwavpackfactory.cpp
parent9e9636ada5475874f9eeb704d2af1af7b0447e9a (diff)
downloadqmmp-75a3fb1184673e6bf0be1bdc1785db07ab87aaf2.tar.gz
qmmp-75a3fb1184673e6bf0be1bdc1785db07ab87aaf2.tar.bz2
qmmp-75a3fb1184673e6bf0be1bdc1785db07ab87aaf2.zip
enabled wavpack plugin
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@7970 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src/plugins/Input/wavpack/decoderwavpackfactory.cpp')
-rw-r--r--src/plugins/Input/wavpack/decoderwavpackfactory.cpp77
1 files changed, 49 insertions, 28 deletions
diff --git a/src/plugins/Input/wavpack/decoderwavpackfactory.cpp b/src/plugins/Input/wavpack/decoderwavpackfactory.cpp
index 4f730232f..fb52c7ee7 100644
--- a/src/plugins/Input/wavpack/decoderwavpackfactory.cpp
+++ b/src/plugins/Input/wavpack/decoderwavpackfactory.cpp
@@ -1,5 +1,5 @@
/***************************************************************************
- * Copyright (C) 2008-2017 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 *
@@ -52,35 +52,35 @@ Decoder *DecoderWavPackFactory::create(const QString &p, QIODevice *)
return new DecoderWavPack(p);
}
-QList<FileInfo *> DecoderWavPackFactory::createPlayList(const QString &fileName, bool useMetaData, QStringList *ignoredFiles)
+QList<TrackInfo *> DecoderWavPackFactory::createPlayList(const QString &path, TrackInfo::Parts parts, QStringList *ignoredFiles)
{
- QList <FileInfo*> list;
+ QList<TrackInfo *> list;
char err[80];
- int cue_len=0;
+ int cue_len = 0;
//extract metadata of one cue track
- if(fileName.contains("://"))
+ if(path.contains("://"))
{
- QString path = fileName;
- path.remove("wvpack://");
- path.remove(QRegExp("#\\d+$"));
- int track = fileName.section("#", -1).toInt();
- list = createPlayList(path, true, ignoredFiles);
+ QString filePath = path;
+ filePath.remove("wvpack://");
+ filePath.remove(QRegExp("#\\d+$"));
+ int track = filePath.section("#", -1).toInt();
+ list = createPlayList(filePath, 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;
}
#if defined(Q_OS_WIN) && defined(OPEN_FILE_UTF8)
WavpackContext *ctx = WavpackOpenFileInput (fileName.toUtf8().constData(),
err, OPEN_WVC | OPEN_TAGS | OPEN_FILE_UTF8, 0);
#else
- WavpackContext *ctx = WavpackOpenFileInput (fileName.toLocal8Bit().constData(),
+ WavpackContext *ctx = WavpackOpenFileInput (path.toLocal8Bit().constData(),
err, OPEN_WVC | OPEN_TAGS, 0);
#endif
if (!ctx)
@@ -88,15 +88,15 @@ QList<FileInfo *> DecoderWavPackFactory::createPlayList(const QString &fileName,
qWarning("DecoderWavPackFactory: error: %s", err);
return list;
}
- FileInfo *info = new FileInfo(fileName);
- if (useMetaData)
+ TrackInfo *info = new TrackInfo(path);
+ if(parts & TrackInfo::MetaData)
{
cue_len = WavpackGetTagItem (ctx, "cuesheet", NULL, 0);
if (cue_len)
{
char *value = (char*)malloc (cue_len * 2 + 1);
WavpackGetTagItem (ctx, "cuesheet", value, cue_len + 1);
- CUEParser parser(value, fileName);
+ CUEParser parser(value, path);
list = parser.createPlayList();
delete info;
info = 0;
@@ -106,31 +106,52 @@ QList<FileInfo *> DecoderWavPackFactory::createPlayList(const QString &fileName,
char value[200];
memset(value,0,sizeof(value));
WavpackGetTagItem (ctx, "Album", value, sizeof(value));
- info->setMetaData(Qmmp::ALBUM, QString::fromUtf8(value));
+ info->setValue(Qmmp::ALBUM, QString::fromUtf8(value));
WavpackGetTagItem (ctx, "Artist", value, sizeof(value));
- info->setMetaData(Qmmp::ARTIST, QString::fromUtf8(value));
+ info->setValue(Qmmp::ARTIST, QString::fromUtf8(value));
WavpackGetTagItem (ctx, "Album Artist", value, sizeof(value));
- info->setMetaData(Qmmp::ALBUMARTIST, QString::fromUtf8(value));
+ info->setValue(Qmmp::ALBUMARTIST, QString::fromUtf8(value));
WavpackGetTagItem (ctx, "Comment", value, sizeof(value));
- info->setMetaData(Qmmp::COMMENT, QString::fromUtf8(value));
+ info->setValue(Qmmp::COMMENT, QString::fromUtf8(value));
WavpackGetTagItem (ctx, "Genre", value, sizeof(value));
- info->setMetaData(Qmmp::GENRE, QString::fromUtf8(value));
+ info->setValue(Qmmp::GENRE, QString::fromUtf8(value));
WavpackGetTagItem (ctx, "Title", value, sizeof(value));
- info->setMetaData(Qmmp::TITLE, QString::fromUtf8(value));
+ info->setValue(Qmmp::TITLE, QString::fromUtf8(value));
WavpackGetTagItem (ctx, "Composer", value, sizeof(value));
- info->setMetaData(Qmmp::COMPOSER, QString::fromUtf8(value));
+ info->setValue(Qmmp::COMPOSER, QString::fromUtf8(value));
WavpackGetTagItem (ctx, "Year", value, sizeof(value));
- info->setMetaData(Qmmp::YEAR, QString::fromUtf8(value).toInt());
+ info->setValue(Qmmp::YEAR, QString::fromUtf8(value).toInt());
WavpackGetTagItem (ctx, "Track", value, sizeof(value));
- info->setMetaData(Qmmp::TRACK, QString::fromUtf8(value).toInt());
+ info->setValue(Qmmp::TRACK, QString::fromUtf8(value).toInt());
WavpackGetTagItem (ctx, "Disc", value, sizeof(value));
- info->setMetaData(Qmmp::DISCNUMBER, QString::fromUtf8(value).toInt());
+ info->setValue(Qmmp::DISCNUMBER, QString::fromUtf8(value).toInt());
}
}
- if (info)
+ if(info)
{
- info->setLength((int) WavpackGetNumSamples(ctx)/WavpackGetSampleRate(ctx));
+ info->setDuration((qint64)WavpackGetNumSamples(ctx) * 1000 / WavpackGetSampleRate(ctx));
+ 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");
+ }
+
+ 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);
+ }
list << info;
}
WavpackCloseFile (ctx);