Skip to content

Commit 53d37e7

Browse files
webcam: more debug
1 parent 34728e9 commit 53d37e7

File tree

1 file changed

+33
-11
lines changed

1 file changed

+33
-11
lines changed

c_mpos/src/webcam.c

Lines changed: 33 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -68,29 +68,38 @@ static void resize_640x480_to_240x240(uint8_t *src, uint8_t *dst) {
6868
static mp_obj_t webcam_capture_grayscale(mp_obj_t self_in) {
6969
webcam_obj_t *self = MP_OBJ_TO_PTR(self_in);
7070

71-
// Queue the buffer
71+
// Initialize buffer structure
7272
struct v4l2_buffer buf = {0};
7373
buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
7474
buf.memory = V4L2_MEMORY_MMAP;
7575
buf.index = 0;
76+
77+
// Queue the buffer
78+
WEBCAM_DEBUG_PRINT("webcam: Queuing buffer (index=%d)\n", buf.index);
7679
if (ioctl(self->fd, VIDIOC_QBUF, &buf) < 0) {
77-
WEBCAM_DEBUG_PRINT("webcam: Failed to queue buffer for capture\n");
80+
WEBCAM_DEBUG_PRINT("webcam: Failed to queue buffer for capture (errno=%d)\n", errno);
7881
mp_raise_OSError(errno);
7982
}
8083

8184
// Start streaming if not already started
8285
if (!self->streaming) {
8386
enum v4l2_buf_type type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
87+
WEBCAM_DEBUG_PRINT("webcam: Starting video streaming\n");
8488
if (ioctl(self->fd, VIDIOC_STREAMON, &type) < 0) {
85-
WEBCAM_DEBUG_PRINT("webcam: Failed to start video streaming\n");
89+
WEBCAM_DEBUG_PRINT("webcam: Failed to start video streaming (errno=%d)\n", errno);
8690
mp_raise_OSError(errno);
8791
}
8892
self->streaming = true;
8993
}
9094

9195
// Dequeue the buffer (capture frame)
96+
memset(&buf, 0, sizeof(buf)); // Clear buffer for dequeue
97+
buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
98+
buf.memory = V4L2_MEMORY_MMAP;
99+
buf.index = 0;
100+
WEBCAM_DEBUG_PRINT("webcam: Dequeuing buffer\n");
92101
if (ioctl(self->fd, VIDIOC_DQBUF, &buf) < 0) {
93-
WEBCAM_DEBUG_PRINT("webcam: Failed to dequeue captured frame\n");
102+
WEBCAM_DEBUG_PRINT("webcam: Failed to dequeue captured frame (errno=%d)\n", errno);
94103
mp_raise_OSError(errno);
95104
}
96105

@@ -121,8 +130,13 @@ static mp_obj_t webcam_capture_grayscale(mp_obj_t self_in) {
121130
free(resized_buf);
122131

123132
// Re-queue the buffer for the next capture
133+
memset(&buf, 0, sizeof(buf)); // Clear buffer for re-queue
134+
buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
135+
buf.memory = V4L2_MEMORY_MMAP;
136+
buf.index = 0;
137+
WEBCAM_DEBUG_PRINT("webcam: Re-queuing buffer (index=%d)\n", buf.index);
124138
if (ioctl(self->fd, VIDIOC_QBUF, &buf) < 0) {
125-
WEBCAM_DEBUG_PRINT("webcam: Failed to re-queue buffer after capture\n");
139+
WEBCAM_DEBUG_PRINT("webcam: Failed to re-queue buffer after capture (errno=%d)\n", errno);
126140
mp_raise_OSError(errno);
127141
}
128142

@@ -137,22 +151,25 @@ static mp_obj_t webcam_deinit(mp_obj_t self_in) {
137151
// Stop streaming if active
138152
if (self->streaming) {
139153
enum v4l2_buf_type type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
154+
WEBCAM_DEBUG_PRINT("webcam: Stopping video streaming\n");
140155
if (ioctl(self->fd, VIDIOC_STREAMOFF, &type) < 0) {
141-
WEBCAM_DEBUG_PRINT("webcam: Failed to stop video streaming\n");
156+
WEBCAM_DEBUG_PRINT("webcam: Failed to stop video streaming (errno=%d)\n", errno);
142157
mp_raise_OSError(errno);
143158
}
144159
self->streaming = false;
145160
}
146161

147162
// Unmap buffer
148163
if (self->buffer != NULL && self->buffer != MAP_FAILED) {
164+
WEBCAM_DEBUG_PRINT("webcam: Unmapping buffer\n");
149165
munmap(self->buffer, self->buffer_length);
150166
self->buffer = NULL;
151167
self->buffer_length = 0;
152168
}
153169

154170
// Close device
155171
if (self->fd >= 0) {
172+
WEBCAM_DEBUG_PRINT("webcam: Closing device\n");
156173
close(self->fd);
157174
self->fd = -1;
158175
}
@@ -171,9 +188,10 @@ static mp_obj_t webcam_init(void) {
171188
self->streaming = false;
172189

173190
// Open the webcam device
191+
WEBCAM_DEBUG_PRINT("webcam: Opening device %s\n", VIDEO_DEVICE);
174192
self->fd = open(VIDEO_DEVICE, O_RDWR);
175193
if (self->fd < 0) {
176-
WEBCAM_DEBUG_PRINT("webcam: Failed to open device %s\n", VIDEO_DEVICE);
194+
WEBCAM_DEBUG_PRINT("webcam: Failed to open device %s (errno=%d)\n", VIDEO_DEVICE, errno);
177195
mp_raise_OSError(errno);
178196
}
179197

@@ -184,8 +202,9 @@ static mp_obj_t webcam_init(void) {
184202
fmt.fmt.pix.height = CAPTURE_HEIGHT;
185203
fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_YUYV;
186204
fmt.fmt.pix.field = V4L2_FIELD_ANY;
205+
WEBCAM_DEBUG_PRINT("webcam: Setting format to YUYV %dx%d\n", CAPTURE_WIDTH, CAPTURE_HEIGHT);
187206
if (ioctl(self->fd, VIDIOC_S_FMT, &fmt) < 0) {
188-
WEBCAM_DEBUG_PRINT("webcam: Failed to set YUYV format at %dx%d\n", CAPTURE_WIDTH, CAPTURE_HEIGHT);
207+
WEBCAM_DEBUG_PRINT("webcam: Failed to set YUYV format at %dx%d (errno=%d)\n", CAPTURE_WIDTH, CAPTURE_HEIGHT, errno);
189208
close(self->fd);
190209
mp_raise_OSError(errno);
191210
}
@@ -195,8 +214,9 @@ static mp_obj_t webcam_init(void) {
195214
req.count = 1;
196215
req.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
197216
req.memory = V4L2_MEMORY_MMAP;
217+
WEBCAM_DEBUG_PRINT("webcam: Requesting one memory-mapped buffer\n");
198218
if (ioctl(self->fd, VIDIOC_REQBUFS, &req) < 0) {
199-
WEBCAM_DEBUG_PRINT("webcam: Failed to request memory-mapped buffer\n");
219+
WEBCAM_DEBUG_PRINT("webcam: Failed to request memory-mapped buffer (errno=%d)\n", errno);
200220
close(self->fd);
201221
mp_raise_OSError(errno);
202222
}
@@ -206,16 +226,18 @@ static mp_obj_t webcam_init(void) {
206226
buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
207227
buf.memory = V4L2_MEMORY_MMAP;
208228
buf.index = 0;
229+
WEBCAM_DEBUG_PRINT("webcam: Querying buffer properties\n");
209230
if (ioctl(self->fd, VIDIOC_QUERYBUF, &buf) < 0) {
210-
WEBCAM_DEBUG_PRINT("webcam: Failed to query buffer properties\n");
231+
WEBCAM_DEBUG_PRINT("webcam: Failed to query buffer properties (errno=%d)\n", errno);
211232
close(self->fd);
212233
mp_raise_OSError(errno);
213234
}
214235

215236
self->buffer_length = buf.length;
237+
WEBCAM_DEBUG_PRINT("webcam: Mapping buffer of length %zu\n", self->buffer_length);
216238
self->buffer = mmap(NULL, buf.length, PROT_READ | PROT_WRITE, MAP_SHARED, self->fd, buf.m.offset);
217239
if (self->buffer == MAP_FAILED) {
218-
WEBCAM_DEBUG_PRINT("webcam: Failed to map buffer memory\n");
240+
WEBCAM_DEBUG_PRINT("webcam: Failed to map buffer memory (errno=%d)\n", errno);
219241
close(self->fd);
220242
mp_raise_OSError(errno);
221243
}

0 commit comments

Comments
 (0)