[libcamera-devel,v2,16/21] qcam: viewfinder: Embed QImage in ViewFinder

Message ID 20200323173559.21109-17-laurent.pinchart@ideasonboard.com
State Accepted
Headers show
Series
  • qcam: Bypass format conversion when not required
Related show

Commit Message

Laurent Pinchart March 23, 2020, 5:35 p.m. UTC
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@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
---
 src/qcam/viewfinder.cpp | 12 +++++-------
 src/qcam/viewfinder.h   |  3 ++-
 2 files changed, 7 insertions(+), 8 deletions(-)

Patch

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_ */
 };