On Tue Oct 7 14:05:59 2025 +0200, Hans Verkuil wrote:
> Fix various v4l2-compliance errors relating to timeperframe.
> 
> VIDIOC_G/S_PARM is only supported for Video Output, so disable
> these ioctls for Capture devices.
> 
> Ensure numerator and denominator are never 0.
> 
> Set missing V4L2_CAP_TIMEPERFRAME capability for VIDIOC_S_PARM.
> 
> v4l2-compliance:
> 
>         fail: v4l2-test-formats.cpp(1388): out->timeperframe.numerator == 0 
> || out->timeperframe.denominator == 0
> test VIDIOC_G/S_PARM: FAIL
> 
> Signed-off-by: Hans Verkuil <[email protected]>
> Acked-by: Sakari Ailus <[email protected]>

Patch committed.

Thanks,
Hans Verkuil

 drivers/media/platform/ti/omap3isp/ispvideo.c | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

---

diff --git a/drivers/media/platform/ti/omap3isp/ispvideo.c 
b/drivers/media/platform/ti/omap3isp/ispvideo.c
index ac170ef4fa01..86cb27b6ca4e 100644
--- a/drivers/media/platform/ti/omap3isp/ispvideo.c
+++ b/drivers/media/platform/ti/omap3isp/ispvideo.c
@@ -928,7 +928,10 @@ isp_video_set_param(struct file *file, void *fh, struct 
v4l2_streamparm *a)
 
        if (a->parm.output.timeperframe.denominator == 0)
                a->parm.output.timeperframe.denominator = 1;
+       if (a->parm.output.timeperframe.numerator == 0)
+               a->parm.output.timeperframe.numerator = 1;
 
+       a->parm.output.capability = V4L2_CAP_TIMEPERFRAME;
        vfh->timeperframe = a->parm.output.timeperframe;
 
        return 0;
@@ -1413,6 +1416,7 @@ static int isp_video_open(struct file *file)
        handle->format.fmt.pix.colorspace = V4L2_COLORSPACE_SRGB;
        isp_video_pix_to_mbus(&handle->format.fmt.pix, &fmt);
        isp_video_mbus_to_pix(video, &fmt, &handle->format.fmt.pix);
+       handle->timeperframe.numerator = 1;
        handle->timeperframe.denominator = 1;
 
        handle->video = video;
@@ -1532,12 +1536,15 @@ int omap3isp_video_init(struct isp_video *video, const 
char *name)
        video->video.vfl_type = VFL_TYPE_VIDEO;
        video->video.release = video_device_release_empty;
        video->video.ioctl_ops = &isp_video_ioctl_ops;
-       if (video->type == V4L2_BUF_TYPE_VIDEO_CAPTURE)
+       if (video->type == V4L2_BUF_TYPE_VIDEO_CAPTURE) {
                video->video.device_caps = V4L2_CAP_VIDEO_CAPTURE
                                         | V4L2_CAP_STREAMING | V4L2_CAP_IO_MC;
-       else
+               v4l2_disable_ioctl(&video->video, VIDIOC_S_PARM);
+               v4l2_disable_ioctl(&video->video, VIDIOC_G_PARM);
+       } else {
                video->video.device_caps = V4L2_CAP_VIDEO_OUTPUT
                                         | V4L2_CAP_STREAMING | V4L2_CAP_IO_MC;
+       }
 
        video->pipe.stream_state = ISP_PIPELINE_STREAM_STOPPED;
 
_______________________________________________
linuxtv-commits mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to