UVC 1.5於linux gadget實作(1)
目的主要是要實踐H.264 encoding在USB cam上的實作來支援skype以及lync 2013
主要可以參考microsoft-proposed-extensions-usb-video-class-h264.docx這一份文件
這份文件最重要的部分是Appendix B Technical Decisions
以及UVC 1.5 H.264 Implementation Example
Appendix B Technical Decisions裡面的3.Why 2-pin solution?解釋了一個很重要的問題
大概也是很多人從UVC 1.1要改成UVC 1.5最大的卡關之處
就是lync跟skype其實要分成兩個pin
一個是preview pin,專門給lync跟skype preview用
(似乎一定要用640x360的解析度)
另一個pin則是輸出H.264用
那要如何實作才能分成兩個pin呢?
1.encoding unit要實踐
2.output terminal要分成兩個
3.external unit for H.264最好是保留住,才可以向下相容
4.創作兩個streaming interface,將YUV、MJPG寫在其中一個
H.264自己寫成另一個
5.descriptor內的數據先照抄UVC 1.5 H.264 Implementation Example,先騙過UVC host再說
至於gadget內部要怎麼改就看自己內部是怎麼寫了
目前我自己可以實作到lync跟skype都可以抓到裝置且看到preview畫面
但是怎麼讓lync來要H.264 bitstream還是不太清楚
如果有高手知道希望可以不吝指導一下
目前計畫是用Hardware Certification Kit(HCK)來幫忙驗證Webcam H.264
不然好像也無法刻意呼叫H.264能力來使用
主要可以參考microsoft-proposed-extensions-usb-video-class-h264.docx這一份文件
這份文件最重要的部分是Appendix B Technical Decisions
以及UVC 1.5 H.264 Implementation Example
Appendix B Technical Decisions裡面的3.Why 2-pin solution?解釋了一個很重要的問題
大概也是很多人從UVC 1.1要改成UVC 1.5最大的卡關之處
就是lync跟skype其實要分成兩個pin
一個是preview pin,專門給lync跟skype preview用
(似乎一定要用640x360的解析度)
另一個pin則是輸出H.264用
那要如何實作才能分成兩個pin呢?
1.encoding unit要實踐
2.output terminal要分成兩個
3.external unit for H.264最好是保留住,才可以向下相容
4.創作兩個streaming interface,將YUV、MJPG寫在其中一個
H.264自己寫成另一個
5.descriptor內的數據先照抄UVC 1.5 H.264 Implementation Example,先騙過UVC host再說
至於gadget內部要怎麼改就看自己內部是怎麼寫了
目前我自己可以實作到lync跟skype都可以抓到裝置且看到preview畫面
如果有高手知道希望可以不吝指導一下
目前計畫是用Hardware Certification Kit(HCK)來幫忙驗證Webcam H.264
不然好像也無法刻意呼叫H.264能力來使用
留言
張貼留言