directshow同时使用3个或以上USB摄像头

mashu128 2012-09-16 08:44:11
项目要求,一个PC带动4个USB摄像头。用了CCameraDS类之后,可以打开4个摄像头,但只能捕获到2个摄像头的帧,第三个在QueryFrame的时候就会出错。跟踪进去发现是QueryFrame函数中这一句m_pSampleGrabber->GetCurrentBuffer(&size, NULL);
给size分配了0的空间,所以后面就出错了。
测试代码很简单,在最后一句QueryFrame()出错。望高手指教~
CCameraDS camera1;
CCameraDS camera2;
CCameraDS camera3;

camera1.OpenCamera(0,false,640,480);
camera2.OpenCamera(1,false,640,480);
camera3.OpenCamera(2,false,640,480);

IplImage *tmp1 = camera1.QueryFrame();
IplImage *tmp2 = camera2.QueryFrame();
IplImage *tmp3 = camera3.QueryFrame();
...全文
699 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2015-03-24
  • 打赏
  • 举报
回复
试试使用多进程。
Cason_wang 2015-03-24
  • 打赏
  • 举报
回复
请问LZ的问题解决了吗?怎么解决的?
lcyw 2014-11-16
  • 打赏
  • 举报
回复
我用CCameraDS 这个类。 电脑上有两个摄像头 就报错, 一个没问题 你四个摄像头是怎么处理的?
QQ1376206577 2012-10-05
  • 打赏
  • 举报
回复
弃用DirectShow,直接调用底层KS函数API,或者DeviceIOControl,最好看下USB Vedio Class硬件标准
wlfbhdx 2012-09-27
  • 打赏
  • 举报
回复
我也遇到此问题 楼主解决了吗
mashu128 2012-09-16
  • 打赏
  • 举报
回复
谢谢你的回复。应该不是摄像头驱动的问题,因为我调换设备的顺序之后,也是,前2个可以成功,第三个不能成功,看网上说是一个USB控制器只能带2个USB摄像头,需要PCI转USB什么的。。。。那请问你觉得应该怎么解决呢?
[Quote=引用 1 楼 的回复:]

能打开说明设备存在,不能取得Frame Buffer可能是驱动出了问题,也就是说Camera的interrupt可能没有产生,也有可能是Camera的初始化没有成功,导致VSYNC信号不正常。
[/Quote]
图灵狗 2012-09-16
  • 打赏
  • 举报
回复
能打开说明设备存在,不能取得Frame Buffer可能是驱动出了问题,也就是说Camera的interrupt可能没有产生,也有可能是Camera的初始化没有成功,导致VSYNC信号不正常。

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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