summaryrefslogtreecommitdiffstats
path: root/src/plugins
diff options
context:
space:
mode:
authorLiang Qi <liang.qi@qt.io>2016-10-04 13:36:27 +0200
committerLiang Qi <liang.qi@qt.io>2016-10-04 13:36:27 +0200
commit983bd3ecedf2b1c9fa68ee9cc4edc7d1be59ff37 (patch)
treede06f175521d481ebb69e8116d95ea7434aa93ac /src/plugins
parent1a34596b426f8a685453699ad44c45075a6c3681 (diff)
parent026aec5079375c866cd88ba176c88d2842d1b260 (diff)
Merge remote-tracking branch 'origin/5.6' into 5.7
Conflicts: tests/auto/integration/qaudiooutput/tst_qaudiooutput.cpp Change-Id: I4a30fc030c25e7b8da3eb9f386c4a5fa468df141
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/avfoundation/mediaplayer/avfmediaplayermetadatacontrol.h2
-rw-r--r--src/plugins/avfoundation/mediaplayer/avfmediaplayermetadatacontrol.mm110
2 files changed, 59 insertions, 53 deletions
diff --git a/src/plugins/avfoundation/mediaplayer/avfmediaplayermetadatacontrol.h b/src/plugins/avfoundation/mediaplayer/avfmediaplayermetadatacontrol.h
index 6721b0c85..396550047 100644
--- a/src/plugins/avfoundation/mediaplayer/avfmediaplayermetadatacontrol.h
+++ b/src/plugins/avfoundation/mediaplayer/avfmediaplayermetadatacontrol.h
@@ -64,7 +64,7 @@ private Q_SLOTS:
private:
AVFMediaPlayerSession *m_session;
- QMap<QString, QVariant> m_tags;
+ QVariantMap m_tags;
void *m_asset;
};
diff --git a/src/plugins/avfoundation/mediaplayer/avfmediaplayermetadatacontrol.mm b/src/plugins/avfoundation/mediaplayer/avfmediaplayermetadatacontrol.mm
index 2414ff361..39783680b 100644
--- a/src/plugins/avfoundation/mediaplayer/avfmediaplayermetadatacontrol.mm
+++ b/src/plugins/avfoundation/mediaplayer/avfmediaplayermetadatacontrol.mm
@@ -81,6 +81,41 @@ QStringList AVFMediaPlayerMetaDataControl::availableMetaData() const
return m_tags.keys();
}
+static QString itemKey(AVMetadataItem *item)
+{
+ NSString *keyString = [item commonKey];
+
+ if (keyString.length != 0) {
+ if ([keyString isEqualToString:AVMetadataCommonKeyTitle]) {
+ return QMediaMetaData::Title;
+ } else if ([keyString isEqualToString: AVMetadataCommonKeySubject]) {
+ return QMediaMetaData::SubTitle;
+ } else if ([keyString isEqualToString: AVMetadataCommonKeyDescription]) {
+ return QMediaMetaData::Description;
+ } else if ([keyString isEqualToString: AVMetadataCommonKeyPublisher]) {
+ return QMediaMetaData::Publisher;
+ } else if ([keyString isEqualToString: AVMetadataCommonKeyCreationDate]) {
+ return QMediaMetaData::Date;
+ } else if ([keyString isEqualToString: AVMetadataCommonKeyType]) {
+ return QMediaMetaData::MediaType;
+ } else if ([keyString isEqualToString: AVMetadataCommonKeyLanguage]) {
+ return QMediaMetaData::Language;
+ } else if ([keyString isEqualToString: AVMetadataCommonKeyCopyrights]) {
+ return QMediaMetaData::Copyright;
+ } else if ([keyString isEqualToString: AVMetadataCommonKeyAlbumName]) {
+ return QMediaMetaData::AlbumTitle;
+ } else if ([keyString isEqualToString: AVMetadataCommonKeyAuthor]) {
+ return QMediaMetaData::Author;
+ } else if ([keyString isEqualToString: AVMetadataCommonKeyArtist]) {
+ return QMediaMetaData::ContributingArtist;
+ } else if ([keyString isEqualToString: AVMetadataCommonKeyArtwork]) {
+ return QMediaMetaData::PosterUrl;
+ }
+ }
+
+ return QString();
+}
+
void AVFMediaPlayerMetaDataControl::updateTags()
{
#ifdef QT_DEBUG_AVF
@@ -89,67 +124,38 @@ void AVFMediaPlayerMetaDataControl::updateTags()
AVAsset *currentAsset = (AVAsset*)m_session->currentAssetHandle();
//Don't read the tags from the same asset more than once
- if (currentAsset == m_asset) {
+ if (currentAsset == m_asset)
return;
- }
m_asset = currentAsset;
+ QVariantMap oldTags = m_tags;
//Since we've changed assets, clear old tags
m_tags.clear();
-
- NSArray *metadataFormats = [currentAsset availableMetadataFormats];
- for ( NSString *format in metadataFormats) {
-#ifdef QT_DEBUG_AVF
- qDebug() << "format: " << [format UTF8String];
-#endif
- NSArray *metadataItems = [currentAsset metadataForFormat:format];
- for (AVMetadataItem* item in metadataItems) {
- NSString *keyString = [item commonKey];
- NSString *value = [item stringValue];
-
- if (keyString.length != 0) {
- //Process "commonMetadata" tags here:
- if ([keyString isEqualToString:AVMetadataCommonKeyTitle]) {
- m_tags.insert(QMediaMetaData::Title, QString([value UTF8String]));
- } else if ([keyString isEqualToString: AVMetadataCommonKeyCreator]) {
- m_tags.insert(QMediaMetaData::Author, QString([value UTF8String]));
- } else if ([keyString isEqualToString: AVMetadataCommonKeySubject]) {
- m_tags.insert(QMediaMetaData::SubTitle, QString([value UTF8String]));
- } else if ([keyString isEqualToString: AVMetadataCommonKeyDescription]) {
- m_tags.insert(QMediaMetaData::Description, QString([value UTF8String]));
- } else if ([keyString isEqualToString: AVMetadataCommonKeyPublisher]) {
- m_tags.insert(QMediaMetaData::Publisher, QString([value UTF8String]));
- } else if ([keyString isEqualToString: AVMetadataCommonKeyContributor]) {
- m_tags.insert(QMediaMetaData::ContributingArtist, QString([value UTF8String]));
- } else if ([keyString isEqualToString: AVMetadataCommonKeyCreationDate]) {
- m_tags.insert(QMediaMetaData::Date, QString([value UTF8String]));
- } else if ([keyString isEqualToString: AVMetadataCommonKeyType]) {
- m_tags.insert(QMediaMetaData::MediaType, QString([value UTF8String]));
- } else if ([keyString isEqualToString: AVMetadataCommonKeyLanguage]) {
- m_tags.insert(QMediaMetaData::Language, QString([value UTF8String]));
- } else if ([keyString isEqualToString: AVMetadataCommonKeyCopyrights]) {
- m_tags.insert(QMediaMetaData::Copyright, QString([value UTF8String]));
- } else if ([keyString isEqualToString: AVMetadataCommonKeyAlbumName]) {
- m_tags.insert(QMediaMetaData::AlbumTitle, QString([value UTF8String]));
- } else if ([keyString isEqualToString: AVMetadataCommonKeyAuthor]) {
- m_tags.insert(QMediaMetaData::Author, QString([value UTF8String]));
- } else if ([keyString isEqualToString: AVMetadataCommonKeyArtist]) {
- m_tags.insert(QMediaMetaData::AlbumArtist, QString([value UTF8String]));
- } else if ([keyString isEqualToString: AVMetadataCommonKeyArtwork]) {
- m_tags.insert(QMediaMetaData::PosterUrl, QString([value UTF8String]));
+ bool changed = false;
+
+ // TODO: also process ID3, iTunes and QuickTime metadata
+
+ NSArray *metadataItems = [currentAsset commonMetadata];
+ for (AVMetadataItem* item in metadataItems) {
+ const QString key = itemKey(item);
+ if (!key.isEmpty()) {
+ const QString value = QString::fromNSString([item stringValue]);
+ if (!value.isNull()) {
+ m_tags.insert(key, value);
+ if (value != oldTags.value(key)) {
+ changed = true;
+ Q_EMIT metaDataChanged(key, value);
}
}
-
- if ([format isEqualToString:AVMetadataFormatID3Metadata]) {
- //TODO: Process ID3 metadata
- } else if ([format isEqualToString:AVMetadataFormatiTunesMetadata]) {
- //TODO: Process iTunes metadata
- } else if ([format isEqualToString:AVMetadataFormatQuickTimeUserData]) {
- //TODO: Process QuickTime metadata
- }
}
}
- Q_EMIT metaDataChanged();
+ if (oldTags.isEmpty() != m_tags.isEmpty()) {
+ Q_EMIT metaDataAvailableChanged(!m_tags.isEmpty());
+ changed = true;
+ }
+
+ if (changed)
+ Q_EMIT metaDataChanged();
}