INFO_FL_FUNC:APP发出的ioctl,交给drivers\media\v4l2-core\v4l2-ioctl.c,它先进行一些特殊处理后,再调用底层的video_device->ioctl_ops->xxxx(...) drivers\media\v4l2-core\v4l2-ioctl.c 使用IOCTL_INFO_FNC定义的数组项,表示它是INFO_FL_FUNC类型的 使用IOCTL_INFO_STD定义的数组项,表示它是INFO_FL_STD...
IOCTL_INFO_FNC(VIDIOC_ENUMINPUT, v4l_enuminput, v4l_print_enuminput,INFO_FL_CLEAR(v4l2_input, index)), IOCTL_INFO_FNC(VIDIOC_G_CTRL, v4l_g_ctrl, v4l_print_control,INFO_FL_CTRL|INFO_FL_CLEAR(v4l2_control, id)), IOCTL_INFO_FNC(VIDIOC_S_CTRL, v4l_s_ctrl, v4l_print_control,INFO_FL...
当然是:info = &v4l2_ioctls[_IOC_NR(cmd)]; static struct v4l2_ioctl_info v4l2_ioctls[] = {//.ioctl, .u.func, .debug, .flags IOCTL_INFO_FNC(VIDIOC_QUERYCAP, v4l_querycap, v4l_print_querycap, 0),//列举性能 IOCTL_INFO_FNC(VIDIOC_ENUM_FMT, v4l_enum_fmt, v4l_print_fmtdesc, INFO_F...
IOCTL_INFO_FNC(VIDIOC_ENUM_FMT, v4l_enum_fmt, v4l_print_fmtdesc, INFO_FL_CLEAR(v4l2_fmtdesc, type)), IOCTL_INFO_FNC(VIDIOC_G_FMT, v4l_g_fmt, v4l_print_format, 0), IOCTL_INFO_FNC(VIDIOC_S_FMT, v4l_s_fmt, v4l_print_format, INFO_FL_PRIO), IOCTL_INFO_FNC(VIDIOC_REQBUFS, v4l_...
如果info->flags是INFO_FL_FUNC,直接调用info->u.func(ops, file, fh, arg)函数 那info又是怎么确定的呢?当然是:info = &v4l2_ioctls[_IOC_NR(cmd)]; staticstructv4l2_ioctl_info v4l2_ioctls[] = {//.ioctl, .u.func, .debug, .flagsIOCTL_INFO_FNC(VIDIOC_QUERYCAP, v4l_querycap, v4l_print_...