diff options
author | Samuel Mira <samuel.mira@qt.io> | 2021-10-11 16:50:14 +0300 |
---|---|---|
committer | Samuel Mira <samuel.mira@qt.io> | 2021-10-21 14:06:12 +0300 |
commit | 7a7886307ca2d72c9767aa0f396e49b4e749a06e (patch) | |
tree | 2057e31d975c539639889707fe3c1f0832ab6ea6 /tests | |
parent | e7bd76dcc476f9bf717f5269980b9c3a8523a7f1 (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>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/auto/integration/qmediacapturesession/tst_qmediacapturesession.cpp | 76 |
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" |