summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSamuel Mira <samuel.mira@qt.io>2021-10-11 16:50:14 +0300
committerSamuel Mira <samuel.mira@qt.io>2021-10-21 14:06:12 +0300
commit7a7886307ca2d72c9767aa0f396e49b4e749a06e (patch)
tree2057e31d975c539639889707fe3c1f0832ab6ea6
parente7bd76dcc476f9bf717f5269980b9c3a8523a7f1 (diff)
Add autotest for recording with mute audio
Added a new test for testing if a audioInput mutes while it is recording Tested by checking signals and confirming that a file is created. Pick-to: 6.2 Change-Id: I4f73ee72bfc541e10b2198118eceea1dad8a2404 Reviewed-by: Lars Knoll <lars.knoll@qt.io>
-rw-r--r--tests/auto/integration/qmediacapturesession/tst_qmediacapturesession.cpp76
1 files changed, 75 insertions, 1 deletions
diff --git a/tests/auto/integration/qmediacapturesession/tst_qmediacapturesession.cpp b/tests/auto/integration/qmediacapturesession/tst_qmediacapturesession.cpp
index fec6a3729..a5a3741b2 100644
--- a/tests/auto/integration/qmediacapturesession/tst_qmediacapturesession.cpp
+++ b/tests/auto/integration/qmediacapturesession/tst_qmediacapturesession.cpp
@@ -45,8 +45,11 @@
#include <qaudiooutput.h>
#include <qaudioinput.h>
#include <qaudiodevice.h>
-#include <qcamera.h>
+#include <qaudiodecoder.h>
+#include <qaudiobuffer.h>
+#include <qcamera.h>
+#include <QMediaFormat>
#include <QtMultimediaWidgets/QVideoWidget>
QT_USE_NAMESPACE
@@ -63,6 +66,8 @@ class tst_QMediaCaptureSession: public QObject
Q_OBJECT
private slots:
+
+ void testAudioMute();
void stress_test_setup_and_teardown();
void record_video_without_preview();
@@ -944,6 +949,75 @@ void tst_QMediaCaptureSession::can_add_ImageCapture_and_capture_during_recording
QFile(fileName).remove();
}
+void tst_QMediaCaptureSession::testAudioMute()
+{
+ QAudioInput audioInput;
+ if (audioInput.device().isNull())
+ QSKIP("No audio input available");
+
+ QMediaRecorder recorder;
+ QMediaCaptureSession session;
+
+ session.setRecorder(&recorder);
+
+ session.setAudioInput(&audioInput);
+
+ session.setCamera(nullptr);
+ recorder.setOutputLocation(QStringLiteral("test"));
+
+ QSignalSpy spy(&audioInput, &QAudioInput::mutedChanged);
+ QSignalSpy durationChanged(&recorder, SIGNAL(durationChanged(qint64)));
+
+ QMediaFormat format;
+ format.setAudioCodec(QMediaFormat::AudioCodec::MP3);
+ recorder.setMediaFormat(format);
+
+ recorder.record();
+ audioInput.setMuted(true);
+
+ QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.last()[0], true);
+
+ QTRY_VERIFY_WITH_TIMEOUT(recorder.recorderState() == QMediaRecorder::RecordingState, 2000);
+ QVERIFY(durationChanged.wait(2000));
+
+ audioInput.setMuted(false);
+
+ QCOMPARE(spy.count(), 2);
+ QCOMPARE(spy.last()[0], false);
+
+ recorder.stop();
+
+ QString actualLocation = recorder.actualLocation().toLocalFile();
+
+ QVERIFY2(!actualLocation.isEmpty(), "Recorder did not save a file");
+ QTRY_VERIFY2(QFileInfo(actualLocation).size() > 0, "Recorded file is empty (zero bytes)");
+
+ QAudioDecoder decoder;
+ QAudioBuffer buffer;
+ decoder.setSource(QUrl::fromLocalFile(actualLocation));
+
+ decoder.start();
+
+ // Wait a while
+ QTRY_VERIFY(decoder.bufferAvailable());
+
+ while (decoder.bufferAvailable()) {
+ buffer = decoder.read();
+ QVERIFY(buffer.isValid());
+
+ const void *data = buffer.constData<void *>();
+ QVERIFY(data != nullptr);
+
+ const unsigned int *idata = reinterpret_cast<const unsigned int *>(data);
+ QCOMPARE(*idata, 0U);
+ }
+
+ decoder.stop();
+
+ QFile(actualLocation).remove();
+}
+
QTEST_MAIN(tst_QMediaCaptureSession)
#include "tst_qmediacapturesession.moc"