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

Eugen.Hristev at microchip.com Eugen.Hristev at microchip.com
Mon Oct 11 17:20:31 CEST 2021


On 10/8/21 1:15 PM, Laurent Pinchart wrote:

> 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 ?

Tested-by: Eugen Hristev <eugen.hristev at microchip.com>

Tested this patch and the information is more verbose, making it easy to 
debug my problem.

> 
> ---
>   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