mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2025-02-21 20:29:09 +07:00
[media] Fix mmap() example in the V4L2 API DocBook
Correct ioctl return value handling and fix coding style issues. [mchehab@redhat.com: return -1 is OK, according with ioctl manpages. Reverting ioctl changes] Signed-off-by: Pawel Osciak <pawel@osciak.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
parent
08b99e26a3
commit
c4c0a78d45
@ -141,63 +141,63 @@ struct {
|
|||||||
} *buffers;
|
} *buffers;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
memset (&reqbuf, 0, sizeof (reqbuf));
|
memset(&reqbuf, 0, sizeof(reqbuf));
|
||||||
reqbuf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
reqbuf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
||||||
reqbuf.memory = V4L2_MEMORY_MMAP;
|
reqbuf.memory = V4L2_MEMORY_MMAP;
|
||||||
reqbuf.count = 20;
|
reqbuf.count = 20;
|
||||||
|
|
||||||
if (-1 == ioctl (fd, &VIDIOC-REQBUFS;, &reqbuf)) {
|
if (-1 == ioctl (fd, &VIDIOC-REQBUFS;, &reqbuf)) {
|
||||||
if (errno == EINVAL)
|
if (errno == EINVAL)
|
||||||
printf ("Video capturing or mmap-streaming is not supported\n");
|
printf("Video capturing or mmap-streaming is not supported\n");
|
||||||
else
|
else
|
||||||
perror ("VIDIOC_REQBUFS");
|
perror("VIDIOC_REQBUFS");
|
||||||
|
|
||||||
exit (EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* We want at least five buffers. */
|
/* We want at least five buffers. */
|
||||||
|
|
||||||
if (reqbuf.count < 5) {
|
if (reqbuf.count < 5) {
|
||||||
/* You may need to free the buffers here. */
|
/* You may need to free the buffers here. */
|
||||||
printf ("Not enough buffer memory\n");
|
printf("Not enough buffer memory\n");
|
||||||
exit (EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
buffers = calloc (reqbuf.count, sizeof (*buffers));
|
buffers = calloc(reqbuf.count, sizeof(*buffers));
|
||||||
assert (buffers != NULL);
|
assert(buffers != NULL);
|
||||||
|
|
||||||
for (i = 0; i < reqbuf.count; i++) {
|
for (i = 0; i < reqbuf.count; i++) {
|
||||||
&v4l2-buffer; buffer;
|
&v4l2-buffer; buffer;
|
||||||
|
|
||||||
memset (&buffer, 0, sizeof (buffer));
|
memset(&buffer, 0, sizeof(buffer));
|
||||||
buffer.type = reqbuf.type;
|
buffer.type = reqbuf.type;
|
||||||
buffer.memory = V4L2_MEMORY_MMAP;
|
buffer.memory = V4L2_MEMORY_MMAP;
|
||||||
buffer.index = i;
|
buffer.index = i;
|
||||||
|
|
||||||
if (-1 == ioctl (fd, &VIDIOC-QUERYBUF;, &buffer)) {
|
if (-1 == ioctl (fd, &VIDIOC-QUERYBUF;, &buffer)) {
|
||||||
perror ("VIDIOC_QUERYBUF");
|
perror("VIDIOC_QUERYBUF");
|
||||||
exit (EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
buffers[i].length = buffer.length; /* remember for munmap() */
|
buffers[i].length = buffer.length; /* remember for munmap() */
|
||||||
|
|
||||||
buffers[i].start = mmap (NULL, buffer.length,
|
buffers[i].start = mmap(NULL, buffer.length,
|
||||||
PROT_READ | PROT_WRITE, /* recommended */
|
PROT_READ | PROT_WRITE, /* recommended */
|
||||||
MAP_SHARED, /* recommended */
|
MAP_SHARED, /* recommended */
|
||||||
fd, buffer.m.offset);
|
fd, buffer.m.offset);
|
||||||
|
|
||||||
if (MAP_FAILED == buffers[i].start) {
|
if (MAP_FAILED == buffers[i].start) {
|
||||||
/* If you do not exit here you should unmap() and free()
|
/* If you do not exit here you should unmap() and free()
|
||||||
the buffers mapped so far. */
|
the buffers mapped so far. */
|
||||||
perror ("mmap");
|
perror("mmap");
|
||||||
exit (EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Cleanup. */
|
/* Cleanup. */
|
||||||
|
|
||||||
for (i = 0; i < reqbuf.count; i++)
|
for (i = 0; i < reqbuf.count; i++)
|
||||||
munmap (buffers[i].start, buffers[i].length);
|
munmap(buffers[i].start, buffers[i].length);
|
||||||
</programlisting>
|
</programlisting>
|
||||||
</example>
|
</example>
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user