UVC_APP源码分析
虚线表示:该任务的主循环;
check_uvc_video_id : 检测是否有可用的视频输出设备一般检查/sys/class/video4linux/
add_uvc_video: 根据检测出的id,添加可用的视频输出设备,创建uvc gadget线程
uvc_read_camera_buffer: 将摄像头数据(原始、处理后、模拟图片等)按照uvc格式进行编码、流缓存处理
uvc_encode_process: 根据uvc配置进行摄像头流数据压缩处理,一般格式V4L2可编码转化为YUYV/MJPEG/H264
uvc_buffer_write:将编码后的数据通过读写双缓冲方式交于gadget线程处理,即由gadget交付给Host端
uvc_open:根据id打开视频输出设备,并导入默认配置如亮度、对比度等
uvc_events_init: 初始化uvc设备的,设置应用监听的uvc host事件、例如配置控制、流设置、流打开、流关闭
uvc_events_process:uvc事件处理、主要是VC、VS事件
uvc_video_process:gadget线程处理摄像头线程发送过来的数据
uvc_events_process_setup:VC事件处理
uvc_events_process_data:VS事件处理
uvc_events_process_class:UVC类控制端点事件处理,包括控制事件、流控制事件
uvc_events_process_control: UVC类控制事件处理、例如设置灰度、亮度、对比度、饱和度、 背光补偿、锐度等
uvc_events_process_streaming: 流控制处理
uvc_events_process_control_data: UVC流控制数据处理,例如传递外部数据等
uvc_handle_streamon_event: 该接口在流打开或者host请求时调用,用于HOST请求设置分辨率。
先分析到这里,后续一些细节还需要深入研究、例如数据拷贝、事件监听、热插拔过程以及UVC协议数据格式等。