Android usb camera设备添加

最近要在我们的某Android设备上添加USB Camera,之前没有神马经验。加上以前做过这个的同事很忙,也不好相处,问了十句话才给我回复一句话这样子的情况,我很郁闷,就把添加的过程全部写出来

本菜鸟也是刚接触Android的开发。所以写的尽量简单明了。、

其实Camera的开发各个书上或者博客上都有写,但是没有写具体如何做。笨鸟我也晃了几天没什么进展。
以下摘抄自我桌上的一本 王石磊等编著:
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  --->
  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开发了。


你可能感兴趣的:(Android)