[libcamera-devel] [PATCH 16/21] qcam: viewfinder: Embed QImage in ViewFinder
Kieran Bingham
kieran.bingham at ideasonboard.com
Mon Mar 23 18:11:41 CET 2020
Hi Laurent,
On 23/03/2020 14:22, Laurent Pinchart wrote:
> 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.
Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
> Signed-off-by: Laurent Pinchart <laurent.pinchart 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
--
Kieran
More information about the libcamera-devel
mailing list