wince6下usb摄像头(UVC)使用指南
在搭好了wince6的开发环境之后,下一步试验一下wince6下使用摄像头的方法。搜集了不少资料,从中学习了很多有用的东西,在这给记录下来,方便其它人学习,和自己以后使用。
买的开发板并没有wince6下usb摄像头的驱动。还有的开发板厂家说,wince下不可能使用usb摄像头,真是害人,搞的有时都想放弃ce,搞其它的系统了。经过多方收集,是可以实现这个功能的。
//---------以下是微软网站内容
我看到过一些关于Windows Embedded CE的DirectShow摄像头的支持方面的问题咨询。所以在这篇文章里我将展示如何让ARM平台下的Windows Embedded CE6.0的USB摄像头正常运行。在这个例子中我将使用我们的REGULUS平台。
前期准备:
• CE 6.0的在Visual Studio 2005 上的Platform Builder
• CE 6.0的USB摄像头驱动
• 带有 WinCE 6.0 R3 BSP的REGULUS ARM开发套件. (http://www.e-consystems.com/regulus.asp)
• 3.2 MP USB摄像头(http://www.e-consystems.com/3mp_cameraboard_usb.asp)
安装:
如何安装Visual Studio和Platform Builder for CE6.0超出了本文的范围。在网上可以找到关于如何安装WinCE 6.0 Platform Builder的文章。
安装USB摄像头驱动后,驱动的源代码应该会自动被放在WINCE600\PUBLIC\ThirdParty目录中。
带着USB摄像头驱动编译OS:
新建或打开一个开发套件中已有的OSDesign。在我这里,我已经为我们的REGUPLUS板生成好了一个REGULUS-1_DEMO OSDesign。
由于此驱动基于DirectShow,我们需要将DirectShow过滤器加入到OS的镜像里来让我们的驱动和应用程序正常工作。
下图是DirectShow Sysgen组件:
从catalog对话框中选择如下组件来将已安装好的USB摄像头驱动加入到OS镜像中:
在将所有上述的SYSGEN组件加入完毕后,从VS2005的菜单中选择下面的命令来编译OSDesign:
Build–>Advanced Build Commands–>Clean Sysgen
当编译完成后,在release目录里检查ce.bib和reginit.ini来确认usbcam.dll设置项是否存在。
应用程序的编译:
现在我们已经将USB摄像头的驱动加好了。接下来让我们用应用程序来测试这个驱动。我们可以在WinCE的共享资源(例如PRIVATE目录)中找到一些DirectShow摄像头的示例应用程序。摄像头应用程序的源代码可以在以下目录中找到:
WINCE600\PRIVATE\TEST\MULTIMEDIA\DIRECTX\DSHOW\CAMERA\CAMERAAPP
为编译生成应用程序的可执行文件,进行以下几步工作:
• 从workspace的Build菜单中选择"Open release Directory in Build Window"
• 将路径改变到WINCE600\PRIVATE\TEST\MULTIMEDIA\DIRECTX\DSHOW\COMMON\LIBS
• 输入命令 ‘build -c’.
• 当这些路径中的编译过程结束后,将路径改变至 WINCE600\PRIVATE\TEST\MULTIMEDIA\DIRECTX\DSHOW\CAMERA
• 输入命令 ‘build -c’.
• 编译将在这些路径中进行, 不过最后会有"kato.lib"不可用的错误。 • 现在转移路径到WINCE600\PRIVATE\TEST\MULTIMEDIA\DIRECTX\DSHOW\CAMERA\CAMERAAPP\
• 输入命令 ‘build -c’
• 应用程序二进制文件"CameraDshowApp.exe"将生成于OSDesign的Release目录下。
下载并执行:
在编译完带有usbcam.dll和CameraDshowApp.exe的OS镜像后我们就可以把此镜像下载到开发板里了。当下载结束并启动之后,将USB摄像头连结到REGULUS开发板的USB Host port上。
当程序连结好设备之后,我们就可以运行我们之前编译好的程序(CameraDshowApp.exe)了。这将会显示可供选择的用于生成过滤图的过滤器列表。如果摄像头驱动被正确地加载,设备名"CAM1:"将会显示在这个组合对话框中。
选择需要的过滤器并点击OK,这将会以摄像头支持的、接近于注册表设置项"PreferredWidth"中数值的尺寸大小来运行摄像头的预览功能。你可以检查$(_WINCEROOT)\PUBLIC\ThirdParty\Catalog\USBCam\Driver\usbcam.reg这个注册表文件来确定"PreferredWidth"注册表项。
; Default to Uncompressed QCIF if app doesn't specify
"PreferredWidth"=dword:B0// 改成16进制的宽
"PreferredHeight"=dword:90//改成16进制的高
同时请根据Webcam支持的输出格式来设置如下的注册表项。我的摄像头支持YUV无压缩输出,所以我的相应的注册表项设置为:
[HKEY_LOCAL_MACHINE\Drivers\USB\ClientDrivers\Video_Class] "UncompressedSupport"=dword:1 "MJPEGSupport"=dword:0
转自Tony嵌入式论坛,地址:http://www.cevx.com/bbs/thread-38322-1-1.html
//=====以上是微软网站内容
借荐的最好的一个网站:http://www.msembed.com/,有介绍怎么使用的。按照它的步骤来做,在加入了usb摄像头驱动后会在编译wicne6系统时出现一个错误。Error - variable "PCI_BUS_ROOT" not defined。要去掉这个错误。要到如下目录中:
根盘符:wince600\PLATFORM\SMDK6410\FILES\platform.reg 加入如下定义:
#define BUILTIN_ROOT HKEY_LOCAL_MACHINE\Drivers\BuiltIn
#define PCI_BUS_ROOT $(BUILTIN_ROOT)\PCI
再重新编译就可以正常了,写到开发板中,再插上摄像头,就不会再出现提示要输入usb设置名称的框子了。说明驱动加入了。在开发板的windows目录下,有一个测试程序,也不知怎么系统好像自带的,打开运行,会发现可以打开摄像头了。
其中有一个小插曲,用网上介绍的方法,去编译摄像头程序时,找不到它的测试用源代码。介绍说可能是装wince6时没有选上,我想了想确定是选上了。后来又用同事带的wince6的安装文件装,就有了。说明我现在用的wince6这个安装包没有这个源码,还有在使用修复安装时,用我从开发板厂家买来的这个盘,提示无法进行修复安装。但用同事的那个安装文件就可以正常的修复安装。再次说明开发板厂家提供的这个安装盘有点小小的问题。