这个没想到这么顺利,2个多小时就出来了,主要还是感谢这位仁兄的代码以及之前做ubuntu时的基础。
终于搞定android驱动USB摄像头了!-Android 底层开发-eoeAndroid开发者社区 - Powered by Discuz!
1.在Terminal下进入/dev 在没有任何设备的情况下居然有video0,video1,video2,video3,video11等。有资料是这样说的:
S5PV210会在/dev/下生成几个video相关的设备节点,分别为
/dev/video0, /dev/video1, /dev/video2
/dev/video14, /dev/video21, /dev/video22
video0, video1, video2的作用是和Android camera/overlay HAL密切相关的,HAL层来决定这三个设备的具体作用,也就是说在设备驱动层并不会定义他们的具体作用。
/dev/video0 被android camera HAL用于capture和preview时,获取camera sensor数据
/dev/video1 被android overlay HAL用于视频输出,参见samsung/proprietary/liboverlay/overlay.cpp,overlay_createOverlay函数,v4l2_overlay_open打开设备节点/dev/video1
/dev/video2 被android camera HAL用于录像时,获取camera sensor数据
/dev/video14 是TVout mixer的video设备
/dev/video21 是TVout overlay1
/dev/video22 是TVout overlay2
插入digital camera后,多了一个video4,也就是说这个就是我的usb摄像头。
2. 在PC上生成simpleCamera.apk,用U盘考过去,在android系统下找到优盘的方式是:File exploer->usb->ext_usb
安装,然后程序没有报错,但是界面是黑的,没任何东西。我猜想这时候程序肯定是驱动的video0,video0节点又没有设备,所以肯定是黑的。
开始找资料。相关资料不多,但确实有人遇到类似问题---插入后挂到video1. 有人建议在代码里重新制定要打开的camera。这个看来有挑战性了。
3. 打开eslipse开始看代码,C++里有几个函数是打开设备的
int opendevice(int i)
{
struct stat st;
sprintf(dev_name,"/dev/video%d",i);
//stat() 获得文件属性,并判断是否为字符设备文件
if (-1 == stat (dev_name, &st)) {
LOGE("Cannot identify '%s': %d, %s", dev_name, errno, strerror (errno));
return ERROR_LOCAL;
}但是没有找到cameraID这样的常量,C++的代码里也没有主函数调用opendevice,后面转念一想,主函数肯定在java的代码里啊,于是赶紧去看,果然
/// /dev/videox (x=cameraId+cameraBase) is used.
// In some omap devices, system uses /dev/video[0-3],
// so users must use /dev/video[4-].
// In such a case, try cameraId=0 and cameraBase=4
private int cameraId=0;
private int cameraBase=0;在这里cameraId=0,我试着改成4,加载运行,出来了,太顺利了。
总结:发现几个新的点
1.可以用手机线连接PC和开发板,开发板连接OTG接口,打开USB debug,然后用手机助手就可以管理开发板上的系统了。
2.CameraId的可定制性意味着未来可以做一个多摄像头的程序,程序里包含多个preview,每个view指定不同的cameraId,那么就Ok了。
3.openCV的tutorial等应该也有指定cameraId的语句,下面去查一下手机自带摄像头的编号是怎样的。
4. camera必须直接连usb,不能用usb-hub
5. 关于模块编译的,以后可能用得到和USB camera比较全面的网址
【源码注释+操作步骤】详述Android照相功能的实现(基于飞凌S3C6410开发板+OV9650摄像头驱动层分析) - 嵌入式系统 中华工控网 工控论坛 http://bbs.gkong.com/
linux 下 USB 摄像头实现分析 - fervor_heart - 博客频道 - youkuaiyun.com
本文介绍了在Android系统上驱动USB摄像头的过程,包括发现设备节点、分析代码以适配不同video设备,并探讨了CameraId的定制性,为实现多摄像头程序提供了思路。同时,提到了使用手机线进行USB调试以及避免使用USB-Hub连接摄像头等要点。
3526

被折叠的 条评论
为什么被折叠?



