On 3/15/19 1:43 PM, André Almeida wrote: > Add multiplanar formats to be exposed to the userspace as > supported formats. Since we don't want to support multiplanar > formats when the driver is in singleplanar mode, we only access > the multiplanar formats array if the multiplanar mode is enabled. > > Signed-off-by: André Almeida <andrealmeid@xxxxxxxxxxxxx> > --- > drivers/media/platform/vimc/vimc-capture.c | 30 ++++++++++++++++++++-- > 1 file changed, 28 insertions(+), 2 deletions(-) > > diff --git a/drivers/media/platform/vimc/vimc-capture.c b/drivers/media/platform/vimc/vimc-capture.c > index 09a8fd618b12..2d668012e9e9 100644 > --- a/drivers/media/platform/vimc/vimc-capture.c > +++ b/drivers/media/platform/vimc/vimc-capture.c > @@ -54,6 +54,19 @@ static const u32 vimc_cap_supported_pixfmt[] = { > V4L2_PIX_FMT_SRGGB12, > }; > > +static const u32 vimc_cap_supported_pixfmt_mp[] = { > + V4L2_PIX_FMT_YUV420M, > + V4L2_PIX_FMT_YVU420M, > + V4L2_PIX_FMT_YUV422M, > + V4L2_PIX_FMT_YVU422M, > + V4L2_PIX_FMT_YUV444M, > + V4L2_PIX_FMT_YVU444M, > + V4L2_PIX_FMT_NV12M, > + V4L2_PIX_FMT_NV21M, > + V4L2_PIX_FMT_NV16M, > + V4L2_PIX_FMT_NV61M, > +}; > + > struct vimc_cap_device { > struct vimc_ent_device ved; > struct video_device vdev; > @@ -153,13 +166,26 @@ static int vimc_cap_try_fmt_vid_cap(struct file *file, void *priv, > format->width, format->height); > } > > +/** > + * When multiplanar is true, consider that the vimc_cap_enum_fmt_vid_cap_mp > + * is concantenate in the vimc_cap_enum_fmt_vid_cap array. Otherwise, just > + * consider the single-planar array > + */ > static int vimc_cap_enum_fmt_vid_cap(struct file *file, void *priv, > struct v4l2_fmtdesc *f) > { > - if (f->index >= ARRAY_SIZE(vimc_cap_supported_pixfmt)) > + const unsigned int sp_size = ARRAY_SIZE(vimc_cap_supported_pixfmt); > + const unsigned int mp_size = ARRAY_SIZE(vimc_cap_supported_pixfmt_mp); > + > + if (f->index >= sp_size + (multiplanar ? mp_size : 0)) > return -EINVAL; > > - f->pixelformat = vimc_cap_supported_pixfmt[f->index]; > + if (f->index >= sp_size) > + f->pixelformat = vimc_cap_supported_pixfmt_mp[f->index - > + sp_size]; I think it would be better if you break the line like this: f->pixelformat = vimc_cap_supported_pixfmt_mp[f->index - sp_size]; but this is a matter of style. Regards, Helen > + else > + f->pixelformat = vimc_cap_supported_pixfmt[f->index]; > + > strncpy(f->description, v4l2_get_fourcc_name(f->pixelformat), 4); > f->description[4] = '\0'; > >