Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 261449
b: refs/heads/master
c: 4fba471
h: refs/heads/master
i:
  261447: 60163e7
v: v3
  • Loading branch information
Hans de Goede authored and Mauro Carvalho Chehab committed Jul 27, 2011
1 parent ccf9e69 commit 09ad5e9
Show file tree
Hide file tree
Showing 4 changed files with 43 additions and 19 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 6eba93573d2dda3f627006101c0652faeeaffde6
refs/heads/master: 4fba471e405f8f983085fd9f2fd9637bfc275f8f
23 changes: 14 additions & 9 deletions trunk/drivers/media/video/pwc/pwc-if.c
Original file line number Diff line number Diff line change
Expand Up @@ -678,12 +678,6 @@ static int pwc_video_open(struct file *file)
if (!pdev->udev)
return -ENODEV;

if (pdev->vopen) {
PWC_DEBUG_OPEN("I'm busy, someone is using the device.\n");
return -EBUSY;
}

pdev->vopen++;
file->private_data = vdev;
PWC_DEBUG_OPEN("<< video_open() returns 0.\n");
return 0;
Expand Down Expand Up @@ -718,10 +712,12 @@ static int pwc_video_close(struct file *file)
PWC_DEBUG_OPEN(">> video_close called(vdev = 0x%p).\n", vdev);

pdev = video_get_drvdata(vdev);
vb2_queue_release(&pdev->vb_queue);
pdev->vopen--;
if (pdev->capt_file == file) {
vb2_queue_release(&pdev->vb_queue);
pdev->capt_file = NULL;
}

PWC_DEBUG_OPEN("<< video_close() vopen=%d\n", pdev->vopen);
PWC_DEBUG_OPEN("<< video_close()\n");
return 0;
}

Expand All @@ -734,6 +730,12 @@ static ssize_t pwc_video_read(struct file *file, char __user *buf,
if (!pdev->udev)
return -ENODEV;

if (pdev->capt_file != NULL &&
pdev->capt_file != file)
return -EBUSY;

pdev->capt_file = file;

return vb2_read(&pdev->vb_queue, buf, count, ppos,
file->f_flags & O_NONBLOCK);
}
Expand All @@ -754,6 +756,9 @@ static int pwc_video_mmap(struct file *file, struct vm_area_struct *vma)
struct video_device *vdev = file->private_data;
struct pwc_device *pdev = video_get_drvdata(vdev);

if (pdev->capt_file != file)
return -EBUSY;

return vb2_mmap(&pdev->vb_queue, vma);
}

Expand Down
35 changes: 27 additions & 8 deletions trunk/drivers/media/video/pwc/pwc-v4l.c
Original file line number Diff line number Diff line change
Expand Up @@ -284,13 +284,21 @@ static int pwc_vidioc_try_fmt(struct pwc_device *pdev, struct v4l2_format *f)
}

/* ioctl(VIDIOC_SET_FMT) */
static int pwc_vidioc_set_fmt(struct pwc_device *pdev, struct v4l2_format *f)

static int pwc_s_fmt_vid_cap(struct file *file, void *fh, struct v4l2_format *f)
{
struct pwc_device *pdev = video_drvdata(file);
int ret, fps, snapshot, compression, pixelformat;

if (!pdev->udev)
return -ENODEV;

if (pdev->capt_file != NULL &&
pdev->capt_file != file)
return -EBUSY;

pdev->capt_file = file;

ret = pwc_vidioc_try_fmt(pdev, f);
if (ret<0)
return ret;
Expand Down Expand Up @@ -678,18 +686,17 @@ static int pwc_try_fmt_vid_cap(struct file *file, void *fh, struct v4l2_format *
return pwc_vidioc_try_fmt(pdev, f);
}

static int pwc_s_fmt_vid_cap(struct file *file, void *fh, struct v4l2_format *f)
{
struct pwc_device *pdev = video_drvdata(file);

return pwc_vidioc_set_fmt(pdev, f);
}

static int pwc_reqbufs(struct file *file, void *fh,
struct v4l2_requestbuffers *rb)
{
struct pwc_device *pdev = video_drvdata(file);

if (pdev->capt_file != NULL &&
pdev->capt_file != file)
return -EBUSY;

pdev->capt_file = file;

return vb2_reqbufs(&pdev->vb_queue, rb);
}

Expand All @@ -707,6 +714,9 @@ static int pwc_qbuf(struct file *file, void *fh, struct v4l2_buffer *buf)
if (!pdev->udev)
return -ENODEV;

if (pdev->capt_file != file)
return -EBUSY;

return vb2_qbuf(&pdev->vb_queue, buf);
}

Expand All @@ -717,6 +727,9 @@ static int pwc_dqbuf(struct file *file, void *fh, struct v4l2_buffer *buf)
if (!pdev->udev)
return -ENODEV;

if (pdev->capt_file != file)
return -EBUSY;

return vb2_dqbuf(&pdev->vb_queue, buf, file->f_flags & O_NONBLOCK);
}

Expand All @@ -727,6 +740,9 @@ static int pwc_streamon(struct file *file, void *fh, enum v4l2_buf_type i)
if (!pdev->udev)
return -ENODEV;

if (pdev->capt_file != file)
return -EBUSY;

return vb2_streamon(&pdev->vb_queue, i);
}

Expand All @@ -737,6 +753,9 @@ static int pwc_streamoff(struct file *file, void *fh, enum v4l2_buf_type i)
if (!pdev->udev)
return -ENODEV;

if (pdev->capt_file != file)
return -EBUSY;

return vb2_streamoff(&pdev->vb_queue, i);
}

Expand Down
2 changes: 1 addition & 1 deletion trunk/drivers/media/video/pwc/pwc.h
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,7 @@ struct pwc_device
char serial[30]; /* serial number (string) */

/*** Video data ***/
int vopen; /* flag */
struct file *capt_file; /* file doing video capture */
int vendpoint; /* video isoc endpoint */
int vcinterface; /* video control interface */
int valternate; /* alternate interface needed */
Expand Down

0 comments on commit 09ad5e9

Please sign in to comment.