[media] pvrusb2: width and height maximum values
authorServaas Vandenberghe <vdb128@picaros.org>
Sun, 13 Feb 2011 20:51:09 +0000 (17:51 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Mon, 21 Mar 2011 23:32:22 +0000 (20:32 -0300)
pvrusb2: The origin of the capability bounds rectangle may differ from
(left=0,top=0) so the calculation should use absolute coordinates,
here below, or use relative coordinates like
cropl_val-cap->bounds.left and cropt_val-cap->bounds.top.

Signed-off-by: Mike Isely <isely@pobox.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/video/pvrusb2/pvrusb2-hdw.c

index 5e6437d..4885937 100644 (file)
@@ -499,31 +499,35 @@ static int ctrl_cropt_max_get(struct pvr2_ctrl *cptr, int *top)
        return 0;
 }
 
-static int ctrl_cropw_max_get(struct pvr2_ctrl *cptr, int *val)
+static int ctrl_cropw_max_get(struct pvr2_ctrl *cptr, int *width)
 {
        struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
-       int stat = pvr2_hdw_check_cropcap(cptr->hdw);
+       int stat, bleftend, cleft;
+
+       stat = pvr2_hdw_check_cropcap(cptr->hdw);
        if (stat != 0) {
                return stat;
        }
-       *val = 0;
-       if (cap->bounds.width > cptr->hdw->cropl_val) {
-               *val = cap->bounds.width - cptr->hdw->cropl_val;
-       }
+       bleftend = cap->bounds.left+cap->bounds.width;
+       cleft = cptr->hdw->cropl_val;
+
+       *width = cleft < bleftend ? bleftend-cleft : 0;
        return 0;
 }
 
-static int ctrl_croph_max_get(struct pvr2_ctrl *cptr, int *val)
+static int ctrl_croph_max_get(struct pvr2_ctrl *cptr, int *height)
 {
        struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
-       int stat = pvr2_hdw_check_cropcap(cptr->hdw);
+       int stat, btopend, ctop;
+
+       stat = pvr2_hdw_check_cropcap(cptr->hdw);
        if (stat != 0) {
                return stat;
        }
-       *val = 0;
-       if (cap->bounds.height > cptr->hdw->cropt_val) {
-               *val = cap->bounds.height - cptr->hdw->cropt_val;
-       }
+       btopend = cap->bounds.top+cap->bounds.height;
+       ctop = cptr->hdw->cropt_val;
+
+       *height = ctop < btopend ? btopend-ctop : 0;
        return 0;
 }