[PATCH v12 12/13] media: imagination: Round to closest multiple for cropping region

Sebastian Fricke sebastian.fricke at collabora.com
Thu Jun 6 11:44:59 UTC 2024


Hey,

On 04.06.2024 16:23, Devarsh Thakkar wrote:
>If neither of the flags to round down (V4L2_SEL_FLAG_LE) or round up
>(V4L2_SEL_FLAG_GE) are specified by the user, then round to nearest
>multiple of requested value while updating the crop rectangle coordinates.
>
>Use the rounding macro which gives preference to rounding down in case two
>nearest values (high and low) are possible to raise the probability of
>cropping rectangle falling inside the bound region.
>
>This complies with the VIDIOC_G_SELECTION, VIDIOC_S_SELECTION ioctl
>description as documented in v4l uapi [1] which specifies that driver
>should choose crop rectangle as close as possible if no flags are passed by
>user-space, as quoted below :
>
>"``0`` - The driver can adjust the rectangle size freely and shall choose a
>crop/compose rectangle as close as possible to the requested
> one."
>
>Link: https://www.kernel.org/doc/Documentation/userspace-api/media/v4l/vidioc-g-selection.rst [1]
>Signed-off-by: Devarsh Thakkar <devarsht at ti.com>

Acked-by: Sebastian Fricke <sebastian.fricke at collabora.com>

Can, whoever picks up the math changes, pick up this change as well?
I will send 1-6 via the media subsystem.

Regards,
Sebastian

>---
>V12: No change
>V11: No change
>V10: No change
>V9:  No change
>V8:  Update commit message with specification reference
>V1->V7 (No change, patch introduced in V7)
>---
> drivers/media/platform/imagination/e5010-jpeg-enc.c | 8 ++++----
> 1 file changed, 4 insertions(+), 4 deletions(-)
>
>diff --git a/drivers/media/platform/imagination/e5010-jpeg-enc.c b/drivers/media/platform/imagination/e5010-jpeg-enc.c
>index e701d573a26a..d65646f0c38c 100644
>--- a/drivers/media/platform/imagination/e5010-jpeg-enc.c
>+++ b/drivers/media/platform/imagination/e5010-jpeg-enc.c
>@@ -517,10 +517,10 @@ static int e5010_s_selection(struct file *file, void *fh, struct v4l2_selection
>
> 	switch (s->flags) {
> 	case 0:
>-		s->r.width = round_down(s->r.width, queue->fmt->frmsize.step_width);
>-		s->r.height = round_down(s->r.height, queue->fmt->frmsize.step_height);
>-		s->r.left = round_down(s->r.left, queue->fmt->frmsize.step_width);
>-		s->r.top = round_down(s->r.top, 2);
>+		s->r.width = round_closest_down(s->r.width, queue->fmt->frmsize.step_width);
>+		s->r.height = round_closest_down(s->r.height, queue->fmt->frmsize.step_height);
>+		s->r.left = round_closest_down(s->r.left, queue->fmt->frmsize.step_width);
>+		s->r.top = round_closest_down(s->r.top, 2);
>
> 		if (s->r.left + s->r.width > queue->width)
> 			s->r.width = round_down(s->r.width + s->r.left - queue->width,
>-- 
>2.39.1
>


More information about the dri-devel mailing list