diff options
Diffstat (limited to 'src/plugins/Input/mpeg')
| -rw-r--r-- | src/plugins/Input/mpeg/decodermpegfactory.cpp | 6 | ||||
| -rw-r--r-- | src/plugins/Input/mpeg/decodermpegfactory.h | 5 | ||||
| -rw-r--r-- | src/plugins/Input/mpeg/mpegmetadatamodel.cpp | 69 | ||||
| -rw-r--r-- | src/plugins/Input/mpeg/mpegmetadatamodel.h | 10 |
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 |
