Hi Hans, Thank you for the review. On Sat, Apr 27, 2024 at 06:00:13PM +0200, Hans Verkuil wrote: > > -static int vidioc_try_fmt_vid_cap(struct file *file, void *fh, > > - struct v4l2_format *f) > > +static int ipu6_isys_vidioc_s_fmt_meta_cap(struct file *file, void *fh, > > + struct v4l2_format *f) > > { > > struct ipu6_isys_video *av = video_drvdata(file); > > > > - ipu6_isys_video_try_fmt_vid(av, &f->fmt.pix); > > This is missing a vb2_is_busy() check. To be added in v7. ... > > @@ -1214,8 +1309,10 @@ int ipu6_isys_video_init(struct ipu6_isys_video *av) > > av->vdev.queue = &av->aq.vbq; > > av->vdev.lock = &av->mutex; > > > > - ipu6_isys_video_try_fmt_vid(av, &format.fmt.pix); > > + __ipu6_isys_vidioc_try_fmt_vid_cap(av, &format); > > av->pix_fmt = format.fmt.pix; > > + __ipu6_isys_vidioc_try_fmt_meta_cap(av, &format_meta); > > Here is the cause of the v4l2-compliance failure (I think): this will > set the format_meta pixelformat to ipu6_isys_pfmts[0], which is BG12. > > It doesn't check the is_meta flag there. > > So it is not a v4l2-compliance bug, but a driver bug AFAICT. Looks like you were right. I was quite confused of what actually was the problem for v4l2-compliance. Additionally the driver didn't also correctly enumerate the formats for both of the buffer types. I've fixed both and v4l2-compliance passes now. -- Kind regards, Sakari Ailus