From 9c246b77e4982d4fbfdbf980df0d374547d7bfcc Mon Sep 17 00:00:00 2001 From: Naushir Patuck Date: Thu, 18 Nov 2021 16:42:15 +0000 Subject: pipeline: raspberrypi: Increase the V4L2BufferCache slot allocations If a stream is marked as external, double the number of V4L2BufferCache slots that are allocated. This is to account for additional buffers that may be allocated directly by the application. Signed-off-by: Naushir Patuck Reviewed-by: Kieran Bingham Reviewed-by: Umang Jain Reviewed-by: Laurent Pinchart Signed-off-by: Kieran Bingham --- src/libcamera/pipeline/raspberrypi/rpi_stream.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'src/libcamera') diff --git a/src/libcamera/pipeline/raspberrypi/rpi_stream.cpp b/src/libcamera/pipeline/raspberrypi/rpi_stream.cpp index b3265d0e..bab80d25 100644 --- a/src/libcamera/pipeline/raspberrypi/rpi_stream.cpp +++ b/src/libcamera/pipeline/raspberrypi/rpi_stream.cpp @@ -107,6 +107,17 @@ int Stream::prepareBuffers(unsigned int count) count = bufferMap_.size(); } + /* + * If this is an external stream, we must allocate slots for buffers that + * might be externally allocated. We have no indication of how many buffers + * may be used, so this might overallocate slots in the buffer cache. + * + * \todo Find a better heuristic, or, even better, an exact solution to + * this issue. + */ + if (isExternal()) + count = count * 2; + return dev_->importBuffers(count); } -- cgit v1.2.1