Patch "[media] bttv: Width must be a multiple of 16 when capturing planar formats" has been added to the 3.14-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
[media] bttv: Width must be a multiple of 16 when capturing planar formats
to the 3.14-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
bttv-width-must-be-a-multiple-of-16-when-capturing-planar-formats.patch
and it can be found in the queue-3.14 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
5c915c68763889f0183a1cc61c84bb228b60124aMon Sep 17 00:00:00 2001
From: Hans de Goede <[email protected]>
Date: Sun, 7 Feb 2016 09:24:29 -0200
Subject: [media] bttv: Width must be a multiple of 16 when capturing planar formats
From: Hans de Goede <[email protected]>
commit 5c915c68763889f0183a1cc61c84bb228b60124a upstream.
On my bttv card "Hauppauge WinTV [card=10]" capturing in YV12 fmt at max size results in a solid green rectangle being captured (all colors 0 in YUV).
This turns out to be caused by max-width (924) not being a multiple of 16.
We've likely never hit this problem before since normally xawtv / tvtime, etc. will prefer packed pixel formats. But when using a video card which is using xf86-video-modesetting + glamor, only planar XVideo fmts are available, and xawtv will chose a matching capture format to avoid needing to do conversion, triggering the solid green window problem.
--- drivers/media/pci/bt8xx/bttv-driver.c | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-)
drivers/media/pci/bt8xx/bttv-driver.c +20 -6
@@ -2333,6 +2333,19 @@ static int bttv_g_fmt_vid_overlay(structreturn 0 ; } +static void bttv_get_width_mask_vid_cap (const struct bttv_format *fmt, +unsigned int *width_mask, +unsigned int *width_bias) +{ +if (fmt->flags &FORMAT_FLAGS_PLANAR ) { + *width_mask = ~15 ;/* width must be a multiple of 16 pixels */ + *width_bias =8 ;/* nearest */ + }else { + *width_mask = ~3 ;/* width must be a multiple of 4 pixels */ + *width_bias =2 ;/* nearest */ + } +} +static int bttv_try_fmt_vid_cap (struct file *file,void *priv,struct v4l2_format *f) {
@@ -2342,6 +2355,7 @@ static int bttv_try_fmt_vid_cap(struct fenum v4l2_field field;__s32 width, height;__s32 height2; +unsigned int width_mask, width_bias;int rc; fmt =format_by_fourcc (f->fmt.pix.pixelformat);
@@ -2374,9 +2388,9 @@ static int bttv_try_fmt_vid_cap(struct f width = f->fmt.pix.width; height = f->fmt.pix.height; +bttv_get_width_mask_vid_cap (fmt, &width_mask, &width_bias); rc =limit_scaled_size_lock (fh, &width, &height, field, -/* width_mask: 4 pixels */ ~3 , -/* width_bias: nearest */ 2 , + width_mask, width_bias,/* adjust_size */ 1 ,/* adjust_crop */ 0 );if (0 != rc)
@@ -2409,6 +2423,7 @@ static int bttv_s_fmt_vid_cap(struct filstruct bttv_fh *fh = priv;struct bttv *btv = fh->btv;__s32 width, height; +unsigned int width_mask, width_bias;enum v4l2_field field; retval =bttv_switch_type (fh, f->type);
@@ -2423,9 +2438,10 @@ static int bttv_s_fmt_vid_cap(struct fil height = f->fmt.pix.height; field = f->fmt.pix.field; + fmt =format_by_fourcc (f->fmt.pix.pixelformat); +bttv_get_width_mask_vid_cap (fmt, &width_mask, &width_bias); retval =limit_scaled_size_lock (fh, &width, &height, f->fmt.pix.field, -/* width_mask: 4 pixels */ ~3 , -/* width_bias: nearest */ 2 , + width_mask, width_bias,/* adjust_size */ 1 ,/* adjust_crop */ 1 );if (0 != retval)
@@ -2433,8 +2449,6 @@ static int bttv_s_fmt_vid_cap(struct fil f->fmt.pix.field = field; - fmt =format_by_fourcc (f->fmt.pix.pixelformat); -/* update our state informations */ fh->fmt = fmt; fh->cap.field = f->fmt.pix.field;
Patches currently in stable-queue which might be from [email protected] are
queue-3.14/pwc-add-usb-id-for-philips-spc880nc-webcam.patch queue-3.14/saa7134-fix-bytesperline-not-being-set-correctly-for-planar-formats.patch queue-3.14/bttv-width-must-be-a-multiple-of-16-when-capturing-planar-formats.patch queue-3.14/usb-uas-reduce-can_queue-to-max_cmnds.patch