裝載 【搞定android驅動USB攝像頭】 方法

最近項目需使用USB攝像頭拍照,正好找到此文,先收錄 摘抄如下: 

原文地址爲 :  http://blog.csdn.net/sukhoi27smk/article/details/18269097        


多虧了stackoverflow看到的一篇帖子,其中有幾句關鍵的話,然後順藤摸瓜解決了問題。
帖子大意:
討論的前提是你的USB攝像頭是UVC兼容的(如今大部分攝像頭兼容)
默認Android不提供訪問外部攝像頭的API,所以你要考慮寫一個內核到Android應用層通信的中間件。
當你給設備接入了USB攝像頭,首先要檢查一下幾點:
1)你的設備是否支持USB-OTG?
2)是否在/dev目錄創建了設備?如果創建了就那麼一切就很簡單了。shell 執行 ls -l /dev/v*,你將會看到video0或者video1。
3)如果/dev沒有創建設備,你需要寫一個固件(UVC)跟硬件通信
(帖子地址:http://stackoverflow.com/questio ... android-application)
讀到這裏,再次給我的MK802接上USB攝像頭,然後打開adb shell,執行ls -l /dev/v*,看到了 /dev/video0設備!
拔掉攝像頭,再執行,video0消失,再連接,video0出現,這說明mk802支持我的攝像頭!

到此,已經明確,下一步我需要寫一個android應用層到內核通信的中間件,我對這個也不瞭解,於是在google狂搜“android usb camera”
終於功夫不負有心,找到了一個android usb攝像頭的應用例子
http://brain.cc.kogakuin.ac.jp/research/usb-e.html
從中找了一個SimpleWebCamra.apk,下載了趕緊裝上,發現不能運行,logcat報一個錯,提示沒有權限訪問video0設備。
這是爲什麼?我的系統已經root了呀!難道我的apk也要獲得root權限?又在網上查資料,試了半天,還是不行。
後來忽然靈機一動,android也是linux呀,我能不能把video0設備設置成沒權限?問了問朋友,執行了一個命令:
chmod 777 /dev/video0 
再次運行apk終於跑起來了!(後來經測試,設置成 chmod 0666 /dev/vidoe0 也可以,但是我也不懂0666的含義。。)
但是問題又來了,程序進去以後,報錯
VIDIOC_DQBUF error 22, Invalid argument

於是想,必須要活的SimpleWebCamea的源碼了!經過苦苦搜索,很幸運的找到一個simplewebcam的源碼:
https://bitbucket.org/neuralassembly/simplewebcam/src
下載一看,裏邊包含ndk的c源碼和android源碼,於是按照ndk教程,安裝了cygwin
苦於c代碼看不太懂,錯誤提示VIDIOC_DQBUF 調用參數錯誤,卻無從下手。
於是看了n篇教程,偶然發現說打開攝像頭設備的open方法的一些參數,然後試着把c代碼中的一些參數去掉:
fd = open (dev_name, O_RDWR | O_NONBLOCK, 0);
改爲
fd = open (dev_name, O_RDWR);
再次build,運行,天啊終於出來了,高興死了!



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章