ke077
驱动牛犊
驱动牛犊
  • 注册日期2007-03-14
  • 最后登录2010-10-28
  • 粉丝1
  • 关注0
  • 积分362分
  • 威望134点
  • 贡献值0点
  • 好评度72点
  • 原创分0分
  • 专家分0分
阅读:3533回复:29

在论坛中晕乎乎的找了一上午,关于摄像头驱动的问题仍无解,请各位大大帮忙

楼主#
更多 发布于:2007-03-31 12:01
  文字
最近一直在学习摄像头驱动,只是自己从网上及书上一点一点摸索,但是仍然有许多困惑,列出几个最晕的,希望各位dx能给小弟这个新手帮忙。
1、我现在使用的是98ddk,上面的范例usbcamd是不是通用与各种摄像头,要是开发自己的摄像头驱动,只需要讲usbintel修改为自己用的摄像头对应参数及控制代码,就可以了??
2、使用softice要怎样才能调试usbcamd及usbintel代码,我现在已经编译通过,跟踪程序的话还需要如何操作??我想熟悉一下stream class及minidriver;
3、我现在看得资料主要是从网上搜索到的,遇到不懂得再查,是不是有什么驱动新手必须看的经典书籍,希望大家推荐几本,我现在有<<WIN2000驱动程序设计>><<Programming the Microsoft Windows Driver Model>><<windows wdm设备驱动程序开发指南>>三本书;
4、另外,各位大虾驱动程序是在一些开发包的模板基础上开发,还是完全自己弄通原理自己coding啊,希望过来人的给指条明路;
我是刚加入驱动程序开发网的新人,希望大家给与帮助,不生感谢。。。
Delphips
驱动小牛
驱动小牛
  • 注册日期2003-11-10
  • 最后登录2011-02-21
  • 粉丝1
  • 关注1
  • 积分-363分
  • 威望168点
  • 贡献值0点
  • 好评度151点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-04-02 09:08
1. usbcamd好像只适用usb只有一个interface的的camera, 而且它的传输是用iso的,不知bulk行不行。usbintel里好多vendor command,你替换成自己的就行了,当然得根据自己需求添加,不必要和他的vendor command一一对应。毕竟usbcamd对usb操作部分封装的太多了,如果自己想完全控制usb操作,建议用testcap来参考吧。不过vista ddk好像没有testcap了,也许过时了,那就用avstream吧。
2. 参考softice的是用说明吧。stream class就没必要debug进去了, usbintel就是mini driver,你用debug view看看它的执行流程,参考ddk help了解它的架构就行了。
3. 没什么好的建议。
4. 微软针对不同类型设备都有自己的驱动框架,并且都给了sample,好多都是和硬件无关的,你加入自己的硬件部分就行了,所以你不必从0写起,就算你从零写起,写完还不是和它框架一样?
wjt810907
驱动中牛
驱动中牛
  • 注册日期2004-08-18
  • 最后登录2011-04-16
  • 粉丝0
  • 关注0
  • 积分86分
  • 威望409点
  • 贡献值1点
  • 好评度402点
  • 原创分2分
  • 专家分0分
板凳#
发布于:2007-04-02 12:59
谢谢建议
mcu_boy
ke077
驱动牛犊
驱动牛犊
  • 注册日期2007-03-14
  • 最后登录2010-10-28
  • 粉丝1
  • 关注0
  • 积分362分
  • 威望134点
  • 贡献值0点
  • 好评度72点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-04-02 18:23
谢谢Delphips
非常谢谢Delphips,居然对我的问题一一解答,能知道你的qq或msn吗?最近正在准备动手开发,一定会有新的问题,希望在不打扰你的情况下,得到你的帮助。。。
ke077
驱动牛犊
驱动牛犊
  • 注册日期2007-03-14
  • 最后登录2010-10-28
  • 粉丝1
  • 关注0
  • 积分362分
  • 威望134点
  • 贡献值0点
  • 好评度72点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-04-02 18:35
手头没有debug view,用drivermonitor
to Delphips:
1、你说用debug view,可是手头没有,用drivermonitor可不可以看到。应该怎样操作?
2、如果不可以,我去搜个debug view,但是将camintel也debug进去,没有intel的摄像头,不是许多东西还是看不到,难道可以不需要硬件就可以看到整个流程吗?
Delphips
驱动小牛
驱动小牛
  • 注册日期2003-11-10
  • 最后登录2011-02-21
  • 粉丝1
  • 关注1
  • 积分-363分
  • 威望168点
  • 贡献值0点
  • 好评度151点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2007-04-02 19:00
debug view就几百k,网上down一个就行了
你手上有没有usb camera? 不一定要intel的,你把inf里的pid,vid改一下就可以安装了,估计driver安装初始化时会失败,是因为usbintel里那些和硬件相关vendor command会失败,全部拿掉,先让驱动装上。在每个例程里kdprint足够信息,估计整个框架就清楚了
Delphips
驱动小牛
驱动小牛
  • 注册日期2003-11-10
  • 最后登录2011-02-21
  • 粉丝1
  • 关注1
  • 积分-363分
  • 威望168点
  • 贡献值0点
  • 好评度151点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2007-04-02 19:01
