亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

覆蓋表面視頻信息的獲取方法

文檔序號:6410558閱讀:133來源:國知局
專利名稱:覆蓋表面視頻信息的獲取方法
技術(shù)領(lǐng)域
本發(fā)明涉及屏幕捕獲技術(shù),尤其涉及一種覆蓋表面視頻信息的獲取方法。
背景技術(shù)
目前大部分的媒體播放器均使用了Directx技術(shù),而且對于現(xiàn)有的大部分顯示卡,都可以使用Directdraw的Overlay(覆蓋表面)技術(shù)顯示活動視頻。覆蓋表面是具有顯示卡支持能力的表面,通常用于顯示活動視頻、錄制視頻或靜止位圖。所述覆蓋表面的支持完全由硬件即顯示卡提供,DirectDraw支持顯示設(shè)備驅(qū)動程序所支持的特性,DirectDraw不能仿真覆蓋表面。
覆蓋表面的工作原理同透明塑料紙覆蓋的原理很相似,可以將所述覆蓋表面想象為一片透明塑料紙,在這片塑料紙上畫圖并可將其放置在顯示器前面。塑料紙覆蓋在顯示器前面時,可以看到覆蓋表面和主表面,移去塑料紙后,主表面并沒有改變。當顯示一個覆蓋表面時,就是告訴設(shè)備驅(qū)動程序在哪里怎樣使覆蓋表面可見,然后當顯示設(shè)備掃描線重畫到顯示器上時,檢查主表面上的每一個像素,看是否被覆蓋表面所代替;如果是,顯示卡就從覆蓋表面中抽取相關(guān)像素的數(shù)據(jù)替代,顯示卡在顯示器上生成主表面和覆蓋表面的合成表面,產(chǎn)生透明和拉伸效果而不需要改變每個表面的內(nèi)容,所述合成表面通過視頻數(shù)據(jù)流直接送到顯示器進行顯示。
由于覆蓋表面處理和像素替代是硬件級的操作,能夠用不同的像素格式無縫地合成主表面和覆蓋表面,所以不存在明顯的性能損失。
因此,如果播放器采用了覆蓋表面的方式播放視頻,視頻內(nèi)容出現(xiàn)在覆蓋表面上,現(xiàn)有技術(shù)進行屏幕捕捉只是單純捕捉主表面是無法得到覆蓋表面的視頻內(nèi)容的,這樣會造成抓取視頻數(shù)據(jù)不是想要的視頻數(shù)據(jù)甚至在視頻窗口中呈現(xiàn)一片黑色。
現(xiàn)有技術(shù)只是單純的抓取屏幕數(shù)據(jù)保存在本地,不能及時共享和發(fā)布給其他好友,在即時通信場合加入視頻捕獲特性,可以增強雙方的溝通體驗;另外,現(xiàn)有技術(shù)只能每次抓取一幀圖像,不能一次抓取多幀圖像并轉(zhuǎn)換生成GIF(圖形交換格式)文件。

