winCE6 0攝像頭驅動分析

2021-06-20 04:50:39 字數 1250 閱讀 7676

**:

分析閱讀的是s3c6410 wince6.0的攝像頭驅動,s5pv210雖然也是6.0,但結構大不相同,暫且不提。

根據msdn,應用層呼叫攝像頭驅動初始化時序如下:1)呼叫cam_init和cam_open。2)dshow呼叫findfirstdevice得到裝置名,呼叫createfile開啟。3)dshow用csproperty_pin_ctypes 得到驅動支援的pin的數量,用csproperty_pin_category得到每個pin的種類,用csproperty_pin_devicename得到pin的名字(通常是pin1:)。4)dshow呼叫createfile開啟pin驅動,初始化stream,設定它的properties, data format,並為它分配buffer。5)例項化stream,設定它的種類,並新增乙個queue,用於在驅動和dshow間非同步傳遞資料。

本文以pin_iocontrol中的動作來分析攝像頭驅動,主要關注preview動作相關的部分,buffer分配以csproperty_buffer_client_limited為例(這也是本人開發環境下實際採用的方式)。

pin_iocontrol中的各種命令碼可以簡單歸結為如下框圖。除pin_iocontrol外,每個橙色方框中的子命令由cpindevice類實現,函式名標於方框中。

具體的iocontrol配置步驟和分析思路採用感激不盡~),各步驟呼叫時序如下所述。

0. cam_init中初始化cam,逐層呼叫到在s3c6410_camera.cpp的camerainit()可以看到,其中將各暫存器的物理位址對映成虛擬位址,初始化外設模組,設定gpio,時鐘,設定dma buffer的物理和虛擬位址,初始化中斷。

1.例項化各種pin介面

3.初始化sensor狀態,包括camera時鐘、gpio、復位等設定,之後設定capture的狀態為pause。可以看出這步需要和camera外設互動,正確設定外設的暫存器數值,使其正常工作。

4.管理pin的buffer,本環境中由使用者層分配

5.設定still和capture的pin為pause狀態。

6.設定preview的pin為run狀態。

7.新增buffer到驅動的佇列中。cs_enqueue時,在cpindevice的enqueuedescriptor()裡,把應用層傳過來的buffer marshall到pindevice的m_pstreamdescriptorlist裡。

8.中斷處理。在幀同步的中斷中,從buffer中copy image,加入queue中。

攝像頭驅動的工作流程大致如上。

WinCE6 0驅動移植

裝置管理器 裝置管理 在private winceos coreos device 目錄.看看裝置管理器的入口點devmain.c.在wince5.0時代,裝置管理器是作為乙個程序來實現的 devece.exe.所以裡面就是乙個入口函式winmain 呼叫startdevicemanager 函式....

DirectShow驅動攝像頭

對於小攝像頭的驅動有幾種方法,通過使用directshow來驅動攝像頭靈活性比較好,有簡單的方法也有比較複雜但更有效的方法,本文只介紹簡單方法,希望與大家交流!用directshow來使用攝像頭,一般要求攝像頭的驅動是wdm格式的,當然,一些比較老的驅動格式directshow也可支援。direct...

wince6 0編譯命令分析

下面從csdn幫助文件簡要說明vs2005下面的系統編譯命令,這些命令位於build advanced build commonds 一共有六條命令,分別是 1.sysgen 2.clean sysgen 3.build and sysgen 4.rebuild and clean sysgen 5...