diff options
author | Tim Blechmann <tim@klingt.org> | 2024-04-29 19:06:37 +0800 |
---|---|---|
committer | Tim Blechmann <tim@klingt.org> | 2024-05-02 19:23:58 +0800 |
commit | e2893da47485a9f70b7890f61cdf878f3dd524c6 (patch) | |
tree | 03aae7a9b7ebef094e8c0c4426fda6604db1ac49 | |
parent | b1a790ee33fee626eda3888761ea7b324bd8d90b (diff) |
GStreamer: fix QGstreamerMediaPlayer - fix metadata test
QGstreamerMediaPlayer did not emit metaDataChanged after parsing
GST_MESSAGE_TAG. This caused metadata to be changed without notifying
the application.
In the unit test we need to wait for `metaDataChanged` at least twice,
since it is called from both the GST_MESSAGE_TAG handler and from
parseStreamsAndMetadata.
Fixes: QTBUG-124182
Pick-to: 6.5 6.7
Change-Id: I68f81d5bcb1a2c809f3641ec11356f5b9a8cb601
Reviewed-by: Artem Dyomin <artem.dyomin@qt.io>
-rw-r--r-- | src/plugins/multimedia/gstreamer/common/qgstreamermediaplayer.cpp | 3 | ||||
-rw-r--r-- | tests/auto/integration/qcamerabackend/tst_qcamerabackend.cpp | 11 |
2 files changed, 8 insertions, 6 deletions
diff --git a/src/plugins/multimedia/gstreamer/common/qgstreamermediaplayer.cpp b/src/plugins/multimedia/gstreamer/common/qgstreamermediaplayer.cpp index 9a5b9e46a..20e663c23 100644 --- a/src/plugins/multimedia/gstreamer/common/qgstreamermediaplayer.cpp +++ b/src/plugins/multimedia/gstreamer/common/qgstreamermediaplayer.cpp @@ -307,8 +307,11 @@ bool QGstreamerMediaPlayer::processBusMessage(const QGstreamerMessage &message) qCDebug(qLcMediaPlayer) << " Got tags: " << tagList.get(); auto metaData = taglistToMetaData(tagList); + auto keys = metaData.keys(); for (auto k : metaData.keys()) m_metaData.insert(k, metaData.value(k)); + if (!keys.isEmpty()) + emit metaDataChanged(); if (gstVideoOutput) { QVariant rotation = m_metaData.value(QMediaMetaData::Orientation); diff --git a/tests/auto/integration/qcamerabackend/tst_qcamerabackend.cpp b/tests/auto/integration/qcamerabackend/tst_qcamerabackend.cpp index f1baa5d1d..7f1cee1cc 100644 --- a/tests/auto/integration/qcamerabackend/tst_qcamerabackend.cpp +++ b/tests/auto/integration/qcamerabackend/tst_qcamerabackend.cpp @@ -687,8 +687,6 @@ void tst_QCameraBackend::testNativeMetadata() QVERIFY(!fileName.isEmpty()); QVERIFY(QFileInfo(fileName).size() > 0); - QSKIP_GSTREAMER("QTBUG-124182: spurious failure while retrieving the metadata"); - // QMediaRecorder::metaData() can only test that QMediaMetaData is set properly on the recorder. // Use QMediaPlayer to test that the native metadata is properly set on the track QAudioOutput output; @@ -700,16 +698,17 @@ void tst_QCameraBackend::testNativeMetadata() player.setSource(QUrl::fromLocalFile(fileName)); player.play(); - QTRY_VERIFY(metadataChangedSpy.size() > 0); + int metadataChangedRequiredCount = isGStreamerPlatform() ? 2 : 1; + + QTRY_VERIFY(metadataChangedSpy.size() >= metadataChangedRequiredCount); - QCOMPARE(player.metaData().value(QMediaMetaData::Title).toString(), metaData.value(QMediaMetaData::Title).toString()); + QCOMPARE(player.metaData().value(QMediaMetaData::Title).toString(), + metaData.value(QMediaMetaData::Title).toString()); auto lang = player.metaData().value(QMediaMetaData::Language).value<QLocale::Language>(); if (lang != QLocale::AnyLanguage) QCOMPARE(lang, metaData.value(QMediaMetaData::Language).value<QLocale::Language>()); QCOMPARE(player.metaData().value(QMediaMetaData::Description).toString(), metaData.value(QMediaMetaData::Description).toString()); - metadataChangedSpy.clear(); - player.stop(); player.setSource({}); QFile(fileName).remove(); |