From c671cbe622469185311fafce4b32b6b995a04445 Mon Sep 17 00:00:00 2001 From: Laurent Pinchart Date: Sun, 16 Aug 2020 17:52:50 +0300 Subject: cam: Limit file write to payload size 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 Reviewed-by: Kieran Bingham --- src/cam/buffer_writer.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'src/cam') diff --git a/src/cam/buffer_writer.cpp b/src/cam/buffer_writer.cpp index c5a5eb46..f2b21aef 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 (meta.bytesused > plane.length) + std::cerr << "payload size " << meta.bytesused + << " larger than plane size " << plane.length + << std::endl; ret = ::write(fd, data, length); if (ret < 0) { -- cgit v1.2.1