Skip to content

Commit 36de248

Browse files
Simplification no longer works
1 parent 4105f57 commit 36de248

File tree

1 file changed

+15
-23
lines changed

1 file changed

+15
-23
lines changed

c_mpos/src/webcam.c

Lines changed: 15 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,7 @@
2323
#define CAPTURE_HEIGHT 480
2424
#define OUTPUT_WIDTH 240 // Resize to 240x240
2525
#define OUTPUT_HEIGHT 240
26-
#define NUM_BUFFERS 2 // Revert to 2 buffers, as it achieved 2 captures
27-
#define QUEUE_RETRIES 10 // Increase retries for robustness
28-
#define QUEUE_RETRY_DELAY_US 200000 // 200ms delay between retries
26+
#define NUM_BUFFERS 2 // Keep 2 buffers, stable for continuous captures
2927

3028
// Webcam object type
3129
typedef struct _webcam_obj_t {
@@ -98,34 +96,28 @@ static void webcam_reset_streaming(webcam_obj_t *self) {
9896
static mp_obj_t webcam_capture_grayscale(mp_obj_t self_in) {
9997
webcam_obj_t *self = MP_OBJ_TO_PTR(self_in);
10098

101-
// Try to queue a buffer with retries
99+
// Try to queue a buffer
102100
struct v4l2_buffer buf = {0};
103101
bool queued = false;
104-
for (int attempt = 0; attempt < QUEUE_RETRIES && !queued; attempt++) {
105-
for (size_t i = 0; i < self->num_buffers; i++) {
106-
memset(&buf, 0, sizeof(buf));
107-
buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
108-
buf.memory = V4L2_MEMORY_MMAP;
109-
buf.index = i;
102+
for (size_t i = 0; i < self->num_buffers; i++) {
103+
memset(&buf, 0, sizeof(buf));
104+
buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
105+
buf.memory = V4L2_MEMORY_MMAP;
106+
buf.index = i;
110107

111-
WEBCAM_DEBUG_PRINT("webcam: Attempting to queue buffer (index=%zu, attempt=%d)\n", i, attempt + 1);
112-
if (ioctl(self->fd, VIDIOC_QBUF, &buf) == 0) {
113-
WEBCAM_DEBUG_PRINT("webcam: Successfully queued buffer (index=%zu)\n", i);
114-
queued = true;
115-
break;
116-
}
117-
WEBCAM_DEBUG_PRINT("webcam: Failed to queue buffer (index=%zu, errno=%d)\n", i, errno);
118-
}
119-
if (!queued && attempt < QUEUE_RETRIES - 1) {
120-
WEBCAM_DEBUG_PRINT("webcam: No buffers available, retrying after delay\n");
121-
usleep(QUEUE_RETRY_DELAY_US); // Wait 200ms
108+
WEBCAM_DEBUG_PRINT("webcam: Attempting to queue buffer (index=%zu)\n", i);
109+
if (ioctl(self->fd, VIDIOC_QBUF, &buf) == 0) {
110+
WEBCAM_DEBUG_PRINT("webcam: Successfully queued buffer (index=%zu)\n", i);
111+
queued = true;
112+
break;
122113
}
114+
WEBCAM_DEBUG_PRINT("webcam: Failed to queue buffer (index=%zu, errno=%d)\n", i, errno);
123115
}
124116

125117
if (!queued) {
126-
WEBCAM_DEBUG_PRINT("webcam: No buffers available after %d retries, resetting streaming\n", QUEUE_RETRIES);
118+
WEBCAM_DEBUG_PRINT("webcam: No buffers available, resetting streaming\n");
127119
webcam_reset_streaming(self);
128-
// Retry queuing one more time after reset
120+
// Try queuing again after reset
129121
for (size_t i = 0; i < self->num_buffers; i++) {
130122
memset(&buf, 0, sizeof(buf));
131123
buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;

0 commit comments

Comments
 (0)