diff options
author | Doris Verria <doris.verria@qt.io> | 2021-06-18 13:11:21 +0200 |
---|---|---|
committer | Doris Verria <doris.verria@qt.io> | 2021-06-23 13:11:09 +0200 |
commit | c91afc21c068d8c68d51bf3acb98e8a385b7db8c (patch) | |
tree | 28d3f65f5dc1f0cef0e88376eb61de65b9dfcd16 /tests/auto/integration | |
parent | a6e014eb088cb9b7bf55bf87c814e75cd4037dc2 (diff) |
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 <qt_ci_bot@qt-project.org>
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Diffstat (limited to 'tests/auto/integration')
-rw-r--r-- | tests/auto/integration/qcamerabackend/tst_qcamerabackend.cpp | 89 |
1 files changed, 89 insertions, 0 deletions
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 <QtTest/QtTest> #include <QtGui/QImageReader> +#include <QtCore/qurl.h> +#include <QtCore/qlocale.h> #include <QDebug> #include <private/qplatformcamera_p.h> @@ -41,6 +43,8 @@ #include <qobject.h> #include <qmediadevices.h> #include <qmediarecorder.h> +#include <qmediaplayer.h> +#include <qaudiooutput.h> 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<QMediaRecorder::Status>(), 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" |