diff --git a/src/libcamera/v4l2_videodevice.cpp b/src/libcamera/v4l2_videodevice.cpp
index 8f962c7e9d0c7d01..a05dd6a1f7d86eaa 100644
--- a/src/libcamera/v4l2_videodevice.cpp
+++ b/src/libcamera/v4l2_videodevice.cpp
@@ -1014,7 +1014,17 @@ int V4L2VideoDevice::queueBuffer(Buffer *buffer)
 	if (V4L2_TYPE_IS_OUTPUT(buf.type)) {
 		const BufferInfo &info = buffer->info();
 
-		buf.bytesused = info.planes()[0].bytesused;
+		if (multiPlanar) {
+			unsigned int nplane = 0;
+			for (const BufferInfo::Plane &plane : info.planes()) {
+				v4l2Planes[nplane].bytesused = plane.bytesused;
+				nplane++;
+			}
+		} else {
+			if (info.planes().size())
+				buf.bytesused = info.planes()[0].bytesused;
+		}
+
 		buf.sequence = info.sequence();
 		buf.timestamp.tv_sec = info.timestamp() / 1000000000;
 		buf.timestamp.tv_usec = (info.timestamp() / 1000) % 1000000;
