summaryrefslogtreecommitdiff
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 15:06:20 +0000
commit133bf26f8d75ea6708e429bcd611d37ed353f613 (patch)
tree82aefb9411b089a1cbceeb8d7b82695c6a61bffb
parent5196cc4c58760eb157f83aef6b37bcbff91a21fd (diff)
downloadqtmultimedia-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.cpp40
-rw-r--r--examples/multimedia/camera/camera.h3
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;