diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2018-08-04 22:15:52 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2018-08-04 22:15:52 +0000 |
| commit | 1ea609bbe5a5e83168ba77379439eaf1dc4ef475 (patch) | |
| tree | 9cc0894358925d74e5f87b14e302fe97cc3d32c9 /src/plugins | |
| parent | 37328c16f51e5bd6f900433c710f26dc8874af6f (diff) | |
| download | qmmp-1ea609bbe5a5e83168ba77379439eaf1dc4ef475.tar.gz qmmp-1ea609bbe5a5e83168ba77379439eaf1dc4ef475.tar.bz2 qmmp-1ea609bbe5a5e83168ba77379439eaf1dc4ef475.zip | |
opus: recent api support
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@8226 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src/plugins')
| -rw-r--r-- | src/plugins/Input/Input.pro | 2 | ||||
| -rw-r--r-- | src/plugins/Input/opus/decoderopusfactory.cpp | 4 | ||||
| -rw-r--r-- | src/plugins/Input/opus/decoderopusfactory.h | 2 | ||||
| -rw-r--r-- | src/plugins/Input/opus/opusmetadatamodel.cpp | 38 | ||||
| -rw-r--r-- | src/plugins/Input/opus/opusmetadatamodel.h | 12 |
5 files changed, 27 insertions, 31 deletions
diff --git a/src/plugins/Input/Input.pro b/src/plugins/Input/Input.pro index 6ca225333..c05586521 100644 --- a/src/plugins/Input/Input.pro +++ b/src/plugins/Input/Input.pro @@ -28,7 +28,7 @@ contains(CONFIG, GME_PLUGIN){ } contains(CONFIG, OPUS_PLUGIN){ -# SUBDIRS += opus + SUBDIRS += opus } contains(CONFIG, CDAUDIO_PLUGIN){ diff --git a/src/plugins/Input/opus/decoderopusfactory.cpp b/src/plugins/Input/opus/decoderopusfactory.cpp index 6e98e85ea..9b86e046a 100644 --- a/src/plugins/Input/opus/decoderopusfactory.cpp +++ b/src/plugins/Input/opus/decoderopusfactory.cpp @@ -55,9 +55,9 @@ Decoder *DecoderOpusFactory::create(const QString &url, QIODevice *input) return new DecoderOpus(url, input); } -MetaDataModel* DecoderOpusFactory::createMetaDataModel(const QString &path, QObject *parent) +MetaDataModel* DecoderOpusFactory::createMetaDataModel(const QString &path, bool readOnly, QObject *parent) { - return new OpusMetaDataModel(path, parent); + return new OpusMetaDataModel(path, readOnly, parent); } QList<TrackInfo *> DecoderOpusFactory::createPlayList(const QString &path, TrackInfo::Parts parts, QStringList *) diff --git a/src/plugins/Input/opus/decoderopusfactory.h b/src/plugins/Input/opus/decoderopusfactory.h index 2e1b2e3a8..ea41d3dd8 100644 --- a/src/plugins/Input/opus/decoderopusfactory.h +++ b/src/plugins/Input/opus/decoderopusfactory.h @@ -36,7 +36,7 @@ public: bool canDecode(QIODevice *input) const; DecoderProperties properties() const; Decoder *create(const QString &path, QIODevice *input); - MetaDataModel* createMetaDataModel(const QString &path, QObject *parent = 0); + MetaDataModel* createMetaDataModel(const QString &path, bool readOnly = true, QObject *parent = 0); QList<TrackInfo *> createPlayList(const QString &path, TrackInfo::Parts parts, QStringList *); QObject* showDetails(QWidget *parent, const QString &path); void showSettings(QWidget *parent); diff --git a/src/plugins/Input/opus/opusmetadatamodel.cpp b/src/plugins/Input/opus/opusmetadatamodel.cpp index cd0f2be5f..bf8196951 100644 --- a/src/plugins/Input/opus/opusmetadatamodel.cpp +++ b/src/plugins/Input/opus/opusmetadatamodel.cpp @@ -26,10 +26,12 @@ #include <taglib/tmap.h> #include "opusmetadatamodel.h" -OpusMetaDataModel::OpusMetaDataModel(const QString &path, QObject *parent) : MetaDataModel(parent) +OpusMetaDataModel::OpusMetaDataModel(const QString &path, bool readOnly, QObject *parent) + : MetaDataModel(readOnly, parent) { m_path = path; - m_file = new TagLib::Ogg::Opus::File(QStringToFileName(m_path)); + m_stream = new TagLib::FileStream(QStringToFileName(path), readOnly); + m_file = new TagLib::Ogg::Opus::File(m_stream); m_tags << new VorbisCommentModel(m_file); } @@ -37,36 +39,28 @@ OpusMetaDataModel::~OpusMetaDataModel() { while(!m_tags.isEmpty()) delete m_tags.takeFirst(); - if(m_file) - { - delete m_file; - m_file = 0; - } + + delete m_file; + delete m_stream; } -QHash<QString, QString> OpusMetaDataModel::audioProperties() +QList<MetaDataItem> OpusMetaDataModel::extraProperties() const { - QHash<QString, QString> ap; - TagLib::Ogg::Opus::File f (QStringToFileName(m_path)); - if(m_file && m_file->isValid()) + QList<MetaDataItem> ep; + TagLib::Ogg::Opus::Properties *ap = m_file->audioProperties(); + if(ap) { - QString text = QString("%1").arg(m_file->audioProperties()->length()/60); - text +=":"+QString("%1").arg(m_file->audioProperties()->length()%60,2,10,QChar('0')); - ap.insert(tr("Length"), text); - ap.insert(tr("Sample rate"), QString("%1 " + tr("Hz")).arg(m_file->audioProperties()->sampleRate())); - ap.insert(tr("Channels"), QString("%1").arg(m_file->audioProperties()->channels())); - ap.insert(tr("Bitrate"), QString("%1 " + tr("kbps")).arg(m_file->audioProperties()->bitrate())); - ap.insert(tr("File size"), QString("%1 "+tr("KB")).arg(m_file->length()/1024)); + ep << MetaDataItem(tr("Version"), ap->opusVersion()); } - return ap; + return ep; } -QList<TagModel* > OpusMetaDataModel::tags() +QList<TagModel* > OpusMetaDataModel::tags() const { return m_tags; } -QPixmap OpusMetaDataModel::cover() +QPixmap OpusMetaDataModel::cover() const { if(!m_file || !m_file->isValid()) return QPixmap(); @@ -106,7 +100,7 @@ QPixmap OpusMetaDataModel::cover() return QPixmap(); } -ulong OpusMetaDataModel::readPictureBlockField(QByteArray data, int offset) +ulong OpusMetaDataModel::readPictureBlockField(QByteArray data, int offset) const { return (((uchar)data.data()[offset] & 0xff) << 24) | (((uchar)data.data()[offset+1] & 0xff) << 16) | diff --git a/src/plugins/Input/opus/opusmetadatamodel.h b/src/plugins/Input/opus/opusmetadatamodel.h index 2d2a7a917..20b7b5cd3 100644 --- a/src/plugins/Input/opus/opusmetadatamodel.h +++ b/src/plugins/Input/opus/opusmetadatamodel.h @@ -23,23 +23,25 @@ #include <taglib/opusfile.h> #include <taglib/xiphcomment.h> +#include <taglib/tfilestream.h> #include <qmmp/metadatamodel.h> class OpusMetaDataModel : public MetaDataModel { Q_OBJECT public: - OpusMetaDataModel(const QString &path, QObject *parent); + OpusMetaDataModel(const QString &path, bool readOnly, QObject *parent); ~OpusMetaDataModel(); - QHash<QString, QString> audioProperties(); - QList<TagModel* > tags(); - QPixmap cover(); + QList<MetaDataItem> extraProperties() const override; + QList<TagModel* > tags() const override; + QPixmap cover() const override; private: + ulong readPictureBlockField(QByteArray data, int offset) const; QString m_path; QList<TagModel* > m_tags; TagLib::Ogg::Opus::File *m_file; - ulong readPictureBlockField(QByteArray data, int offset); + TagLib::FileStream *m_stream; }; class VorbisCommentModel : public TagModel |
