PCI總線視頻采集卡及其Windows95驅動程序設計_第1頁
PCI總線視頻采集卡及其Windows95驅動程序設計_第2頁
PCI總線視頻采集卡及其Windows95驅動程序設計_第3頁
PCI總線視頻采集卡及其Windows95驅動程序設計_第4頁
PCI總線視頻采集卡及其Windows95驅動程序設計_第5頁
已閱讀5頁,還剩8頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

精品文檔-下載后可編輯PCI總線視頻采集卡及其Windows95驅動程序設計

視頻采集卡是計算機視頻應用中的重要設備,承擔,將模擬視頗信號轉換成數字視頻信號的任務。Windows95是目前應用比較廣泛的操作系統,許多視撅應用系統是基于該平臺開發的。不僅采集卡設計人員孺要詳細了解Windows95系統中視頻采集卡驅動程序設計技術,應用程序設計人員也需要理解驅動程序的工作原理,以便設計出性能更好的應用程序。本文為你介紹Windows95系統中視頻采集卡驅動程序設計技術。1Windows95驅動程序原理

Windows95時期Windows95終結了DOS實模式的歷史,是真正獨立的32位操作系統。Win95使用數種不同的驅動驅動程序模型。在操作系統中,程序必須通過系統內核上的驅動來控制硬件,而這些驅動必須完全符合操作系統對驅動加載、連接、讀寫的規定,并且使用相關系統API(ApplicationProgrammingInterface)函數來控制。Windows95的驅動程序類型以D為中心D又稱虛擬設備驅動。它不僅適用于硬件設備,還能虛擬出不存在的"軟件設備",如虛擬光驅。所有運行Windows的程序都分為兩個保護級:Ring0和Ring3。系統進程運行于Ring0級,這個保護級的程序擁有完全的系統控制權限,可對所有的系統資源進行訪問與管理;普通應用程序運行與Ring3級,不允許對系統資源進行直接訪問且很多操作系統也受到限制,如果程序強行訪問的話,Windows就會給出出錯提示并強制結束——我們會經常看到某些程序運行中出現"常規保護錯誤"等錯誤提示,也就是這個原因。所有的Ring3級程序在Windows下都受到80×86保護模式的嚴格"監視",使應用程序無法進行的操作,不過,D能使應用程序具有擴展操作系統的能力,開發人員通過讓運行于Ring3級的普通程序加載具有Ring0級的D,從而實現底層控制。不幸的是,著名的"CIH"病毒就是利用了D技術才可以破壞主板BIOS。

WDM模型WDM模型采用分層結構,首先是由模型來描述設備驅動程序的標準結構;其次微軟為常見類型的設備提供一系列的總線驅動程序和類型驅動程序。模型描述驅動程序如何安裝和啟動,類驅動則具有為許多標準類型設備所需的基本功能。標準的WDM驅動應該包含1個總線驅動和1個功能驅動。總線驅動:總線驅動已經包含在Windows中,不必另行安裝。總線包括PCI、AGP、并口、串口、IEEE1394接口等。總線驅動主要負責管理總線設備,例如當我們在PCI插槽上插入新硬件,開啟電腦并進入系統后總線驅動開始工作——發現新硬件,并提示用戶安裝驅動程序。不僅如此,總線驅動還會實時向操作系統總線設備狀態,檢測總線上有什么類型的設備,這就是家喻戶曉的"即插即用"。總線設備還負責設備的電源管理(ACPI),比如Windows的休眠功能。當我們通過控制面板選擇不同電源管理模式時,電源管理器就會通過系統發出的電源命令向總線驅動發出改變電源狀態的請求,總線驅動會響應這些請求并設置相應設備的電源狀態。功能驅動:這就是常說的驅動程序,由類驅動程序和Mini驅動程序組成。其中,類驅動用來處理常規系統事務,如電源管理和即插即用,這都是由微軟定義好的,程序開發者只需要編寫Mini驅動即可。功能驅動一般由設備生產廠商提供,用以實現硬件設備的具體功能。例如NVIDIA系列顯卡只有在"雷管"驅動的支持下才能使用抗鋸齒和各項異性過慮。過慮驅動:過慮驅動程序位于其他的驅動程序層之間,提供一些附加功能但不影響其他驅動程序,例如不少品牌電腦宣傳的一鍵上網功能是通過鍵盤過慮驅動和應用程序來實現的。

