aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/Input/mpeg
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/Input/mpeg')
-rw-r--r--src/plugins/Input/mpeg/decodermpegfactory.cpp6
-rw-r--r--src/plugins/Input/mpeg/decodermpegfactory.h5
-rw-r--r--src/plugins/Input/mpeg/mpegmetadatamodel.cpp69
-rw-r--r--src/plugins/Input/mpeg/mpegmetadatamodel.h10
4 files changed, 33 insertions, 57 deletions
diff --git a/src/plugins/Input/mpeg/decodermpegfactory.cpp b/src/plugins/Input/mpeg/decodermpegfactory.cpp
index b617329df..5d9e6202a 100644
--- a/src/plugins/Input/mpeg/decodermpegfactory.cpp
+++ b/src/plugins/Input/mpeg/decodermpegfactory.cpp
@@ -76,7 +76,7 @@ bool DecoderMPEGFactory::canDecode(QIODevice *input) const
return false;
if (!memcmp(buf + 8, "WAVE", 4))
- return !memcmp(buf + 20, "U" ,1);
+ return !memcmp(buf + 20, "U" ,1);
if(!memcmp(buf, "ID3", 3))
{
@@ -361,9 +361,9 @@ QList<TrackInfo *> DecoderMPEGFactory::createPlayList(const QString &path, Track
return QList<TrackInfo*>() << info;
}
-MetaDataModel* DecoderMPEGFactory::createMetaDataModel(const QString &path, QObject *parent)
+MetaDataModel* DecoderMPEGFactory::createMetaDataModel(const QString &path, bool readOnly, QObject *parent)
{
- return new MPEGMetaDataModel(m_using_rusxmms, path, parent);
+ return new MPEGMetaDataModel(m_using_rusxmms, path, readOnly, parent);
}
void DecoderMPEGFactory::showSettings(QWidget *parent)
diff --git a/src/plugins/Input/mpeg/decodermpegfactory.h b/src/plugins/Input/mpeg/decodermpegfactory.h
index 469a2ed6c..2d8b3f383 100644
--- a/src/plugins/Input/mpeg/decodermpegfactory.h
+++ b/src/plugins/Input/mpeg/decodermpegfactory.h
@@ -22,8 +22,7 @@
#include <qmmp/decoderfactory.h>
-class DecoderMPEGFactory : public QObject,
- DecoderFactory
+class DecoderMPEGFactory : public QObject, DecoderFactory
{
Q_OBJECT
Q_PLUGIN_METADATA(IID "org.qmmp.qmmp.DecoderFactoryInterface.1.0")
@@ -35,7 +34,7 @@ public:
DecoderProperties properties() const;
Decoder *create(const QString &, QIODevice *input);
QList<TrackInfo *> createPlayList(const QString &path, TrackInfo::Parts parts, QStringList *);
- MetaDataModel* createMetaDataModel(const QString &path, QObject *parent = 0);
+ MetaDataModel* createMetaDataModel(const QString &path, bool readOnly = true, QObject *parent = 0);
void showSettings(QWidget *parent);
void showAbout(QWidget *parent);
QString translation() const;
diff --git a/src/plugins/Input/mpeg/mpegmetadatamodel.cpp b/src/plugins/Input/mpeg/mpegmetadatamodel.cpp
index 65f2c94d6..187331df4 100644
--- a/src/plugins/Input/mpeg/mpegmetadatamodel.cpp
+++ b/src/plugins/Input/mpeg/mpegmetadatamodel.cpp
@@ -20,7 +20,6 @@
#include <QTextCodec>
#include <QSettings>
-
#include <taglib/tag.h>
#include <taglib/fileref.h>
#include <taglib/id3v1tag.h>
@@ -32,12 +31,14 @@
#include <taglib/mpegproperties.h>
#include <taglib/textidentificationframe.h>
#include <taglib/attachedpictureframe.h>
-
+#include <taglib/id3v2framefactory.h>
#include "mpegmetadatamodel.h"
-MPEGMetaDataModel::MPEGMetaDataModel(bool using_rusxmms, const QString &path, QObject *parent) : MetaDataModel(parent)
+MPEGMetaDataModel::MPEGMetaDataModel(bool using_rusxmms, const QString &path, bool readOnly, QObject *parent) :
+ MetaDataModel(readOnly, parent)
{
- m_file = new TagLib::MPEG::File(QStringToFileName(path));
+ m_stream = new TagLib::FileStream(QStringToFileName(path), readOnly);
+ m_file = new TagLib::MPEG::File(m_stream, TagLib::ID3v2::FrameFactory::instance());
m_tags << new MpegFileTagModel(using_rusxmms, m_file, TagLib::MPEG::File::ID3v1);
m_tags << new MpegFileTagModel(using_rusxmms, m_file, TagLib::MPEG::File::ID3v2);
m_tags << new MpegFileTagModel(using_rusxmms, m_file, TagLib::MPEG::File::APE);
@@ -48,68 +49,42 @@ MPEGMetaDataModel::~MPEGMetaDataModel()
while(!m_tags.isEmpty())
delete m_tags.takeFirst();
delete m_file;
+ delete m_stream;
}
-QHash<QString, QString> MPEGMetaDataModel::audioProperties()
+QList<MetaDataItem> MPEGMetaDataModel::extraProperties() const
{
- QHash<QString, QString> ap;
- QString text;
- QString v;
- switch((int)m_file->audioProperties()->version())
- {
- case TagLib::MPEG::Header::Version1:
- v = "1";
- break;
- case TagLib::MPEG::Header::Version2:
- v = "2";
- break;
- case TagLib::MPEG::Header::Version2_5:
- v = "2.5";
- }
- text = QString("MPEG-%1 layer %2").arg(v).arg(m_file->audioProperties()->layer());
- ap.insert(tr("Format"), text);
- text = QString("%1").arg(m_file->audioProperties()->bitrate());
- ap.insert(tr("Bitrate"), text+" "+tr("kbps"));
- text = QString("%1").arg(m_file->audioProperties()->sampleRate());
- ap.insert(tr("Sample rate"), text+" "+tr("Hz"));
- switch (m_file->audioProperties()->channelMode())
+ QList<MetaDataItem> ep;
+ TagLib::MPEG::Properties *ap = m_file->audioProperties();
+
+ switch (ap->channelMode())
{
case TagLib::MPEG::Header::Stereo:
- ap.insert(tr("Mode"), "Stereo");
+ ep << MetaDataItem(tr("Mode"), "Stereo");
break;
case TagLib::MPEG::Header::JointStereo:
- ap.insert(tr("Mode"), "Joint stereo");
+ ep << MetaDataItem(tr("Mode"), "Joint stereo");
break;
case TagLib::MPEG::Header::DualChannel:
- ap.insert(tr("Mode"), "Dual channel");
+ ep << MetaDataItem(tr("Mode"), "Dual channel");
break;
case TagLib::MPEG::Header::SingleChannel:
- ap.insert(tr("Mode"), "Single channel");
+ ep << MetaDataItem(tr("Mode"), "Single channel");
break;
}
- text = QString("%1 "+tr("KB")).arg(m_file->length()/1024);
- ap.insert(tr("File size"), text);
- if (m_file->audioProperties()->protectionEnabled())
- ap.insert(tr("Protection"), tr("Yes"));
- else
- ap.insert(tr("Protection"), tr("No"));
- if (m_file->audioProperties()->isCopyrighted())
- ap.insert(tr("Copyright"), tr("Yes"));
- else
- ap.insert(tr("Copyright"), tr("No"));
- if (m_file->audioProperties()->isOriginal())
- ap.insert(tr("Original"), tr("Yes"));
- else
- ap.insert(tr("Original"), tr("No"));
- return ap;
+ ep << MetaDataItem(tr("Protection"), ap->protectionEnabled());
+ ep << MetaDataItem(tr("Copyright"), ap->isCopyrighted());
+ ep << MetaDataItem(tr("Original"), ap->isOriginal());
+
+ return ep;
}
-QList<TagModel* > MPEGMetaDataModel::tags()
+QList<TagModel* > MPEGMetaDataModel::tags() const
{
return m_tags;
}
-QPixmap MPEGMetaDataModel::cover()
+QPixmap MPEGMetaDataModel::cover() const
{
if(!m_file->ID3v2Tag())
return QPixmap();
diff --git a/src/plugins/Input/mpeg/mpegmetadatamodel.h b/src/plugins/Input/mpeg/mpegmetadatamodel.h
index 30191cdb7..02d0a1cfb 100644
--- a/src/plugins/Input/mpeg/mpegmetadatamodel.h
+++ b/src/plugins/Input/mpeg/mpegmetadatamodel.h
@@ -23,6 +23,7 @@
#include <qmmp/metadatamodel.h>
#include <taglib/mpegfile.h>
+#include <taglib/tfilestream.h>
class QTextCodec;
@@ -30,15 +31,16 @@ class MPEGMetaDataModel : public MetaDataModel
{
Q_OBJECT
public:
- MPEGMetaDataModel(bool using_rusxmms, const QString &path, QObject *parent);
+ MPEGMetaDataModel(bool using_rusxmms, const QString &path, bool readOnly, QObject *parent);
~MPEGMetaDataModel();
- QHash<QString, QString> audioProperties();
- QList<TagModel* > tags();
- QPixmap cover();
+ QList<MetaDataItem> extraProperties() const override;
+ QList<TagModel* > tags() const override;
+ QPixmap cover() const override;
private:
QList<TagModel* > m_tags;
TagLib::MPEG::File *m_file;
+ TagLib::FileStream *m_stream;
};
class MpegFileTagModel : public TagModel