PCI總線視頻采集卡及其Windows95驅(qū)動(dòng)程序設(shè)計(jì)
出處:電子技術(shù)應(yīng)用 發(fā)布于:2011-09-05 14:19:51
1 Windows95驅(qū)動(dòng)程序原理
Windows 95 時(shí)期 Windows95終結(jié)了DOS實(shí)模式的歷史,是真正獨(dú)立的32位操作系統(tǒng)。Win95使用數(shù)種不同的驅(qū)動(dòng)驅(qū)動(dòng)程序模型。在操作系統(tǒng)中,程序必須通過(guò)系統(tǒng)內(nèi)核上的驅(qū)動(dòng)來(lái)控制硬件,而這些驅(qū)動(dòng)必須完全符合操作系統(tǒng)對(duì)驅(qū)動(dòng)加載、連接、讀寫(xiě)的規(guī)定,并且使用相關(guān)系統(tǒng)API(Application Programming Interface)函數(shù)來(lái)控制。Windows 95的驅(qū)動(dòng)程序類(lèi)型以VXD為中心VXD又稱(chēng)虛擬設(shè)備驅(qū)動(dòng)。它不僅適用于硬件設(shè)備,還能虛擬出不存在的"軟件設(shè)備",如虛擬光驅(qū)。 所有運(yùn)行Windows的程序都分為兩個(gè)保護(hù)級(jí):Ring0和Ring3。系統(tǒng)進(jìn)程運(yùn)行于Ring0級(jí),這個(gè)保護(hù)級(jí)的程序擁有完全的系統(tǒng)控制權(quán)限,可對(duì)所有的系統(tǒng)資源進(jìn)行訪問(wèn)與管理;普通應(yīng)用程序運(yùn)行與Ring3級(jí),不允許對(duì)系統(tǒng)資源進(jìn)行直接訪問(wèn)且很多操作系統(tǒng)也受到限制,如果程序強(qiáng)行訪問(wèn)的話,Windows就會(huì)給出出錯(cuò)提示并強(qiáng)制結(jié)束——我們會(huì)經(jīng)??吹侥承┏绦蜻\(yùn)行中出現(xiàn)"常規(guī)保護(hù)錯(cuò)誤"等錯(cuò)誤提示,也就是這個(gè)原因。 所有的Ring3級(jí)程序在Windows下都受到80×86保護(hù)模式的嚴(yán)格"監(jiān)視",使應(yīng)用程序無(wú)法進(jìn)行的操作,不過(guò),VXD能使應(yīng)用程序具有擴(kuò)展操作系統(tǒng)的能力,開(kāi)發(fā)人員通過(guò)讓運(yùn)行于Ring3級(jí)的普通程序加載具有Ring0級(jí)的VXD,從而實(shí)現(xiàn)底層控制。不幸的是,著名的"CIH"病毒就是利用了VXD技術(shù)才可以破壞主板BIOS。
WDM 模型 WDM模型采用分層結(jié)構(gòu),首先是由模型來(lái)描述設(shè)備驅(qū)動(dòng)程序的標(biāo)準(zhǔn)結(jié)構(gòu);其次微軟為常見(jiàn)類(lèi)型的設(shè)備提供一系列的總線驅(qū)動(dòng)程序和類(lèi)型驅(qū)動(dòng)程序。模型描述驅(qū)動(dòng)程序如何安裝和啟動(dòng),類(lèi)驅(qū)動(dòng)則具有為許多標(biāo)準(zhǔn)類(lèi)型設(shè)備所需的基本功能。標(biāo)準(zhǔn)的WDM驅(qū)動(dòng)應(yīng)該包含1個(gè)總線驅(qū)動(dòng)和1個(gè)功能驅(qū)動(dòng)。 總線驅(qū)動(dòng):總線驅(qū)動(dòng)已經(jīng)包含在Windows中,不必另行安裝??偩€包括PCI、AGP、并口、串口、IEEE1394接口等??偩€驅(qū)動(dòng)主要負(fù)責(zé)管理總線設(shè)備,例如當(dāng)我們?cè)赑CI插槽上插入新硬件,開(kāi)啟電腦并進(jìn)入系統(tǒng)后總線驅(qū)動(dòng)開(kāi)始工作——發(fā)現(xiàn)新硬件,并提示用戶(hù)安裝驅(qū)動(dòng)程序。不僅如此,總線驅(qū)動(dòng)還會(huì)實(shí)時(shí)向操作系統(tǒng)總線設(shè)備狀態(tài),檢測(cè)總線上有什么類(lèi)型的設(shè)備,這就是家喻戶(hù)曉的"即插即用"??偩€設(shè)備還負(fù)責(zé)設(shè)備的電源管理(ACPI),比如Windows的休眠功能。當(dāng)我們通過(guò)控制面板選擇不同電源管理模式時(shí),電源管理器就會(huì)通過(guò)系統(tǒng)發(fā)出的電源命令向總線驅(qū)動(dòng)發(fā)出改變電源狀態(tài)的請(qǐng)求,總線驅(qū)動(dòng)會(huì)響應(yīng)這些請(qǐng)求并設(shè)置相應(yīng)設(shè)備的電源狀態(tài)。 功能驅(qū)動(dòng):這就是常說(shuō)的驅(qū)動(dòng)程序,由類(lèi)驅(qū)動(dòng)程序和Mini驅(qū)動(dòng)程序組成。其中,類(lèi)驅(qū)動(dòng)用來(lái)處理常規(guī)系統(tǒng)事務(wù),如電源管理和即插即用,這都是由微軟定義好的,程序開(kāi)發(fā)者只需要編寫(xiě)Mini驅(qū)動(dòng)即可。功能驅(qū)動(dòng)一般由設(shè)備生產(chǎn)廠商提供,用以實(shí)現(xiàn)硬件設(shè)備的具體功能。例如NVIDIA系列顯卡只有在"雷管"驅(qū)動(dòng)的支持下才能使用抗鋸齒和各項(xiàng)異性過(guò)慮。 過(guò)慮驅(qū)動(dòng):過(guò)慮驅(qū)動(dòng)程序位于其他的驅(qū)動(dòng)程序?qū)又g,提供一些附加功能但不影響其他驅(qū)動(dòng)程序,例如不少品牌電腦宣傳的一鍵上網(wǎng)功能是通過(guò)鍵盤(pán)過(guò)慮驅(qū)動(dòng)和應(yīng)用程序來(lái)實(shí)現(xiàn)的。
Windows95視頻采集卡設(shè)備驅(qū)動(dòng)程序包括虛擬設(shè)備驅(qū)動(dòng)程序和可安裝設(shè)備驅(qū)動(dòng)程序兩部分,一般可以采用Microsoft Windows95 DDK(Device Driver Kit)進(jìn)行原形、輸入庫(kù)以及一些樣例代碼,但是未提供編程所需要的編譯、匯編和連接程序。采用Visual C++ 5.0、Visual C++ 1.5以及MASM 6.0進(jìn)行程序設(shè)計(jì)。設(shè)備驅(qū)動(dòng)程序設(shè)計(jì)的好壞與采集卡的功能、性能、 兼容性及穩(wěn)定性密切相關(guān)。為保證驅(qū)動(dòng)程序的質(zhì)量,應(yīng)當(dāng)嚴(yán)格遵照Windows95 DDK的文檔進(jìn)行程序設(shè)計(jì)。
2 虛擬設(shè)備驅(qū)動(dòng)程序設(shè)計(jì)
在視頻采集卡的驅(qū)動(dòng)程序中,虛擬設(shè)備驅(qū)動(dòng)程序CAPTURE.VXD負(fù)責(zé)參與系統(tǒng)即插即用配置過(guò)程,管理視頻采集卡的硬件設(shè)備,并向運(yùn)行在權(quán)限級(jí)3的上層程序提供調(diào)用接口:一是將分配的資源返回,如內(nèi)存選擇子、I/O地址、中斷號(hào)等,使得上層驅(qū)動(dòng)程序可以使用這資源來(lái)操縱采集卡硬件設(shè)備;二是完成一些在權(quán)限級(jí)3所不能進(jìn)行的操作,如分配DMA緩沖區(qū)、查看內(nèi)存映射頁(yè)表等。虛擬機(jī)管理器和虛擬設(shè)備驅(qū)動(dòng)程序運(yùn)行在一個(gè)單一的32位平板模式址空間中,權(quán)限級(jí)為0。系統(tǒng)建立兩個(gè)基地址為0、界限為4GB的全局描述符選擇子分別用于代碼段和數(shù)據(jù)段,程序不應(yīng)當(dāng)直接修改段寄存器、內(nèi)存描述符表、中斷描述符表。
2.1 設(shè)備聲明
虛擬設(shè)備驅(qū)動(dòng)程序必須包含一個(gè)聲明,它一般位于程序的前部,聲明中包括虛擬設(shè)備驅(qū)動(dòng)程序的名稱(chēng)、版本號(hào)、調(diào)用接口等一些重要信息。
設(shè)備名稱(chēng)定義了虛擬設(shè)備驅(qū)動(dòng)程序的名稱(chēng)。設(shè)備控制過(guò)程接受來(lái)虛擬機(jī)管理器的消息,并根據(jù)不同消息進(jìn)行不同的操作。設(shè)備標(biāo)識(shí)符是一個(gè)16位整數(shù),它是該程序在系統(tǒng)中的標(biāo)識(shí)。初始化次確定虛擬設(shè)備驅(qū)動(dòng)程序的裝載順序,首先裝入初始化次序值較小的虛擬設(shè)備驅(qū)動(dòng)程序。V86 API接口用于接受來(lái)自虛擬8086模式程序的調(diào)用。PM API接口接受來(lái)自16位保護(hù)模式程序的調(diào)用。
2.2 設(shè)備控制過(guò)程
由于Windows對(duì)系統(tǒng)底層操作采取了屏蔽的策略,因而對(duì)用戶(hù)而言,系統(tǒng)變得更為安全,但這卻給眾多的硬件或者系統(tǒng)軟件開(kāi)發(fā)人員帶來(lái)了不小的困難,因?yàn)橹灰獞?yīng)用中涉及到底層的操作,開(kāi)發(fā)人員就不得不深入到Windows的內(nèi)核去編寫(xiě)屬于系統(tǒng)級(jí)的虛擬設(shè)備驅(qū)動(dòng)程序。Win 98與Win 95設(shè)備驅(qū)動(dòng)程序的機(jī)理不盡相同,Win 98不僅支持與Windows NT 5.0兼容的WDM(Win32 Driver Mode)模式驅(qū)動(dòng)程序,而且還支持與Win 95兼容的虛擬設(shè)備驅(qū)動(dòng)程序VxD(Virtual Device Driver)。下面介紹了基于Windows 9x平臺(tái)的虛擬環(huán)境、虛擬設(shè)備驅(qū)動(dòng)程序VxD的基本原理和設(shè)計(jì)方法,下面為可視電話音頻卡配套的虛擬設(shè)備驅(qū)動(dòng)程序VxD的設(shè)計(jì)實(shí)例:
BeginProc WBD848_Control
Control_Dispatch Sys_Dynamic_Device_Init,WBD848_Dyn_Device_Init
Control_Dispatch Sys_Dynamic_Device_Exit,WBD848_Dyn_Device_Exit
Control_Dispatch PnP_New_DevNode,WBD848_PnP_New_DevNode
Control_Dispatch W32_DEDVICEIOCONTROL,WBD848_W32_DeviceIOControl
Clc
Ret
EndProc WBD848_Control
與視頻采集卡即插即用配置過(guò)程相關(guān)的消息是PnP_New_DevNode。系統(tǒng)首先檢測(cè)視頻采集卡硬件存在,然后根據(jù)PCI接口板廠商和器件標(biāo)識(shí)在注冊(cè)表中找到對(duì)應(yīng)的虛擬設(shè)備驅(qū)動(dòng)程序并裝入內(nèi)存,隨后系統(tǒng)向該虛擬設(shè)備驅(qū)動(dòng)程序發(fā)送PnP_New_DevNode消息。因?yàn)橐曨l采集卡屬于多媒體設(shè)備,設(shè)備驅(qū)動(dòng)程序的裝入應(yīng)由MMDEVLDR.VXD完成,所以虛擬設(shè)備驅(qū)動(dòng)程序在處理PnP_New_DevNode消息時(shí),調(diào)用MMDEVLDR.VXD的服務(wù)MMDEVLDR_Register_Device_Driver注冊(cè)了回調(diào)函數(shù)PnP_Config_Handler,系統(tǒng)根據(jù)采集卡PCI配置空間為其分配資源后將調(diào)用此回調(diào)函數(shù)。在PnP_Config_Handler中可以使用CM_Get_Alloc_Log_Conf服務(wù)獲得系統(tǒng)為采集卡分配的資源。處理系統(tǒng)控制消息PnP_New_DevNode的例程如下:
BeginProc WBD848_PnP_New_DevNode
Mov eax,ebx ;虛擬機(jī)句柄
Mov ebx, offset32 PnP_Config_Handler;即插卻用處理例程
VxDCall MMDEVLDR_Register_Device _Driver
Mov eax,CR_SUCCESS
Stc
Ret
EndProc WBD848_PnP_New_DevNode
在回調(diào)函數(shù)PnP_Config_Handler中獲得的資源包括內(nèi)存、I/O、中斷和DMA四種。PCI總線視頻采集卡主要使用內(nèi)存和中斷資源,它包括一個(gè)內(nèi)存窗口作為內(nèi)存映射I/O和一個(gè)中斷IRQ號(hào)。虛擬設(shè)備驅(qū)動(dòng)程序應(yīng)用使用_MapPhysToLonear服務(wù)將內(nèi)存窗口物理地址映射到線性地址空間中,并使用_Allocate_GDT_Selector服務(wù)分配內(nèi)存選擇字,以便16位應(yīng)用程序訪問(wèn)該內(nèi)存區(qū)域。
2.3 應(yīng)用程序接口
虛擬設(shè)備驅(qū)動(dòng)程序?yàn)樘摂M8086模式、16位及32位保護(hù)模式應(yīng)用程序分別提供應(yīng)用程序編程接口,使運(yùn)行在權(quán)限級(jí)3上的應(yīng)用程序可以訪問(wèn)虛擬設(shè)備驅(qū)動(dòng)程序。前兩種接口在設(shè)備聲明時(shí)定義,應(yīng)用程序通過(guò)中斷調(diào)用INT28H AX=1648H獲得虛擬設(shè)備驅(qū)動(dòng)程序的入口地址。32位接口通過(guò)W32_DEVICEIOCONTROL系統(tǒng)信息消息實(shí)現(xiàn),應(yīng)用程序則使用系統(tǒng)API函數(shù)DeviceIoControl對(duì)虛擬設(shè)備驅(qū)動(dòng)程序進(jìn)行調(diào)用。
當(dāng)16位應(yīng)用程序?qū)θ肟诘刂钒l(fā)出遠(yuǎn)調(diào)用后,虛擬機(jī)管理順將應(yīng)用程序的寄存器內(nèi)容保存在Client_Reg_Struc結(jié)構(gòu)中,并將指向該結(jié)構(gòu)的指針賦予EBP寄存器,然后調(diào)用相應(yīng)的虛擬設(shè)備驅(qū)動(dòng)程序。虛擬設(shè)備驅(qū)動(dòng)程序必須訪問(wèn)Client_Reg_Struc結(jié)構(gòu)中的數(shù)據(jù)以獲得應(yīng)用程序的調(diào)用參數(shù)。一般利用AX寄存器傳遞功能號(hào),利用其它寄存器傳遞參數(shù),執(zhí)行結(jié)果通過(guò)Client_Reg_Struc結(jié)構(gòu)返回。16位保護(hù)模式應(yīng)用程序使用選擇子——偏移量地址模型,而虛擬設(shè)備驅(qū)動(dòng)程序使用32位平板式地址模型,如果參數(shù)是以指針的形式傳遞給虛擬設(shè)備驅(qū)動(dòng)程序,需要使用宏Client_Ptr_Flat進(jìn)行轉(zhuǎn)換。
本采集卡中虛擬設(shè)備驅(qū)動(dòng)程序提供的主要功能是:(1)使應(yīng)用程序獲得系統(tǒng)為采集卡分配的資源,如內(nèi)存映射、I/O地址和中斷IRQ號(hào),以便操縱采集卡;(2)提供有關(guān)內(nèi)存頁(yè)表的信息,以便進(jìn)行DMA操作。16位應(yīng)用程序接口的部分代碼如下:
?。?******* Copy Page Table ********
Client_Ptr_Flat eax,ES,BX ;es:bx指向頁(yè)表緩沖區(qū)
Client_Ptr_Flat ebx,DI,SI ;di:si指向DMA緩沖區(qū)
Shr ebx,12 ;起始頁(yè)號(hào)
Movz ecx,[ebp].Client_CX ;cx為需要拷貝的頁(yè)表項(xiàng)個(gè)數(shù)
VMMcall _CopyPageTable <ebx,ecx,eax,0>
Mov [ebp].Client_EAX,eax ;ax返回執(zhí)行結(jié)果
Ret
;********** Get Resource **********
movzx eax, _g_wSelector ;存儲(chǔ)器映射I/O地址選擇子
mov [ebp].Client_EAX,eaz
movzx eax,_g_wIRQ
mov [ebp].Client_EBX,eax
ret
32位應(yīng)用程序接口的功能與16位接口十分相似,只是將存儲(chǔ)器映射I/O地址以32位線性地址的方式返回,以適應(yīng)32位平板模式的尋址要求。另外32位接口不返回中斷IRQ號(hào),因?yàn)?2位應(yīng)用程序中不進(jìn)行有關(guān)中斷的操作。
3 可安裝設(shè)備驅(qū)動(dòng)程序
3.1 Video For Window編程模型
視頻采集卡可安裝設(shè)備驅(qū)動(dòng)程序采用Video For Window程序模型,它從各種各樣的視頻采集卡抽象出一個(gè)統(tǒng)一的邏輯結(jié)構(gòu),以便上層程序調(diào)用。上層程序主要是指由AVICap32.dll等系統(tǒng)動(dòng)態(tài)鏈接庫(kù)構(gòu)成的視頻采集引擎。視頻采集引擎負(fù)責(zé)顯示視頻數(shù)據(jù)、分配數(shù)據(jù)緩沖區(qū)、操縱系統(tǒng)調(diào)色板、存儲(chǔ)AVI文件等工作,它們將應(yīng)用程序的調(diào)用翻譯成低級(jí)消息發(fā)送給可安裝設(shè)備驅(qū)動(dòng)程序??砂惭b設(shè)備驅(qū)動(dòng)程序在消息的控制下,操縱采集卡硬件設(shè)備,完成視頻數(shù)據(jù)的采集。Video For Window驅(qū)動(dòng)程序邏輯結(jié)構(gòu)如圖2所示。
Video For Window驅(qū)動(dòng)程序模型包括視頻源、幀存儲(chǔ)器、顯示設(shè)備、CPU和四個(gè)視頻數(shù)據(jù)通道。幀存儲(chǔ)器只具有邏輯上意義,可能在采集卡上或位于主機(jī)內(nèi)存中或者根本上不存在。它在圖2中只表明處于該閏置的應(yīng)當(dāng)是已經(jīng)解碼完整的視頻數(shù)據(jù)。四個(gè)視頻數(shù)據(jù)邏輯通道的功能如下:
External In代表視頻信號(hào)由模擬向數(shù)字的轉(zhuǎn)換過(guò)程,包括采樣量化、解碼等工作。該通道負(fù)責(zé)視頻信號(hào)的選擇(攝像機(jī)、錄像機(jī)、調(diào)諧器等),視頻信號(hào)制式選擇(NTSC、PAL、SECAM等),亮度、對(duì)比度、色調(diào)的調(diào)節(jié)等工作。
Video In 代表視頻數(shù)據(jù)由幀存儲(chǔ)器向系統(tǒng)緩沖區(qū)的傳輸過(guò)程。該通道負(fù)責(zé)視頻圖像數(shù)據(jù)的傳輸工作,如設(shè)定圖像大小、彩色格式,確定圖像幀的同步定時(shí)等。
External Out 代表視頻數(shù)據(jù)向顯示設(shè)備的直接傳輸過(guò)程。該通道負(fù)責(zé)視頻圖像的實(shí)時(shí)顯示工作,如確定顯示窗數(shù)據(jù)格式,進(jìn)行顯示窗口的剪裁等。
Video Out 代表視頻數(shù)據(jù)由系統(tǒng)緩沖區(qū)向幀存儲(chǔ)器的反向傳輸過(guò)程。該通道負(fù)責(zé)視頻數(shù)據(jù)的回放,具有視頻解壓縮功能的休集卡可能需要這種反向的傳輸,以便對(duì)壓縮數(shù)據(jù)進(jìn)行解碼。
3.2 數(shù)據(jù)傳輸
驅(qū)動(dòng)程序?qū)⒉杉降臄?shù)據(jù)傳送到上層程序時(shí)使用VIDEOHDR結(jié)構(gòu),該結(jié)構(gòu)包含了數(shù)據(jù)緩沖區(qū)、數(shù)據(jù)長(zhǎng)度、時(shí)間戳等信息,定義如下:
typedef struct {
LPSTR lpData; //address of video buffer
DWORD dwBufferLength; //size,in bytes,of the data buffer
DWORD dwBufferLength; //size,in bytes,of the data buffer
DWORD dwBytesUsed;
DWORD dwTimeCeptured;
DWORD dwUser; //user-specific data
DWORD dwFlags;
DWORD dwReserved[4];//reserved;do not use }VIDEOHDR;
LpData 視頻數(shù)據(jù)緩沖區(qū)指針,由采集引擎填寫(xiě);
dwBufferLength 視頻數(shù)據(jù)緩沖區(qū)長(zhǎng)度,由采集引擎填寫(xiě);
dwBytesUsed 緩沖區(qū)中圖像數(shù)據(jù)的實(shí)際長(zhǎng)度,由驅(qū)動(dòng)程序填寫(xiě);
dwTimeCaptured 時(shí)間戳,從采集幀起以ms為單位記錄,用于視頻數(shù)據(jù)的同步,由驅(qū)動(dòng)程序填寫(xiě);
dwFlage 標(biāo)志,驅(qū)動(dòng)程序應(yīng)當(dāng)填寫(xiě)VHDR_DONE以表示采集完成,如果此幀為關(guān)鍵幀還可以同時(shí)使用VHDR_KEYFRAME標(biāo)志。
緩沖區(qū)通常由視頻采集引擎分配,并鈄VIDEOHOR結(jié)構(gòu)指針以消息參數(shù)形式發(fā)送給驅(qū)動(dòng)程序。當(dāng)進(jìn)行單幀采集時(shí),驅(qū)動(dòng)程序每收到一個(gè)DVM_FRAME消息便采集一幀圖像,驅(qū)動(dòng)程序從DVM_FRAME消息返回時(shí)將VIDEOHDR結(jié)構(gòu)返回給采集引擎。
序列圖像的采集比較復(fù)雜,驅(qū)動(dòng)程序與采集引擎間以緩沖區(qū)隊(duì)列的形式進(jìn)行數(shù)據(jù)交換,確保了連續(xù)的實(shí)時(shí)采集。采集引擎使用DVM_ADDBUFFER消息將空數(shù)據(jù)緩沖區(qū)不斷地加到緩沖區(qū)隊(duì)列的隊(duì)尾。同時(shí),驅(qū)動(dòng)程序?qū)⒖諗?shù)據(jù)緩沖區(qū)從隊(duì)列的隊(duì)首取出,并進(jìn)行視頻采集。驅(qū)動(dòng)程序?qū)⑻畛湟曨l數(shù)據(jù)的緩沖區(qū)通過(guò)回調(diào)函數(shù)返回給采集引擎,由它進(jìn)行顯示、存盤(pán)等操作。添加緩沖區(qū)和取出緩沖區(qū)是兩個(gè)相對(duì)獨(dú)立的異步操作。采集引擎是緩沖區(qū)的生產(chǎn)者,它可以在系統(tǒng)空閑時(shí)分配若干個(gè)緩沖區(qū)并加入隊(duì)尾。驅(qū)動(dòng)程序是緩沖區(qū)的消費(fèi)者,在采集卡硬件中斷的驅(qū)動(dòng)下它不斷取出空緩沖區(qū),并將用過(guò)的緩沖區(qū)返還給采集引擎。
3.3 視頻實(shí)時(shí)顯示
視頻圖像實(shí)時(shí)顯示功能又稱(chēng)為Overlay,它將視頻圖像以窗口方式在計(jì)算機(jī)屏幕上實(shí)時(shí)顯示,顯示的畫(huà)面具有良好的視覺(jué)效果,顯示窗口與Windows95的圖形具有良好的視覺(jué)效果,顯示窗口號(hào)Windows95的圖形界面配合默契。要實(shí)現(xiàn)這些功能,首先采集卡必須具有將數(shù)據(jù)直接傳輸至顯示卡的硬件設(shè)備,因?yàn)閷?shí)時(shí)顯示數(shù)據(jù)傳輸量巨大,主機(jī)CPU是不可能承擔(dān)這樣的任務(wù)的;其次要求軟硬件設(shè)備默契配合。
DirectDraw是一種軟件接口標(biāo)準(zhǔn),提供了對(duì)顯示設(shè)備的直接訪問(wèn)。它將顯示畫(huà)面分成表面(Surface),每種表面具有不同的屬性,如尺寸大小、彩色格式等。整個(gè)屏幕對(duì)應(yīng)的表面稱(chēng)為主表面,程序可以在顯存或內(nèi)存中建立其它表面,并在這些表面中繪制圖形,然后通過(guò)某種操作這些表面的內(nèi)容顯示在主表面上,這些操作是高效率的,程序可以從中獲得很高的性能。Overlay表面具有特殊的性質(zhì),它位于顯存,并且可以覆蓋顯示在主表面的任何位置。
當(dāng)驅(qū)動(dòng)程序的External Out通道收到DVM_STREAM_INIT消息時(shí),開(kāi)始視頻實(shí)時(shí)顯示。首先啟動(dòng)DirectDraw接口,創(chuàng)建主表面和Overlay表面,并記錄有關(guān)Overlay表面的信息,如尺寸、數(shù)據(jù)格式、內(nèi)存地址等,同時(shí)為Overlay表面選擇一個(gè)顏色作為色鍵,通常是洋紅色。然后根據(jù)Overlay表面的信息初始化硬件設(shè)備,使DMA設(shè)備將視頻數(shù)據(jù)直接關(guān)入Overlay表面所在的顯存中。當(dāng)顯示窗口移動(dòng)或改變大小時(shí),視頻采集引擎會(huì)發(fā)送DVM_UPDATE消息通知驅(qū)動(dòng)程序更新顯示,驅(qū)動(dòng)程序應(yīng)當(dāng)在視頻窗口中填充色鍵的顏色,并移動(dòng)Overlay表面使其與視頻窗口對(duì)齊。因?yàn)榭砂惭b設(shè)備驅(qū)動(dòng)程序是16位模塊,而DirectDraw位于32位模塊中,在采集卡驅(qū)動(dòng)程序中不能直接調(diào)用DirectDraw接口,故意需借助Flat Thunk在16位與32位模塊間建立聯(lián)系。
本設(shè)備驅(qū)動(dòng)程序朝陽(yáng)區(qū)分利用PCI總線的帶寬和Windows95系統(tǒng)資源,獲得了較高的采集速率(384×288×24bits 25fps),實(shí)現(xiàn)了實(shí)時(shí)視頻顯示。
版權(quán)與免責(zé)聲明
凡本網(wǎng)注明“出處:維庫(kù)電子市場(chǎng)網(wǎng)”的所有作品,版權(quán)均屬于維庫(kù)電子市場(chǎng)網(wǎng),轉(zhuǎn)載請(qǐng)必須注明維庫(kù)電子市場(chǎng)網(wǎng),http://www.hbjingang.com,違反者本網(wǎng)將追究相關(guān)法律責(zé)任。
本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)或證實(shí)其內(nèi)容的真實(shí)性,不承擔(dān)此類(lèi)作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個(gè)人從本網(wǎng)轉(zhuǎn)載時(shí),必須保留本網(wǎng)注明的作品出處,并自負(fù)版權(quán)等法律責(zé)任。
如涉及作品內(nèi)容、版權(quán)等問(wèn)題,請(qǐng)?jiān)谧髌钒l(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。
- ARM技術(shù)架構(gòu)與應(yīng)用開(kāi)發(fā)實(shí)踐指南2026/1/6 10:40:19
- 嵌入式實(shí)時(shí)操作系統(tǒng)(RTOS)選型與移植技術(shù)指南2025/12/31 10:42:31
- 工業(yè)嵌入式系統(tǒng):通信接口技術(shù)選型與抗干擾設(shè)計(jì)實(shí)踐2025/12/15 14:36:53
- 深入解析嵌入式 OPENAMP 框架:開(kāi)啟異核通信新時(shí)代2025/7/22 16:27:29
- 一文快速了解OPENWRT基礎(chǔ)知識(shí)2025/7/14 16:59:04
- 編碼器的工作原理及作用1
- 超強(qiáng)整理!PCB設(shè)計(jì)之電流與線寬的關(guān)系2
- 三星(SAMSUNG)貼片電容規(guī)格對(duì)照表3
- 電腦藍(lán)屏代碼大全4
- 國(guó)標(biāo)委發(fā)布《電動(dòng)汽車(chē)安全要求第3部分:人員觸電防護(hù)》第1號(hào)修改單5
- 通俗易懂談上拉電阻與下拉電阻6
- 繼電器的工作原理以及驅(qū)動(dòng)電路7
- 電容單位8
- 跟我學(xué)51單片機(jī)(三):?jiǎn)纹瑱C(jī)串口通信實(shí)例9
- 一種三極管開(kāi)關(guān)電路設(shè)計(jì)10
- 高速PCB信號(hào)完整性(SI)設(shè)計(jì)核心實(shí)操規(guī)范
- 鎖相環(huán)(PLL)中的環(huán)路濾波器:參數(shù)計(jì)算與穩(wěn)定性分析
- MOSFET反向恢復(fù)特性對(duì)系統(tǒng)的影響
- 電源IC在惡劣環(huán)境中的防護(hù)設(shè)計(jì)
- 連接器耐腐蝕性能測(cè)試方法
- PCB電磁兼容(EMC)設(shè)計(jì)與干擾抑制核心實(shí)操規(guī)范
- 用于相位噪聲測(cè)量的低通濾波器設(shè)計(jì)與本振凈化技術(shù)
- MOSFET在高頻開(kāi)關(guān)中的EMI問(wèn)題
- 電源IC在便攜式設(shè)備中的設(shè)計(jì)要點(diǎn)
- 連接器結(jié)構(gòu)設(shè)計(jì)常見(jiàn)問(wèn)題分析









