1. 程式人生 > >USB Video Class Specification 筆記

USB Video Class Specification 筆記

關於USB Class 將裝置歸為既定的類別,並對相應類別的裝置的在USB協議的應用級協議和介面作出規範,這樣只要按照類裝置的標準實現驅動程式和裝置,則一套驅動可以驅動這一類的所有裝置,而這一類裝置可以在已經包含這一類裝置驅動程式的作業系統中實現“免驅”。比較常見的類裝置是移動儲存裝置Massstorageclass,常見的行動硬碟和U盤都是這類裝置,應用層協議種類有CBI(應用層使用UFI)和更加常見Bulk-Only(使用SCSIProtocl Specification - 2)等,而Webcam等視訊裝置也正是這樣一類裝置歸為Video Class。 更多Device Class參見:
備註: 1.Video Class描述符眾多,各描述之間的層次複雜,AVEO Webcam其GetConfiguration返回359位元組的資料- -!。 2.術語不譯作中文,是為了避免閱讀驅動程式碼(位於核心樹drivers/media/video/uvc)時中英文概念對照理解錯誤。 3.不同裝置其傳輸的視訊資料型別不同,Specification中下設幾個文件。筆記以此 AVEO Webcam(市面售價50元)為例:
Webcam引數(描述符中得到): ? 不具有視訊壓縮功能,影象格式為YUV422 ? 支援640x480 320x240 160x120三檔解析度 ? 幀率只支援30 fps一檔 ? 1個Interrupt IN端點,1個Isochronous IN端點,其中Isochronous端點具有524 7801020 2040 3060 5檔可調。2040 3060為High-Bandwidth Isochronous傳輸方式Multi分別為2和3。 ? Still Image -> 支援從視訊流中抓取影象方式拍照,無獨立Bulk端點傳輸拍照影象。 ? Payload型別為 based
USB Video Class Specification
概述 VideoClass裝置描述位於USB協議的Interface級,每個裝置的Interface分為兩類VideoControlInterface(僅僅只用一個)和VideoStreamingInterface(可以具有多個),而與裝置的一個相關的所有的USB Interface被稱作為一個VideoInterface Collection使用IAD(Interface Association Deor)描述符來描述。
USB協議級解釋:為裝置的一種功能比如一個USB裝置又是優盤又是藍芽發射器,這就是一個裝置的兩個。 Video Class位於USB協議的Interface級,Interface 描述符中Class code為0xE,其下面分為4個Subclass: Undefined:0x0 VC Interface Subclass:0x1(VC的USB Interface Deor中Subclass標記為此值)。 VS Interface Subclass:0x2(VS的USB Interface Deor中Subclass標記為此值)。 Video Interface Collection Subclass:0x3(IAD的USB Interface Deor中Subclass標記此值)。 複合裝置擁有多個->Video Interface Collenction,也會擁有多個IAD。
的拓撲結構(基本概念,物件化理解)
被劃分為一系列可定址的Entity,而Entity被分為兩類:Unit和Terminal。每個Entity都有其輸入和輸出,從1開始計數。
Unit:(使用Unit Deor描述) 的基本組成模組劃分。每個Unit Entity可以有多個輸入,但只能有一個輸出。一個輸出可以與多個其他Unit的輸入相連,而一個輸入只能與一個輸出相連。
Terminal:(使用 Terminal Deor描述) 分為Input Terminal和Output Terminal,InputTerminal為資料流的起點,資料流的提供者(比如說一個CCD,一個視訊輸入端子,一個USB的OUT端點),而OutputTerminal為資料流的終點,資料流的消費者(比如USB的IN端點,裝置上的LCD顯示屏等)。每個TerminalEntity只有一個輸入或輸出。
基本上目前的都是由下面的Entity組成: ? Input Terminal
? Output Terminal
? Selector Unit
? Processing Unit
? Extension Unit 另外還有另外兩種Terminal,他們擴充套件了Specification中Terminal Deor的域: ? Media Transport Terminal ? Camera Terminal
隨著裝置功能的豐富,會出現更多的型別的Unit和Terminal。
Video Control: Entity的每個特性(可以理解為可控引數)的描述被稱為一個Control(比如Webcam的Processing Unit中的亮度),而每個特性(Control)又有一系列的屬性(Attribute): ? Current setting
? Minimum setting
? Maximum setting
? Resolution
? Size
? Default
類似寫VB程式,首先看看程式()需要哪些控制元件/積木(Entity),然後把控制元件拖過來,確定一下控制元件之間的關係(Input/Output),然後配配控制元件的屬性(Control),而每個控制元件有不同的屬性,每個屬性又有不同的限制,比如最大值最小值,能輸入多少個字(Attribute)。
由此可見Video Class Specification的概念設計是完全面向物件的,這種協議設計/裝置設計方式為整個軟硬體系統的構建和擴充提供了極大的方便和靈活,當然同時也因此使得描述變得複雜。
Selector Unit: 擁有多個輸入和輸出,可以通過Control選擇將多個輸入中的一個與其輸出連線。
Processing Unit: 擁有一個輸入和輸出,提供下面一系列Control控制流過本Unit的視訊流影象的屬性:
User Control(供使用者設定)
? Brightness
? Contrast
? Hue
? Saturation
? Sharpness
? Gamma ? Digital Multiplier (Zoom)
Auto Controls(提供使用者開關選項->比如是否啟用自動白平衡)
? White Balance Temperature
? White Balance Component ? Backlight Compensation 與Auto模式的相關的Control在Auto模式被開啟時,配置無效,在Auto模式關閉後所有Control為使用者原先設定的值。
Other
? Gain
? Power Line Frequency
? Analog Video Standard ? Analog Video Lock Status
Extension Unit 擁有多個輸入和一個輸出。用於裝置廠商自行擴充套件。

