Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e25cb200 authored by Hans Verkuil's avatar Hans Verkuil Committed by Mauro Carvalho Chehab
Browse files

[media] cx231xx: fix NTSC cropcap, add missing cropcap for 417



The pixelaspect ratio was set incorrectly for 60Hz formats.
And since cropcap wasn't implemented at all for the -417 (compressed
video) the pixelaspect was unknown for compressed video.

Signed-off-by: default avatarHans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@osg.samsung.com>
parent e80bf856
Loading
Loading
Loading
Loading
+22 −0
Original line number Diff line number Diff line
@@ -1492,6 +1492,27 @@ static struct videobuf_queue_ops cx231xx_qops = {

/* ------------------------------------------------------------------ */

static int vidioc_cropcap(struct file *file, void *priv,
			  struct v4l2_cropcap *cc)
{
	struct cx231xx_fh *fh = priv;
	struct cx231xx *dev = fh->dev;
	bool is_50hz = dev->encodernorm.id & V4L2_STD_625_50;

	if (cc->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
		return -EINVAL;

	cc->bounds.left = 0;
	cc->bounds.top = 0;
	cc->bounds.width = dev->ts1.width;
	cc->bounds.height = dev->ts1.height;
	cc->defrect = cc->bounds;
	cc->pixelaspect.numerator = is_50hz ? 54 : 11;
	cc->pixelaspect.denominator = is_50hz ? 59 : 10;

	return 0;
}

static int vidioc_g_std(struct file *file, void *fh0, v4l2_std_id *norm)
{
	struct cx231xx_fh  *fh  = file->private_data;
@@ -1834,6 +1855,7 @@ static const struct v4l2_ioctl_ops mpeg_ioctl_ops = {
	.vidioc_g_input		 = cx231xx_g_input,
	.vidioc_s_input		 = cx231xx_s_input,
	.vidioc_s_ctrl		 = vidioc_s_ctrl,
	.vidioc_cropcap		 = vidioc_cropcap,
	.vidioc_querycap	 = cx231xx_querycap,
	.vidioc_enum_fmt_vid_cap = vidioc_enum_fmt_vid_cap,
	.vidioc_g_fmt_vid_cap	 = vidioc_g_fmt_vid_cap,
+3 −2
Original line number Diff line number Diff line
@@ -1444,6 +1444,7 @@ static int vidioc_cropcap(struct file *file, void *priv,
{
	struct cx231xx_fh *fh = priv;
	struct cx231xx *dev = fh->dev;
	bool is_50hz = dev->norm & V4L2_STD_625_50;

	if (cc->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
		return -EINVAL;
@@ -1453,8 +1454,8 @@ static int vidioc_cropcap(struct file *file, void *priv,
	cc->bounds.width = dev->width;
	cc->bounds.height = dev->height;
	cc->defrect = cc->bounds;
	cc->pixelaspect.numerator = 54;	/* 4:3 FIXME: remove magic numbers */
	cc->pixelaspect.denominator = 59;
	cc->pixelaspect.numerator = is_50hz ? 54 : 11;
	cc->pixelaspect.denominator = is_50hz ? 59 : 10;

	return 0;
}