發(fā)明內(nèi)容
本發(fā)明提供一種覆蓋表面視頻信息的獲取方法,解決現(xiàn)有技術(shù)中無法捕捉覆蓋表面視頻數(shù)據(jù)的問題。
為解決上述問題,本發(fā)明覆蓋表面視頻信息的獲取方法包括以下步驟1)在當前應(yīng)用程序的進程空間中建立新的組件對象實例;2)從該新組件對象中獲取新組件對象模型接口指針;3)以所述新組件對象模型接口指針為首指針,進入鏈表,沿鏈表尋找所有保存的組件對象模型接口;4)調(diào)用當前組件對象指針獲取覆蓋表面指針;5)利用覆蓋表面指針獲得該覆蓋表面的視頻數(shù)據(jù)及特征信息;6)根據(jù)該覆蓋表面的視頻數(shù)據(jù)及特征信息重組再現(xiàn)圖像。
進一步,步驟3)、4)之間包括判斷該保存的組件對象模型接口的進程標識與當前的應(yīng)用程序的進程標識是否相同;如果相同,則表示找到當前進程使用組件對象,返回該保存的組件對象模型接口指針及組件對象指針;如果保存的組件對象模型接口的進程標識與當前的應(yīng)用程序的進程標識不相同,則更換另一版本的組件對象模型接口指針作為新組件對象模型接口指針執(zhí)行步驟3)。判斷該組件對象的主表面是否有覆蓋表面標識且覆蓋表面可見;若可以,執(zhí)行步驟4);如果組件對象的主表面沒有覆蓋表面標識或者覆蓋表面不可見,則返回或者抓取主表面進一步,所述視頻信息為單幀獲取,則再現(xiàn)圖像以位圖格式存儲。
進一步,所述視頻信息為多幀獲取,則按預定幀數(shù)、時間間隔、縮放比例重復所述步驟1)至6),再現(xiàn)圖像以圖形交換格式存儲。
進一步,所述視頻數(shù)據(jù)指可以與三原色空間的轉(zhuǎn)換的視頻色差數(shù)據(jù),通過覆蓋表面指針獲取保存該覆蓋表面對應(yīng)的視頻數(shù)據(jù)的緩沖區(qū)的指針獲得。
進一步,執(zhí)行該方法之前包括步驟建立一個系統(tǒng)鉤子程序,響應(yīng)系統(tǒng)的鍵盤消息;當在播放器上按下一個指定的按鍵后,鉤子程序開始執(zhí)行下面步驟;判斷當前的應(yīng)用程序是否使用了DirectDraw,如果沒有,則返回;如果有,則執(zhí)行步驟1)。
與現(xiàn)有技術(shù)相比,本發(fā)明具有以下優(yōu)點可以捕獲覆蓋表面的視頻信息,并且可以完成靜態(tài)和動態(tài)獲取;再現(xiàn)的圖像格式(靜態(tài)獲取采用位圖格式,動態(tài)獲取采用圖形交換格式),則容易在網(wǎng)上及即時通信工具中傳輸和顯示。


