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 15:06:20 +0000 |
commit | 133bf26f8d75ea6708e429bcd611d37ed353f613 (patch) | |
tree | 82aefb9411b089a1cbceeb8d7b82695c6a61bffb | |
parent | 5196cc4c58760eb157f83aef6b37bcbff91a21fd (diff) | |
download | qtmultimedia-133bf26f8d75ea6708e429bcd611d37ed353f613.tar.gz |
Fix issues in camera example
- fix memory leak - QImageCapture
- fix multimple signals connection
Change-Id: I63df2bd16f678c67a3ee90c7e7251575d9cdeb1e
Reviewed-by: Piotr Srebrny <piotr.srebrny@qt.io>
Reviewed-by: Lars Knoll <lars@knoll.priv.no>
(cherry picked from commit ac0e44288d305fb22d9396f97f7ee0b1d371e917)
-rw-r--r-- | examples/multimedia/camera/camera.cpp | 40 | ||||
-rw-r--r-- | examples/multimedia/camera/camera.h | 3 |
2 files changed, 22 insertions, 21 deletions
diff --git a/examples/multimedia/camera/camera.cpp b/examples/multimedia/camera/camera.cpp index 201e6e985..95b6efda8 100644 --- a/examples/multimedia/camera/camera.cpp +++ b/examples/multimedia/camera/camera.cpp @@ -46,6 +46,8 @@ Camera::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()); } @@ -61,26 +63,31 @@ void Camera::setCamera(const QCameraDevice &cameraDevice) if (!m_mediaRecorder) { m_mediaRecorder.reset(new QMediaRecorder); m_captureSession.setRecorder(m_mediaRecorder.data()); - connect(m_mediaRecorder.data(), &QMediaRecorder::recorderStateChanged, this, &Camera::updateRecorderState); - } - - 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(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); + } - 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(); @@ -134,11 +141,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); @@ -178,7 +180,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 ae8eb5919..290388a31 100644 --- a/examples/multimedia/camera/camera.h +++ b/examples/multimedia/camera/camera.h @@ -76,7 +76,6 @@ private slots: protected: void keyPressEvent(QKeyEvent *event) override; - void keyReleaseEvent(QKeyEvent *event) override; void closeEvent(QCloseEvent *event) override; private: @@ -85,10 +84,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; |