printf("\ttest VIDIOC_G/S_CTRL: %s\n", ok(testSimpleControls(&node)));
printf("\ttest VIDIOC_G/S/TRY_EXT_CTRLS: %s\n", ok(testExtendedControls(&node)));
printf("\ttest VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: %s\n", ok(testControlEvents(&node)));
+ printf("\ttest VIDIOC_G/S_JPEGCOMP: %s\n", ok(testJpegComp(&node)));
printf("\tStandard Controls: %d Private Controls: %d\n",
node.std_controls, node.priv_controls);
printf("\n");
VIDIOC_S_FBUF/OVERLAY
VIDIOC_S/TRY_FMT
VIDIOC_G/S_PARM
- VIDIOC_G/S_JPEGCOMP
VIDIOC_(TRY_)ENCODER_CMD
VIDIOC_G_ENC_INDEX
VIDIOC_REQBUFS/QBUF/DQBUF/QUERYBUF
int testSimpleControls(struct node *node);
int testExtendedControls(struct node *node);
int testControlEvents(struct node *node);
+int testJpegComp(struct node *node);
// I/O configuration ioctl tests
int testStd(struct node *node);
}
return 0;
}
+
+int testJpegComp(struct node *node)
+{
+ struct v4l2_jpegcompression jc;
+ bool have_jpegcomp = false;
+ const unsigned all_markers =
+ V4L2_JPEG_MARKER_DHT | V4L2_JPEG_MARKER_DQT |
+ V4L2_JPEG_MARKER_DRI | V4L2_JPEG_MARKER_COM |
+ V4L2_JPEG_MARKER_APP;
+ int ret;
+
+ memset(&jc, 0, sizeof(jc));
+ ret = doioctl(node, VIDIOC_G_JPEGCOMP, &jc);
+ if (ret != ENOTTY) {
+ warn("The VIDIOC_G_JPEGCOMP ioctl is deprecated!\n");
+ if (ret)
+ return fail("VIDIOC_G_JPEGCOMP gave an error\n");
+ have_jpegcomp = true;
+ if (jc.COM_len < 0 || jc.COM_len > (int)sizeof(jc.COM_data))
+ return fail("invalid COM_len value\n");
+ if (jc.APP_len < 0 || jc.APP_len > (int)sizeof(jc.APP_data))
+ return fail("invalid APP_len value\n");
+ if (jc.quality < 0 || jc.quality > 100)
+ warn("weird quality value: %d\n", jc.quality);
+ if (jc.APPn < 0 || jc.APPn > 15)
+ return fail("invalid APPn value (%d)\n", jc.APPn);
+ if (jc.jpeg_markers & ~all_markers)
+ return fail("invalid markers (%x)\n", jc.jpeg_markers);
+ }
+ ret = doioctl(node, VIDIOC_S_JPEGCOMP, &jc);
+ if (ret != ENOTTY) {
+ warn("The VIDIOC_S_JPEGCOMP ioctl is deprecated!\n");
+ if (ret && ret != EINVAL)
+ return fail("VIDIOC_S_JPEGCOMP gave an error\n");
+ have_jpegcomp = true;
+ }
+
+ return have_jpegcomp ? ret : ENOTTY;
+}