@@ -154,7 +154,7 @@ int V4L2Camera::validateConfiguration(const PixelFormat &pixelFormat,
return 0;
}
-int V4L2Camera::allocBuffers(unsigned int count)
+int V4L2Camera::allocBuffers()
{
Stream *stream = config_->at(0).stream();
@@ -162,7 +162,9 @@ int V4L2Camera::allocBuffers(unsigned int count)
if (ret < 0)
return ret;
- for (unsigned int i = 0; i < count; i++) {
+ const auto &buffers = bufferAllocator_->buffers(stream);
+
+ for (size_t i = 0; i < buffers.size(); i++) {
std::unique_ptr<Request> request = camera_->createRequest(i);
if (!request) {
requestPool_.clear();
@@ -171,7 +173,7 @@ int V4L2Camera::allocBuffers(unsigned int count)
requestPool_.push_back(std::move(request));
}
- return ret;
+ return buffers.size();
}
void V4L2Camera::freeBuffers()
@@ -54,7 +54,7 @@ public:
libcamera::ControlList &controls() { return controls_; }
const libcamera::ControlInfoMap &controlInfo() { return camera_->controls(); }
- int allocBuffers(unsigned int count);
+ int allocBuffers();
void freeBuffers();
int getBufferFd(unsigned int index);
@@ -543,17 +543,16 @@ int V4L2CameraProxy::vidioc_reqbufs(V4L2CameraFile *file, struct v4l2_requestbuf
if (ret < 0)
return -EINVAL;
- setFmtFromConfig(streamConfig_);
-
- arg->count = streamConfig_.bufferCount;
- bufferCount_ = arg->count;
-
- ret = vcam_->allocBuffers(arg->count);
+ ret = vcam_->allocBuffers();
if (ret < 0) {
arg->count = 0;
return ret;
}
+ bufferCount_ = arg->count = ret;
+
+ setFmtFromConfig(streamConfig_);
+
buffers_.resize(arg->count);
for (unsigned int i = 0; i < arg->count; i++) {
struct v4l2_buffer buf = {};
Make `V4L2Camera::allocBuffers()` simply create as many requests as the number of buffers allocated instead of taking it as an argument. The two should be the same, so no functional changes intended. Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com> --- src/v4l2/v4l2_camera.cpp | 8 +++++--- src/v4l2/v4l2_camera.h | 2 +- src/v4l2/v4l2_camera_proxy.cpp | 11 +++++------ 3 files changed, 11 insertions(+), 10 deletions(-)