]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
media: bttv: move do_crop flag out of bttv_fh
authorDeborah Brouwer <deborah.brouwer@collabora.com>
Sat, 15 Jul 2023 02:16:02 +0000 (19:16 -0700)
committerMauro Carvalho Chehab <mchehab@kernel.org>
Mon, 14 Aug 2023 18:27:59 +0000 (20:27 +0200)
The do_crop flag indicates whether a cropping rectangle has been set.
Instead of storing this flag separately in each file handle, move do_crop
to struct bttv in preparation for vb2 conversion which stops using
separate bttv file handles.

Signed-off-by: Deborah Brouwer <deborah.brouwer@collabora.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
drivers/media/pci/bt8xx/bttv-driver.c
drivers/media/pci/bt8xx/bttvp.h

index f9a6f671277fc8bf3bd030a84838fc7e7501e3d9..af295ce3e9f0a401e618601bb7fcd37eafd8b49f 100644 (file)
@@ -663,7 +663,7 @@ int check_alloc_btres_lock(struct bttv *btv, struct bttv_fh *fh, int bit)
        if ((bit & VIDEO_RESOURCES)
            && 0 == (btv->resources & VIDEO_RESOURCES)) {
                /* Do crop - use current, don't - use default parameters. */
-               __s32 top = btv->crop[!!fh->do_crop].rect.top;
+               __s32 top = btv->crop[!!btv->do_crop].rect.top;
 
                if (btv->vbi_end > top)
                        goto fail;
@@ -1493,7 +1493,6 @@ static int bttv_prepare_buffer(struct videobuf_queue *q,struct bttv *btv,
                               unsigned int width, unsigned int height,
                               enum v4l2_field field)
 {
-       struct bttv_fh *fh = q->priv_data;
        int redo_dma_risc = 0;
        struct bttv_crop c;
        int norm;
@@ -1523,7 +1522,7 @@ static int bttv_prepare_buffer(struct videobuf_queue *q,struct bttv *btv,
                c.rect = bttv_tvnorms[norm].cropcap.defrect;
        } else {
                norm = btv->tvnorm;
-               c = btv->crop[!!fh->do_crop];
+               c = btv->crop[!!btv->do_crop];
 
                if (width < c.min_scaled_width ||
                    width > c.max_scaled_width ||
@@ -1919,9 +1918,9 @@ limit_scaled_size_lock       (struct bttv_fh *               fh,
        b = &bttv_tvnorms[btv->tvnorm].cropcap.bounds;
 
        /* Do crop - use current, don't - use default parameters. */
-       c = &btv->crop[!!fh->do_crop];
+       c = &btv->crop[!!btv->do_crop];
 
-       if (fh->do_crop
+       if (btv->do_crop
            && adjust_size
            && adjust_crop
            && !locked_btres(btv, VIDEO_RESOURCES)) {
@@ -2121,7 +2120,7 @@ static int bttv_try_fmt_vid_cap(struct file *file, void *priv,
                }
                fallthrough;
        default: /* FIELD_ANY case */
-               height2 = btv->crop[!!fh->do_crop].rect.height >> 1;
+               height2 = btv->crop[!!btv->do_crop].rect.height >> 1;
                field = (f->fmt.pix.height > height2)
                        ? V4L2_FIELD_INTERLACED
                        : V4L2_FIELD_BOTTOM;
@@ -2360,7 +2359,6 @@ static int bttv_g_pixelaspect(struct file *file, void *priv,
 
 static int bttv_g_selection(struct file *file, void *f, struct v4l2_selection *sel)
 {
-       struct bttv_fh *fh = f;
        struct bttv *btv = video_drvdata(file);
 
        if (sel->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
@@ -2368,12 +2366,7 @@ static int bttv_g_selection(struct file *file, void *f, struct v4l2_selection *s
 
        switch (sel->target) {
        case V4L2_SEL_TGT_CROP:
-               /*
-                * No fh->do_crop = 1; because btv->crop[1] may be
-                * inconsistent with fh->width or fh->height and apps
-                * do not expect a change here.
-                */
-               sel->r = btv->crop[!!fh->do_crop].rect;
+               sel->r = btv->crop[!!btv->do_crop].rect;
                break;
        case V4L2_SEL_TGT_CROP_DEFAULT:
                sel->r = bttv_tvnorms[btv->tvnorm].cropcap.defrect;
@@ -2447,7 +2440,7 @@ static int bttv_s_selection(struct file *file, void *f, struct v4l2_selection *s
 
        btv->crop[1] = c;
 
-       fh->do_crop = 1;
+       btv->do_crop = 1;
 
        if (btv->width < c.min_scaled_width)
                btv->width = c.min_scaled_width;
@@ -2610,7 +2603,7 @@ static int bttv_open(struct file *file)
           current video standard, and VIDIOC_S_FMT will not implicitly
           change the cropping parameters until VIDIOC_S_SELECTION has been
           called. */
-       fh->do_crop = !reset_crop; /* module parameter */
+       btv->do_crop = !reset_crop; /* module parameter */
 
        /* Likewise there should be one global set of VBI capture
           parameters, but for compatibility with V4L apps and earlier
@@ -3639,6 +3632,7 @@ static int bttv_probe(struct pci_dev *dev, const struct pci_device_id *pci_id)
        btv->input = 0;
        btv->tvnorm = 0; /* Index into bttv_tvnorms[] i.e. PAL. */
        bttv_vbi_fmt_reset(&btv->vbi_fmt, btv->tvnorm);
+       btv->do_crop = 0;
 
        v4l2_ctrl_new_std(hdl, &bttv_ctrl_ops,
                        V4L2_CID_BRIGHTNESS, 0, 0xff00, 0x100, 32768);
index a36817dfaaec354c647cc952a722075ea82eee7f..48317c5935d19cb50aeadc2b1b4520092f5c99c1 100644 (file)
@@ -206,9 +206,6 @@ struct bttv_fh {
        int                      width;
        int                      height;
 
-       /* Application called VIDIOC_S_SELECTION. */
-       int                      do_crop;
-
        /* vbi capture */
        struct videobuf_queue    vbi;
        /* Current VBI capture window as seen through this fh (cannot
@@ -453,6 +450,8 @@ struct bttv {
        int width;
        int height;
        struct bttv_vbi_fmt vbi_fmt;
+       /* Application called VIDIOC_S_SELECTION. */
+       int do_crop;
 
        /* used to make dvb-bt8xx autoloadable */
        struct work_struct request_module_wk;