#include <string.h>
#include <unistd.h>
#include <fcntl.h>
+#include <errno.h>
#include <sys/ioctl.h>
#include <linux/videodev2.h>
#include <bmusb/bmusb.h>
}
#endif
- write(video_fd, origptr, video_frame.len);
+ size_t len = video_frame.len;
+ while (len > 0) {
+ ssize_t ret = write(video_fd, origptr, len);
+ if (ret == -1) {
+ if (errno == EINTR) {
+ continue;
+ } else {
+ perror("write");
+ break; // Hope for better luck next frame.
+ }
+ }
+ origptr += ret;
+ len -= ret;
+ }
}
usb->get_video_frame_allocator()->release_frame(video_frame);