使用单指令、多派遣指令的远程桌面协议压缩加速的制作方法

文档序号:7737841阅读:149来源:国知局
专利名称:使用单指令、多派遣指令的远程桌面协议压缩加速的制作方法
使用单指令、多派遣指令的远程桌面协议压缩加速
背景技术
虽然计算机曾经被隔离并具有最少的或很少的与其他计算机的交互,但是,当今的计算机通过局域网(LAN)、广域网(WAN)、拨号连接等等与各种其他计算机进行交互。随着因特网的广泛发展,计算机之间的连接变得越来越重要,并开启了许多新的应用和技术。 大规模的网络的发展,以及低成本的个人计算机的广泛的可用性,根本上改变了许多人工作、交互、通信和玩的方式。一种联网的越来越流行的形式一般可以被称为虚拟计算系统,其可以使用诸如远程桌面协议(RDP)、独立计算体系结构(ICA)等等之类的协议,来与远程客户机共享桌面及其他应用程序。这样的计算系统通常将对键盘键的敲击和鼠标点击或选择从客户端传输到服务器,并通过网络连接(例如,因特网)在另一方向将屏幕更新中继回去。如此,当仅发送如在服务器侧时出现的应用程序的屏幕截图给现实中客户端设备时,用户具有好像他们的机器作为LAN的一部分来操作的体验。由于位图当通过网络连接(例如,因特网)被传输时就带宽消耗而言开销非常大, 大多数虚拟系统现今发送图形基元及其他操作,其告诉客户端侧上的子例程绘制什么以及如何绘制,而不是发送整个位图。例如,可以告诉客户端绘制矩形以及有关应该在哪里绘制它、什么大小、颜色等等的信息。例如,可以使用矩形来绘制用户界面的按钮,文档周围的边框,或矩形形状可以对其有用的任何其他用途。当然,有许多其他形状和操作可以被用作基元,这些基元可以更复杂,并要求必须完成更多处理,以在远程客户机上传输和执行操作。随着应用程序继续获得更复杂的图形用户界面,对上面的基元的使用会变得更加处理密集。例如,位像已经被扩展,以包括阿尔法通道,其基本上指出与每一个像素相关联的所希望的透明度级别。此透明度级别指示客户端如何将位图的每一个像素与已经在正在显示位图的位置存在的颜色混合。与处理复杂的基元更新相关联的成本的一个更好的示例可以是动画对象或元素,其中,命令的序列必须指示客户端如何在动画的每一阶段绘制动画。当基元的序列太复杂时,有时发送可以更简单地被显示的位图表示更有意义,而并非其他更复杂的基元操作的潜在长序列。然而,如上文所提及的,由于大多数比特流压缩器的限制以及受限的网络带宽,不断地发送屏幕的完全位图表示花费太大。存在一类处理器,被称为向量处理器,它们在它们的指令集体系结构(ISA)具有单指令、多数据(SMD)指令。诸如NEHALEM 处理器之类的某些INTEL x86 ISA处理器中的诸如SSE 4. 2指令之类的流式SIMD扩展(SSE)是这些SIMD指令的一种形式。这些处理器能够加快对某些类型的数据的处理,因为它们可以一次对大块的数据进行操作。例如,在正在处理图像的情况下,SIMD处理器可以利用单指令并行地对多个像素进行操作,而不是一次对单个像素进行操作。这不仅改进处理指令本身的性能,而且可以缩短从存储器获取数据花费的时间。尽管SIMD指令提供用于改进某些类型的处理的性能的机会,诸如处理用于压缩的图像数据,实现该处理所需的算法和技术比利用非向量处理器困难得多。必须对数据流, 对组织数据予以特殊注意,以便可以并行地对它进行操作。为此,将会从新技术中得到好处以增大对图像数据的操作中的并行性。

发明内容
本发明的一个实施例包括在向量处理器上压缩图像的方法。通过使用利用单个指令对64比特进行操作的一系列操作,该方法获取红色-绿色-蓝色-阿尔法(RBGA)源图像,其中,每一个像素都包括用于R、G、B以及A信息中每一个的8比特。它16比特对齐每一通道,然后,平面化源图像,以产生单独的R、G以及B矢量。然后,解包每一矢量,在一个像素的每一 8比特值之前,散置8个零。它获取这些解包的矢量,并将它们从RGB颜色空间转换为亮度-橙色-绿色(YCoCg)颜色空间,包括Y、Co和Cg矢量。然后,它对Co和Cg矢量使用有损压缩,然后,行程编码每一矢量,最后,存储对应于源图像的经过压缩的版本的输出图像。公开了执行上面的和类似的过程的系统、方法,以及计算机可读存储介质。那些本技术技术人员可以理解,本发明的一个或多个各个方面可包括,但不仅限于,用于实行本公开的此处引用的各方面的电路和/或编程;电路和/或编程可以几乎是被配置成取决于系统设计人员的设计选择而达成此处引用的各方面的硬件、软件和/或固件的任何组合。前面的内容是小结,如此,根据需要,包含简述、概括,省略了详细内容。本领域的技术人员将理解,概述只是说明性的,而不以任何方式作出限制。


图1描绘了其中可以实现本公开的各方面的示例计算机系统。图2描绘了本公开的示例操作过程。图3描绘了用于子采样由图2的操作过程所产生的输出图像的操作过程。详细描述此处的各实施例提供了用于通过将像素的颜色通道拆分或分离为平面数据源来增强图像的数据压缩的预处理阶段或机制。通常,图像数据被显示为颜色空间的交错的通道类型集合,以便一个图像(如位图)内的每一个像素都对于每一个颜色通道具有一个分量。例如,具有红色、绿色和蓝色(RGB)的颜色空间的像素对于红色有一个颜色通道,对于绿色有一个通道,对于蓝色有一个通道。因此,各示例性实施例将每一个通道的分量分离为平面的数据源,以便类似的分量被示为在同一个平面内。通过将交错的位图或数字图像分离为平面表示,每一平面都可以被独立地压缩,常常实现较高的压缩比。这对于预期在整个位图中大部分时间保持相当均勻的通道(例如,描述一个位图内的元素的透明度的阿尔法通道),尤其正确。换言之,各示例性实施例利用一个通道常常可以经过变换而其他通道保持相当均勻这一事实。上面的实施例的使用可以通过对通道数据的操纵或通过将颜色空间转换为除 RGB之外的一些空间,来得到进一步的增强。以照明度和色度(例如,YUV、YCoCg等等)来定义像素的其他颜色空间通常以人眼如何感觉颜色来描述颜色空间。换言之,这些类型的颜色空间将眼睛对其更敏感的颜色分量与那些眼睛对其不太敏感的通道分离。因此,通过利用人眼的感知差异,可以使颜色通道内的信息退化,以增强压缩模型可以更有效地处理的模式,允许图像保持感觉上无损失。如此处所描述的,可以有多种方式允许特定颜色空间或数字图像的颜色信息被修改,以便增强压缩比。例如,可以通过降低与特定通道相关联的总体比特统计,从而降低调色板的保真度但不一定缩小颜色方案的范围,来量化特定颜色方案的色度通道。可另选地, 或结合地,可以将样本像素空间或对各种色度值的子采样修改到总体值的某个平均值,和/ 或进行其他类似的修改,以将值带到公分母。如下面比较具体地描述的,可以有其他用于当预处理用于压缩的图像数据时修改数据以增强模式识别的机制。一旦将数字图像或位图拆分成在逻辑上分离的数字图像,S卩,通道信息的每一个平面有一个,并且一旦已经进行了对数据的所有操纵或修改,各示例性实施例可以使用诸如二维行程编码方案之类的标准或已知的编码模块来编码值。可以将位图的每一扫描线视为与它前面的扫描线的差异,然后,如下面比较详细地描述的,编码那些差异。本公开的各实施例可以在一台或多台计算机上执行。图1以及下面的讨论旨在提供其中可以实现本发明的合适的计算环境的简要的一般说明。所属领域技术人员可以理解,可以使用图1的计算机系统的某些或全部组件来实现图3和4的计算机。在本公开中通篇使用的术语“电路”可包括诸如例如硬件中断控制器、硬盘驱动器、网络适配器、图形处理器,以及音频编解码器之类的专门硬件组件。在相同实施例或其他实施例中,电路可包括被配置成通过固件或设定开关执行功能的微处理器。在相同或其他示例实施例中,电路可包括一个或多个逻辑处理器,例如,多核通用处理单元的一个或多个核。此示例中的逻辑处理器可以通过从存储器,例如,RAM、R0M、固件和/或虚拟存储器中加载的体现可操作以执行功能的逻辑的软件指令来配置。在其中电路包括硬件和软件的组合的示例实施例中,实施者可以编写体现逻辑的源代码,而源代码可以随后被编译为可以由逻辑处理器处理的机器可读代码。由于所属领域技术人员可以理解,现有技术已经发展到在硬件、软件或硬件/软件的组合之间差别微小的程度,为实现特定功能而选择硬件还是软件是交由实施者处理的设计选择。更具体而言,本领域技术人员可以理解,可以将软件进程转换成等效的硬件结构,也可以将硬件结构本身转换成等效的软件进程。如此,选择硬件实现还是软件实现是一种设计选择,并交由实施者处理。现在参考图1,描绘了示例性通用计算机系统。通用计算机系统可包括常规计算机 20等等,它包括通用处理单元21 (其可包括一个或多个逻辑处理器)、系统存储器22,以及将包括系统存储器的各种系统组件耦合到处理单元21的系统总线23。系统总线23可以是若干类型的总线结构中的任一种,包括使用各种总线体系结构中的任一种的存储器总线或存储器控制器、外围总线,以及局部总线。系统存储器包括只读存储器(ROM)M和随机存取存储器(RAM) 25。基本输入/输出系统沈(BIOS)被存储在ROM M中,它包含了诸如在启动期间帮助在计算机20内的元件之间传输信息的基本例程。计算机20还可以包括用于读写硬盘(未示出)的硬盘驱动器27、用于读写可移动磁盘四的磁盘驱动器28,以及用于读写诸如CD ROM或其他光学介质之类的可移动光盘31的光盘驱动器30。在某些示例实施例中,体现本发明的各方面的计算机可执行指令可以存储在ROM 24、硬盘(未示出)、RAM 25、 可移动磁盘四、光盘31,和/或通用处理单元21的高速缓存中。硬盘驱动器27、磁盘驱动器28,以及光盘驱动器30分别通过硬盘驱动器接口 32、磁盘驱动器接口 33,以及光盘驱动器接口 34连接到系统总线23。驱动器以及它们相关联的计算机可读介质为计算机20提供了对计算机可读指令、数据结构、程序模块,及其他数据的非易失性存储。虽然此处所描述的示例性环境使用了硬盘、可移动磁盘29、以及可移动光盘31,但是,那些本领域普通技术人员应该理解,在操作环境中也可以使用诸如盒式磁带、闪存卡、数字视频盘、伯努利磁带盒、随机存取存储器(RAM)、只读存储器(ROM)等等之类的可以存储可由计算机进行访问的数据的其他类型的计算机可读介质。可以有若干个程序模块存储在硬盘、磁盘四、光盘31、ROM 24,和/或RAM 25上, 包括操作系统35、一个或多个应用程序36、其他程序模块37、以及程序数据38。用户可以通过诸如键盘40和定点设备42之类的输入设备向计算机20中输入命令和信息。其他输入设备(未示出)可以包括麦克风、游戏杆、游戏手柄、圆盘式卫星天线、扫描仪等等。这些及其他输入设备常常通过耦合到系统总线的串行端口接口 46连接到通用处理单元21,但是,也可以通过其他接口,如并行端口、游戏端口、通用串行总线(USB)端口来进行连接。显示器47或其他类型的显示设备也可以通过诸如视频适配器48之类的接口,连接到系统总线23。除了显示器47之外,计算机通常还包括其他外围输出设备(未示出),如扬声器和打印机。图1的示例性系统也包括主机适配器55、小型计算机系统接口(SCSI)总线56,以及连接到SCSI总线56的外部存储装置62。计算机20可以使用到一个或多个远程计算机(如远程计算机49)的逻辑连接,以在联网环境中操作。远程计算机49可以是另一计算机、服务器、路由器、网络PC、对等设备或其他公共网络节点,并且通常可包括上文参考计算机20所描述的许多或全部元件,虽然在图1中只示出了存储器存储设备50。图1中所描绘的逻辑连接可包括局域网(LAN) 51和广域网(WAN)52。这样的联网环境在办公室、企业范围的计算机网络、内部网和因特网中是普遍现象。当用于LAN网络环境中时,计算机20可通过网络接口或适配器53连接到LAN 51。 当用于WAN网络环境中时,计算机20通常包括调制解调器M,或用于通过广域网52(如通过因特网)建立通信的其他装置。调制解调器M,其可以是内置的或外置的,可通过串行端口接口 46连接到系统总线23。在联网环境中,参考计算机20所描述的程序模块,或其某些部分,可以存储在远程存储器存储设备中。可以理解,所示出的网络连接只是示例性的,也可以使用用于在计算机之间建立通信链路的其他装置。此外,尽管可以预想本发明的很多实施例特别适合于计算机化系统,但是,本文中没有任何表述旨在将本公开限制于这样的实施例。前述的详细描述通过示例和/或操作图阐述了系统和/或进程的各实施例。在这样的框图和/或示例包含一个或多个功能和/或操作的范围内,本领域技术人员将理解,这样的框图,或示例内的每一功能和/或操作可以分别地和/或共同地通过范围广泛的硬件、 软件、固件或几乎其任何组合来实现。尽管示出和描述了此处所描述的本主题的特定方面,但是,对于本领域的技术人员显而易见的是,基于此处的原理,在不偏离此处所描述的主题以及其广泛的方面的情况下,可以作出更改和修改,因此,所附权利要求书将包含在它们的范围内,所有这样的更改和修改都将在此处所描述的主题的真正的精神和范围内。图2描绘了用于压缩包括单指令多数据(SIMD)指令集的处理器上的源图像的示例操作过程。带有SIMD指令集的处理器通常被称为向量处理器。诸如NEHALEM 处理器之类的某些INTEL x86 ISA处理器中的诸如SSE 4. 2指令之类的流式SIMD扩展(SSE)是这些SIMD指令的一种形式。这样的处理器可以以并行方式一次对大部分数据进行操作。例如,这样的64位处理器可以通过在两个64比特字中的每一个中放置两个整数,然后,添加每一个64比特字,将两组32比特带符号整数同时相加。在通常从低字到高字有溢出的情况下,诸如如果每一低字都包含2~31,指令通常考虑这种情况,不会溢出到高字。可以使用这样的操作过程来压缩图像,以便通过网络诸如通过远程桌面协议(RDP)进行发送。在这样的实施例中,源图像和输出图像可以与显示的用户会话相对应,诸如用户如同在操作过程在其上面执行的计算机上本地上将体验的。该显示的用户会话可以包括计算机桌面以及以诸如用户将在该计算机上看到的方式层叠的任何打开的应用程序窗口。在一个实施例中,源图像包括像素的行和列,而每一个像素都包括RGBA颜色空间中的32个比特,以便8个比特被专用于像素的红色(R)颜色值、绿色(G)颜色值、蓝色⑶ 颜色值和阿尔法(A)(或透明度)值中的每一个。操作200开始该方法。例如当接收到源图像以及压缩该图像的指令时,可以执行它。操作202描绘了 16比特对齐源图像的每一个通道,源图像包括至少一个像素,每一个像素都包括红色(R)值、绿色(G)值、蓝色(B)值,以及α (A)值。这包括确保,源图像的存储器中的位置处于16比特的倍数的地址,然后,在存储器空间中8比特对齐所有像素 (8比特)。操作204描绘了平面化源图像,以产生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)Α⑵…々(!!)。用于产生此重新排列的有效算法是加载图像的头1 个比特,包括四个32比特像素。然后,将8比特的第一、第五、第九和第十三部分加到R缓冲器,将第二、 第六、第十和第十四加到G缓冲器,并将第三、第七、第十一,以及第十五加到B缓冲器。然后,对于图像的每一个连续的128比特,重复这些过程。在一个实施例中,A通道既不被平面化,也不会以后被使用,但是,被丢弃,以便节省计算时间和压缩图像。操作206描绘了解包R矢量、G矢量,以及B矢量中的每一个,以便在每八个比特的矢量之前放置八个零的序列。在像素的每一通道都包括八个比特的实施例中,这将每一个像素占据的有效空间增大两倍,并将整个矢量大小增大两倍。在R矢量被表示成R(O), R(I),…R(n)和八个零的串被表示成0x00的情况下,解包的矢量是0x00,R(O), 0x00, R(I),-0x00, R(n),那些零在每一个像素的红色值前面。操作208描绘了将Co矢量设置为等于R矢量减去B矢量。在一个实施例中,这对 128比特的R矢量和B矢量一次执行。这包括利用给处理器的单个指令,该单个指令可以对 128比特数据一次进行操作,来一次加载128比特的R矢量和B矢量,并从R矢量减去B矢量。在矢量已经利用零解包的情况下,每128比特都包括8比特通道值,总共64比特,以及 8组8个零,总共另外64比特。由于矢量已经通过插入零被解包,没有溢出的顾虑一任何溢出都将流入该8个零的集合中,而不是下一数字。例如,在打包的值可以是Oxll和OxlF并将它们相加的情况下,结果是0x30。然而,那些值的解包的版本是0x0101,和OxOlOF,结果是0x0210。从右边8比特的溢出进入零,而并非进入实际数据的左边8比特。类似的逻辑适用于此方法中的其他操作,特别是操作210-214。操作210描绘了将Y矢量设置为等于B矢量与Co矢量用算术方法向右移位一次, 然后,与Cg矢量用算术方法向右移位一次的总和的总和。在伪代码中,此操作可以被表示为γ = β+(Co >> 1)。在一个实施例中,使用单处理器指令来移位Co,并将它保存到临时值,然后,使用第二单处理器指令来将Y设置为B和该临时值的总和。在一个实施例中,这对每一矢量的128比特执行一次。在Co等于Oxllll 1111 1111 1101的情况下,在它被向右移位一次的情况下,每一比特都向右移动,最右边比特被丢弃,然后,给最左比特的第二个指定零值(使用最左比特来表示该数字是正的,还是负的,并保留)。这产生0x1011 1111 1111 1110。操作212描绘了将Cg矢量设置为等于Y矢量减去G矢量。在一个实施例中,这对每一矢量的128比特执行一次。操作214描绘了将Y矢量设置为等于Y矢量与Cg矢量用算术方法向右移位一次之后相加。在一个实施例中,这对每一矢量的128比特执行一次。在伪代码中,此操作可以被表示为Y = Y+(Cg >> 1)。在其中矢量的128比特被操作一次的一个实施例中,对于每一矢量的下面的连续的128比特,该方法重复操作208-214,直到每一矢量的全部都被以此方式操纵。在其中这些操作被循环以对图像的全部操作的一个实施例中,指令在每一循环内出现两次。在1 比特的平面化矢量被利用单个操作加载到存储器的情况下,这是有利的。解包头64比特, 然后,对其进行操作,然后,可以解包第二 64比特,并对其进行操作,无需另外的存储器访问。当对所有128比特进行操作时,要求另一个存储器访问,循环再从头开始。操作216描绘了将Co矢量设置为等于Co矢量除以颜色丢失级别,然后再与色度掩码相加。在一个实施例中,颜色丢失级别是将Co矢量的每一 16比特片段向右移位预定的比特数(如上所述,在值带符号的情况下,保留符号),其与压缩图像的量相对应。这在某种程度上降低颜色信息的准确性(最低有效比特被丢弃),而且还增大了图像最终可能被压缩的量,因为更多像素将具有相同色值(提高了行程编码算法的有效性)。同样,色度掩码表示1 个1的集合,其中,每16比特逐比特右移色度丢失级别。在与色度掩码级别求和时,执行第一级别的压缩。操作218描绘了将Cg矢量设置为等于Cg矢量除以颜色丢失级别,然后再与色度掩码相加。在一个实施例中,颜色丢失级别是将Co矢量的每一 16比特片段向右移位预定的比特数(如上所述,在值带符号的情况下,保留符号)。这在某种程度上降低颜色信息的准确性(最低有效比特被丢弃),而且还增大了图像最终可能被压缩的量,因为更多像素将具有相同色值(提高了行程编码算法的有效性)。同样,色度掩码表示1 个1的集合, 其中,每16比特逐比特右移色度丢失级别。在与色度掩码级别求和时,执行第一级别的压缩。在一个实施例中,色度掩码包括等于处理器可以同时操作的比特的数量的二进制1的序列,用算术方法向右移位与一个像素的红色值中的比特数的两倍相对应的比特的组中的颜色丢失级别。操作220描绘了子采样Co和Cg矢量的可选步骤。这可以例如通过取多个相邻像素的颜色值的平均值,并将该平均值指定到每一个像素的颜色值,来做到。这将允许压缩算法进一步缩小所产生的输出图像的存储空间,因为许多值将重复。在图3的讨论中给出了此操作的实施例的更多细节。操作222描绘了行程编码Y矢量。在一个实施例中,当其他两个矢量处于操作216 和218中时,Y矢量不被压缩。这是因为,人眼对由Y矢量所表示的亮度最敏感,如此,在保留此信息时,人将发现其他两个通道上的有损压缩不太显著。行程编码是无损压缩方案,该方案包括通过存储一次共享同一个值的连续的数据值,以及多少数据值通过该数字来表示的统计,来压缩矢量。例如,给定一串字母,AAAAAAABBBBAAAAA,可以将此字符串的行程编码的版本表示为(A7) (B3) (A5)。在一个实施例中,此行程编码是根据Lempel-Ziv(LZ)算法来执行的。LZ算法通常通过搜索要被压缩的对象和由该算法所维护的数据结构(常常叫做词典)中所包含的字符串的集合之间的匹配来进行操作。当该算法发现匹配时,它将对数据结构中的该匹配的位置的引用替换为该匹配其本身。在一个实施例中,可以使用其他行程编码技术,来执行前向搜索,寻找重复的行程(rim),将它们替换为指出行程的长度以及重复的字节模式的代码。在一个实施例中,使用二维行程编码技术来提高压缩效率。这通过将当前像素行与以前的像素行异-或O(OR)来实现,以实现零的“垂直”条,其中,有可以被比较轻松地行程编码的垂直重复。操作2M描绘了行程编码Co矢量。这种形式的编码对于只使用几种不同类型的颜色的图像非常适合(甚至音调或色调中的非常微小的变化都要求行程编码中的另外的存储空间),如此,该技术得益于应用于上面的矢量的色度丢失级别。操作2 描绘了行程编码Cg矢量。这可以以类似于操作222或224的方式来执行。操作2 描绘了存储输出图像,其中,该输出图像包括Y矢量、Co矢量,以及Cg矢量,而输出图像与源图像相对应。在一个实施例中,这包括去平面化YCoCg图像。在一个实施例中,存储包括存储到诸如RAM之类的存储器,然后根据远程桌面协议(RDP),通过计算机网络传输图像,供客户端使用。图3描绘了用于子采样由图2的操作过程所产生的输出图像的操作过程。它可以是图2的操作220的实施例。操作302描绘了将输出图像分段为至少一个四元组,一个四元组包括四个像素, 以便该四元组中的每一个像素都与该四元组中的一个其他像素共享输出图像的一列,而四元组中的每一个像素与四元组中的一个其他像素共享输出图像的一行,每一个四元组都具有顶行和底行,一个像素与至多一个四元组相对应。在此实施例中,通过子采样图像来生成进一步的压缩,并可以在行程编码Co和Cg矢量之前执行,以预处理图像,以取得更好的压缩。这些操作提高了由像素所表示的色值的一致性(但损失图像保真度),可以使用行程编码,增大压缩。操作304描绘了解包每一四元组的每一行到16比特值以及利用零分散到每一行的步骤。在像素的每一通道都包括八个比特的实施例中,这将每一个像素占据的有效空间增大两倍,并将整个矢量大小增大两倍。在R矢量被表示成R(O),R(I),…R(n)和一串八个零被表示成0x00的情况下,解包的矢量是0x00,R(O),0x00,R(I),…0x00,R(η),那些零在每一个像素的红色值前面。
操作306描绘了通过将每一个四元组的顶行和底行相加来产生组合行的步骤,其中,每一行中的每一个像素都具有饱和值,当顶行中的像素与底行中的像素相加的总和超出饱和值时,将顶行中的像素与底行中的像素相加的总和设置为饱和值。即,在一个像素的每一通道都包括8比特信息,并且该通道的值被表达为8比特无符号整数的情况下,该通道可以具有的最大值是2~8-1,或255。该255是此示例中的饱和值,因为没有更大的值可以存储。在两个数字被求和以使得总和超出255的情况下,总和将被置为255。如此,尽管 100和150的总和将导致具有250值的组合的行,但是,通常将是350的100和250的总和将仅限于饱和值,组合行将具有255值。此操作可以包括子采样图像的一部分,以及操作 234-238。操作308描绘了将每一个四元组的组合行与该四元组的组合行的字正移 (word-shuffled)版本相加的步骤。在行从左到右可以表示为像素值0,1,2,3的情况下, 交换头两个值,交换最后两个值,产生一行1,0,3,2。然后,将此与原始行相加,产生带有值 0+1、1+0、2+3、3+2的行。现在,头两个值彼此相等,第二两个值彼此相等,如此,可以忽略它们,因为是冗余的。操作310描绘了将每一个四元组的相加的和组合行除以4的步骤。在一个实施例中,这是通过将行向右用算术方法移位两个位置来完成的。在一个实施例中,这对每一矢量的128比特执行一次,移位单独地在128比特字符串的四个32比特部分发生,类似于上面的对用算术方法移位的讨论。在除以4时,确定四元组的平均值。在使用平均值时,实现有损压缩。精确度降低了 4倍,但是,与之前相比,只必须存储四分之一的值,因为存储与四元组中的所有四个像素相对应的一个值。在一个实施例中,丢弃四元组中的冗余值。操作312描绘了将每一个四元组的相加的和组合行重新包装的步骤。在一个实施例中,这是解包操作的兄弟一它丢弃在该解包操作过程中引入的那些八个零的组。代码示例下面包括高级程序设计语言C类型语法的伪代码示例,当在向量处理器上执行时,将以本公开的实施例的方式对源图像“srclmage”进行操作,类似于如图2的详细描述中所描述的。
1权利要求
1.一种用于在包括单指令多数据指令集(SIMD)的处理器上压缩源图像的方法, 包括对齐所述源图像的每一个通道,所述源图像包括至少一个像素,每一个像素都包括红色(R)值、绿色(G)值、蓝色⑶值,以及α (A)值(202);平面化所述源图像,以产生R矢量、G矢量以及B矢量,所述R矢量包括每一个像素的所述R值,所述G矢量包括每一个像素的所述G值,所述B矢量包括每一个像素的所述B值 (204);解包所述R矢量、所述G矢量,以及所述B矢量中的每一个Q06); 设置Co矢量等于所述R矢量减去所述B矢量Q08); 设置Y矢量等于所述B矢量与Co矢量用算术方法除以2的总和Ο10); 设置Cg矢量等于所述G矢量减去所述Y矢量012);设置所述Y矢量等于所述Y矢量与所述Cg矢量用算术方法除以2所得的值相加 (214);设置所述Co矢量等于所述Co矢量除以颜色丢失级别,然后再与色度掩码相加016); 设置所述Cg矢量等于所述Cg矢量除以颜色丢失级别,然后再与色度掩码相加018); 行程编码所述Y矢量022); 行程编码所述Co矢量(224); 行程编码所述Cg矢量026);以及存储输出图像,其中,所述输出图像包括所述Y矢量、所述Co矢量,以及所述Cg矢量, 而所述输出图像与所述源图像相对应0观)。
2.如权利要求1所述的方法,其特征在于,还包括 子采样所述输出图像的所述Co和Cg矢量(220)。
3.如权利要求2所述的方法,其中,子采样包括将所述输出图像分段为至少一个四元组,一个四元组包括四个像素,以便所述四元组中的每一个像素都与所述四元组中的一个其他像素共享所述输出图像的一列,而所述四元组中的每一个像素与所述四元组中的一个其他像素共享所述输出图像的一行,每一个四元组都具有顶行和底行,一个像素与至多一个四元组相对应; 解包每一个四元组的每一行;通过将每一个四元组的所述顶行和所述底行相加,产生组合行,其中,每一行中的每一个像素都具有饱和值,当所述顶行中的所述像素与所述底行中的所述像素相加的所述总和超出所述饱和值时,将所述顶行中的所述像素与所述底行中的所述像素相加的所述总和设置为所述饱和值;将每一个四元组的所述组合行与该四元组的所述组合行的字正移版本相加; 将每一个四元组的相加的和组合行除以4 ;以及重新包装每一个四元组的相加的以及组合的行。
4.如权利要求1所述的方法,其特征在于,一个像素包括四个通道,每一个通道八个比特。
5.如权利要求1所述的方法,其特征在于,所述Y矢量与所述源图像的亮度相对应,所述Co矢量与所述源图像的橙色相对应,而所述Cg矢量与所述源图像的绿色相对应。
6.如权利要求1所述的方法,其特征在于,还包括经由网络,通过远程桌面协议(RDP)协议,发送所述输出图像。
7.如权利要求1所述的方法,其特征在于,解包矢量包括 在矢量的每八个比特之前插入八个零的序列;
8.如权利要求1所述的方法,其特征在于,一个像素的每一个通道都包括八个比特,对齐所述源图像的每一个通道包括16比特对齐每一个通道。
9.如权利要求1所述的方法,其特征在于,所述处理器同时对128比特进行操作。
10.如权利要求1所述的方法,其特征在于,解包、设置、行程编码以及存储这些操作中的至少一个包括向所述处理器发送SIMD指令,以同时对多个像素中的每个像素的至少一个通道进行操作。
11.如权利要求1所述的方法,其特征在于,设置Y矢量等于所述B矢量与Co矢量用算术方法除以2的总和包括用算术方法逐比特将所述Co矢量向右移动一次。
12.如权利要求1所述的方法,其特征在于,存储所述输出图像包括 去平面化所述Y矢量、所述Co矢量和所述Cg矢量。
13.如权利要求1所述的方法,其特征在于,所述源图像与显示的用户会话相对应。
14.如权利要求1所述的方法,其特征在于,所述源图像和所述输出图像中的至少一个包括位像。
15.如权利要求1所述的方法,其特征在于,所述颜色丢失级别与压缩所述图像的量相对应。
16.如权利要求1所述的方法,其特征在于,所述行程编码是根据Lempel-Ziv(LZ)算法来执行的。
17.如权利要求1所述的方法,其特征在于,所述色度掩码包括等于所述处理器可以同时操作的比特的数量的二进制1的序列,用算术方法向右移位与一个像素的红色值中的比特数的两倍相对应的比特的组中的颜色丢失级别。
18.一种用于在支持矢量处理的处理器上压缩源图像的方法,包括接收包括像素的源图像,每一个像素都包括红色-绿色-蓝色-阿尔法(RGBA)图像数据;通过向所述处理器发送一系列处理器指令,将所述图像平面化为其R、G和B分量,每一个处理器指令都同时对多个像素的数据进行操作;通过向所述处理器发送一系列处理器指令,将所述已平面化的图像转换为亮度-橙色-绿色(YCoCg)图像数据,每一个处理器指令都同时对多个像素的数据进行操作;通过向所述处理器发送一系列处理器指令,压缩所述YCoCg图像的所述Co和Co分量, 每一个处理器指令都同时对多个像素的数据进行操作;以及作为输出图像,存储所述经过压缩的图像数据。
19.如权利要求18所述的方法,还包括将所述输出图像分割为至少一个四个像素组,并子采样每一四个像素组。
20.一种计算机可读存储介质,包括计算机可读指令,当这些指令在单指令多派遣 (SIMD)处理器上执行时,所述处理器能够同时对128比特进行操作,执行包括下列各项的操作16比特对齐所述源图像的每一个通道,所述源图像包括至少一个32比特像素,每一个像素都包括8比特红色(R)值、8比特绿色(G)值、8比特蓝色⑶值,以及8比特α (A)值 (202);平面化所述源图像,以产生R矢量、G矢量以及B矢量,所述R矢量包括每一个像素的所述R值,所述G矢量包括每一个像素的所述G值,所述B矢量包括每一个像素的所述B值 (204);解包R矢量、G矢量,以及B矢量中的每一个,以便八个零在每一个矢量中的每一个8比特值前面(206);通过同时对每个矢量的1 比特进行操作的一系列处理器指令,设置Co矢量等于的所述R矢量减去所述B矢量Q08);通过同时对每个矢量的128比特进行操作的一系列处理器指令,设置Y矢量等于所述 B矢量与Co矢量用算术方法右移一次的总和O10);通过同时对每个矢量的128比特进行操作的一系列处理器指令,设置Cg矢量等于所述 Y矢量减去所述G矢量012);通过同时对每个矢量的128比特进行操作的一系列处理器指令,设置所述Y矢量等于所述Y矢量与所述Cg矢量用算术方法右移一次所得的值相加014);通过同时对每个矢量的1 比特进行操作的一系列处理器指令,设置所述Co矢量等于所述Co矢量用算术方法以颜色丢失级别右移并然后再与色度掩码相加016);通过同时对每个矢量的1 比特进行操作的一系列处理器指令,设置所述Cg矢量等于所述Cg矢量用算术方法以颜色丢失级别右移并然后再与色度掩码相加018);通过同时对每个矢量的128比特进行操作的一系列处理器指令,行程编码所述Y矢量 (222);通过同时对每个矢量的1 比特进行操作的一系列处理器指令,行程编码所述Co矢量 (224);通过同时对每个矢量的1 比特进行操作的一系列处理器指令,行程编码所述Cg矢量 (226);以及存储输出图像,其中,所述输出图像包括所述Y矢量、所述Co矢量,以及所述Cg矢量, 而所述输出图像是在亮度-橙色-绿色(YCoCg)颜色空间,并且所述输出图像对应于所述源图像(228) 0
全文摘要
公开了用于使用向量处理器上可用的并行指令来压缩图像数据的技术。在一个实施例中,接收RGBA格式的源图像。使用一系列向量处理器指令来执行将图像拆分为单独的R、G、B,以及A通道,然后,将它转换为YCoCg颜色空间、单独地压缩Y、Co,以及Cg通道,然后,保存对应于源图像的已压缩版本的输出图像的并行处理步骤。
文档编号H04N11/04GK102246524SQ200980150120
公开日2011年11月16日 申请日期2009年11月11日 优先权日2008年12月9日
发明者N·Y·阿布多 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1