wince6下cetk下摄像头编译过程

时间:2022-05-11 17:27:02

作者:BB高擎天的空间

转自:http://hi.baidu.com/cahbb/item/d1413b9cd4f9b0db1f4271af


按照微软官网上的一个文章有几个错误没有编译成功,后来又找一个文章CSDN空间的wushibin的专栏,结合在一起就可以编译成功了。现记录如下:

(以下内容是官网介绍)应用程序的编译: 
现在我们已经将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’. 编译结束后会有很多错误,先执行第一步解决方法:

括号中的问题本人未出现,但记录下来。(首先执行 build 命令。如果是第一次编译的话它可能会产生这样一个错误:

The error msg was ... don't know how to make ....captureframework.lib. 
And so I tried to build the ...dshow/camera/framework/default directory in 
order to create the errored captureframework.lib file. And then another error 
msg was happened. 'cannot open program database 
'e:/wince600/osdesign/..../captureframework.pdb'. Of source, there was no 
such file at the path. 

你需要的只是建立一个那样的目录。

再次执行 build 命令 , 它会产生这样的错误!

don't know how to build STREEUTILS.LIB

 解决方法 :

把 E:/WINCE600/PUBLIC/OSTEST/OAK/LIB/ARMV4I/RETAIL 下面的 STREEUTILS.LIB 复制到E:/WINCE600/OSDesigns/OSAs6410Guide/OSAs6410Guide/Wince600/SMDK6410_ARMV4I/OAK/lib/ARMV4I/retail文件夹下面。)括号中的错误本人未出现,记录下来。

本人出现的问题如下:

error C2039: 'CoDisconnectObject' : is not a member of '`global namespace''

error C2873: 'CoDisconnectObject' : symbol cannot be used in a using-declaration

………………………..

这个错误的原因是:在 wince600/others/atl8/include/atlcore.h 文件中定义了这样的一段:

#if !defined(_WIN32_WCE) || (!defined(_ATL_STATIC_LIB_IMPL) && !defined(_ATL_DLL_IMPL) && defined(_CE_DCOM))

using ::CoDisconnectObject;

using ::CoInitialize;

using ::CoRevokeClassObject;

using ::CoRegisterClassObject;

using ::CoReleaseMarshalData;

using ::CoMarshalInterface;

using ::CoUnmarshalInterface;

using ::OleSaveToStream;

using ::OleLoadFromStream;

#endif // !defined(_WIN32_WCE) || (!defined(_ATL_STATIC_LIB_IMPL) && !defined(_ATL_DLL_IMPL) && defined(_CE_DCOM) 

定义这个是因为我们的 CE 支持一些功能。 见里面的一句话: http://www.tech-archive.net/Archive/WindowsCE/microsoft.public.windowsce.embedded.vc/2008-03/msg00042.html 

Looking at the ATL file you're hitting errors, those fcns are only brought 
in when this #ifdef is set.
#if !defined(_WIN32_WCE) || (!defined(_ATL_STATIC_LIB_IMPL) && 
!defined(_ATL_DLL_IMPL) && defined(_CE_DCOM))
--
We have this ifdef because those fcns are supported on CE devices that 
support the full cross-proc COM. So looks like you have _WIN32_WCE defined 
to get the fcns, but didn't build with full DCOM to get the actual fcn 
definitions? 

解决这个问题的方法:

查找 _CE_DCOM 宏的定义, 并把它全部注释掉。

它的定义在 WINCE600/OTHERS/ATL8/INCLUDE/ATLDEFACE.H 第 53 行 和 78 行。
• 编译将在这些路径中进行, 不过最后会有"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:"将会显示在这个组合对话框中。

wince6下cetk下摄像头编译过程

选择需要的过滤器并点击OK,这将会以摄像头支持的、接近于注册表设置项"PreferredWidth"中数值的尺寸大小来运行摄像头的预览功能。你可以检查$(_WINCEROOT)\PUBLIC\ThirdParty\Catalog\USBCam\Driver\usbcam.reg这个注册表文件来确定"PreferredWidth"注册表项。
wince6下cetk下摄像头编译过程  
同时请根据Webcam支持的输出格式来设置如下的注册表项。我的摄像头支持YUV无压缩输出,所以我的相应的注册表项设置为:

[HKEY_LOCAL_MACHINE\Drivers\USB\ClientDrivers\Video_Class] "UncompressedSupport"=dword:1 "MJPEGSupport"=dword:0