With hindsight the patch for pvrusb2-i2c-cmd-v4l2.c 
set_crop(struct pvr2_hdw *hdw) contains an inconsistency.  It only 
calls VIDIOC_G_CROP after a successful VIDIOC_S_CROP.  

However, if the command _S_CROP fails with -ERANGE it is still 
advisable to call _G_CROP as to reset the values hdw->crop*_val.  Thus 
the ctl_crop_*/cur_val always contains the currently applied value.  

--- pvrusb2-i2c-cmd-v4l2.c~     2009-09-05 06:25:43.000000000 +0200
+++ pvrusb2-i2c-cmd-v4l2.c      2009-09-12 15:29:39.000000000 +0200
@@ -238,7 +238,7 @@ static void set_crop(struct pvr2_hdw *hd
 {
        struct v4l2_crop crop;
        struct v4l2_rect *c=&crop.c;
-       int err;
+       int errs, errg;
 
        memset(&crop, 0, sizeof crop);
        crop.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
@@ -247,22 +247,19 @@ static void set_crop(struct pvr2_hdw *hd
        c->height = hdw->croph_val;
        c->width = hdw->cropw_val;
 
-       pvr2_trace(PVR2_TRACE_CHIPS,
-                  "i2c v4l2 set_crop S crop=%d:%d:%d:%d",
+       pvr2_trace(PVR2_TRACE_CHIPS, "i2c v4l2 set_crop crop=%d:%d:%d:%d",
                   c->width, c->height, c->left, c->top);
 
-       err=pvr2_i2c_core_cmd(hdw, VIDIOC_S_CROP, &crop);
-       if(!err) {
-         err=pvr2_i2c_core_cmd(hdw, VIDIOC_G_CROP, &crop);
-         pvr2_trace(PVR2_TRACE_CHIPS,
-                    "i2c v4l2 set_crop G err=%i %d:%d:%d:%d", err, 
-                    c->width, c->height, c->left, c->top);
-         if(!err) {
-           hdw->cropl_val = c->left;
-           hdw->cropt_val = c->top;
-           hdw->croph_val = c->height;
-           hdw->cropw_val = c->width;
-         }
+       errs=pvr2_i2c_core_cmd(hdw, VIDIOC_S_CROP, &crop);
+       errg=pvr2_i2c_core_cmd(hdw, VIDIOC_G_CROP, &crop);
+       pvr2_trace(PVR2_TRACE_CHIPS, "i2c v4l2 set_crop S err=%i G err=%i"
+                  " %d:%d:%d:%d", errs, errg, c->width, c->height, c->left, 
+                  c->top);
+       if(!errg) {
+         hdw->cropl_val = c->left;
+         hdw->cropt_val = c->top;
+         hdw->croph_val = c->height;
+         hdw->cropw_val = c->width;
        }
 }
 
_______________________________________________
pvrusb2 mailing list
[email protected]
http://www.isely.net/cgi-bin/mailman/listinfo/pvrusb2

Reply via email to