--- a/v4l2uvc.c +++ b/v4l2uvc.c @@ -179,6 +179,26 @@ init_videoIn(struct vdIn *vd, char *devi v4l2_close(vd->fd); return -1; } + +//subroutine to read menu items of controls with type 3 +static void enumerate_menu (struct v4l2_querymenu querymenu, + struct v4l2_queryctrl queryctrl, int vd) { + printf (" Menu items:\n"); + memset (&querymenu, 0, sizeof (querymenu)); + querymenu.id = queryctrl.id; + for (querymenu.index = queryctrl.minimum; + querymenu.index <= queryctrl.maximum; + querymenu.index++) { + if (0 == ioctl (vd, VIDIOC_QUERYMENU, &querymenu)) { + printf (" index:%d name:%s\n", querymenu.index, querymenu.name); + SDL_Delay(10); + } else { + printf ("error getting control menu"); + break; + } + } +} + int enum_controls(int vd) //struct vdIn *vd) { struct v4l2_queryctrl queryctrl; @@ -193,24 +213,6 @@ int enum_controls(int vd) //struct vdIn v4l2_ioctl(vd,VIDIOC_ENUMINPUT , getinput); printf ("Available controls of device '%s' (Type 1=Integer 2=Boolean 3=Menu 4=Button)\n", getinput->name); - //subroutine to read menu items of controls with type 3 - void enumerate_menu (void) { - printf (" Menu items:\n"); - memset (&querymenu, 0, sizeof (querymenu)); - querymenu.id = queryctrl.id; - for (querymenu.index = queryctrl.minimum; - querymenu.index <= queryctrl.maximum; - querymenu.index++) { - if (0 == ioctl (vd, VIDIOC_QUERYMENU, &querymenu)) { - printf (" index:%d name:%s\n", querymenu.index, querymenu.name); - SDL_Delay(10); - } else { - printf ("error getting control menu"); - break; - } - } - } - //predefined controls printf ("V4L2_CID_BASE (predefined controls):\n"); memset (&queryctrl, 0, sizeof (queryctrl)); @@ -227,7 +229,7 @@ int enum_controls(int vd) //struct vdIn queryctrl.id, queryctrl.name, queryctrl.type, queryctrl.minimum, queryctrl.maximum, queryctrl.step, queryctrl.default_value, control_s.value); if (queryctrl.type == V4L2_CTRL_TYPE_MENU) - enumerate_menu (); + enumerate_menu (querymenu, queryctrl, vd); } else { if (errno == EINVAL) continue; @@ -250,7 +252,7 @@ int enum_controls(int vd) //struct vdIn queryctrl.id, queryctrl.name, queryctrl.type, queryctrl.minimum, queryctrl.maximum, queryctrl.step, queryctrl.default_value, control_s.value); if (queryctrl.type == V4L2_CTRL_TYPE_MENU) - enumerate_menu (); + enumerate_menu (querymenu, queryctrl, vd); } else { if (errno == EINVAL) break;