diff options
author | Lars Knoll <lars.knoll@qt.io> | 2021-10-04 16:50:15 +0200 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2021-10-12 16:16:10 +0000 |
commit | 2736050df2e3c5d500f8970746e26e8cc2836543 (patch) | |
tree | d509e3621b3fb03a83fdb83a662c654f81abecfd | |
parent | 47b6a81a318f7f9deec98724968684023a23d213 (diff) | |
download | qtmultimedia-2736050df2e3c5d500f8970746e26e8cc2836543.tar.gz |
Fix QCameraBackend::testNativeMetadata() on gstreamer
Let it record a bit, otherwise we don't get anything. Don't check
QMediaMetaData::Date, as some encoders set that on their own. Instead
use Language and fix issues in correctly writing the language.
Change-Id: Ib5e2bacc053814afc2fafdae65330950e591d6fc
Reviewed-by: Piotr Srebrny <piotr.srebrny@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
(cherry picked from commit 839cb46628b197d0a851c78d518186881e047272)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
5 files changed, 21 insertions, 22 deletions
diff --git a/src/multimedia/platform/gstreamer/common/qgstreamermetadata.cpp b/src/multimedia/platform/gstreamer/common/qgstreamermetadata.cpp index 3cf3146a3..439a28dcf 100644 --- a/src/multimedia/platform/gstreamer/common/qgstreamermetadata.cpp +++ b/src/multimedia/platform/gstreamer/common/qgstreamermetadata.cpp @@ -264,6 +264,7 @@ void QGstreamerMetaData::setMetaData(GstElement *element) const tagValue.toDouble(), nullptr); break; + case QMetaType::QDate: case QMetaType::QDateTime: { QDateTime date = tagValue.toDateTime(); gst_tag_setter_add_tags(GST_TAG_SETTER(element), @@ -275,17 +276,18 @@ void QGstreamerMetaData::setMetaData(GstElement *element) const nullptr); break; } - case QMetaType::QLocale: { - QString language = QLocale::languageToCode(tagValue.value<QLocale::Language>()); - gst_tag_setter_add_tags(GST_TAG_SETTER(element), - GST_TAG_MERGE_REPLACE, - tagName, - language.toUtf8().constData(), - nullptr); - } + default: { + if (tagValue.typeId() == qMetaTypeId<QLocale::Language>()) { + QString language = QLocale::languageToCode(tagValue.value<QLocale::Language>()); + gst_tag_setter_add_tags(GST_TAG_SETTER(element), + GST_TAG_MERGE_REPLACE, + tagName, + language.toUtf8().constData(), + nullptr); + } - default: break; + } } } } diff --git a/src/multimedia/platform/gstreamer/mediacapture/qgstreamermediaencoder.cpp b/src/multimedia/platform/gstreamer/mediacapture/qgstreamermediaencoder.cpp index 34058e546..018ceffc2 100644 --- a/src/multimedia/platform/gstreamer/mediacapture/qgstreamermediaencoder.cpp +++ b/src/multimedia/platform/gstreamer/mediacapture/qgstreamermediaencoder.cpp @@ -129,17 +129,6 @@ bool QGstreamerMediaEncoder::processBusMessage(const QGstreamerMessage &message) finalize(); } - if (msg.source() == gstEncoder) { - if (msg.type() == GST_MESSAGE_STATE_CHANGED) { - GstState oldState; - GstState newState; - GstState pending; - gst_message_parse_state_changed(msg.rawMessage(), &oldState, &newState, &pending); - - if (newState == GST_STATE_PAUSED && !m_metaData.isEmpty()) - setMetaData(m_metaData); - } - } return false; } @@ -350,6 +339,7 @@ void QGstreamerMediaEncoder::record(QMediaEncoderSettings &settings) signalDurationChangedTimer.start(); gstPipeline.dumpGraph("recording"); + durationChanged(0); stateChanged(QMediaRecorder::RecordingState); actualLocationChanged(QUrl::fromLocalFile(location)); } diff --git a/src/multimedia/platform/qplatformmediarecorder.cpp b/src/multimedia/platform/qplatformmediarecorder.cpp index bdac9350c..f53ff62e4 100644 --- a/src/multimedia/platform/qplatformmediarecorder.cpp +++ b/src/multimedia/platform/qplatformmediarecorder.cpp @@ -154,6 +154,9 @@ void QPlatformMediaRecorder::stateChanged(QMediaRecorder::RecorderState state) */ void QPlatformMediaRecorder::durationChanged(qint64 duration) { + if (m_duration == duration) + return; + m_duration = duration; emit q->durationChanged(duration); } diff --git a/src/multimedia/platform/qplatformmediarecorder_p.h b/src/multimedia/platform/qplatformmediarecorder_p.h index 2cd70f682..06b579f93 100644 --- a/src/multimedia/platform/qplatformmediarecorder_p.h +++ b/src/multimedia/platform/qplatformmediarecorder_p.h @@ -176,6 +176,7 @@ private: QString m_errorString; QUrl m_actualLocation; QUrl m_outputLocation; + qint64 m_duration = 0; QMediaRecorder::RecorderState m_state = QMediaRecorder::StoppedState; }; diff --git a/tests/auto/integration/qcamerabackend/tst_qcamerabackend.cpp b/tests/auto/integration/qcamerabackend/tst_qcamerabackend.cpp index 4bad5bbcf..91cdcef3c 100644 --- a/tests/auto/integration/qcamerabackend/tst_qcamerabackend.cpp +++ b/tests/auto/integration/qcamerabackend/tst_qcamerabackend.cpp @@ -638,9 +638,10 @@ void tst_QCameraBackend::testNativeMetadata() QTRY_VERIFY(camera.isActive()); // Insert common metadata supported on all platforms + // Don't use Date, as some backends set that on their own QMediaMetaData metaData; metaData.insert(QMediaMetaData::Title, QString::fromUtf8("Title")); - metaData.insert(QMediaMetaData::Date, QDate::currentDate()); + metaData.insert(QMediaMetaData::Language, QVariant::fromValue(QLocale::German)); metaData.insert(QMediaMetaData::Description, QString::fromUtf8("Description")); recorder.setMetaData(metaData); @@ -676,7 +677,9 @@ void tst_QCameraBackend::testNativeMetadata() QTRY_VERIFY(metadataChangedSpy.count() > 0); QCOMPARE(player.metaData().value(QMediaMetaData::Title).toString(), metaData.value(QMediaMetaData::Title).toString()); - QCOMPARE(player.metaData().value(QMediaMetaData::Date).toDateTime(), metaData.value(QMediaMetaData::Date).toDateTime()); + 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(); |