Message ID | 20231122043009.2741-6-laurent.pinchart+renesas@ideasonboard.com |
---|---|
State | Superseded |
Headers | show |
Series | None | expand |
Hi Laurent On Wed, Nov 22, 2023 at 06:29:55AM GMT, Laurent Pinchart wrote: > From: Laurent Pinchart <laurent.pinchart@ideasonboard.com> > > The histogram module is the only one that has a custom .get_fmt() > handler, to handle the special case of the output format being fixed. > This can equally well be handled in the .set_fmt() handler instead. > Beside avoiding special cases and using the same .get_fmt() handler in > all modules, it ensures that the correct format is stored in the active > state for the source pad, including when .set_fmt() is called from > vsp1_entity_init_state(). Both are needed to later switch to the V4L2 > subdev active state API. > > Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> > --- > .../media/platform/renesas/vsp1/vsp1_histo.c | 29 +++++++------------ > 1 file changed, 10 insertions(+), 19 deletions(-) > > diff --git a/drivers/media/platform/renesas/vsp1/vsp1_histo.c b/drivers/media/platform/renesas/vsp1/vsp1_histo.c > index 576270cb3e63..a4076d82651e 100644 > --- a/drivers/media/platform/renesas/vsp1/vsp1_histo.c > +++ b/drivers/media/platform/renesas/vsp1/vsp1_histo.c > @@ -356,30 +356,21 @@ static int histo_set_selection(struct v4l2_subdev *subdev, > return ret; > } > > -static int histo_get_format(struct v4l2_subdev *subdev, > - struct v4l2_subdev_state *sd_state, > - struct v4l2_subdev_format *fmt) > -{ > - if (fmt->pad == HISTO_PAD_SOURCE) { > - fmt->format.code = MEDIA_BUS_FMT_FIXED; > - fmt->format.width = 0; > - fmt->format.height = 0; Suprising! Anyway: Reviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com> Thanks j > - fmt->format.field = V4L2_FIELD_NONE; > - fmt->format.colorspace = V4L2_COLORSPACE_RAW; > - return 0; > - } > - > - return vsp1_subdev_get_pad_format(subdev, sd_state, fmt); > -} > - > static int histo_set_format(struct v4l2_subdev *subdev, > struct v4l2_subdev_state *sd_state, > struct v4l2_subdev_format *fmt) > { > struct vsp1_histogram *histo = subdev_to_histo(subdev); > > - if (fmt->pad != HISTO_PAD_SINK) > - return histo_get_format(subdev, sd_state, fmt); > + if (fmt->pad == HISTO_PAD_SOURCE) { > + fmt->format.code = MEDIA_BUS_FMT_FIXED; > + fmt->format.width = 0; > + fmt->format.height = 0; > + fmt->format.field = V4L2_FIELD_NONE; > + fmt->format.colorspace = V4L2_COLORSPACE_RAW; > + > + return 0; > + } > > return vsp1_subdev_set_pad_format(subdev, sd_state, fmt, > histo->formats, histo->num_formats, > @@ -390,7 +381,7 @@ static int histo_set_format(struct v4l2_subdev *subdev, > static const struct v4l2_subdev_pad_ops histo_pad_ops = { > .enum_mbus_code = histo_enum_mbus_code, > .enum_frame_size = histo_enum_frame_size, > - .get_fmt = histo_get_format, > + .get_fmt = vsp1_subdev_get_pad_format, > .set_fmt = histo_set_format, > .get_selection = histo_get_selection, > .set_selection = histo_set_selection, > -- > Regards, > > Laurent Pinchart > >
On Tue, Jun 18, 2024 at 12:05:32PM +0200, Jacopo Mondi wrote: > On Wed, Nov 22, 2023 at 06:29:55AM GMT, Laurent Pinchart wrote: > > From: Laurent Pinchart <laurent.pinchart@ideasonboard.com> > > > > The histogram module is the only one that has a custom .get_fmt() > > handler, to handle the special case of the output format being fixed. > > This can equally well be handled in the .set_fmt() handler instead. > > Beside avoiding special cases and using the same .get_fmt() handler in > > all modules, it ensures that the correct format is stored in the active > > state for the source pad, including when .set_fmt() is called from > > vsp1_entity_init_state(). Both are needed to later switch to the V4L2 > > subdev active state API. > > > > Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> > > --- > > .../media/platform/renesas/vsp1/vsp1_histo.c | 29 +++++++------------ > > 1 file changed, 10 insertions(+), 19 deletions(-) > > > > diff --git a/drivers/media/platform/renesas/vsp1/vsp1_histo.c b/drivers/media/platform/renesas/vsp1/vsp1_histo.c > > index 576270cb3e63..a4076d82651e 100644 > > --- a/drivers/media/platform/renesas/vsp1/vsp1_histo.c > > +++ b/drivers/media/platform/renesas/vsp1/vsp1_histo.c > > @@ -356,30 +356,21 @@ static int histo_set_selection(struct v4l2_subdev *subdev, > > return ret; > > } > > > > -static int histo_get_format(struct v4l2_subdev *subdev, > > - struct v4l2_subdev_state *sd_state, > > - struct v4l2_subdev_format *fmt) > > -{ > > - if (fmt->pad == HISTO_PAD_SOURCE) { > > - fmt->format.code = MEDIA_BUS_FMT_FIXED; > > - fmt->format.width = 0; > > - fmt->format.height = 0; > > Suprising! For metadata formats that are not line-based, the width and height are not applicable. > Anyway: > Reviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com> > > Thanks > j > > > - fmt->format.field = V4L2_FIELD_NONE; > > - fmt->format.colorspace = V4L2_COLORSPACE_RAW; > > - return 0; > > - } > > - > > - return vsp1_subdev_get_pad_format(subdev, sd_state, fmt); > > -} > > - > > static int histo_set_format(struct v4l2_subdev *subdev, > > struct v4l2_subdev_state *sd_state, > > struct v4l2_subdev_format *fmt) > > { > > struct vsp1_histogram *histo = subdev_to_histo(subdev); > > > > - if (fmt->pad != HISTO_PAD_SINK) > > - return histo_get_format(subdev, sd_state, fmt); > > + if (fmt->pad == HISTO_PAD_SOURCE) { > > + fmt->format.code = MEDIA_BUS_FMT_FIXED; > > + fmt->format.width = 0; > > + fmt->format.height = 0; > > + fmt->format.field = V4L2_FIELD_NONE; > > + fmt->format.colorspace = V4L2_COLORSPACE_RAW; > > + > > + return 0; > > + } > > > > return vsp1_subdev_set_pad_format(subdev, sd_state, fmt, > > histo->formats, histo->num_formats, > > @@ -390,7 +381,7 @@ static int histo_set_format(struct v4l2_subdev *subdev, > > static const struct v4l2_subdev_pad_ops histo_pad_ops = { > > .enum_mbus_code = histo_enum_mbus_code, > > .enum_frame_size = histo_enum_frame_size, > > - .get_fmt = histo_get_format, > > + .get_fmt = vsp1_subdev_get_pad_format, > > .set_fmt = histo_set_format, > > .get_selection = histo_get_selection, > > .set_selection = histo_set_selection,
diff --git a/drivers/media/platform/renesas/vsp1/vsp1_histo.c b/drivers/media/platform/renesas/vsp1/vsp1_histo.c index 576270cb3e63..a4076d82651e 100644 --- a/drivers/media/platform/renesas/vsp1/vsp1_histo.c +++ b/drivers/media/platform/renesas/vsp1/vsp1_histo.c @@ -356,30 +356,21 @@ static int histo_set_selection(struct v4l2_subdev *subdev, return ret; } -static int histo_get_format(struct v4l2_subdev *subdev, - struct v4l2_subdev_state *sd_state, - struct v4l2_subdev_format *fmt) -{ - if (fmt->pad == HISTO_PAD_SOURCE) { - fmt->format.code = MEDIA_BUS_FMT_FIXED; - fmt->format.width = 0; - fmt->format.height = 0; - fmt->format.field = V4L2_FIELD_NONE; - fmt->format.colorspace = V4L2_COLORSPACE_RAW; - return 0; - } - - return vsp1_subdev_get_pad_format(subdev, sd_state, fmt); -} - static int histo_set_format(struct v4l2_subdev *subdev, struct v4l2_subdev_state *sd_state, struct v4l2_subdev_format *fmt) { struct vsp1_histogram *histo = subdev_to_histo(subdev); - if (fmt->pad != HISTO_PAD_SINK) - return histo_get_format(subdev, sd_state, fmt); + if (fmt->pad == HISTO_PAD_SOURCE) { + fmt->format.code = MEDIA_BUS_FMT_FIXED; + fmt->format.width = 0; + fmt->format.height = 0; + fmt->format.field = V4L2_FIELD_NONE; + fmt->format.colorspace = V4L2_COLORSPACE_RAW; + + return 0; + } return vsp1_subdev_set_pad_format(subdev, sd_state, fmt, histo->formats, histo->num_formats, @@ -390,7 +381,7 @@ static int histo_set_format(struct v4l2_subdev *subdev, static const struct v4l2_subdev_pad_ops histo_pad_ops = { .enum_mbus_code = histo_enum_mbus_code, .enum_frame_size = histo_enum_frame_size, - .get_fmt = histo_get_format, + .get_fmt = vsp1_subdev_get_pad_format, .set_fmt = histo_set_format, .get_selection = histo_get_selection, .set_selection = histo_set_selection,