BTTV - experimental no_overlay patch

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Bodo/Andrew,

	This small patch will allow no_overlay flag to disable BTTV driver to
report OVERLAY capabilities. It should fix your troubles by enabling
no_overlay=1 when inserting bttv module.

	This patch is against our CVS tree, but should apply with some hunk on
2.6.13-rc4 or 2.6.13-rc5.

	I'll generate a new one at morning, against 2.6.13-rc5 hopefully to
have it applied at 2.6.13, since it fixes an OOPS.

-----

This patch does implement no_overlay=1 insmod option support, so,
computers with PCI2PCI transfer problems should not feel more OOPS when
using bttv cards, by disabling overlay.


Signed-off-by: Michael Krufky <[email protected]>
Signed-off-by: Mauro Carvalho Chehab <[email protected]>

Index: bttv-driver.c
===================================================================
RCS file: /cvs/video4linux/video4linux/bttv-driver.c,v
retrieving revision 1.47
retrieving revision 1.48
diff -u -p -r1.47 -r1.48
--- bttv-driver.c	30 Jul 2005 19:47:02 -0000	1.47
+++ bttv-driver.c	3 Aug 2005 03:23:41 -0000	1.48
@@ -1,5 +1,5 @@
 /*
-    $Id: bttv-driver.c,v 1.47 2005/07/30 19:47:02 mkrufky Exp $
+    $Id: bttv-driver.c,v 1.48 2005/08/03 03:23:41 mchehab Exp $
 
     bttv - Bt848 frame grabber driver
 
@@ -80,6 +80,7 @@ static unsigned int irq_iswitch = 0;
 static unsigned int uv_ratio    = 50;
 static unsigned int full_luma_range = 0;
 static unsigned int coring      = 0;
+extern unsigned int no_overlay;
 
 /* API features (turn on/off stuff for testing) */
 static unsigned int v4l2        = 1;
@@ -2170,6 +2171,9 @@ static int bttv_s_fmt(struct bttv_fh *fh
 		return 0;
 	}
 	case V4L2_BUF_TYPE_VIDEO_OVERLAY:
+		printk ("V4L2_BUF_TYPE_VIDEO_OVERLAY called. no_overlay=%d\n",no_overlay);
+		if (no_overlay)
+			return -EINVAL;
 		return setup_window(fh, btv, &f->fmt.win, 1);
 	case V4L2_BUF_TYPE_VBI_CAPTURE:
 		retval = bttv_switch_type(fh,f->type);
@@ -2243,9 +2247,11 @@ static int bttv_do_ioctl(struct inode *i
 			/* others */
 			cap->type = VID_TYPE_CAPTURE|
 				VID_TYPE_TUNER|
-				VID_TYPE_OVERLAY|
 				VID_TYPE_CLIPPING|
 				VID_TYPE_SCALES;
+			if (!no_overlay)
+				cap->type |= VID_TYPE_OVERLAY;
+
 			cap->maxwidth  = bttv_tvnorms[btv->tvnorm].swidth;
 			cap->maxheight = bttv_tvnorms[btv->tvnorm].sheight;
 			cap->minwidth  = 48;
@@ -2321,6 +2327,10 @@ static int bttv_do_ioctl(struct inode *i
 		struct video_window *win = arg;
 		struct v4l2_window w2;
 
+		printk ("VIDIOCSWIN called. no_overlay=%d\n",no_overlay);
+		if (no_overlay)
+			return -EINVAL;
+
 		w2.field = V4L2_FIELD_ANY;
 		w2.w.left    = win->x;
 		w2.w.top     = win->y;
@@ -2596,10 +2606,12 @@ static int bttv_do_ioctl(struct inode *i
 		cap->version = BTTV_VERSION_CODE;
 		cap->capabilities =
 			V4L2_CAP_VIDEO_CAPTURE |
-			V4L2_CAP_VIDEO_OVERLAY |
 			V4L2_CAP_VBI_CAPTURE |
 			V4L2_CAP_READWRITE |
 			V4L2_CAP_STREAMING;
+		if (!no_overlay)
+			cap->capabilities |= V4L2_CAP_VIDEO_OVERLAY;
+
 		if (bttv_tvcards[btv->c.type].tuner != UNSET &&
 		    bttv_tvcards[btv->c.type].tuner != TUNER_ABSENT)
 			cap->capabilities |= V4L2_CAP_TUNER;
@@ -3095,7 +3107,7 @@ static struct file_operations bttv_fops 
 static struct video_device bttv_video_template =
 {
 	.name     = "UNSET",
-	.type     = VID_TYPE_CAPTURE|VID_TYPE_TUNER|VID_TYPE_OVERLAY|
+	.type     = VID_TYPE_CAPTURE|VID_TYPE_TUNER|
 	            VID_TYPE_CLIPPING|VID_TYPE_SCALES,
 	.hardware = VID_HARDWARE_BT848,
 	.fops     = &bttv_fops,
@@ -3779,6 +3791,9 @@ static void bttv_unregister_video(struct
 /* register video4linux devices */
 static int __devinit bttv_register_video(struct bttv *btv)
 {
+	if (!no_overlay)
+		bttv_video_template.type |= VID_TYPE_OVERLAY;
+
 	/* video */
 	btv->video_dev = vdev_init(btv, &bttv_video_template, "video");
         if (NULL == btv->video_dev)

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]
  Powered by Linux