aboutsummaryrefslogtreecommitdiff
path: root/src/plugins
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2013-10-17 11:03:03 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2013-10-17 11:03:03 +0000
commit5a63f3d2cdc0f011239b9e6acf7178da70461a10 (patch)
tree86a6499f22ca041ea944859ed77bb2b7eab44b26 /src/plugins
parent3f249105c9cd0ced6d97d930f89f4135a352985b (diff)
downloadqmmp-5a63f3d2cdc0f011239b9e6acf7178da70461a10.tar.gz
qmmp-5a63f3d2cdc0f011239b9e6acf7178da70461a10.tar.bz2
qmmp-5a63f3d2cdc0f011239b9e6acf7178da70461a10.zip
mad: added id3v2-based replaygain tags support
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@3806 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/Input/mad/mpegmetadatamodel.cpp4
-rw-r--r--src/plugins/Input/mad/replaygainreader.cpp32
-rw-r--r--src/plugins/Input/mad/replaygainreader.h2
3 files changed, 32 insertions, 6 deletions
diff --git a/src/plugins/Input/mad/mpegmetadatamodel.cpp b/src/plugins/Input/mad/mpegmetadatamodel.cpp
index c7a367fc8..0fb6d674a 100644
--- a/src/plugins/Input/mad/mpegmetadatamodel.cpp
+++ b/src/plugins/Input/mad/mpegmetadatamodel.cpp
@@ -1,5 +1,5 @@
/***************************************************************************
- * Copyright (C) 2009 by Ilya Kotov *
+ * Copyright (C) 2009-2013 by Ilya Kotov *
* forkotov02@hotmail.ru *
* *
* This program is free software; you can redistribute it and/or modify *
@@ -119,7 +119,7 @@ QPixmap MPEGMetaDataModel::cover()
for(TagLib::ID3v2::FrameList::Iterator it = frames.begin(); it != frames.end(); ++it)
{
- TagLib::ID3v2::AttachedPictureFrame *frame = static_cast<TagLib::ID3v2::AttachedPictureFrame *>(*it);
+ TagLib::ID3v2::AttachedPictureFrame *frame = dynamic_cast<TagLib::ID3v2::AttachedPictureFrame *>(*it);
if(frame && frame->type() == TagLib::ID3v2::AttachedPictureFrame::FrontCover)
{
QPixmap cover;
diff --git a/src/plugins/Input/mad/replaygainreader.cpp b/src/plugins/Input/mad/replaygainreader.cpp
index 20a489a1d..c4f78ef70 100644
--- a/src/plugins/Input/mad/replaygainreader.cpp
+++ b/src/plugins/Input/mad/replaygainreader.cpp
@@ -1,5 +1,5 @@
/***************************************************************************
- * Copyright (C) 2009 by Ilya Kotov *
+ * Copyright (C) 2009-2013 by Ilya Kotov *
* forkotov02@hotmail.ru *
* *
* This program is free software; you can redistribute it and/or modify *
@@ -24,12 +24,14 @@
#include <taglib/tag.h>
#include <taglib/id3v1tag.h>
#include <taglib/id3v2header.h>
+#include <taglib/textidentificationframe.h>
#include "replaygainreader.h"
ReplayGainReader::ReplayGainReader(const QString &path)
{
- TagLib::MPEG::File fileRef(path.toLocal8Bit ().constData());
- if(fileRef.APETag())
+ TagLib::MPEG::File fileRef(path.toLocal8Bit().constData());
+ readID3v2(fileRef.ID3v2Tag());
+ if(m_values.isEmpty() && fileRef.APETag())
readAPE(fileRef.APETag());
}
@@ -38,10 +40,32 @@ QMap <Qmmp::ReplayGainKey, double> ReplayGainReader::replayGainInfo() const
return m_values;
}
+void ReplayGainReader::readID3v2(TagLib::ID3v2::Tag *tag)
+{
+ TagLib::ID3v2::UserTextIdentificationFrame* frame = 0;
+ TagLib::ID3v2::FrameList frames = tag->frameListMap()["TXXX"];
+ for(TagLib::ID3v2::FrameList::Iterator it = frames.begin(); it != frames.end(); ++it)
+ {
+ frame = dynamic_cast<TagLib::ID3v2::UserTextIdentificationFrame*>(*it);
+ if(frame && frame->fieldList().size() >= 2)
+ {
+ TagLib::String desc = frame->description().upper();
+ if (desc == "REPLAYGAIN_TRACK_GAIN")
+ setValue(Qmmp::REPLAYGAIN_TRACK_GAIN, TStringToQString(frame->fieldList()[1]));
+ else if (desc == "REPLAYGAIN_TRACK_PEAK")
+ setValue(Qmmp::REPLAYGAIN_TRACK_PEAK, TStringToQString(frame->fieldList()[1]));
+ else if (desc == "REPLAYGAIN_ALBUM_GAIN")
+ setValue(Qmmp::REPLAYGAIN_ALBUM_GAIN, TStringToQString(frame->fieldList()[1]));
+ else if (desc == "REPLAYGAIN_ALBUM_PEAK")
+ setValue(Qmmp::REPLAYGAIN_ALBUM_PEAK, TStringToQString(frame->fieldList()[1]));
+ }
+ }
+}
+
void ReplayGainReader::readAPE(TagLib::APE::Tag *tag)
{
TagLib::APE::ItemListMap items = tag->itemListMap();
- if (items.contains("REPLAYGAIN_TRACK_GAIN"))
+ if (items.contains("REPLAYGAIN_TRACK_GAIN"))
setValue(Qmmp::REPLAYGAIN_TRACK_GAIN,TStringToQString(items["REPLAYGAIN_TRACK_GAIN"].values()[0]));
if (items.contains("REPLAYGAIN_TRACK_PEAK"))
setValue(Qmmp::REPLAYGAIN_TRACK_PEAK,TStringToQString(items["REPLAYGAIN_TRACK_PEAK"].values()[0]));
diff --git a/src/plugins/Input/mad/replaygainreader.h b/src/plugins/Input/mad/replaygainreader.h
index f97fc8980..513ccefe5 100644
--- a/src/plugins/Input/mad/replaygainreader.h
+++ b/src/plugins/Input/mad/replaygainreader.h
@@ -24,6 +24,7 @@
#include <QMap>
#include <QString>
#include <taglib/apetag.h>
+#include <taglib/id3v2tag.h>
#include <qmmp/qmmp.h>
/**
@@ -36,6 +37,7 @@ public:
QMap <Qmmp::ReplayGainKey, double> replayGainInfo() const;
private:
+ void readID3v2(TagLib::ID3v2::Tag *tag);
void readAPE(TagLib::APE::Tag *tag);
void setValue(Qmmp::ReplayGainKey key, QString value);
QMap <Qmmp::ReplayGainKey, double> m_values;