|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
From a8ed8c04c119e5a323a2c79fcd0d28b4d29fc28a Mon Sep 17 00:00:00 2001
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
From: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
Date: Thu, 23 Apr 2015 22:56:09 -0300
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
Subject: [PATCH] v4l2: use REQBUFS properly
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
There are two issues on this driver with regards to buffer
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
request:
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
1) it is not calling VIDIOC_REQBUFS for USERPTR;
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
2) It is calling VIDIOC_REQBUFS at probe, to check the max
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
number of supported buffers, but it doesn't deallocate
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
the buffers at the end of the probe function.
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
Fix those issues. Also, improve the error/warning messages
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
associated with possible problems.
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
This is based on the issues detected by the patch proposed
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
to fix this bug:
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
https://bugs.archlinux.org/task/44091
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
diff --git a/zbar/video/v4l2.c b/zbar/video/v4l2.c
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
index aabd16643ddc..f6662d3707f9 100644
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
--- a/zbar/video/v4l2.c
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
+++ b/zbar/video/v4l2.c
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
@@ -201,21 +201,6 @@ static int v4l2_cleanup (zbar_video_t *vdo)
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
static int v4l2_mmap_buffers (zbar_video_t *vdo)
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
{
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
- struct v4l2_requestbuffers rb;
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
- memset(&rb, 0, sizeof(rb));
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
- rb.count = vdo->num_images;
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
- rb.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
- rb.memory = V4L2_MEMORY_MMAP;
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
- if(v4l2_ioctl(vdo->fd, VIDIOC_REQBUFS, &rb) < 0)
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
- return(err_capture(vdo, SEV_ERROR, ZBAR_ERR_SYSTEM, __func__,
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
- "requesting video frame buffers (VIDIOC_REQBUFS)"));
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
- zprintf(1, "mapping %u buffers (of %d requested)\n",
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
- rb.count, vdo->num_images);
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
- if(!rb.count)
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
- return(err_capture(vdo, SEV_ERROR, ZBAR_ERR_INVALID, __func__,
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
- "driver returned 0 buffers"));
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
- if(vdo->num_images > rb.count)
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
- vdo->num_images = rb.count;
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
struct v4l2_buffer vbuf;
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
memset(&vbuf, 0, sizeof(vbuf));
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
@@ -313,8 +298,32 @@ static int v4l2_set_format (zbar_video_t *vdo,
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
static int v4l2_init (zbar_video_t *vdo,
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
uint32_t fmt)
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
{
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
+ struct v4l2_requestbuffers rb;
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
if(v4l2_set_format(vdo, fmt))
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
return(-1);
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
+
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
+ memset(&rb, 0, sizeof(rb));
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
+ rb.count = vdo->num_images;
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
+ rb.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
+ if(vdo->iomode == VIDEO_MMAP)
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
+ rb.memory = V4L2_MEMORY_MMAP;
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
+ else
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
+ rb.memory = V4L2_MEMORY_USERPTR;
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
+
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
+ if(v4l2_ioctl(vdo->fd, VIDIOC_REQBUFS, &rb) < 0)
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
+ return(err_capture(vdo, SEV_ERROR, ZBAR_ERR_SYSTEM, __func__,
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
+ "requesting video frame buffers (VIDIOC_REQBUFS)"));
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
+
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
+ if(!rb.count)
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
+ return(err_capture(vdo, SEV_ERROR, ZBAR_ERR_INVALID, __func__,
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
+ "driver returned 0 buffers"));
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
+
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
+ if(vdo->num_images > rb.count)
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
+ vdo->num_images = rb.count;
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
+
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
+ zprintf(1, "using %u buffers (of %d requested)\n",
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
+ rb.count, vdo->num_images);
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
+
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
if(vdo->iomode == VIDEO_MMAP)
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
return(v4l2_mmap_buffers(vdo));
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
return(0);
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
@@ -324,7 +333,7 @@ static int v4l2_probe_iomode (zbar_video_t *vdo)
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
{
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
struct v4l2_requestbuffers rb;
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
memset(&rb, 0, sizeof(rb));
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
- rb.count = vdo->num_images; /* FIXME workaround broken drivers */
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
+ rb.count = vdo->num_images;
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
rb.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
if(vdo->iomode == VIDEO_MMAP)
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
rb.memory = V4L2_MEMORY_MMAP;
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
@@ -340,14 +349,31 @@ static int v4l2_probe_iomode (zbar_video_t *vdo)
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
return(err_capture(vdo, SEV_ERROR, ZBAR_ERR_SYSTEM, __func__,
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
"querying streaming mode (VIDIOC_REQBUFS)"));
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
#ifdef HAVE_SYS_MMAN_H
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
+ err_capture(vdo, SEV_WARNING, ZBAR_ERR_SYSTEM, __func__,
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
+ "USERPTR failed. Falling back to mmap");
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
vdo->iomode = VIDEO_MMAP;
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
+#else
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
+ return err_capture(vdo, SEV_ERROR, ZBAR_ERR_SYSTEM, __func__,
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
+ "Userptr not supported, and zbar was compiled without mmap support"));
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
#endif
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
}
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
else {
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
if(!vdo->iomode)
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
- vdo->iomode = VIDEO_USERPTR;
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
+ rb.memory = V4L2_MEMORY_USERPTR;
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
+ /* Update the num_images with the max supported by the driver */
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
if(rb.count)
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
vdo->num_images = rb.count;
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
+ else
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
+ err_capture(vdo, SEV_WARNING, ZBAR_ERR_SYSTEM, __func__,
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
+ "Something is wrong: number of buffers returned by REQBUF is zero!");
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
+
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
+ /* requesting 0 buffers
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
+ * This cleans up the buffers allocated previously on probe
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
+ */
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
+ rb.count = 0;
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
+ if(v4l2_ioctl(vdo->fd, VIDIOC_REQBUFS, &rb) < 0)
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
+ err_capture(vdo, SEV_WARNING, ZBAR_ERR_SYSTEM, __func__,
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
+ "releasing video frame buffers (VIDIOC_REQBUFS)");
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
}
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
return(0);
|
|
![](https://seccdn.libravatar.org/avatar/2773d2483798bb4b6cc803ce4e9f241cc158e91836a52e54565e0eb98e450d96?s=16&d=retro) |
7f27219 |
}
|