From 9d9a29bcc31101e394ea484f61985cac75524ba1 Mon Sep 17 00:00:00 2001 From: Milla Pohjanheimo Date: Fri, 23 Sep 2016 09:21:05 +0300 Subject: Stabilize tst_QAudioOutput::pull() and push() autotests Same as 7d00a457e455e159a3dde30ad798be744cf38bb1. Change-Id: Iaf4a9d4eb5b5afe307a82af6f1a7fdf3e49f08ac Reviewed-by: Yoann Lopes --- tests/auto/integration/qaudiooutput/tst_qaudiooutput.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/auto/integration/qaudiooutput/tst_qaudiooutput.cpp b/tests/auto/integration/qaudiooutput/tst_qaudiooutput.cpp index dfe9d3e54..e36d38f4a 100644 --- a/tests/auto/integration/qaudiooutput/tst_qaudiooutput.cpp +++ b/tests/auto/integration/qaudiooutput/tst_qaudiooutput.cpp @@ -532,8 +532,8 @@ void tst_QAudioOutput::pull() QTest::qWait(3000); // 3 seconds should be plenty QVERIFY2(audioFile->atEnd(), "didn't play to EOF"); - QVERIFY2((stateSignal.count() == 1), - QString("didn't emit IdleState signal when at EOF, got %1 signals instead").arg(stateSignal.count()).toLocal8Bit().constData()); + QVERIFY(stateSignal.count() > 0); + QCOMPARE(qvariant_cast(stateSignal.last().at(0)), QAudio::IdleState); QVERIFY2((audioOutput.state() == QAudio::IdleState), "didn't transitions to IdleState when at EOF"); stateSignal.clear(); @@ -709,8 +709,8 @@ void tst_QAudioOutput::push() QTest::qWait(3000); // 3 seconds should be plenty QVERIFY2(audioFile->atEnd(), "didn't play to EOF"); - QVERIFY2((stateSignal.count() == 1), - QString("didn't emit IdleState signal when at EOF, got %1 signals instead").arg(stateSignal.count()).toLocal8Bit().constData()); + QVERIFY(stateSignal.count() > 0); + QCOMPARE(qvariant_cast(stateSignal.last().at(0)), QAudio::IdleState); QVERIFY2((audioOutput.state() == QAudio::IdleState), "didn't transitions to IdleState when at EOF"); stateSignal.clear(); -- cgit v1.2.3 From c4bf444f5cf71518fb52bc4f19515a9a662a107d Mon Sep 17 00:00:00 2001 From: Milla Pohjanheimo Date: Tue, 27 Sep 2016 10:50:28 +0300 Subject: Stabilize pushSuspendResume() autotest Same as 7d00a457e455e159a3dde30ad798be744cf38bb1. Change-Id: Ia7b01eef7650c1db23562d1a36a4a19748c92fc7 Reviewed-by: Yoann Lopes --- tests/auto/integration/qaudiooutput/tst_qaudiooutput.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/auto/integration/qaudiooutput/tst_qaudiooutput.cpp b/tests/auto/integration/qaudiooutput/tst_qaudiooutput.cpp index e36d38f4a..8990590ee 100644 --- a/tests/auto/integration/qaudiooutput/tst_qaudiooutput.cpp +++ b/tests/auto/integration/qaudiooutput/tst_qaudiooutput.cpp @@ -844,8 +844,8 @@ void tst_QAudioOutput::pushSuspendResume() QTest::qWait(1000); // 1 seconds should be plenty QVERIFY2(audioFile->atEnd(), "didn't play to EOF"); - QVERIFY2((stateSignal.count() == 1), - QString("didn't emit IdleState signal when at EOF, got %1 signals instead").arg(stateSignal.count()).toLocal8Bit().constData()); + QVERIFY(stateSignal.count() > 0); + QCOMPARE(qvariant_cast(stateSignal.last().at(0)), QAudio::IdleState); QVERIFY2((audioOutput.state() == QAudio::IdleState), "didn't transitions to IdleState when at EOF"); stateSignal.clear(); -- cgit v1.2.3 From 81a48edb548a9ad86414b3a115d718c932c11058 Mon Sep 17 00:00:00 2001 From: Yoann Lopes Date: Wed, 17 Aug 2016 13:55:10 +0200 Subject: AVFoundation: fix metadata control Correctly emit metaDataAvailableChanged and metaDataChanged signals. Task-number: QTBUG-46368 Change-Id: Ic79acd519b47f4d864fa335c8f75758fe9185c39 Reviewed-by: Christian Stromme --- .../mediaplayer/avfmediaplayermetadatacontrol.h | 2 +- .../mediaplayer/avfmediaplayermetadatacontrol.mm | 110 +++++++++++---------- 2 files changed, 59 insertions(+), 53 deletions(-) diff --git a/src/plugins/avfoundation/mediaplayer/avfmediaplayermetadatacontrol.h b/src/plugins/avfoundation/mediaplayer/avfmediaplayermetadatacontrol.h index d40e70c2a..e28fc2936 100644 --- a/src/plugins/avfoundation/mediaplayer/avfmediaplayermetadatacontrol.h +++ b/src/plugins/avfoundation/mediaplayer/avfmediaplayermetadatacontrol.h @@ -58,7 +58,7 @@ private Q_SLOTS: private: AVFMediaPlayerSession *m_session; - QMap 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 336f8637c..b84ff5952 100644 --- a/src/plugins/avfoundation/mediaplayer/avfmediaplayermetadatacontrol.mm +++ b/src/plugins/avfoundation/mediaplayer/avfmediaplayermetadatacontrol.mm @@ -75,6 +75,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 @@ -83,67 +118,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(); } -- cgit v1.2.3 From 91d12e6242bac85f0ea59db2d98235792f82dd44 Mon Sep 17 00:00:00 2001 From: Yoann Lopes Date: Fri, 8 Jul 2016 15:28:34 +0200 Subject: Clamp volume in QMediaRecorder and QSoundEffect Change-Id: Ie61c33592873b7e5a2ed1b8ccf3386b20edb2cef Reviewed-by: Christian Stromme --- src/multimedia/audio/qsoundeffect.cpp | 6 +----- src/multimedia/recording/qmediarecorder.cpp | 4 +++- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/src/multimedia/audio/qsoundeffect.cpp b/src/multimedia/audio/qsoundeffect.cpp index 865d40753..61b294114 100644 --- a/src/multimedia/audio/qsoundeffect.cpp +++ b/src/multimedia/audio/qsoundeffect.cpp @@ -273,11 +273,7 @@ qreal QSoundEffect::volume() const */ void QSoundEffect::setVolume(qreal volume) { - if (volume < qreal(0.0) || volume > qreal(1.0)) { - qWarning("SoundEffect: volume should be between 0.0 and 1.0"); - return; - } - + volume = qBound(qreal(0.0), volume, qreal(1.0)); if (qFuzzyCompare(d->volume(), volume)) return; diff --git a/src/multimedia/recording/qmediarecorder.cpp b/src/multimedia/recording/qmediarecorder.cpp index e1c01e387..1d5d7cb6f 100644 --- a/src/multimedia/recording/qmediarecorder.cpp +++ b/src/multimedia/recording/qmediarecorder.cpp @@ -563,8 +563,10 @@ void QMediaRecorder::setVolume(qreal volume) { Q_D(QMediaRecorder); - if (d->control) + if (d->control) { + volume = qMax(qreal(0.0), volume); d->control->setVolume(volume); + } } /*! -- cgit v1.2.3 From 2f3cf6bca788c6a08357a9d672deb4119877a1fd Mon Sep 17 00:00:00 2001 From: Yoann Lopes Date: Fri, 8 Jul 2016 14:49:37 +0200 Subject: Clamp out-of-range volume values in QAudioInput and QAudioOutput Change-Id: I6da76524533e16f6987fad6029b1f42960972383 Reviewed-by: Christian Stromme --- src/multimedia/audio/qaudioinput.cpp | 3 ++- src/multimedia/audio/qaudiooutput.cpp | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/multimedia/audio/qaudioinput.cpp b/src/multimedia/audio/qaudioinput.cpp index 5f827d013..8df8696d2 100644 --- a/src/multimedia/audio/qaudioinput.cpp +++ b/src/multimedia/audio/qaudioinput.cpp @@ -332,7 +332,8 @@ int QAudioInput::notifyInterval() const */ void QAudioInput::setVolume(qreal volume) { - d->setVolume(volume); + qreal v = qBound(qreal(0.0), volume, qreal(1.0)); + d->setVolume(v); } /*! diff --git a/src/multimedia/audio/qaudiooutput.cpp b/src/multimedia/audio/qaudiooutput.cpp index 5c866663e..f3c59f3e0 100644 --- a/src/multimedia/audio/qaudiooutput.cpp +++ b/src/multimedia/audio/qaudiooutput.cpp @@ -349,7 +349,8 @@ QAudio::State QAudioOutput::state() const */ void QAudioOutput::setVolume(qreal volume) { - d->setVolume(volume); + qreal v = qBound(qreal(0.0), volume, qreal(1.0)); + d->setVolume(v); } /*! -- cgit v1.2.3 From 5472ea150693d7eadf21f0e7db8354896eaca2d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20Str=C3=B8mme?= Date: Wed, 31 Aug 2016 18:02:08 +0200 Subject: Remove useless cast Casting to same type. Change-Id: I93935b75edac56c958d0669eff216b9dcf16a153 Reviewed-by: Yoann Lopes --- src/multimedia/playback/qmedianetworkplaylistprovider.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/multimedia/playback/qmedianetworkplaylistprovider.cpp b/src/multimedia/playback/qmedianetworkplaylistprovider.cpp index 88c253494..76cee7616 100644 --- a/src/multimedia/playback/qmedianetworkplaylistprovider.cpp +++ b/src/multimedia/playback/qmedianetworkplaylistprovider.cpp @@ -68,7 +68,7 @@ void QMediaNetworkPlaylistProviderPrivate::_q_handleParserError(QPlaylistFilePar QMediaPlaylist::Error playlistError = QMediaPlaylist::NoError; - switch ((QPlaylistFileParser::ParserError)err) { + switch (err) { case QPlaylistFileParser::NoError: return; case QPlaylistFileParser::FormatError: -- cgit v1.2.3 From 309dcb92590a9c159a8f4497d8f9582552dd8730 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20Str=C3=B8mme?= Date: Wed, 31 Aug 2016 18:06:08 +0200 Subject: Doc: Add comment about stream requirements Change-Id: I92e16722dc5cc8df23cf4ed0d048a0d2a23956eb Reviewed-by: Yoann Lopes --- src/multimedia/playback/qmediaplayer.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/multimedia/playback/qmediaplayer.cpp b/src/multimedia/playback/qmediaplayer.cpp index e6e4c7c1a..d349654ff 100644 --- a/src/multimedia/playback/qmediaplayer.cpp +++ b/src/multimedia/playback/qmediaplayer.cpp @@ -956,8 +956,8 @@ void QMediaPlayer::setPlaybackRate(qreal rate) Sets the current \a media source. If a \a stream is supplied; media data will be read from it instead of resolving the media - source. In this case the media source may still be used to resolve additional information - about the media such as mime type. + source. In this case the media source may still be used to resolve additional information + about the media such as mime type. The \a stream must be open and readable. Setting the media to a null QMediaContent will cause the player to discard all information relating to the current media source and to cease all I/O operations related -- cgit v1.2.3 From 026aec5079375c866cd88ba176c88d2842d1b260 Mon Sep 17 00:00:00 2001 From: Milla Pohjanheimo Date: Thu, 29 Sep 2016 15:55:31 +0300 Subject: Blacklist testSetSourceWhilePlaying() in 5.6 The test is flaky and running it 300 times didn't reproduce the failure. Change-Id: Ib03722579dbe58c05cb324fdca37eb7e5b732e33 Reviewed-by: Yoann Lopes --- tests/auto/integration/qsoundeffect/BLACKLIST | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 tests/auto/integration/qsoundeffect/BLACKLIST diff --git a/tests/auto/integration/qsoundeffect/BLACKLIST b/tests/auto/integration/qsoundeffect/BLACKLIST new file mode 100644 index 000000000..abf85ae93 --- /dev/null +++ b/tests/auto/integration/qsoundeffect/BLACKLIST @@ -0,0 +1,3 @@ +#QTBUG-55735 +[testSetSourceWhilePlaying] +linux -- cgit v1.2.3 From 1a34596b426f8a685453699ad44c45075a6c3681 Mon Sep 17 00:00:00 2001 From: Nico Vertriest Date: Mon, 3 Oct 2016 15:42:36 +0200 Subject: Doc: corrected reference to parameter "end" MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: Ia4c521b4eee8efd7afe6efd1f00f3c15fd138d9b Reviewed-by: Topi Reiniƶ --- src/imports/multimedia/qdeclarativeplaylist.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/imports/multimedia/qdeclarativeplaylist.cpp b/src/imports/multimedia/qdeclarativeplaylist.cpp index e8df8c376..549e0702d 100644 --- a/src/imports/multimedia/qdeclarativeplaylist.cpp +++ b/src/imports/multimedia/qdeclarativeplaylist.cpp @@ -510,7 +510,7 @@ bool QDeclarativePlaylist::removeItem(int index) /*! \qmlmethod bool QtMultimedia::Playlist::removeItems(int start, int end) - Removes items in the playlist from \a start to \end inclusive. + Removes items in the playlist from \a start to \a end inclusive. Returns true if the items are removed successfully. -- cgit v1.2.3 From 256ff7bb1551f6c62c4ac861472ea29f45dbab3a Mon Sep 17 00:00:00 2001 From: Nico Vertriest Date: Mon, 3 Oct 2016 16:02:28 +0200 Subject: Doc: added definition for parameter gain Change-Id: I710e99e6889e49755241e8448163167374f23f52 Reviewed-by: Venugopal Shivashankar --- src/multimedia/controls/qmediarecordercontrol.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/multimedia/controls/qmediarecordercontrol.cpp b/src/multimedia/controls/qmediarecordercontrol.cpp index 4654d16eb..abffc6811 100644 --- a/src/multimedia/controls/qmediarecordercontrol.cpp +++ b/src/multimedia/controls/qmediarecordercontrol.cpp @@ -166,7 +166,9 @@ QMediaRecorderControl::~QMediaRecorderControl() /*! \fn void QMediaRecorderControl::setVolume(qreal gain) - Sets the linear audio \a gain of a media recorder. + Sets the audio \a gain of a media recorder control. + + The gain is scaled linearly, ranging from \c 0 (silence) to \c 100 (full volume). */ /*! -- cgit v1.2.3