wince6下cetk下攝像頭編譯過程

wince6下cetk下攝像頭編譯過程

按照微軟官網上的一個文章有幾個錯誤沒有編譯成功,後來又找一個文章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:"將會顯示在這個組合對話框中。

選擇需要的過濾器並點擊OK,這將會以攝像頭支持的、接近於註冊表設置項"PreferredWidth"中數值的尺寸大小來運行攝像頭的預覽功能。你可以檢查$(_WINCEROOT)\PUBLIC\ThirdParty\Catalog\USBCam\Driver\usbcam.reg這個註冊表文件來確定"PreferredWidth"註冊表項。
  
同時請根據Webcam支持的輸出格式來設置如下的註冊表項。我的攝像頭支持YUV無壓縮輸出,所以我的相應的註冊表項設置爲:

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章