Removed unused io methods

This commit is contained in:
Martijn Braam
2020-09-05 14:45:58 +02:00
parent 533c1dec21
commit 74f170e9e5

107
main.c
View File

@@ -26,9 +26,7 @@ struct buffer {
}; };
struct buffer *buffers; struct buffer *buffers;
static int *outbuffer;
static unsigned int n_buffers; static unsigned int n_buffers;
static enum io_method io = IO_METHOD_MMAP;
// Rear camera // Rear camera
static char *rear_dev_name; static char *rear_dev_name;
@@ -252,22 +250,10 @@ init_device(int fd)
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
switch (io) { if (!(cap.capabilities & V4L2_CAP_STREAMING)) {
case IO_METHOD_READ: fprintf(stderr, "%s does not support streaming i/o\n",
if (!(cap.capabilities & V4L2_CAP_READWRITE)) { *dev_name);
fprintf(stderr, "%s does not support read i/o\n", exit(EXIT_FAILURE);
*dev_name);
exit(EXIT_FAILURE);
}
break;
case IO_METHOD_MMAP:
case IO_METHOD_USERPTR:
if (!(cap.capabilities & V4L2_CAP_STREAMING)) {
fprintf(stderr, "%s does not support streaming i/o\n",
*dev_name);
exit(EXIT_FAILURE);
}
break;
} }
/* Select video input, video standard and tune here. */ /* Select video input, video standard and tune here. */
@@ -446,76 +432,27 @@ read_frame(int fd)
{ {
struct v4l2_buffer buf = {0}; struct v4l2_buffer buf = {0};
switch (io) { buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
case IO_METHOD_READ: buf.memory = V4L2_MEMORY_MMAP;
if (read(fd, buffers[0].start, buffers[0].length) == -1) { if (xioctl(fd, VIDIOC_DQBUF, &buf) == -1) {
switch (errno) { switch (errno) {
case EAGAIN: case EAGAIN:
return 0; return 0;
case EIO: case EIO:
/* Could ignore EIO, see spec. */ /* Could ignore EIO, see spec. */
/* fallthrough */ /* fallthrough */
default: default:
errno_exit("read"); errno_exit("VIDIOC_DQBUF");
break; break;
} }
} }
process_image(buffers[0].start, buffers[0].length);
break;
case IO_METHOD_MMAP:
buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
buf.memory = V4L2_MEMORY_MMAP;
if (xioctl(fd, VIDIOC_DQBUF, &buf) == -1) {
switch (errno) {
case EAGAIN:
return 0;
case EIO:
/* Could ignore EIO, see spec. */
/* fallthrough */
default:
errno_exit("VIDIOC_DQBUF");
break;
}
}
//assert(buf.index < n_buffers); //assert(buf.index < n_buffers);
process_image(buffers[buf.index].start, buf.bytesused); process_image(buffers[buf.index].start, buf.bytesused);
if (xioctl(fd, VIDIOC_QBUF, &buf) == -1) { if (xioctl(fd, VIDIOC_QBUF, &buf) == -1) {
errno_exit("VIDIOC_QBUF"); errno_exit("VIDIOC_QBUF");
}
break;
case IO_METHOD_USERPTR:
buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
buf.memory = V4L2_MEMORY_USERPTR;
if (xioctl(fd, VIDIOC_DQBUF, &buf) == -1) {
switch (errno) {
case EAGAIN:
return 0;
case EIO:
/* Could ignore EIO, see spec. */
/* fallthrough */
default:
errno_exit("VIDIOC_DQBUF");
break;
}
}
unsigned int i;
for (i = 0; i < n_buffers; ++i) {
if (buf.m.userptr == (unsigned long) buffers[i].start
&& buf.length == buffers[i].length) {
break;
}
}
//assert(i < n_buffers);
process_image((void *) buf.m.userptr, buf.bytesused);
if (xioctl(fd, VIDIOC_QBUF, &buf) == -1) {
errno_exit("VIDIOC_QBUF");
}
break;
} }
return 1; return 1;