[libcamera-devel] [PATCH] libcamera: v4l2_videodevice: Improve debugging when buffer is too small

Laurent Pinchart laurent.pinchart at ideasonboard.com
Fri Oct 8 12:15:56 CEST 2021


When a dequeued buffer is too small, the condition is logged and an
error is returned. The logged message doesn't provide any information
about the sizes, making debugging more difficult. Improve it by logging
both the bytesused value and the length of each plane.

Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
---
Compile-tested only. Eugen, could you give it a try to debug the problem
you're facing ?

---
 src/libcamera/v4l2_videodevice.cpp | 14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)

diff --git a/src/libcamera/v4l2_videodevice.cpp b/src/libcamera/v4l2_videodevice.cpp
index ba5f88cd41ed..bd74103de7af 100644
--- a/src/libcamera/v4l2_videodevice.cpp
+++ b/src/libcamera/v4l2_videodevice.cpp
@@ -1713,19 +1713,25 @@ FrameBuffer *V4L2VideoDevice::dequeueBuffer()
 
 		unsigned int bytesused = multiPlanar ? planes[0].bytesused
 				       : buf.bytesused;
+		unsigned int remaining = bytesused;
 
 		for (auto [i, plane] : utils::enumerate(buffer->planes())) {
-			if (!bytesused) {
+			if (!remaining) {
 				LOG(V4L2, Error)
-					<< "Dequeued buffer is too small";
+					<< "Dequeued buffer (" << bytesused
+					<< " bytes) too small for plane lengths "
+					<< utils::join(buffer->planes(), "/",
+						       [](const FrameBuffer::Plane &p){
+							       return p.length;
+						       });
 
 				metadata.status = FrameMetadata::FrameError;
 				return buffer;
 			}
 
 			metadata.planes()[i].bytesused =
-				std::min(plane.length, bytesused);
-			bytesused -= metadata.planes()[i].bytesused;
+				std::min(plane.length, remaining);
+			remaining -= metadata.planes()[i].bytesused;
 		}
 	} else if (multiPlanar) {
 		/*

base-commit: 962df634bd0afe12e6f38464f5e602cf1460c430
-- 
Regards,

Laurent Pinchart



More information about the libcamera-devel mailing list