USB Video Class驱动是WINDOWS系统包含的一个针对于USB VIDEO 类的驱动程序.
好多工程师都做过USB VIDEO设备端的开发, 主要的工作内容为: 使用FIRMWARE,或者LIINUX GADGET驱动程序, 构建USB VIDEO设备的描述符, 通过这些描述符的TOPOLOGY关系, 让系统了解,设备所支持的某些控制, 支持的视频格式, 系统驱动通过对这些描述符的解释, 构建自己的KS, FILTER, NODE, PIN网络, 属性, 方法, 最终, 又由这些FILTER, NODE, PIN的属性,方法提供的接口,供DShow展现给上层应用.
设备端需要LENS的视频数据(VSYNC,HSYNC, DATA)打成USB VIDEO类型的包, 加上12字节的头, 通过BULK或者ISO EP往上层传输, 相应的PROBE/COMMIT, 视频属性的控制,最终都是将上层的CLASS REQUEST转化为底层硬件的设置.
设备端的开发, 可以说,只是一部分, 对整个系统的了解,也只是较小的一块.
WINDOWS帮助USB VIDEO CLASS的系统实现了更多的部分.
USBVIDEO.SYS作为PIN-CENTRIC 的AVSTREAM minidriver, 根据设备的描述符, 创建了filter factory(同时对对设备的INPUT,OUTPUT terminal).
利用设备描述符内容, USB VIDEO CLASS驱动, 在系统内部构建了FILTER, NODE, 与CONNECTIONS建立的一张GRAPH.
同时,通过描述符中相应的控制CONTROL, USB VIDEO CLASS也在FILTER, PIN, NODE的描述符及其属性中加入相应的AUTOMATION TABLES.
根据描述符中的视频数据格式, 驱动同样向KS提交数据范围的列表以及数据交集的处理名柄.
该驱动同样为音视频同步做了考虑, 主旨是通过KS的MASTER CLOCK给视频数据打上时间戳, 作为同步需求的参考时间.
为了和驱动交互, 应用程序通过DShow COM 接口来达到应用的目的.
做过AVStream/BDA驱动的工程师都了解,AVStream/BDA的架构的复杂程度, 与设备端的程序的直观性, 易理解性,易调试性,都不是一个数量级的.
要真正从底层到顶层, 一个USB VIDEO CLASS设备的理解, 包括USB DEVICE CONTROLLER, CMOS, FIRMWARE/LINUX GADGET, 还包括, AVSTREAM/BDA架构与细节, DShow, 等一系列的内容.
第十八篇:融汇贯通--谈USB Video Class驱动,布布扣,bubuko.com