summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArtem Dyomin <artem.dyomin@qt.io>2022-11-11 10:02:02 +0100
committerArtem Dyomin <artem.dyomin@qt.io>2022-11-11 10:30:12 +0100
commitac0e44288d305fb22d9396f97f7ee0b1d371e917 (patch)
treeb4a369b0cbc2bf991e88f5daf5668203286908ba
parent531ea0bd937653c0462edf07cae28e473d4b9979 (diff)
Fix issues in camera example
- fix memory leak - QImageCapture - fix multimple signals connection Pick-to: 6.4 Change-Id: I63df2bd16f678c67a3ee90c7e7251575d9cdeb1e Reviewed-by: Piotr Srebrny <piotr.srebrny@qt.io> Reviewed-by: Lars Knoll <lars@knoll.priv.no>
-rw-r--r--examples/multimedia/camera/camera.cpp39
-rw-r--r--examples/multimedia/camera/camera.h3
2 files changed, 19 insertions, 23 deletions
diff --git a/examples/multimedia/camera/camera.cpp b/examples/multimedia/camera/camera.cpp
index 47f8222ae..be9ae6259 100644
--- a/examples/multimedia/camera/camera.cpp
+++ b/examples/multimedia/camera/camera.cpp
@@ -48,6 +48,8 @@ Camera::Camera() : ui(new Ui::Camera)
connect(ui->captureWidget, &QTabWidget::currentChanged, this, &Camera::updateCaptureMode);
connect(ui->metaDataButton, &QPushButton::clicked, this, &Camera::showMetaDataDialog);
+ connect(ui->exposureCompensation, &QAbstractSlider::valueChanged, this,
+ &Camera::setExposureCompensation);
setCamera(QMediaDevices::defaultVideoInput());
}
@@ -65,28 +67,28 @@ void Camera::setCamera(const QCameraDevice &cameraDevice)
m_captureSession.setRecorder(m_mediaRecorder.data());
connect(m_mediaRecorder.data(), &QMediaRecorder::recorderStateChanged, this,
&Camera::updateRecorderState);
+ connect(m_mediaRecorder.data(), &QMediaRecorder::durationChanged, this,
+ &Camera::updateRecordTime);
+ connect(m_mediaRecorder.data(), &QMediaRecorder::errorChanged, this,
+ &Camera::displayRecorderError);
}
- m_imageCapture = new QImageCapture;
- m_captureSession.setImageCapture(m_imageCapture);
-
- connect(m_mediaRecorder.data(), &QMediaRecorder::durationChanged, this,
- &Camera::updateRecordTime);
- connect(m_mediaRecorder.data(), &QMediaRecorder::errorChanged, this,
- &Camera::displayRecorderError);
-
- connect(ui->exposureCompensation, &QAbstractSlider::valueChanged, this,
- &Camera::setExposureCompensation);
+ if (!m_imageCapture) {
+ m_imageCapture.reset(new QImageCapture);
+ m_captureSession.setImageCapture(m_imageCapture.get());
+ connect(m_imageCapture.get(), &QImageCapture::readyForCaptureChanged, this,
+ &Camera::readyForCapture);
+ connect(m_imageCapture.get(), &QImageCapture::imageCaptured, this,
+ &Camera::processCapturedImage);
+ connect(m_imageCapture.get(), &QImageCapture::imageSaved, this, &Camera::imageSaved);
+ connect(m_imageCapture.get(), &QImageCapture::errorOccurred, this,
+ &Camera::displayCaptureError);
+ }
m_captureSession.setVideoOutput(ui->viewfinder);
updateCameraActive(m_camera->isActive());
updateRecorderState(m_mediaRecorder->recorderState());
-
- connect(m_imageCapture, &QImageCapture::readyForCaptureChanged, this, &Camera::readyForCapture);
- connect(m_imageCapture, &QImageCapture::imageCaptured, this, &Camera::processCapturedImage);
- connect(m_imageCapture, &QImageCapture::imageSaved, this, &Camera::imageSaved);
- connect(m_imageCapture, &QImageCapture::errorOccurred, this, &Camera::displayCaptureError);
readyForCapture(m_imageCapture->isReadyForCapture());
updateCaptureMode();
@@ -141,11 +143,6 @@ void Camera::keyPressEvent(QKeyEvent *event)
}
}
-void Camera::keyReleaseEvent(QKeyEvent *event)
-{
- QMainWindow::keyReleaseEvent(event);
-}
-
void Camera::updateRecordTime()
{
QString str = QString("Recorded %1 sec").arg(m_mediaRecorder->duration() / 1000);
@@ -184,7 +181,7 @@ void Camera::configureVideoSettings()
void Camera::configureImageSettings()
{
- ImageSettings settingsDialog(m_imageCapture);
+ ImageSettings settingsDialog(m_imageCapture.get());
settingsDialog.setWindowFlags(settingsDialog.windowFlags() & ~Qt::WindowContextHelpButtonHint);
if (settingsDialog.exec()) {
diff --git a/examples/multimedia/camera/camera.h b/examples/multimedia/camera/camera.h
index 5f083135f..4ba58a770 100644
--- a/examples/multimedia/camera/camera.h
+++ b/examples/multimedia/camera/camera.h
@@ -78,7 +78,6 @@ private slots:
protected:
void keyPressEvent(QKeyEvent *event) override;
- void keyReleaseEvent(QKeyEvent *event) override;
void closeEvent(QCloseEvent *event) override;
private:
@@ -87,10 +86,10 @@ private:
QActionGroup *videoDevicesGroup = nullptr;
QMediaDevices m_devices;
+ QScopedPointer<QImageCapture> m_imageCapture;
QMediaCaptureSession m_captureSession;
QScopedPointer<QCamera> m_camera;
QScopedPointer<QAudioInput> m_audioInput;
- QImageCapture *m_imageCapture;
QScopedPointer<QMediaRecorder> m_mediaRecorder;
bool m_isCapturingImage = false;