Android平台USB视频输出功能求助!~~

arlen8411 2016-04-27 01:09:45
现在要实现一个USB Cam功能,将摄像头采集到的实时图像数据,经过jpeg编码后,通过usb otg传输到PC端

现在模仿webcam (drivers/usb/gadget/webcam.c )
在 Android usb (drivers/usb/gadget/Android.c)上 实现了一个UVC Camera驱动(添加到usb composite设备数组里)

USB连上PC后,在PC端可以被识别为uvc camera设备。

USB视频输出的应用程序,主要参照
http://git.ideasonboard.org/uvc-gadget.git/commit/9fbc003442056cdf59b87e94c1d0e3814575d4b3
并做了一些修改

【实现思路】
传输数据的基本流程是这样的

开始数据传输时
1.向驱动申请了4个帧缓冲(VIDIOC_REQBUFS)
2.获取帧缓冲信息(VIDIOC_QUERYBUF),并将申请到的帧缓冲映射到用户空间
3.填充4帧数据后,将4个帧缓冲入驱动队列(VIDIOC_QBUF)
4.select监听并等待设备文件的“可写”状态
5.设备文件“可写”时,出队列取得一帧缓冲(VIDIOC_DQBUF)
6.向帧缓冲填充一帧数据
7.将帧缓冲重新入队列(VIDIOC_QBUF)

重复 5 - 7步 实现连续的数据传输


目前已经可以实现,将摄像头实时采集的连续图像数据,经过USB在PC端显示出来。(MJPEG)
PC端使用软件是AMCap

【目前问题】
现在当每帧的数据量保持在500多KB以上时,视频可以连续传输,这没有问题。
但是如果每帧数据量低于500多KB时,可能传输了十几帧,几十帧后,就停止了。
跟踪代码后,发现是在 select这边超时了。既select不返回“可写”状态


这个问题查了很久,一直不明白是哪里的原因。
新手刚接触USB这块,烦请各位高手们赐教!~
...全文
11497 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
kerwin liu 2019-11-11
  • 打赏
  • 举报
回复
1.你的摄像头的帧数可能不是固定了,一般USB摄像头帧数与光照有关。 2.超时时间可以自己设置修改,在select中 3.引起你超时的原因可能是硬件上的原因,如供电能力不足(纯属猜测)
fhp6666 2017-12-18
  • 打赏
  • 举报
回复
LZ ,请问你用的是什么板子,我也在做这个
arlen8411 2016-04-27
  • 打赏
  • 举报
回复
usb使用的是 同步传输 模式,出现select 超时现象时,内核输出log “There are no more ISOC requests”
arlen8411 2016-04-27
  • 打赏
  • 举报
回复
引用 1 楼 wenxy1 的回复:
select超时,获取错误码试试?
select超时,errno 是22 (Invalid argument)
Wenxy1 2016-04-27
  • 打赏
  • 举报
回复
select超时,获取错误码试试?

1,318

社区成员

发帖
与我相关
我的任务
社区描述
主要是开发驱动技术
社区管理员
  • 驱动程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