summaryrefslogtreecommitdiff
path: root/src/qcam/viewfinder.cpp
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>2020-03-23 02:34:36 +0200
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2020-03-24 10:34:04 +0200
commit615f7438ad6bf49bd213e7ae4f9f3fe334edeb67 (patch)
treea99021c5221bc0d627f89c89b27530ae652eeedf /src/qcam/viewfinder.cpp
parentb73192036db19f09057c64f350b53093ee9e7797 (diff)
qcam: viewfinder: Make the viewfinder hold a reference to a buffer
The viewfinder is currently expected to render frames to the screen synchronously in the display() function, or at least to copy data so that the buffer can be queued in a new request when the function returns. This prevents optimisations when the capture format is identical to the display format. Make the viewfinder take ownership of the buffer, and notify of its release through a signal. The release is currently still synchronous, this will be addressed in a subsequent patch. Rename the ViewFinder::display() function to render() to better describe its purpose, as it's meant to start the rendering and not display the frame synchronously. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Diffstat (limited to 'src/qcam/viewfinder.cpp')
-rw-r--r--src/qcam/viewfinder.cpp5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/qcam/viewfinder.cpp b/src/qcam/viewfinder.cpp
index b8feabd5..2a35932e 100644
--- a/src/qcam/viewfinder.cpp
+++ b/src/qcam/viewfinder.cpp
@@ -25,8 +25,7 @@ ViewFinder::~ViewFinder()
delete image_;
}
-void ViewFinder::display(const libcamera::FrameBuffer *buffer,
- MappedBuffer *map)
+void ViewFinder::render(libcamera::FrameBuffer *buffer, MappedBuffer *map)
{
if (buffer->planes().size() != 1) {
qWarning() << "Multi-planar buffers are not supported";
@@ -44,6 +43,8 @@ void ViewFinder::display(const libcamera::FrameBuffer *buffer,
converter_.convert(static_cast<unsigned char *>(map->memory),
buffer->metadata().planes[0].bytesused, image_);
update();
+
+ renderComplete(buffer);
}
QImage ViewFinder::getCurrentImage()