- 论坛徽章:
- 0
|
这几天一直被一个问题困饶.
就是一个简单的视频采集程序,ARM10+LINUX+网眼V2000摄象头.采集程序是网上下的,下了几个
都有一个问题,就是采集不到数据,每次采集玩一帧然后同步的时候就挂起了.
查看驱动OV511.c
死在ioctl(grab_fd, VIDIOCSYNC, &frame); 不返回了
case VIDIOCSYNC:
{ struct ov511_frame *frame;
......
rc = wait_event_interruptible(frame->wq,
(frame->grabstate == FRAME_DONE)
|| (frame->grabstate == FRAME_ERROR));
info("5147...%d\n",frame->grabstate);
......
return 0;
}
估计就在wait_event_interruptible那不动了,frame->grabstate == FRAME_DONE没满足,那么什么似的frame->grabstate == FRAME_DONE呢?
再往下,只有ov511_move_data 什么调用他呢,再往下ov51x_isoc_irq 再往下ov51x_init_isoc 再往下是ov51x_v4l1_open,就是打开视频设备的
时候调用,ov51x_isoc_irq 是URB的回调函数,每次把usb_submit_urb完成后调用.
为什么usb_submit_urb只在ov51x_init_isoc中调用一次,这个是USB等时传输,我记得批量传输每次WRITE中好象都要usb_submit_urb然后USB_CORE再把URB交给USB控制器,USB控制器处理完了后,调用回调函数,进入驱动继续运行..
那么等时是怎么样的呢,是不是只要usb_submit_urb一次,然后依据URB->INTERCAL间隔提交URB呢?
希望得到高手指导.先谢谢拉... |
|