ke077
驱动牛犊
驱动牛犊
  • 注册日期2007-03-14
  • 最后登录2010-10-28
  • 粉丝1
  • 关注0
  • 积分362分
  • 威望134点
  • 贡献值0点
  • 好评度72点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2007-04-03 08:32
Re:Delphips东北人,不会说别的,谢谢阿阿!!
我将inf文件中的pid,vid全都修改了,并且将程序中的USBCAMD_ControlVendorCommand()函数全都屏蔽了,仍然安装不上啊,不知道是不是还有其他遗漏??
ke077
驱动牛犊
驱动牛犊
  • 注册日期2007-03-14
  • 最后登录2010-10-28
  • 粉丝1
  • 关注0
  • 积分362分
  • 威望134点
  • 贡献值0点
  • 好评度72点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2007-04-03 19:08
谢谢Delphips老大,我已经可以看到进行调试了,小结一下,共同学习
1、修改.inf文件中pid、vid,并将USBCAMD_ControlVendorCommand全部屏蔽,防止由于初始化硬件交互vendor产生错误;
2、用softice加载修改后的usbintel,用debugview就应该可以看到整个工作流程。如果发生死机的情况,请在softice中设置断点,应该是在屏蔽过程中将程序的哪个部分弄糟了,单步走一下,问题不大;
3、还有就是程序安装后在设备管理器中可以看到图像处理设备,那个就是刚刚安装上的usbintel,如果修改了程序,可以通过卸载它,重新安装就可;
我今天的这点东西都是从Delphips老大那学到的,能够得到帮助,而且是不相识的人,只是意外而又兴奋,希望我能够给朋友们一点帮助,我懂得不多,就写这点吧
Delphips
驱动小牛
驱动小牛
  • 注册日期2003-11-10
  • 最后登录2011-02-21
  • 粉丝1
  • 关注1
  • 积分-363分
  • 威望168点
  • 贡献值0点
  • 好评度151点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2007-04-03 21:20
恭喜恭喜,迈出第一步了。

修改了程序不用卸载重新安装的,太麻烦了,先在system32\drivers下把.sys替换一下,重新插拔一下设备,驱动就会重新加载了。或者在设备管理器里 Disable->Enable一下也可以。
ke077
驱动牛犊
驱动牛犊
  • 注册日期2007-03-14
  • 最后登录2010-10-28
  • 粉丝1
  • 关注0
  • 积分362分
  • 威望134点
  • 贡献值0点
  • 好评度72点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2007-04-04 12:00
Re:Delphips老大,我看了一上午camintel,感觉又有点晕。。
我看了ddk的帮助及一些相关文章,你帮我看看我现在的理解是不是不太对!
1、我现在随便拿一个usb cam,是不是经过修改cam intel的接口及流参数,就能看到图像?如果终端设备不支持流驱动呢,是不是也行?
2、如果不用捕捉静态图像,只是实时采集数据,是不是我用一个接口就够了?
3、我手头有两个摄像头,有一个用bushound抓,就是bulk传输,但是他的inf文件里有usbcamd.sys与stream.sys是怎么回事啊?
4、还有就是directshow是不是就是通过ioctl直接获取流接口输出pin上的数据就可以了,但是qq,msn也是用directshow实现的吗?如果不是,直到它是如何获取数据流的?
各位走过路过的,也参与一下阿
Delphips
驱动小牛
驱动小牛
  • 注册日期2003-11-10
  • 最后登录2011-02-21
  • 粉丝1
  • 关注1
  • 积分-363分
  • 威望168点
  • 贡献值0点
  • 好评度151点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2007-04-04 13:06
1. 你现在只是完成了一个驱动框架,其中每个例程在驱动中从初始化到运行起来都有自己的用途,你所要做到就是要让你的设备跑起来,都需要哪些vendor command来配置你的设备,这些vendor command需要放在哪些例程里面,然后怎样配置你的usb pipe来抓数据。还有最关键的是怎么判断一帧图像的首尾,在CAM_ProcessUSBPacketEx中,当抓满一帧, FrameComplete 标识置TRUE, 它就会自动把这一帧图像送出去。
2. 你指的是capture pin 和 still pin吗? 当然有前者就够了。
3. 你现在开发的usbintel是一个mini driver,它只是这个设备完整驱动的一部分,其他部分微软已经做了,或者可以说你现在是在调用微软的类库, 层次关系如下 stream.sys-> usbcamd.sys->usbintel.sys
4. directshow也是微软的一种封装,主要体现为一堆filter, 你用dxsdk tool 里面的graphedit就可以看到了,把需要filter连起来,就看到图像了,你不用关心数据是怎么从pin上读取的,微软已经帮你做了。 qq, msn都是这样的。
wjt810907
驱动中牛
驱动中牛
  • 注册日期2004-08-18
  • 最后登录2011-04-16
  • 粉丝0
  • 关注0
  • 积分86分
  • 威望409点
  • 贡献值1点
  • 好评度402点
  • 原创分2分
  • 专家分0分
