Skip to content

Commit eb29254

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 <[email protected]>
1 parent 06a2f5c commit eb29254

File tree

2 files changed

+203
-136
lines changed

2 files changed

+203
-136
lines changed

include/libcamera/internal/v4l2_videodevice.h

+4
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>
@@ -266,6 +267,8 @@ class V4L2VideoDevice : public V4L2Device
266267
void bufferAvailable();
267268
FrameBuffer *dequeueBuffer();
268269

270+
int queueToDevice(FrameBuffer *buffer);
271+
269272
void watchdogExpired();
270273

271274
template<typename T>
@@ -281,6 +284,7 @@ class V4L2VideoDevice : public V4L2Device
281284

282285
V4L2BufferCache *cache_;
283286
std::map<unsigned int, FrameBuffer *> queuedBuffers_;
287+
std::queue<FrameBuffer *> pendingBuffersToQueue_;
284288

285289
EventNotifier *fdBufferNotifier_;
286290

0 commit comments

Comments
 (0)