diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2009-02-06 20:05:37 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2009-02-06 20:05:37 +0000 |
| commit | 37ec3ed3be7dbb33bb34a1dcd09758b6f537652f (patch) | |
| tree | 6f4ff266750c8d0a0d40e37f229f3e4477e0a41f /src/plugins/Input/wavpack/decoderwavpackfactory.cpp | |
| parent | 02ef6f2f2131d2e75846d937064f4e14ac3b27fd (diff) | |
| download | qmmp-37ec3ed3be7dbb33bb34a1dcd09758b6f537652f.tar.gz qmmp-37ec3ed3be7dbb33bb34a1dcd09758b6f537652f.tar.bz2 qmmp-37ec3ed3be7dbb33bb34a1dcd09758b6f537652f.zip | |
wavpack embeded cue support (thanks to Dmitry Kostin)
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@780 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src/plugins/Input/wavpack/decoderwavpackfactory.cpp')
| -rw-r--r-- | src/plugins/Input/wavpack/decoderwavpackfactory.cpp | 69 |
1 files changed, 41 insertions, 28 deletions
diff --git a/src/plugins/Input/wavpack/decoderwavpackfactory.cpp b/src/plugins/Input/wavpack/decoderwavpackfactory.cpp index 72beb95c7..ac4aafbb0 100644 --- a/src/plugins/Input/wavpack/decoderwavpackfactory.cpp +++ b/src/plugins/Input/wavpack/decoderwavpackfactory.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2008 by Ilya Kotov * + * Copyright (C) 2008-2009 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -20,15 +20,10 @@ #include <QtGui> -extern "C" -{ -#include <wavpack/wavpack.h> -} - #include "detailsdialog.h" #include "decoder_wavpack.h" #include "decoderwavpackfactory.h" - +#include "cueparser.h" // DecoderWavPackFactory @@ -54,7 +49,7 @@ const DecoderProperties DecoderWavPackFactory::properties() const properties.hasAbout = TRUE; properties.hasSettings = FALSE; properties.noInput = TRUE; - properties.protocols = "file"; + properties.protocols = "file wvpack"; return properties; } @@ -69,35 +64,53 @@ QList<FileInfo *> DecoderWavPackFactory::createPlayList(const QString &fileName, { QList <FileInfo*> list; char err[80]; - WavpackContext *ctx = WavpackOpenFileInput (fileName.toLocal8Bit(), err, - OPEN_WVC | OPEN_TAGS, 0); + int cue_len=0; + FileInfo *info; + WavpackContext *ctx = WavpackOpenFileInput (fileName.toLocal8Bit(), err, OPEN_WVC | OPEN_TAGS, 0); if (!ctx) { qWarning("DecoderWavPackFactory: error: %s", err); return list; } - FileInfo *info = new FileInfo(fileName); + info = new FileInfo(fileName); if (useMetaData) { - char value[200]; - WavpackGetTagItem (ctx, "Album", value, sizeof(value)); - info->setMetaData(Qmmp::ALBUM, QString::fromUtf8(value)); - WavpackGetTagItem (ctx, "Artist", value, sizeof(value)); - info->setMetaData(Qmmp::ARTIST, QString::fromUtf8(value)); - WavpackGetTagItem (ctx, "Comment", value, sizeof(value)); - info->setMetaData(Qmmp::COMMENT, QString::fromUtf8(value)); - WavpackGetTagItem (ctx, "Genre", value, sizeof(value)); - info->setMetaData(Qmmp::GENRE, QString::fromUtf8(value)); - WavpackGetTagItem (ctx, "Title", value, sizeof(value)); - info->setMetaData(Qmmp::TITLE, QString::fromUtf8(value)); - WavpackGetTagItem (ctx, "Year", value, sizeof(value)); - info->setMetaData(Qmmp::YEAR, QString::fromUtf8(value).toInt()); - WavpackGetTagItem (ctx, "Track", value, sizeof(value)); - info->setMetaData(Qmmp::TRACK, QString::fromUtf8(value).toInt()); + cue_len = WavpackGetTagItem (ctx, "cuesheet", NULL, 0); + char *value; + if (cue_len) + { + value = (char*)malloc (cue_len * 2 + 1); + WavpackGetTagItem (ctx, "cuesheet", value, cue_len + 1); + CUEParser parser(value, fileName); + list = parser.createPlayList(); + } + else + { + + char value[200]; + WavpackGetTagItem (ctx, "Album", value, sizeof(value)); + info->setMetaData(Qmmp::ALBUM, QString::fromUtf8(value)); + WavpackGetTagItem (ctx, "Artist", value, sizeof(value)); + info->setMetaData(Qmmp::ARTIST, QString::fromUtf8(value)); + WavpackGetTagItem (ctx, "Comment", value, sizeof(value)); + info->setMetaData(Qmmp::COMMENT, QString::fromUtf8(value)); + WavpackGetTagItem (ctx, "Genre", value, sizeof(value)); + info->setMetaData(Qmmp::GENRE, QString::fromUtf8(value)); + WavpackGetTagItem (ctx, "Title", value, sizeof(value)); + info->setMetaData(Qmmp::TITLE, QString::fromUtf8(value)); + WavpackGetTagItem (ctx, "Year", value, sizeof(value)); + info->setMetaData(Qmmp::YEAR, QString::fromUtf8(value).toInt()); + WavpackGetTagItem (ctx, "Track", value, sizeof(value)); + info->setMetaData(Qmmp::TRACK, QString::fromUtf8(value).toInt()); + } + } + + if (cue_len==0) + { + info->setLength((int) WavpackGetNumSamples(ctx)/WavpackGetSampleRate(ctx)); + list << info; } - info->setLength((int) WavpackGetNumSamples(ctx)/WavpackGetSampleRate(ctx)); WavpackCloseFile (ctx); - list << info; return list; } |
