第2课第1.1.7节 从零写USB摄像头驱动之实现数据传输2_简单函数

/* 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;

}



/* 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;
}

猜你喜欢

转载自blog.csdn.net/hahaha_2017/article/details/79973009
今日推荐