1. 程式人生 > >android、windows上多個USB Camera同時使用實驗小結

android、windows上多個USB Camera同時使用實驗小結

androidwindows上多個USB Camera同時使用實驗小結

           USB Camera是個不錯的東西,但是多個USB Camera能同時開啟使用嗎?筆者在windows PC上做過實驗,分兩種情況:

        實驗一:將兩個USB Camera分別接到PC上兩個USB host介面上,可以同時預覽攝像頭,截圖如下:

 

          實驗二:將兩個USB Camera通過同一個USB HUB接到PC1USB host介面上,同一時間只能預覽一個攝像頭,兩個分開使用都能工作,只是不能同時工作,截圖如下:

 

          在android

平臺,筆者也做了上面說的實驗二,情況一樣,也是同一時間只能有一個在工作。實驗條件:先讓一個camera工作在後臺,通過寫一個mediarecoder的應用,在退出應用的時候不做mMediaRecorder.stop();這樣這個camera就會一直在錄影,後臺一直在處理它的資料。另外,寫一個類似camera程式,只要可以預覽就可以了,筆者也做了一個這樣的應用,連hal層、JNIapk都獨立些一套。但是在執行這個應用的時候,會出現一些錯誤:

[ 1342.944561] uvcvideo: uvc_v4l2_mmap
[ 1342.944714] uvcvideo: uvc_v4l2_mmap
[ 1342.944853] uvcvideo: uvc_v4l2_mmap

[ 1342.961262] uvcvideo: Device requested 956 B/frame bandwidth.
[ 1342.961280] uvcvideo: Selecting alternate setting 6 (956 B/frame bandwidth).
[ 1342.964808] uvcvideo: Allocated 5 URB buffers of 32x956 bytes each.
[ 1342.965079] uvcvideo: Failed to submit URB 0 (-28).
01-01 09:45:42.970 D/UVCDecHW( 4504): TO VIDIOC_REQBUFS count: 4[ 1342.967080] sw-ohci sw-ohci.1: leak ed ffdfb240 (#81) state 2

01-01 09:45:42.990 D/UVCDecHW( 4504): index: 0, mem: 520c6000, len: 25800, offset: 0
01-01 09:45:42.990 D/UVCDecHW( 4504): index: 1, mem: 520ec000, len: 25800, offset: 26000
01-01 09:45:42.990 D/UVCDecHW( 4504): index: 2, mem: 52112000, len: 25800, offset: 4c000
01-01 09:45:42.990 D/UVCDecHW( 4504): index: 3, mem: 52138000, len: 25800, offset: 72000
01-01 09:45:43.010 E/UVCDecHW( 4504): StartStreaming: Unable to start capture: No space left on device
01-01 09:45:43.010 E/UVCDecHW( 4504): ERROR: v4l2Init, line: 565
01-01 09:45:43.010 E/UVCDecHW( 4504): ERROR: startUVCDecoder, line: 23

筆者嘗試在android平臺上做實驗一,也沒有成功。實驗方法還是一樣的,因為不同US B Host介面進去,都是產生video裝置檔案。出錯資訊稍微有些不一樣,如下:

[   67.781802] uvcvideo: uvc_v4l2_mmap
[   67.799917] uvcvideo: uvc_v4l2_mmap
[   67.800834] uvcvideo: uvc_v4l2_mmap
[   67.801773] uvcvideo: uvc_v4l2_mmap
[   67.820917] uvcvideo: Device requested 3072 B/frame bandwidth.
[   67.820936] uvcvideo: Selecting alternate setting 6 (3072 B/frame bandwidth).
[   67.831425] uvcvideo: Allocated 5 URB buffers of 32x3072 bytes each.
[   67.831485] WRN:L2837(drivers/usb/sun7i_usb/hcd/core/sw_hcd_host.c):ERR: sw_hcd_urb_enqueue, ep packet is too big, maxpacket = 5120
[   67.831513] uvcvideo: Failed to submit URB 0 (-90).
[   67.832153] [sw_hcd]: sw_hcd_h_disable, epnum = 81
[   69.474063] [fantasy] wrn dbs_check_cpu, 1227 : try to switch cpu freq to 672000 
[   72.574266] [fantasy] wrn dbs_check_cpu, 1227 : try to switch cpu freq to 480000 
[   75.444027] [fantasy] wrn cpu need plugout, cpus_load_max:85<30 && cpus_rq_max: 189<200
[   75.458793] CPU1: shutdown

      從筆者目前瞭解到的情況是,同一個USB host只能同時工作一個USB video裝置,但是還是可以掛多個USB video裝置。在android平臺上兩個usb host也沒有同時跑起兩個usb camera,但是windows系統上可以。裡面還是有很多東西需要研究。