diff options
author | Piotr Srebrny <piotr.srebrny@qt.io> | 2021-09-29 10:13:33 +0200 |
---|---|---|
committer | Piotr Srebrny <piotr.srebrny@qt.io> | 2021-09-29 16:30:12 +0000 |
commit | 2dbc1b829260abc5fa99671d145bf5ba3489180c (patch) | |
tree | 8acd5269344421987cf53493a579265a5d600ad2 | |
parent | e58a8005c13fb22aa2668f9191478f6a568bd649 (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.cpp | 9 | ||||
-rw-r--r-- | tests/auto/integration/qmediacapturesession/tst_qmediacapturesession.cpp | 11 |
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(); |