android驱动USB摄像头了
终于搞定android驱动USB摄像头了!
多亏了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,运行,天啊终于出来了,高兴死了!
-----------------------------
[RK3288][Android6.0] USB UVC Camera 功能支持的添加
版权声明:本文为博主原创文章,未经博主允许不得转载。
Platform: RK3288
OS: Android 6.0
Kernel: 3.10.92
Kernel层:
打开UVC的宏
CONFIG_USB_VIDEO_CLASS=y
CONFIG_VIDEO_V4L2_SUBDEV_API=y
CONFIG_MEDIA_USB_SUPPORT=y
CONFIG_USB_VIDEO_CLASS=y
CONFIG_V4L_PLATFORM_DRIVERS=y
这个宏一般默认是配好的.
编译下载插上usb camera开机之后应该会有类似如下log:
[ 3.612836] usb 3-1: New USB device found, idVendor=058f, idProduct=3822
[ 3.612857] usb 3-1: New USB device strings: Mfr=0, Product=2, SerialNumber=0
[ 3.612867] usb 3-1: Product: USB 2.0 HD Camera
[ 3.614985] uvcvideo: Found UVC 1.00 device USB 2.0 HD Camera (058f:3822)
[ 3.622648] input: USB 2.0 HD Camera as /devices/ff540000.usb/usb3/3-1/3-1:1.0/input/input3
查看设备是否注册成功:
shell@rk3288:/ $ ls /dev/video*
/dev/video0
/dev/video1
/dev/video_state
video0是CIF camera, video1就是UVC Camera了.
HAL层:
系统默认只支持1颗Camera, 所以第二颗即使驱动注册成功,上层也无法识别到,
因此修改如下:
- int camera_device_open(const hw_module_t* module, const char* name,
- hw_device_t** device)
- {
- ......
- if (name != NULL) {
- cameraid = atoi(name);
- if(cameraid > gCamerasNumber) {
- LOGE("camera service provided cameraid out of bounds, "
- "cameraid = %d, num supported = %d",
- cameraid, gCamerasNumber);
- rv = -EINVAL;
- goto fail;
- }
- /*Kris, Support two cameras. {*/
- #if 0
- if(gCamerasOpen >= CAMERAS_SUPPORTED_SIMUL_MAX) {
- LOGE("maximum number(%d) of cameras already open",gCamerasOpen);
- rv = -EUSERS;
- goto fail;
- }
- #endif
- /*Kris, Support two cameras. }*/
- ......
- }
这样就可以了!
注意:
RK3288目前不支持高清类型的也就是说mjpeg数据格式的UVC Camera,需要用YUYV格式的.
最快的区分方法是查看HAL层log, code会读取数据格式并打印出来.
01-01 12:03:15.420 216 578 D CameraHal: CameraHal(121): it is a uvc camera!
01-01 12:03:15.420 216 578 D CameraHal: Calling process is: com.android.camera2
01-01 12:03:15.465 216 578 D CameraHal: cameraCreate(374): Camera driver: uvcvideo Driver version: 3.10.0 CameraHal version: 1.55.2
01-01 12:03:15.465 216 578 D CameraHal: cameraCreate(381): mCamDriverSupportFmt: fmt = 1448695129,index = 0
01-01 12:03:15.465 216 578 D CameraHal: cameraCreate(419): cameraCreate(419):mCamDriverPreviewFmt(YUYV) is cameraHal and camera driver is also supported!!
01-01 12:03:15.465 216 578 D CameraHal: cameraCreate(421): mCamDriverPreviewFmt = 1448695129
01-01 12:03:15.465 216 578 D CameraHal: cameraCreate(427): cameraCreate(427): Current driver is uvcvideo, v4l2 memory is V4L2_MEMORY_MMAP
android驱动USB摄像头了相关推荐
- 终于搞定android驱动USB摄像头了!
终于搞定android驱动USB摄像头了! 多亏了stackoverflow看到的一篇帖子,其中有几句关键的话,然后顺藤摸瓜解决了问题. 帖子大意: 讨论的前提是你的USB摄像头是UVC兼容的(如今大 ...
- android 打开外置摄像头驱动程序,嵌入式er日常系列!终于搞定android驱动USB摄像头了!...
原标题:嵌入式er日常系列!终于搞定android驱动USB摄像头了! 感谢网上的大神分享经验,终于解决了让我头疼好久的USB摄像头问题,讨论的前提是你的USB摄像头是UVC兼容的(如今大部分摄像头兼 ...
- android usb 摄像头 分辨率,Android 驱动USB摄像头
最近有个需求,要用android 来驱动外部usb摄像头.emmmmmmm...... 港真,突然听到这么个需求,有点蒙~~于是google github转有没有类似需求的文章.诶嘿 还真有. 还有 ...
- Android驱动USB摄像头
先来个整体规划 刚搜索了一圈,在http://www.arm9home.net/read.php?tid-16530.html有一个不错的帖子,<Android系统原理及开发要点详解>中也 ...
- Android支持USB摄像头
关于Android支持USB摄像头的帖子网上是有一些的,虽然内容都是转载过来的,前一段时间因为工作需要,必须实现在Android上实现USB摄像头和主摄像头同时录像,便自己动手尝试实现了一下,最终实现 ...
- android yuy2,Android使用USB摄像头拍照yuy2转jpeg
8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? #说明 由于项目需要,使用通用的usb摄像头进行拍照,这样成本低且比较通用,市面上一大堆支持yuv的usb摄像头.而且l ...
- NanoPi NEO Air使用十五:使用V4L2驱动USB摄像头
USB摄像头初识 Linux UVC driver(uvc) 该驱动适用于符合USB视频类(USB Video Class)规范的摄像头设备,它包括V4L2内核设备驱动和用户空间工具补丁.大多数大 ...
- android外接usb摄像头demo_手机USB接口有哪些功能 手机USB接口功能介绍【详解】
手机身上的USB接口主要的任务就是充电,连接PC传输数据,你还能想到其他的功能吗?没错,它还能连接USB小风扇.小台灯等外设.但是,你以为所有手机在实现这些功能时的体验和效果都是一样的吗? 充电速度和 ...
- Android 双usb 摄像头支持
公司有一款产品需要支持双USB摄像头,标准的Android设备只支持同时打开一个camera,若要支持两个显示需要修改rk3288 源码, hardware/rockchip/camera/Camer ...
最新文章
- ZooKeeper基础学习
- html+引导,html – 引导点的CSS样式
- Lisp语言: 在Windows下搭建CLisp环境
- php解析multilpart,使用PHP语言实现POP3邮件的解码
- BZOJ 2668: [cqoi2012]交换棋子
- 关于996,我想说的 - 人在高潮享受成就,人在低潮享受人生
- 校招萌新在阿里妈妈是如何成长的
- @Async注解导致循环依赖,BeanCurrentlyInCreationException异常
- 实验一 线性表的顺序存储与实现_数据结构篇之单链表的创建以及实现
- Table被web编程弃用的原因
- 正则表达式匹配后删除
- 【华为云动态】华为云开放日发布云专家激励计划,要将开发者“宠”上天
- ECJia 到家 v1.5.1 发布,基于 O2O 的移动电商开源系统
- 简单的达梦数据库使用DISTINCT去重
- 模式识别经典算法——LDA
- html 下载 txt 文件
- 常用路由器的帐号和密码大全
- 加法的横式竖式教案c语言,竖式进位加法教案
- 计算机设计大赛中南赛区2019通告,我院6支队伍在2019中国大学生计算机设计大赛 中南地区赛喜获佳绩...
- PWN-CTF:gef工具安装