Message ID | 20190513201355.994-4-kieran.bingham+renesas@ideasonboard.com (mailing list archive) |
---|---|
State | New |
Delegated to: | Kieran Bingham |
Headers | show |
Series | media: vsp1: Phased partition overlap support | expand |
Hi Kieran, Thank you for the patch. On Mon, May 13, 2019 at 09:13:54PM +0100, Kieran Bingham wrote: > The 'mp' value is used through several calculations in determining the > scaling factors of the UDS. This determines the pre-scaling filter > binning value. Factor this out so that it can be reused in further > calculations, and also ensure that if the BLADV control is ever changed > only a single function needs to be modified. > > Signed-off-by: Kieran Bingham <kieran.bingham+renesas@ideasonboard.com> > --- > drivers/media/platform/vsp1/vsp1_uds.c | 26 ++++++++++++++++++-------- > 1 file changed, 18 insertions(+), 8 deletions(-) > > diff --git a/drivers/media/platform/vsp1/vsp1_uds.c b/drivers/media/platform/vsp1/vsp1_uds.c > index 27012af973b2..effebfc0c862 100644 > --- a/drivers/media/platform/vsp1/vsp1_uds.c > +++ b/drivers/media/platform/vsp1/vsp1_uds.c > @@ -46,6 +46,22 @@ void vsp1_uds_set_alpha(struct vsp1_entity *entity, struct vsp1_dl_body *dlb, > alpha << VI6_UDS_ALPVAL_VAL0_SHIFT); > } > > +/* > + * Determine the pre-filter binning divider. > + * > + * The UDS uses a two stage filter scaler process. This determines the > + * rate at which pixels are reduced for large down-scaling ratios before I would say "reduced by binning". Apart from this, Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> > + * being fed into the bicubic filter. > + * > + * This calculation assumes that the BLADV bit is unset. > + */ > +static unsigned int uds_pre_scaling_divisor(int ratio) > +{ > + unsigned int mp = ratio / 4096; > + > + return mp < 4 ? 1 : (mp < 8 ? 2 : 4); > +} > + > /* > * uds_output_size - Return the output size for an input size and scaling ratio > * @input: input size in pixels > @@ -55,10 +71,7 @@ static unsigned int uds_output_size(unsigned int input, unsigned int ratio) > { > if (ratio > 4096) { > /* Down-scaling */ > - unsigned int mp; > - > - mp = ratio / 4096; > - mp = mp < 4 ? 1 : (mp < 8 ? 2 : 4); > + unsigned int mp = uds_pre_scaling_divisor(ratio); > > return (input - 1) / mp * mp * 4096 / ratio + 1; > } else { > @@ -88,10 +101,7 @@ static unsigned int uds_passband_width(unsigned int ratio) > { > if (ratio >= 4096) { > /* Down-scaling */ > - unsigned int mp; > - > - mp = ratio / 4096; > - mp = mp < 4 ? 1 : (mp < 8 ? 2 : 4); > + unsigned int mp = uds_pre_scaling_divisor(ratio); > > return 64 * 4096 * mp / ratio; > } else {
diff --git a/drivers/media/platform/vsp1/vsp1_uds.c b/drivers/media/platform/vsp1/vsp1_uds.c index 27012af973b2..effebfc0c862 100644 --- a/drivers/media/platform/vsp1/vsp1_uds.c +++ b/drivers/media/platform/vsp1/vsp1_uds.c @@ -46,6 +46,22 @@ void vsp1_uds_set_alpha(struct vsp1_entity *entity, struct vsp1_dl_body *dlb, alpha << VI6_UDS_ALPVAL_VAL0_SHIFT); } +/* + * Determine the pre-filter binning divider. + * + * The UDS uses a two stage filter scaler process. This determines the + * rate at which pixels are reduced for large down-scaling ratios before + * being fed into the bicubic filter. + * + * This calculation assumes that the BLADV bit is unset. + */ +static unsigned int uds_pre_scaling_divisor(int ratio) +{ + unsigned int mp = ratio / 4096; + + return mp < 4 ? 1 : (mp < 8 ? 2 : 4); +} + /* * uds_output_size - Return the output size for an input size and scaling ratio * @input: input size in pixels @@ -55,10 +71,7 @@ static unsigned int uds_output_size(unsigned int input, unsigned int ratio) { if (ratio > 4096) { /* Down-scaling */ - unsigned int mp; - - mp = ratio / 4096; - mp = mp < 4 ? 1 : (mp < 8 ? 2 : 4); + unsigned int mp = uds_pre_scaling_divisor(ratio); return (input - 1) / mp * mp * 4096 / ratio + 1; } else { @@ -88,10 +101,7 @@ static unsigned int uds_passband_width(unsigned int ratio) { if (ratio >= 4096) { /* Down-scaling */ - unsigned int mp; - - mp = ratio / 4096; - mp = mp < 4 ? 1 : (mp < 8 ? 2 : 4); + unsigned int mp = uds_pre_scaling_divisor(ratio); return 64 * 4096 * mp / ratio; } else {
The 'mp' value is used through several calculations in determining the scaling factors of the UDS. This determines the pre-scaling filter binning value. Factor this out so that it can be reused in further calculations, and also ensure that if the BLADV control is ever changed only a single function needs to be modified. Signed-off-by: Kieran Bingham <kieran.bingham+renesas@ideasonboard.com> --- drivers/media/platform/vsp1/vsp1_uds.c | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-)