@@ -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(+)