android USB camera

本文介绍了在Android系统上驱动USB摄像头的过程,包括发现设备节点、分析代码以适配不同video设备,并探讨了CameraId的定制性,为实现多摄像头程序提供了思路。同时,提到了使用手机线进行USB调试以及避免使用USB-Hub连接摄像头等要点。
AI助手已提取文章相关产品:

这个没想到这么顺利,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

         






您可能感兴趣的与本文相关内容

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值