summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>2021-09-07 00:06:52 +0300
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2021-09-07 19:18:55 +0300
commita25710428e1a6ef9fff3d70e3f50c01a88cde9f2 (patch)
tree393ff1a2f695faf3d4e556570fdb4afe9ab4b987
parenta339d055cc7ebd92b89adadd3044f69f8f9653b8 (diff)
v4l2: Sum bytesused for all planes when dequeuing buffer
The V4L2 compatibility layer supports the single-planar API only, and thus exposes a single V4L2 buffer plane to applications, regardless of 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@ideasonboard.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Reviewed-by: Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com>
-rw-r--r--src/v4l2/v4l2_camera_proxy.cpp7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/v4l2/v4l2_camera_proxy.cpp b/src/v4l2/v4l2_camera_proxy.cpp
index 07d2250b..aeffef26 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) {
+ return total + plane.bytesused;
+ });
buf.field = V4L2_FIELD_NONE;
buf.timestamp.tv_sec = fmd.timestamp / 1000000000;
buf.timestamp.tv_usec = fmd.timestamp % 1000000;