圖1是本發(fā)明覆蓋表面視頻信息的獲取方法流程圖。
具體實施例方式
現(xiàn)有技術(shù)中屏幕捕獲方法僅僅對主表面進行操作,而當采用覆蓋表面顯示時則無法獲取覆蓋表面的視頻數(shù)據(jù)而無法獲得確切的視頻數(shù)據(jù),所以必須能夠獲取到覆蓋表面的視頻信息才能夠確切獲得視頻數(shù)據(jù)。
DirectDraw,通過DirectDraw對象(本申請文件中以組件對象作為其中文稱謂)創(chuàng)建各種不同種類的“表面”(Surface),表面上的內(nèi)容可以被自由地拷貝、組合,生成千變?nèi)f化的圖形。DirectDraw對象用來表示顯示硬件,,可以用于查詢和獲取各種支持的組件對象模型接口(COM接口,致力于可重復利用接口資源的面向?qū)ο笙到y(tǒng)的基礎(chǔ))、設(shè)置協(xié)作等級,操作顯示模式和顯示表面。各個表面由相應(yīng)的表面對象表示。在DirectDraw中通過對象指針訪問對象進而訪問對象代表的實體,通常APIs(應(yīng)用程序編程接口)由對象和基于COM接口組成。
DirectDraw可以把表面創(chuàng)建在顯示內(nèi)存(顯存)或系統(tǒng)內(nèi)存中,而顯示內(nèi)存又分為常規(guī)顯示內(nèi)存和AGP加速圖形接口內(nèi)存。由于顯示內(nèi)存容量是有限的,所以每個表面具體應(yīng)該創(chuàng)建在哪部分存儲區(qū)域中應(yīng)該統(tǒng)籌規(guī)劃,一般將使用頻繁,需要硬件加速或?qū)崿F(xiàn)功能的表面安排在顯示內(nèi)存。如果您不指定表面創(chuàng)建的位置,DirectDraw將首先在常規(guī)顯示內(nèi)存創(chuàng)建表面,當常規(guī)顯示內(nèi)存不夠時,若系統(tǒng)支持AGP內(nèi)存,則先使用AGP內(nèi)存,最終使用系統(tǒng)內(nèi)存。
DirectDraw本質(zhì)上是對顯存進行管理,允許直接在顯存里存儲和操縱位圖。利用視頻硬件Bliter(位塊傳輸器)在顯存內(nèi)部進行位圖的Blit(位塊傳輸)。
所述表面分以下幾種類型(1)主表面(Primary Surface)即在屏幕上顯示出來的表面;每個DirectDraw對象只能有一個主表面,主表面的尺寸、位置和格式由系統(tǒng)當前的顯示模式?jīng)Q定,不能改動。
(2)離屏表面(Off-screen Surface)此類表面不能被直接看到。一般來說,后臺表面往往用于作為游戲精靈動畫、背景圖形等部件的存儲緩沖區(qū)。
(3)覆蓋表面(Overlay Surface)位于顯存,并且可以覆蓋顯示在主表面的任何位置,是一種由硬件支持的表面,DirectDraw不能仿真。為了防止覆蓋表面遮蓋主表面中的某些重要部分如菜單、對話框等,覆蓋表面還高有色鍵功能,只有主表面中的顏色值與色鍵值相同時,覆蓋表面才覆蓋主表面。
當開始視頻實時顯示,首先啟動DirectDraw接口(即組件對象模型接口),創(chuàng)建主表面和覆蓋表面,并記錄有關(guān)覆蓋表面的信息,如尺寸、數(shù)據(jù)格式、內(nèi)存地址等,同時為覆蓋表面選擇一個顏色作為色鍵,通常是洋紅色。然后根據(jù)覆蓋表面的信息初始化硬件設(shè)備,使DMA(存儲器直接訪問)設(shè)備將視頻數(shù)據(jù)直接送入覆蓋表面所在的顯存中。當顯示窗口移動或改變大小時,視頻采集引擎會發(fā)送通知驅(qū)動程序更新顯示,驅(qū)動程序應(yīng)當在視頻窗口中填充色鍵的顏色,并移動覆蓋表面使其與視頻窗口對齊。
請參照圖1所示,本發(fā)明覆蓋表面視頻信息的獲取方法,包括以下步驟1)在當前應(yīng)用程序的進程空間中建立新的DirectDraw對象(組件對象)實例,因為使用組件對象模型接口必須先創(chuàng)建DirectDraw對象;2)從該新組件對象中獲取新組件對象模型接口指針;3)由于系統(tǒng)所使用的所有的組件對象模型接口指針以鏈表的形式在內(nèi)存中保存,以所述新組件對象模型接口指針為首指針,進入鏈表,沿鏈表尋找所有保存的組件對象模型接口;4)判斷該保存的組件對象模型接口的進程標識與當前的應(yīng)用程序的進程標識是否相同;5)如果相同,則表示找到當前進程使用組件對象,返回該保存的組件對象模型接口指針及組件對象指針;如果不同,則更換另一版本的組件對象模型接口指針作為新組件對象模型接口指針,重新執(zhí)行步驟3);6)判斷該組件對象的主表面是否有覆蓋表面標識且覆蓋表面可見,因為每個DirectDraw對象只能有一個主表面,所以覆蓋表面依賴主表面存在;7)如果是,則調(diào)用當前組件對象指針獲取覆蓋表面指針;如果沒有覆蓋表面標識或覆蓋表面不可見,則返回或抓取主表面視頻信息;8)利用覆蓋表面指針獲得該覆蓋表面的視頻數(shù)據(jù)及特征信息,所述視頻數(shù)據(jù)指可以與三原色空間的轉(zhuǎn)換的視頻色差數(shù)據(jù),通過覆蓋表面指針獲取保存該覆蓋表面對應(yīng)的視頻數(shù)據(jù)的緩沖區(qū)的指針獲得;所述特征信息指視頻數(shù)據(jù)的格式、長度,寬度、高度、跨度、視頻數(shù)據(jù)的顏色位數(shù)以及保存視頻數(shù)據(jù)的緩沖區(qū)指針;9)根據(jù)該覆蓋表面的視頻數(shù)據(jù)及特征信息重組再現(xiàn)圖像,對應(yīng)相應(yīng)格式將視頻色差數(shù)據(jù)轉(zhuǎn)換成三原色空間的視頻數(shù)據(jù)再根據(jù)。
如果所述視頻信息為單幀獲取,則再現(xiàn)圖像以位圖格式存儲;如果所述視頻信息為多幀(動畫)獲取,則按預定幀數(shù)、時間間隔、縮放比例重復所述步驟1)至9),再現(xiàn)圖像以圖形交換格式(GIF格式)存儲。這樣在網(wǎng)頁可以直接顯示動畫;也可在支持GIF格式的即時通信工具中顯示動畫,傳給好友觀看。
執(zhí)行該方法之前包括步驟建立一個系統(tǒng)鉤子程序,響應(yīng)系統(tǒng)的鍵盤消息;當在播放器上按下一個指定的按鍵后,鉤子程序開始執(zhí)行下面步驟;判斷當前的應(yīng)用程序是否使用了DirectDraw,如果沒有,則返回;如果有,則執(zhí)行步驟1)。
具體實施中,采用如下函數(shù)實現(xiàn)使用DirectDrawCreate函數(shù)創(chuàng)建組件對象。
IDirectDraw表示DirectDraw提供的COM接口,而IDirectdraw7則表示第七版本的COM接口;調(diào)用DirectDrawCreate API函數(shù)能夠得到新建的組件對象指針;然后可以調(diào)用QueryInterface(IID_DirectDraw7,(Void**)&m_pDirectDraw7))函數(shù)取得IDirectdraw7的組件對象模型接口指針,即新組件對象模型接口指針。
以獲得IDirectdraw7的組件對象模型接口指針為首指針,進入鏈表,判斷向后的12個字節(jié)是否可以訪問;如果可以訪問,則判斷該片內(nèi)存的前四個字節(jié)的內(nèi)容是否與IDirectdraw7對象句柄相同;如果相同,則表示找到保存IDirectdraw7對象信息的內(nèi)存區(qū)域,然后調(diào)用pdwProcessID=(DWORD*)(((LPBYTE)*(pdwDirectDraw+1))+0x14),可以得到使用該組件對象接口(即IDirectdraw7)的進程標識(ID),其中用pdwDirectDraw表示該片內(nèi)存區(qū)域;當前應(yīng)用程序進程標識(ID)的獲取方法為DWORD dwProcessID=GetCurrentProcessId();比較判斷獲得的IDirectdraw7的進程標識和當前應(yīng)用程序進程標識;如果相同則表示找到當前進程使用組件對象,返回該保存的組件對象模型接口指針及組件對象指針。
調(diào)用組件對象的EnumSurfaces獲得覆蓋表面指針,具體調(diào)用為if(SUCCEEDED(pDirectDraw4->EnumSurfaces(DDENUMSURFACES_DOESEXIST,&ddsd2,this,EnumSurfacesCallback2)))得到的覆蓋表面指針保存到m_m_pPrimaryDirectDrawSurface4成員變量中。
由于所有表面的特征信息填充在DDSURFACEDESC結(jié)構(gòu)和DDPIXELFORMAT結(jié)構(gòu)中,所以調(diào)用GetSurfaceDesc方法可以得到對覆蓋表面的特征信息,如DDSURFACEDESC2 ddsd2={0};m_pPrimaryDirectDrawSurface4->GetSurfaceDesc(&ddsd2)抓取完畢后,將視頻色差數(shù)據(jù)(YUV,一般為YUV2,YV12,YUYV,UYUV)轉(zhuǎn)換為RGB(三原色)數(shù)據(jù),保存并復制到剪貼板中供使用。
所述YUV到RGB的轉(zhuǎn)換,遵循如下公式R=Y(jié)+1.403*(U-128)G=Y(jié)-0.344*(U-128)-0.714*(V-128)B=Y(jié)+1.773*(V-128)如果是靜態(tài)抓拍(單幀獲取),僅僅捕獲到當前播放的一幀數(shù)據(jù),只需要將緩沖區(qū)中的RGB數(shù)據(jù)生成BMP(位圖)文件,并存儲到剪切板中;如果是動態(tài)抓屏模式(多幀獲取),則將緩沖區(qū)中的RGB數(shù)據(jù)根據(jù)應(yīng)用指定的比例進行縮放后,插入到GIF的文件對象中;然后重復抓屏過程,直至生成指定幀數(shù)的GIF文件。
綜上所述,本發(fā)明覆蓋表面視頻信息的獲取方法可以捕獲覆蓋表面的視頻信息,并且可以按一定格式重現(xiàn)圖像/動畫。
權(quán)利要求
1.一種覆蓋表面視頻信息的獲取方法,包括以下步驟1)在當前應(yīng)用程序的進程空間中建立新的組件對象實例;2)從該新組件對象中獲取新組件對象模型接口指針;3)以所述新組件對象模型接口指針為首指針,進入鏈表,沿鏈表尋找所有保存的組件對象模型接口;4)調(diào)用當前組件對象指針獲取覆蓋表面指針;5)利用覆蓋表面指針獲得該覆蓋表面的視頻數(shù)據(jù)及特征信息;6)根據(jù)該覆蓋表面的視頻數(shù)據(jù)及特征信息重組再現(xiàn)圖像。
2.如權(quán)利要求1所述的覆蓋表面視頻信息的獲取方法,其特征在于,所述步驟(3)和步驟(4)之間還包括步驟判斷該保存的組件對象模型接口的進程標識與當前的應(yīng)用程序的進程標識是否相同;如果相同,則表示找到當前進程使用組件對象,返回該保存的組件對象模型接口指針及組件對象指針;如果保存的組件對象模型接口的進程標識與當前的應(yīng)用程序的進程標識不相同,則更換另一版本的組件對象模型接口指針作為新組件對象模型接口指針執(zhí)行步驟3)判斷該組件對象的主表面是否有覆蓋表面標識且覆蓋表面可見;如果組件對象的主表面沒有覆蓋表面標識或者覆蓋表面不可見,則返回或者抓取主表面。
3.如權(quán)利要求1所述的覆蓋表面視頻信息的獲取方法,其特征在于,所述視頻信息為單幀獲取,則再現(xiàn)圖像以位圖格式存儲。
4.如權(quán)利要求1所述的覆蓋表面視頻信息的獲取方法,其特征在于,所述視頻信息為多幀獲取,則按預定幀數(shù)、時間間隔、縮放比例重復所述步驟1)至6),再現(xiàn)圖像以圖形交換格式存儲。
5.如權(quán)利要求2或3所述的覆蓋表面視頻信息的獲取方法,其特征在于,所述視頻數(shù)據(jù)指可以與三原色空間的轉(zhuǎn)換的視頻色差數(shù)據(jù),通過覆蓋表面指針獲取保存該覆蓋表面對應(yīng)的視頻數(shù)據(jù)的緩沖區(qū)的指針獲得。
6.如權(quán)利要求1至3任一項所述的覆蓋表面視頻信息的獲取方法,其特征在于,執(zhí)行該方法之前包括步驟建立一個系統(tǒng)鉤子程序,響應(yīng)系統(tǒng)的鍵盤消息;當在播放器上按下一個指定的按鍵后,鉤子程序開始執(zhí)行下面步驟;判斷當前的應(yīng)用程序是否使用了DirectDraw,如果沒有,則返回;如果有,則執(zhí)行步驟1)。
全文摘要
本發(fā)明公開一種覆蓋表面視頻信息的獲取方法,包括以下步驟在當前應(yīng)用程序的進程空間中建立新的組件對象實例;從該新組件對象中獲取新組件對象模型接口指針;以所述新組件對象模型接口指針為首指針,進入鏈表,沿鏈表尋找所有保存的組件對象模型接口;調(diào)用當前組件對象指針獲取覆蓋表面指針;利用覆蓋表面指針獲得該覆蓋表面的視頻數(shù)據(jù)及特征信息;根據(jù)該覆蓋表面的視頻數(shù)據(jù)及特征信息重組再現(xiàn)圖像。
文檔編號G06F9/44GK1770096SQ20041005212
公開日2006年5月10日 申請日期2004年11月5日 優(yōu)先權(quán)日2004年11月5日
發(fā)明者張禹, 梁柱, 文強, 劉奇勇, 劉程偉 申請人:騰訊科技(深圳)有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1