该程序为USB摄像头驱动程序。
在编写驱动程序之前需要先了解UVC相关的规则, 推荐USB_Video_Payload_MJPEG_1.5文档。UVC规范主要为VC接口与VS接口,其中VC接口用于控制设备的功能,而VS接口用于传输视频数据流。VC中有多个unit实现不同的控制功能,例如PU(process unit)能够控制亮度,白平衡等。VS中有多个formats(数据格式如YUV/MJPEG等),一个formats中有多个frame(分辨率如640*320等大小),实现设置图像数据的格式以及大小。
程序分析:
一.uvc_driver.c
从uvc_init函数开始看:
usb_register(&uvc_driver.driver); //注册usb设备
.driver = {
.name= "uvcvideo",
.probe= uvc_probe,
.disconnect= uvc_disconnect,
.suspend= uvc_suspend,
.resume= uvc_resume,
.reset_resume= uvc_reset_resume,
.id_table= uvc_ids,
.supports_autosuspend = 1,
},
对于uvc_probe函数:
uvc_register_chains(dev)
uvc_register_terms(dev, chain);
uvc_register_video(dev, stream);
vdev = video_device_alloc();
vdev->fops = &