[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