summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEugene Syromyatnikov <evgsyr@gmail.com>2020-03-04 13:37:29 +0100
committerEugene Syromyatnikov <evgsyr@gmail.com>2020-03-23 13:32:14 +0100
commit1f5e9a724e70949c14add3f68cdb5290f5aee6de (patch)
tree2ea1f0419a18b28c318237aac47657bbb7fa40a4
parentcdd04d166dbb0ae598ba2ad8efe66cbf78b716a9 (diff)
downloadstrace-1f5e9a724e70949c14add3f68cdb5290f5aee6de.tar.gz
v4l2: decode VIDIOC_QUERYSTD command
-rw-r--r--tests/ioctl_v4l2-success.c3
-rw-r--r--tests/ioctl_v4l2.c10
-rw-r--r--v4l2.c3
-rw-r--r--xlat/v4l2_ioctl_cmds.in2
4 files changed, 14 insertions, 4 deletions
diff --git a/tests/ioctl_v4l2-success.c b/tests/ioctl_v4l2-success.c
index ce67506b0..94f7fefcf 100644
--- a/tests/ioctl_v4l2-success.c
+++ b/tests/ioctl_v4l2-success.c
@@ -1022,10 +1022,11 @@ main(int argc, char **argv)
}
- /* VIDIOC_G_STD, VIDIOC_S_STD */
+ /* VIDIOC_G_STD, VIDIOC_S_STD, VIDIOC_QUERYSTD */
static const struct strval32 stdid_cmds[] = {
{ ARG_STR(VIDIOC_G_STD) },
{ ARG_STR(VIDIOC_S_STD) },
+ { ARG_STR(VIDIOC_QUERYSTD) },
};
static const struct strval64 stdids[] = {
{ ARG_XLAT_KNOWN(0, "V4L2_STD_UNKNOWN") },
diff --git a/tests/ioctl_v4l2.c b/tests/ioctl_v4l2.c
index 2aa5ad9e1..626f8cc12 100644
--- a/tests/ioctl_v4l2.c
+++ b/tests/ioctl_v4l2.c
@@ -593,7 +593,6 @@ main(void)
{ ARG_STR(VIDIOC_S_FREQUENCY) },
{ ARG_STR(VIDIOC_G_JPEGCOMP) },
{ ARG_STR(VIDIOC_S_JPEGCOMP) },
- { ARG_STR(VIDIOC_QUERYSTD) },
{ ARG_STR(VIDIOC_ENUMAUDIO) },
{ ARG_STR(VIDIOC_ENUMAUDOUT) },
{ ARG_STR(VIDIOC_G_PRIORITY) },
@@ -1181,6 +1180,15 @@ main(void)
"]) = -1 EBADF (%m)\n",
XLAT_STR(VIDIOC_S_STD));
+ /* VIDIOC_QUERYSTD */
+ ioctl(-1, VIDIOC_QUERYSTD, 0);
+ printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n",
+ XLAT_STR(VIDIOC_QUERYSTD));
+
+ ioctl(-1, VIDIOC_QUERYSTD, page);
+ printf("ioctl(-1, %s, %p) = -1 EBADF (%m)\n",
+ XLAT_STR(VIDIOC_QUERYSTD), page);
+
/* VIDIOC_ENUMSTD */
ioctl(-1, VIDIOC_ENUMSTD, 0);
printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n",
diff --git a/v4l2.c b/v4l2.c
index cd22bd046..bb82e4da2 100644
--- a/v4l2.c
+++ b/v4l2.c
@@ -1264,7 +1264,8 @@ MPERS_PRINTER_DECL(int, v4l2_ioctl, struct tcb *const tcp,
case VIDIOC_G_STD: /* R */
case VIDIOC_S_STD: /* W */
- return printnum_v4l2_std_id(tcp, arg, code == VIDIOC_G_STD);
+ case VIDIOC_QUERYSTD: /* R */
+ return printnum_v4l2_std_id(tcp, arg, code != VIDIOC_S_STD);
case VIDIOC_ENUMSTD: /* RW */
return print_v4l2_standard(tcp, arg);
diff --git a/xlat/v4l2_ioctl_cmds.in b/xlat/v4l2_ioctl_cmds.in
index 395ad87b5..a93108bf5 100644
--- a/xlat/v4l2_ioctl_cmds.in
+++ b/xlat/v4l2_ioctl_cmds.in
@@ -46,7 +46,7 @@ VIDIOC_G_CROP _IOWR('V', 59, struct v4l2_crop)
VIDIOC_S_CROP _IOW ('V', 60, struct v4l2_crop)
/* VIDIOC_G_JPEGCOMP _IOR ('V', 61, struct v4l2_jpegcompression) */
/* VIDIOC_S_JPEGCOMP _IOW ('V', 62, struct v4l2_jpegcompression) */
-/* VIDIOC_QUERYSTD _IOR ('V', 63, uint64_t) */ /* v4l2_std_id */
+VIDIOC_QUERYSTD _IOR ('V', 63, uint64_t) /* v4l2_std_id */
VIDIOC_TRY_FMT _IOWR('V', 64, struct_v4l2_format)
/* VIDIOC_ENUMAUDIO _IOWR('V', 65, struct v4l2_audio) */
/* VIDIOC_ENUMAUDOUT _IOWR('V', 66, struct v4l2_audioout) */