/*打开设备描述符*/
1. open:
uvc_v4l2_open/*查询设备属性*/
2. VIDIOC_QUERYCAPif (video->streaming->type ==V4L2_BUF_TYPE_VIDEO_CAPTURE)
cap->capabilities =V4L2_CAP_VIDEO_CAPTURE|V4L2_CAP_STREAMING;elsecap->capabilities =V4L2_CAP_VIDEO_OUTPUT|V4L2_CAP_STREAMING;/*枚举设备支持的格式*/
3. VIDIOC_ENUM_FMT
format= &video->streaming->format[fmt->index];/*得到设备当前所使用的 format 与 frame*/
4. VIDIOC_G_FMT
uvc_v4l2_get_formatstruct uvc_format *format = video->streaming->cur_format;struct uvc_frame *frame = video->streaming->cur_frame;/*Check if the hardware supports the requested format.*/
5. VIDIOC_TRY_FMT
uvc_v4l2_try_format/*设置数据,此时并没有真正的设置,而是在启动视频流时将数据发送给设备*/
6. VIDIOC_S_FMT
uvc_v4l2_set_format
uvc_v4l2_try_format
video->streaming->cur_format =format;
video->streaming->cur_frame =frame;/*分配视频缓冲区*/
7. VIDIOC_REQBUFS
uvc_alloc_buffersfor (; nbuffers > 0; --nbuffers) {
mem= vmalloc_32(nbuffers *bufsize);if (mem !=NULL)break;
}/*查询并获取到分配的缓冲区信息*/
8. VIDIOC_QUERYBUF
uvc_query_buffer
__uvc_query_buffer/*映射缓冲区地址到用户空间*/
9. mmap
uvc_v4l2_mmap/*将 V4L2 信息块放入队列*/
10. VIDIOC_QBUF
uvc_queue_buffer
list_add_tail(&buf->queue, &queue->irqqueue);
list_add_tail(&buf->stream, &queue->mainqueue);/*设置设备并启动视频流*/
11. VIDIOC_STREAMON
uvc_video_enable(video,1)/*Commit the streaming parameters.*/uvc_commit_video/*设置 format, frame*/uvc_set_video_ctrl/*启动:Initialize isochronous/bulk URBs and allocate transfer buffers.*/uvc_init_video(video, GFP_KERNEL);
uvc_init_video_isoc/uvc_init_video_bulk
usb_submit_urb/*休眠等待数据*/
12. poll
uvc_v4l2_poll
uvc_queue_poll
poll_wait(file,&buf->wait, wait);/*取出信息块*/
13. VIDIOC_DQBUF
uvc_dequeue_buffer
list_del(&buf->stream);/*关闭视频流*/
14. VIDIOC_STREAMOFF
uvc_video_enable(video,0);
usb_kill_urb(urb);
usb_free_urb(urb);
驱动分析,首先找到 UVC 驱动的入口点:struct uvc_driver uvc_driver ={
.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,
},
};
usb_register(&uvc_driver.driver);
本文详细介绍了UVC驱动的工作流程,包括设备描述符的打开、设备属性的查询、设备支持格式的枚举等关键步骤,并深入解析了视频流的启动与管理过程。
2901

被折叠的 条评论
为什么被折叠?



