專利名稱:采用過濾驅(qū)動獲取圖形設(shè)備接口調(diào)用的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計算機圖形及圖像處理領(lǐng)域,具體涉及一種通過過濾 驅(qū)動獲取計算機顯示設(shè)備圖形數(shù)據(jù)的方法。
背景技術(shù):
PC計算能力的增強和配套的圖形處理器使得PC上的圖形圖像處 理能力逐步增強,從早期的2D位圖、向量應用走向支持3D和視頻。 豐富內(nèi)容帶給用戶更好的體驗的同時也給需要同步獲得顯示內(nèi)容的應 用,比如遠程控制、遠程投影、多用戶共享和屏幕靜態(tài)截圖等帶來很 大挑戰(zhàn),特別是需要實時獲取屏幕內(nèi)容的應用。
關(guān)于實時獲取屏幕內(nèi)容的技術(shù)有軟件實現(xiàn)方式和硬件實現(xiàn)方式。 通過硬件來實時獲取屏幕內(nèi)容的技術(shù)是直接截取顯示適配器的視頻輸 出信號,并將其作為輸入源,輸入到視頻壓縮卡中,通過壓縮卡壓縮 后以流的形式記錄下來。這種硬件實現(xiàn)方案比較簡單,由于使用硬件 壓縮卡處理視頻信號,對計算機的處理能力沒有額外要求。但是這種 方案的缺點是需增加額外的視頻壓縮卡硬件,設(shè)備配置復雜,導致用 戶使用不便。此外,在硬件實現(xiàn)方案中,信號經(jīng)過兩次數(shù)模轉(zhuǎn)換,損 失了一定精度,存在較大失真,不能為用戶提供高質(zhì)量的畫面。
下面簡單介紹通過軟件來實時獲得屏幕內(nèi)容的技術(shù)。在Windows 操作系統(tǒng)下,應用程序通過GDI (圖形設(shè)備接口)完成屏幕的繪制, GDI支持圖元操作和點陣接口。圖元級接口相對高級,需要的描述數(shù) 據(jù)少,但無法直接顯示,需要Windows顯示體系和顯卡硬件配合才能 轉(zhuǎn)換成點陣輸出。點陣級接口相對低級,數(shù)據(jù)量大,但截獲的數(shù)據(jù)可 以直接顯示。因此,在軟件實現(xiàn)方案中,截獲GDI數(shù)據(jù)既可以在點陣 層次進行,也可以在圖元調(diào)用層次進行,或者二者結(jié)合進行。
第一種軟件實現(xiàn)方案是采用一個用戶態(tài)應用程序定時獲取
FmmeBuffer (幀緩沖),然后將獲取的幀圖像進行后繼處理。第二種 軟件實現(xiàn)方案是采用微軟公司定義的顯示Mirror體系,加載映象顯示 驅(qū)動程序(mirror),實時復制當前顯示屏的各個更新,然后將映象后 的數(shù)據(jù)進行壓縮以并流的形式記錄下來。
在第一種軟件實現(xiàn)方案中,每次獲取的是整個屏幕,不管區(qū)域有 沒有更新。而且該方案只能采用點陣接口,所以數(shù)據(jù)量大、處理慢、 帶寬要求高,適用于靜態(tài)單個屏幕截獲處理的應用。在第二種軟件實 現(xiàn)方案中,只獲取屏幕變化的部分,因而獲取圖像數(shù)據(jù)的速度更快, 在圖像顯示的同時即可被復制(實時性更高),被廣泛采用。但是,由 于視頻和3D處理源數(shù)據(jù)量大,而且需要復雜的本地計算,通常由顯 卡硬件的GPU (圖形處理單元)進行加速處理,所以微軟定義Mhror 體系時自動禁止了本地計算機的視頻和3D加速支持,使得依賴于3D 和視頻加速的應用程序無法運行,采用Mhror的應用程序的運行效果 受到很大限制。
因此,需要尋找一種類似Miiror的快速截獲GDI調(diào)用的方法,同 時支持視頻和3D加速。
發(fā)明內(nèi)容
鑒于上述問題,完成了本發(fā)明。本發(fā)明的目的是提供一種采用圖 形過濾驅(qū)動獲取圖形設(shè)備接口調(diào)用的方法,以支持本地計算機的視頻 和3D加速。
在本發(fā)明的一個方面,提出了一種采用過濾驅(qū)動截取圖形設(shè)備接 口調(diào)用的方法,所述過濾驅(qū)動對圖形設(shè)備接口引擎和真實顯示驅(qū)動是
透明的,所述方法包括步驟復制從真實顯示驅(qū)動返回的DDI函數(shù)表; 修改需要截取屏幕更新的真實顯示驅(qū)動的DDI函數(shù);創(chuàng)建輔助緩沖
區(qū),作為截獲的屏幕更新的更新緩沖區(qū);以及對更新緩沖區(qū)進行進一
步處理。
利用本發(fā)明的方法,可以通過軟件來實現(xiàn)對本地計算機的視頻和
3D加速支持,為用戶提供了高質(zhì)量的畫面和顯示效果。與現(xiàn)有技術(shù)的
Mhror體系相比,由于本發(fā)明未采用Mirror體系,系統(tǒng)的圖形設(shè)備接 口引擎并不知道存在過濾驅(qū)動,顯卡的視頻和3D加速功能仍然存在, 這些功能在系統(tǒng)中仍然可以獲得支持,采用視頻和3D加速的應用程 序可以正常運行。
圖1示出了根據(jù)本發(fā)明實施例的方法中所使用的圖形過濾驅(qū)動與 GDI引擎和真實顯示驅(qū)動之間的邏輯關(guān)系。
圖2是用來說明根據(jù)本發(fā)明實施例的方法的流程圖。
圖3是示出了在加載圖形過濾驅(qū)動的過程中需要復制和處理的接 口的名稱的DDI列表。
圖4以記錄更新點陣的TextOut為例示出了上述方法的步驟中的 處理流程。
具體實施例方式
以下對照附圖詳細說明本發(fā)明的具體實施方式
。在下面的說明中 省略了本領(lǐng)域公知的一些技術(shù)的細節(jié),因為對這些公知技術(shù)的詳細描
述將會導致本發(fā)明的一些特點和優(yōu)點變得不清楚。
在Windows操作系統(tǒng)中,顯示驅(qū)動被要求支持一系列圖形設(shè)備驅(qū) 動接口DDI,這些接口大致可以分為管理驅(qū)動的設(shè)備對象、Surface、 鼠標、設(shè)備位圖、DirectX和繪制DDI。 一個程序只要實現(xiàn)了 DDI接 口就可以作為顯示驅(qū)動被系統(tǒng)加載。
圖l示出了根據(jù)本發(fā)明實施例的方法中所使用的圖形過濾驅(qū)動150 與GDI引擎100和真實顯示驅(qū)動200之間的邏輯關(guān)系。
如圖1所示,本發(fā)明在GDI引擎100與真實顯示驅(qū)動200之間加 入了一個過濾層,稱為圖形過濾驅(qū)動150。通過安裝該圖形過濾驅(qū)動 150并對系統(tǒng)進行初始化,該過濾層對Windows GDI引擎100表現(xiàn)為 真實顯示驅(qū)動200,而對真實顯示驅(qū)動200則表現(xiàn)為Windows GDI引 擎100。也就是說,這里的圖形過濾驅(qū)動150對GDI引擎100和真實 顯示驅(qū)動200是透明的。
對于每個顯示更新對應的繪制DDI,圖形過濾驅(qū)動150的DDI首 先獲得調(diào)用,執(zhí)行時先調(diào)用真實顯示驅(qū)動的對應DDI完成本地顯示更 新,然后將該調(diào)用參數(shù)保存到調(diào)用更新表300中,或者調(diào)用GDI引 擎100轉(zhuǎn)化為點陣,同時記錄下顯示的畫面中變化的區(qū)域。
圖2是用來說明根據(jù)本發(fā)明實施例的方法的流程圖。如圖2所示, 在步驟S210,將上述的圖形過濾驅(qū)動150安裝為當前顯卡的虛擬驅(qū)動。
在安裝過程中,安裝程序獲取當前系統(tǒng)的主顯示設(shè)備的PND DeviceID (即插即用設(shè)備標識),枚舉并匹配顯卡注冊項 (4d36e968-e325-llce-bfcl-08002bel0318〉下每個注冊項的DeviceID。 對于匹配的注冊項,修改其Settings (設(shè)置)鍵下的 InstalledDisplayDrivers注冊項,將該Key的值修改為本發(fā)明的圖形過 濾驅(qū)動150的名字。
在步驟S220,操作系統(tǒng)通過圖形過濾驅(qū)動的名字獲得顯示驅(qū)動的 模塊名稱并加載到系統(tǒng)中,從而將圖形過濾驅(qū)動150加載到系統(tǒng)中。
在系統(tǒng)加載圖形過濾驅(qū)動期間,在驅(qū)動入口函數(shù)DrvEnableDriver 中,圖形過濾驅(qū)動150加載真實顯示驅(qū)動200,并將真實顯示驅(qū)動200 返回的DDI函數(shù)表復制一份,對需要截取屏幕更新的DDI函數(shù),將 其在函數(shù)表中的值修改成指向過濾驅(qū)動對應函數(shù)的指針,同時保存原 始函數(shù)指針,對不需要處理的函數(shù),比如視頻和3D加速接口,仍然 保留為真實顯示驅(qū)動的函數(shù)指針,復制的函數(shù)表返回給GDI。這樣, 圖形過濾驅(qū)動150實現(xiàn)了對真實顯示驅(qū)動200調(diào)用的過濾功能。
圖3是示出了在加載圖形過濾驅(qū)動的過程中需要復制和處理的接 口的名稱的DDI列表。
在這些接口 DDI中,圖形過濾驅(qū)動150需要實現(xiàn)所有的驅(qū)動管理 DDI,以實現(xiàn)將GDI要求的驅(qū)動加載、驅(qū)動禁止等功能截獲下來,創(chuàng) 建內(nèi)部的管理數(shù)據(jù),并將調(diào)用轉(zhuǎn)發(fā)給真實驅(qū)動的相應函數(shù)。
此外,繪制DDI是截獲內(nèi)容的重點,所有的屏幕更新都是通過繪 制DDI完成的,在這些函數(shù)中,圖形過濾驅(qū)動150記錄下更新DDI 的參數(shù)和更新的源數(shù)據(jù),保存到更新調(diào)用表300中,并調(diào)用真實顯示 驅(qū)動200的相應DDI完成本地繪制。如果需要,圖形過濾驅(qū)動150也
可以將更新DDI的調(diào)用轉(zhuǎn)換成點陣,保存到更新幀緩沖中。
此外,鼠標控制DDI實現(xiàn)鼠標位置和形狀更新,圖形過濾驅(qū)動 150將這些信息記錄下來供后繼處理400。
在步驟S230,圖形過濾驅(qū)動200的DrvEnableSurface DDI獲得調(diào) 用,該DDI負責創(chuàng)建一個主Surface,后繼的所有繪制DDI的輸出結(jié) 果都保存到該主Surface中,如果過濾驅(qū)動要保存更新緩沖,圖形過 濾過濾驅(qū)動150創(chuàng)建一個輔助Smface,作為截獲的屏幕更新的更新緩 沖,當后繼的繪制DDI被調(diào)用時,將繪制點陣保存在這個輔助Surface 中。
在步驟S240,需要截取屏幕更新的繪制DDI得到調(diào)用,圖形過 濾驅(qū)動150將調(diào)用參數(shù)和更新數(shù)據(jù)源保存到更新調(diào)用表300中,先通 過保存的原始函數(shù)指針調(diào)用真實驅(qū)動的DDI,完成真實顯卡的顯示更 新,如果要保存幀緩沖,圖形過濾驅(qū)動150自己或者借助GDI引擎 100在輔助Surface上完成繪制。這樣,在輔助緩沖區(qū)中的內(nèi)容就與顯 示屏幕得到了同步更新。
圖4以記錄更新點陣的TextOut為例示出了上述方法的步驟S240 中的處理流程。
如圖4所示,在步驟S410,系統(tǒng)首先判斷真實顯示驅(qū)動200是否 支持該DDI,如果支持,則在步驟S420,調(diào)用真實顯示驅(qū)動200的函
數(shù)更新本地顯示,否則跳過本地更新。
然后,在步驟S430,系統(tǒng)判斷圖形過濾驅(qū)動150是否在工作狀態(tài), 如果不工作,則結(jié)束。如果圖形過濾驅(qū)動在處于截屏狀態(tài),則在步驟 S440,查找在DrvEnablePDEV階段創(chuàng)建的過濾驅(qū)動的結(jié)構(gòu)。在步驟 S450,判斷是否找到。如果找到,說明該結(jié)構(gòu)的確是過濾驅(qū)動創(chuàng)建, 在步驟S460,鎖定輔助Surface,在步驟S470,將點陣繪制到該輔助 Surface中并在步驟S480解鎖該輔助Surface。在步驟S4卯,對獲得的 點陣進行后繼處理。
本發(fā)明的采用過濾驅(qū)動截獲GDI數(shù)據(jù)的方法可以應用于支持視 頻和3D應用的無線投影方案中,在該方案中對截獲的繪制DDI通過 調(diào)用GDI Engine的對應函數(shù)完成繪制處理,然后將保存在更新緩沖區(qū)
中的點陣通過其它模塊進行了壓縮編碼并通過網(wǎng)絡(luò)發(fā)送到投影機遠 端;也可以將截獲的繪制元語進行區(qū)分,對涉及點陣操作的DDI的點 陣數(shù)據(jù)進行壓縮處理,而對非點陣數(shù)據(jù)則直接處理更新緩沖中的繪制 元語,兩種數(shù)據(jù)一起發(fā)送到投影機端進行解壓縮和元語繪制,以復制 主機端的畫面。
以上所述,僅為本發(fā)明中的具體實施方式
,但本發(fā)明的保護范圍 并不局限于此,任何熟悉該技術(shù)的人在本發(fā)明所揭露的技術(shù)范圍內(nèi), 可輕易想到的變換或替換,都應涵蓋在本發(fā)明的包含范圍之內(nèi)。因此, 太發(fā)明的保護范圍應該以權(quán)利要求書的保護范圍為準。
權(quán)利要求
1.一種采用過濾驅(qū)動截取圖形設(shè)備接口調(diào)用的方法,所述過濾驅(qū)動對圖形設(shè)備接口引擎和真實顯示驅(qū)動是透明的,所述方法包括步驟復制從真實顯示驅(qū)動返回的DDI函數(shù)表;修改需要截取屏幕更新的真實顯示驅(qū)動的DDI函數(shù);創(chuàng)建輔助緩沖區(qū),作為截獲的屏幕更新的更新緩沖區(qū);以及對更新緩沖區(qū)進行后繼處理。
2. 根據(jù)權(quán)利要求l所述的方法,其特征在于,所述修改需要截取屏幕更新的DDI函數(shù)的步驟包括將需要截取屏幕更新的DDI函數(shù)在函數(shù)表中的值修改成指向過濾 驅(qū)動對應函數(shù)的指針,同時保存原始函數(shù)指針。
3. 根據(jù)權(quán)利要求l所述的方法,其特征在于,所述調(diào)用真實顯示 驅(qū)動的相應繪制DDI以完成本地顯示更新的步驟包括通過保存的原始函數(shù)指針調(diào)用真實顯示驅(qū)動的繪制DDI,完成真 實顯卡的顯示更新。
4. 根據(jù)權(quán)利要求l所述的方法,其特征在于,所述對更新緩沖區(qū)的后繼處理的步驟包括根據(jù)需要將更新緩沖區(qū)進行繪制成點陣或者直接處理截獲的元語。
5. 根據(jù)權(quán)利要求l所述的方法,其特征在于,還包括調(diào)用真實顯示驅(qū)動的相應繪制DDI,以完成本地的顯示更新。
全文摘要
公開了一種采用過濾驅(qū)動截取圖形設(shè)備接口調(diào)用的方法,所述過濾驅(qū)動對圖形設(shè)備接口引擎和真實顯示驅(qū)動是透明的,所述方法包括步驟復制從真實顯示驅(qū)動返回的DDI函數(shù)表;修改需要截取屏幕更新的真實顯示驅(qū)動的DDI函數(shù);創(chuàng)建輔助緩沖區(qū),作為截獲的屏幕更新的更新緩沖區(qū);以及對更新緩沖區(qū)進行后繼處理。利用本發(fā)明的方法,可以通過軟件來實現(xiàn)對本地計算機的視頻和3D加速支持,為用戶提供了高質(zhì)量的畫面和顯示效果。與現(xiàn)有技術(shù)的Mirror體系相比,由于本發(fā)明未采用Mirror體系,系統(tǒng)的圖形設(shè)備接口引擎并不知道存在過濾驅(qū)動,顯卡的視頻和3D加速功能仍然存在,這些功能在系統(tǒng)中仍然可以獲得支持,采用視頻和3D加速的應用程序可以正常運行。
文檔編號G06F9/44GK101105746SQ20061010323
公開日2008年1月16日 申請日期2006年7月14日 優(yōu)先權(quán)日2006年7月14日
發(fā)明者渤 劉, 孫成昆, 彭紹平, 李洪偉, 顏毅強 申請人:聯(lián)想(北京)有限公司