1. 程式人生 > >第十八篇:融匯貫通--談USB Video Class驅動

第十八篇:融匯貫通--談USB Video Class驅動

USB Video Class驅動是WINDOWS系統包含的一個針對於USB VIDEO 類的驅動程式.


好多project師都做過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驅動的project師都瞭解,AVStream/BDA的架構的複雜程度, 與裝置端的程式的直觀性, 易理解性,易除錯性,都不是一個數量級的.

要真正從底層到頂層, 一個USB VIDEO CLASS裝置的理解, 包含USB DEVICE CONTROLLER, CMOS, FIRMWARE/LINUX GADGET, 還包含, AVSTREAM/BDA架構與細節, DShow, 等一系列的內容.