diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2008-11-28 15:46:53 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2008-11-28 15:46:53 +0000 |
| commit | 26724c66d4764a77ca653ce6c0a1573e9e97e97c (patch) | |
| tree | f238f84ed390de31471cb95a20e3775f2ea7e3e7 | |
| parent | d02787b92ad9a220539498ebbc9f1745a075d10d (diff) | |
| download | qmmp-26724c66d4764a77ca653ce6c0a1573e9e97e97c.tar.gz qmmp-26724c66d4764a77ca653ce6c0a1573e9e97e97c.tar.bz2 qmmp-26724c66d4764a77ca653ce6c0a1573e9e97e97c.zip | |
changed decoder api; fixed flac plugin
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@646 90c681e8-e032-0410-971d-27865f9a5e38
28 files changed, 173 insertions, 172 deletions
diff --git a/src/plugins/Input/aac/decoderaacfactory.cpp b/src/plugins/Input/aac/decoderaacfactory.cpp index d55f64fdc..73d52087a 100644 --- a/src/plugins/Input/aac/decoderaacfactory.cpp +++ b/src/plugins/Input/aac/decoderaacfactory.cpp @@ -59,15 +59,16 @@ Decoder *DecoderAACFactory::create(QObject *parent, QIODevice *input, return new DecoderAAC(parent, this, input, output); } -QList<FileInfo *> DecoderAACFactory::createPlayList(const QString &fileName) +QList<FileInfo *> DecoderAACFactory::createPlayList(const QString &fileName, bool useMetaData) { FileInfo *info = new FileInfo(fileName); QFile file(fileName); if (file.open(QIODevice::ReadOnly)) { - AACFile aac_file(&file); - info->setMetaData(aac_file.metaData()); + AACFile aac_file(&file, useMetaData); + if (useMetaData) + info->setMetaData(aac_file.metaData()); info->setLength(aac_file.length()); } QList <FileInfo*> list; diff --git a/src/plugins/Input/aac/decoderaacfactory.h b/src/plugins/Input/aac/decoderaacfactory.h index eb4fb6276..41af2151d 100644 --- a/src/plugins/Input/aac/decoderaacfactory.h +++ b/src/plugins/Input/aac/decoderaacfactory.h @@ -44,7 +44,7 @@ public: bool canDecode(QIODevice *input) const; const DecoderProperties properties() const; Decoder *create(QObject *, QIODevice *, Output *, const QString &); - QList<FileInfo *> createPlayList(const QString &fileName); + QList<FileInfo *> createPlayList(const QString &fileName, bool useMetaData); QObject* showDetails(QWidget *parent, const QString &path); void showSettings(QWidget *parent); void showAbout(QWidget *parent); diff --git a/src/plugins/Input/cue/cueparser.cpp b/src/plugins/Input/cue/cueparser.cpp index 440c5fb54..f9827fafa 100644 --- a/src/plugins/Input/cue/cueparser.cpp +++ b/src/plugins/Input/cue/cueparser.cpp @@ -103,7 +103,7 @@ CUEParser::CUEParser(const QString &fileName) m_infoList[i].setLength(m_infoList[i+1].length() - m_infoList[i].length()); //calculate last item length QList <FileInfo *> f_list; - f_list = Decoder::createPlayList(m_filePath); + f_list = Decoder::createPlayList(m_filePath, FALSE); qint64 l = f_list.isEmpty() ? 0 : f_list.at(0)->length(); if (l > m_infoList.last().length()) m_infoList.last().setLength(l - m_infoList.last().length()); diff --git a/src/plugins/Input/cue/decodercuefactory.cpp b/src/plugins/Input/cue/decodercuefactory.cpp index d1baf3fcf..893154694 100644 --- a/src/plugins/Input/cue/decodercuefactory.cpp +++ b/src/plugins/Input/cue/decodercuefactory.cpp @@ -61,8 +61,9 @@ Decoder *DecoderCUEFactory::create(QObject *parent, QIODevice *input, return new DecoderCUE(parent, this, url); } -QList<FileInfo *> DecoderCUEFactory::createPlayList(const QString &fileName) +QList<FileInfo *> DecoderCUEFactory::createPlayList(const QString &fileName, bool useMetaData) { + Q_UNUSED(useMetaData); CUEParser parser(fileName); return parser.createPlayList(); } diff --git a/src/plugins/Input/cue/decodercuefactory.h b/src/plugins/Input/cue/decodercuefactory.h index 2375fc896..a79cb0429 100644 --- a/src/plugins/Input/cue/decodercuefactory.h +++ b/src/plugins/Input/cue/decodercuefactory.h @@ -40,7 +40,7 @@ public: bool canDecode(QIODevice *input) const; const DecoderProperties properties() const; Decoder *create(QObject *, QIODevice *, Output *, const QString &); - QList<FileInfo *> createPlayList(const QString &fileName); + QList<FileInfo *> createPlayList(const QString &fileName, bool useMetaData); QObject* showDetails(QWidget *parent, const QString &path); void showSettings(QWidget *parent); void showAbout(QWidget *parent); diff --git a/src/plugins/Input/ffmpeg/decoderffmpegfactory.cpp b/src/plugins/Input/ffmpeg/decoderffmpegfactory.cpp index 41a968634..35abd0eac 100644 --- a/src/plugins/Input/ffmpeg/decoderffmpegfactory.cpp +++ b/src/plugins/Input/ffmpeg/decoderffmpegfactory.cpp @@ -20,7 +20,8 @@ #include <QtGui> -extern "C"{ +extern "C" +{ #if defined HAVE_FFMPEG_LIBAVFORMAT_AVFORMAT_H #include <ffmpeg/libavformat/avformat.h> #elif defined HAVE_FFMPEG_AVFORMAT_H @@ -81,7 +82,7 @@ Decoder *DecoderFFmpegFactory::create(QObject *parent, QIODevice *input, return new DecoderFFmpeg(parent, this, output, path); } -QList<FileInfo *> DecoderFFmpegFactory::createPlayList(const QString &fileName) +QList<FileInfo *> DecoderFFmpegFactory::createPlayList(const QString &fileName, bool useMetaData) { QList <FileInfo*> list; avcodec_init(); @@ -93,13 +94,16 @@ QList<FileInfo *> DecoderFFmpegFactory::createPlayList(const QString &fileName) return list; FileInfo *info = new FileInfo(fileName); av_find_stream_info(in); - info->setMetaData(Qmmp::ALBUM, QString::fromUtf8(in->album).trimmed()); - info->setMetaData(Qmmp::ARTIST, QString::fromUtf8(in->author).trimmed()); - info->setMetaData(Qmmp::COMMENT, QString::fromUtf8(in->comment).trimmed()); - info->setMetaData(Qmmp::GENRE, QString::fromUtf8(in->genre).trimmed()); - info->setMetaData(Qmmp::TITLE, QString::fromUtf8(in->title).trimmed()); - info->setMetaData(Qmmp::YEAR, in->year); - info->setMetaData(Qmmp::TRACK, in->track); + if (useMetaData) + { + info->setMetaData(Qmmp::ALBUM, QString::fromUtf8(in->album).trimmed()); + info->setMetaData(Qmmp::ARTIST, QString::fromUtf8(in->author).trimmed()); + info->setMetaData(Qmmp::COMMENT, QString::fromUtf8(in->comment).trimmed()); + info->setMetaData(Qmmp::GENRE, QString::fromUtf8(in->genre).trimmed()); + info->setMetaData(Qmmp::TITLE, QString::fromUtf8(in->title).trimmed()); + info->setMetaData(Qmmp::YEAR, in->year); + info->setMetaData(Qmmp::TRACK, in->track); + } info->setLength(in->duration/AV_TIME_BASE); av_close_input_file(in); list << info; diff --git a/src/plugins/Input/ffmpeg/decoderffmpegfactory.h b/src/plugins/Input/ffmpeg/decoderffmpegfactory.h index c8bb2ef62..0ee85a8b9 100644 --- a/src/plugins/Input/ffmpeg/decoderffmpegfactory.h +++ b/src/plugins/Input/ffmpeg/decoderffmpegfactory.h @@ -44,7 +44,7 @@ public: bool canDecode(QIODevice *input) const; const DecoderProperties properties() const; Decoder *create(QObject *, QIODevice *, Output *, const QString &); - QList<FileInfo *> createPlayList(const QString &fileName); + QList<FileInfo *> createPlayList(const QString &fileName, bool useMetaData); QObject* showDetails(QWidget *parent, const QString &path); void showSettings(QWidget *parent); void showAbout(QWidget *parent); diff --git a/src/plugins/Input/flac/cueparser.cpp b/src/plugins/Input/flac/cueparser.cpp index 64870c97f..1441a999b 100644 --- a/src/plugins/Input/flac/cueparser.cpp +++ b/src/plugins/Input/flac/cueparser.cpp @@ -44,12 +44,7 @@ CUEParser::CUEParser(const QByteArray &array, const QString &fileName) if (words.size() < 2) continue; - if (words[0] == "FILE") - { - //m_filePath = QUrl(fileName).path (); - //m_filePath = QFileInfo(m_filePath).dir().filePath(words[1]); - } - else if (words[0] == "PERFORMER") + if (words[0] == "PERFORMER") { if (m_infoList.isEmpty()) { @@ -97,8 +92,7 @@ CUEParser::CUEParser(const QByteArray &array, const QString &fileName) for (int i = 0; i < m_infoList.size() - 1; ++i) m_infoList[i].setLength(m_infoList[i+1].length() - m_infoList[i].length()); //calculate last item length - QList <FileInfo *> f_list; - //f_list = Decoder::createPlayList(m_filePath); + QList <FileInfo *> f_list = Decoder::createPlayList(m_filePath, FALSE); qint64 l = f_list.isEmpty() ? 0 : f_list.at(0)->length(); if (l > m_infoList.last().length()) m_infoList.last().setLength(l - m_infoList.last().length()); diff --git a/src/plugins/Input/flac/decoder_flac.cpp b/src/plugins/Input/flac/decoder_flac.cpp index 44618c919..ec6cb6755 100644 --- a/src/plugins/Input/flac/decoder_flac.cpp +++ b/src/plugins/Input/flac/decoder_flac.cpp @@ -281,7 +281,6 @@ DecoderFLAC::DecoderFLAC(QObject *parent, DecoderFactory *d, QIODevice *i, Outpu m_offset = 0; m_length = 0; - m_cue = FALSE; m_data = new flac_data; m_data->decoder = NULL; data()->input = i; @@ -362,7 +361,6 @@ bool DecoderFLAC::initialize() seekTime = -1.0; totalTime = 0.0; - if (!data()->input) { QString p = m_path; @@ -374,20 +372,18 @@ bool DecoderFLAC::initialize() qWarning("DecoderFLAC: invalid url."); return FALSE; } - qDebug("DecoderFLAC: using embeded cue"); TagLib::FLAC::File fileRef(p.toLocal8Bit ()); //looking for cuesheet comment TagLib::Ogg::XiphComment *xiph_comment = fileRef.xiphComment(); QList <FileInfo*> list; if (xiph_comment && xiph_comment->fieldListMap().contains("CUESHEET")) { - qDebug("DecoderFLAC: found cuesheet xiph comment"); - CUEParser parser(xiph_comment->fieldListMap()["CUESHEET"].toString().toCString(TRUE), m_path); + qDebug("DecoderFLAC: using cuesheet xiph comment."); + CUEParser parser(xiph_comment->fieldListMap()["CUESHEET"].toString().toCString(TRUE), p); int track = m_path.section("#", -1).toInt(); m_offset = parser.offset(track); m_length = parser.length(track); data()->input = new QFile(p); - m_cue = TRUE; } else { @@ -501,9 +497,10 @@ void DecoderFLAC::deinit() len = freq = bitrate = 0; stat = chan = 0; output_size = 0; - if (!input() && data()->input) + if (!input() && data()->input) //delete internal input only { data()->input->close(); + delete data()->input; data()->input = 0; }; } @@ -519,7 +516,7 @@ void DecoderFLAC::run() } mutex()->unlock(); - while (! done && ! m_finish) + while (!done && !m_finish) { mutex()->lock (); // decode @@ -566,22 +563,17 @@ void DecoderFLAC::run() } done = TRUE; - if (! user_stop) - { - m_finish = TRUE; - } + m_finish = !user_stop; } else { - // error in read + // error while read qWarning("DecoderFLAC: Error while decoding stream, File appears to be " "corrupted"); m_finish = TRUE; } - if (m_length && (StateHandler::instance()->elapsed() >= m_length)) m_finish = TRUE; - mutex()->unlock(); } diff --git a/src/plugins/Input/flac/decoder_flac.h b/src/plugins/Input/flac/decoder_flac.h index cef0cd561..f2e002487 100644 --- a/src/plugins/Input/flac/decoder_flac.h +++ b/src/plugins/Input/flac/decoder_flac.h @@ -102,7 +102,6 @@ private: QString m_path; qint64 m_offset; qint64 m_length; - bool m_cue; }; diff --git a/src/plugins/Input/flac/decoderflacfactory.cpp b/src/plugins/Input/flac/decoderflacfactory.cpp index 2da4c69de..df3ef6dd3 100644 --- a/src/plugins/Input/flac/decoderflacfactory.cpp +++ b/src/plugins/Input/flac/decoderflacfactory.cpp @@ -64,12 +64,12 @@ Decoder *DecoderFLACFactory::create(QObject *parent, QIODevice *input, return new DecoderFLAC(parent, this, input, output, path); } -QList<FileInfo *> DecoderFLACFactory::createPlayList(const QString &fileName) +QList<FileInfo *> DecoderFLACFactory::createPlayList(const QString &fileName, bool useMetaData) { FileInfo *info = new FileInfo(fileName); TagLib::FLAC::File fileRef(fileName.toLocal8Bit ()); - TagLib::Tag *tag = fileRef.tag(); + TagLib::Tag *tag = useMetaData ? fileRef.tag() : 0; if (tag && !tag->isEmpty()) { @@ -91,11 +91,10 @@ QList<FileInfo *> DecoderFLACFactory::createPlayList(const QString &fileName) info->setLength(fileRef.audioProperties()->length()); //looking for cuesheet comment - TagLib::Ogg::XiphComment *xiph_comment = fileRef.xiphComment(); + TagLib::Ogg::XiphComment *xiph_comment = useMetaData ? fileRef.xiphComment() : 0; QList <FileInfo*> list; if (xiph_comment && xiph_comment->fieldListMap().contains("CUESHEET")) { - qDebug(xiph_comment->fieldListMap()["CUESHEET"].toString().toCString(TRUE)); CUEParser parser(xiph_comment->fieldListMap()["CUESHEET"].toString().toCString(TRUE), fileName); list = parser.createPlayList(); delete info; diff --git a/src/plugins/Input/flac/decoderflacfactory.h b/src/plugins/Input/flac/decoderflacfactory.h index 983355d23..7fd7dcb42 100644 --- a/src/plugins/Input/flac/decoderflacfactory.h +++ b/src/plugins/Input/flac/decoderflacfactory.h @@ -40,7 +40,7 @@ public: bool canDecode(QIODevice *input) const; const DecoderProperties properties() const; Decoder *create(QObject *, QIODevice *, Output *, const QString &); - QList<FileInfo *> createPlayList(const QString &fileName); + QList<FileInfo *> createPlayList(const QString &fileName, bool useMetaData); QObject* showDetails(QWidget *parent, const QString &path); void showSettings(QWidget *parent); void showAbout(QWidget *parent); diff --git a/src/plugins/Input/mad/decodermadfactory.cpp b/src/plugins/Input/mad/decodermadfactory.cpp index ef8de8d45..9ede2f1d8 100644 --- a/src/plugins/Input/mad/decodermadfactory.cpp +++ b/src/plugins/Input/mad/decodermadfactory.cpp @@ -100,87 +100,90 @@ Decoder *DecoderMADFactory::create(QObject *parent, QIODevice *input, Output *ou } //FileInfo *DecoderMADFactory::createFileInfo(const QString &source) -QList<FileInfo *> DecoderMADFactory::createPlayList(const QString &fileName) +QList<FileInfo *> DecoderMADFactory::createPlayList(const QString &fileName, bool useMetaData) { FileInfo *info = new FileInfo(fileName); TagLib::Tag *tag = 0; TagLib::MPEG::File fileRef(fileName.toLocal8Bit ()); - QSettings settings(QDir::homePath()+"/.qmmp/qmmprc", QSettings::IniFormat); - settings.beginGroup("MAD"); + if (useMetaData) + { + QSettings settings(QDir::homePath()+"/.qmmp/qmmprc", QSettings::IniFormat); + settings.beginGroup("MAD"); - QTextCodec *codec = 0; + QTextCodec *codec = 0; - uint tag_array[3]; - tag_array[0] = settings.value("tag_1", SettingsDialog::ID3v2).toInt(); - tag_array[1] = settings.value("tag_2", SettingsDialog::Disabled).toInt(); - tag_array[2] = settings.value("tag_3", SettingsDialog::Disabled).toInt(); + uint tag_array[3]; + tag_array[0] = settings.value("tag_1", SettingsDialog::ID3v2).toInt(); + tag_array[1] = settings.value("tag_2", SettingsDialog::Disabled).toInt(); + tag_array[2] = settings.value("tag_3", SettingsDialog::Disabled).toInt(); - for (int i = 0; i < 3; ++i) - { - switch ((uint) tag_array[i]) + for (int i = 0; i < 3; ++i) { - case SettingsDialog::ID3v1: - { - codec = QTextCodec::codecForName(settings.value("ID3v1_encoding","ISO-8859-1") - .toByteArray ()); - tag = fileRef.ID3v1Tag(); - break; - } - case SettingsDialog::ID3v2: - { - QByteArray name; - name = settings.value("ID3v2_encoding","UTF-8").toByteArray (); - if (name.contains("UTF")) + switch ((uint) tag_array[i]) + { + case SettingsDialog::ID3v1: + { + codec = QTextCodec::codecForName(settings.value("ID3v1_encoding","ISO-8859-1") + .toByteArray ()); + tag = fileRef.ID3v1Tag(); + break; + } + case SettingsDialog::ID3v2: + { + QByteArray name; + name = settings.value("ID3v2_encoding","UTF-8").toByteArray (); + if (name.contains("UTF")) + codec = QTextCodec::codecForName ("UTF-8"); + else + codec = QTextCodec::codecForName(name); + tag = fileRef.ID3v2Tag(); + break; + } + case SettingsDialog::APE: + { codec = QTextCodec::codecForName ("UTF-8"); - else - codec = QTextCodec::codecForName(name); - tag = fileRef.ID3v2Tag(); - break; + tag = fileRef.APETag(); + break; + } + case SettingsDialog::Disabled: + { + break; + } + } + if (tag && !tag->isEmpty()) + break; } - case SettingsDialog::APE: - { + settings.endGroup(); + + if (!codec) codec = QTextCodec::codecForName ("UTF-8"); - tag = fileRef.APETag(); - break; - } - case SettingsDialog::Disabled: + + if (tag && codec) { - break; + bool utf = codec->name ().contains("UTF"); + TagLib::String album = tag->album(); + TagLib::String artist = tag->artist(); + TagLib::String comment = tag->comment(); + TagLib::String genre = tag->genre(); + TagLib::String title = tag->title(); + + info->setMetaData(Qmmp::ALBUM, + codec->toUnicode(album.toCString(utf)).trimmed()); + info->setMetaData(Qmmp::ARTIST, + codec->toUnicode(artist.toCString(utf)).trimmed()); + info->setMetaData(Qmmp::COMMENT, + codec->toUnicode(comment.toCString(utf)).trimmed()); + info->setMetaData(Qmmp::GENRE, + codec->toUnicode(genre.toCString(utf)).trimmed()); + info->setMetaData(Qmmp::TITLE, + codec->toUnicode(title.toCString(utf)).trimmed()); + info->setMetaData(Qmmp::YEAR, + tag->year()); + info->setMetaData(Qmmp::TRACK, + tag->track()); } - } - if (tag && !tag->isEmpty()) - break; - } - settings.endGroup(); - - if (!codec) - codec = QTextCodec::codecForName ("UTF-8"); - - if (tag && codec) - { - bool utf = codec->name ().contains("UTF"); - TagLib::String album = tag->album(); - TagLib::String artist = tag->artist(); - TagLib::String comment = tag->comment(); - TagLib::String genre = tag->genre(); - TagLib::String title = tag->title(); - - info->setMetaData(Qmmp::ALBUM, - codec->toUnicode(album.toCString(utf)).trimmed()); - info->setMetaData(Qmmp::ARTIST, - codec->toUnicode(artist.toCString(utf)).trimmed()); - info->setMetaData(Qmmp::COMMENT, - codec->toUnicode(comment.toCString(utf)).trimmed()); - info->setMetaData(Qmmp::GENRE, - codec->toUnicode(genre.toCString(utf)).trimmed()); - info->setMetaData(Qmmp::TITLE, - codec->toUnicode(title.toCString(utf)).trimmed()); - info->setMetaData(Qmmp::YEAR, - tag->year()); - info->setMetaData(Qmmp::TRACK, - tag->track()); } if (fileRef.audioProperties()) info->setLength(fileRef.audioProperties()->length()); diff --git a/src/plugins/Input/mad/decodermadfactory.h b/src/plugins/Input/mad/decodermadfactory.h index a4d4d57ad..c749cd86d 100644 --- a/src/plugins/Input/mad/decodermadfactory.h +++ b/src/plugins/Input/mad/decodermadfactory.h @@ -44,7 +44,7 @@ public: const DecoderProperties properties() const; Decoder *create(QObject *, QIODevice *, Output *, const QString &); //FileInfo *createFileInfo(const QString &source); - QList<FileInfo *> createPlayList(const QString &fileName); + QList<FileInfo *> createPlayList(const QString &fileName, bool useMetaData); QObject* showDetails(QWidget *parent, const QString &path); void showSettings(QWidget *parent); void showAbout(QWidget *parent); diff --git a/src/plugins/Input/modplug/decodermodplugfactory.cpp b/src/plugins/Input/modplug/decodermodplugfactory.cpp index 9e13c0b74..a0cd1bd7a 100644 --- a/src/plugins/Input/modplug/decodermodplugfactory.cpp +++ b/src/plugins/Input/modplug/decodermodplugfactory.cpp @@ -77,11 +77,11 @@ Decoder *DecoderModPlugFactory::create(QObject *parent, QIODevice *input, return new DecoderModPlug(parent, this, output, path); } -QList<FileInfo *> DecoderModPlugFactory::createPlayList(const QString &fileName) +QList<FileInfo *> DecoderModPlugFactory::createPlayList(const QString &fileName, bool useMetaData) { QList <FileInfo*> list; QSettings settings(QDir::homePath()+"/.qmmp/qmmprc", QSettings::IniFormat); - if (settings.value("UseFileName", FALSE).toBool()) + if (!useMetaData || settings.value("UseFileName", FALSE).toBool()) { list << new FileInfo(fileName); list.at(0)->setMetaData(Qmmp::TITLE, fileName.section('/',-1)); diff --git a/src/plugins/Input/modplug/decodermodplugfactory.h b/src/plugins/Input/modplug/decodermodplugfactory.h index 8581e0d99..333ff1a56 100644 --- a/src/plugins/Input/modplug/decodermodplugfactory.h +++ b/src/plugins/Input/modplug/decodermodplugfactory.h @@ -42,7 +42,7 @@ public: bool canDecode(QIODevice *input) const; const DecoderProperties properties() const; Decoder *create(QObject *, QIODevice *, Output *, const QString &); - QList<FileInfo *> createPlayList(const QString &fileName); + QList<FileInfo *> createPlayList(const QString &fileName, bool useMetaData); QObject* showDetails(QWidget *parent, const QString &path); void showSettings(QWidget *parent); void showAbout(QWidget *parent); diff --git a/src/plugins/Input/mpc/decodermpcfactory.cpp b/src/plugins/Input/mpc/decodermpcfactory.cpp index 9b6368efe..a62f3a096 100644 --- a/src/plugins/Input/mpc/decodermpcfactory.cpp +++ b/src/plugins/Input/mpc/decodermpcfactory.cpp @@ -58,12 +58,12 @@ Decoder *DecoderMPCFactory::create(QObject *parent, QIODevice *input, return new DecoderMPC(parent, this, input, output); } -QList<FileInfo *> DecoderMPCFactory::createPlayList(const QString &fileName) +QList<FileInfo *> DecoderMPCFactory::createPlayList(const QString &fileName, bool useMetaData) { FileInfo *info = new FileInfo(fileName); TagLib::FileRef fileRef(fileName.toLocal8Bit ()); - TagLib::Tag *tag = fileRef.tag(); + TagLib::Tag *tag = useMetaData ? fileRef.tag() : 0; if (tag && !tag->isEmpty()) { info->setMetaData(Qmmp::ALBUM, diff --git a/src/plugins/Input/mpc/decodermpcfactory.h b/src/plugins/Input/mpc/decodermpcfactory.h index 740a5f362..76ca2b0f4 100644 --- a/src/plugins/Input/mpc/decodermpcfactory.h +++ b/src/plugins/Input/mpc/decodermpcfactory.h @@ -44,7 +44,7 @@ public: bool canDecode(QIODevice *input) const; const DecoderProperties properties() const; Decoder *create(QObject *, QIODevice *, Output *, const QString &); - QList<FileInfo *> createPlayList(const QString &fileName); + QList<FileInfo *> createPlayList(const QString &fileName, bool useMetaData); QObject* showDetails(QWidget *parent, const QString &path); void showSettings(QWidget *parent); void showAbout(QWidget *parent); diff --git a/src/plugins/Input/sndfile/decodersndfilefactory.cpp b/src/plugins/Input/sndfile/decodersndfilefactory.cpp index 1828b8292..38278f8dc 100644 --- a/src/plugins/Input/sndfile/decodersndfilefactory.cpp +++ b/src/plugins/Input/sndfile/decodersndfilefactory.cpp @@ -18,7 +18,8 @@ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #include <QtGui> -extern "C"{ +extern "C" +{ #include <sndfile.h> } @@ -32,20 +33,20 @@ bool DecoderSndFileFactory::supports(const QString &source) const { if ((source.right(3).toLower() == ".au") || - (source.right(4).toLower() == ".snd") || - (source.right(4).toLower() == ".aif") || - (source.right(5).toLower() == ".aiff") || - (source.right(5).toLower() == ".8svx") || - (source.right(4).toLower() == ".sph") || - (source.right(3).toLower() == ".sf") || - (source.right(4).toLower() == ".voc")) + (source.right(4).toLower() == ".snd") || + (source.right(4).toLower() == ".aif") || + (source.right(5).toLower() == ".aiff") || + (source.right(5).toLower() == ".8svx") || + (source.right(4).toLower() == ".sph") || + (source.right(3).toLower() == ".sf") || + (source.right(4).toLower() == ".voc")) return TRUE; else if (source.right(4).toLower() == ".wav") { //try top open the file SF_INFO snd_info; SNDFILE *sndfile = sf_open(source.toLocal8Bit(), SFM_READ, &snd_info); - if(!sndfile) + if (!sndfile) return FALSE; sf_close (sndfile); sndfile = 0; @@ -80,7 +81,7 @@ Decoder *DecoderSndFileFactory::create(QObject *parent, QIODevice *input, return new DecoderSndFile(parent, this, output, path); } -QList<FileInfo *> DecoderSndFileFactory::createPlayList(const QString &fileName) +QList<FileInfo *> DecoderSndFileFactory::createPlayList(const QString &fileName, bool useMetaData) { QList <FileInfo *> list; SF_INFO snd_info; @@ -92,20 +93,23 @@ QList<FileInfo *> DecoderSndFileFactory::createPlayList(const QString &fileName) return list; list << new FileInfo(fileName); - if (sf_get_string(sndfile, SF_STR_TITLE)) - { - char* title = strdup(sf_get_string(sndfile, SF_STR_TITLE)); - list.at(0)->setMetaData(Qmmp::TITLE, QString::fromUtf8(title).trimmed()); - } - if (sf_get_string(sndfile, SF_STR_ARTIST)) - { - char* artist = strdup(sf_get_string(sndfile, SF_STR_ARTIST)); - list.at(0)->setMetaData(Qmmp::ARTIST, QString::fromUtf8(artist).trimmed()); - } - if (sf_get_string(sndfile, SF_STR_COMMENT)) + if (useMetaData) { - char* comment = strdup(sf_get_string(sndfile, SF_STR_COMMENT)); - list.at(0)->setMetaData(Qmmp::COMMENT, QString::fromUtf8(comment).trimmed()); + if (sf_get_string(sndfile, SF_STR_TITLE)) + { + char* title = strdup(sf_get_string(sndfile, SF_STR_TITLE)); + list.at(0)->setMetaData(Qmmp::TITLE, QString::fromUtf8(title).trimmed()); + } + if (sf_get_string(sndfile, SF_STR_ARTIST)) + { + char* artist = strdup(sf_get_string(sndfile, SF_STR_ARTIST)); + list.at(0)->setMetaData(Qmmp::ARTIST, QString::fromUtf8(artist).trimmed()); + } + if (sf_get_string(sndfile, SF_STR_COMMENT)) + { + char* comment = strdup(sf_get_string(sndfile, SF_STR_COMMENT)); + list.at(0)->setMetaData(Qmmp::COMMENT, QString::fromUtf8(comment).trimmed()); + } } list.at(0)->setLength(int(snd_info.frames / snd_info.samplerate)); diff --git a/src/plugins/Input/sndfile/decodersndfilefactory.h b/src/plugins/Input/sndfile/decodersndfilefactory.h index aab996d98..0a5b160e5 100644 --- a/src/plugins/Input/sndfile/decodersndfilefactory.h +++ b/src/plugins/Input/sndfile/decodersndfilefactory.h @@ -44,7 +44,7 @@ public: bool canDecode(QIODevice *input) const; const DecoderProperties properties() const; Decoder *create(QObject *, QIODevice *, Output *, const QString &path); - QList<FileInfo *> createPlayList(const QString &fileName); + QList<FileInfo *> createPlayList(const QString &fileName, bool useMetaData); QObject* showDetails(QWidget *parent, const QString &path); void showSettings(QWidget *parent); void showAbout(QWidget *parent); diff --git a/src/plugins/Input/vorbis/decodervorbisfactory.cpp b/src/plugins/Input/vorbis/decodervorbisfactory.cpp index deca4f510..c19bd4882 100644 --- a/src/plugins/Input/vorbis/decodervorbisfactory.cpp +++ b/src/plugins/Input/vorbis/decodervorbisfactory.cpp @@ -64,12 +64,12 @@ Decoder *DecoderVorbisFactory::create(QObject *parent, QIODevice *input, } //FileInfo *DecoderVorbisFactory::createFileInfo(const QString &source) -QList<FileInfo *> DecoderVorbisFactory::createPlayList(const QString &fileName) +QList<FileInfo *> DecoderVorbisFactory::createPlayList(const QString &fileName, bool useMetaData) { FileInfo *info = new FileInfo(fileName); TagLib::FileRef fileRef(fileName.toLocal8Bit ()); - TagLib::Tag *tag = fileRef.tag(); + TagLib::Tag *tag = useMetaData ? fileRef.tag() : 0; if (tag && !tag->isEmpty()) { diff --git a/src/plugins/Input/vorbis/decodervorbisfactory.h b/src/plugins/Input/vorbis/decodervorbisfactory.h index 05c1d0ea6..5a80c26d8 100644 --- a/src/plugins/Input/vorbis/decodervorbisfactory.h +++ b/src/plugins/Input/vorbis/decodervorbisfactory.h @@ -45,7 +45,7 @@ public: const DecoderProperties properties() const; Decoder *create(QObject *, QIODevice *, Output *, const QString &); //FileInfo *createFileInfo(const QString &source); - QList<FileInfo *> createPlayList(const QString &fileName); + QList<FileInfo *> createPlayList(const QString &fileName, bool useMetaData); QObject* showDetails(QWidget *parent, const QString &path); void showSettings(QWidget *parent); void showAbout(QWidget *parent); diff --git a/src/plugins/Input/wavpack/decoderwavpackfactory.cpp b/src/plugins/Input/wavpack/decoderwavpackfactory.cpp index 114cd5366..14138be1e 100644 --- a/src/plugins/Input/wavpack/decoderwavpackfactory.cpp +++ b/src/plugins/Input/wavpack/decoderwavpackfactory.cpp @@ -20,7 +20,8 @@ #include <QtGui> -extern "C"{ +extern "C" +{ #include <wavpack/wavpack.h> } @@ -57,39 +58,42 @@ const DecoderProperties DecoderWavPackFactory::properties() const } Decoder *DecoderWavPackFactory::create(QObject *parent, QIODevice *input, - Output *output, const QString &path) + Output *output, const QString &path) { Q_UNUSED(input); return new DecoderWavPack(parent, this, output, path); } -QList<FileInfo *> DecoderWavPackFactory::createPlayList(const QString &fileName) +QList<FileInfo *> DecoderWavPackFactory::createPlayList(const QString &fileName, bool useMetaData) { QList <FileInfo*> list; char err[80]; WavpackContext *ctx = WavpackOpenFileInput (fileName.toLocal8Bit(), err, - OPEN_WVC | OPEN_TAGS, 0); - if(!ctx) + OPEN_WVC | OPEN_TAGS, 0); + if (!ctx) { qWarning("DecoderWavPackFactory: error: %s", err); return list; } FileInfo *info = new FileInfo(fileName); - 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 (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()); + } info->setLength((int) WavpackGetNumSamples(ctx)/WavpackGetSampleRate(ctx)); WavpackCloseFile (ctx); list << info; diff --git a/src/plugins/Input/wavpack/decoderwavpackfactory.h b/src/plugins/Input/wavpack/decoderwavpackfactory.h index 1213dd92a..212a240d2 100644 --- a/src/plugins/Input/wavpack/decoderwavpackfactory.h +++ b/src/plugins/Input/wavpack/decoderwavpackfactory.h @@ -42,7 +42,7 @@ public: bool canDecode(QIODevice *input) const; const DecoderProperties properties() const; Decoder *create(QObject *, QIODevice *, Output *, const QString &); - QList<FileInfo *> createPlayList(const QString &fileName); + QList<FileInfo *> createPlayList(const QString &fileName, bool useMetaData); QObject* showDetails(QWidget *parent, const QString &path); void showSettings(QWidget *parent); void showAbout(QWidget *parent); diff --git a/src/qmmp/decoder.cpp b/src/qmmp/decoder.cpp index 02f07211f..13cbd51a2 100644 --- a/src/qmmp/decoder.cpp +++ b/src/qmmp/decoder.cpp @@ -411,14 +411,14 @@ bool Decoder::isEnabled(DecoderFactory* factory) return 0; }*/ -QList <FileInfo *> Decoder::createPlayList(const QString &fileName) +QList <FileInfo *> Decoder::createPlayList(const QString &fileName, bool useMetaData) { QList <FileInfo *> list; if (QFile::exists(fileName)) //is it file? { DecoderFactory *fact = Decoder::findByPath(fileName); if (fact) - list << fact->createPlayList(fileName); + list << fact->createPlayList(fileName, useMetaData); } else //TODO do this according supported protocols diff --git a/src/qmmp/decoder.h b/src/qmmp/decoder.h index 1e4d56481..4a4a9ab98 100644 --- a/src/qmmp/decoder.h +++ b/src/qmmp/decoder.h @@ -67,7 +67,7 @@ public: static DecoderFactory *findByContent(QIODevice *); static DecoderFactory *findByURL(const QUrl &url); //static FileInfo *createFileInfo(const QString &fileName); - static QList <FileInfo *> createPlayList(const QString &fileName); + static QList <FileInfo *> createPlayList(const QString &fileName, bool useMetaData = TRUE); //static QList <FileInfo *> createPlayList(const QStringList &fileList); static QStringList filters(); static QStringList nameFilters(); diff --git a/src/qmmp/decoderfactory.h b/src/qmmp/decoderfactory.h index 80b2008ee..b36b48815 100644 --- a/src/qmmp/decoderfactory.h +++ b/src/qmmp/decoderfactory.h @@ -65,7 +65,7 @@ public: virtual Decoder *create(QObject *, QIODevice *input = 0, Output *output = 0, const QString &path = QString()) = 0; //virtual FileInfo *createFileInfo(const QString &source) = 0; - virtual QList<FileInfo *> createPlayList(const QString &fileName) = 0; + virtual QList<FileInfo *> createPlayList(const QString &fileName, bool useMetaData) = 0; virtual QObject* showDetails(QWidget *parent, const QString &path) = 0; virtual void showSettings(QWidget *parent) = 0; virtual void showAbout(QWidget *parent) = 0; diff --git a/src/qmmp/soundcore.cpp b/src/qmmp/soundcore.cpp index bd8275b32..2474092c0 100644 --- a/src/qmmp/soundcore.cpp +++ b/src/qmmp/soundcore.cpp @@ -401,7 +401,7 @@ bool SoundCore::decode() { if (QFile::exists(m_source)) //send metadata for local files { - QList <FileInfo *> list = m_factory->createPlayList(m_source); + QList <FileInfo *> list = m_factory->createPlayList(m_source, TRUE); if (!list.isEmpty()) { m_handler->dispatch(list[0]->metaData()); |
