浏览代码

[PATCH] V4L: Fixes Bttv raw format to fix VIDIOCSPICT ioctl

Fixes Bttv raw format to fix VIDIOCSPICT ioctl.

Signed-off-by: Michael H. Schimek <mschimek@gmx.at>
Signed-off-by: Nickolay V. Shmyrev <nshmyrev@yandex.ru>
Signed-off-by: Mauro Carvalho Chehab <mchehab@brturbo.com.br>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Michael H. Schimek 19 年之前
父节点
当前提交
13c72805b3
共有 2 个文件被更改,包括 10 次插入0 次删除
  1. 9 0
      drivers/media/video/bttv-driver.c
  2. 1 0
      drivers/media/video/video-buf.c

+ 9 - 0
drivers/media/video/bttv-driver.c

@@ -2290,6 +2290,15 @@ static int bttv_do_ioctl(struct inode *inode, struct file *file,
 			retval = -EINVAL;
 			goto fh_unlock_and_return;
 		}
+		if (fmt->flags & FORMAT_FLAGS_RAW) {
+			/* VIDIOCMCAPTURE uses gbufsize, not RAW_BPL *
+			   RAW_LINES * 2. F1 is stored at offset 0, F2
+			   at buffer size / 2. */
+			fh->width = RAW_BPL;
+			fh->height = gbufsize / RAW_BPL;
+			btv->init.width  = RAW_BPL;
+			btv->init.height = gbufsize / RAW_BPL;
+		}
 		fh->ovfmt   = fmt;
 		fh->fmt     = fmt;
 		btv->init.ovfmt   = fmt;

+ 1 - 0
drivers/media/video/video-buf.c

@@ -816,6 +816,7 @@ ssize_t videobuf_read_one(struct videobuf_queue *q,
 		if (NULL == q->read_buf)
 			goto done;
 		q->read_buf->memory = V4L2_MEMORY_USERPTR;
+		q->read_buf->bsize = count; /* preferred size */
 		field = videobuf_next_field(q);
 		retval = q->ops->buf_prepare(q,q->read_buf,field);
 		if (0 != retval) {