summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorPiotr Srebrny <piotr.srebrny@qt.io>2021-09-22 10:33:14 +0200
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2021-09-29 17:57:03 +0000
commit46142fa2b11957fe9ac4b19c88801c2f11881da2 (patch)
tree83a527bcb08b17c984c09d60d939811ce5c83bb2 /tests
parente5f258c798d65aa8bb968faff58c6d8cf346deb8 (diff)
Disconnect QAudioOutput from capture session and player in destructor
The expected behavior of elements connected to the capture session and the player is to disconnect automatically when deleted. This patch adds this behavior to the QAudioOutput object. Additionally, this patch enables automatic handover of QAudioOutput between two capture sessions or a capture session and a player. Change-Id: I75e5135c54bd11b33876db317cf306d9255f38ce Reviewed-by: André de la Rocha <andre.rocha@qt.io> Reviewed-by: Lars Knoll <lars.knoll@qt.io> (cherry picked from commit b4879defbca4594854e5a8e730e1061e217a7b44) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/integration/qmediacapturesession/tst_qmediacapturesession.cpp71
1 files changed, 71 insertions, 0 deletions
diff --git a/tests/auto/integration/qmediacapturesession/tst_qmediacapturesession.cpp b/tests/auto/integration/qmediacapturesession/tst_qmediacapturesession.cpp
index ece5b66fc..d7f0352ea 100644
--- a/tests/auto/integration/qmediacapturesession/tst_qmediacapturesession.cpp
+++ b/tests/auto/integration/qmediacapturesession/tst_qmediacapturesession.cpp
@@ -39,6 +39,7 @@
#include <qcameradevice.h>
#include <qimagecapture.h>
#include <qmediacapturesession.h>
+#include <qmediaplayer.h>
#include <qmediadevices.h>
#include <qmediarecorder.h>
#include <qaudiooutput.h>
@@ -67,6 +68,8 @@ private slots:
void can_change_AudioInput_during_recording();
void disconnects_deleted_AudioInput();
void can_move_AudioInput_between_sessions();
+ void disconnects_deleted_AudioOutput();
+ void can_move_AudioOutput_between_sessions_and_player();
void can_add_and_remove_Camera();
void can_disconnect_Camera_when_recording();
@@ -230,6 +233,9 @@ void tst_QMediaCaptureSession::can_change_AudioInput_during_recording()
void tst_QMediaCaptureSession::disconnects_deleted_AudioInput()
{
+ if (QMediaDevices::audioInputs().isEmpty())
+ QSKIP("No audio input available");
+
QMediaCaptureSession session;
QSignalSpy audioInputChanged(&session, SIGNAL(audioInputChanged()));
{
@@ -243,6 +249,9 @@ void tst_QMediaCaptureSession::disconnects_deleted_AudioInput()
void tst_QMediaCaptureSession::can_move_AudioInput_between_sessions()
{
+ if (QMediaDevices::audioInputs().isEmpty())
+ QSKIP("No audio input available");
+
QMediaCaptureSession session0;
QMediaCaptureSession session1;
QSignalSpy audioInputChanged0(&session0, SIGNAL(audioInputChanged()));
@@ -266,6 +275,68 @@ void tst_QMediaCaptureSession::can_move_AudioInput_between_sessions()
QVERIFY(session1.audioInput() != nullptr);
}
+void tst_QMediaCaptureSession::disconnects_deleted_AudioOutput()
+{
+ if (QMediaDevices::audioOutputs().isEmpty())
+ QSKIP("No audio output available");
+
+ QMediaCaptureSession session;
+ QSignalSpy audioOutputChanged(&session, SIGNAL(audioOutputChanged()));
+ {
+ QAudioOutput output;
+ session.setAudioOutput(&output);
+ QTRY_COMPARE(audioOutputChanged.count(), 1);
+ }
+ QVERIFY(session.audioOutput() == nullptr);
+ QTRY_COMPARE(audioOutputChanged.count(), 2);
+}
+
+void tst_QMediaCaptureSession::can_move_AudioOutput_between_sessions_and_player()
+{
+ if (QMediaDevices::audioOutputs().isEmpty())
+ QSKIP("No audio output available");
+
+ QMediaCaptureSession session0;
+ QMediaCaptureSession session1;
+ QMediaPlayer player;
+ QSignalSpy audioOutputChanged0(&session0, SIGNAL(audioOutputChanged()));
+ QSignalSpy audioOutputChanged1(&session1, SIGNAL(audioOutputChanged()));
+ QSignalSpy audioOutputChangedPlayer(&player, SIGNAL(audioOutputChanged()));
+
+ QAudioOutput output;
+ {
+ QMediaCaptureSession session2;
+ QSignalSpy audioOutputChanged2(&session2, SIGNAL(audioOutputChanged()));
+ session2.setAudioOutput(&output);
+ QTRY_COMPARE(audioOutputChanged2.count(), 1);
+ }
+
+ session0.setAudioOutput(&output);
+ QTRY_COMPARE(audioOutputChanged0.count(), 1);
+ QVERIFY(session0.audioOutput() != nullptr);
+
+ session1.setAudioOutput(&output);
+ QTRY_COMPARE(audioOutputChanged0.count(), 2);
+ QVERIFY(session0.audioOutput() == nullptr);
+ QTRY_COMPARE(audioOutputChanged1.count(), 1);
+ QVERIFY(session1.audioOutput() != nullptr);
+
+ player.setAudioOutput(&output);
+ QTRY_COMPARE(audioOutputChanged0.count(), 2);
+ QVERIFY(session0.audioOutput() == nullptr);
+ QTRY_COMPARE(audioOutputChanged1.count(), 2);
+ QVERIFY(session1.audioOutput() == nullptr);
+ QTRY_COMPARE(audioOutputChangedPlayer.count(), 1);
+ QVERIFY(player.audioOutput() != nullptr);
+
+ session0.setAudioOutput(&output);
+ QTRY_COMPARE(audioOutputChanged0.count(), 3);
+ QVERIFY(session0.audioOutput() != nullptr);
+ QTRY_COMPARE(audioOutputChangedPlayer.count(), 2);
+ QVERIFY(player.audioOutput() == nullptr);
+}
+
+
void tst_QMediaCaptureSession::can_add_and_remove_Camera()
{
QCamera camera;