aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2008-10-31 20:30:38 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2008-10-31 20:30:38 +0000
commit9afdb33ec0ab2b4c8ad98ff7641999af45b315f2 (patch)
treed14c9a436f1b6130250b83c356e1e84f623498b5 /src
parent311224cda472f8d308884353960cab6231bb769d (diff)
downloadqmmp-9afdb33ec0ab2b4c8ad98ff7641999af45b315f2.tar.gz
qmmp-9afdb33ec0ab2b4c8ad98ff7641999af45b315f2.tar.bz2
qmmp-9afdb33ec0ab2b4c8ad98ff7641999af45b315f2.zip
AAC plugin: added details dialog
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@607 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src')
-rw-r--r--src/plugins/Input/aac/CMakeLists.txt2
-rw-r--r--src/plugins/Input/aac/aac.pro6
-rw-r--r--src/plugins/Input/aac/aacfile.cpp77
-rw-r--r--src/plugins/Input/aac/aacfile.h24
-rw-r--r--src/plugins/Input/aac/decoderaacfactory.cpp6
-rw-r--r--src/plugins/Input/aac/detailsdialog.cpp96
-rw-r--r--src/plugins/Input/aac/detailsdialog.h8
-rw-r--r--src/plugins/Input/aac/detailsdialog.ui24
-rw-r--r--src/plugins/Input/aac/tagextractor.cpp115
-rw-r--r--src/plugins/Input/aac/tagextractor.h68
10 files changed, 134 insertions, 292 deletions
diff --git a/src/plugins/Input/aac/CMakeLists.txt b/src/plugins/Input/aac/CMakeLists.txt
index ae9d22b32..1da0221c8 100644
--- a/src/plugins/Input/aac/CMakeLists.txt
+++ b/src/plugins/Input/aac/CMakeLists.txt
@@ -39,7 +39,6 @@ SET(libaac_SRCS
decoderaacfactory.cpp
detailsdialog.cpp
aacfile.cpp
- tagextractor.cpp
)
SET(libaac_MOC_HDRS
@@ -47,7 +46,6 @@ SET(libaac_MOC_HDRS
decoder_aac.h
detailsdialog.h
aacfile.h
- tagextractor.h
)
#SET(libaac_RCCS translations/translations.qrc)
diff --git a/src/plugins/Input/aac/aac.pro b/src/plugins/Input/aac/aac.pro
index 01e2bbff0..5bc0cb38a 100644
--- a/src/plugins/Input/aac/aac.pro
+++ b/src/plugins/Input/aac/aac.pro
@@ -4,13 +4,11 @@ FORMS += detailsdialog.ui
HEADERS += decoderaacfactory.h \
decoder_aac.h \
detailsdialog.h \
- aacfile.h \
- tagextractor.h
+ aacfile.h
SOURCES += decoder_aac.cpp \
decoderaacfactory.cpp \
detailsdialog.cpp \
- aacfile.cpp \
- tagextractor.cpp
+ aacfile.cpp
TARGET =$$PLUGINS_PREFIX/Input/aac
QMAKE_CLEAN =$$PLUGINS_PREFIX/Input/libaac.so
diff --git a/src/plugins/Input/aac/aacfile.cpp b/src/plugins/Input/aac/aacfile.cpp
index 8df0592f5..1e78a9590 100644
--- a/src/plugins/Input/aac/aacfile.cpp
+++ b/src/plugins/Input/aac/aacfile.cpp
@@ -19,10 +19,11 @@
***************************************************************************/
#include <QIODevice>
+#include <QBuffer>
+#include <QTextCodec>
#include <neaacdec.h>
-#include "tagextractor.h"
#include "aacfile.h"
#define MAX_CHANNELS 6
@@ -30,12 +31,11 @@
static int adts_sample_rates[] = {96000,88200,64000,48000,44100,32000,24000,22050,16000,12000,11025,8000,7350,0,0,0};
-AACFile::AACFile(QIODevice *i)
+AACFile::AACFile(QIODevice *i, bool metaData)
{
m_isValid = FALSE;
m_length = 0;
m_bitrate = 0;
- m_ext = 0;
m_input = i;
uchar buf[AAC_BUFFER_SIZE];
qint64 buf_at = i->peek((char *) buf, AAC_BUFFER_SIZE);
@@ -55,9 +55,10 @@ AACFile::AACFile(QIODevice *i)
}
memmove (buf, buf + tag_size, buf_at - tag_size);
- m_ext = new TagExtractor(i);
+ if (metaData)
+ parseID3v2(); //parse id3v2 tags
}
- //try to determenate header type;
+ //try to determnate header type;
if (buf[0] == 0xff && ((buf[1] & 0xf6) == 0xf0))
{
qDebug("AACFile: ADTS header found");
@@ -96,6 +97,16 @@ quint32 AACFile::bitrate()
return m_bitrate;
}
+bool AACFile::isValid()
+{
+ return m_isValid;
+}
+
+const QMap<Qmmp::MetaData, QString> AACFile::metaData()
+{
+ return m_metaData;
+}
+
void AACFile::parseADTS()
{
uchar buf[FAAD_MIN_STREAMSIZE*MAX_CHANNELS];
@@ -165,12 +176,60 @@ void AACFile::parseADTS()
m_length = 1;
}
-bool AACFile::isValid()
+void AACFile::parseID3v2()
{
- return m_isValid;
+ QByteArray array = m_input->peek(2048);
+ int offset = array.indexOf("ID3");
+ if (offset < 0)
+ return;
+ ID3v2Tag taglib_tag(&array, offset);
+ if (taglib_tag.isEmpty())
+ return;
+
+ TagLib::String album = taglib_tag.album();
+ TagLib::String artist = taglib_tag.artist();
+ TagLib::String comment = taglib_tag.comment();
+ TagLib::String genre = taglib_tag.genre();
+ TagLib::String title = taglib_tag.title();
+
+ QTextCodec *codec = QTextCodec::codecForName ("UTF-8");
+ bool utf = TRUE;
+
+ m_metaData.insert(Qmmp::ALBUM,
+ codec->toUnicode(album.toCString(utf)).trimmed());
+ m_metaData.insert(Qmmp::ARTIST,
+ codec->toUnicode(artist.toCString(utf)).trimmed());
+ m_metaData.insert(Qmmp::COMMENT,
+ codec->toUnicode(comment.toCString(utf)).trimmed());
+ m_metaData.insert(Qmmp::GENRE,
+ codec->toUnicode(genre.toCString(utf)).trimmed());
+ m_metaData.insert(Qmmp::TITLE,
+ codec->toUnicode(title.toCString(utf)).trimmed());
+ m_metaData.insert(Qmmp::YEAR,
+ QString::number(taglib_tag.year()));
+ m_metaData.insert(Qmmp::TRACK,
+ QString::number(taglib_tag.track()));
}
-const QMap<Qmmp::MetaData, QString> AACFile::metaData()
+ID3v2Tag::ID3v2Tag(QByteArray *array, long offset) : TagLib::ID3v2::Tag()
+{
+ m_buf = new QBuffer(array);
+ m_buf->open(QIODevice::ReadOnly);
+ m_offset = offset;
+ read();
+}
+
+void ID3v2Tag::read ()
{
- return m_ext ? m_ext->id3v2tag() : QMap<Qmmp::MetaData, QString>();
+ m_buf->seek(m_offset);
+ uint to_read = TagLib::ID3v2::Header::size();
+ if (to_read > AAC_BUFFER_SIZE - uint(m_offset))
+ return;
+ header()->setData(TagLib::ByteVector(m_buf->read(to_read).data(), to_read));
+ to_read = header()->tagSize();
+ if (!to_read || AAC_BUFFER_SIZE < m_offset + TagLib::ID3v2::Header::size())
+ return;
+ QByteArray array = m_buf->read(to_read);
+ TagLib::ByteVector v(array.data(), array.size());
+ parse(v);
}
diff --git a/src/plugins/Input/aac/aacfile.h b/src/plugins/Input/aac/aacfile.h
index 3c9c2bf48..8e57b7588 100644
--- a/src/plugins/Input/aac/aacfile.h
+++ b/src/plugins/Input/aac/aacfile.h
@@ -24,10 +24,17 @@
#include <QMap>
#include <QString>
+#include <taglib/tag.h>
+#include <taglib/fileref.h>
+#include <taglib/id3v1tag.h>
+#include <taglib/id3v2tag.h>
+#include <taglib/id3v2header.h>
+
#include <qmmp/qmmp.h>
class QIODevice;
class TagExtractor;
+class QBuffer;
/**
@author Ilya Kotov <forkotov02@hotmail.ru>
@@ -35,7 +42,7 @@ class TagExtractor;
class AACFile
{
public:
- AACFile(QIODevice *i);
+ AACFile(QIODevice *i, bool metaData = TRUE);
~AACFile();
@@ -46,12 +53,25 @@ public:
private:
void parseADTS();
+ void parseID3v2();
qint64 m_length;
quint32 m_bitrate;
QIODevice *m_input;
bool m_isValid;
QMap<Qmmp::MetaData, QString> m_metaData;
- TagExtractor *m_ext;
+};
+
+class ID3v2Tag : public TagLib::ID3v2::Tag
+{
+public:
+ ID3v2Tag(QByteArray *array, long offset);
+
+protected:
+ void read ();
+
+private:
+ QBuffer *m_buf;
+ long m_offset;
};
#endif
diff --git a/src/plugins/Input/aac/decoderaacfactory.cpp b/src/plugins/Input/aac/decoderaacfactory.cpp
index 9b91f1d45..d55f64fdc 100644
--- a/src/plugins/Input/aac/decoderaacfactory.cpp
+++ b/src/plugins/Input/aac/decoderaacfactory.cpp
@@ -77,9 +77,9 @@ QList<FileInfo *> DecoderAACFactory::createPlayList(const QString &fileName)
QObject* DecoderAACFactory::showDetails(QWidget *parent, const QString &path)
{
- /*DetailsDialog *d = new DetailsDialog(parent, path);
- d -> show();*/
- return 0;
+ DetailsDialog *d = new DetailsDialog(parent, path);
+ d -> show();
+ return d;
}
void DecoderAACFactory::showSettings(QWidget *)
diff --git a/src/plugins/Input/aac/detailsdialog.cpp b/src/plugins/Input/aac/detailsdialog.cpp
index 472046717..fbd6511c8 100644
--- a/src/plugins/Input/aac/detailsdialog.cpp
+++ b/src/plugins/Input/aac/detailsdialog.cpp
@@ -1,5 +1,5 @@
/***************************************************************************
- * Copyright (C) 2007 by Ilya Kotov *
+ * Copyright (C) 2008 by Ilya Kotov *
* forkotov02@hotmail.ru *
* *
* This program is free software; you can redistribute it and/or modify *
@@ -24,6 +24,7 @@
#include <QFile>
#include <QFileInfo>
+#include "aacfile.h"
#include "detailsdialog.h"
#define QStringToTString_qt4(s) TagLib::String(s.toUtf8().constData(), TagLib::String::UTF8)
@@ -37,79 +38,44 @@ DetailsDialog::DetailsDialog(QWidget *parent, const QString &path)
setWindowTitle (path.section('/',-1));
path.section('/',-1);
ui.pathLineEdit->setText(m_path);
- if(QFile::exists(m_path))
- {
- loadMPCInfo();
- loadTag();
- }
+ if (QFile::exists(m_path))
+ loadAACInfo();
}
DetailsDialog::~DetailsDialog()
{}
-void DetailsDialog::loadMPCInfo()
+void DetailsDialog::loadAACInfo()
{
- TagLib::MPC::File f (m_path.toLocal8Bit());
+ QFile input(m_path);
+ if (!input.open(QIODevice::ReadOnly))
+ return;
+
+ AACFile f(&input);
+
QString text;
- text = QString("%1").arg(f.audioProperties()->length()/60);
- text +=":"+QString("%1").arg(f.audioProperties()->length()%60,2,10,QChar('0'));
+ text = QString("%1").arg(f.length()/60);
+ text +=":"+QString("%1").arg(f.length()%60,2,10,QChar('0'));
ui.lengthLabel->setText(text);
- text = QString("%1").arg(f.audioProperties()->sampleRate());
- ui.sampleRateLabel->setText(text+" "+tr("Hz"));
- text = QString("%1").arg(f.audioProperties()->channels());
- ui.channelsLabel->setText(text);
- text = QString("%1").arg(f.audioProperties()->bitrate());
- ui.bitrateLabel->setText(text+" "+tr("kbps"));
- text = QString("%1").arg(f.audioProperties()->mpcVersion());
- ui.versionLabel->setText(text);
- text = QString("%1 "+tr("KB")).arg(f.length()/1024);
+ /*text = QString("%1").arg(f.audioProperties()->sampleRate());
+ ui.sampleRateLabel->setText(text+" "+tr("Hz"));*/
+ /*text = QString("%1").arg(f.audioProperties()->channels());
+ ui.channelsLabel->setText(text);*/
+ text = QString("%1").arg(f.bitrate());
+ ui.bitrateLabel->setText(text+" "+tr("kbps"));
+ /*text = QString("%1").arg(f.audioProperties()->mpcVersion());
+ ui.versionLabel->setText(text);*/
+ text = QString("%1 "+tr("KB")).arg(input.size()/1024);
ui.fileSizeLabel->setText(text);
-}
-
-void DetailsDialog::loadTag()
-{
- TagLib::FileRef f (m_path.toLocal8Bit());
-
- if (f.tag())
- { //TODO: load codec name from config
-
- TagLib::String title = f.tag()->title();
- TagLib::String artist = f.tag()->artist();
- TagLib::String album = f.tag()->album();
- TagLib::String comment = f.tag()->comment();
- TagLib::String genre = f.tag()->genre();
- QString string = QString::fromUtf8(title.toCString(TRUE)).trimmed();
- ui.titleLineEdit->setText(string);
- string = QString::fromUtf8(artist.toCString(TRUE)).trimmed();
- ui.artistLineEdit->setText(string);
- string = QString::fromUtf8(album.toCString(TRUE)).trimmed();
- ui.albumLineEdit->setText(string);
- string = QString::fromUtf8(comment.toCString(TRUE)).trimmed();
- ui.commentLineEdit->setText(string);
- string = QString("%1").arg(f.tag()->year());
- ui.yearLineEdit->setText(string);
- string = QString("%1").arg(f.tag()->track());
- ui.trackLineEdit->setText(string);
- string = QString::fromUtf8(genre.toCString(TRUE)).trimmed();
- ui.genreLineEdit->setText(string);
- }
- QFileInfo info(m_path);
- ui.saveButton->setEnabled(info.isWritable());
- connect(ui.saveButton, SIGNAL(clicked()), SLOT(saveTag()));
-}
-
-void DetailsDialog::saveTag()
-{
- TagLib::FileRef f (m_path.toLocal8Bit());
-
- f.tag()->setTitle(QStringToTString_qt4(ui.titleLineEdit->text()));
- f.tag()->setArtist(QStringToTString_qt4(ui.artistLineEdit->text()));
- f.tag()->setAlbum(QStringToTString_qt4(ui.albumLineEdit->text()));
- f.tag()->setComment(QStringToTString_qt4(ui.commentLineEdit->text()));
- f.tag()->setGenre(QStringToTString_qt4(ui.genreLineEdit->text()));
- f.tag()->setYear(ui.yearLineEdit->text().toUInt());
- f.tag()->setTrack(ui.trackLineEdit->text().toUInt());
- f.save();
+ //show metadata
+ ui.titleLineEdit->setText(f.metaData().value(Qmmp::TITLE));
+ ui.artistLineEdit->setText(f.metaData().value(Qmmp::ARTIST));
+ ui.albumLineEdit->setText(f.metaData().value(Qmmp::ALBUM));
+ ui.commentLineEdit->setText(f.metaData().value(Qmmp::COMMENT));
+ ui.yearLineEdit->setText(f.metaData().value(Qmmp::YEAR));
+ ui.trackLineEdit->setText(f.metaData().value(Qmmp::TRACK));
+ ui.genreLineEdit->setText(f.metaData().value(Qmmp::GENRE));
+ input.close();
}
diff --git a/src/plugins/Input/aac/detailsdialog.h b/src/plugins/Input/aac/detailsdialog.h
index 70540bda1..7716b5181 100644
--- a/src/plugins/Input/aac/detailsdialog.h
+++ b/src/plugins/Input/aac/detailsdialog.h
@@ -1,5 +1,5 @@
/***************************************************************************
- * Copyright (C) 2007 by Ilya Kotov *
+ * Copyright (C) 2008 by Ilya Kotov *
* forkotov02@hotmail.ru *
* *
* This program is free software; you can redistribute it and/or modify *
@@ -35,12 +35,8 @@ public:
~DetailsDialog();
-private slots:
- void saveTag();
-
private:
- void loadMPCInfo();
- void loadTag();
+ void loadAACInfo();
Ui::DetailsDialog ui;
QString m_path;
diff --git a/src/plugins/Input/aac/detailsdialog.ui b/src/plugins/Input/aac/detailsdialog.ui
index 618300c10..b461fa38b 100644
--- a/src/plugins/Input/aac/detailsdialog.ui
+++ b/src/plugins/Input/aac/detailsdialog.ui
@@ -39,25 +39,13 @@
</size>
</property>
<property name="title" >
- <string>Musepack Info</string>
+ <string>AAC Info</string>
</property>
<layout class="QGridLayout" >
- <property name="leftMargin" >
+ <property name="margin" >
<number>8</number>
</property>
- <property name="topMargin" >
- <number>8</number>
- </property>
- <property name="rightMargin" >
- <number>8</number>
- </property>
- <property name="bottomMargin" >
- <number>8</number>
- </property>
- <property name="horizontalSpacing" >
- <number>6</number>
- </property>
- <property name="verticalSpacing" >
+ <property name="spacing" >
<number>6</number>
</property>
<item row="6" column="0" >
@@ -65,7 +53,7 @@
<property name="orientation" >
<enum>Qt::Vertical</enum>
</property>
- <property name="sizeHint" >
+ <property name="sizeHint" stdset="0" >
<size>
<width>74</width>
<height>151</height>
@@ -196,7 +184,7 @@
</sizepolicy>
</property>
<property name="title" >
- <string>APE Tag</string>
+ <string>ID3v2 Tag</string>
</property>
<layout class="QGridLayout" >
<item row="0" column="0" >
@@ -308,7 +296,7 @@
<property name="orientation" >
<enum>Qt::Horizontal</enum>
</property>
- <property name="sizeHint" >
+ <property name="sizeHint" stdset="0" >
<size>
<width>111</width>
<height>20</height>
diff --git a/src/plugins/Input/aac/tagextractor.cpp b/src/plugins/Input/aac/tagextractor.cpp
deleted file mode 100644
index 1385c8a85..000000000
--- a/src/plugins/Input/aac/tagextractor.cpp
+++ /dev/null
@@ -1,115 +0,0 @@
-/***************************************************************************
- * Copyright (C) 2008 by Ilya Kotov *
- * forkotov02@hotmail.ru *
- * *
- * This program is free software; you can redistribute it and/or modify *
- * it under the terms of the GNU General Public License as published by *
- * the Free Software Foundation; either version 2 of the License, or *
- * (at your option) any later version. *
- * *
- * This program is distributed in the hope that it will be useful, *
- * but WITHOUT ANY WARRANTY; without even the implied warranty of *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
- * GNU General Public License for more details. *
- * *
- * You should have received a copy of the GNU General Public License *
- * along with this program; if not, write to the *
- * Free Software Foundation, Inc., *
- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
- ***************************************************************************/
-
-#include <QIODevice>
-#include <QSettings>
-#include <QByteArray>
-#include <QBuffer>
-#include <QTextCodec>
-#include <QSettings>
-#include <QDir>
-#include <stdlib.h>
-
-#include "tagextractor.h"
-
-TagExtractor::TagExtractor(QIODevice *d)
-{
- m_d = d;
-}
-
-
-TagExtractor::~TagExtractor()
-{
-}
-
-const QMap<Qmmp::MetaData, QString> TagExtractor::id3v2tag()
-{
- QByteArray array = m_d->peek(2048);
- int offset = array.indexOf("ID3");
- if (offset < 0)
- return m_tag;
- ID3v2Tag taglib_tag(&array, offset);
- if (taglib_tag.isEmpty())
- return m_tag;
-
- TagLib::String album = taglib_tag.album();
- TagLib::String artist = taglib_tag.artist();
- TagLib::String comment = taglib_tag.comment();
- TagLib::String genre = taglib_tag.genre();
- TagLib::String title = taglib_tag.title();
-
- QSettings settings(QDir::homePath()+"/.qmmp/qmmprc", QSettings::IniFormat);
- settings.beginGroup("MAD");
- QByteArray name = settings.value("ID3v2_encoding","UTF-8").toByteArray ();
- bool utf = FALSE;
- QTextCodec *codec = 0;
- if (name.contains("UTF"))
- {
- codec = QTextCodec::codecForName ("UTF-8");
- utf = TRUE;
- }
- else
- codec = QTextCodec::codecForName(name);
- settings.endGroup();
-
- if (!codec)
- codec = QTextCodec::codecForName ("UTF-8");
-
- m_tag.insert(Qmmp::ALBUM,
- codec->toUnicode(album.toCString(utf)).trimmed());
- m_tag.insert(Qmmp::ARTIST,
- codec->toUnicode(artist.toCString(utf)).trimmed());
- m_tag.insert(Qmmp::COMMENT,
- codec->toUnicode(comment.toCString(utf)).trimmed());
- m_tag.insert(Qmmp::GENRE,
- codec->toUnicode(genre.toCString(utf)).trimmed());
- m_tag.insert(Qmmp::TITLE,
- codec->toUnicode(title.toCString(utf)).trimmed());
- m_tag.insert(Qmmp::YEAR,
- QString::number(taglib_tag.year()));
- m_tag.insert(Qmmp::TRACK,
- QString::number(taglib_tag.track()));
-
- return m_tag;
-
-}
-
-ID3v2Tag::ID3v2Tag(QByteArray *array, long offset) : TagLib::ID3v2::Tag()
-{
- m_buf = new QBuffer(array);
- m_buf->open(QIODevice::ReadOnly);
- m_offset = offset;
- read();
-}
-
-void ID3v2Tag::read ()
-{
- m_buf->seek(m_offset);
- uint to_read = TagLib::ID3v2::Header::size();
- if (to_read > 2048 - uint(m_offset))
- return;
- header()->setData(TagLib::ByteVector(m_buf->read(to_read).data(), to_read));
- to_read = header()->tagSize();
- if (!to_read || 2048 < m_offset + TagLib::ID3v2::Header::size())
- return;
- QByteArray array = m_buf->read(to_read);
- TagLib::ByteVector v(array.data(), array.size());
- parse(v);
-}
diff --git a/src/plugins/Input/aac/tagextractor.h b/src/plugins/Input/aac/tagextractor.h
deleted file mode 100644
index 707719535..000000000
--- a/src/plugins/Input/aac/tagextractor.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/***************************************************************************
- * Copyright (C) 2008 by Ilya Kotov *
- * forkotov02@hotmail.ru *
- * *
- * This program is free software; you can redistribute it and/or modify *
- * it under the terms of the GNU General Public License as published by *
- * the Free Software Foundation; either version 2 of the License, or *
- * (at your option) any later version. *
- * *
- * This program is distributed in the hope that it will be useful, *
- * but WITHOUT ANY WARRANTY; without even the implied warranty of *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
- * GNU General Public License for more details. *
- * *
- * You should have received a copy of the GNU General Public License *
- * along with this program; if not, write to the *
- * Free Software Foundation, Inc., *
- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
- ***************************************************************************/
-#ifndef TAGEXTRACTOR_H
-#define TAGEXTRACTOR_H
-
-#include <QMap>
-
-#include <taglib/tag.h>
-#include <taglib/fileref.h>
-#include <taglib/id3v1tag.h>
-#include <taglib/id3v2tag.h>
-#include <taglib/id3v2header.h>
-
-#include <qmmp/qmmp.h>
-
-class QIODevice;
-class QBuffer;
-class QByteArray;
-
-/**
- @author Ilya Kotov <forkotov02@hotmail.ru>
-*/
-class TagExtractor
-{
-public:
- TagExtractor(QIODevice *d);
-
- ~TagExtractor();
-
- const QMap<Qmmp::MetaData, QString> id3v2tag();
-
-private:
- QMap<Qmmp::MetaData, QString> m_tag;
- QIODevice *m_d;
-
-};
-
-class ID3v2Tag : public TagLib::ID3v2::Tag
-{
-public:
- ID3v2Tag(QByteArray *array, long offset);
-
-protected:
- void read ();
-
-private:
- QBuffer *m_buf;
- long m_offset;
-};
-
-#endif