最近要在我们的某Android设备上添加USB Camera,之前没有神马经验。加上以前做过这个的同事很忙,也不好相处,问了十句话才给我回复一句话这样子的情况,我很郁闷,就把添加的过程全部写出来
本菜鸟也是刚接触Android的开发。所以写的尽量简单明了。、
其实Camera的开发各个书上或者博客上都有写,但是没有写具体如何做。笨鸟我也晃了几天没什么进展。
以下摘抄自我桌上的一本<Android多媒体应用实战开发实战详解> 王石磊等编著:
Android的Camera系统包括了Camera驱动程序层、Camera硬件抽象层、AudioService、Camera本地库、Camera的Java框架类和Java应用层对Camera系统的调用。
图我就不贴了,网上到处都是。
我当时要做的工作就是 需求:
在我们的Android平台上 插上一个USB Camera设备(UVC),系统能够使用(拍照)。
挺简单的功能,各个手机都支持拍照,可是我是菜鸟啊,我不会。
根据上面那本书的描述,我们就一步步的来:
1.硬件驱动
因为USB camera设备驱动都会在linux系统中集成,所以只需要重新配置linux kernel使其支持uvc设备
linux目录
make menuconfig->
Device Drivers --->
<*> Multimedia support --->
[*] Video capture adapters --->
[*] V4L USB devices --->
<M> USB Video Class (UVC)
[*] UVC input events device support
选中最后两个模块就好了。
重新编译kernel。载入我们的设备
然后需要手动加载驱动:
insmod /system/lib/modules/current/kernel/drivers/media/video/uvc/uvcvideo.ko
就会出现/dev/video0 设备
ps:我遇到一个问题,在ll /dev/video0 时候,video0设备是0600属性。
在HAL层open这个设备时候permission deny。不知道为什么,而且在HAL层使用chmod函数也会出错。
但是通过串口可以改变设备权限 chmod 0666 /dev/video0,这样open没有问题
2.硬件抽象层
可以参考:
Android_src_code\development\tools\emulator\system\camera中的camera HAL实现
这个原始的东东编译出来会到/system/lib/hw/下生成一个camera.goldfish.so,我们修改后,生成自己设备的so.
camera.vendor.so,我当时是adb 到我们的设备把goldfish删掉了,这个push进去才生效的。
因为我们这边在IceCream上实现过了,在JellyBean下就直接用了我们的项目没有做任何修改,这方面我也没有多看。
3.AudioService、Camera本地库、Camera的Java框架类和Java应用层对Camera系统的调用
这部分Android都做好了,所以实际上我也没做什么。
直接把驱动和HAL层实现,就可以用android自带的camera apk拍照了。
完结:
很简单的功能,完成起来也算顺利,因为有一点前人的经验。也许真完全自己做起来也要一个月。
本菜鸟开始学习Android开发了。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。