summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@qt.io>2021-10-04 16:50:15 +0200
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2021-10-12 16:16:10 +0000
commit2736050df2e3c5d500f8970746e26e8cc2836543 (patch)
treed509e3621b3fb03a83fdb83a662c654f81abecfd
parent47b6a81a318f7f9deec98724968684023a23d213 (diff)
downloadqtmultimedia-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>
-rw-r--r--src/multimedia/platform/gstreamer/common/qgstreamermetadata.cpp20
-rw-r--r--src/multimedia/platform/gstreamer/mediacapture/qgstreamermediaencoder.cpp12
-rw-r--r--src/multimedia/platform/qplatformmediarecorder.cpp3
-rw-r--r--src/multimedia/platform/qplatformmediarecorder_p.h1
-rw-r--r--tests/auto/integration/qcamerabackend/tst_qcamerabackend.cpp7
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();