[PATCH 1/1] libcamera: Put buffer back to V4L2BufferCache when VIDIOC_QBUF fails
Harvey Yang
chenghaoyang at chromium.org
Thu Sep 12 07:09:39 CEST 2024
From: Han-Lin Chen <hanlinchen at chromium.org>
The patch puts buffer back to V4L2BufferCache when VIDIOC_QBUF fails
in V4L2VideoDevice. This is to avoid cache leaks and causing assert.
Signed-off-by: Han-Lin Chen <hanlinchen at chromium.org>
Co-developed-by: Harvey Yang <chenghaoyang at chromium.org>
---
src/libcamera/v4l2_videodevice.cpp | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/src/libcamera/v4l2_videodevice.cpp b/src/libcamera/v4l2_videodevice.cpp
index 76742e18..75a2cdb1 100644
--- a/src/libcamera/v4l2_videodevice.cpp
+++ b/src/libcamera/v4l2_videodevice.cpp
@@ -1626,11 +1626,15 @@ int V4L2VideoDevice::queueBuffer(FrameBuffer *buffer)
*/
if (planes.size() < numV4l2Planes) {
LOG(V4L2, Error) << "Frame buffer has too few planes";
+ cache_->put(buf.index);
+
return -EINVAL;
}
if (planes.size() != numV4l2Planes && !buffer->_d()->isContiguous()) {
LOG(V4L2, Error) << "Device format requires contiguous buffer";
+ cache_->put(buf.index);
+
return -EINVAL;
}
@@ -1673,6 +1677,8 @@ int V4L2VideoDevice::queueBuffer(FrameBuffer *buffer)
if (i != planes.size() - 1 && bytesused != length) {
LOG(V4L2, Error)
<< "Holes in multi-planar buffer not supported";
+ cache_->put(buf.index);
+
return -EINVAL;
}
}
@@ -1722,6 +1728,8 @@ int V4L2VideoDevice::queueBuffer(FrameBuffer *buffer)
LOG(V4L2, Error)
<< "Failed to queue buffer " << buf.index << ": "
<< strerror(-ret);
+ cache_->put(buf.index);
+
return ret;
}
--
2.46.0.598.g6f2099f65c-goog
More information about the libcamera-devel
mailing list