Hi Laurent,

On Mon, Apr 23, 2018 at 01:34:25AM +0300, Laurent Pinchart wrote:
> To make vsp1_subdev_set_pad_format() usable by entities that support
> selection rectangles, we need to reset the crop and compose rectangles
> when setting the format on the sink pad. Do so and replace the custom
> set_fmt implementation of the histogram code by a call to
> vsp1_subdev_set_pad_format().
>
> Resetting the crop and compose rectangles for entities that don't
> support crop and compose has no adverse effect as the rectangles are
> ignored anyway.
>
> Signed-off-by: Laurent Pinchart <laurent.pinchart+rene...@ideasonboard.com>

Reviewed-by: Jacopo Mondi <jac...@jmondi.org>


> ---
>  drivers/media/platform/vsp1/vsp1_entity.c | 16 +++++++++
>  drivers/media/platform/vsp1/vsp1_histo.c  | 59 
> +++----------------------------
>  2 files changed, 20 insertions(+), 55 deletions(-)
>
> diff --git a/drivers/media/platform/vsp1/vsp1_entity.c 
> b/drivers/media/platform/vsp1/vsp1_entity.c
> index 239df047efd0..181a583aecad 100644
> --- a/drivers/media/platform/vsp1/vsp1_entity.c
> +++ b/drivers/media/platform/vsp1/vsp1_entity.c
> @@ -335,6 +335,7 @@ int vsp1_subdev_set_pad_format(struct v4l2_subdev *subdev,
>       struct vsp1_entity *entity = to_vsp1_entity(subdev);
>       struct v4l2_subdev_pad_config *config;
>       struct v4l2_mbus_framefmt *format;
> +     struct v4l2_rect *selection;
>       unsigned int i;
>       int ret = 0;
>
> @@ -377,6 +378,21 @@ int vsp1_subdev_set_pad_format(struct v4l2_subdev 
> *subdev,
>       format = vsp1_entity_get_pad_format(entity, config, 1);
>       *format = fmt->format;
>
> +     /* Reset the crop and compose rectangles */
> +     selection = vsp1_entity_get_pad_selection(entity, config, fmt->pad,
> +                                               V4L2_SEL_TGT_CROP);
> +     selection->left = 0;
> +     selection->top = 0;
> +     selection->width = format->width;
> +     selection->height = format->height;
> +
> +     selection = vsp1_entity_get_pad_selection(entity, config, fmt->pad,
> +                                               V4L2_SEL_TGT_COMPOSE);
> +     selection->left = 0;
> +     selection->top = 0;
> +     selection->width = format->width;
> +     selection->height = format->height;
> +
>  done:
>       mutex_unlock(&entity->lock);
>       return ret;
> diff --git a/drivers/media/platform/vsp1/vsp1_histo.c 
> b/drivers/media/platform/vsp1/vsp1_histo.c
> index 029181c1fb61..5e15c8ff88d9 100644
> --- a/drivers/media/platform/vsp1/vsp1_histo.c
> +++ b/drivers/media/platform/vsp1/vsp1_histo.c
> @@ -389,65 +389,14 @@ static int histo_set_format(struct v4l2_subdev *subdev,
>                           struct v4l2_subdev_format *fmt)
>  {
>       struct vsp1_histogram *histo = subdev_to_histo(subdev);
> -     struct v4l2_subdev_pad_config *config;
> -     struct v4l2_mbus_framefmt *format;
> -     struct v4l2_rect *selection;
> -     unsigned int i;
> -     int ret = 0;
>
>       if (fmt->pad != HISTO_PAD_SINK)
>               return histo_get_format(subdev, cfg, fmt);
>
> -     mutex_lock(&histo->entity.lock);
> -
> -     config = vsp1_entity_get_pad_config(&histo->entity, cfg, fmt->which);
> -     if (!config) {
> -             ret = -EINVAL;
> -             goto done;
> -     }
> -
> -     /*
> -      * Default to the first format if the requested format is not
> -      * supported.
> -      */
> -     for (i = 0; i < histo->num_formats; ++i) {
> -             if (fmt->format.code == histo->formats[i])
> -                     break;
> -     }
> -     if (i == histo->num_formats)
> -             fmt->format.code = histo->formats[0];
> -
> -     format = vsp1_entity_get_pad_format(&histo->entity, config, fmt->pad);
> -
> -     format->code = fmt->format.code;
> -     format->width = clamp_t(unsigned int, fmt->format.width,
> -                             HISTO_MIN_SIZE, HISTO_MAX_SIZE);
> -     format->height = clamp_t(unsigned int, fmt->format.height,
> -                              HISTO_MIN_SIZE, HISTO_MAX_SIZE);
> -     format->field = V4L2_FIELD_NONE;
> -     format->colorspace = V4L2_COLORSPACE_SRGB;
> -
> -     fmt->format = *format;
> -
> -     /* Reset the crop and compose rectangles */
> -     selection = vsp1_entity_get_pad_selection(&histo->entity, config,
> -                                               fmt->pad, V4L2_SEL_TGT_CROP);
> -     selection->left = 0;
> -     selection->top = 0;
> -     selection->width = format->width;
> -     selection->height = format->height;
> -
> -     selection = vsp1_entity_get_pad_selection(&histo->entity, config,
> -                                               fmt->pad,
> -                                               V4L2_SEL_TGT_COMPOSE);
> -     selection->left = 0;
> -     selection->top = 0;
> -     selection->width = format->width;
> -     selection->height = format->height;
> -
> -done:
> -     mutex_unlock(&histo->entity.lock);
> -     return ret;
> +     return vsp1_subdev_set_pad_format(subdev, cfg, fmt,
> +                                       histo->formats, histo->num_formats,
> +                                       HISTO_MIN_SIZE, HISTO_MIN_SIZE,
> +                                       HISTO_MAX_SIZE, HISTO_MAX_SIZE);
>  }
>
>  static const struct v4l2_subdev_pad_ops histo_pad_ops = {
> --
> Regards,
>
> Laurent Pinchart
>

Attachment: signature.asc
Description: PGP signature

Reply via email to