[libcamera-devel] [PATCH] cam: Limit file write to payload size

Laurent Pinchart laurent.pinchart at ideasonboard.com
Sat Aug 22 15:40:36 CEST 2020


The payload size in a captured framebuffer is usually equal to the
buffer size. However, for compressed formats, the payload may be
smaller Only write the payload when capturing to a file.

Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
---
 src/cam/buffer_writer.cpp | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/src/cam/buffer_writer.cpp b/src/cam/buffer_writer.cpp
index c5a5eb46224a..6305958924a4 100644
--- a/src/cam/buffer_writer.cpp
+++ b/src/cam/buffer_writer.cpp
@@ -64,9 +64,17 @@ int BufferWriter::write(FrameBuffer *buffer, const std::string &streamName)
 	if (fd == -1)
 		return -errno;
 
-	for (const FrameBuffer::Plane &plane : buffer->planes()) {
+	for (unsigned int i = 0; i < buffer->planes().size(); ++i) {
+		const FrameBuffer::Plane &plane = buffer->planes()[i];
+		const FrameMetadata::Plane &meta = buffer->metadata().planes[i];
+
 		void *data = mappedBuffers_[plane.fd.fd()].first;
-		unsigned int length = plane.length;
+		unsigned int length = std::min(meta.bytesused, plane.length);
+
+		if (length < meta.bytesused)
+			std::cerr << "payload size " << meta.bytesused
+				  << " smaller than plane size " << plane.length
+				  << std::endl;
 
 		ret = ::write(fd, data, length);
 		if (ret < 0) {
-- 
Regards,

Laurent Pinchart



More information about the libcamera-devel mailing list