From c91afc21c068d8c68d51bf3acb98e8a385b7db8c Mon Sep 17 00:00:00 2001 From: Doris Verria Date: Fri, 18 Jun 2021 13:11:21 +0200 Subject: Add metadata to audio and video capturing on darwin Add and retrieve common and format specific meta data. Pick-to: 6.2 Change-Id: I3e3f0ffdff52b8cf6e2079fdc1536b130c65773f Reviewed-by: Qt CI Bot Reviewed-by: Volker Hilsheimer --- .../qcamerabackend/tst_qcamerabackend.cpp | 89 ++++++++++++++++++++++ 1 file changed, 89 insertions(+) (limited to 'tests/auto/integration/qcamerabackend/tst_qcamerabackend.cpp') diff --git a/tests/auto/integration/qcamerabackend/tst_qcamerabackend.cpp b/tests/auto/integration/qcamerabackend/tst_qcamerabackend.cpp index a656c1da0..4573c52b5 100644 --- a/tests/auto/integration/qcamerabackend/tst_qcamerabackend.cpp +++ b/tests/auto/integration/qcamerabackend/tst_qcamerabackend.cpp @@ -30,6 +30,8 @@ #include #include +#include +#include #include #include @@ -41,6 +43,8 @@ #include #include #include +#include +#include QT_USE_NAMESPACE @@ -74,6 +78,9 @@ private slots: void testVideoRecording_data(); void testVideoRecording(); + + void testNativeMetadata(); + private: bool noCamera = false; }; @@ -456,6 +463,12 @@ void tst_QCameraBackend::testVideoRecording() recorder.setVideoResolution(320, 240); + // Insert metadata + QMediaMetaData metaData; + metaData.insert(QMediaMetaData::Author, QString::fromUtf8("Author")); + metaData.insert(QMediaMetaData::Date, QDateTime(QDateTime::currentDateTime())); + recorder.setMetaData(metaData); + QCOMPARE(recorder.status(), QMediaRecorder::StoppedStatus); camera->start(); @@ -474,6 +487,9 @@ void tst_QCameraBackend::testVideoRecording() QTRY_COMPARE(recorder.status(), QMediaRecorder::RecordingStatus); QCOMPARE(recorderStatusSignal.last().first().value(), recorder.status()); QTest::qWait(200); + + QCOMPARE(recorder.metaData(), metaData); + recorderStatusSignal.clear(); recorder.stop(); bool foundFinalizingStatus = false; @@ -501,6 +517,79 @@ void tst_QCameraBackend::testVideoRecording() } } +void tst_QCameraBackend::testNativeMetadata() +{ + if (noCamera) + QSKIP("No camera available"); + + QMediaCaptureSession session; + QCameraDevice device = QMediaDevices::defaultVideoInput(); + QCamera camera(device); + session.setCamera(&camera); + + QMediaRecorder recorder; + session.setEncoder(&recorder); + + QSignalSpy errorSignal(&camera, SIGNAL(errorOccurred(QCamera::Error, const QString &))); + QSignalSpy recorderErrorSignal(&recorder, SIGNAL(errorOccurred(Error, const QString &))); + + QCOMPARE(recorder.status(), QMediaRecorder::StoppedStatus); + + camera.start(); + if (device.isNull()) { + QVERIFY(!camera.isActive()); + return; + } + + QTRY_VERIFY(camera.isActive()); + QTRY_COMPARE(recorder.status(), QMediaRecorder::StoppedStatus); + + // Insert common metadata supported on all platforms + QMediaMetaData metaData; + metaData.insert(QMediaMetaData::Title, QString::fromUtf8("Title")); + metaData.insert(QMediaMetaData::Date, QDate::currentDate()); + metaData.insert(QMediaMetaData::Description, QString::fromUtf8("Description")); + + recorder.setMetaData(metaData); + + recorder.record(); + QTRY_COMPARE(recorder.status(), QMediaRecorder::RecordingStatus); + QTest::qWait(200); + + QCOMPARE(recorder.metaData(), metaData); + + recorder.stop(); + QTRY_COMPARE(recorder.status(), QMediaRecorder::StoppedStatus); + + QVERIFY(errorSignal.isEmpty()); + QVERIFY(recorderErrorSignal.isEmpty()); + + QString fileName = recorder.actualLocation().toLocalFile(); + QVERIFY(!fileName.isEmpty()); + QVERIFY(QFileInfo(fileName).size() > 0); + + // 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 + QMediaPlayer player; + QAudioOutput output; + player.setAudioOutput(&output); + + QSignalSpy metadataChangedSpy(&player, SIGNAL(metaDataChanged())); + + player.setSource(QUrl::fromLocalFile(fileName)); + + 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()); + QCOMPARE(player.metaData().value(QMediaMetaData::Description).toString(), metaData.value(QMediaMetaData::Description).toString()); + + metadataChangedSpy.clear(); + + player.stop(); + QFile(fileName).remove(); +} + QTEST_MAIN(tst_QCameraBackend) #include "tst_qcamerabackend.moc" -- cgit v1.2.3