mirror of
https://github.com/raspberrypi/linux.git
synced 2025-12-06 10:00:17 +00:00
saa7134: Fix bytesperline not being set correctly for planar formats
commit 3e71da19f9 upstream.
bytesperline should be the bytesperline for the first plane for planar
formats, not that of all planes combined.
This fixes a crash in xawtv caused by the wrong bpl.
BugLink: https://bugzilla.redhat.com/show_bug.cgi?id=1305389
Reported-and-tested-by: Stas Sergeev <stsp@list.ru>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
fc0768092c
commit
4fe401d630
@@ -1219,10 +1219,13 @@ static int saa7134_g_fmt_vid_cap(struct file *file, void *priv,
|
|||||||
f->fmt.pix.height = dev->height;
|
f->fmt.pix.height = dev->height;
|
||||||
f->fmt.pix.field = dev->field;
|
f->fmt.pix.field = dev->field;
|
||||||
f->fmt.pix.pixelformat = dev->fmt->fourcc;
|
f->fmt.pix.pixelformat = dev->fmt->fourcc;
|
||||||
|
if (dev->fmt->planar)
|
||||||
|
f->fmt.pix.bytesperline = f->fmt.pix.width;
|
||||||
|
else
|
||||||
f->fmt.pix.bytesperline =
|
f->fmt.pix.bytesperline =
|
||||||
(f->fmt.pix.width * dev->fmt->depth) >> 3;
|
(f->fmt.pix.width * dev->fmt->depth) / 8;
|
||||||
f->fmt.pix.sizeimage =
|
f->fmt.pix.sizeimage =
|
||||||
f->fmt.pix.height * f->fmt.pix.bytesperline;
|
(f->fmt.pix.height * f->fmt.pix.width * dev->fmt->depth) / 8;
|
||||||
f->fmt.pix.colorspace = V4L2_COLORSPACE_SMPTE170M;
|
f->fmt.pix.colorspace = V4L2_COLORSPACE_SMPTE170M;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -1298,10 +1301,13 @@ static int saa7134_try_fmt_vid_cap(struct file *file, void *priv,
|
|||||||
if (f->fmt.pix.height > maxh)
|
if (f->fmt.pix.height > maxh)
|
||||||
f->fmt.pix.height = maxh;
|
f->fmt.pix.height = maxh;
|
||||||
f->fmt.pix.width &= ~0x03;
|
f->fmt.pix.width &= ~0x03;
|
||||||
|
if (fmt->planar)
|
||||||
|
f->fmt.pix.bytesperline = f->fmt.pix.width;
|
||||||
|
else
|
||||||
f->fmt.pix.bytesperline =
|
f->fmt.pix.bytesperline =
|
||||||
(f->fmt.pix.width * fmt->depth) >> 3;
|
(f->fmt.pix.width * fmt->depth) / 8;
|
||||||
f->fmt.pix.sizeimage =
|
f->fmt.pix.sizeimage =
|
||||||
f->fmt.pix.height * f->fmt.pix.bytesperline;
|
(f->fmt.pix.height * f->fmt.pix.width * fmt->depth) / 8;
|
||||||
f->fmt.pix.colorspace = V4L2_COLORSPACE_SMPTE170M;
|
f->fmt.pix.colorspace = V4L2_COLORSPACE_SMPTE170M;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
Reference in New Issue
Block a user