Linux-Media Archive mirror
 help / color / mirror / Atom feed
* [PATCH v7 7/8] media: imagination: Round to closest multiple for cropping region
@ 2024-05-09 18:40 Devarsh Thakkar
  2024-05-10 15:10 ` Andy Shevchenko
  0 siblings, 1 reply; 5+ messages in thread
From: Devarsh Thakkar @ 2024-05-09 18:40 UTC (permalink / raw
  To: mchehab, hverkuil-cisco, linux-media, linux-kernel,
	benjamin.gaignard, sebastian.fricke, dri-devel
  Cc: laurent.pinchart, praneeth, nm, vigneshr, a-bhatia1, j-luthra,
	b-brnich, detheridge, p-mantena, vijayp, devarsht, andrzej.p,
	nicolas, p.zabel, airlied, daniel, akpm, gregkh,
	andriy.shevchenko, adobriyan, jani.nikula

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.

Signed-off-by: Devarsh Thakkar <devarsht@ti.com>
---
V1->V6 (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 189e2a99c43d..abd66bc9b96c 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


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH v7 7/8] media: imagination: Round to closest multiple for cropping region
  2024-05-09 18:40 [PATCH v7 7/8] media: imagination: Round to closest multiple for cropping region Devarsh Thakkar
@ 2024-05-10 15:10 ` Andy Shevchenko
  2024-05-11 17:08   ` Devarsh Thakkar
  0 siblings, 1 reply; 5+ messages in thread
From: Andy Shevchenko @ 2024-05-10 15:10 UTC (permalink / raw
  To: Devarsh Thakkar
  Cc: mchehab, hverkuil-cisco, linux-media, linux-kernel,
	benjamin.gaignard, sebastian.fricke, dri-devel, laurent.pinchart,
	praneeth, nm, vigneshr, a-bhatia1, j-luthra, b-brnich, detheridge,
	p-mantena, vijayp, andrzej.p, nicolas, p.zabel, airlied, daniel,
	akpm, gregkh, adobriyan, jani.nikula

On Fri, May 10, 2024 at 12:10:01AM +0530, 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 is arguable. How do we know that the bigger range is supported?
The safest side is to go smaller than bigger.

-- 
With Best Regards,
Andy Shevchenko



^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v7 7/8] media: imagination: Round to closest multiple for cropping region
  2024-05-10 15:10 ` Andy Shevchenko
@ 2024-05-11 17:08   ` Devarsh Thakkar
  2024-05-14 20:22     ` Nicolas Dufresne
  0 siblings, 1 reply; 5+ messages in thread
From: Devarsh Thakkar @ 2024-05-11 17:08 UTC (permalink / raw
  To: Andy Shevchenko
  Cc: mchehab, hverkuil-cisco, linux-media, linux-kernel,
	benjamin.gaignard, sebastian.fricke, dri-devel, laurent.pinchart,
	praneeth, nm, vigneshr, a-bhatia1, j-luthra, b-brnich, detheridge,
	p-mantena, vijayp, andrzej.p, nicolas, p.zabel, airlied, daniel,
	akpm, gregkh, adobriyan, jani.nikula

Hi Andy,

Thanks for the quick review.
On 10/05/24 20:40, Andy Shevchenko wrote:
> On Fri, May 10, 2024 at 12:10:01AM +0530, 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 is arguable. How do we know that the bigger range is supported?
> The safest side is to go smaller than bigger.
> 

Yes and that's what the driver does when do when application passes
V4L2_SEL_FLAG_LE while doing the selection. If application does not
specify explicitly whether to round down or round up the cropping
parameters requested by it (i.e app is neither passing V4L2_SEL_FLAG_LE
nor V4L2_SEL_FLAG_GE flags), then it is preferred by driver to round the
cropping parameters to nearest possible value by either rounding down or
rounding up to align with hardware requirements.

For e.g. If requested width for cropping region is 127 and HW requires
width to be multiple of 64 then we would prefer to round it up to 128
rather than rounding down to a more distant value (i.e. 64), but if
requested cropping width is 129 then we would prefer to instead round it
down to 128. But if requested cropping width is 160 then there are two
nearest possible values 160 - 32 = 128 and 160 + 32 = 192 and in which
case we prefer the smaller value as you suggested and that's why the
driver uses round_closest_down.

For any reason, if still the cropping rectangle falls beyond the bound
region, then driver will return out of range error (-ERANGE) to
application.

Regards
Devarsh



^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v7 7/8] media: imagination: Round to closest multiple for cropping region
  2024-05-11 17:08   ` Devarsh Thakkar
@ 2024-05-14 20:22     ` Nicolas Dufresne
  2024-05-15  5:06       ` Devarsh Thakkar
  0 siblings, 1 reply; 5+ messages in thread
From: Nicolas Dufresne @ 2024-05-14 20:22 UTC (permalink / raw
  To: Devarsh Thakkar, Andy Shevchenko
  Cc: mchehab, hverkuil-cisco, linux-media, linux-kernel,
	benjamin.gaignard, sebastian.fricke, dri-devel, laurent.pinchart,
	praneeth, nm, vigneshr, a-bhatia1, j-luthra, b-brnich, detheridge,
	p-mantena, vijayp, andrzej.p, p.zabel, airlied, daniel, akpm,
	gregkh, adobriyan, jani.nikula

Le samedi 11 mai 2024 à 22:38 +0530, Devarsh Thakkar a écrit :
> Hi Andy,
> 
> Thanks for the quick review.
> On 10/05/24 20:40, Andy Shevchenko wrote:
> > On Fri, May 10, 2024 at 12:10:01AM +0530, 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 is arguable. How do we know that the bigger range is supported?
> > The safest side is to go smaller than bigger.
> > 
> 
> Yes and that's what the driver does when do when application passes
> V4L2_SEL_FLAG_LE while doing the selection. If application does not
> specify explicitly whether to round down or round up the cropping
> parameters requested by it (i.e app is neither passing V4L2_SEL_FLAG_LE
> nor V4L2_SEL_FLAG_GE flags), then it is preferred by driver to round the
> cropping parameters to nearest possible value by either rounding down or
> rounding up to align with hardware requirements.
> 
> For e.g. If requested width for cropping region is 127 and HW requires
> width to be multiple of 64 then we would prefer to round it up to 128
> rather than rounding down to a more distant value (i.e. 64), but if
> requested cropping width is 129 then we would prefer to instead round it
> down to 128. But if requested cropping width is 160 then there are two
> nearest possible values 160 - 32 = 128 and 160 + 32 = 192 and in which
> case we prefer the smaller value as you suggested and that's why the
> driver uses round_closest_down.
> 
> For any reason, if still the cropping rectangle falls beyond the bound
> region, then driver will return out of range error (-ERANGE) to
> application.

I would appreciate if this change was based on specification text, meaning
improving the next if that behaviour is undefined. We might not be able to fix
it everywhere, but we can recommend something.

Nicolas

> 
> Regards
> Devarsh
> 
> 


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v7 7/8] media: imagination: Round to closest multiple for cropping region
  2024-05-14 20:22     ` Nicolas Dufresne
