[libcamera-devel] [PATCH v2 16/21] qcam: viewfinder: Embed QImage in ViewFinder
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Mon Mar 23 18:35:54 CET 2020
The QImage class is a thin wrapper that uses implicit sharing. We can
thus embed it in the ViewFinder class instead of allocating it
dynamically, and assign it at runtime. This simplifies the code.
Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
---
src/qcam/viewfinder.cpp | 12 +++++-------
src/qcam/viewfinder.h | 3 ++-
2 files changed, 7 insertions(+), 8 deletions(-)
diff --git a/src/qcam/viewfinder.cpp b/src/qcam/viewfinder.cpp
index 2a35932e0b79..e7b12015d8f6 100644
--- a/src/qcam/viewfinder.cpp
+++ b/src/qcam/viewfinder.cpp
@@ -16,13 +16,12 @@
#include "format_converter.h"
ViewFinder::ViewFinder(QWidget *parent)
- : QWidget(parent), format_(0), image_(nullptr)
+ : QWidget(parent), format_(0)
{
}
ViewFinder::~ViewFinder()
{
- delete image_;
}
void ViewFinder::render(libcamera::FrameBuffer *buffer, MappedBuffer *map)
@@ -41,7 +40,7 @@ void ViewFinder::render(libcamera::FrameBuffer *buffer, MappedBuffer *map)
*/
converter_.convert(static_cast<unsigned char *>(map->memory),
- buffer->metadata().planes[0].bytesused, image_);
+ buffer->metadata().planes[0].bytesused, &image_);
update();
renderComplete(buffer);
@@ -51,7 +50,7 @@ QImage ViewFinder::getCurrentImage()
{
QMutexLocker locker(&mutex_);
- return image_->copy();
+ return image_.copy();
}
int ViewFinder::setFormat(const libcamera::PixelFormat &format,
@@ -66,8 +65,7 @@ int ViewFinder::setFormat(const libcamera::PixelFormat &format,
format_ = format;
size_ = size;
- delete image_;
- image_ = new QImage(size_, QImage::Format_RGB32);
+ image_ = QImage(size_, QImage::Format_RGB32);
updateGeometry();
return 0;
@@ -76,7 +74,7 @@ int ViewFinder::setFormat(const libcamera::PixelFormat &format,
void ViewFinder::paintEvent(QPaintEvent *)
{
QPainter painter(this);
- painter.drawImage(rect(), *image_, image_->rect());
+ painter.drawImage(rect(), image_, image_.rect());
}
QSize ViewFinder::sizeHint() const
diff --git a/src/qcam/viewfinder.h b/src/qcam/viewfinder.h
index 784fcceda5bd..54c0fa9dd7a0 100644
--- a/src/qcam/viewfinder.h
+++ b/src/qcam/viewfinder.h
@@ -9,6 +9,7 @@
#include <stddef.h>
+#include <QImage>
#include <QMutex>
#include <QSize>
#include <QWidget>
@@ -51,7 +52,7 @@ private:
libcamera::PixelFormat format_;
QSize size_;
- QImage *image_;
+ QImage image_;
QMutex mutex_; /* Prevent concurrent access to image_ */
};
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list