现在要实现一个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这块,烦请各位高手们赐教!~