12楼#
发布于:2007-04-04 13:09
听君一席话,胜读十年书
mcu_boy
ke077
驱动牛犊
驱动牛犊
  • 注册日期2007-03-14
  • 最后登录2010-10-28
  • 粉丝1
  • 关注0
  • 积分362分
  • 威望134点
  • 贡献值0点
  • 好评度72点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2007-04-04 16:29
Re : Delphips问完这个问题,三天内不问了,我要开始闭门造车了
老大,那照你的解释,我可不可以这样理解:
1、我需要将安装前屏蔽掉的vendor,替换成我自定义的vendor,然后在usb camera终端,根据自定义的vendor响应数据,设备就能跑起来;
2、而为了传输数据能让终端接收并确认,就需要对接口及参数进行设置;
3、那么,如果我想看到图像,即便是个糟糕到一塌糊涂的图像,也许要我将整个程序清楚地理顺,中间不能取巧,或者说部分理解,稍加修改就能实现;
4、还有,我随便拿一个camera,因为vendor都是自定义的,我只能用来帮助理解camintel,不可能在别人的摄像头上采集到图像,除非拿到厂商的vendor定义;
5、如果4成立,我是不是应该将驱动端的minidriver与终端摄像头的程序一起调试,就像调试协议那样,你发一个,我收到,我发,你收到,哈哈,这种方法是我的杀手锏了。
ke077
驱动牛犊
驱动牛犊
  • 注册日期2007-03-14
  • 最后登录2010-10-28
  • 粉丝1
  • 关注0
  • 积分362分
  • 威望134点
  • 贡献值0点
  • 好评度72点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2007-04-09 11:40
我看论坛中有人说用testcap调试就能看到摄像头的图像??
我现在用usbintel调试,现在程序能跑起来了,但是好像初始化一些参数时错误。郁闷中看到论坛中有人说用testcap进行调试,各位老大,那位调试过,究竟用usbintel,还是用testcap阿???
bennydice
驱动牛犊
驱动牛犊
  • 注册日期2006-09-20
  • 最后登录2008-01-10
  • 粉丝0
  • 关注0
  • 积分470分
  • 威望48点
  • 贡献值0点
  • 好评度47点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2007-04-09 11:55
一起研究ING ~~~

最近我也想做这方面的驱动, delphi  我想请问下, 这些驱动是怎样支持视频格式的呢?  比如说RGB和YUV格式,这些东西都是在驱动里面规定好的吗?

还是这些规定的代码要自己写?或者说是已经规定好了,我只用选择相应的参数就OK了呢?
谢谢~
ke077
驱动牛犊
驱动牛犊
  • 注册日期2007-03-14
  • 最后登录2010-10-28
  • 粉丝1
  • 关注0
  • 积分362分
  • 威望134点
  • 贡献值0点
  • 好评度72点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2007-04-09 14:23
re:bennydice
具体你可以看看sdk的msdn中Video Stream Formats的说明,大概就是在minidriver与directshow共用一个结构KSDATAFORMAT,我想只要摄像头终端如果可以采集到的图像格式,在minidriver中指定一下,directshow从结构中获取格式的值,按照对应格式解码就可以了。要是摄像头采集到的原始数据,可能需要转化为yuv,方便编码。我是第一次在论坛中给别人解答问题,说的不好,别介意,具体minidriver中如何初始化,我还在找。。
还有,我也比较喜欢火影
wjt810907
驱动中牛
驱动中牛
  • 注册日期2004-08-18
  • 最后登录2011-04-16
  • 粉丝0
  • 关注0
  • 积分86分
  • 威望409点
  • 贡献值1点
  • 好评度402点
  • 原创分2分
  • 专家分0分
17楼#
发布于:2007-04-10 08:50
谢谢ke77的介绍,我很想看看这方面
mcu_boy
bennydice
驱动牛犊
驱动牛犊
  • 注册日期2006-09-20
  • 最后登录2008-01-10
  • 粉丝0
  • 关注0
  • 积分470分
  • 威望48点
  • 贡献值0点
  • 好评度47点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2007-04-10 09:21
恩 一起研究吧   我现在也在做这   我做的是OV7640  出来的直接就是YUV格式的数据了
楼主留个联系方式 一起交流下吧
ke077
驱动牛犊
驱动牛犊
  • 注册日期2007-03-14
  • 最后登录2010-10-28
  • 粉丝1
  • 关注0
  • 积分362分
  • 威望134点
  • 贡献值0点
  • 好评度72点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2007-04-10 14:14
我也是个菜鸟哦,我的还没看到图像呢,问题多多
我的qq:40391284,还是Delphips的帮助,我才上路,但是只是刚从起跑线出来
上一页
游客

返回顶部