aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/Input/wavpack/decoderwavpackfactory.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/Input/wavpack/decoderwavpackfactory.cpp')
-rw-r--r--src/plugins/Input/wavpack/decoderwavpackfactory.cpp69
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;
}