Windows95視頻采集卡設備驅動程序包括虛擬設備驅動程序和可安裝設備驅動程序兩部分,一般可以采用MicrosoftWindows95DDK(DeviceDriverKit)進行原形、輸入庫以及一些樣例代碼,但是未提供編程所需要的編譯、匯編和連接程序。采用VisualC++5.0、VisualC++1.5以及MASM6.0進行程序設計。設備驅動程序設計的好壞與采集卡的功能、性能、兼容性及穩定性密切相關。為保證驅動程序的質量,應當嚴格遵照Windows95DDK的文檔進行程序設計。

2虛擬設備驅動程序設計

在視頻采集卡的驅動程序中,虛擬設備驅動程序CAPTURE.D負責參與系統即插即用配置過程,管理視頻采集卡的硬件設備,并向運行在權限級3的上層程序提供調用接口:一是將分配的資源返回,如內存選擇子、I/O地址、中斷號等,使得上層驅動程序可以使用這資源來操縱采集卡硬件設備;二是完成一些在權限級3所不能進行的操作,如分配DMA緩沖區、查看內存映射頁表等。虛擬機管理器和虛擬設備驅動程序運行在一個單一的32位平板模式址空間中,權限級為0。系統建立兩個基地址為0、界限為4GB的全局描述符選擇子分別用于代碼段和數據段,程序不應當直接修改段寄存器、內存描述符表、中斷描述符表。

2.1設備聲明

虛擬設備驅動程序必須包含一個聲明,它一般位于程序的前部,聲明中包括虛擬設備驅動程序的名稱、版本號、調用接口等一些重要信息。

設備名稱定義了虛擬設備驅動程序的名稱。設備控制過程接受來虛擬機管理器的消息,并根據不同消息進行不同的操作。設備標識符是一個16位整數,它是該程序在系統中的標識。初始化次確定虛擬設備驅動程序的裝載順序,首先裝入初始化次序值較小的虛擬設備驅動程序。V86API接口用于接受來自虛擬8086模式程序的調用。PMAPI接口接受來自16位保護模式程序的調用。

2.2設備控制過程

由于Windows對系統底層操作采取了屏蔽的策略,因而對用戶而言,系統變得更為安全,但這卻給眾多的硬件或者系統軟件開發人員帶來了不小的困難,因為只要應用中涉及到底層的操作,開發人員就不得不深入到Windows的內核去編寫屬于系統級的虛擬設備驅動程序。Win98與Win95設備驅動程序的機理不盡相同,Win98不僅支持與WindowsNT5.0兼容的WDM(Win32DriverMode)模式驅動程序,而且還支持與Win95兼容的虛擬設備驅動程序VxD(VirtualDeviceDriver)。下面介紹了基于Windows9x平臺的虛擬環境、虛擬設備驅動程序VxD的基本原理和設計方法,下面為可視電話音頻卡配套的虛擬設備驅動程序VxD的設計實例:

BeginProcWBD848_Control

Control_DispatchSys_Dynamic_Device_Init,WBD848_Dyn_Device_Init

Control_DispatchSys_Dynamic_Device_Exit,WBD848_Dyn_Device_Exit

Control_DispatchPnP_New_DevNode,WBD848_PnP_New_DevNode

Control_DispatchW32_DEDVICEIOCONTROL,WBD848_W32_DeviceIOControl

Clc

Ret

EndProcWBD848_Control

與視頻采集卡即插即用配置過程相關的消息是PnP_New_DevNode。系統首先檢測視頻采集卡硬件存在,然后根據PCI接口板廠商和器件標識在注冊表中找到對應的虛擬設備驅動程序并裝入內存,隨后系統向該虛擬設備驅動程序發送PnP_New_DevNode消息。因為視頻采集卡屬于多媒體設備,設備驅動程序的裝入應由MMDEVLDR.D完成,所以虛擬設備驅動程序在處理PnP_New_DevNode消息時,調用MMDEVLDR.D的服務MMDEVLDR_Register_Device_Driver注冊了回調函數PnP_Config_Handler,系統根據采集卡PCI配置空間為其分配資源后將調用此回調函數。在PnP_Config_Handler中可以使用CM_Get_Alloc_Log_Conf服務獲得系統為采集卡分配的資源。處理系統控制消息PnP_New_DevNode的例程如下:

