diff options
author | Artem Dyomin <artem.dyomin@qt.io> | 2022-11-11 10:02:02 +0100 |
---|---|---|
committer | Artem Dyomin <artem.dyomin@qt.io> | 2022-11-11 10:30:12 +0100 |
commit | ac0e44288d305fb22d9396f97f7ee0b1d371e917 (patch) | |
tree | b4a369b0cbc2bf991e88f5daf5668203286908ba | |
parent | 531ea0bd937653c0462edf07cae28e473d4b9979 (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.cpp | 39 | ||||
-rw-r--r-- | examples/multimedia/camera/camera.h | 3 |
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; |