summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPiotr Srebrny <piotr.srebrny@qt.io>2021-09-29 10:13:33 +0200
committerPiotr Srebrny <piotr.srebrny@qt.io>2021-09-29 16:30:12 +0000
commit2dbc1b829260abc5fa99671d145bf5ba3489180c (patch)
tree8acd5269344421987cf53493a579265a5d600ad2
parente58a8005c13fb22aa2668f9191478f6a568bd649 (diff)
GStreamer: emit not ready for capture when no session or camera
We should emit signal when disconnecting session from the image capture, or when disconnecting camera from the session. GStreamer implementation send capture not available when taking a picture. This patch makes test more permissible to account for that. Pick-to: 6.2 Change-Id: If4fa780710811491678ad50fa11f3a9ee52ae530 Reviewed-by: Lars Knoll <lars.knoll@qt.io>
-rw-r--r--src/multimedia/platform/gstreamer/mediacapture/qgstreamerimagecapture.cpp9
-rw-r--r--tests/auto/integration/qmediacapturesession/tst_qmediacapturesession.cpp11
2 files changed, 14 insertions, 6 deletions
diff --git a/src/multimedia/platform/gstreamer/mediacapture/qgstreamerimagecapture.cpp b/src/multimedia/platform/gstreamer/mediacapture/qgstreamerimagecapture.cpp
index 2d943def2..38d6d8f51 100644
--- a/src/multimedia/platform/gstreamer/mediacapture/qgstreamerimagecapture.cpp
+++ b/src/multimedia/platform/gstreamer/mediacapture/qgstreamerimagecapture.cpp
@@ -209,6 +209,7 @@ void QGstreamerImageCapture::setCaptureSession(QPlatformMediaCaptureSession *ses
if (m_session == captureSession)
return;
+ bool readyForCapture = isReadyForCapture();
if (m_session) {
disconnect(m_session, nullptr, this, nullptr);
m_lastId = 0;
@@ -218,8 +219,11 @@ void QGstreamerImageCapture::setCaptureSession(QPlatformMediaCaptureSession *ses
}
m_session = captureSession;
- if (!m_session)
+ if (!m_session) {
+ if (readyForCapture)
+ emit readyForCaptureChanged(false);
return;
+ }
connect(m_session, &QPlatformMediaCaptureSession::cameraChanged, this, &QGstreamerImageCapture::onCameraChanged);
onCameraChanged();
@@ -240,8 +244,9 @@ void QGstreamerImageCapture::onCameraChanged()
if (m_session->camera()) {
cameraActiveChanged(m_session->camera()->isActive());
connect(m_session->camera(), &QPlatformCamera::activeChanged, this, &QGstreamerImageCapture::cameraActiveChanged);
+ } else {
+ cameraActiveChanged(false);
}
-
}
gboolean QGstreamerImageCapture::saveImageFilter(GstElement *element,
diff --git a/tests/auto/integration/qmediacapturesession/tst_qmediacapturesession.cpp b/tests/auto/integration/qmediacapturesession/tst_qmediacapturesession.cpp
index b466e6177..97e977288 100644
--- a/tests/auto/integration/qmediacapturesession/tst_qmediacapturesession.cpp
+++ b/tests/auto/integration/qmediacapturesession/tst_qmediacapturesession.cpp
@@ -107,11 +107,11 @@ void tst_QMediaCaptureSession::recordOk(QMediaCaptureSession &session)
QSignalSpy durationChanged(&recorder, SIGNAL(durationChanged(qint64)));
recorder.record();
- QTRY_VERIFY_WITH_TIMEOUT(recorder.recorderState() == QMediaRecorder::RecordingState, 1000);
+ QTRY_VERIFY_WITH_TIMEOUT(recorder.recorderState() == QMediaRecorder::RecordingState, 2000);
QVERIFY(durationChanged.wait(1000));
recorder.stop();
- QTRY_VERIFY_WITH_TIMEOUT(recorder.recorderState() == QMediaRecorder::StoppedState, 1000);
+ QTRY_VERIFY_WITH_TIMEOUT(recorder.recorderState() == QMediaRecorder::StoppedState, 2000);
QVERIFY(recorderErrorSignal.isEmpty());
QString fileName = recorder.actualLocation().toLocalFile();
@@ -828,9 +828,12 @@ void tst_QMediaCaptureSession::capture_is_not_available_when_Camera_is_null()
QVERIFY(capture.capture() >= 0);
QTRY_COMPARE(capturedSignal.count(), 1);
+ QVERIFY(capture.isReadyForCapture());
+ int readyCount = readyForCaptureChanged.count();
+
session.setCamera(nullptr);
- QTRY_COMPARE(readyForCaptureChanged.count(), 2);
+ QTRY_COMPARE(readyForCaptureChanged.count(), readyCount + 1);
QVERIFY(!capture.isReadyForCapture());
QVERIFY(!capture.isAvailable());
QVERIFY(capture.capture() < 0);
@@ -873,7 +876,7 @@ void tst_QMediaCaptureSession::can_add_ImageCapture_and_capture_during_recording
QTRY_COMPARE(capturedSignal.count(), 1);
session.setImageCapture(nullptr);
- QTRY_COMPARE(readyForCaptureChanged.count(), 2);
+ QVERIFY(readyForCaptureChanged.count() >= 2);
QVERIFY(!capture.isReadyForCapture());
recorder.stop();