BeginProcWBD848_PnP_New_DevNode

Moveax,ebx;虛擬機句柄

Movebx,offset32PnP_Config_Handler;即插卻用處理例程

VxDCallMMDEVLDR_Register_Device_Driver

Moveax,CR_SUCCESS

Stc

Ret

EndProcWBD848_PnP_New_DevNode

在回調函數PnP_Config_Handler中獲得的資源包括內存、I/O、中斷和DMA四種。PCI總線視頻采集卡主要使用內存和中斷資源,它包括一個內存窗口作為內存映射I/O和一個中斷IRQ號。虛擬設備驅動程序應用使用_MapPhysToLonear服務將內存窗口物理地址映射到線性地址空間中,并使用_Allocate_GDT_Selector服務分配內存選擇字,以便16位應用程序訪問該內存區域。

2.3應用程序接口

虛擬設備驅動程序為虛擬8086模式、16位及32位保護模式應用程序分別提供應用程序編程接口,使運行在權限級3上的應用程序可以訪問虛擬設備驅動程序。前兩種接口在設備聲明時定義,應用程序通過中斷調用INT28HAX=1648H獲得虛擬設備驅動程序的入口地址。32位接口通過W32_DEVICEIOCONTROL系統信息消息實現,應用程序則使用系統API函數DeviceIoControl對虛擬設備驅動程序進行調用。

當16位應用程序對入口地址發出遠調用后,虛擬機管理順將應用程序的寄存器內容保存在Client_Reg_Struc結構中,并將指向該結構的指針賦予EBP寄存器,然后調用相應的虛擬設備驅動程序。虛擬設備驅動程序必須訪問Client_Reg_Struc結構中的數據以獲得應用程序的調用參數。一般利用AX寄存器傳遞功能號,利用其它寄存器傳遞參數,執行結果通過Client_Reg_Struc結構返回。16位保護模式應用程序使用選擇子——偏移量地址模型,而虛擬設備驅動程序使用32位平板式地址模型,如果參數是以指針的形式傳遞給虛擬設備驅動程序,需要使用宏Client_Ptr_Flat進行轉換。

本采集卡中虛擬設備驅動程序提供的主要功能是:(1)使應用程序獲得系統為采集卡分配的資源,如內存映射、I/O地址和中斷IRQ號,以便操縱采集卡;(2)提供有關內存頁表的信息,以便進行DMA操作。16位應用程序接口的部分代碼如下:

;********CopyPageTable********

Client_Ptr_Flateax,ES,BX;es:bx指向頁表緩沖區

Client_Ptr_Flatebx,DI,SI;di:si指向DMA緩沖區

Shrebx,12;起始頁號

Movzecx,[ebp].Client_CX;cx為需要拷貝的頁表項個數

VMMcall_CopyPageTableebx,ecx,eax,0

Mov[ebp].Client_EAX,eax;ax返回執行結果

Ret

;**********GetResource**********

movzxeax,_g_wSelector;存儲器映射I/O地址選擇子

mov[ebp].Client_EAX,eaz

movzxeax,_g_wIRQ

mov[ebp].Client_EBX,eax

ret

32位應用程序接口的功能與16位接口十分相似,只是將存儲器映射I/O地址以32位線性地址的方式返回,以適應32位平板模式的尋址要求。另外32位接口不返回中斷IRQ號,因為32位應用程序中不進行有關中斷的操作。

3可安裝設備驅動程序

3.1VideoForWindow編程模型

視頻采集卡可安裝設備驅動程序采用VideoForWindow程序模型,它從各種各樣的視頻采集卡抽象出一個統一的邏輯結構,以便上層程序調用。上層程序主要是指由AVICap32.dll等系統動態鏈接庫構成的視頻采集引擎。視頻采集引擎負責顯示視頻數據、分配數據緩沖區、操縱系統調色板、存儲AVI文件等工作,它們將應用程序的調用翻譯成低級消息發送給可安裝設備驅動程序。可安裝設備驅動程序在消息的控制下,操縱采集卡硬件設備,完成視頻數據的采集。VideoForWindow驅動程序邏輯結構如圖2所示。

