Commit b714fb00 authored by Hans Verkuil's avatar Hans Verkuil Committed by Mauro Carvalho Chehab

[media] bttv: convert g/s_crop to g/s_selection

This is part of a final push to convert all drivers to g/s_selection.
Signed-off-by: default avatarHans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@s-opensource.com>
parent 10d5509c
...@@ -2804,30 +2804,44 @@ static int bttv_cropcap(struct file *file, void *priv, ...@@ -2804,30 +2804,44 @@ static int bttv_cropcap(struct file *file, void *priv,
cap->type != V4L2_BUF_TYPE_VIDEO_OVERLAY) cap->type != V4L2_BUF_TYPE_VIDEO_OVERLAY)
return -EINVAL; return -EINVAL;
*cap = bttv_tvnorms[btv->tvnorm].cropcap; /* defrect and bounds are set via g_selection */
cap->pixelaspect = bttv_tvnorms[btv->tvnorm].cropcap.pixelaspect;
return 0; return 0;
} }
static int bttv_g_crop(struct file *file, void *f, struct v4l2_crop *crop) static int bttv_g_selection(struct file *file, void *f, struct v4l2_selection *sel)
{ {
struct bttv_fh *fh = f; struct bttv_fh *fh = f;
struct bttv *btv = fh->btv; struct bttv *btv = fh->btv;
if (crop->type != V4L2_BUF_TYPE_VIDEO_CAPTURE && if (sel->type != V4L2_BUF_TYPE_VIDEO_CAPTURE &&
crop->type != V4L2_BUF_TYPE_VIDEO_OVERLAY) sel->type != V4L2_BUF_TYPE_VIDEO_OVERLAY)
return -EINVAL; return -EINVAL;
/* No fh->do_crop = 1; because btv->crop[1] may be switch (sel->target) {
inconsistent with fh->width or fh->height and apps case V4L2_SEL_TGT_CROP:
do not expect a change here. */ /*
* No fh->do_crop = 1; because btv->crop[1] may be
crop->c = btv->crop[!!fh->do_crop].rect; * inconsistent with fh->width or fh->height and apps
* do not expect a change here.
*/
sel->r = btv->crop[!!fh->do_crop].rect;
break;
case V4L2_SEL_TGT_CROP_DEFAULT:
sel->r = bttv_tvnorms[btv->tvnorm].cropcap.defrect;
break;
case V4L2_SEL_TGT_CROP_BOUNDS:
sel->r = bttv_tvnorms[btv->tvnorm].cropcap.bounds;
break;
default:
return -EINVAL;
}
return 0; return 0;
} }
static int bttv_s_crop(struct file *file, void *f, const struct v4l2_crop *crop) static int bttv_s_selection(struct file *file, void *f, struct v4l2_selection *sel)
{ {
struct bttv_fh *fh = f; struct bttv_fh *fh = f;
struct bttv *btv = fh->btv; struct bttv *btv = fh->btv;
...@@ -2839,8 +2853,11 @@ static int bttv_s_crop(struct file *file, void *f, const struct v4l2_crop *crop) ...@@ -2839,8 +2853,11 @@ static int bttv_s_crop(struct file *file, void *f, const struct v4l2_crop *crop)
__s32 b_right; __s32 b_right;
__s32 b_bottom; __s32 b_bottom;
if (crop->type != V4L2_BUF_TYPE_VIDEO_CAPTURE && if (sel->type != V4L2_BUF_TYPE_VIDEO_CAPTURE &&
crop->type != V4L2_BUF_TYPE_VIDEO_OVERLAY) sel->type != V4L2_BUF_TYPE_VIDEO_OVERLAY)
return -EINVAL;
if (sel->target != V4L2_SEL_TGT_CROP)
return -EINVAL; return -EINVAL;
/* Make sure tvnorm, vbi_end and the current cropping /* Make sure tvnorm, vbi_end and the current cropping
...@@ -2864,22 +2881,24 @@ static int bttv_s_crop(struct file *file, void *f, const struct v4l2_crop *crop) ...@@ -2864,22 +2881,24 @@ static int bttv_s_crop(struct file *file, void *f, const struct v4l2_crop *crop)
} }
/* Min. scaled size 48 x 32. */ /* Min. scaled size 48 x 32. */
c.rect.left = clamp_t(s32, crop->c.left, b_left, b_right - 48); c.rect.left = clamp_t(s32, sel->r.left, b_left, b_right - 48);
c.rect.left = min(c.rect.left, (__s32) MAX_HDELAY); c.rect.left = min(c.rect.left, (__s32) MAX_HDELAY);
c.rect.width = clamp_t(s32, crop->c.width, c.rect.width = clamp_t(s32, sel->r.width,
48, b_right - c.rect.left); 48, b_right - c.rect.left);
c.rect.top = clamp_t(s32, crop->c.top, b_top, b_bottom - 32); c.rect.top = clamp_t(s32, sel->r.top, b_top, b_bottom - 32);
/* Top and height must be a multiple of two. */ /* Top and height must be a multiple of two. */
c.rect.top = (c.rect.top + 1) & ~1; c.rect.top = (c.rect.top + 1) & ~1;
c.rect.height = clamp_t(s32, crop->c.height, c.rect.height = clamp_t(s32, sel->r.height,
32, b_bottom - c.rect.top); 32, b_bottom - c.rect.top);
c.rect.height = (c.rect.height + 1) & ~1; c.rect.height = (c.rect.height + 1) & ~1;
bttv_crop_calc_limits(&c); bttv_crop_calc_limits(&c);
sel->r = c.rect;
btv->crop[1] = c; btv->crop[1] = c;
fh->do_crop = 1; fh->do_crop = 1;
...@@ -3047,10 +3066,10 @@ static int bttv_open(struct file *file) ...@@ -3047,10 +3066,10 @@ static int bttv_open(struct file *file)
which only change on request. These are stored in btv->crop[1]. which only change on request. These are stored in btv->crop[1].
However for compatibility with V4L apps and cropping unaware However for compatibility with V4L apps and cropping unaware
V4L2 apps we now reset the cropping parameters as seen through V4L2 apps we now reset the cropping parameters as seen through
this fh, which is to say VIDIOC_G_CROP and scaling limit checks this fh, which is to say VIDIOC_G_SELECTION and scaling limit checks
will use btv->crop[0], the default cropping parameters for the will use btv->crop[0], the default cropping parameters for the
current video standard, and VIDIOC_S_FMT will not implicitely current video standard, and VIDIOC_S_FMT will not implicitely
change the cropping parameters until VIDIOC_S_CROP has been change the cropping parameters until VIDIOC_S_SELECTION has been
called. */ called. */
fh->do_crop = !reset_crop; /* module parameter */ fh->do_crop = !reset_crop; /* module parameter */
...@@ -3159,8 +3178,8 @@ static const struct v4l2_ioctl_ops bttv_ioctl_ops = { ...@@ -3159,8 +3178,8 @@ static const struct v4l2_ioctl_ops bttv_ioctl_ops = {
.vidioc_streamoff = bttv_streamoff, .vidioc_streamoff = bttv_streamoff,
.vidioc_g_tuner = bttv_g_tuner, .vidioc_g_tuner = bttv_g_tuner,
.vidioc_s_tuner = bttv_s_tuner, .vidioc_s_tuner = bttv_s_tuner,
.vidioc_g_crop = bttv_g_crop, .vidioc_g_selection = bttv_g_selection,
.vidioc_s_crop = bttv_s_crop, .vidioc_s_selection = bttv_s_selection,
.vidioc_g_fbuf = bttv_g_fbuf, .vidioc_g_fbuf = bttv_g_fbuf,
.vidioc_s_fbuf = bttv_s_fbuf, .vidioc_s_fbuf = bttv_s_fbuf,
.vidioc_overlay = bttv_overlay, .vidioc_overlay = bttv_overlay,
......
...@@ -232,7 +232,7 @@ struct bttv_fh { ...@@ -232,7 +232,7 @@ struct bttv_fh {
const struct bttv_format *ovfmt; const struct bttv_format *ovfmt;
struct bttv_overlay ov; struct bttv_overlay ov;
/* Application called VIDIOC_S_CROP. */ /* Application called VIDIOC_S_SELECTION. */
int do_crop; int do_crop;
/* vbi capture */ /* vbi capture */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment