国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      使用單指令、多派遣指令的遠程桌面協(xié)議壓縮加速的制作方法

      文檔序號:7737841閱讀:180來源:國知局
      專利名稱:使用單指令、多派遣指令的遠程桌面協(xié)議壓縮加速的制作方法
      使用單指令、多派遣指令的遠程桌面協(xié)議壓縮加速
      背景技術(shù)
      雖然計算機曾經(jīng)被隔離并具有最少的或很少的與其他計算機的交互,但是,當今的計算機通過局域網(wǎng)(LAN)、廣域網(wǎng)(WAN)、撥號連接等等與各種其他計算機進行交互。隨著因特網(wǎng)的廣泛發(fā)展,計算機之間的連接變得越來越重要,并開啟了許多新的應用和技術(shù)。 大規(guī)模的網(wǎng)絡的發(fā)展,以及低成本的個人計算機的廣泛的可用性,根本上改變了許多人工作、交互、通信和玩的方式。一種聯(lián)網(wǎng)的越來越流行的形式一般可以被稱為虛擬計算系統(tǒng),其可以使用諸如遠程桌面協(xié)議(RDP)、獨立計算體系結(jié)構(gòu)(ICA)等等之類的協(xié)議,來與遠程客戶機共享桌面及其他應用程序。這樣的計算系統(tǒng)通常將對鍵盤鍵的敲擊和鼠標點擊或選擇從客戶端傳輸?shù)椒掌鳎⑼ㄟ^網(wǎng)絡連接(例如,因特網(wǎng))在另一方向?qū)⑵聊桓轮欣^回去。如此,當僅發(fā)送如在服務器側(cè)時出現(xiàn)的應用程序的屏幕截圖給現(xiàn)實中客戶端設備時,用戶具有好像他們的機器作為LAN的一部分來操作的體驗。由于位圖當通過網(wǎng)絡連接(例如,因特網(wǎng))被傳輸時就帶寬消耗而言開銷非常大, 大多數(shù)虛擬系統(tǒng)現(xiàn)今發(fā)送圖形基元及其他操作,其告訴客戶端側(cè)上的子例程繪制什么以及如何繪制,而不是發(fā)送整個位圖。例如,可以告訴客戶端繪制矩形以及有關(guān)應該在哪里繪制它、什么大小、顏色等等的信息。例如,可以使用矩形來繪制用戶界面的按鈕,文檔周圍的邊框,或矩形形狀可以對其有用的任何其他用途。當然,有許多其他形狀和操作可以被用作基元,這些基元可以更復雜,并要求必須完成更多處理,以在遠程客戶機上傳輸和執(zhí)行操作。隨著應用程序繼續(xù)獲得更復雜的圖形用戶界面,對上面的基元的使用會變得更加處理密集。例如,位像已經(jīng)被擴展,以包括阿爾法通道,其基本上指出與每一個像素相關(guān)聯(lián)的所希望的透明度級別。此透明度級別指示客戶端如何將位圖的每一個像素與已經(jīng)在正在顯示位圖的位置存在的顏色混合。與處理復雜的基元更新相關(guān)聯(lián)的成本的一個更好的示例可以是動畫對象或元素,其中,命令的序列必須指示客戶端如何在動畫的每一階段繪制動畫。當基元的序列太復雜時,有時發(fā)送可以更簡單地被顯示的位圖表示更有意義,而并非其他更復雜的基元操作的潛在長序列。然而,如上文所提及的,由于大多數(shù)比特流壓縮器的限制以及受限的網(wǎng)絡帶寬,不斷地發(fā)送屏幕的完全位圖表示花費太大。存在一類處理器,被稱為向量處理器,它們在它們的指令集體系結(jié)構(gòu)(ISA)具有單指令、多數(shù)據(jù)(SMD)指令。諸如NEHALEM 處理器之類的某些INTEL x86 ISA處理器中的諸如SSE 4. 2指令之類的流式SIMD擴展(SSE)是這些SIMD指令的一種形式。這些處理器能夠加快對某些類型的數(shù)據(jù)的處理,因為它們可以一次對大塊的數(shù)據(jù)進行操作。例如,在正在處理圖像的情況下,SIMD處理器可以利用單指令并行地對多個像素進行操作,而不是一次對單個像素進行操作。這不僅改進處理指令本身的性能,而且可以縮短從存儲器獲取數(shù)據(jù)花費的時間。盡管SIMD指令提供用于改進某些類型的處理的性能的機會,諸如處理用于壓縮的圖像數(shù)據(jù),實現(xiàn)該處理所需的算法和技術(shù)比利用非向量處理器困難得多。必須對數(shù)據(jù)流, 對組織數(shù)據(jù)予以特殊注意,以便可以并行地對它進行操作。為此,將會從新技術(shù)中得到好處以增大對圖像數(shù)據(jù)的操作中的并行性。

      發(fā)明內(nèi)容
      本發(fā)明的一個實施例包括在向量處理器上壓縮圖像的方法。通過使用利用單個指令對64比特進行操作的一系列操作,該方法獲取紅色-綠色-藍色-阿爾法(RBGA)源圖像,其中,每一個像素都包括用于R、G、B以及A信息中每一個的8比特。它16比特對齊每一通道,然后,平面化源圖像,以產(chǎn)生單獨的R、G以及B矢量。然后,解包每一矢量,在一個像素的每一 8比特值之前,散置8個零。它獲取這些解包的矢量,并將它們從RGB顏色空間轉(zhuǎn)換為亮度-橙色-綠色(YCoCg)顏色空間,包括Y、Co和Cg矢量。然后,它對Co和Cg矢量使用有損壓縮,然后,行程編碼每一矢量,最后,存儲對應于源圖像的經(jīng)過壓縮的版本的輸出圖像。公開了執(zhí)行上面的和類似的過程的系統(tǒng)、方法,以及計算機可讀存儲介質(zhì)。那些本技術(shù)技術(shù)人員可以理解,本發(fā)明的一個或多個各個方面可包括,但不僅限于,用于實行本公開的此處引用的各方面的電路和/或編程;電路和/或編程可以幾乎是被配置成取決于系統(tǒng)設計人員的設計選擇而達成此處引用的各方面的硬件、軟件和/或固件的任何組合。前面的內(nèi)容是小結(jié),如此,根據(jù)需要,包含簡述、概括,省略了詳細內(nèi)容。本領(lǐng)域的技術(shù)人員將理解,概述只是說明性的,而不以任何方式作出限制。


      圖1描繪了其中可以實現(xiàn)本公開的各方面的示例計算機系統(tǒng)。圖2描繪了本公開的示例操作過程。圖3描繪了用于子采樣由圖2的操作過程所產(chǎn)生的輸出圖像的操作過程。詳細描述此處的各實施例提供了用于通過將像素的顏色通道拆分或分離為平面數(shù)據(jù)源來增強圖像的數(shù)據(jù)壓縮的預處理階段或機制。通常,圖像數(shù)據(jù)被顯示為顏色空間的交錯的通道類型集合,以便一個圖像(如位圖)內(nèi)的每一個像素都對于每一個顏色通道具有一個分量。例如,具有紅色、綠色和藍色(RGB)的顏色空間的像素對于紅色有一個顏色通道,對于綠色有一個通道,對于藍色有一個通道。因此,各示例性實施例將每一個通道的分量分離為平面的數(shù)據(jù)源,以便類似的分量被示為在同一個平面內(nèi)。通過將交錯的位圖或數(shù)字圖像分離為平面表示,每一平面都可以被獨立地壓縮,常常實現(xiàn)較高的壓縮比。這對于預期在整個位圖中大部分時間保持相當均勻的通道(例如,描述一個位圖內(nèi)的元素的透明度的阿爾法通道),尤其正確。換言之,各示例性實施例利用一個通道常常可以經(jīng)過變換而其他通道保持相當均勻這一事實。上面的實施例的使用可以通過對通道數(shù)據(jù)的操縱或通過將顏色空間轉(zhuǎn)換為除 RGB之外的一些空間,來得到進一步的增強。以照明度和色度(例如,YUV、YCoCg等等)來定義像素的其他顏色空間通常以人眼如何感覺顏色來描述顏色空間。換言之,這些類型的顏色空間將眼睛對其更敏感的顏色分量與那些眼睛對其不太敏感的通道分離。因此,通過利用人眼的感知差異,可以使顏色通道內(nèi)的信息退化,以增強壓縮模型可以更有效地處理的模式,允許圖像保持感覺上無損失。如此處所描述的,可以有多種方式允許特定顏色空間或數(shù)字圖像的顏色信息被修改,以便增強壓縮比。例如,可以通過降低與特定通道相關(guān)聯(lián)的總體比特統(tǒng)計,從而降低調(diào)色板的保真度但不一定縮小顏色方案的范圍,來量化特定顏色方案的色度通道??闪磉x地, 或結(jié)合地,可以將樣本像素空間或?qū)Ω鞣N色度值的子采樣修改到總體值的某個平均值,和/ 或進行其他類似的修改,以將值帶到公分母。如下面比較具體地描述的,可以有其他用于當預處理用于壓縮的圖像數(shù)據(jù)時修改數(shù)據(jù)以增強模式識別的機制。一旦將數(shù)字圖像或位圖拆分成在邏輯上分離的數(shù)字圖像,S卩,通道信息的每一個平面有一個,并且一旦已經(jīng)進行了對數(shù)據(jù)的所有操縱或修改,各示例性實施例可以使用諸如二維行程編碼方案之類的標準或已知的編碼模塊來編碼值??梢詫⑽粓D的每一掃描線視為與它前面的掃描線的差異,然后,如下面比較詳細地描述的,編碼那些差異。本公開的各實施例可以在一臺或多臺計算機上執(zhí)行。圖1以及下面的討論旨在提供其中可以實現(xiàn)本發(fā)明的合適的計算環(huán)境的簡要的一般說明。所屬領(lǐng)域技術(shù)人員可以理解,可以使用圖1的計算機系統(tǒng)的某些或全部組件來實現(xiàn)圖3和4的計算機。在本公開中通篇使用的術(shù)語“電路”可包括諸如例如硬件中斷控制器、硬盤驅(qū)動器、網(wǎng)絡適配器、圖形處理器,以及音頻編解碼器之類的專門硬件組件。在相同實施例或其他實施例中,電路可包括被配置成通過固件或設定開關(guān)執(zhí)行功能的微處理器。在相同或其他示例實施例中,電路可包括一個或多個邏輯處理器,例如,多核通用處理單元的一個或多個核。此示例中的邏輯處理器可以通過從存儲器,例如,RAM、R0M、固件和/或虛擬存儲器中加載的體現(xiàn)可操作以執(zhí)行功能的邏輯的軟件指令來配置。在其中電路包括硬件和軟件的組合的示例實施例中,實施者可以編寫體現(xiàn)邏輯的源代碼,而源代碼可以隨后被編譯為可以由邏輯處理器處理的機器可讀代碼。由于所屬領(lǐng)域技術(shù)人員可以理解,現(xiàn)有技術(shù)已經(jīng)發(fā)展到在硬件、軟件或硬件/軟件的組合之間差別微小的程度,為實現(xiàn)特定功能而選擇硬件還是軟件是交由實施者處理的設計選擇。更具體而言,本領(lǐng)域技術(shù)人員可以理解,可以將軟件進程轉(zhuǎn)換成等效的硬件結(jié)構(gòu),也可以將硬件結(jié)構(gòu)本身轉(zhuǎn)換成等效的軟件進程。如此,選擇硬件實現(xiàn)還是軟件實現(xiàn)是一種設計選擇,并交由實施者處理?,F(xiàn)在參考圖1,描繪了示例性通用計算機系統(tǒng)。通用計算機系統(tǒng)可包括常規(guī)計算機 20等等,它包括通用處理單元21 (其可包括一個或多個邏輯處理器)、系統(tǒng)存儲器22,以及將包括系統(tǒng)存儲器的各種系統(tǒng)組件耦合到處理單元21的系統(tǒng)總線23。系統(tǒng)總線23可以是若干類型的總線結(jié)構(gòu)中的任一種,包括使用各種總線體系結(jié)構(gòu)中的任一種的存儲器總線或存儲器控制器、外圍總線,以及局部總線。系統(tǒng)存儲器包括只讀存儲器(ROM)M和隨機存取存儲器(RAM) 25?;据斎?輸出系統(tǒng)沈(BIOS)被存儲在ROM M中,它包含了諸如在啟動期間幫助在計算機20內(nèi)的元件之間傳輸信息的基本例程。計算機20還可以包括用于讀寫硬盤(未示出)的硬盤驅(qū)動器27、用于讀寫可移動磁盤四的磁盤驅(qū)動器28,以及用于讀寫諸如CD ROM或其他光學介質(zhì)之類的可移動光盤31的光盤驅(qū)動器30。在某些示例實施例中,體現(xiàn)本發(fā)明的各方面的計算機可執(zhí)行指令可以存儲在ROM 24、硬盤(未示出)、RAM 25、 可移動磁盤四、光盤31,和/或通用處理單元21的高速緩存中。硬盤驅(qū)動器27、磁盤驅(qū)動器28,以及光盤驅(qū)動器30分別通過硬盤驅(qū)動器接口 32、磁盤驅(qū)動器接口 33,以及光盤驅(qū)動器接口 34連接到系統(tǒng)總線23。驅(qū)動器以及它們相關(guān)聯(lián)的計算機可讀介質(zhì)為計算機20提供了對計算機可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊,及其他數(shù)據(jù)的非易失性存儲。雖然此處所描述的示例性環(huán)境使用了硬盤、可移動磁盤29、以及可移動光盤31,但是,那些本領(lǐng)域普通技術(shù)人員應該理解,在操作環(huán)境中也可以使用諸如盒式磁帶、閃存卡、數(shù)字視頻盤、伯努利磁帶盒、隨機存取存儲器(RAM)、只讀存儲器(ROM)等等之類的可以存儲可由計算機進行訪問的數(shù)據(jù)的其他類型的計算機可讀介質(zhì)。可以有若干個程序模塊存儲在硬盤、磁盤四、光盤31、ROM 24,和/或RAM 25上, 包括操作系統(tǒng)35、一個或多個應用程序36、其他程序模塊37、以及程序數(shù)據(jù)38。用戶可以通過諸如鍵盤40和定點設備42之類的輸入設備向計算機20中輸入命令和信息。其他輸入設備(未示出)可以包括麥克風、游戲桿、游戲手柄、圓盤式衛(wèi)星天線、掃描儀等等。這些及其他輸入設備常常通過耦合到系統(tǒng)總線的串行端口接口 46連接到通用處理單元21,但是,也可以通過其他接口,如并行端口、游戲端口、通用串行總線(USB)端口來進行連接。顯示器47或其他類型的顯示設備也可以通過諸如視頻適配器48之類的接口,連接到系統(tǒng)總線23。除了顯示器47之外,計算機通常還包括其他外圍輸出設備(未示出),如揚聲器和打印機。圖1的示例性系統(tǒng)也包括主機適配器55、小型計算機系統(tǒng)接口(SCSI)總線56,以及連接到SCSI總線56的外部存儲裝置62。計算機20可以使用到一個或多個遠程計算機(如遠程計算機49)的邏輯連接,以在聯(lián)網(wǎng)環(huán)境中操作。遠程計算機49可以是另一計算機、服務器、路由器、網(wǎng)絡PC、對等設備或其他公共網(wǎng)絡節(jié)點,并且通??砂ㄉ衔膮⒖加嬎銠C20所描述的許多或全部元件,雖然在圖1中只示出了存儲器存儲設備50。圖1中所描繪的邏輯連接可包括局域網(wǎng)(LAN) 51和廣域網(wǎng)(WAN)52。這樣的聯(lián)網(wǎng)環(huán)境在辦公室、企業(yè)范圍的計算機網(wǎng)絡、內(nèi)部網(wǎng)和因特網(wǎng)中是普遍現(xiàn)象。當用于LAN網(wǎng)絡環(huán)境中時,計算機20可通過網(wǎng)絡接口或適配器53連接到LAN 51。 當用于WAN網(wǎng)絡環(huán)境中時,計算機20通常包括調(diào)制解調(diào)器M,或用于通過廣域網(wǎng)52(如通過因特網(wǎng))建立通信的其他裝置。調(diào)制解調(diào)器M,其可以是內(nèi)置的或外置的,可通過串行端口接口 46連接到系統(tǒng)總線23。在聯(lián)網(wǎng)環(huán)境中,參考計算機20所描述的程序模塊,或其某些部分,可以存儲在遠程存儲器存儲設備中。可以理解,所示出的網(wǎng)絡連接只是示例性的,也可以使用用于在計算機之間建立通信鏈路的其他裝置。此外,盡管可以預想本發(fā)明的很多實施例特別適合于計算機化系統(tǒng),但是,本文中沒有任何表述旨在將本公開限制于這樣的實施例。前述的詳細描述通過示例和/或操作圖闡述了系統(tǒng)和/或進程的各實施例。在這樣的框圖和/或示例包含一個或多個功能和/或操作的范圍內(nèi),本領(lǐng)域技術(shù)人員將理解,這樣的框圖,或示例內(nèi)的每一功能和/或操作可以分別地和/或共同地通過范圍廣泛的硬件、 軟件、固件或幾乎其任何組合來實現(xiàn)。盡管示出和描述了此處所描述的本主題的特定方面,但是,對于本領(lǐng)域的技術(shù)人員顯而易見的是,基于此處的原理,在不偏離此處所描述的主題以及其廣泛的方面的情況下,可以作出更改和修改,因此,所附權(quán)利要求書將包含在它們的范圍內(nèi),所有這樣的更改和修改都將在此處所描述的主題的真正的精神和范圍內(nèi)。圖2描繪了用于壓縮包括單指令多數(shù)據(jù)(SIMD)指令集的處理器上的源圖像的示例操作過程。帶有SIMD指令集的處理器通常被稱為向量處理器。諸如NEHALEM 處理器之類的某些INTEL x86 ISA處理器中的諸如SSE 4. 2指令之類的流式SIMD擴展(SSE)是這些SIMD指令的一種形式。這樣的處理器可以以并行方式一次對大部分數(shù)據(jù)進行操作。例如,這樣的64位處理器可以通過在兩個64比特字中的每一個中放置兩個整數(shù),然后,添加每一個64比特字,將兩組32比特帶符號整數(shù)同時相加。在通常從低字到高字有溢出的情況下,諸如如果每一低字都包含2~31,指令通??紤]這種情況,不會溢出到高字。可以使用這樣的操作過程來壓縮圖像,以便通過網(wǎng)絡諸如通過遠程桌面協(xié)議(RDP)進行發(fā)送。在這樣的實施例中,源圖像和輸出圖像可以與顯示的用戶會話相對應,諸如用戶如同在操作過程在其上面執(zhí)行的計算機上本地上將體驗的。該顯示的用戶會話可以包括計算機桌面以及以諸如用戶將在該計算機上看到的方式層疊的任何打開的應用程序窗口。在一個實施例中,源圖像包括像素的行和列,而每一個像素都包括RGBA顏色空間中的32個比特,以便8個比特被專用于像素的紅色(R)顏色值、綠色(G)顏色值、藍色⑶ 顏色值和阿爾法(A)(或透明度)值中的每一個。操作200開始該方法。例如當接收到源圖像以及壓縮該圖像的指令時,可以執(zhí)行它。操作202描繪了 16比特對齊源圖像的每一個通道,源圖像包括至少一個像素,每一個像素都包括紅色(R)值、綠色(G)值、藍色(B)值,以及α (A)值。這包括確保,源圖像的存儲器中的位置處于16比特的倍數(shù)的地址,然后,在存儲器空間中8比特對齊所有像素 (8比特)。操作204描繪了平面化源圖像,以產(chǎn)生R矢量、G矢量以及B矢量,R矢量包括每一個像素的R值,G矢量包括每一個像素的G值,B矢量包括每一個像素的B值;其中,像素的顏色值被表達為,以便第一像素的紅色值是R(I),η個像素的源圖像最初可以被認為具有形式 R(1)G(1)B(1)A(1)IU2)G0)B0)A⑵…R(n)G(n)B(n)A(n)。在平面化源圖像時,重新排列每一個像素的那些顏色分量,以形成R(1) R⑵…R(η),G (1) G O)…G (η),B (1) B⑵… Β(η),Α(1)?、啤?!!)。用于產(chǎn)生此重新排列的有效算法是加載圖像的頭1 個比特,包括四個32比特像素。然后,將8比特的第一、第五、第九和第十三部分加到R緩沖器,將第二、 第六、第十和第十四加到G緩沖器,并將第三、第七、第十一,以及第十五加到B緩沖器。然后,對于圖像的每一個連續(xù)的128比特,重復這些過程。在一個實施例中,A通道既不被平面化,也不會以后被使用,但是,被丟棄,以便節(jié)省計算時間和壓縮圖像。操作206描繪了解包R矢量、G矢量,以及B矢量中的每一個,以便在每八個比特的矢量之前放置八個零的序列。在像素的每一通道都包括八個比特的實施例中,這將每一個像素占據(jù)的有效空間增大兩倍,并將整個矢量大小增大兩倍。在R矢量被表示成R(O), R(I),…R(n)和八個零的串被表示成0x00的情況下,解包的矢量是0x00,R(O), 0x00, R(I),-0x00, R(n),那些零在每一個像素的紅色值前面。操作208描繪了將Co矢量設置為等于R矢量減去B矢量。在一個實施例中,這對 128比特的R矢量和B矢量一次執(zhí)行。這包括利用給處理器的單個指令,該單個指令可以對 128比特數(shù)據(jù)一次進行操作,來一次加載128比特的R矢量和B矢量,并從R矢量減去B矢量。在矢量已經(jīng)利用零解包的情況下,每128比特都包括8比特通道值,總共64比特,以及 8組8個零,總共另外64比特。由于矢量已經(jīng)通過插入零被解包,沒有溢出的顧慮一任何溢出都將流入該8個零的集合中,而不是下一數(shù)字。例如,在打包的值可以是Oxll和OxlF并將它們相加的情況下,結(jié)果是0x30。然而,那些值的解包的版本是0x0101,和OxOlOF,結(jié)果是0x0210。從右邊8比特的溢出進入零,而并非進入實際數(shù)據(jù)的左邊8比特。類似的邏輯適用于此方法中的其他操作,特別是操作210-214。操作210描繪了將Y矢量設置為等于B矢量與Co矢量用算術(shù)方法向右移位一次, 然后,與Cg矢量用算術(shù)方法向右移位一次的總和的總和。在偽代碼中,此操作可以被表示為γ = β+(Co >> 1)。在一個實施例中,使用單處理器指令來移位Co,并將它保存到臨時值,然后,使用第二單處理器指令來將Y設置為B和該臨時值的總和。在一個實施例中,這對每一矢量的128比特執(zhí)行一次。在Co等于Oxllll 1111 1111 1101的情況下,在它被向右移位一次的情況下,每一比特都向右移動,最右邊比特被丟棄,然后,給最左比特的第二個指定零值(使用最左比特來表示該數(shù)字是正的,還是負的,并保留)。這產(chǎn)生0x1011 1111 1111 1110。操作212描繪了將Cg矢量設置為等于Y矢量減去G矢量。在一個實施例中,這對每一矢量的128比特執(zhí)行一次。操作214描繪了將Y矢量設置為等于Y矢量與Cg矢量用算術(shù)方法向右移位一次之后相加。在一個實施例中,這對每一矢量的128比特執(zhí)行一次。在偽代碼中,此操作可以被表示為Y = Y+(Cg >> 1)。在其中矢量的128比特被操作一次的一個實施例中,對于每一矢量的下面的連續(xù)的128比特,該方法重復操作208-214,直到每一矢量的全部都被以此方式操縱。在其中這些操作被循環(huán)以對圖像的全部操作的一個實施例中,指令在每一循環(huán)內(nèi)出現(xiàn)兩次。在1 比特的平面化矢量被利用單個操作加載到存儲器的情況下,這是有利的。解包頭64比特, 然后,對其進行操作,然后,可以解包第二 64比特,并對其進行操作,無需另外的存儲器訪問。當對所有128比特進行操作時,要求另一個存儲器訪問,循環(huán)再從頭開始。操作216描繪了將Co矢量設置為等于Co矢量除以顏色丟失級別,然后再與色度掩碼相加。在一個實施例中,顏色丟失級別是將Co矢量的每一 16比特片段向右移位預定的比特數(shù)(如上所述,在值帶符號的情況下,保留符號),其與壓縮圖像的量相對應。這在某種程度上降低顏色信息的準確性(最低有效比特被丟棄),而且還增大了圖像最終可能被壓縮的量,因為更多像素將具有相同色值(提高了行程編碼算法的有效性)。同樣,色度掩碼表示1 個1的集合,其中,每16比特逐比特右移色度丟失級別。在與色度掩碼級別求和時,執(zhí)行第一級別的壓縮。操作218描繪了將Cg矢量設置為等于Cg矢量除以顏色丟失級別,然后再與色度掩碼相加。在一個實施例中,顏色丟失級別是將Co矢量的每一 16比特片段向右移位預定的比特數(shù)(如上所述,在值帶符號的情況下,保留符號)。這在某種程度上降低顏色信息的準確性(最低有效比特被丟棄),而且還增大了圖像最終可能被壓縮的量,因為更多像素將具有相同色值(提高了行程編碼算法的有效性)。同樣,色度掩碼表示1 個1的集合, 其中,每16比特逐比特右移色度丟失級別。在與色度掩碼級別求和時,執(zhí)行第一級別的壓縮。在一個實施例中,色度掩碼包括等于處理器可以同時操作的比特的數(shù)量的二進制1的序列,用算術(shù)方法向右移位與一個像素的紅色值中的比特數(shù)的兩倍相對應的比特的組中的顏色丟失級別。操作220描繪了子采樣Co和Cg矢量的可選步驟。這可以例如通過取多個相鄰像素的顏色值的平均值,并將該平均值指定到每一個像素的顏色值,來做到。這將允許壓縮算法進一步縮小所產(chǎn)生的輸出圖像的存儲空間,因為許多值將重復。在圖3的討論中給出了此操作的實施例的更多細節(jié)。操作222描繪了行程編碼Y矢量。在一個實施例中,當其他兩個矢量處于操作216 和218中時,Y矢量不被壓縮。這是因為,人眼對由Y矢量所表示的亮度最敏感,如此,在保留此信息時,人將發(fā)現(xiàn)其他兩個通道上的有損壓縮不太顯著。行程編碼是無損壓縮方案,該方案包括通過存儲一次共享同一個值的連續(xù)的數(shù)據(jù)值,以及多少數(shù)據(jù)值通過該數(shù)字來表示的統(tǒng)計,來壓縮矢量。例如,給定一串字母,AAAAAAABBBBAAAAA,可以將此字符串的行程編碼的版本表示為(A7) (B3) (A5)。在一個實施例中,此行程編碼是根據(jù)Lempel-Ziv(LZ)算法來執(zhí)行的。LZ算法通常通過搜索要被壓縮的對象和由該算法所維護的數(shù)據(jù)結(jié)構(gòu)(常常叫做詞典)中所包含的字符串的集合之間的匹配來進行操作。當該算法發(fā)現(xiàn)匹配時,它將對數(shù)據(jù)結(jié)構(gòu)中的該匹配的位置的引用替換為該匹配其本身。在一個實施例中,可以使用其他行程編碼技術(shù),來執(zhí)行前向搜索,尋找重復的行程(rim),將它們替換為指出行程的長度以及重復的字節(jié)模式的代碼。在一個實施例中,使用二維行程編碼技術(shù)來提高壓縮效率。這通過將當前像素行與以前的像素行異-或O(OR)來實現(xiàn),以實現(xiàn)零的“垂直”條,其中,有可以被比較輕松地行程編碼的垂直重復。操作2M描繪了行程編碼Co矢量。這種形式的編碼對于只使用幾種不同類型的顏色的圖像非常適合(甚至音調(diào)或色調(diào)中的非常微小的變化都要求行程編碼中的另外的存儲空間),如此,該技術(shù)得益于應用于上面的矢量的色度丟失級別。操作2 描繪了行程編碼Cg矢量。這可以以類似于操作222或224的方式來執(zhí)行。操作2 描繪了存儲輸出圖像,其中,該輸出圖像包括Y矢量、Co矢量,以及Cg矢量,而輸出圖像與源圖像相對應。在一個實施例中,這包括去平面化YCoCg圖像。在一個實施例中,存儲包括存儲到諸如RAM之類的存儲器,然后根據(jù)遠程桌面協(xié)議(RDP),通過計算機網(wǎng)絡傳輸圖像,供客戶端使用。圖3描繪了用于子采樣由圖2的操作過程所產(chǎn)生的輸出圖像的操作過程。它可以是圖2的操作220的實施例。操作302描繪了將輸出圖像分段為至少一個四元組,一個四元組包括四個像素, 以便該四元組中的每一個像素都與該四元組中的一個其他像素共享輸出圖像的一列,而四元組中的每一個像素與四元組中的一個其他像素共享輸出圖像的一行,每一個四元組都具有頂行和底行,一個像素與至多一個四元組相對應。在此實施例中,通過子采樣圖像來生成進一步的壓縮,并可以在行程編碼Co和Cg矢量之前執(zhí)行,以預處理圖像,以取得更好的壓縮。這些操作提高了由像素所表示的色值的一致性(但損失圖像保真度),可以使用行程編碼,增大壓縮。操作304描繪了解包每一四元組的每一行到16比特值以及利用零分散到每一行的步驟。在像素的每一通道都包括八個比特的實施例中,這將每一個像素占據(jù)的有效空間增大兩倍,并將整個矢量大小增大兩倍。在R矢量被表示成R(O),R(I),…R(n)和一串八個零被表示成0x00的情況下,解包的矢量是0x00,R(O),0x00,R(I),…0x00,R(η),那些零在每一個像素的紅色值前面。
      操作306描繪了通過將每一個四元組的頂行和底行相加來產(chǎn)生組合行的步驟,其中,每一行中的每一個像素都具有飽和值,當頂行中的像素與底行中的像素相加的總和超出飽和值時,將頂行中的像素與底行中的像素相加的總和設置為飽和值。即,在一個像素的每一通道都包括8比特信息,并且該通道的值被表達為8比特無符號整數(shù)的情況下,該通道可以具有的最大值是2~8-1,或255。該255是此示例中的飽和值,因為沒有更大的值可以存儲。在兩個數(shù)字被求和以使得總和超出255的情況下,總和將被置為255。如此,盡管 100和150的總和將導致具有250值的組合的行,但是,通常將是350的100和250的總和將僅限于飽和值,組合行將具有255值。此操作可以包括子采樣圖像的一部分,以及操作 234-238。操作308描繪了將每一個四元組的組合行與該四元組的組合行的字正移 (word-shuffled)版本相加的步驟。在行從左到右可以表示為像素值0,1,2,3的情況下, 交換頭兩個值,交換最后兩個值,產(chǎn)生一行1,0,3,2。然后,將此與原始行相加,產(chǎn)生帶有值 0+1、1+0、2+3、3+2的行?,F(xiàn)在,頭兩個值彼此相等,第二兩個值彼此相等,如此,可以忽略它們,因為是冗余的。操作310描繪了將每一個四元組的相加的和組合行除以4的步驟。在一個實施例中,這是通過將行向右用算術(shù)方法移位兩個位置來完成的。在一個實施例中,這對每一矢量的128比特執(zhí)行一次,移位單獨地在128比特字符串的四個32比特部分發(fā)生,類似于上面的對用算術(shù)方法移位的討論。在除以4時,確定四元組的平均值。在使用平均值時,實現(xiàn)有損壓縮。精確度降低了 4倍,但是,與之前相比,只必須存儲四分之一的值,因為存儲與四元組中的所有四個像素相對應的一個值。在一個實施例中,丟棄四元組中的冗余值。操作312描繪了將每一個四元組的相加的和組合行重新包裝的步驟。在一個實施例中,這是解包操作的兄弟一它丟棄在該解包操作過程中引入的那些八個零的組。代碼示例下面包括高級程序設計語言C類型語法的偽代碼示例,當在向量處理器上執(zhí)行時,將以本公開的實施例的方式對源圖像“srclmage”進行操作,類似于如圖2的詳細描述中所描述的。
      1權(quán)利要求
      1.一種用于在包括單指令多數(shù)據(jù)指令集(SIMD)的處理器上壓縮源圖像的方法, 包括對齊所述源圖像的每一個通道,所述源圖像包括至少一個像素,每一個像素都包括紅色(R)值、綠色(G)值、藍色⑶值,以及α (A)值(202);平面化所述源圖像,以產(chǎn)生R矢量、G矢量以及B矢量,所述R矢量包括每一個像素的所述R值,所述G矢量包括每一個像素的所述G值,所述B矢量包括每一個像素的所述B值 (204);解包所述R矢量、所述G矢量,以及所述B矢量中的每一個Q06); 設置Co矢量等于所述R矢量減去所述B矢量Q08); 設置Y矢量等于所述B矢量與Co矢量用算術(shù)方法除以2的總和Ο10); 設置Cg矢量等于所述G矢量減去所述Y矢量012);設置所述Y矢量等于所述Y矢量與所述Cg矢量用算術(shù)方法除以2所得的值相加 (214);設置所述Co矢量等于所述Co矢量除以顏色丟失級別,然后再與色度掩碼相加016); 設置所述Cg矢量等于所述Cg矢量除以顏色丟失級別,然后再與色度掩碼相加018); 行程編碼所述Y矢量022); 行程編碼所述Co矢量(224); 行程編碼所述Cg矢量026);以及存儲輸出圖像,其中,所述輸出圖像包括所述Y矢量、所述Co矢量,以及所述Cg矢量, 而所述輸出圖像與所述源圖像相對應0觀)。
      2.如權(quán)利要求1所述的方法,其特征在于,還包括 子采樣所述輸出圖像的所述Co和Cg矢量(220)。
      3.如權(quán)利要求2所述的方法,其中,子采樣包括將所述輸出圖像分段為至少一個四元組,一個四元組包括四個像素,以便所述四元組中的每一個像素都與所述四元組中的一個其他像素共享所述輸出圖像的一列,而所述四元組中的每一個像素與所述四元組中的一個其他像素共享所述輸出圖像的一行,每一個四元組都具有頂行和底行,一個像素與至多一個四元組相對應; 解包每一個四元組的每一行;通過將每一個四元組的所述頂行和所述底行相加,產(chǎn)生組合行,其中,每一行中的每一個像素都具有飽和值,當所述頂行中的所述像素與所述底行中的所述像素相加的所述總和超出所述飽和值時,將所述頂行中的所述像素與所述底行中的所述像素相加的所述總和設置為所述飽和值;將每一個四元組的所述組合行與該四元組的所述組合行的字正移版本相加; 將每一個四元組的相加的和組合行除以4 ;以及重新包裝每一個四元組的相加的以及組合的行。
      4.如權(quán)利要求1所述的方法,其特征在于,一個像素包括四個通道,每一個通道八個比特。
      5.如權(quán)利要求1所述的方法,其特征在于,所述Y矢量與所述源圖像的亮度相對應,所述Co矢量與所述源圖像的橙色相對應,而所述Cg矢量與所述源圖像的綠色相對應。
      6.如權(quán)利要求1所述的方法,其特征在于,還包括經(jīng)由網(wǎng)絡,通過遠程桌面協(xié)議(RDP)協(xié)議,發(fā)送所述輸出圖像。
      7.如權(quán)利要求1所述的方法,其特征在于,解包矢量包括 在矢量的每八個比特之前插入八個零的序列;
      8.如權(quán)利要求1所述的方法,其特征在于,一個像素的每一個通道都包括八個比特,對齊所述源圖像的每一個通道包括16比特對齊每一個通道。
      9.如權(quán)利要求1所述的方法,其特征在于,所述處理器同時對128比特進行操作。
      10.如權(quán)利要求1所述的方法,其特征在于,解包、設置、行程編碼以及存儲這些操作中的至少一個包括向所述處理器發(fā)送SIMD指令,以同時對多個像素中的每個像素的至少一個通道進行操作。
      11.如權(quán)利要求1所述的方法,其特征在于,設置Y矢量等于所述B矢量與Co矢量用算術(shù)方法除以2的總和包括用算術(shù)方法逐比特將所述Co矢量向右移動一次。
      12.如權(quán)利要求1所述的方法,其特征在于,存儲所述輸出圖像包括 去平面化所述Y矢量、所述Co矢量和所述Cg矢量。
      13.如權(quán)利要求1所述的方法,其特征在于,所述源圖像與顯示的用戶會話相對應。
      14.如權(quán)利要求1所述的方法,其特征在于,所述源圖像和所述輸出圖像中的至少一個包括位像。
      15.如權(quán)利要求1所述的方法,其特征在于,所述顏色丟失級別與壓縮所述圖像的量相對應。
      16.如權(quán)利要求1所述的方法,其特征在于,所述行程編碼是根據(jù)Lempel-Ziv(LZ)算法來執(zhí)行的。
      17.如權(quán)利要求1所述的方法,其特征在于,所述色度掩碼包括等于所述處理器可以同時操作的比特的數(shù)量的二進制1的序列,用算術(shù)方法向右移位與一個像素的紅色值中的比特數(shù)的兩倍相對應的比特的組中的顏色丟失級別。
      18.一種用于在支持矢量處理的處理器上壓縮源圖像的方法,包括接收包括像素的源圖像,每一個像素都包括紅色-綠色-藍色-阿爾法(RGBA)圖像數(shù)據(jù);通過向所述處理器發(fā)送一系列處理器指令,將所述圖像平面化為其R、G和B分量,每一個處理器指令都同時對多個像素的數(shù)據(jù)進行操作;通過向所述處理器發(fā)送一系列處理器指令,將所述已平面化的圖像轉(zhuǎn)換為亮度-橙色-綠色(YCoCg)圖像數(shù)據(jù),每一個處理器指令都同時對多個像素的數(shù)據(jù)進行操作;通過向所述處理器發(fā)送一系列處理器指令,壓縮所述YCoCg圖像的所述Co和Co分量, 每一個處理器指令都同時對多個像素的數(shù)據(jù)進行操作;以及作為輸出圖像,存儲所述經(jīng)過壓縮的圖像數(shù)據(jù)。
      19.如權(quán)利要求18所述的方法,還包括將所述輸出圖像分割為至少一個四個像素組,并子采樣每一四個像素組。
      20.一種計算機可讀存儲介質(zhì),包括計算機可讀指令,當這些指令在單指令多派遣 (SIMD)處理器上執(zhí)行時,所述處理器能夠同時對128比特進行操作,執(zhí)行包括下列各項的操作16比特對齊所述源圖像的每一個通道,所述源圖像包括至少一個32比特像素,每一個像素都包括8比特紅色(R)值、8比特綠色(G)值、8比特藍色⑶值,以及8比特α (A)值 (202);平面化所述源圖像,以產(chǎn)生R矢量、G矢量以及B矢量,所述R矢量包括每一個像素的所述R值,所述G矢量包括每一個像素的所述G值,所述B矢量包括每一個像素的所述B值 (204);解包R矢量、G矢量,以及B矢量中的每一個,以便八個零在每一個矢量中的每一個8比特值前面(206);通過同時對每個矢量的1 比特進行操作的一系列處理器指令,設置Co矢量等于的所述R矢量減去所述B矢量Q08);通過同時對每個矢量的128比特進行操作的一系列處理器指令,設置Y矢量等于所述 B矢量與Co矢量用算術(shù)方法右移一次的總和O10);通過同時對每個矢量的128比特進行操作的一系列處理器指令,設置Cg矢量等于所述 Y矢量減去所述G矢量012);通過同時對每個矢量的128比特進行操作的一系列處理器指令,設置所述Y矢量等于所述Y矢量與所述Cg矢量用算術(shù)方法右移一次所得的值相加014);通過同時對每個矢量的1 比特進行操作的一系列處理器指令,設置所述Co矢量等于所述Co矢量用算術(shù)方法以顏色丟失級別右移并然后再與色度掩碼相加016);通過同時對每個矢量的1 比特進行操作的一系列處理器指令,設置所述Cg矢量等于所述Cg矢量用算術(shù)方法以顏色丟失級別右移并然后再與色度掩碼相加018);通過同時對每個矢量的128比特進行操作的一系列處理器指令,行程編碼所述Y矢量 (222);通過同時對每個矢量的1 比特進行操作的一系列處理器指令,行程編碼所述Co矢量 (224);通過同時對每個矢量的1 比特進行操作的一系列處理器指令,行程編碼所述Cg矢量 (226);以及存儲輸出圖像,其中,所述輸出圖像包括所述Y矢量、所述Co矢量,以及所述Cg矢量, 而所述輸出圖像是在亮度-橙色-綠色(YCoCg)顏色空間,并且所述輸出圖像對應于所述源圖像(228) 0
      全文摘要
      公開了用于使用向量處理器上可用的并行指令來壓縮圖像數(shù)據(jù)的技術(shù)。在一個實施例中,接收RGBA格式的源圖像。使用一系列向量處理器指令來執(zhí)行將圖像拆分為單獨的R、G、B,以及A通道,然后,將它轉(zhuǎn)換為YCoCg顏色空間、單獨地壓縮Y、Co,以及Cg通道,然后,保存對應于源圖像的已壓縮版本的輸出圖像的并行處理步驟。
      文檔編號H04N11/04GK102246524SQ200980150120
      公開日2011年11月16日 申請日期2009年11月11日 優(yōu)先權(quán)日2008年12月9日
      發(fā)明者N·Y·阿布多 申請人:微軟公司
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1