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