Skip to content

Commit 2abd1f8

Browse files
committed
RASPBERRYPI ONLY: libcamera: v4l2_videodevice: Limit number of queued buffers
V4L2 only allows upto VIDEO_MAX_FRAME frames to be queued at a time, so if we reach this limit, store the framebuffers in a pending queue, and try to enqueue once a buffer has been dequeued. Signed-off-by: Naushir Patuck <naush@raspberrypi.com>
1 parent 2fc9ce1 commit 2abd1f8

File tree

2 files changed

+203
-136
lines changed

2 files changed

+203
-136
lines changed

include/libcamera/internal/v4l2_videodevice.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
#include <memory>
1313
#include <optional>
1414
#include <ostream>
15+
#include <queue>
1516
#include <stdint.h>
1617
#include <string>
1718
#include <unordered_set>
@@ -267,6 +268,8 @@ class V4L2VideoDevice : public V4L2Device
267268
void bufferAvailable();
268269
FrameBuffer *dequeueBuffer();
269270

271+
int queueToDevice(FrameBuffer *buffer);
272+
270273
void watchdogExpired();
271274

272275
template<typename T>
@@ -282,6 +285,7 @@ class V4L2VideoDevice : public V4L2Device
282285

283286
V4L2BufferCache *cache_;
284287
std::map<unsigned int, FrameBuffer *> queuedBuffers_;
288+
std::queue<FrameBuffer *> pendingBuffersToQueue_;
285289

286290
EventNotifier *fdBufferNotifier_;
287291

0 commit comments

Comments
 (0)