summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTim Blechmann <tim@klingt.org>2024-04-29 19:06:37 +0800
committerTim Blechmann <tim@klingt.org>2024-05-02 19:23:58 +0800
commite2893da47485a9f70b7890f61cdf878f3dd524c6 (patch)
tree03aae7a9b7ebef094e8c0c4426fda6604db1ac49
parentb1a790ee33fee626eda3888761ea7b324bd8d90b (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.cpp3
-rw-r--r--tests/auto/integration/qcamerabackend/tst_qcamerabackend.cpp11
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();