@ 2024-05-15  5:06       ` Devarsh Thakkar
  0 siblings, 0 replies; 5+ messages in thread
From: Devarsh Thakkar @ 2024-05-15  5:06 UTC (permalink / raw
  To: Nicolas Dufresne, Andy Shevchenko
  Cc: mchehab, hverkuil-cisco, linux-media, linux-kernel,
	benjamin.gaignard, sebastian.fricke, dri-devel, laurent.pinchart,
	praneeth, nm, vigneshr, a-bhatia1, j-luthra, b-brnich, detheridge,
	p-mantena, vijayp, andrzej.p, p.zabel, airlied, daniel, akpm,
	gregkh, adobriyan, jani.nikula

Hi Nicolas,

Thanks for the review.

On 15/05/24 01:52, Nicolas Dufresne wrote:
> Le samedi 11 mai 2024 à 22:38 +0530, Devarsh Thakkar a écrit :
>> Hi Andy,
>>
>> Thanks for the quick review.
>> On 10/05/24 20:40, Andy Shevchenko wrote:
>>> On Fri, May 10, 2024 at 12:10:01AM +0530, 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 is arguable. How do we know that the bigger range is supported?
>>> The safest side is to go smaller than bigger.
>>>
>>
>> Yes and that's what the driver does when do when application passes
>>  while doing the selection. If application does not
>> specify explicitly whether to round down or round up the cropping
>> parameters requested by it (i.e app is neither passing V4L2_SEL_FLAG_LE
>> nor V4L2_SEL_FLAG_GE flags), then it is preferred by driver to round the
>> cropping parameters to nearest possible value by either rounding down or
>> rounding up to align with hardware requirements.
>>
>> For e.g. If requested width for cropping region is 127 and HW requires
>> width to be multiple of 64 then we would prefer to round it up to 128
>> rather than rounding down to a more distant value (i.e. 64), but if
>> requested cropping width is 129 then we would prefer to instead round it
>> down to 128. But if requested cropping width is 160 then there are two
>> nearest possible values 160 - 32 = 128 and 160 + 32 = 192 and in which
>> case we prefer the smaller value as you suggested and that's why the
>> driver uses round_closest_down.
>>
>> For any reason, if still the cropping rectangle falls beyond the bound
>> region, then driver will return out of range error (-ERANGE) to
>> application.
> 
> I would appreciate if this change was based on specification text, meaning
> improving the next if that behaviour is undefined. We might not be able to fix
> it everywhere, but we can recommend something.
> 

Yes, this change is based on specification text. This complies with the
VIDIOC_G_SELECTION, VIDIOC_S_SELECTION ioctl description as documented in
v4l uapi [1] which means 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."

If the user-space has specific requirement to either round down, round up or
honor exact values, it should pass V4L2_SEL_FLAG_LE, V4L2_SEL_FLAG_GE or
V4L2_SEL_FLAG_LE | V4L2_SEL_FLAG_GE flags respectively.

[1]
https://www.kernel.org/doc/Documentation/userspace-api/media/v4l/vidioc-g-selection.rst#:~:text=compose%20rectangle%20as-,close,-as%20possible%20to

Regards
Devarsh

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2024-05-15  5:07 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-05-09 18:40 [PATCH v7 7/8] media: imagination: Round to closest multiple for cropping region Devarsh Thakkar
2024-05-10 15:10 ` Andy Shevchenko
2024-05-11 17:08   ` Devarsh Thakkar
2024-05-14 20:22     ` Nicolas Dufresne
2024-05-15  5:06       ` Devarsh Thakkar

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).