VideoForWindow驅動程序模型包括視頻源、幀存儲器、顯示設備、CPU和四個視頻數據通道。幀存儲器只具有邏輯上意義,可能在采集卡上或位于主機內存中或者根本上不存在。它在圖2中只表明處于該閏置的應當是已經解碼完整的視頻數據。四個視頻數據邏輯通道的功能如下:

ExternalIn代表視頻信號由模擬向數字的轉換過程,包括采樣量化、解碼等工作。該通道負責視頻信號的選擇(攝像機、錄像機、調諧器等),視頻信號制式選擇(NTSC、PAL、SECAM等),亮度、對比度、色調的調節等工作。

VideoIn代表視頻數據由幀存儲器向系統緩沖區的傳輸過程。該通道負責視頻圖像數據的傳輸工作,如設定圖像大小、彩色格式,確定圖像幀的同步定時等。

ExternalOut代表視頻數據向顯示設備的直接傳輸過程。該通道負責視頻圖像的實時顯示工作,如確定顯示窗數據格式,進行顯示窗口的剪裁等。

VideoOut代表視頻數據由系統緩沖區向幀存儲器的反向傳輸過程。該通道負責視頻數據的回放,具有視頻解壓縮功能的休集卡可能需要這種反向的傳輸,以便對壓縮數據進行解碼。

3.2數據傳輸

驅動程序將采集到的數據傳送到上層程序時使用VIDEOHDR結構,該結構包含了數據緩沖區、數據長度、時間戳等信息,定義如下:

typedefstruct{

LPSTRlpData;//addressofvideobuffer

DWORDdwBufferLength;//size,inbytes,ofthedatabuffer

DWORDdwBufferLength;//size,inbytes,ofthedatabuffer

DWORDdwBytesUsed;

DWORDdwTimeCeptured;

DWORDdwUser;//user-specificdata

DWORDdwFlags;

DWORDdwReserved[4];//reserved;donotuse}VIDEOHDR;

LpData視頻數據緩沖區指針,由采集引擎填寫;

dwBufferLength視頻數據緩沖區長度,由采集引擎填寫;

dwBytesUsed緩沖區中圖像數據的實際長度,由驅動程序填寫;

dwTimeCaptured時間戳,從采集幀起以ms為單位記錄,用于視頻數據的同步,由驅動程序填寫;

dwFlage標志,驅動程序應當填寫VHDR_DONE以表示采集完成,如果此幀為關鍵幀還可以同時使用VHDR_KEYFRAME標志。

緩沖區通常由視頻采集引擎分配,并鈄VIDEOHOR結構指針以消息參數形式發送給驅動程序。當進行單幀采集時,驅動程序每收到一個DVM_FRAME消息便采集一幀圖像,驅動程序從DVM_FRAME消息返回時將VIDEOHDR結構返回給采集引擎。

序列圖像的采集比較復雜,驅動程序與采集引擎間以緩沖區隊列的形式進行數據交換,確保了連續的實時采集。采集引擎使用DVM_ADDBUFFER消息將空數據緩沖區不斷地加到緩沖區隊列的隊尾。同時,驅動程序將空數據緩沖區從隊列的隊首取出,并進行視頻采集。驅動程序將填充視頻數據的緩沖區通過回調函數返回給采集引擎,由它進行顯示、存盤等操作。添加緩沖區和取出緩沖區是兩個相對獨立的異步操作。采集引擎是緩沖區的生產者,它可以在系統空閑時分配若干個緩沖區并加入隊尾。驅動程序是緩沖區的消費者,在采集卡硬件中斷的驅動下它不斷取出空緩沖區,并將用過的緩沖區返還給采集引擎。

3.3視頻實時顯示

視頻圖像實時顯示功能又稱為Overlay,它將視頻圖像以窗口方式在計算機屏幕上實時顯示,顯示的畫面具有良好的視覺效果,顯示窗口與Windows95的圖形具有良好的視

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論