[libcamera-devel] [PATCH v3 30/30] v4l2: Sum bytesused for all planes when dequeuing buffer
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Tue Sep 7 16:55:54 CEST 2021
Hi Kieran,
On Tue, Sep 07, 2021 at 03:17:48PM +0100, Kieran Bingham wrote:
> On 06/09/2021 23:56, Laurent Pinchart wrote:
> > The V4L2 compatibility layer supports the single-planar API only, and
> > thuss expose a single V4L2 buffer plane to applications, regardless of
>
> s/thuss/thus/
> s/expose/exposes/
>
> > the number of planes in the FrameBuffer. For multi-planar frame buffers,
> > the bytesused value isn't correct as it only takes the first plane into
> > account. Fix it by summing the bytesused values for all FrameBuffer
> > planes.
> >
> > Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> > ---
> > src/v4l2/v4l2_camera_proxy.cpp | 7 ++++++-
> > 1 file changed, 6 insertions(+), 1 deletion(-)
> >
> > diff --git a/src/v4l2/v4l2_camera_proxy.cpp b/src/v4l2/v4l2_camera_proxy.cpp
> > index 07d2250bb846..aeffef26c5bf 100644
> > --- a/src/v4l2/v4l2_camera_proxy.cpp
> > +++ b/src/v4l2/v4l2_camera_proxy.cpp
> > @@ -11,6 +11,7 @@
> > #include <array>
> > #include <errno.h>
> > #include <linux/videodev2.h>
> > +#include <numeric>
> > #include <set>
> > #include <string.h>
> > #include <sys/mman.h>
> > @@ -211,7 +212,11 @@ void V4L2CameraProxy::updateBuffers()
> >
> > switch (fmd.status) {
> > case FrameMetadata::FrameSuccess:
> > - buf.bytesused = fmd.planes()[0].bytesused;
> > + buf.bytesused = std::accumulate(fmd.planes().begin(),
> > + fmd.planes().end(), 0,
> > + [](unsigned int total, const auto &plane) {
>
> lambda's always look like black magic to me.
> I assume total is either automatically initialised, or initialised by
> the 0 after fmd.planes().end()
The latter (https://en.cppreference.com/w/cpp/algorithm/accumulate).
> Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
>
> > + return total + plane.bytesused;
> > + });
> > buf.field = V4L2_FIELD_NONE;
> > buf.timestamp.tv_sec = fmd.timestamp / 1000000000;
> > buf.timestamp.tv_usec = fmd.timestamp % 1000000;
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list