终于搞定android驱动USB摄像头了!

2014-05-28  liuwei200...  文章来源  阅 7655  转 5
转藏到我的图书馆 微信 分享:

多亏了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 功能支持的添加

标签: rk3288 uvc camera
2016-10-10 17:38 2118人阅读 评论(0) 收藏 举报
分类:
-------RockChip--------(240) 子类_RK3288_Camera(20)

版权声明:本文为博主原创文章,未经博主允许不得转载。

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, 所以第二颗即使驱动注册成功,上层也无法识别到,
因此修改如下:

[cpp] view plain copy
  1. int camera_device_open(const hw_module_t* module, const char* name,
  2. hw_device_t** device)
  3. {
  4. ......
  5. if (name != NULL) {
  6. cameraid = atoi(name);
  7. if(cameraid > gCamerasNumber) {
  8. LOGE("camera service provided cameraid out of bounds, "
  9. "cameraid = %d, num supported = %d",
  10. cameraid, gCamerasNumber);
  11. rv = -EINVAL;
  12. goto fail;
  13. }
  14. /*Kris, Support two cameras. {*/
  15. #if 0
  16. if(gCamerasOpen >= CAMERAS_SUPPORTED_SIMUL_MAX) {
  17. LOGE("maximum number(%d) of cameras already open",gCamerasOpen);
  18. rv = -EUSERS;
  19. goto fail;
  20. }
  21. #endif
  22. /*Kris, Support two cameras. }*/
  23. ......
  24. }

这样就可以了!

注意:

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摄像头了相关推荐

  1. 终于搞定android驱动USB摄像头了!

    终于搞定android驱动USB摄像头了! 多亏了stackoverflow看到的一篇帖子,其中有几句关键的话,然后顺藤摸瓜解决了问题. 帖子大意: 讨论的前提是你的USB摄像头是UVC兼容的(如今大 ...

  2. android 打开外置摄像头驱动程序,嵌入式er日常系列!终于搞定android驱动USB摄像头了!...

    原标题:嵌入式er日常系列!终于搞定android驱动USB摄像头了! 感谢网上的大神分享经验,终于解决了让我头疼好久的USB摄像头问题,讨论的前提是你的USB摄像头是UVC兼容的(如今大部分摄像头兼 ...

  3. android usb 摄像头 分辨率,Android 驱动USB摄像头

    最近有个需求,要用android 来驱动外部usb摄像头.emmmmmmm......  港真,突然听到这么个需求,有点蒙~~于是google github转有没有类似需求的文章.诶嘿 还真有. 还有 ...

  4. Android驱动USB摄像头

    先来个整体规划 刚搜索了一圈,在http://www.arm9home.net/read.php?tid-16530.html有一个不错的帖子,<Android系统原理及开发要点详解>中也 ...

  5. Android支持USB摄像头

    关于Android支持USB摄像头的帖子网上是有一些的,虽然内容都是转载过来的,前一段时间因为工作需要,必须实现在Android上实现USB摄像头和主摄像头同时录像,便自己动手尝试实现了一下,最终实现 ...

  6. android yuy2,Android使用USB摄像头拍照yuy2转jpeg

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? #说明 由于项目需要,使用通用的usb摄像头进行拍照,这样成本低且比较通用,市面上一大堆支持yuv的usb摄像头.而且l ...

  7. NanoPi NEO Air使用十五:使用V4L2驱动USB摄像头

    USB摄像头初识   Linux UVC driver(uvc) 该驱动适用于符合USB视频类(USB Video Class)规范的摄像头设备,它包括V4L2内核设备驱动和用户空间工具补丁.大多数大 ...

  8. android外接usb摄像头demo_手机USB接口有哪些功能 手机USB接口功能介绍【详解】

    手机身上的USB接口主要的任务就是充电,连接PC传输数据,你还能想到其他的功能吗?没错,它还能连接USB小风扇.小台灯等外设.但是,你以为所有手机在实现这些功能时的体验和效果都是一样的吗? 充电速度和 ...

  9. Android 双usb 摄像头支持

    公司有一款产品需要支持双USB摄像头,标准的Android设备只支持同时打开一个camera,若要支持两个显示需要修改rk3288 源码, hardware/rockchip/camera/Camer ...

最新文章

  1. ZooKeeper基础学习
  2. html+引导,html – 引导点的CSS样式
  3. Lisp语言: 在Windows下搭建CLisp环境
  4. php解析multilpart,使用PHP语言实现POP3邮件的解码
  5. BZOJ 2668: [cqoi2012]交换棋子
  6. 关于996,我想说的 - 人在高潮享受成就,人在低潮享受人生
  7. 校招萌新在阿里妈妈是如何成长的
  8. @Async注解导致循环依赖,BeanCurrentlyInCreationException异常
  9. 实验一 线性表的顺序存储与实现_数据结构篇之单链表的创建以及实现
  10. Table被web编程弃用的原因
  11. 正则表达式匹配后删除
  12. 【华为云动态】华为云开放日发布云专家激励计划,要将开发者“宠”上天
  13. ECJia 到家 v1.5.1 发布,基于 O2O 的移动电商开源系统
  14. 简单的达梦数据库使用DISTINCT去重
  15. 模式识别经典算法——LDA
  16. html 下载 txt 文件
  17. 常用路由器的帐号和密码大全
  18. 加法的横式竖式教案c语言,竖式进位加法教案
  19. 计算机设计大赛中南赛区2019通告,我院6支队伍在2019中国大学生计算机设计大赛 中南地区赛喜获佳绩...
  20. PWN-CTF:gef工具安装

热门文章

  1. java调用monkey,Monkey的使用以及日志分析
  2. 北京上空飘来一朵难得的“智慧城市云”
  3. k8s部署留言板guestbook
  4. 通信网络中英文对照表
  5. 手工破解还原精灵密码(简单得很),另附,在线读取还原精灵密码
  6. 11.6.1:综合技巧练习 - 配置和测试网络
  7. 汽车后市场的得力助手-vin码识别
  8. Java应用的优雅停机
  9. (笔记)电路设计(十三)之振荡电路的应用
  10. 第14期《成长之路》2017年9月刊