Message ID | 20230421124428.393261-9-tomi.valkeinen@ideasonboard.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [v4,1/8] v4l2-ctl: Add routing and streams support | expand |
Hi Tomi, Thank you for the patch. On Fri, Apr 21, 2023 at 03:44:28PM +0300, Tomi Valkeinen wrote: > Return an error if the user tries to use streams related features, but > streams are not supported. > > Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com> Reviewed-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> > --- > utils/v4l2-ctl/v4l2-ctl-subdev.cpp | 55 ++++++++++++++++++++++++++++++ > 1 file changed, 55 insertions(+) > > diff --git a/utils/v4l2-ctl/v4l2-ctl-subdev.cpp b/utils/v4l2-ctl/v4l2-ctl-subdev.cpp > index 7ab64646..ec70b52b 100644 > --- a/utils/v4l2-ctl/v4l2-ctl-subdev.cpp > +++ b/utils/v4l2-ctl/v4l2-ctl-subdev.cpp > @@ -569,6 +569,11 @@ void subdev_set(cv4l_fd &_fd) > if (options[OptSetSubDevFormat] || options[OptTrySubDevFormat]) { > struct v4l2_subdev_format fmt; > > + if (!_fd.has_streams_support() && set_fmt_stream) { > + printf("Streams API not supported.\n"); > + return; > + } > + > memset(&fmt, 0, sizeof(fmt)); > fmt.pad = set_fmt_pad; > fmt.stream = set_fmt_stream; > @@ -617,6 +622,11 @@ void subdev_set(cv4l_fd &_fd) > if (options[OptSetSubDevSelection] || options[OptTrySubDevSelection]) { > struct v4l2_subdev_selection sel; > > + if (!_fd.has_streams_support() && vsel.stream) { > + printf("Streams API not supported.\n"); > + return; > + } > + > memset(&sel, 0, sizeof(sel)); > sel.pad = vsel.pad; > sel.stream = vsel.stream; > @@ -649,6 +659,11 @@ void subdev_set(cv4l_fd &_fd) > if (options[OptSetSubDevFPS]) { > struct v4l2_subdev_frame_interval fival; > > + if (!_fd.has_streams_support() && set_fps_stream) { > + printf("Streams API not supported.\n"); > + return; > + } > + > memset(&fival, 0, sizeof(fival)); > fival.pad = set_fps_pad; > fival.stream = set_fps_stream; > @@ -674,6 +689,11 @@ void subdev_set(cv4l_fd &_fd) > } > } > if (options[OptSetRouting]) { > + if (!_fd.has_streams_support()) { > + printf("Streams API not supported.\n"); > + return; > + } > + > if (doioctl(fd, VIDIOC_SUBDEV_S_ROUTING, &routing) == 0) > printf("Routing set\n"); > } > @@ -731,6 +751,11 @@ void subdev_get(cv4l_fd &_fd) > if (options[OptGetSubDevFormat]) { > struct v4l2_subdev_format fmt; > > + if (!_fd.has_streams_support() && get_fmt_stream) { > + printf("Streams API not supported.\n"); > + return; > + } > + > memset(&fmt, 0, sizeof(fmt)); > fmt.which = V4L2_SUBDEV_FORMAT_ACTIVE; > fmt.pad = get_fmt_pad; > @@ -745,6 +770,11 @@ void subdev_get(cv4l_fd &_fd) > struct v4l2_subdev_selection sel; > unsigned idx = 0; > > + if (!_fd.has_streams_support() && get_sel_stream) { > + printf("Streams API not supported.\n"); > + return; > + } > + > memset(&sel, 0, sizeof(sel)); > sel.which = V4L2_SUBDEV_FORMAT_ACTIVE; > sel.pad = get_sel_pad; > @@ -767,6 +797,11 @@ void subdev_get(cv4l_fd &_fd) > if (options[OptGetSubDevFPS]) { > struct v4l2_subdev_frame_interval fival; > > + if (!_fd.has_streams_support() && get_fps_stream) { > + printf("Streams API not supported.\n"); > + return; > + } > + > memset(&fival, 0, sizeof(fival)); > fival.pad = get_fps_pad; > fival.stream = get_fps_stream; > @@ -784,6 +819,11 @@ void subdev_get(cv4l_fd &_fd) > } > > if (options[OptGetRouting]) { > + if (!_fd.has_streams_support()) { > + printf("Streams API not supported.\n"); > + return; > + } > + > memset(&routing, 0, sizeof(routing)); > memset(routes, 0, sizeof(routes[0]) * NUM_ROUTES_MAX); > routing.which = V4L2_SUBDEV_FORMAT_ACTIVE; > @@ -867,11 +907,21 @@ void subdev_list(cv4l_fd &_fd) > int fd = _fd.g_fd(); > > if (options[OptListSubDevMBusCodes]) { > + if (!_fd.has_streams_support() && list_mbus_codes_stream) { > + printf("Streams API not supported.\n"); > + return; > + } > + > printf("ioctl: VIDIOC_SUBDEV_ENUM_MBUS_CODE (pad=%u,stream=%u)\n", > list_mbus_codes_pad, list_mbus_codes_stream); > print_mbus_codes(fd, list_mbus_codes_pad, list_mbus_codes_stream); > } > if (options[OptListSubDevFrameSizes]) { > + if (!_fd.has_streams_support() && frmsize.stream) { > + printf("Streams API not supported.\n"); > + return; > + } > + > printf("ioctl: VIDIOC_SUBDEV_ENUM_FRAME_SIZE (pad=%u,stream=%u)\n", > frmsize.pad, frmsize.stream); > frmsize.index = 0; > @@ -882,6 +932,11 @@ void subdev_list(cv4l_fd &_fd) > } > } > if (options[OptListSubDevFrameIntervals]) { > + if (!_fd.has_streams_support() && frmival.stream) { > + printf("Streams API not supported.\n"); > + return; > + } > + > printf("ioctl: VIDIOC_SUBDEV_ENUM_FRAME_INTERVAL (pad=%u,stream=%u)\n", > frmival.pad, frmival.stream); > frmival.index = 0;
diff --git a/utils/v4l2-ctl/v4l2-ctl-subdev.cpp b/utils/v4l2-ctl/v4l2-ctl-subdev.cpp index 7ab64646..ec70b52b 100644 --- a/utils/v4l2-ctl/v4l2-ctl-subdev.cpp +++ b/utils/v4l2-ctl/v4l2-ctl-subdev.cpp @@ -569,6 +569,11 @@ void subdev_set(cv4l_fd &_fd) if (options[OptSetSubDevFormat] || options[OptTrySubDevFormat]) { struct v4l2_subdev_format fmt; + if (!_fd.has_streams_support() && set_fmt_stream) { + printf("Streams API not supported.\n"); + return; + } + memset(&fmt, 0, sizeof(fmt)); fmt.pad = set_fmt_pad; fmt.stream = set_fmt_stream; @@ -617,6 +622,11 @@ void subdev_set(cv4l_fd &_fd) if (options[OptSetSubDevSelection] || options[OptTrySubDevSelection]) { struct v4l2_subdev_selection sel; + if (!_fd.has_streams_support() && vsel.stream) { + printf("Streams API not supported.\n"); + return; + } + memset(&sel, 0, sizeof(sel)); sel.pad = vsel.pad; sel.stream = vsel.stream; @@ -649,6 +659,11 @@ void subdev_set(cv4l_fd &_fd) if (options[OptSetSubDevFPS]) { struct v4l2_subdev_frame_interval fival; + if (!_fd.has_streams_support() && set_fps_stream) { + printf("Streams API not supported.\n"); + return; + } + memset(&fival, 0, sizeof(fival)); fival.pad = set_fps_pad; fival.stream = set_fps_stream; @@ -674,6 +689,11 @@ void subdev_set(cv4l_fd &_fd) } } if (options[OptSetRouting]) { + if (!_fd.has_streams_support()) { + printf("Streams API not supported.\n"); + return; + } + if (doioctl(fd, VIDIOC_SUBDEV_S_ROUTING, &routing) == 0) printf("Routing set\n"); } @@ -731,6 +751,11 @@ void subdev_get(cv4l_fd &_fd) if (options[OptGetSubDevFormat]) { struct v4l2_subdev_format fmt; + if (!_fd.has_streams_support() && get_fmt_stream) { + printf("Streams API not supported.\n"); + return; + } + memset(&fmt, 0, sizeof(fmt)); fmt.which = V4L2_SUBDEV_FORMAT_ACTIVE; fmt.pad = get_fmt_pad; @@ -745,6 +770,11 @@ void subdev_get(cv4l_fd &_fd) struct v4l2_subdev_selection sel; unsigned idx = 0; + if (!_fd.has_streams_support() && get_sel_stream) { + printf("Streams API not supported.\n"); + return; + } + memset(&sel, 0, sizeof(sel)); sel.which = V4L2_SUBDEV_FORMAT_ACTIVE; sel.pad = get_sel_pad; @@ -767,6 +797,11 @@ void subdev_get(cv4l_fd &_fd) if (options[OptGetSubDevFPS]) { struct v4l2_subdev_frame_interval fival; + if (!_fd.has_streams_support() && get_fps_stream) { + printf("Streams API not supported.\n"); + return; + } + memset(&fival, 0, sizeof(fival)); fival.pad = get_fps_pad; fival.stream = get_fps_stream; @@ -784,6 +819,11 @@ void subdev_get(cv4l_fd &_fd) } if (options[OptGetRouting]) { + if (!_fd.has_streams_support()) { + printf("Streams API not supported.\n"); + return; + } + memset(&routing, 0, sizeof(routing)); memset(routes, 0, sizeof(routes[0]) * NUM_ROUTES_MAX); routing.which = V4L2_SUBDEV_FORMAT_ACTIVE; @@ -867,11 +907,21 @@ void subdev_list(cv4l_fd &_fd) int fd = _fd.g_fd(); if (options[OptListSubDevMBusCodes]) { + if (!_fd.has_streams_support() && list_mbus_codes_stream) { + printf("Streams API not supported.\n"); + return; + } + printf("ioctl: VIDIOC_SUBDEV_ENUM_MBUS_CODE (pad=%u,stream=%u)\n", list_mbus_codes_pad, list_mbus_codes_stream); print_mbus_codes(fd, list_mbus_codes_pad, list_mbus_codes_stream); } if (options[OptListSubDevFrameSizes]) { + if (!_fd.has_streams_support() && frmsize.stream) { + printf("Streams API not supported.\n"); + return; + } + printf("ioctl: VIDIOC_SUBDEV_ENUM_FRAME_SIZE (pad=%u,stream=%u)\n", frmsize.pad, frmsize.stream); frmsize.index = 0; @@ -882,6 +932,11 @@ void subdev_list(cv4l_fd &_fd) } } if (options[OptListSubDevFrameIntervals]) { + if (!_fd.has_streams_support() && frmival.stream) { + printf("Streams API not supported.\n"); + return; + } + printf("ioctl: VIDIOC_SUBDEV_ENUM_FRAME_INTERVAL (pad=%u,stream=%u)\n", frmival.pad, frmival.stream); frmival.index = 0;
Return an error if the user tries to use streams related features, but streams are not supported. Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com> --- utils/v4l2-ctl/v4l2-ctl-subdev.cpp | 55 ++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+)