static int print_control(int fd, struct v4l2_query_ext_ctrl &qctrl, int show_menus) { struct v4l2_control ctrl; struct v4l2_ext_control ext_ctrl; struct v4l2_ext_controls ctrls; memset(&ctrl, 0, sizeof(ctrl)); memset(&ext_ctrl, 0, sizeof(ext_ctrl)); memset(&ctrls, 0, sizeof(ctrls)); if (qctrl.flags & V4L2_CTRL_FLAG_DISABLED) return 1; if (qctrl.type == V4L2_CTRL_TYPE_CTRL_CLASS) { printf("\n%s\n\n", qctrl.name); return 1; } ext_ctrl.id = qctrl.id; if ((qctrl.flags & V4L2_CTRL_FLAG_WRITE_ONLY) || qctrl.type == V4L2_CTRL_TYPE_BUTTON) { print_qctrl(fd, &qctrl, &ext_ctrl, show_menus); return 1; } if (qctrl.type >= V4L2_CTRL_COMPOUND_TYPES) { print_qctrl(fd, &qctrl, NULL, show_menus); return 1; } ctrls.ctrl_class = V4L2_CTRL_ID2CLASS(qctrl.id); ctrls.count = 1; ctrls.controls = &ext_ctrl; if (qctrl.type == V4L2_CTRL_TYPE_INTEGER64 || qctrl.type == V4L2_CTRL_TYPE_STRING || (V4L2_CTRL_ID2CLASS(qctrl.id) != V4L2_CTRL_CLASS_USER && qctrl.id < V4L2_CID_PRIVATE_BASE)) { if (qctrl.type == V4L2_CTRL_TYPE_STRING) { ext_ctrl.size = qctrl.maximum + 1; ext_ctrl.string = (char *)malloc(ext_ctrl.size); ext_ctrl.string[0] = 0; } if (test_ioctl(fd, VIDIOC_G_EXT_CTRLS, &ctrls)) { printf("error %d getting ext_ctrl %s\n", errno, qctrl.name); return 0; } } else { ctrl.id = qctrl.id; if (test_ioctl(fd, VIDIOC_G_CTRL, &ctrl)) { printf("error %d getting ctrl %s\n", errno, qctrl.name); return 0; } ext_ctrl.value = ctrl.value; } print_qctrl(fd, &qctrl, &ext_ctrl, show_menus); if (qctrl.type == V4L2_CTRL_TYPE_STRING) free(ext_ctrl.string); return 1; }
static int print_control(int fd, struct v4l2_queryctrl &qctrl, int show_menus) { struct v4l2_control ctrl = { 0 }; struct v4l2_ext_control ext_ctrl = { 0 }; struct v4l2_ext_controls ctrls = { 0 }; if (qctrl.flags & V4L2_CTRL_FLAG_DISABLED) return 1; if (qctrl.type == V4L2_CTRL_TYPE_CTRL_CLASS) { printf("\n%s\n\n", qctrl.name); return 1; } ext_ctrl.id = qctrl.id; ctrls.ctrl_class = V4L2_CTRL_ID2CLASS(qctrl.id); ctrls.count = 1; ctrls.controls = &ext_ctrl; if (V4L2_CTRL_ID2CLASS(qctrl.id) != V4L2_CTRL_CLASS_USER && qctrl.id < V4L2_CID_PRIVATE_BASE) { if (ioctl(fd, VIDIOC_G_EXT_CTRLS, &ctrls)) { printf("error %d getting ext_ctrl %s\n", errno, qctrl.name); return 0; } } else { ctrl.id = qctrl.id; if (ioctl(fd, VIDIOC_G_CTRL, &ctrl)) { printf("error %d getting ctrl %s\n", errno, qctrl.name); return 0; } ext_ctrl.value = ctrl.value; } print_qctrl(fd, &qctrl, &ext_ctrl, show_menus); return 1; }
static void deal_qctrl(struct v4l2_queryctrl *qctrl) { print_qctrl(qctrl); if (qctrl_name && !strcmp(qctrl_name, qctrl->name)) set_qctrl(qctrl); }