V4L/DVB (10713): zoran: if reqbufs is called with count == 0, do a streamoff.
authorHans Verkuil <hverkuil@xs4all.nl>
Wed, 18 Feb 2009 20:15:46 +0000 (17:15 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Mon, 30 Mar 2009 15:42:56 +0000 (12:42 -0300)
count == 0 has a special meaning, implement this.

Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/video/zoran/zoran_driver.c

index 7129f9254e70b20ce9df73aadf4866e9b3434400..07f2bdfef4ee95d6127f69d8d84ffa3868d685ba 100644 (file)
@@ -2493,6 +2493,8 @@ static int zoran_overlay(struct file *file, void *__fh, unsigned int on)
        return res;
 }
 
+static int zoran_streamoff(struct file *file, void *__fh, enum v4l2_buf_type type);
+
 static int zoran_reqbufs(struct file *file, void *__fh, struct v4l2_requestbuffers *req)
 {
        struct zoran_fh *fh = __fh;
@@ -2500,17 +2502,19 @@ static int zoran_reqbufs(struct file *file, void *__fh, struct v4l2_requestbuffe
        int res = 0;
 
        if (req->memory != V4L2_MEMORY_MMAP) {
-               dprintk(1,
+               dprintk(2,
                                KERN_ERR
                                "%s: only MEMORY_MMAP capture is supported, not %d\n",
                                ZR_DEVNAME(zr), req->memory);
                return -EINVAL;
        }
 
-       mutex_lock(&zr->resource_lock);
+       if (req->count == 0)
+               return zoran_streamoff(file, fh, req->type);
 
+       mutex_lock(&zr->resource_lock);
        if (fh->v4l_buffers.allocated || fh->jpg_buffers.allocated) {
-               dprintk(1,
+               dprintk(2,
                                KERN_ERR
                                "%s: VIDIOC_REQBUFS - buffers already allocated\n",
                                ZR_DEVNAME(zr));