操作模型(USB協議級視角)
Video Interface Collection 在USB協議級表現為IAD,作為GetDeor(Configuration)請求的返回的一部分。IAD必須位於VCInterface和VS Interface描述符之前(通常是ConfigurationDeor後面緊接著就是IAD),所有相關聯的Interface號必須連續。
VideoControl Interface 一個Control Endpoint用來控制Uniti和Terminal的設定和收取狀態資訊,預設使用Endpoint 0。 一個Interrupt Endpoint用來返回狀態,可選。在裝置具有下面的特性時使用: ? 裝置支援硬體觸發Still Image(比如這個AVEO攝像頭,具有拍照按鍵,按下一次按鍵,在協議分析儀上可以看到一個Interrupt IN Transaction)。 ? 裝置實現AutoUpdate Control(這個攝像頭沒有,應該是其Control被裝置更新了以後,通過Interrupt端點通知Host)。 ? 裝置實現非同步Control(有些Control的配置到生效的時間>10ms,則使用非同步方式,在生效以後裝置通過Interrupt端點通知Host,則Host再過來查詢引數)。
Still Image Capture(抓取靜止影象,Linux中的uvc似乎尚未支援,屬於VideoStream Interface,但是放在這裡介紹了) 模式1 - 收到硬體按鍵中斷以後,Host端軟體直接從視訊流中儲存一幀,裝置不必停止和改變視訊流。但是抓取影象的各項引數總是和視訊流中的相同。 模式2 - 如果裝置支援高質量靜止影象抓取,裝置會在視訊流的Payload Header中標記有StillImage正在Pending,Host端軟體應當掛起視訊流,選擇合適的頻寬和Inferface的AltSetting,傳送VS_STILL_IMAGE_TRIGGER_CONTROL請求並且標記Transmit Still Image,則裝置開始傳輸StillImage,傳輸完畢,Host端軟體恢復先前的設定並繼續視訊流。此模式缺點是會打斷視訊流。 模式3 - 裝置支援高質量靜止影象抓取,通過一個獨立的Bulk端點來傳輸靜止影象。分為Host端主動發起和裝置端按鍵發起兩種方式。
VideoStream Interface 用來在Host和端互動資料,使用一個Isochronous或是Bulk端點傳輸視訊流。