CN109691108A - 用于无损编码的多像素高速缓存方案 - Google Patents
用于无损编码的多像素高速缓存方案 Download PDFInfo
- Publication number
- CN109691108A CN109691108A CN201780055489.4A CN201780055489A CN109691108A CN 109691108 A CN109691108 A CN 109691108A CN 201780055489 A CN201780055489 A CN 201780055489A CN 109691108 A CN109691108 A CN 109691108A
- Authority
- CN
- China
- Prior art keywords
- pixel
- subsequence
- cache
- caches
- duplicate
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/42—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation
-
- G—PHYSICS
- G09—EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
- G09G—ARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
- G09G5/00—Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators
- G09G5/003—Details of a display terminal, the details relating to the control arrangement of the display terminal and to the interfaces thereto
- G09G5/006—Details of the interface to the display terminal
-
- G—PHYSICS
- G09—EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
- G09G—ARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
- G09G5/00—Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators
- G09G5/02—Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators characterised by the way in which colour is displayed
- G09G5/06—Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators characterised by the way in which colour is displayed using colour palettes, e.g. look-up tables
-
- G—PHYSICS
- G09—EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
- G09G—ARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
- G09G5/00—Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators
- G09G5/36—Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators characterised by the display of a graphic pattern, e.g. using an all-points-addressable [APA] memory
- G09G5/363—Graphics controllers
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/14—Conversion to or from non-weighted codes
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/3084—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method
- H03M7/3088—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method employing the use of a dictionary, e.g. LZ78
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/46—Conversion to or from run-length codes, i.e. by representing the number of consecutive digits, or groups of digits, of the same kind by a code word and a digit indicative of that kind
- H03M7/48—Conversion to or from run-length codes, i.e. by representing the number of consecutive digits, or groups of digits, of the same kind by a code word and a digit indicative of that kind alternating with other codes during the code conversion process, e.g. run-length coding being performed only as long as sufficientlylong runs of digits of the same kind are present
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/70—Type of the data to be coded, other than image and sound
- H03M7/702—Software
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/169—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
- H04N19/182—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being a pixel
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/50—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
- H04N19/593—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving spatial prediction techniques
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/90—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using coding techniques not provided for in groups H04N19/10-H04N19/85, e.g. fractals
- H04N19/93—Run-length coding
-
- G—PHYSICS
- G09—EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
- G09G—ARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
- G09G2330/00—Aspects of power supply; Aspects of display protection and defect management
- G09G2330/02—Details of power systems and of start or stop of display operation
- G09G2330/021—Power management, e.g. power saving
-
- G—PHYSICS
- G09—EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
- G09G—ARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
- G09G2340/00—Aspects of display data processing
- G09G2340/04—Changes in size, position or resolution of an image
-
- G—PHYSICS
- G09—EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
- G09G—ARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
- G09G2360/00—Aspects of the architecture of display systems
- G09G2360/08—Power processing, i.e. workload management for processors involved in display operations, such as CPUs or GPUs
-
- G—PHYSICS
- G09—EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
- G09G—ARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
- G09G2360/00—Aspects of the architecture of display systems
- G09G2360/18—Use of a frame buffer in a display terminal, inclusive of the display panel
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/90—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using coding techniques not provided for in groups H04N19/10-H04N19/85, e.g. fractals
- H04N19/94—Vector quantisation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Signal Processing (AREA)
- Multimedia (AREA)
- Computer Hardware Design (AREA)
- General Physics & Mathematics (AREA)
- Physics & Mathematics (AREA)
- Computer Graphics (AREA)
- Compression Or Coding Systems Of Tv Signals (AREA)
- Compression Of Band Width Or Redundancy In Fax (AREA)
- Controls And Circuits For Display Device (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
- Image Processing (AREA)
- Information Transfer Between Computers (AREA)
Abstract
提供了用于无损编码器编码多像素高速缓存方案的系统和方法。该系统和方法可以包括:获得像素序列;确定该像素序列的由单重复像素组成的重复子序列和该像素序列的非重复子序列;响应于该确定,使用重复像素的游程长度对重复子序列进行编码,并且使用多像素高速缓存对非重复子序列进行编码,其中使用多像素高速缓存的编码包括:将存储在多像素高速缓冲中的非重复子序列编码为多像素高速缓存中的非重复子序列的位置,并且使用非重复子序列中的像素的值对未存储在多像素高速缓存中的非重复子序列进行编码。
Description
背景技术
现代计算系统能够运行各种各样的软件应用程序和平台。计算系统可以提供允许在计算系统上执行的应用程序访问计算系统的硬件组件并与之交互的操作系统。通过这种交互,软件应用程序可以接受用户输入并提供输出,输出可以通过呈现在显示设备上的图形用户界面呈现给用户。另外,输出可以被转发到远程计算设备。
远程计算技术允许用户使用计算系统而无需物理地位于计算系统处。通过远程访问,用户可以通过公共或专用网络连接到远程计算系统。用户可以使用本地计算系统将输入发送到远程计算系统,并且远程计算系统可以进行响应。虽然没有物理上处于远程计算系统,但是用户可以与远程计算系统交互,就像用户直接使用该系统一样。
另外,可视化技术已经广泛用于共享有限的计算机硬件资源。在硬件虚拟化环境(有时也称为平台虚拟化环境)中,一个或多个虚拟机可以模拟具有其自己的操作系统的主机。特别地,在这些虚拟机上执行的软件可以与底层硬件资源分离。因此,在同一主机上运行的虚拟机可以各自拥有其自己的操作系统。例如,运行Microsoft Windows操作系统的计算机可以托管模拟运行Linux操作系统的计算机的虚拟机,基于该虚拟机可以执行基于Linux的软件。
此外,虚拟化技术可以提供通过公共或专用网络对计算机资源的远程访问。用户可以使用各种客户端访问运行在虚拟化环境中的主机上的虚拟桌面或应用程序。这些客户端可以直接连接到主机,或者它们可以通过公共或专用网络连接到虚拟化环境。客户端可以捕获用户输入并通过网络将其传输到主机的虚拟环境。接收用户输入的应用程序可以通过执行某些动作并向用户呈现响应来进行响应。虚拟化允许多个用户共享硬件资源,而不是要求每个用户连接到专用远程计算系统。
在远程、本地或虚拟化计算环境中运行的应用程序可以响应用户输入来更新用于显示设备上的显示的输出。应用程序可以向操作系统提供指令以更新图形用户界面。然后,操作系统可以处理命令并且在图形界面上显示更新。在许多当前和过去的系统架构中,应用程序可以通过操作系统直接写入帧缓冲器。除了要显示的帧之外,操作系统还可以提供原始绘制命令和关于更新的显示帧的附加信息,如显示内容的内容类型、输出显示帧的修改区域以及关于该输出显示帧的其他元数据。该信息对于远程技术是有用的,因为系统可以将原始绘制命令和关于显示帧的附加信息组合,以优化发送到远程计算环境的数据,而不是通过网络只发送表示可视显示的带宽密集图形。该优化允许更好的用户体验,同时限制远程计算所需的网络带宽。
现代操作系统已经远离过去的显示机制,改为依赖于将用户界面的渲染卸载到图形处理单元。结果,操作系统从应用程序接收更新,使用图形处理单元将这些更新合成为显示帧,并向显示设备或图形系统提供表示合成帧的图形或位图。计算环境的图形系统仅接收最终的合成显示帧而没有任何附加的元数据或绘制命令。因此,将显示转发给远程连接的用户的图形驱动器不再能够从先前提供的信息受益,并且需要提高虚拟和远程计算环境中的显示帧的处理、编码和传送的效率。
附图说明
下面将参考示出本公开的示例性实施例的附图。在附图中:
图1是与本公开一致的实施例的示例性网络环境的框图。
图2A-2C是与本公开一致的实施例的示例性计算设备的框图。
图3是与本公开一致的实施例的用于编码像素序列的示例性方法的流程图。
图4示出与本公开一致的实施例的示例性高速缓存。
图5是与本公开一致的实施例的用于编码像素序列的示例性方法的流程图。
图6示出与本公开一致的实施例的示例性高速缓存。
图7是与本公开的实施例一致的用于解码像素序列的示例性方法的流程图。
具体实施方式
现在将详细参考根据本公开实现的示例性实施例,其示例在附图中示出。只要有可能,在所有附图中将使用相同的附图标记来表示相同或相似的部分。
本文描述的实施例提供用于编码显示帧数据的技术和方法。这些技术可以在虚拟和非虚拟环境中操作,允许优化转发到远程客户端的显示输出。这些技术提供了对编码帧的压缩的改进,并减少了在公共和专用网络上的显示数据传输中的带宽使用。这可以在带宽有限的网络上提供更好的最终用户体验,或者可以降低每个字节付费、按需付费或者使用其他有限数据方案(例如,蜂窝数据计划)的成本。另外,本文描述的技术和方法可以提供有效的编码,而计算资源需求的增加很小或可忽略不计。
根据与本公开一致的实施例,可以使用各种编码方法对显示帧数据进行编码。例如,可以使用有损压缩算法(例如,联合图像专家组(“JPEG”)或保持压缩JPEG的标记图像文件格式(TIFF)容器)来编码显示帧的一些区域,以便减少那些区域的存储器占用。此外,显示帧的其他区域可以使用无损压缩算法(例如,每像素数据8位的图形交换格式(“GIF”)、便携式网络图形(“PNG”)、TIFF容器保持PackBits、TrueVision TGA(“TGA”)或游程长度编码(Run Length Encoding,“RLE”))进行编码,以保持质量。与有损编码期间实现的压缩比相比,无损编码期间实现的压缩比会显著降低。这需要新的机制来优化显示帧数据的无损编码。
与本公开一致的实施例包括用于无损编码器的多像素高速缓存方案的系统和方法。该系统和方法可以包括:获得像素序列;确定该像素序列的由单个重复像素组成的重复子序列和该像素序列的非重复子序列;响应于该确定,使用重复像素的游程长度(run-length)编码该重复子序列,并且使用多像素高速缓存编码该非重复子序列,其中使用多像素高速缓存的编码包括:编码存储在多个像素高速缓存中的非重复子序列作为多像素高速缓存中的非重复子序列的位置,并且使用非重复子序列中的像素的值编码未存储在多像素高速缓存中的非重复子序列。
本文描述的实施例可以提供图像和其他数据的改进的编码,以便减少传输所需的带宽,同时对计算机资源消耗增加的需要可忽略。在用于编码视觉数据的系统中,其中每个原始像素使用三个字节的数据来表示(该像素的红色(R)、绿色(G)和蓝色(B)成分每个使用一个字节的数据),与本公开一致的实施例可以利用多像素高速缓存来存储和编码包括许多不同像素的重复序列,仅将两个字节的数据用于该序列。所公开的技术最小化表示像素序列所需的数据的量并且提供对现有无损编码方法的改进。在单个图像或视频帧可以由数百万个像素组成的当前环境中,像素级存储的减少可以产生效率的大幅提高以及在网络上提供编码数据的必要带宽和资源的显著减少。
图1是示例性网络环境100的框图。虽然示例性网络环境100针对虚拟网络环境,但是应当理解,网络环境可以是使用数据包进行通信的任何类型的网络。网络环境100可以包括一个或多个客户端设备102A-F、公共网络104、专用网络110、主机构114、分支机构116和数据中心120。
一个或多个客户端设备102A-F(统称为102)是可以通过各种手段从数据中心120获取远程服务的设备。客户端设备102A-F可以直接与数据中心120通信(例如,客户端设备102E),或者通过公共网络104(例如,客户端设备102A-D)或专用网络110(例如,客户端设备102F)间接地与数据中心120通信。在一些实施例中,主机构114和分支机构116还可以包括与客户端设备102A-F类似的一个或多个客户端设备。主机构114可以位于例如公司的主要营业场所。分支机构116可以例如位于远离主机构114的位置。在一些实施例中,主机构114和分支机构116的客户端设备也可以通过例如专用网络110从数据中心120获取远程服务。
当客户端设备102通过公共网络104或专用网络110进行通信时,可以建立通信链路。例如,通信链路可以由公共网络104建立,从而提供客户端设备(例如,客户端设备102A-D)对数据中心120的访问。通信链路也可以由专用网络110建立,从而提供客户端设备102F、主机构114和/或分支机构116对数据中心120的访问。虽然客户端设备102A-D被描绘为计算机(例如,客户端设备102A)、膝上型计算机(例如,客户端设备102B)、平板电脑(例如,客户端设备102C)和移动智能电话(例如,客户端设备102D),但是应当理解,客户端设备102可以是与数据中心120进行数据包通信的任何类型的设备(例如,诸如智能手表或任何其他可穿戴设备)。
公共网络104和专用网络110可以是任何类型的网络,如广域网(WAN)、局域网(LAN)或城域网(MAN)。例如,WAN可以是因特网或万维网,LAN可以是企业内联网。公共网络104和专用网络110可以是有线网络、无线网络或两者的组合。
数据中心120可以是物理或虚拟的中央存储库,用于存储、管理和传播与特定公共或私人实体有关的数据和信息。数据中心120可用于容纳计算机系统和相关组件,如一个或多个物理服务器、虚拟服务器和存储系统。此外,数据中心120还可以包括一个或多个服务器(例如,服务器122)、桌面传送控制器124、虚拟桌面126、应用程序128和后端系统130。
服务器122可以是由IP地址表示的实体,并且可以作为单个实体或服务器群的成员存在。服务器122可以是物理服务器或虚拟服务器。在一些实施例中,服务器122包括硬件层、操作系统、通信子系统和创建或管理一个或多个虚拟机的超管理器(hypervisor)。服务器122可以向终端提供一个或多个服务。这些服务可以包括向一个或多个终端(例如,客户端设备102A-F)提供一个或多个应用程序128。例如,一个或多个应用程序128可以包括基于WindowsTM或SAPTM的应用程序和计算资源。通过通信子系统,服务器122可以通过各种类型的网络(例如,专用网络110和公共网络104)与其他设备(例如,客户端设备102)通信。服务器122可以包括在数据中心120的其他组件中提供的特征,如虚拟桌面126、应用程序128和/或桌面传送控制器124。在一些实施例中,客户端设备通过提供与服务器122一致的功能而充当服务器122。
桌面传送控制器124可以是能够将诸如虚拟桌面126之类的服务传送到客户端设备(例如,客户端设备102A-F)的设备。桌面传送控制器124可以提供管理、维护和优化所有虚拟桌面通信所需的功能。在一些实施例中,桌面传送控制器124可以控制、管理、维护或优化应用程序128的供应。
在一些实施例中,一个或多个虚拟桌面126提供一个或多个应用程序128。虚拟桌面126可以:包括托管的共享桌面,其允许多个用户访问单个共享的远程桌面服务桌面;虚拟桌面基础架构桌面,其允许每个用户拥有他们的自己的虚拟机、流式磁盘映像、本地虚拟机、各个应用程序(例如,一个或多个应用程序128)或其组合。用户可以通过客户端设备102与一个或多个虚拟桌面126交互。在一些实施例中,虚拟桌面126通过提供从虚拟桌面转发到客户端设备的更新的可视显示来响应用户输入。
后端系统130可以是计算机网络硬件、电器或者服务器群中的服务器的单个或多个实例。后端系统130可以直接或间接地与服务器122接口。例如,后端系统130可以包括MicrosoftTM Active Directory,其可以提供许多网络服务,包括轻量级目录访问协议(LDAP)目录服务、基于Kerberos的身份验证、基于域名系统(DNS)的命名和其他网络信息,以及多个服务器之间的目录更新同步。此外,后端系统130还可以包括Oracle后端服务器、SQL Server后端和/或动态主机配置协议(DHCP)服务器。后端系统130可以向数据中心120提供数据、服务或两者的组合,然后数据中心120可以通过变化的形式将该信息提供给客户端设备102或分支机构140。
图2A-2C是与本公开的实施例一致的示例性计算设备200的框图。计算设备200可以是数据中心120中的服务器122,如图1所示。如图2A所示,计算设备200可以包括一个或多个中央处理单元(CPU)221、一个或多个图形处理单元(GPU 225)、系统存储器222和图形存储器226。CPU 221可以是响应并处理从系统存储器222取出的指令的任何逻辑电路。CPU221可以是单个或多个微处理器、现场可编程门阵列(FPGA)或能够执行存储在存储器(例如,系统存储器222)或高速缓存(例如,高速缓存240)中的特定指令集的数字信号处理器(DSP)。CPU 221还可以包含多个处理器寄存器,用于存储可变类型的数据。例如,这些寄存器可以存储数据、指令、浮点值、条件值和/或系统存储器222中的位置的地址。CPU寄存器可以包括专用寄存器,用于存储与运行过程相关联的数据,如指令指针、指令计数器和/或存储器堆栈指针。系统存储器222可以包括有形和/或非暂时性计算机可读介质,如软盘、硬盘、CD-ROM(光盘只读存储器)、MO(磁光)驱动器、DVD-ROM(数字通用盘只读存储器)、DVD-RAM(数字通用盘随机存取存储器)、闪存驱动器和/或闪存、处理器高速缓冲存储器、存储器寄存器或半导体存储器。系统存储器222可以是一个或多个存储器芯片,其能够存储数据并允许CPU 221直接访问任何存储位置。系统存储器222可以是任何类型的随机存取存储器(RAM)或者能够如本文所述进行操作的任何其他可用的存储器芯片。在图2A所示的示例性实施例中,CPU 221可以经由系统接口250与系统存储器222通信。GPU 225可以是能够操纵和改变存储器(例如,图形存储器226)以提供和/或加速存储在帧缓冲器(例如,图2B中所示的帧缓冲器217)中的图像的创建以输出到显示设备(例如,显示设备224)的任何类型的专用电路。GPU 225可以具有高度并行的结构,使得它们比用于可以并行执行大块图形数据的处理的算法的通用CPU 221更有效。此外,GPU 225的功能还可以包括在某些其他类型的专用处理单元或协处理器的芯片组中。
CPU 221可以连接到系统存储器222和系统接口250。CPU 221可以执行存储在系统存储器222中的编程指令,对存储在系统存储器222中的数据进行操作,以及通过桥接CPU221和GPU 225之间的通信的系统接口250与GPU 225通信。在一些实施例中,CPU 221、GPU225、系统接口250或其任何组合可以集成到单个处理单元中。GPU 225能够执行存储在系统存储器222中的特定指令集,以操纵存储在系统存储器222或图形存储器226中的图形数据。例如,GPU 225可以接收由CPU 221发送的指令并处理该指令以便渲染存储在图形存储器226中的图形数据。图形存储器226可以是GPU 225可访问的任何存储器空间,包括本地存储器、系统存储器、片上存储器和硬盘。GPU 225能够显示存储在显示设备224上的图形存储器226中的图形数据。
计算设备200还可以包括显示设备224和通过I/O控制器223连接的输入/输出(I/O)设备230(例如,键盘、鼠标或指示设备),两者都通过系统接口250进行通信。可以理解,CPU 221还可以通过系统接口250以外的方式与系统存储器222和其他设备通信,例如通过串行通信方式或点对点通信方式。类似地,GPU 225还可以以系统接口250之外的方式与图形存储器226和其他设备通信。此外,I/O设备230还可以为计算设备200提供存储和/或安装介质。
图2B示出示例性计算设备200的实施例,其中CPU 221经由存储器端口203直接与系统存储器222通信,并且类似地,GPU 225直接与图形存储器226通信。CPU 221可以经由二级总线,有时也称为后侧总线,与高速缓存240通信。在一些实施例中,CPU 221经由系统接口250与高速缓存240通信。高速缓存240通常具有比系统存储器222更快的响应时间。在一些实施例中,例如图2B中所示的实施例,CPU 221经由I/O端口直接与I/O设备230通信。在进一步的实施例中,I/O设备230可以是系统接口250和外部通信总线之间的桥接器260,外部通信总线例如是USB总线、Apple桌面总线、RS-232串行连接、SCSI总线、FircWirc总线、FircWirc 800总线、以太网总线、ApplcTalk总线、千兆以太网总线、异步传输模式总线、HIPPI总线、超级HIPPI总线、SerialPlus总线、SCI/LAMP总线、FibreChannel总线、ThunderboltTM总线或串行连接的小型计算机系统接口总线。
如图2B所示,GPU 225还可以直接与图形存储器226和显示设备224通信。GPU 225可以通过系统接口250与CPU 221和其他设备通信。图形存储器226还可以包括帧缓冲器217。帧缓冲器217可以是图形输出设备,其从包含完整帧的图形数据的图形存储器226的存储缓冲器驱动显示设备(例如,显示设备224)。帧缓冲器217可以存储要在显示设备224上显示的最终图形帧。
如图2A所示,计算设备200可以支持任何合适的安装设备216,例如用于接收软盘的软盘驱动器,如3.5英寸、5.25英寸的盘或ZIP盘;CD-ROM驱动器;CD-R/RW驱动器;DVD-ROM驱动器;各种格式的磁带机;USB设备;硬盘驱动;闪存驱动;或适用于安装软件和程序的任何其他设备,如任何客户端代理220或其部分。计算设备200还可以包括存储设备228,如一个或多个硬盘驱动或独立磁盘的冗余阵列,用于存储操作系统和其他相关软件,以及用于存储应用软件程序,如与客户端代理220相关的任何程序。可选地,安装设备216中的任何一个也可以用作存储设备228。
此外,计算设备200可以包括网络接口218,以通过各种连接与LAN、WAN、MAN或因特网接口,包括但不限于标准电话线、LAN或WAN链路(例如,802.11、T1、T3、56kb、X.25)、宽带连接(例如,ISDN、帧中继、ATM)、无线连接或上述任何或全部的某种组合。网络接口218可以包括内置网络适配器、网络接口卡、PCMCIA网卡、卡总线网络适配器、无线网络适配器、USB网络适配器、调制解调器或适于将计算设备200与能够通信并执行本文所述操作的任何类型网络进行接口的任何其他设备。
在一些实施例中,操作系统在计算设备200的组件上执行。操作系统可以使用图形驱动器与图形系统(例如,GPU 225、图形存储器226、帧缓冲器217和显示设备224)交互。图形驱动器可以存在于虚拟化和非虚拟化计算环境中。图形驱动器可以指示GPU 225执行操作并将结果存储在帧缓冲器217中,用于在显示设备224上显示。在一些实施例中,代替在显示设备224上显示帧缓冲器217的内容,图形驱动器进一步处理存储在帧缓冲器217中的显示帧并将帧缓冲器217的内容转发到通信地耦合的(例如,通过网络接口218)计算设备(例如,客户端102)。
图2C示出示例性计算设备200的实施例。计算设备200可以包括存储设备228、I/O设备230、CPU 221、系统存储器222、帧缓冲器217、图形存储器226作为硬件层201的一部分(可以如图2A-2B所示构造)。计算设备200可以执行操作系统251。另外,计算设备200可以执行应用程序260A-C。应用程序260A-C可以使用由操作系统251提供的功能来与计算设备200提供的硬件层201交互。
操作系统251可以使用设备驱动器与硬件层201中的组件通信。例如,操作系统251可以使用磁盘驱动器256与存储设备228交互,使用设备驱动器255与各种I/O设备230交互,以及使用图形驱动器253与帧缓冲器217、图形存储器226和图形系统的其他方面(例如,如图2A-2B所示的GPU 225和显示设备224)交互。计算设备200可以包含许多附加设备驱动器以促进与未图示的其他硬件的交互。
另外,操作系统251可以与被设计为执行与增强计算设备200相关的不同任务的组件交互。编码器270可以与操作系统251和帧缓冲器217通信,以进一步处理由操作系统251产生的显示帧。编码器270可以提供特殊功能以优化显示帧到远程计算设备(例如,客户端设备102)的传输。在一些实施例中,编码器270对显示帧进行编码,从而减小存储占用并在尺寸和质量之间提供平衡,以在网络上传输显示帧。
编码器270是一个或多个模块,其可以是封装的功能硬件单元,被设计用于与执行相关功能的特定功能的其他组件(例如,集成电路的部分)或程序的部分(存储在计算机可读介质上)一起使用。编码器270的所述一个或多个模块可以包括瞬态区域检测器271、瞬态区域编码器272和位图处理器275。在一些实施例中,这些组件是通信地耦合到编码器270而不是包含在编码器270内的分开的模块。瞬态区域检测器271可以是一个或多个模块,用于将显示帧与存储在存储器(例如,系统存储器222、高速缓存240或CPU寄存器)中的先前显示帧和数据进行比较,以确定快速变化的屏幕区域。各种特征可以表明区域是瞬态的。瞬态区域检测器271可以将显示帧划分为提供给瞬态区域编码器272的瞬态区域和提供给位图处理器275的非瞬态区域。在一些实施例中,瞬态区域检测器271检测先前识别的瞬态区域何时不再是瞬态的,以使编码器将该区域提供给位图处理器275进行后续编码。
位图处理器275可以是用于处理非瞬态区域的一个或多个模块。为了帮助处理,位图处理器275可以包含位图编码器276和位图高速缓存278。位图处理器275可以获得先前在位图高速缓存278中处理的非瞬态区域。位图处理器275可以将位图高速缓存278中找不到的任何区域提供给位图编码器276用于附加处理。在一些实施例中,位图编码器276和/或位图高速缓存278与位图处理器275和/或编码器270分离并且不同。在对显示帧的所有区域进行编码之后,编码器270可以将帧转发到远程设备(例如,客户端设备102)或将编码的显示帧提供给计算系统200的另一组件。
位图编码器276可以是用于确定针对显示帧的非瞬态区域的不同区的最佳编码方法的一个或多个模块。位图编码器276可以使用多种技术来确定这些编码方法。在一些实施例中,例如,位图编码器276将显示帧的区域分类为具有大的变化或小的变化。在这些实施例中,可以使用有损压缩算法(例如,JPEG或保持压缩JPEG的TIFF容器)来编码具有小变化的区域。另外,可以使用无损编码算法(例如,RLE、每像素图像数据8位的GIF、PNG或保持PackBits的TIFF容器)来编码具有大变化的区域,以便保持质量。
与本公开一致的实施例涉及改进数据的无损编码。编码数据可以包括数百万个像素,每个像素由多个字节表示。因此,即使小的压缩收益也可以大大节省必须传输的数据的量。另外,本文描述的技术和方法可以提供有效的无损编码,而计算资源需求的增加很小或可忽略不计。
图3是与本公开的实施例一致的使用RLE和单像素高速缓存对像素序列进行无损编码的示例性方法的流程图。该示例性方法可以由例如位图编码器276执行。可以容易地理解,可以改变所示过程以修改步骤的顺序,删除步骤或者还包括附加步骤。
在初始步骤300之后,编码器(例如,位图编码器276)可以获得用于无损编码的像素序列(步骤305)。在一些实施例中,该像素序列可包括由位图编码器276识别用于无损编码的显示帧的非瞬态区域。在一些实施例中,显示帧中的每个像素可使用三个字节的数据编码,像素的红色(R)、绿色(G)和蓝色(B)成分每个使用一个字节的数据。编码器可以提供对像素序列的无损编码。例如,编码器可以使用45个字节的数据来处理表示为字符串“ABAAAAAAACCCCDB”的15个像素,这15个像素每个三个字节的数据(其中,为了提供示例的目的,每个字母表示唯一像素,重复的字母表示具有完全相同的三字节值的像素)。
在一些实施例中,编码器可以确定像素序列是否包括完全由重复像素组成的任何子序列(步骤310)。可以使用RLE对完全由重复像素组成的任何子序列进行编码(步骤315)。RLE可以使用游程长度将表示为字符串“ABAAAAAAACCCCDB”的像素序列编码为“ABAY6CY3DB”,其中“Y6”和“Y3”各自表示一个字节的数据,代表前一像素重复出现的次数。因此,与45个字节的原始像素数据相比,在该实施例中,RLE可以通过使用20个字节的数据进行编码来提供无损压缩,用于输出该示例性像素序列(每个三个字节的六个像素和表示游程长度的两个字节的数据“Y6”和“Y3”)。
另外,编码器(例如,位图编码器276)可以使用单像素高速缓存结构对步骤315未处理的任何剩余像素进行编码。单像素高速缓存结构可以为不呈现任何重复像素的游程的序列提供有效编码。例如,如上所述的基本RLE不能为没有任何重复的像素序列提供任何压缩益处,例如表示为字符串“ABCDABACABDE”的序列,并且将使用36个字节的数据(每个三个字节的12个像素)对该示例性序列进行编码。使用单像素高速缓存结构的编码器(例如,位图编码器276)可以计算每个像素的散列值(步骤320)。在一些实施例中,散列算法可以是利用特定值的XOR运算,以产生0到254之间的散列值。一些实施例可以使用其他散列算法来产生散列值。可以基于要求选择不同的散列算法来平衡成本、冲突概率(例如,针对两个不同像素生成相同散列值的情况)和计算资源。计算出的散列值可以用作单像素高速缓存的查找索引(步骤325),如参考图4所述。
图4示出与本公开的实施例一致的示例性单像素高速缓存数据结构401。单像素高速缓存401可以是任何数据存储组件(例如,存储设备228、系统存储器222、高速缓存240和/或CPU寄存器),其允许存储表示单个像素的数据以及对那些存储的像素的参考。单像素高速缓存401可以包括数据结构,该数据结构包括针对单个像素计算的散列值的索引405和代表每个像素的三个字节的数据410。给定任何散列值,单像素高速缓存401可以找到等于该散列值的索引405并检索出表示特定像素的三个字节的数据410。例如,参考图4,给定散列值“129”,单像素高速缓存可以检索出表示像素“C”的三个字节的数据。
返回参考图3,编码器可以比较当前像素与存储在由计算出的散列值索引的单像素高速缓存位置中的像素(步骤330)。对于步骤330中的比较不产生精确匹配的情况,编码器可将像素编码为高速缓存漏掉(步骤340)。例如,对于表示为字符串“ABCDABACABDE”的像素序列,并且假设这些像素都不存在于单像素高速缓存中,则前四个像素“A”、“B”、“C”和“D”可以被编码为高速缓存未命中。编码器可以使用三个字节的数据表示像素数据并且使用一个字节的数据用信号通知高速缓存未命中来编码高速缓存未命中。在一些实施例中,可以保留对应于255的散列值索引的单像素高速缓存存储位置(如图4所示)来指示单像素高速缓存未命中,例如,使用符号“X255”表示对应于散列值255的一个字节的数据,单像素“A”的高速缓存未命中可以使用总共四个字节来编码并表示为“X255A”。可以使用总共16个字节将示例性序列“ABCDABACABDE”的前四个高速缓存未命中的像素“A”、“B”、“C”和“D”编码为X255AX255BX255CX255D。
另外,编码器(例如,位图编码器276)可以用对应于高速缓存未命中的像素数据来更新单像素高速缓存401(步骤345)。例如,对于针对表示为“A”的像素计算出的散列值“2”和针对单个像素“A”在步骤330中检测到的高速缓存未命中,对应于单像素高速缓存401内的散列值索引“2”的存储位置可以用表示“A”的数据更新。
对于步骤330中的比较产生精确匹配的情况,编码器可将像素编码为高速缓存命中(步骤335)。编码器可以通过省略三个字节的原始像素数据并且仅在编码数据输出中包括计算出的散列值来用信号通知高速缓存命中。对于表示为字符串“ABCDABACABDE”的示例性像素序列,其中前四个像素“ABCD”被编码为高速缓存未命中“X255AX255BX255CX255D”,接下来的七个像素“ABACABD”(高速缓存命中)可以仅使用它们的散列值来编码并且表示为字符串“X2X126X2X129X2X126X253”,其中“X2”、“X126”、“X129”和“X253”分别表示像素“A”、“B”、“C”和“D”在单像素高速缓存401内的单字节散列值索引位置。因此,可以仅使用七个字节的数据编码对应于七个像素的21个字节的数据。该示例性方法可以提供改进的压缩性能,因为代替使用一个字节的数据来用信号通知高速缓存命中和使用另外一个字节的数据来指定单像素高速缓存401内的存储位置,可以使用一个字节的散列值数据执行这两个功能。
可以选择在步骤320中用于计算散列值的散列算法以最小化冲突,但是可以类似于高速缓存未命中来处理确实发生的任何冲突。对于表示为字符串“ABCDABACABDE”的示例性像素序列,并且其中最后一个像素(由“E”表示)产生与由“A”表示的较早像素相同的散列值(由“X2”表示),编码器可以将“E”编码为“X255E”(类似于高速缓存未命中的步骤340)。另外,编码器可以将对应于散列值“X2”的单像素高速缓存位置从表示“A”的数据更新为表示“E”的数据(类似于高速缓存未命中的步骤345)。
编码器(例如,位图编码器276)可以针对所有可用像素重复步骤320-345,并组装编码的像素数据以进行传输。因此,表示为字符串“ABCDABACABDE”的12个像素的示例性序列可以在数据输出中被编码为字符串“X255AX255BX255CX255D X2X126X2X129X2X126X253X255E”。与没有单像素高速缓存的RLE的36个字节的数据(每个三个字节的12个像素)相比,这可以通过使用总共27个字节的数据提供有效的压缩(每个四个字节的四个高速缓存未命中,每个一个字节的七个高速缓存命中,以及每个四个字节的一个碰撞)。
图5是与本公开的实施例一致的使用RLE和多像素高速缓存结构对像素序列进行无损编码的示例性方法的流程图。该示例性方法可以例如由位图编码器276执行。参考图5,将容易理解,可以改变所示过程以修改步骤的顺序,删除步骤或进一步包括附加步骤。
在初始步骤500之后,编码器(例如,位图编码器276)可以获得用于无损编码的像素序列(步骤505)。在一些实施例中,像素序列可以包括由位图编码器276识别用于无损编码的显示帧的非瞬态区域。在一些实施例中,编码器可以确定像素序列是否包括完全由重复像素组成的任何子序列(步骤510)。完全由重复像素组成的任何子序列可以使用RLE进行编码(步骤515)(类似于上面参考图3所描述的)。
另外,编码器(例如,位图编码器276)可以使用多像素高速缓存结构对步骤515未处理的任何剩余像素子序列进行编码。散列算法可用于计算每个剩余子序列的散列值(步骤520)。可以针对整个子序列计算单个散列值。在一些实施例中,散列算法可以是利用特定值的XOR运算,以产生0到255之间的散列值。一些实施例可以使用其他散列算法来产生散列值。可以选择散列算法来平衡成本、冲突概率(例如,针对相同长度的两个不同子序列生成的相同散列值)和计算资源。计算出的散列值可以用作多像素高速缓存的查找索引(步骤525),如参考图6所述。
图6示出与本公开的实施例一致的示例性多像素高速缓存数据结构600。多像素高速缓存600可以是任何数据存储组件(例如,存储设备228、系统存储器222、高速缓存240和/或CPU寄存器),其允许存储表示包括单个或多个像素子序列的数据以及对存储数据的参考。多像素高速缓存600可以包括子高速缓存。例如,多像素高速缓存可以包括14个子高速缓存,其中第一子高速缓存605存储表示单像素子序列的数据,第二子高速缓存610存储表示两像素子序列的数据,并且类似的结构扩展到存储表示十四像素子序列的数据的第十四子高速缓存670。
多像素高速缓存600可包括少于14个子高速缓存或多于14个子高速缓存。子高速缓存的数量仅受存储多像素高速缓存600的存储器的物理限制的限制,并且对多像素高速缓存600可以利用的子高速缓存的数量没有理论上的限制。此外,在一些实施例中,随着子序列的像素长度增加,多像素高速缓存命中的概率可以快速降低,因此增加子高速缓存的数量不一定提供性能的线性改进。所使用的子高速缓存的最佳数量可以基于实验数据、分析、统计分析、用户做出的任意选择或者选择子高速缓存的数量的任何其他方法。此外,可以随时更改子高速缓存的数量,以平衡性能和系统要求。
多像素子高速缓存中的每一个可包括数据结构,该数据结构包括散列值(从单像素或多像素子序列计算出的)索引(例如,606、611、671)和表示单像素或多像素子序列的对应数据(例如,607、612、672)。多像素高速缓存内的单像素子高速缓存605可以在结构上等同于关于图4描述的单像素高速缓存结构,包括针对单像素计算出的散列值的索引606并且存储表示单像素的三个字节的数据607。
编码器可以使用像素子序列的长度和计算出的散列值作为多像素高速缓存的索引(步骤525)。例如,对于针对两像素子序列计算出的散列值“126”,图6中例示的多像素高速缓存600可以从二像素子高速缓存610内索引为“126”的位置检索对应于表示为字符串“LG”的两个像素的数据。然而,对于针对十四像素子序列计算出的相同散列值“126”,图6中例示的多像素高速缓存600可以从十四像素子高速缓冲670内索引为“126”的位置检索对应于表示为字符串“LBVCALKFRUTYNF”的14个像素的数据。
返回参考图5,编码器可以比较当前子序列与存储在参考的多像素高速缓存位置中的子序列(步骤530)。对于步骤530中的比较不产生精确匹配的情况,编码器可以使用单像素子高速缓存605对该子序列进行编码(步骤545)。表示为字符串“ABCDEEEEEEEEEEABABE”的示例性像素序列可以分成三个子序列“ABCDE”、“EEEEEEEEE”和“ABCDE”。中间序列“EEEEEEEEE”可以使用RLE编码为前一个像素“E”的九次重复并表示为“Y9”,其中“Y9”表示一个字节的数据,指示前一个像素的九次重复。假设第一子序列“ABCDE”尚未存在于多像素高速缓存600中,则“ABCDE”是多像素高速缓存未命中并且可使用单像素子高速缓存605进行编码(步骤545)。假设这些单像素都不存在于单像素子高速缓存605中,则子序列“ABCDE”可以被编码为五个单像素子高速缓存未命中“X255AX255BX255CX255DX255E”,其中符号“X255”表示用于用信号通知每个单像素子高速缓存未命中的一个字节数据(类似于参考图3所述的单像素高速缓存未命中)。另外,编码器可以用对应于单像素“A”、“B”、“C”、“D”和“E”的数据更新单像素子高速缓存605(类似于参考图3描述的单像素高速缓存更新)并且还用对应于整个子序列“ABCDE”的数据更新五像素子高速缓存(步骤550)。
对于步骤530中的比较产生精确匹配的情况,编码器可以将子序列编码为多像素高速缓存命中(步骤535)。在一些实施例中,可以保留单像素子高速缓存605内的初始位置,用于用信号通知多像素高速缓存命中。例如,在包括14个子高速缓存605-670的多像素高速缓存结构中,可以保留单像素子高速缓存605内的零到十二的初始位置,用于用信号通知特定的多像素子高速缓存命中。索引“0”的位置可以被保留用于二像素子高速缓存命中,索引“1”的位置可以被保留用于三像素子高速缓存命中,并且类似的逻辑扩展到索引“12”的位置被保留用于十四像素子高速缓存命中。因此,对于包含在上面讨论的示例性序列“ABCDEEEEEEEEEEEEABCDE”内的第三子序列“ABCDE”的多像素高速缓存命中,可以仅使用表示为字符串“X3X5n”的两个字节的数据来编码,其中由“X3”表示的一个字节的数据用于参考五像素子高速缓存,由“X5n”表示一个字节的数据用于五像素子高速缓存内的存储位置的散列值索引。因此,表示为字符串“ABCDEEEEEEEEEEABABE”的示例性序列可以被编码以输出为“X255AX255BX255CX255DX255EY9X3X5n”。
另外,在一些实施例中,单像素子高速缓存605可以用包含在多像素子序列内但在单像素子高速缓存605内未命中的任何单像素来更新(步骤540)。这可以保持用最近编码的单像素更新单像素子高速缓存。例如,对于表示为字符串“ABCDE”的子序列的多像素高速缓存命中,如果单像素“A”、“B”、“C”、“D”或“′E”都未存在于单像素子高速缓存中,则可以更新单像素子高速缓存605。
在一些实施例中,编码器(例如,位图编码器276)可以不通过特别地用信号通知多像素高速缓存未命中来保存一个字节的数据。这可以通过保留单像素子高速缓存605内的初始位置用于如上所述的用信号通知多像素高速缓存命中来实现。例如,对于图6中所示并且包括14个子高速缓存605-670的多像素高速缓存600,可以保留单像素子高速缓存605内的零到十二的初始位置用于用信号通知特定的多像素高速缓存命中,并且大于12的值可以指示多像素高速缓存未命中信号。不需要额外的字节用于用信号通知多像素高速缓存未命中。另外,可以修改单像素散列算法以生成13至254(包括两者)之间的值,以排除使用这些位置来缓存单像素。
可以使用类似于多像素高速缓存未命中的情况的单像素子高速缓存来编码长度大于由任何多像素子高速缓存提供的最大值的像素子序列。对于具有14个子高速缓存的多像素高速缓存实施例,可以使用图3中例示的单像素方案来编码长于14个像素的任何子序列。在一些实施例中,长于14个像素子序列还可以分成多个小于最大子序列值的子序列,然后可以使用多像素高速缓存处理每个新的子序列。
与单独使用RLE或关于图3描述的使用RLE和单像素高速缓存的示例性方法相比,使用RLE和多像素高速缓存结构对像素序列进行无损编码的示例性方法可以提供增加的压缩益处。例如,不使用这些压缩方法中任何一个的无损编码器可以使用57个字节的数据(每个3字节数据的19个像素)对表示为字符串“ABCDEEEEEEEEEEABCDE”的像素序列进行编码。单独使用RLE的无损编码器可以使用31个字节的数据(每个三字节数据的10个像素和表示重复像素“′E”的游程长度的一个字节的数据“Y9”)将该示例性序列编码为“ABCDEY9ABCDE”。使用图3中描述的示例性方法(RLE和单像素高速缓存)的无损编码器可以使用26个字节的数据(每个四个字节数据的五个单像素高速缓存未命中、表示重复像素“E”的游程长度的一个字节数据和每个一个字节数据的五个单像素高速缓存命中)将该示例性序列编码为“X25 5AX255BX255CX255DX255EY9X2X126X129X253X201”。使用图5中描述的示例性方法(RLE和多像素高速缓存)的无损编码器可以使用23个字节的数据(初始多像素高速缓存未命中编码为每个四个字节数据的五个单像素高速缓存未命中、表示重复像素“E”的游程长度的一个字节的数据和表示五像素子高速缓存命中的两个字节的数据)将该示例性序列编码为“X255AX255BX25 5CX255DX255EY9X3X5n”。因此,与使用单像素高速缓存或没有高速缓存结构的编码器相比,使用多像素高速缓存的编码器可以提供优越的无损压缩益处。
编码数据可以被转发到远程设备(例如,客户端设备102)或计算系统200的另一个组件。远程设备内或计算系统200内的解码器可以用于解码编码数据流。解码器可以利用如图6所示的多像素高速缓存结构。
图7是与本公开的实施例一致的用于解码编码数据的示例性方法的流程图。参考图7,将容易理解,可以改变所示过程以修改步骤的顺序,删除步骤或进一步包括附加步骤。在初始步骤700之后,解码器可以获得用于解码的编码数据流(步骤705)。例如,解码器可以接收从无损编码器(例如位图编码器276)发送来的编码数据,该无损编码器使用如关于图5所述的示例性方法将表示为字符串“ABCDEEEEEEEEEEABCDE”的像素序列编码为“X255AX255BX255CX255DX255EY9X3X5n”。此外,解码器可以使用其自己的多像素高速缓存。
解码器可以确定数据是否包括重复像素的游程(步骤710)。解码器可以使用编码的游程长度数据解码重复像素的任何游程(步骤715)。对于示例性编码数据“X255AX255BX255CX255DX255EY9X3X5n”,由“Y9”表示的一个字节的数据可以被解码为前一个像素的九次重复出现并表示为“EEEEEEEEE”。
解码器还可以确定剩余数据是否用信号通知任何多像素高速缓存命中或任何多像素高速缓存未命中(步骤720)。对于多像素高速缓存未命中,解码器可使用单像素子高速缓存对数据进行解码(步骤735)。对于每个多像素高速缓存未命中,解码器可以确定是否存在任何单像素子高速缓存命中(步骤740)。对于任何单像素子高速缓存命中,解码器可以使用已经存储在单像素子高速缓存中的数据来解码(步骤745)。对于任何单像素子高速缓存未命中,解码器可以使用数据流内的原始像素数据(步骤750)。对于示例性编码数据“X255AX255BX255CX255DX255EY9X3X5n”,由“X255”表示的一个字节的数据可以被解码为多像素和单像素高速缓存未命中,并且表示为“X255AX255BX255CX255DX255E”的数据串可以被解码并表示为“ABCDE”。
另外,解码器可以用五个单像素高速缓存未命中“A”、“B”、“C”、“D”和“E”来更新其单像素子高速缓存(步骤755)。解码器还可以用表示为“ABCDE”的五个像素串的多像素高速缓存未命中来更新其在多像素高速缓存内的五像素子高速缓存(步骤760)。通过在数据被解码时更新其自己的单像素高速缓存和多像素高速缓存,解码器可以确保当编码器处理正被解码的特定值时其高速缓存数据与存储在编码器中的数据匹配,并且由解码器处理的任何将来的高速缓存命中将返回适当的值。
对于在步骤720中检测到的多像素高速缓存命中,解码器可以使用已经存储在多像素高速缓存中的数据来解码(步骤725)。对于示例性编码数据“X255AX255BX255CX255DX255EY9X3X5n”,由“X3”表示的一个字节的数据可以被解码为五像素子高速缓存的多像素高速缓存命中,并且由“X5n”表示的一个字节的数据可以被解码为表示五个像素子序列的数据的存储位置索引。解码器可以从其多像素高速缓存中检索数据并解码两个字节的编码数据“X3X5n”并将其表示为“ABCDE”。解码器可以重复这些步骤,直到在步骤705获得的所有数据都被解码。从编码器(例如位图编码器276)接收并且表示为“X255AX255BX255CX255DX255EY9X3X5n”的示例性编码数据序列可以被解码并表示为串“ABCDEEEEEEEEEEABCDE。”
在一些实施例中,可以保留解码器内的初始单像素子高速缓存位置用于用信号通知多像素高速缓存命中,以便匹配编码器内的类似预留。另外,在一些实施例中,解码器可以匹配编码器并且将单像素子高速缓存更新为包含在多像素高速缓存命中内的在单像素子高速缓存中未命中的任何像素(步骤730)。
在前面的说明书中,已经参考许多具体细节描述了实施例,这些细节可以根据实现方式而变化。可以对所描述的实施例进行某些改编和修改。考虑到本文公开的本发明的说明书和实践,其他实施方案对于本领域技术人员而言是显而易见的。说明书和示例意图仅被视为示例性的。图中所示的步骤序列也意图仅用于说明目的,并不意图限于于任何特定的步骤序列。这样,本领域技术人员可以理解,可以在实现相同方法时以不同顺序执行这些步骤。
Claims (25)
1.一种存储可由计算设备执行的指令的非暂时性计算机可读存储介质,所述计算设备包括一个或多个处理器以使所述计算设备执行包括以下步骤的方法:
获得像素序列;
确定所述像素序列的非重复子序列和所述像素序列的具有单重复像素的重复子序列;
响应于所述确定,使用所述重复像素的游程长度对所述重复子序列进行编码,并且使用多像素高速缓存对所述非重复子序列进行编码,其中使用多像素高速缓存的编码包括将存储在所述多像素高速缓存中的非重复子序列编码为所述多像素高速缓存中的所述非重复子序列的位置。
2.根据权利要求1所述的非暂时性计算机可读存储介质,其中所述多像素高速缓存包括多个子高速缓存,其中每个子高速缓存被配置为存储表示由不同数量的像素组成的子序列的数据。
3.根据权利要求2所述的非暂时性计算机可读存储介质,其中单像素高速缓存是所述多像素高速缓存中的所述多个子高速缓存之一。
4.根据权利要求3所述的非暂时性计算机可读存储介质,其中编码未存储在所述多像素高速缓存中的非重复子序列还包括使用所述单像素高速缓存对所述非重复子序列的每个像素进行编码。
5.根据权利要求3所述的非暂时性计算机可读存储介质,其中所述多像素高速缓存包括十四个子高速缓存,所述十四个子高速缓存被配置为存储表示由一个和十四个像素之间的长度组成的子序列的数据。
6.根据权利要求3所述的非暂时性计算机可读存储介质,其中所述单像素高速缓存中的位置被保留用于对在所述多像素高速缓存中的特定子高速缓存中存储像素子序列进行编码。
7.根据权利要求3所述的非暂时性计算机可读存储介质,其中可由所述计算设备执行的所述指令将进一步使所述计算设备执行:
将未存储在所述多像素高速缓存中的所述非重复子序列添加到所述多像素高速缓存中,并且将未存储在所述多像素高速缓存中的所述非重复子序列的每个像素添加到所述多像素高速缓存的所述单像素高速缓存。
8.根据权利要求1所述的非暂时性计算机可读存储介质,其中使用针对所述子序列计算出的散列值来参考所述多像素高速缓存内的像素子序列的值的存储位置。
9.根据权利要求1所述的非暂时性计算机可读存储介质,其中使用表示具有特定值的每个像素的数据的XOR运算来计算包括一个或多个像素的子序列的散列值。
10.根据权利要求1所述的非暂时性计算机可读存储介质,其中可由所述计算设备执行的所述指令将进一步使所述计算设备使用所述非重复子序列中的像素的值来执行对未存储在所述多像素高速缓存中的非重复子序列的编码。
11.一种用于编码像素序列的第一计算设备,包括:
存储多像素高速缓存的至少一个数据存储器,所述多像素高速缓存包括一个或多个子高速缓存,所述子高速缓存被配置为存储不同长度的像素序列,其中子高速缓存包括所述序列的索引和像素值;和
编码器,其被配置为:
获得像素序列;
确定所述像素序列的非重复子序列和所述像素序列的具有单重复像素的重复子序列;
响应于所述确定:
使用所述重复像素的游程长度编码所述重复子序列;
基于所述非重复子序列确定所述非重复子序列的索引;
使用所述索引,确定所述非重复子序列是否存储在所述多像素高速缓存中;和
将存储在所述多像素高速缓存中的非重复子序列编码为所述多像素高速缓存中的所述非重复子序列的位置。
12.根据权利要求11所述的第一计算设备,其中单像素高速缓存是所述多像素高速缓存中的所述子高速缓存之一。
13.根据权利要求12所述的第一计算设备,其中所述编码器使用所述单像素高速缓存对未存储在所述多像素高速缓存中的非重复子序列的每个像素进行编码。
14.根据权利要求12所述的第一计算设备,其中所述单像素高速缓存中的位置被保留用于对在所述多像素高速缓存中的特定子高速缓存中存储像素子序列进行编码。
15.根据权利要求12所述的第一计算设备,其中所述编码器被进一步配置为:
将未存储在所述多像素高速缓存中的所述非重复子序列添加到所述多像素高速缓存,并且将未存储在所述多像素高速缓存中的所述非重复子序列的每个像素添加到所述多像素高速缓存的所述单像素高速缓存。
16.根据权利要求11所述的第一计算设备,其中所述多像素高速缓存内的像素子序列的索引值是针对所述子序列计算出的散列值。
17.根据权利要求11所述的第一计算设备,其中所述编码器被进一步配置为使用所述非重复子序列中的所述像素的所述值来编码未存储在所述多像素高速缓存中的非重复子序列。
18.一种由一个或多个处理器执行的方法,包括:
获得像素序列;
确定所述像素序列的非重复子序列和所述像素序列的具有单重复像素的重复子序列;
响应于所述确定,使用所述重复像素的游程长度对所述重复子序列进行编码,并且使用多像素高速缓存对所述非重复子序列进行编码,其中使用多像素高速缓存的所述编码包括将存储在所述多像素高速缓存中的非重复子序列编码为所述多像素高速缓存中的所述非重复子序列的位置。
19.根据权利要求18所述的方法,其中所述多像素高速缓存包括多个子高速缓存,其中每个子高速缓存被配置为存储表示由不同数量的像素组成的子序列的数据。
20.根据权利要求19所述的方法,其中单像素高速缓存是所述多像素高速缓存中的所述多个子高速缓存之一。
21.根据权利要求20所述的方法,其中编码未存储在所述多像素高速缓存中的非重复子序列还包括使用所述单像素高速缓存对所述非重复子序列的每个像素进行编码。
22.根据权利要求20所述的方法,其中所述单像素高速缓存中的位置被保留用于对在所述多像素高速缓存中的特定子高速缓存中存储像素子序列进行编码。
23.根据权利要求20所述的方法,还包括:
将未存储在所述多像素高速缓存中的所述非重复子序列添加到所述多像素高速缓存,并且将未存储在所述多像素高速缓存中的所述非重复子序列的每个像素添加到所述多像素高速缓存的所述单像素高速缓存。
24.根据权利要求18所述的方法,其中使用针对所述子序列计算出的散列值来参考所述多像素高速缓存内的像素子序列的值的存储位置。
25.根据权利要求18所述的方法,还包括使用所述非重复子序列中的像素的值来编码未存储在所述多像素高速缓存中的非重复子序列。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/353,534 | 2016-11-16 | ||
US15/353,534 US10523956B2 (en) | 2016-11-16 | 2016-11-16 | Multi-pixel caching scheme for lossless encoding |
PCT/US2017/061988 WO2018094030A1 (en) | 2016-11-16 | 2017-11-16 | Multi-pixel caching scheme for lossless encoding |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109691108A true CN109691108A (zh) | 2019-04-26 |
Family
ID=60702981
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201780055489.4A Pending CN109691108A (zh) | 2016-11-16 | 2017-11-16 | 用于无损编码的多像素高速缓存方案 |
Country Status (8)
Country | Link |
---|---|
US (3) | US10523956B2 (zh) |
EP (1) | EP3542531A1 (zh) |
JP (1) | JP6861801B2 (zh) |
KR (1) | KR102341527B1 (zh) |
CN (1) | CN109691108A (zh) |
AU (1) | AU2017363055B2 (zh) |
CA (1) | CA3034300A1 (zh) |
WO (1) | WO2018094030A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11653009B2 (en) | 2016-11-16 | 2023-05-16 | Citrix Systems, Inc. | Multi-pixel caching scheme for lossless encoding |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112532988B (zh) * | 2020-06-02 | 2022-05-06 | 腾讯科技(深圳)有限公司 | 视频编码方法、视频解码方法及相关设备 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5964842A (en) * | 1997-01-31 | 1999-10-12 | Network Computing Devices, Inc. | Method and apparatus for scaling data compression based on system capacity |
CN1866293A (zh) * | 2005-07-07 | 2006-11-22 | 威盛电子股份有限公司 | 与数据相关的槽位选择机制的纹理快取储存器控制 |
US20070030178A1 (en) * | 2005-08-05 | 2007-02-08 | Microsoft Corporation | Image compression and decompression |
US20100293248A1 (en) * | 2009-05-12 | 2010-11-18 | Yaniv Kamay | Data compression of images using a shared dictionary |
CN103124350A (zh) * | 2012-12-24 | 2013-05-29 | 东软集团股份有限公司 | 基于rle的图像压缩方法及装置 |
CN103139567A (zh) * | 2013-01-28 | 2013-06-05 | 东软集团股份有限公司 | 一种图像压缩和解压缩的方法和装置 |
CN104023235A (zh) * | 2013-02-28 | 2014-09-03 | 美国博通公司 | 图像编码中的索引颜色历史 |
CN104049486A (zh) * | 2013-03-15 | 2014-09-17 | 京瓷办公信息系统株式会社 | 用于从光栅数据确定对象类型的方法和系统 |
Family Cites Families (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4988998A (en) | 1989-09-05 | 1991-01-29 | Storage Technology Corporation | Data compression system for successively applying at least two data compression methods to an input data stream |
JPH07336696A (ja) * | 1994-06-08 | 1995-12-22 | Nippon Steel Corp | 2次元画像データの圧縮方式および伸長方式 |
JPH0936747A (ja) | 1995-07-18 | 1997-02-07 | Toshiba Corp | データ圧縮方法及びデータ圧縮装置 |
US8068546B2 (en) | 2002-08-29 | 2011-11-29 | Riip, Inc. | Method and apparatus for transmitting video signals |
US7606314B2 (en) | 2002-08-29 | 2009-10-20 | Raritan America, Inc. | Method and apparatus for caching, compressing and transmitting video signals |
US7634146B2 (en) * | 2003-10-20 | 2009-12-15 | Logitech Europe S.A. | Methods and apparatus for encoding and decoding video data |
US7006700B2 (en) | 2004-06-25 | 2006-02-28 | Avocent Corporation | Digital video compression command priority |
CA2750735C (en) | 2009-02-02 | 2018-09-18 | Calgary Scientific Inc. | Image data transmission |
US8458144B2 (en) | 2009-10-22 | 2013-06-04 | Oracle America, Inc. | Data deduplication method using file system constructs |
US8965140B1 (en) | 2011-01-31 | 2015-02-24 | Teradici Corporation | Method and apparatus for encoding mixed content image sequences |
US8606029B1 (en) | 2011-08-12 | 2013-12-10 | Google Inc. | Hybridized image encoding based on region volatility |
US9672584B2 (en) * | 2012-09-06 | 2017-06-06 | Imagination Technologies Limited | Systems and methods of partial frame buffer updating |
US20140149684A1 (en) * | 2012-11-29 | 2014-05-29 | Samsung Electronics Co., Ltd. | Apparatus and method of controlling cache |
CN105684409B (zh) | 2013-10-25 | 2019-08-13 | 微软技术许可有限责任公司 | 在视频和图像编码和解码中使用散列值来表示各块 |
KR102210946B1 (ko) | 2014-03-04 | 2021-02-01 | 마이크로소프트 테크놀로지 라이센싱, 엘엘씨 | 스크린 컨텐츠의 딕셔너리 인코딩 및 디코딩 |
US11223832B2 (en) | 2014-07-24 | 2022-01-11 | Qualcomm Incorporated | Methods and apparatus for encoding video data using block palettes and sub-block and pixel scanning orders |
US20170245889A1 (en) | 2014-09-26 | 2017-08-31 | Vanderbilt University | Movement dampening system for a surgical tool |
US9754385B2 (en) | 2015-03-26 | 2017-09-05 | Citrix Systems, Inc. | Efficient encoding of composited display frames |
KR102343375B1 (ko) * | 2015-04-30 | 2021-12-27 | 삼성디스플레이 주식회사 | 표시장치 |
US9632736B1 (en) * | 2015-10-14 | 2017-04-25 | Kyocera Document Solutions Inc. | Image conversion methods |
US10523956B2 (en) | 2016-11-16 | 2019-12-31 | Citrix Systems, Inc. | Multi-pixel caching scheme for lossless encoding |
-
2016
- 2016-11-16 US US15/353,534 patent/US10523956B2/en active Active
-
2017
- 2017-11-16 JP JP2019513308A patent/JP6861801B2/ja active Active
- 2017-11-16 WO PCT/US2017/061988 patent/WO2018094030A1/en unknown
- 2017-11-16 AU AU2017363055A patent/AU2017363055B2/en not_active Ceased
- 2017-11-16 CA CA3034300A patent/CA3034300A1/en active Pending
- 2017-11-16 EP EP17817350.6A patent/EP3542531A1/en not_active Withdrawn
- 2017-11-16 CN CN201780055489.4A patent/CN109691108A/zh active Pending
- 2017-11-16 KR KR1020197006839A patent/KR102341527B1/ko active IP Right Grant
-
2019
- 2019-11-18 US US16/687,014 patent/US11190787B2/en active Active
-
2021
- 2021-10-25 US US17/509,844 patent/US11653009B2/en active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5964842A (en) * | 1997-01-31 | 1999-10-12 | Network Computing Devices, Inc. | Method and apparatus for scaling data compression based on system capacity |
CN1866293A (zh) * | 2005-07-07 | 2006-11-22 | 威盛电子股份有限公司 | 与数据相关的槽位选择机制的纹理快取储存器控制 |
US20070008330A1 (en) * | 2005-07-07 | 2007-01-11 | Via Technologies, Inc. | Texture cache control using a data dependent slot selection scheme |
US20070030178A1 (en) * | 2005-08-05 | 2007-02-08 | Microsoft Corporation | Image compression and decompression |
US20100293248A1 (en) * | 2009-05-12 | 2010-11-18 | Yaniv Kamay | Data compression of images using a shared dictionary |
CN103124350A (zh) * | 2012-12-24 | 2013-05-29 | 东软集团股份有限公司 | 基于rle的图像压缩方法及装置 |
CN103139567A (zh) * | 2013-01-28 | 2013-06-05 | 东软集团股份有限公司 | 一种图像压缩和解压缩的方法和装置 |
CN104023235A (zh) * | 2013-02-28 | 2014-09-03 | 美国博通公司 | 图像编码中的索引颜色历史 |
CN104049486A (zh) * | 2013-03-15 | 2014-09-17 | 京瓷办公信息系统株式会社 | 用于从光栅数据确定对象类型的方法和系统 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11653009B2 (en) | 2016-11-16 | 2023-05-16 | Citrix Systems, Inc. | Multi-pixel caching scheme for lossless encoding |
Also Published As
Publication number | Publication date |
---|---|
AU2017363055A1 (en) | 2019-03-14 |
US20180139459A1 (en) | 2018-05-17 |
KR20190085910A (ko) | 2019-07-19 |
US11653009B2 (en) | 2023-05-16 |
EP3542531A1 (en) | 2019-09-25 |
AU2017363055B2 (en) | 2021-12-16 |
US10523956B2 (en) | 2019-12-31 |
KR102341527B1 (ko) | 2021-12-20 |
US11190787B2 (en) | 2021-11-30 |
US20200084462A1 (en) | 2020-03-12 |
JP6861801B2 (ja) | 2021-04-21 |
CA3034300A1 (en) | 2018-05-24 |
US20220116634A1 (en) | 2022-04-14 |
JP2020503705A (ja) | 2020-01-30 |
WO2018094030A1 (en) | 2018-05-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102381944B1 (ko) | 주파수 압축과 텍스처 파이프라인 | |
US10511324B1 (en) | Data processing unit having hardware-based range encoding and decoding | |
US11258796B2 (en) | Data processing unit with key value store | |
US10649610B2 (en) | Detecting content types and window regions in composited desktop frame buffer | |
US8171064B2 (en) | Methods and systems for concurrently reading direct and indirect data blocks | |
US20200341670A1 (en) | Method, device, and computer readable medium for data deduplication | |
RU2542935C2 (ru) | Ускорение хэширования растрового представления rdp с использованием инструкций simd | |
US9754385B2 (en) | Efficient encoding of composited display frames | |
US11720251B2 (en) | Generating compressed representations of sorted arrays of identifiers | |
US10827192B2 (en) | Work allocation for JPEG accelerator | |
US9471582B2 (en) | Optimized pre-fetch ordering using de-duplication information to enhance network performance | |
US20200145683A1 (en) | Jpeg accelerator using last-non-zero (lnz) syntax element | |
US20190129640A1 (en) | System and method for data storage, transfer, synchronization, and security | |
JP2019514111A (ja) | ビデオマッチングシステムのサービス品質向上のための画像マッチングシステムの使用 | |
US11653009B2 (en) | Multi-pixel caching scheme for lossless encoding | |
CN107688437A (zh) | 固态存储器容量管理系统和方法 | |
US11106374B2 (en) | Managing inline data de-duplication in storage systems | |
WO2021194519A1 (en) | Method and system for reducing output of reservoir simulation data | |
US9959050B2 (en) | In-memory data storage with transparent compression | |
WO2016126256A1 (en) | Detecting content types and window regions in composited display frames | |
US20240211133A1 (en) | Medical imaging data compression utilizing codebooks | |
US11573896B2 (en) | DRAM caching storage class memory | |
Khasymski | Accelerated storage systems | |
Kesavaraja et al. | Scalable Video Transcoding with Hadoop MapReduce in Openstack Juno Platform |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WD01 | Invention patent application deemed withdrawn after publication | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20190426 |