/* A2 参考 uvc_v4l2_do_ioctl */
static int myuvc_vidioc_querycap(struct file *file, void *priv,
struct v4l2_capability *cap)
{
memset(cap, 0, sizeof *cap);
strcpy(cap->driver, "myuvc");
strcpy(cap->card, "myuvc");
cap->version = 1;
cap->capabilities = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING; //视频捕获设备,并且不是用read/write函数来读取视频,而是利用那些ioctl来获取
break;
return 0;
static int myuvc_vidioc_querycap(struct file *file, void *priv,
struct v4l2_capability *cap)
{
memset(cap, 0, sizeof *cap);
strcpy(cap->driver, "myuvc");
strcpy(cap->card, "myuvc");
cap->version = 1;
cap->capabilities = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING; //视频捕获设备,并且不是用read/write函数来读取视频,而是利用那些ioctl来获取
break;
return 0;
}
/* A3 列举支持哪种格式,
* 参考:uvc_driver.c中 uvc_fmts 数组
*/
static int myuvc_vidioc_enum_fmt_vid_cap(struct file *file, void *priv,
struct v4l2_fmtdesc *f) //其实就是设置该函数所传入的结构体f
{
/* 人工查看描述符可知我们用的摄像头只支持1种格式 */
if (f->index >= 1) //index0表示第一种格式
return -EINVAL;
/* 支持什么格式呢?
* 查看VideoStreaming Interface的描述符,
* 得到GUID为"59 55 59 32 00 00 10 00 80 00 00 aa 00 38 9b 71" ,根据GUID来确定格式
*/
strcpy(f->description, "4:2:2, packed, YUYV");
f->pixelformat = V4L2_PIX_FMT_YUYV;
return 0;
}