fix: enhance video stream cleanup and frame capture diagnostics for improved stability

This commit is contained in:
Adam Shiervani 2025-11-21 01:36:32 +01:00
parent 444f765694
commit 2d6c431927
1 changed files with 22 additions and 6 deletions

View File

@ -662,8 +662,8 @@ void *run_video_stream(void *arg)
log_error("failure VIDIOC_QBUF: %s", strerror(errno));
}
cleanup:
log_info("cleaning up video capture device %s (attempt=%d, will loop back)",
VIDEO_DEV, open_attempts);
log_info("cleaning up video capture device %s (attempt=%d, num_frames=%u)",
VIDEO_DEV, open_attempts, num);
if (ioctl(video_dev_fd, VIDIOC_STREAMOFF, &type) < 0)
{
log_error("VIDIOC_STREAMOFF failed: %s", strerror(errno));
@ -693,6 +693,18 @@ void *run_video_stream(void *arg)
log_info("closing video capture device %s (attempt=%d completed)", VIDEO_DEV, open_attempts);
close(video_dev_fd);
// If we successfully captured frames, reset the attempt counter
if (num > 30) {
log_info("Successfully captured %u frames, resetting attempt counter", num);
open_attempts = 0;
}
// If we got 0 frames 3 times in a row, clear the stale signal flag
else if (num == 0 && open_attempts >= 3) {
log_warn("3 consecutive zero-frame timeouts - clearing stale detected_signal");
detected_signal = false;
}
log_info("==== OUTER LOOP END: going back to start (streaming_flag=%d) ====", streaming_flag);
}
@ -736,12 +748,16 @@ void video_start_streaming()
if (streaming_thread != NULL)
{
if (streaming_stopped == true) {
log_error("video streaming already stopped but streaming_thread is not NULL");
assert(streaming_stopped == true);
}
log_info("cleaning up stopped thread before starting new one");
pthread_join(*streaming_thread, NULL);
free(streaming_thread);
streaming_thread = NULL;
// Fall through to start new thread
} else {
log_warn("video streaming already started");
return;
}
}
pthread_t *new_thread = malloc(sizeof(pthread_t));
if (new_thread == NULL)