@@ -984,6 +984,7 @@ static int dw100_s_selection(struct file *file, void *fh,
u32 qscalex, qscaley, qscale;
int x, y, w, h;
unsigned int wframe, hframe;
+ uint32_t zero_point_five;
if (sel->type != V4L2_BUF_TYPE_VIDEO_OUTPUT)
return -EINVAL;
@@ -1032,8 +1033,9 @@ static int dw100_s_selection(struct file *file, void *fh,
}
}
- w = (u32)((((u64)wframe << 16) * qscale) >> 32);
- h = (u32)((((u64)hframe << 16) * qscale) >> 32);
+ zero_point_five = 1 << 15;
+ w = (u32)(((((u64)wframe << 16)+zero_point_five) * qscale) >> 32);
+ h = (u32)(((((u64)hframe << 16)+zero_point_five) * qscale) >> 32);
x = x + (sel->r.width - w) / 2;
y = y + (sel->r.height - h) / 2;
x = min(wframe - w, (unsigned int)max(0, x));