US20100293248A1 - Data compression of images using a shared dictionary - Google Patents
Data compression of images using a shared dictionary Download PDFInfo
- Publication number
- US20100293248A1 US20100293248A1 US12/464,820 US46482009A US2010293248A1 US 20100293248 A1 US20100293248 A1 US 20100293248A1 US 46482009 A US46482009 A US 46482009A US 2010293248 A1 US2010293248 A1 US 2010293248A1
- Authority
- US
- United States
- Prior art keywords
- image
- pixels
- images
- segment
- stream
- 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.)
- Granted
Links
- 238000013144 data compression Methods 0.000 title abstract description 6
- 238000000034 method Methods 0.000 claims abstract description 36
- 230000015654 memory Effects 0.000 claims description 11
- 230000006837 decompression Effects 0.000 claims description 8
- 238000010586 diagram Methods 0.000 description 13
- 238000007906 compression Methods 0.000 description 5
- 238000009877 rendering Methods 0.000 description 5
- 239000003795 chemical substances by application Substances 0.000 description 4
- 238000004891 communication Methods 0.000 description 4
- 230000006835 compression Effects 0.000 description 4
- 230000008901 benefit Effects 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 3
- 230000008569 process Effects 0.000 description 3
- 235000013599 spices Nutrition 0.000 description 3
- 230000009471 action Effects 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 2
- 238000004590 computer program Methods 0.000 description 2
- 238000013500 data storage Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 239000003973 paint Substances 0.000 description 2
- 230000004044 response Effects 0.000 description 2
- 238000004088 simulation Methods 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 108091081062 Repeated sequence (DNA) Proteins 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000007274 generation of a signal involved in cell-cell signaling Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000000644 propagated effect Effects 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 230000003252 repetitive effect Effects 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 239000000126 substance Substances 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
Images
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/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/17—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 an image region, e.g. an object
- H04N19/172—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 an image region, e.g. an object the region being a picture, frame or field
-
- 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/17—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 an image region, e.g. an object
- H04N19/176—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 an image region, e.g. an object the region being a block, e.g. a macroblock
-
- 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/46—Embedding additional information in the video signal during the compression process
-
- 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
-
- 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
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N21/00—Selective content distribution, e.g. interactive television or video on demand [VOD]
- H04N21/20—Servers specifically adapted for the distribution of content, e.g. VOD servers; Operations thereof
- H04N21/23—Processing of content or additional data; Elementary server operations; Server middleware
- H04N21/231—Content storage operation, e.g. caching movies for short term storage, replicating data over plural servers, prioritizing data for deletion
- H04N21/23109—Content storage operation, e.g. caching movies for short term storage, replicating data over plural servers, prioritizing data for deletion by placing content in organized collections, e.g. EPG data repository
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N21/00—Selective content distribution, e.g. interactive television or video on demand [VOD]
- H04N21/60—Network structure or processes for video distribution between server and client or between remote clients; Control signalling between clients, server and network components; Transmission of management data between server and client, e.g. sending from server to client commands for recording incoming content stream; Communication details between server and client
- H04N21/63—Control signaling related to video distribution between client, server and network components; Network processes for video distribution between server and clients or between remote clients, e.g. transmitting basic layer and enhancement layers over different transmission paths, setting up a peer-to-peer communication via Internet between remote STB's; Communication protocols; Addressing
- H04N21/643—Communication protocols
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N21/00—Selective content distribution, e.g. interactive television or video on demand [VOD]
- H04N21/80—Generation or processing of content or additional data by content creator independently of the distribution process; Content per se
- H04N21/83—Generation or processing of protective or descriptive data associated with content; Content structuring
- H04N21/845—Structuring of content, e.g. decomposing content into time segments
- H04N21/8456—Structuring of content, e.g. decomposing content into time segments by decomposing the content in the time domain, e.g. in time segments
Definitions
- the present invention relates generally to graphics remoting. More particularly, this invention relates to data compression of images using a shared dictionary.
- Graphics remoting systems allow computing device network clients to connect to a remote server and receive a visual representation of at least some of the graphics being displayed at or output by the server. Often the network client can display all the graphical output associated with the session. Likewise, the client may be allowed to interact with the session, injecting user input, generated from devices such as a mouse or keyboard connected to the client, into the server session.
- a terminal server is a computer system that maintains applications that can be remotely executed by client computer systems.
- Input is entered at a client computer system and transferred over a network (e.g., using protocols based on the ITU T.120 family of protocols, such as, for example, Remote Desktop Protocol (“RDP”)) to an application at the terminal server.
- RDP Remote Desktop Protocol
- the application processes the input as if the input was entered at the terminal server.
- the application generates output in response to the received input and the output is transferred over the network (e.g., also T.120 based protocols) to the client computer system.
- the client computer system presents the output data.
- input is received and output is presented at the client computer system, while processing actually occurs at the terminal server.
- input data typically includes mouse and keyboard data representing commands to an application
- output data typically includes video data for display at a display device.
- Desktop virtualization is a server-centric computing model that borrows from the traditional thin-client model but is designed to give system administrators and end-users the best of the ability to host and centrally manage desktop virtual machines in the data center while giving end users a full PC desktop experience.
- Desktop virtualization provides many of the advantages of a terminal server, while providing users with much more flexibility. Each user, for example, might be allowed to install and configure his/her own applications. Users also gain the ability to access their server-based virtual desktop from other locations.
- FIG. 1 is a block diagram illustrating an example of a network configuration according to one embodiment of the invention.
- FIG. 2 illustrates an exemplary queue of images generated by a server application, in accordance with one embodiment of the invention.
- FIG. 3 is a block diagram illustrating a remote display system according to one embodiment of the invention.
- FIG. 4 is a flow diagram illustrating an example of a method for compressing images using a shared dictionary, in accordance with one embodiment of the invention.
- FIG. 5 is a block diagram illustrating an image decompression system according to one embodiment of the invention.
- FIG. 6 is a flow diagram illustrating an example of a method for decompressing images using a set of images, in accordance with one embodiment of the invention.
- FIG. 7 is a block diagram illustrating an example of a data processing system which may be used with an embodiment of the invention.
- graphics data associated with at least a portion of an image generated by an application is first compressed and then transmitted to a client.
- a stream of images transmitted to the client contains very similar images (e.g., a clock image transmitted every minute).
- Embodiments of the present invention provide an improved compression mechanism that employs similarities between images being transmitted to the client.
- a dictionary shared by multiple images a sequence of pixels in an image can be encoded by a reference to the same sequence in another image that was previously transmitted to the client.
- the client maintains all the images that constructed the dictionary at the time a specific image was encoded in the server, and can easily decode the specific image using previously transmitted images.
- FIG. 1 is a block diagram illustrating an example of a network configuration according to one embodiment of the invention.
- network configuration 100 includes, but is not limited to, one or more clients 101 - 102 communicatively coupled to a remote server or a cluster of servers 104 over a network 103 .
- Network 103 may be a local area network (LAN) or a wide area network (WAN) and may be a combination of one or more networks.
- Clients 101 - 102 can be any computer system in communication with server 104 for remote execution of applications at server 104 .
- system 100 may be implemented as part of a graphics remoting system.
- a client such as client 101 can be a computer system in communication with server 104 for remote execution of applications at server 104 .
- input data e.g., mouse and keyboard input
- server 104 e.g., client side data
- an application e.g., application 106
- output display commands e.g., graphics commands referred to herein as graphics data
- the output display commands can then be transmitted (e.g., as graphics update commands) with compression back to the remote client and a remote display driver (e.g., rendering agent 112 ) of the remote client can collect the graphics commands and generate corresponding drawing commands for rendering at a display device of the client.
- a remote display driver e.g., rendering agent 112
- server 104 is configured to host one or more virtual machines 109 , each having one or more desktop applications 106 (e.g., desktop operating system).
- Desktop application 106 may be executed and hosted by an operating environment (e.g., an operating system, not shown) within virtual machine 109 .
- an operating system in virtual machine 109 is also referred to as a guest operating system.
- Multiple guest operating systems and the associated virtual machines may be controlled by another operating system (also referred to as a host OS).
- a host OS represents a virtual machine monitor (VMM) (also referred to as a hypervisor) for managing the hosted virtual machines.
- VMM virtual machine monitor
- a guest OS may be of the same or different type with respect to the host OS.
- a guest OS may be a Windows operating system from Microsoft and a host OS may be a Linux operating system available from Red Hat.
- the guest OSes running on the host 104 can be of the same or different types.
- Virtual machine 109 can be any type of virtual machines, such as, for example, hardware emulation, full virtualization, para-virtualization, and operating system-level virtualization virtual machines. Different virtual machines hosted by server 104 may have the same or different privilege levels for accessing different resources.
- server 104 also referred to as a virtual desktop server (VDS) hosts multiple virtual machines (e.g., virtual machine 109 ), each hosting or maintaining a desktop environment remotely accessed by a client such as clients 101 - 102 , in this example, virtual desktop 106 .
- virtual desktop 106 represents an output (e.g., a snapshot of an image to be displayed) generated by a desktop application running within virtual machine 109 .
- Graphics data associated with virtual desktop 106 is then captured and streamed to a client such as clients 101 - 102 , where the virtual desktop 106 may be rendered by a rendering agent (e.g., agent 112 ) and presented by a client application (e.g., application 110 ) respectively.
- a rendering agent e.g., agent 112
- client application e.g., application 110
- the server 104 hosts a remote display system 107 for each virtual machine 109 that is responsible for transferring graphics data associated with desktop 106 to clients 101 - 102 .
- remote display system 107 compresses an image of desktop 106 using a shared dictionary.
- the shared dictionary employs similarities between images being transmitted to the client and allows a sequence of pixels in an image to be encoded by a reference to the same sequence in another image that was previously transmitted to the client.
- the compressed image is then transmitted to client 101 over network 103 using a variety of communications protocols, such as, for example, RDP protocol or a proprietary protocol such as SPICETM protocol from Red Hat Israel.
- the client 101 includes an image decompression system 111 that receives the compressed data and decodes it using previously transmitted images stored at the client 101 .
- the image decompression system 11 decodes a specific image
- the images stored at the client 101 are synchronized with images covered in a dictionary that was used by the remote display system 107 when encoding the specific image.
- the rendering agent 112 uses the decompressed data to render the desktop image for presentation by client application 110 .
- Client application 110 may be a thin client application such as a browser application, and image data transmitted from the server 104 to the client 101 may include graphics commands (e.g., paint and/or draw commands) as well as other information (e.g., location and/or shape, etc.) such that the client 101 can execute or render the graphics commands to construct an associated virtual desktop image.
- graphics commands e.g., paint and/or draw commands
- other information e.g., location and/or shape, etc.
- System 100 may be implemented within a data center of an enterprise entity. It allows enterprises the benefit of centralized desktops without the need to change their applications or infrastructure. Enterprises benefit from an improvement in the manageability, security and policy enforcement for their desktop environment, and consequently, realize a significant reduction in the desktop TCO (total cost of ownership).
- server 104 is configured to run the virtualization platform/hypervisor and the virtual desktops.
- SPICE communication protocol is utilized to communicate between a client and a server.
- SPICE is a remote rendering technology developed specifically for virtual desktops that allow users to “see” their desktops and interact with them.
- a user's desktop runs inside a kernel-based virtual machine (KVM) on the server 104 in the enterprise data center.
- KVM kernel-based virtual machine
- the user accesses his/her desktop from a thin client (e.g., client application 110 ) using SPICE protocol.
- System 100 may be implemented as part of Solid ICETM (independent computing environment) virtualization solution available from Red hat Israel. Note that an application related to a virtual desktop is utilized herein as an example throughout this application for illustration purposes only. However, techniques described herein can also be applied to any kinds of graphics remoting applications.
- FIG. 2 illustrates an exemplary stream 200 of images generated by a server application, in accordance with one embodiment of the invention.
- the stream 200 includes images 204 and 206 that were previously transmitted to a client, and a current image 202 that is being presently compressed.
- the current image 202 includes pixel segments 208 , 210 , 212 and 214 that have matching segments in the images 204 and 206 respectively.
- the length of matching segments can vary depending on the overall similarity between the images.
- the images 202 through 206 share a dictionary that includes data identifying each image (e.g., image ID), locations of individual segments of pixels within each image, and a signature of each segment (e.g., a hash value of the segment).
- image window data identifying each image
- locations of individual segments of pixels within each image e.g., locations of individual segments of pixels within each image
- signature of each segment e.g., a hash value of the segment.
- image window the size of the resulting collection of images
- the dictionary is then updated to delete the data associated with the removed images.
- pixels in the current image 202 are compared with pixels in the previously transmitted images using the dictionary. If a segment of pixels in the current image has a match in a previously transmitted image, the segment of pixels in the current image is encoded by a reference to the match in the previously transmitted image.
- the compression process of the current image is completed, the compressed image is transmitted to a client.
- the client When the client receives the compressed image, the client decodes it using the stored images previously transmitted to the client.
- the images stored at the client include all the images that were covered in the dictionary at the time the above image was encoded. This synchronization is achieved by maintaining the same image window threshold for the images covered in the dictionary and the images stored at the client.
- FIG. 3 is a block diagram illustrating an exemplary remote display system 300 according to one embodiment of the invention.
- the remote display system 300 may include a window adjuster 302 , a hash unit 303 , a search engine 304 , an output creator 306 and a dictionary 305 .
- the window adjuster 302 adds a current image 301 to the image window that includes images covered in the dictionary and previously transmitted to the client. If the size of the resulting image window exceeds a predefined threshold, one or more of the least recent images in the image window are removed to bring the size of the image window below the predefined threshold.
- the dictionary 305 includes entries for images in the image window. An entry may include an entry ID 308 , an image ID 309 , and a location 310 of a segment of pixels within the image.
- the remote display system 300 uses hashing to facilitate efficient search of the dictionary 305 .
- the hash unit 303 starts with the first segment of pixels of the current image, creates a hash value for this segment of pixels, and adds an entry for this segment of pixels to the dictionary 305 .
- the segment may include one or more pixels.
- the entry may specify the entry ID for the segment, the ID of the current image, and the location of the segment within the current image.
- the entry ID is the hash value of the segment.
- the entry may also include the length of the segment.
- the search engine 304 access the dictionary entry that matches the hash value generated for the segment of pixels that starts at the current location in the image.
- the search engine 304 retrieves, from the matching entry, a corresponding image ID (image X) and location information (location L). Starting from location L in image X, and the current segment, it looks for the longest match between them. If a match is not found, the search engine 304 provides the coding of the first pixel in the current segment to the output creator 306 and invokes the hash unit 303 to proceed to the next pixel.
- the search engine 304 encodes this match using the reference to image X, the reference to location L in image X, and the length of the longest match. In addition, in both cases, the search engine 304 updates the segment's entry in the dictionary 305 with the metadata of the current segment. Further, the search engine 304 invokes the hash unit 303 to continue with the segment of the current image that follows the pixels that were last encoded. The above iterations are repeated until the entire image 301 is processed.
- the search engine 304 when performing a search for the current segment, ignores entries referring to old images that have been deleted from the image window by the image adjuster 302 . In particular, when the search engine 304 access an entry that is referring to a deleted image, the search engine 304 determines that the image no longer exists, and ignores this entry.
- the output creator 306 uses encoded data provided by the search engine 304 to create compressed image 307 that is transmitted to the client.
- embodiments of the present invention compress RGB images.
- an alignment of pixels is used according to the image representation (e.g., in RGB 16 the hashing is performed on 2 bytes aligned sequence and the last bit in each pixel is ignored since only 15 bits are used to encode a pixel).
- the alpha channel is compressed separately from the RGB channel because each channel has distinguishable repetitive characteristics and compressing them separately is more likely to result in finding repeated sequences.
- embodiments of the present invention use an image window that is not limited to the image being currently compressed, but rather contains images that were previously compressed and transmitted to the client. Accordingly, similarities among a stream of images that are very common in remote displays are utilized, significantly reducing the network traffic between the server and the client.
- FIG. 4 is a flow diagram illustrating one embodiment of a method 400 for compressing images using a common dictionary.
- the method 400 may be performed by processing logic that may comprise hardware (e.g., circuitry, dedicated logic, programmable logic, microcode, etc.), software (e.g., instructions run on a processing device to perform hardware simulation), or a combination thereof.
- the method 400 is performed by the remote display system 107 of FIG. 1 .
- method 400 begins with adding a current image generated by a server application to an image window (block 402 ) and determining whether the size of the resulting image window exceeds a predefined threshold (block 404 ). If not, processing logic proceeds to block 408 . If so, processing logic removes the least recent image(s) in the image window until the size of the image window no longer exceeds the threshold (block 406 ) and proceeds to block 408 .
- processing logic identifies the first segment of pixels in the current image.
- processing logic may create a signature of the segment (e.g., a hash value), pre-process the segment in some other way or use the actual data of the segment.
- processing logic searches the shared dictionary for an entry corresponding to the present segment of pixels.
- the search may be performed using hashes, suffix tree, actual data, etc.
- processing logic If processing logic does not find an entry corresponding to the present segment of pixels (block 412 ), processing logic updates the entry for the present segment of pixels in the shared dictionary (block 428 ), outputs the coding of the first pixel in the present segment, and proceeds to block 430 . Otherwise, if processing logic finds an entry corresponding to the present segment of pixels, processing logic obtains metadata information from this entry (a reference to a previously transmitted image and a reference to the location of the matching segment within the previously transmitted image) (block 414 ). Using the metadata, processing logic extends the search to find the longest match between the previously transmitted image and the current image, starting at the location of the matching segment within the previously transmitted image (block 416 ).
- processing logic encodes the longest match using the metadata (the above reference to the previously transmitted image, the starting location of the match within the previously transmitted image and the length of the match) (block 418 ), and updates the entry for the present segment in the dictionary using the current image and the location of the segment in the current image (block 420 ).
- processing logic determines whether the current image contains more pixels that have not been processed. If not, processing logic sends the resulting compressed image to the client (block 424 ). If so, processing logic proceeds to the next pixel in the current image (block 426 ) to define a next segment, and further proceeds to block 410 .
- FIG. 5 is a block diagram illustrating an image decompression system 500 according to one embodiment of the invention.
- the image decompression system 500 may include a code analyzer 540 , a data decompressor 506 and a decompressed images buffer 508 .
- the code analyzer 504 receives compressed image 502 and determines whether the first code in the image 502 includes metadata (a reference to another image, a reference to the location of a segment in the other image, and the length of the segment). If not (i.e., the code encodes one pixel), the code analyzer 504 outputs the pixel, and proceeds to the next code.
- the code analyzer 504 provides the metadata to the data decompressor 506 , which then finds the relevant image in the decompressed images buffer 508 , finds the appropriate location in the relevant image, fetches the segment of pixels of the specified length from the appropriate location in the relevant image, and outputs the fetched segment of pixels.
- the data decompressor 506 then invokes the data analyzer 504 to proceed to the next code. The above operations are repeated until all the code in the compressed image 502 is processed, at which point the resulting decompressed image 510 is added to the decompressed images buffer 508 .
- the size of the decompressed images buffer 508 is limited to a predefined threshold used for the image window in the compression processing of the server. Consequently, when the current image 510 is added to the decompressed images buffer 508 , the size of the decompressed images buffer 508 is checked against the predefined threshold. If the threshold is exceeded, the least recent images are removed from the decompressed images buffer 508 one by one until the buffer size no longer exceeds the threshold.
- FIG. 6 is a flow diagram illustrating one embodiment of a method 600 for decoding an image using a set of previously received images.
- the method 600 may be performed by processing logic that may comprise hardware (e.g., circuitry, dedicated logic, programmable logic, microcode, etc.), software (e.g., instructions run on a processing device to perform hardware simulation), or a combination thereof.
- the method 600 is performed by the image decompression system 111 of FIG. 1 .
- method 600 begins with receiving a compressed image and analyzing the first code in the compressed image (block 602 ). If the code includes metadata (a reference to another image, a reference to the location of a segment of pixels in the other image, and the length of the segment of pixels) (block 604 ), processing logic determines the image ID and the location from the metadata (block 606 ), fetches the segment of pixels of the specified length from the appropriate location in the identified image (block 610 ), and adds the fetched sequence of pixels to the output (block 610 ). If the code does not include metadata, processing logic adds the encoded pixel to the output (block 618 ).
- metadata a reference to another image, a reference to the location of a segment of pixels in the other image, and the length of the segment of pixels
- processing logic determines the image ID and the location from the metadata (block 606 ), fetches the segment of pixels of the specified length from the appropriate location in the identified image (block 610 ), and adds the fetched sequence of pixels to the output (block
- processing logic determines whether the compressed image has more code. If so, processing logic proceeds to the next code and continue operations starting at block 604 . If not, processing logic adds the resulting decompressed image to the set of images stored at the client for use in decoding of future compressed images (block 614 ). As discussed above, if the size of the stored images exceeds a predefined threshold, the least recent images are deleted one by one until the size no longer exceeds the predefined threshold.
- FIG. 7 is a block diagram illustrating a data processing system which may be used with an embodiment of the invention.
- system 1000 may be implemented as part of a client and/or a server described above.
- System 1000 illustrates a diagrammatic representation of a machine in the exemplary form of a computer system within which a set of instructions, for causing the machine to perform any one or more of the methodologies discussed herein, may be executed.
- the machine may be connected (e.g., networked) to other machines in a LAN, an intranet, an extranet, or the Internet.
- the machine may operate in the capacity of a server or a client machine in client-server network environment, or as a peer machine in a peer-to-peer (or distributed) network environment.
- the machine may be a personal computer (PC), a tablet PC, a set-top box (STB), a Personal Digital Assistant (PDA), a cellular telephone, a web appliance, a server, a network router, switch or bridge, or any machine capable of executing a set of instructions (sequential or otherwise) that specify actions to be taken by that machine.
- PC personal computer
- PDA Personal Digital Assistant
- STB set-top box
- WPA Personal Digital Assistant
- a cellular telephone a web appliance
- server a server
- network router switch or bridge
- the exemplary computer system 1000 includes a processing device (processor) 1002 , a main memory 1004 (e.g., read-only memory (ROM), flash memory, dynamic random access memory (DRAM) such as synchronous DRAM (SDRAM) or Rambus DRAM (RDRAM), etc.), a static memory 1006 (e.g., flash memory, static random access memory (SRAM), etc.), and a data storage device 1016 , which communicate with each other via a bus 1008 .
- a processing device e.g., a main memory 1004
- main memory 1004 e.g., read-only memory (ROM), flash memory, dynamic random access memory (DRAM) such as synchronous DRAM (SDRAM) or Rambus DRAM (RDRAM), etc.
- DRAM dynamic random access memory
- SDRAM synchronous DRAM
- RDRAM Rambus DRAM
- static memory e.g., flash memory, static random access memory (SRAM), etc.
- SRAM static random access memory
- Processor 1002 represents one or more general-purpose processing devices such as a microprocessor, central processing unit, or the like. More particularly, the processor 1002 may be a complex instruction set computing (CISC) microprocessor, reduced instruction set computing (RISC) microprocessor, very long instruction word (VLIW) microprocessor, or a processor implementing other instruction sets or processors implementing a combination of instruction sets.
- the processor 1002 may also be one or more special-purpose processing devices such as an application specific integrated circuit (ASIC), a field programmable gate array (FPGA), a digital signal processor (DSP), network processor, or the like.
- the processor 1002 is configured to execute the instructions 1026 for performing the operations and steps discussed herein.
- the computer system 1000 may further include a network interface device 1022 .
- the computer system 1000 also may include a video display unit 1010 (e.g., a liquid crystal display (LCD) or a cathode ray tube (CRT)), an alphanumeric input device 1012 (e.g., a keyboard), a cursor control device 1014 (e.g., a mouse), and a signal generation device 1020 (e.g., a speaker).
- a video display unit 1010 e.g., a liquid crystal display (LCD) or a cathode ray tube (CRT)
- an alphanumeric input device 1012 e.g., a keyboard
- a cursor control device 1014 e.g., a mouse
- a signal generation device 1020 e.g., a speaker
- the data storage device 1016 may include a machine-accessible storage medium 1024 on which is stored one or more sets of instructions 1026 (e.g., software) embodying any one or more of the methodologies or functions described herein.
- the software may also reside, completely or at least partially, within the main memory 1004 and/or within the processor 1002 during execution thereof by the computer system 1000 , the main memory 1004 and the processor 1002 also constituting machine-accessible storage media.
- the software may further be transmitted or received over a network via the network interface device 1022 .
- Embodiments of the present invention also relate to an apparatus for performing the operations herein.
- This apparatus may be specially constructed for the required purposes, or it may comprise a general-purpose computer selectively activated or reconfigured by a computer program stored in the computer.
- a computer program may be stored in a computer readable medium.
- a machine-readable medium includes any mechanism for storing or transmitting information in a form readable by a machine (e.g., a computer).
- a machine-readable (e.g., computer-readable) medium includes a machine (e.g., a computer) readable storage medium (e.g., read only memory (“ROM”), random access memory (“RAM”), magnetic disk storage media, optical storage media, flash memory devices, etc.), a machine (e.g., computer) readable transmission medium (electrical, optical, acoustical or other form of propagated signals (e.g., carrier waves, infrared signals, digital signals, etc.)), etc.
Landscapes
- Engineering & Computer Science (AREA)
- Multimedia (AREA)
- Signal Processing (AREA)
- Databases & Information Systems (AREA)
- Information Transfer Between Computers (AREA)
- Compression Or Coding Systems Of Tv Signals (AREA)
Abstract
Description
- The present invention relates generally to graphics remoting. More particularly, this invention relates to data compression of images using a shared dictionary.
- Graphics remoting systems allow computing device network clients to connect to a remote server and receive a visual representation of at least some of the graphics being displayed at or output by the server. Often the network client can display all the graphical output associated with the session. Likewise, the client may be allowed to interact with the session, injecting user input, generated from devices such as a mouse or keyboard connected to the client, into the server session.
- In some computing environments, entities also use terminal servers to provide remote access to applications and data. A terminal server is a computer system that maintains applications that can be remotely executed by client computer systems. Input is entered at a client computer system and transferred over a network (e.g., using protocols based on the ITU T.120 family of protocols, such as, for example, Remote Desktop Protocol (“RDP”)) to an application at the terminal server. The application processes the input as if the input was entered at the terminal server. The application generates output in response to the received input and the output is transferred over the network (e.g., also T.120 based protocols) to the client computer system. The client computer system presents the output data.
- Thus, input is received and output is presented at the client computer system, while processing actually occurs at the terminal server. In most, if not all terminal server environments, input data (entered at a client computer system) typically includes mouse and keyboard data representing commands to an application and output data (generated by an application at the terminal server) typically includes video data for display at a display device.
- Recently, desktop virtualization or virtual desktop infrastructure has become more popular. Desktop virtualization is a server-centric computing model that borrows from the traditional thin-client model but is designed to give system administrators and end-users the best of the ability to host and centrally manage desktop virtual machines in the data center while giving end users a full PC desktop experience.
- Desktop virtualization provides many of the advantages of a terminal server, while providing users with much more flexibility. Each user, for example, might be allowed to install and configure his/her own applications. Users also gain the ability to access their server-based virtual desktop from other locations.
- However, there has been a lack of efficient data compression mechanisms to improve network traffic and processing efficiency of the client in a desktop virtualization environment.
- The present invention is illustrated by way of example and not limitation in the figures of the accompanying drawings in which like references indicate similar elements.
-
FIG. 1 is a block diagram illustrating an example of a network configuration according to one embodiment of the invention. -
FIG. 2 illustrates an exemplary queue of images generated by a server application, in accordance with one embodiment of the invention. -
FIG. 3 is a block diagram illustrating a remote display system according to one embodiment of the invention. -
FIG. 4 is a flow diagram illustrating an example of a method for compressing images using a shared dictionary, in accordance with one embodiment of the invention. -
FIG. 5 is a block diagram illustrating an image decompression system according to one embodiment of the invention. -
FIG. 6 is a flow diagram illustrating an example of a method for decompressing images using a set of images, in accordance with one embodiment of the invention. -
FIG. 7 is a block diagram illustrating an example of a data processing system which may be used with an embodiment of the invention. - Techniques for data compression of images using a shared dictionary are described herein. In the following description, numerous details are set forth to provide a more thorough explanation of the embodiments of the present invention. It will be apparent, however, to one skilled in the art, that embodiments of the present invention may be practiced without these specific details. In other instances, well-known structures and devices are shown in block diagram form, rather than in detail, in order to avoid obscuring embodiments of the present invention.
- Reference in the specification to “one embodiment” or “an embodiment” means that a particular feature, structure, or characteristic described in connection with the embodiment is included in at least one embodiment of the invention. The appearances of the phrase “in one embodiment” in various places in the specification do not necessarily all refer to the same embodiment.
- In graphics remoting systems, graphics data associated with at least a portion of an image generated by an application, such as, for example, a desktop application, is first compressed and then transmitted to a client. Often, a stream of images transmitted to the client contains very similar images (e.g., a clock image transmitted every minute). Embodiments of the present invention provide an improved compression mechanism that employs similarities between images being transmitted to the client. Using a dictionary shared by multiple images, a sequence of pixels in an image can be encoded by a reference to the same sequence in another image that was previously transmitted to the client. The client maintains all the images that constructed the dictionary at the time a specific image was encoded in the server, and can easily decode the specific image using previously transmitted images.
-
FIG. 1 is a block diagram illustrating an example of a network configuration according to one embodiment of the invention. Referring toFIG. 1 ,network configuration 100 includes, but is not limited to, one or more clients 101-102 communicatively coupled to a remote server or a cluster ofservers 104 over anetwork 103. Network 103 may be a local area network (LAN) or a wide area network (WAN) and may be a combination of one or more networks. Clients 101-102 can be any computer system in communication withserver 104 for remote execution of applications atserver 104. For example,system 100 may be implemented as part of a graphics remoting system. Generally, a client such asclient 101 can be a computer system in communication withserver 104 for remote execution of applications atserver 104. Thus, input data (e.g., mouse and keyboard input) representing application commands is received at the client and transferred overnetwork 103 toserver 104. In response to client side data, an application (e.g., application 106) can generate output display commands (e.g., graphics commands referred to herein as graphics data), which may include one or more paint and/or draw operations, for example, in the form of executable instructions. The output display commands can then be transmitted (e.g., as graphics update commands) with compression back to the remote client and a remote display driver (e.g., rendering agent 112) of the remote client can collect the graphics commands and generate corresponding drawing commands for rendering at a display device of the client. - In one embodiment,
server 104 is configured to host one or morevirtual machines 109, each having one or more desktop applications 106 (e.g., desktop operating system).Desktop application 106 may be executed and hosted by an operating environment (e.g., an operating system, not shown) withinvirtual machine 109. Such an operating system invirtual machine 109 is also referred to as a guest operating system. Multiple guest operating systems and the associated virtual machines may be controlled by another operating system (also referred to as a host OS). Typically, a host OS represents a virtual machine monitor (VMM) (also referred to as a hypervisor) for managing the hosted virtual machines. A guest OS may be of the same or different type with respect to the host OS. For example, a guest OS may be a Windows operating system from Microsoft and a host OS may be a Linux operating system available from Red Hat. In addition, the guest OSes running on thehost 104 can be of the same or different types. - Virtual
machine 109 can be any type of virtual machines, such as, for example, hardware emulation, full virtualization, para-virtualization, and operating system-level virtualization virtual machines. Different virtual machines hosted byserver 104 may have the same or different privilege levels for accessing different resources. - In one embodiment,
server 104, also referred to as a virtual desktop server (VDS), hosts multiple virtual machines (e.g., virtual machine 109), each hosting or maintaining a desktop environment remotely accessed by a client such as clients 101-102, in this example,virtual desktop 106. For the purpose of illustration,virtual desktop 106 represents an output (e.g., a snapshot of an image to be displayed) generated by a desktop application running withinvirtual machine 109. Graphics data associated withvirtual desktop 106 is then captured and streamed to a client such as clients 101-102, where thevirtual desktop 106 may be rendered by a rendering agent (e.g., agent 112) and presented by a client application (e.g., application 110) respectively. - In one embodiment, the
server 104 hosts aremote display system 107 for eachvirtual machine 109 that is responsible for transferring graphics data associated withdesktop 106 to clients 101-102. In particular, prior to streaming graphics data ofdesktop 106 to, in this example,client 101,remote display system 107 compresses an image ofdesktop 106 using a shared dictionary. As will be discussed in more detail below, the shared dictionary employs similarities between images being transmitted to the client and allows a sequence of pixels in an image to be encoded by a reference to the same sequence in another image that was previously transmitted to the client. - The compressed image is then transmitted to
client 101 overnetwork 103 using a variety of communications protocols, such as, for example, RDP protocol or a proprietary protocol such as SPICE™ protocol from Red Hat Israel. Theclient 101 includes animage decompression system 111 that receives the compressed data and decodes it using previously transmitted images stored at theclient 101. When the image decompression system 11 decodes a specific image, the images stored at theclient 101 are synchronized with images covered in a dictionary that was used by theremote display system 107 when encoding the specific image. - The
rendering agent 112 uses the decompressed data to render the desktop image for presentation byclient application 110.Client application 110 may be a thin client application such as a browser application, and image data transmitted from theserver 104 to theclient 101 may include graphics commands (e.g., paint and/or draw commands) as well as other information (e.g., location and/or shape, etc.) such that theclient 101 can execute or render the graphics commands to construct an associated virtual desktop image. -
System 100 may be implemented within a data center of an enterprise entity. It allows enterprises the benefit of centralized desktops without the need to change their applications or infrastructure. Enterprises benefit from an improvement in the manageability, security and policy enforcement for their desktop environment, and consequently, realize a significant reduction in the desktop TCO (total cost of ownership). - In one particular embodiment,
server 104 is configured to run the virtualization platform/hypervisor and the virtual desktops. SPICE communication protocol is utilized to communicate between a client and a server. SPICE is a remote rendering technology developed specifically for virtual desktops that allow users to “see” their desktops and interact with them. In this embodiment, a user's desktop runs inside a kernel-based virtual machine (KVM) on theserver 104 in the enterprise data center. The user then accesses his/her desktop from a thin client (e.g., client application 110) using SPICE protocol.System 100 may be implemented as part of Solid ICE™ (independent computing environment) virtualization solution available from Red hat Israel. Note that an application related to a virtual desktop is utilized herein as an example throughout this application for illustration purposes only. However, techniques described herein can also be applied to any kinds of graphics remoting applications. -
FIG. 2 illustrates anexemplary stream 200 of images generated by a server application, in accordance with one embodiment of the invention. Thestream 200 includesimages current image 202 that is being presently compressed. As shown, thecurrent image 202 includespixel segments images - The
images 202 through 206 share a dictionary that includes data identifying each image (e.g., image ID), locations of individual segments of pixels within each image, and a signature of each segment (e.g., a hash value of the segment). In one embodiment, when a new image is added to the stream of images, the size of the resulting collection of images (referred to herein as an “image window”) is checked against a predefined threshold. If the threshold is exceeded, one or more of the least recent images are removed from the image window to bring the size of the image window below the threshold. The dictionary is then updated to delete the data associated with the removed images. - When the
current image 202 is processed for compression, pixels in thecurrent image 202 are compared with pixels in the previously transmitted images using the dictionary. If a segment of pixels in the current image has a match in a previously transmitted image, the segment of pixels in the current image is encoded by a reference to the match in the previously transmitted image. When the compression process of the current image is completed, the compressed image is transmitted to a client. - When the client receives the compressed image, the client decodes it using the stored images previously transmitted to the client. The images stored at the client include all the images that were covered in the dictionary at the time the above image was encoded. This synchronization is achieved by maintaining the same image window threshold for the images covered in the dictionary and the images stored at the client.
-
FIG. 3 is a block diagram illustrating an exemplaryremote display system 300 according to one embodiment of the invention. Theremote display system 300 may include awindow adjuster 302, ahash unit 303, asearch engine 304, anoutput creator 306 and adictionary 305. - In one embodiment, the
window adjuster 302 adds acurrent image 301 to the image window that includes images covered in the dictionary and previously transmitted to the client. If the size of the resulting image window exceeds a predefined threshold, one or more of the least recent images in the image window are removed to bring the size of the image window below the predefined threshold. Thedictionary 305 includes entries for images in the image window. An entry may include anentry ID 308, animage ID 309, and alocation 310 of a segment of pixels within the image. - In one embodiment, the
remote display system 300 uses hashing to facilitate efficient search of thedictionary 305. However, various other search techniques can be used with the present invention without loss of generality. In the illustrated embodiment, thehash unit 303 starts with the first segment of pixels of the current image, creates a hash value for this segment of pixels, and adds an entry for this segment of pixels to thedictionary 305. The segment may include one or more pixels. The entry may specify the entry ID for the segment, the ID of the current image, and the location of the segment within the current image. In one embodiment, the entry ID is the hash value of the segment. Although not shown, the entry may also include the length of the segment. - The
search engine 304 access the dictionary entry that matches the hash value generated for the segment of pixels that starts at the current location in the image. Thesearch engine 304 retrieves, from the matching entry, a corresponding image ID (image X) and location information (location L). Starting from location L in image X, and the current segment, it looks for the longest match between them. If a match is not found, thesearch engine 304 provides the coding of the first pixel in the current segment to theoutput creator 306 and invokes thehash unit 303 to proceed to the next pixel. - If a match is found, the
search engine 304 encodes this match using the reference to image X, the reference to location L in image X, and the length of the longest match. In addition, in both cases, thesearch engine 304 updates the segment's entry in thedictionary 305 with the metadata of the current segment. Further, thesearch engine 304 invokes thehash unit 303 to continue with the segment of the current image that follows the pixels that were last encoded. The above iterations are repeated until theentire image 301 is processed. - In one embodiment, when performing a search for the current segment, the
search engine 304 ignores entries referring to old images that have been deleted from the image window by theimage adjuster 302. In particular, when thesearch engine 304 access an entry that is referring to a deleted image, thesearch engine 304 determines that the image no longer exists, and ignores this entry. - The
output creator 306 uses encoded data provided by thesearch engine 304 to createcompressed image 307 that is transmitted to the client. - As opposed to the LZ-77 algorithm, which is a general algorithm for sequences of bytes, embodiments of the present invention compress RGB images. In particular, in one embodiment, in which hashing is utilized to find a match in the sliding window, an alignment of pixels is used according to the image representation (e.g., in RGB 16 the hashing is performed on 2 bytes aligned sequence and the last bit in each pixel is ignored since only 15 bits are used to encode a pixel). In an RGB-A format, the alpha channel is compressed separately from the RGB channel because each channel has distinguishable repetitive characteristics and compressing them separately is more likely to result in finding repeated sequences.
- Further, embodiments of the present invention use an image window that is not limited to the image being currently compressed, but rather contains images that were previously compressed and transmitted to the client. Accordingly, similarities among a stream of images that are very common in remote displays are utilized, significantly reducing the network traffic between the server and the client.
-
FIG. 4 is a flow diagram illustrating one embodiment of amethod 400 for compressing images using a common dictionary. Themethod 400 may be performed by processing logic that may comprise hardware (e.g., circuitry, dedicated logic, programmable logic, microcode, etc.), software (e.g., instructions run on a processing device to perform hardware simulation), or a combination thereof. In one embodiment, themethod 400 is performed by theremote display system 107 ofFIG. 1 . - Referring to
FIG. 4 ,method 400 begins with adding a current image generated by a server application to an image window (block 402) and determining whether the size of the resulting image window exceeds a predefined threshold (block 404). If not, processing logic proceeds to block 408. If so, processing logic removes the least recent image(s) in the image window until the size of the image window no longer exceeds the threshold (block 406) and proceeds to block 408. - At
block 408, processing logic identifies the first segment of pixels in the current image. Depending on the employed search technique, processing logic may create a signature of the segment (e.g., a hash value), pre-process the segment in some other way or use the actual data of the segment. - At
block 410, processing logic searches the shared dictionary for an entry corresponding to the present segment of pixels. As discussed above, the search may be performed using hashes, suffix tree, actual data, etc. - If processing logic does not find an entry corresponding to the present segment of pixels (block 412), processing logic updates the entry for the present segment of pixels in the shared dictionary (block 428), outputs the coding of the first pixel in the present segment, and proceeds to block 430. Otherwise, if processing logic finds an entry corresponding to the present segment of pixels, processing logic obtains metadata information from this entry (a reference to a previously transmitted image and a reference to the location of the matching segment within the previously transmitted image) (block 414). Using the metadata, processing logic extends the search to find the longest match between the previously transmitted image and the current image, starting at the location of the matching segment within the previously transmitted image (block 416). Next, processing logic encodes the longest match using the metadata (the above reference to the previously transmitted image, the starting location of the match within the previously transmitted image and the length of the match) (block 418), and updates the entry for the present segment in the dictionary using the current image and the location of the segment in the current image (block 420).
- At
block 422, processing logic determines whether the current image contains more pixels that have not been processed. If not, processing logic sends the resulting compressed image to the client (block 424). If so, processing logic proceeds to the next pixel in the current image (block 426) to define a next segment, and further proceeds to block 410. -
FIG. 5 is a block diagram illustrating animage decompression system 500 according to one embodiment of the invention. Theimage decompression system 500 may include a code analyzer 540, adata decompressor 506 and a decompressedimages buffer 508. - The
code analyzer 504 receives compressedimage 502 and determines whether the first code in theimage 502 includes metadata (a reference to another image, a reference to the location of a segment in the other image, and the length of the segment). If not (i.e., the code encodes one pixel), thecode analyzer 504 outputs the pixel, and proceeds to the next code. - If the code in the
image 502 includes metadata, thecode analyzer 504 provides the metadata to thedata decompressor 506, which then finds the relevant image in the decompressedimages buffer 508, finds the appropriate location in the relevant image, fetches the segment of pixels of the specified length from the appropriate location in the relevant image, and outputs the fetched segment of pixels. Thedata decompressor 506 then invokes the data analyzer 504 to proceed to the next code. The above operations are repeated until all the code in thecompressed image 502 is processed, at which point the resulting decompressedimage 510 is added to the decompressedimages buffer 508. - In one embodiment, the size of the decompressed
images buffer 508 is limited to a predefined threshold used for the image window in the compression processing of the server. Consequently, when thecurrent image 510 is added to the decompressedimages buffer 508, the size of the decompressedimages buffer 508 is checked against the predefined threshold. If the threshold is exceeded, the least recent images are removed from the decompressed images buffer 508 one by one until the buffer size no longer exceeds the threshold. -
FIG. 6 is a flow diagram illustrating one embodiment of amethod 600 for decoding an image using a set of previously received images. Themethod 600 may be performed by processing logic that may comprise hardware (e.g., circuitry, dedicated logic, programmable logic, microcode, etc.), software (e.g., instructions run on a processing device to perform hardware simulation), or a combination thereof. In one embodiment, themethod 600 is performed by theimage decompression system 111 ofFIG. 1 . - Referring to
FIG. 6 ,method 600 begins with receiving a compressed image and analyzing the first code in the compressed image (block 602). If the code includes metadata (a reference to another image, a reference to the location of a segment of pixels in the other image, and the length of the segment of pixels) (block 604), processing logic determines the image ID and the location from the metadata (block 606), fetches the segment of pixels of the specified length from the appropriate location in the identified image (block 610), and adds the fetched sequence of pixels to the output (block 610). If the code does not include metadata, processing logic adds the encoded pixel to the output (block 618). - At
block 612, processing logic determines whether the compressed image has more code. If so, processing logic proceeds to the next code and continue operations starting atblock 604. If not, processing logic adds the resulting decompressed image to the set of images stored at the client for use in decoding of future compressed images (block 614). As discussed above, if the size of the stored images exceeds a predefined threshold, the least recent images are deleted one by one until the size no longer exceeds the predefined threshold. -
FIG. 7 is a block diagram illustrating a data processing system which may be used with an embodiment of the invention. For example,system 1000 may be implemented as part of a client and/or a server described above.System 1000 illustrates a diagrammatic representation of a machine in the exemplary form of a computer system within which a set of instructions, for causing the machine to perform any one or more of the methodologies discussed herein, may be executed. In alternative embodiments, the machine may be connected (e.g., networked) to other machines in a LAN, an intranet, an extranet, or the Internet. The machine may operate in the capacity of a server or a client machine in client-server network environment, or as a peer machine in a peer-to-peer (or distributed) network environment. The machine may be a personal computer (PC), a tablet PC, a set-top box (STB), a Personal Digital Assistant (PDA), a cellular telephone, a web appliance, a server, a network router, switch or bridge, or any machine capable of executing a set of instructions (sequential or otherwise) that specify actions to be taken by that machine. Further, while only a single machine is illustrated, the term “machine” shall also be taken to include any collection of machines that individually or jointly execute a set (or multiple sets) of instructions to perform any one or more of the methodologies discussed herein. - The
exemplary computer system 1000 includes a processing device (processor) 1002, a main memory 1004 (e.g., read-only memory (ROM), flash memory, dynamic random access memory (DRAM) such as synchronous DRAM (SDRAM) or Rambus DRAM (RDRAM), etc.), a static memory 1006 (e.g., flash memory, static random access memory (SRAM), etc.), and adata storage device 1016, which communicate with each other via abus 1008. -
Processor 1002 represents one or more general-purpose processing devices such as a microprocessor, central processing unit, or the like. More particularly, theprocessor 1002 may be a complex instruction set computing (CISC) microprocessor, reduced instruction set computing (RISC) microprocessor, very long instruction word (VLIW) microprocessor, or a processor implementing other instruction sets or processors implementing a combination of instruction sets. Theprocessor 1002 may also be one or more special-purpose processing devices such as an application specific integrated circuit (ASIC), a field programmable gate array (FPGA), a digital signal processor (DSP), network processor, or the like. Theprocessor 1002 is configured to execute theinstructions 1026 for performing the operations and steps discussed herein. - The
computer system 1000 may further include anetwork interface device 1022. Thecomputer system 1000 also may include a video display unit 1010 (e.g., a liquid crystal display (LCD) or a cathode ray tube (CRT)), an alphanumeric input device 1012 (e.g., a keyboard), a cursor control device 1014 (e.g., a mouse), and a signal generation device 1020 (e.g., a speaker). - The
data storage device 1016 may include a machine-accessible storage medium 1024 on which is stored one or more sets of instructions 1026 (e.g., software) embodying any one or more of the methodologies or functions described herein. The software may also reside, completely or at least partially, within themain memory 1004 and/or within theprocessor 1002 during execution thereof by thecomputer system 1000, themain memory 1004 and theprocessor 1002 also constituting machine-accessible storage media. The software may further be transmitted or received over a network via thenetwork interface device 1022. - Thus, techniques for data compression of images using a shared dictionary have been described herein. Some portions of the preceding detailed descriptions have been presented in terms of algorithms and symbolic representations of operations on data bits within a computer memory. These algorithmic descriptions and representations are the ways used by those skilled in the data processing arts to most effectively convey the substance of their work to others skilled in the art. An algorithm is here, and generally, conceived to be a self-consistent sequence of operations leading to a desired result. The operations are those requiring physical manipulations of physical quantities. Usually, though not necessarily, these quantities take the form of electrical or magnetic signals capable of being stored, transferred, combined, compared, and otherwise manipulated. It has proven convenient at times, principally for reasons of common usage, to refer to these signals as bits, values, elements, symbols, characters, terms, numbers, or the like.
- It should be borne in mind, however, that all of these and similar terms are to be associated with the appropriate physical quantities and are merely convenient labels applied to these quantities. Unless specifically stated otherwise as apparent from the above discussion, it is appreciated that throughout the description, discussions utilizing terms such as “processing” or “computing” or “calculating” or “determining” or “displaying” or the like, refer to the action and processes of a computer system, or similar electronic computing device, that manipulates and transforms data represented as physical (electronic) quantities within the computer system's registers and memories into other data similarly represented as physical quantities within the computer system memories or registers or other such information storage, transmission or display devices.
- Embodiments of the present invention also relate to an apparatus for performing the operations herein. This apparatus may be specially constructed for the required purposes, or it may comprise a general-purpose computer selectively activated or reconfigured by a computer program stored in the computer. Such a computer program may be stored in a computer readable medium. A machine-readable medium includes any mechanism for storing or transmitting information in a form readable by a machine (e.g., a computer). For example, a machine-readable (e.g., computer-readable) medium includes a machine (e.g., a computer) readable storage medium (e.g., read only memory (“ROM”), random access memory (“RAM”), magnetic disk storage media, optical storage media, flash memory devices, etc.), a machine (e.g., computer) readable transmission medium (electrical, optical, acoustical or other form of propagated signals (e.g., carrier waves, infrared signals, digital signals, etc.)), etc.
- The algorithms and displays presented herein are not inherently related to any particular computer or other apparatus. Various general-purpose systems may be used with programs in accordance with the teachings herein, or it may prove convenient to construct more specialized apparatus to perform the required method operations. The required structure for a variety of these systems will appear from the description below. In addition, embodiments of the present invention are not described with reference to any particular programming language. It will be appreciated that a variety of programming languages may be used to implement the teachings of embodiments of the invention as described herein.
- In the foregoing specification, embodiments of the invention have been described with reference to specific exemplary embodiments thereof. It will be evident that various modifications may be made thereto without departing from the broader spirit and scope of embodiments of the invention as set forth in the following claims. The specification and drawings are, accordingly, to be regarded in an illustrative sense rather than a restrictive sense.
Claims (22)
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US12/464,820 US8355585B2 (en) | 2009-05-12 | 2009-05-12 | Data compression of images using a shared dictionary |
US13/619,785 US9369721B2 (en) | 2009-05-12 | 2012-09-14 | Data compression of images using a shared dictionary |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US12/464,820 US8355585B2 (en) | 2009-05-12 | 2009-05-12 | Data compression of images using a shared dictionary |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
US13/619,785 Continuation US9369721B2 (en) | 2009-05-12 | 2012-09-14 | Data compression of images using a shared dictionary |
Publications (2)
Publication Number | Publication Date |
---|---|
US20100293248A1 true US20100293248A1 (en) | 2010-11-18 |
US8355585B2 US8355585B2 (en) | 2013-01-15 |
Family
ID=43069391
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
US12/464,820 Active 2031-10-10 US8355585B2 (en) | 2009-05-12 | 2009-05-12 | Data compression of images using a shared dictionary |
US13/619,785 Active 2030-06-16 US9369721B2 (en) | 2009-05-12 | 2012-09-14 | Data compression of images using a shared dictionary |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
US13/619,785 Active 2030-06-16 US9369721B2 (en) | 2009-05-12 | 2012-09-14 | Data compression of images using a shared dictionary |
Country Status (1)
Country | Link |
---|---|
US (2) | US8355585B2 (en) |
Cited By (23)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110219058A1 (en) * | 2010-03-02 | 2011-09-08 | Microsoft Corporation | Algorithm Execution Output Cache |
US20120166583A1 (en) * | 2010-12-23 | 2012-06-28 | Virtuanet Llc | Semantic information processing |
US20130039408A1 (en) * | 2011-02-07 | 2013-02-14 | Screenovate Technologies Ltd | Method for enhancing compression and transmission process of a screen image |
US20130288597A1 (en) * | 2012-04-26 | 2013-10-31 | Arora Puneet Kumar | Transferring data items amongst computing devices using metadata that identifies a location of a transferred item |
US20140321553A1 (en) * | 2013-04-25 | 2014-10-30 | Vmware, Inc. | Systems and methods for using pre-calculated block hashes for image block matching |
US20140369413A1 (en) * | 2013-06-18 | 2014-12-18 | Vmware, Inc. | Systems and methods for compressing video data using image block matching |
CN104469395A (en) * | 2014-12-12 | 2015-03-25 | 华为技术有限公司 | Image transmission method and device |
WO2015110804A1 (en) * | 2014-01-21 | 2015-07-30 | Elektraglide Ltd | A method and system for interactive graphics streaming |
WO2016073150A1 (en) * | 2014-11-05 | 2016-05-12 | Qualcomm Incorporated | Compression of graphical commands for remote display |
WO2016095377A1 (en) * | 2014-12-18 | 2016-06-23 | 中兴通讯股份有限公司 | Image display method and device for thin client and electronic equipment |
EP3061253A4 (en) * | 2013-10-25 | 2016-08-31 | Microsoft Technology Licensing Llc | Hash-based block matching in video and image coding |
EP3061233A4 (en) * | 2013-10-25 | 2016-10-12 | Microsoft Technology Licensing Llc | Representing blocks with hash values in video and image coding and decoding |
US20170097981A1 (en) * | 2014-06-11 | 2017-04-06 | Gurulogic Microsystems Oy | Apparatus and method for data compression |
WO2018094030A1 (en) * | 2016-11-16 | 2018-05-24 | Citrix Systems, Inc. | Multi-pixel caching scheme for lossless encoding |
US10368092B2 (en) | 2014-03-04 | 2019-07-30 | Microsoft Technology Licensing, Llc | Encoder-side decisions for block flipping and skip mode in intra block copy prediction |
US10390039B2 (en) | 2016-08-31 | 2019-08-20 | Microsoft Technology Licensing, Llc | Motion estimation for screen remoting scenarios |
US10567754B2 (en) | 2014-03-04 | 2020-02-18 | Microsoft Technology Licensing, Llc | Hash table construction and availability checking for hash-based block matching |
US10681372B2 (en) | 2014-06-23 | 2020-06-09 | Microsoft Technology Licensing, Llc | Encoder decisions based on results of hash-based block matching |
US10915984B2 (en) | 2014-01-21 | 2021-02-09 | Elektraglide Ltd | Method and system for interactive graphics streaming |
US11025923B2 (en) | 2014-09-30 | 2021-06-01 | Microsoft Technology Licensing, Llc | Hash-based encoder decisions for video coding |
US11095877B2 (en) | 2016-11-30 | 2021-08-17 | Microsoft Technology Licensing, Llc | Local hash-based motion estimation for screen remoting scenarios |
CN113365065A (en) * | 2021-06-09 | 2021-09-07 | 湖南大学 | Lossless video coding method and decoding method for RPA robot screen recording |
US11202085B1 (en) | 2020-06-12 | 2021-12-14 | Microsoft Technology Licensing, Llc | Low-cost hash table construction and hash-based block matching for variable-size blocks |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8890874B2 (en) * | 2007-12-14 | 2014-11-18 | Microsoft Corporation | Changing visual content communication |
US8355585B2 (en) * | 2009-05-12 | 2013-01-15 | Red Hat Israel, Ltd. | Data compression of images using a shared dictionary |
US9344528B2 (en) * | 2011-08-31 | 2016-05-17 | Microsoft Technology Licensing, Llc | Data compressor using hints |
US10108477B2 (en) | 2015-10-23 | 2018-10-23 | Pervacio Inc. | Mobile device diagnostics |
CN113129202B (en) * | 2020-01-10 | 2023-05-09 | 华为技术有限公司 | Data transmission method and device, data processing system and storage medium |
Citations (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4464650A (en) * | 1981-08-10 | 1984-08-07 | Sperry Corporation | Apparatus and method for compressing data signals and restoring the compressed data signals |
US5379036A (en) * | 1992-04-01 | 1995-01-03 | Storer; James A. | Method and apparatus for data compression |
US5841376A (en) * | 1995-09-29 | 1998-11-24 | Kyocera Corporation | Data compression and decompression scheme using a search tree in which each entry is stored with an infinite-length character string |
US6035323A (en) * | 1997-10-24 | 2000-03-07 | Pictra, Inc. | Methods and apparatuses for distributing a collection of digital media over a network with automatic generation of presentable media |
US6058428A (en) * | 1997-12-05 | 2000-05-02 | Pictra, Inc. | Method and apparatus for transferring digital images on a network |
US20020016819A1 (en) * | 2000-07-31 | 2002-02-07 | Mika Sugimoto | Content management server, server system and method of controlling operation thereof |
US20030058255A1 (en) * | 2001-09-21 | 2003-03-27 | Yoichi Yamagishi | Image management system |
US6591011B1 (en) * | 1998-11-16 | 2003-07-08 | Sony Corporation | Picture processing method and apparatus |
US6606040B2 (en) * | 2001-02-13 | 2003-08-12 | Mosaid Technologies, Inc. | Method and apparatus for adaptive data compression |
US20030223650A1 (en) * | 2002-05-31 | 2003-12-04 | Innotive Corporation | Method for providing real-time service of huge and high quality digital image on internet |
US6714205B1 (en) * | 1998-08-21 | 2004-03-30 | Canon Kabushiki Kaisha | Image data processing method and apparatus, and image processing system |
US20050213147A1 (en) * | 2004-03-29 | 2005-09-29 | Fuji Photo Film Co., Ltd. | Image file sharing method, and digital camera and center server used in image file sharing system |
US20060050973A1 (en) * | 2004-09-03 | 2006-03-09 | Canon Kabushiki Kaisha | Image communication system, server apparatus, and image communication method |
US20060251338A1 (en) * | 2005-05-09 | 2006-11-09 | Gokturk Salih B | System and method for providing objectified image renderings using recognition information from images |
US20080166057A1 (en) * | 2004-12-24 | 2008-07-10 | Nec Corporation | Video Structuring Device and Method |
US20090106405A1 (en) * | 2007-10-23 | 2009-04-23 | Mazarick Michael S | System and method for initializing and maintaining a series of virtual local area networks contained in a clustered computer system |
US7576752B1 (en) * | 2000-10-04 | 2009-08-18 | Shutterfly Inc. | System and method for manipulating digital images |
US20090285506A1 (en) * | 2000-10-04 | 2009-11-19 | Jeffrey Benson | System and method for manipulating digital images |
US7623047B2 (en) * | 2007-10-30 | 2009-11-24 | Hewlett-Packard Development Company, L.P. | Data sequence compression |
USRE41152E1 (en) * | 1996-08-06 | 2010-02-23 | Pinpoint Incorporated | Lempel-Ziv data compression technique utilizing a dictionary pre-filled with frequent letter combinations, words and/or phrases |
US7750826B2 (en) * | 2008-11-26 | 2010-07-06 | Red Hat, Inc. | Data structure management for lossless data compression |
US7869074B2 (en) * | 2005-09-20 | 2011-01-11 | Brother Kogyo Kabushiki Kaisha | Communication system, information processing device, peripheral device and communication method |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4814746A (en) * | 1983-06-01 | 1989-03-21 | International Business Machines Corporation | Data compression method |
GB2172127B (en) * | 1985-03-06 | 1988-10-12 | Ferranti Plc | Data compression system |
US6226628B1 (en) * | 1998-06-24 | 2001-05-01 | Microsoft Corporation | Cross-file pattern-matching compression |
US7184577B2 (en) * | 2003-03-14 | 2007-02-27 | Intelitrac, Inc. | Image indexing search system and method |
US8355585B2 (en) * | 2009-05-12 | 2013-01-15 | Red Hat Israel, Ltd. | Data compression of images using a shared dictionary |
-
2009
- 2009-05-12 US US12/464,820 patent/US8355585B2/en active Active
-
2012
- 2012-09-14 US US13/619,785 patent/US9369721B2/en active Active
Patent Citations (24)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4464650A (en) * | 1981-08-10 | 1984-08-07 | Sperry Corporation | Apparatus and method for compressing data signals and restoring the compressed data signals |
US5379036A (en) * | 1992-04-01 | 1995-01-03 | Storer; James A. | Method and apparatus for data compression |
US5841376A (en) * | 1995-09-29 | 1998-11-24 | Kyocera Corporation | Data compression and decompression scheme using a search tree in which each entry is stored with an infinite-length character string |
USRE41152E1 (en) * | 1996-08-06 | 2010-02-23 | Pinpoint Incorporated | Lempel-Ziv data compression technique utilizing a dictionary pre-filled with frequent letter combinations, words and/or phrases |
US6035323A (en) * | 1997-10-24 | 2000-03-07 | Pictra, Inc. | Methods and apparatuses for distributing a collection of digital media over a network with automatic generation of presentable media |
US6058428A (en) * | 1997-12-05 | 2000-05-02 | Pictra, Inc. | Method and apparatus for transferring digital images on a network |
US6714205B1 (en) * | 1998-08-21 | 2004-03-30 | Canon Kabushiki Kaisha | Image data processing method and apparatus, and image processing system |
US6591011B1 (en) * | 1998-11-16 | 2003-07-08 | Sony Corporation | Picture processing method and apparatus |
US20020016819A1 (en) * | 2000-07-31 | 2002-02-07 | Mika Sugimoto | Content management server, server system and method of controlling operation thereof |
US7576752B1 (en) * | 2000-10-04 | 2009-08-18 | Shutterfly Inc. | System and method for manipulating digital images |
US20090285506A1 (en) * | 2000-10-04 | 2009-11-19 | Jeffrey Benson | System and method for manipulating digital images |
US6606040B2 (en) * | 2001-02-13 | 2003-08-12 | Mosaid Technologies, Inc. | Method and apparatus for adaptive data compression |
US20030058255A1 (en) * | 2001-09-21 | 2003-03-27 | Yoichi Yamagishi | Image management system |
US7634144B2 (en) * | 2002-05-31 | 2009-12-15 | Innotive Corporation | Method for providing real-time service of huge and high quality digital image on internet |
US20030223650A1 (en) * | 2002-05-31 | 2003-12-04 | Innotive Corporation | Method for providing real-time service of huge and high quality digital image on internet |
US7460151B2 (en) * | 2004-03-29 | 2008-12-02 | Fujifilm Corporation | Image file sharing method, and digital camera and center server used in image file sharing system |
US20050213147A1 (en) * | 2004-03-29 | 2005-09-29 | Fuji Photo Film Co., Ltd. | Image file sharing method, and digital camera and center server used in image file sharing system |
US20060050973A1 (en) * | 2004-09-03 | 2006-03-09 | Canon Kabushiki Kaisha | Image communication system, server apparatus, and image communication method |
US20080166057A1 (en) * | 2004-12-24 | 2008-07-10 | Nec Corporation | Video Structuring Device and Method |
US20060251338A1 (en) * | 2005-05-09 | 2006-11-09 | Gokturk Salih B | System and method for providing objectified image renderings using recognition information from images |
US7869074B2 (en) * | 2005-09-20 | 2011-01-11 | Brother Kogyo Kabushiki Kaisha | Communication system, information processing device, peripheral device and communication method |
US20090106405A1 (en) * | 2007-10-23 | 2009-04-23 | Mazarick Michael S | System and method for initializing and maintaining a series of virtual local area networks contained in a clustered computer system |
US7623047B2 (en) * | 2007-10-30 | 2009-11-24 | Hewlett-Packard Development Company, L.P. | Data sequence compression |
US7750826B2 (en) * | 2008-11-26 | 2010-07-06 | Red Hat, Inc. | Data structure management for lossless data compression |
Cited By (47)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9135154B2 (en) * | 2010-03-02 | 2015-09-15 | Microsoft Technology Licensing, Llc | Algorithm execution output cache |
US20110219058A1 (en) * | 2010-03-02 | 2011-09-08 | Microsoft Corporation | Algorithm Execution Output Cache |
US10812617B2 (en) | 2010-12-23 | 2020-10-20 | Virtuanet Llc | Semantic information processing |
US10237368B2 (en) | 2010-12-23 | 2019-03-19 | Virtuanet Llc | Semantic information processing |
US20120166583A1 (en) * | 2010-12-23 | 2012-06-28 | Virtuanet Llc | Semantic information processing |
US9230019B2 (en) * | 2010-12-23 | 2016-01-05 | Virtuanet Llc | Semantic information processing |
US20130039408A1 (en) * | 2011-02-07 | 2013-02-14 | Screenovate Technologies Ltd | Method for enhancing compression and transmission process of a screen image |
US20130288597A1 (en) * | 2012-04-26 | 2013-10-31 | Arora Puneet Kumar | Transferring data items amongst computing devices using metadata that identifies a location of a transferred item |
US9077696B2 (en) * | 2012-04-26 | 2015-07-07 | Qualcomm Incorporated | Transferring data items amongst computing devices using metadata that identifies a location of a transferred item |
US20140321553A1 (en) * | 2013-04-25 | 2014-10-30 | Vmware, Inc. | Systems and methods for using pre-calculated block hashes for image block matching |
US11317123B2 (en) * | 2013-04-25 | 2022-04-26 | Vmware, Inc. | Systems and methods for using pre-calculated block hashes for image block matching |
US20140369413A1 (en) * | 2013-06-18 | 2014-12-18 | Vmware, Inc. | Systems and methods for compressing video data using image block matching |
US11076171B2 (en) | 2013-10-25 | 2021-07-27 | Microsoft Technology Licensing, Llc | Representing blocks with hash values in video and image coding and decoding |
EP3061253A1 (en) * | 2013-10-25 | 2016-08-31 | Microsoft Technology Licensing, LLC | Hash-based block matching in video and image coding |
EP3061233A4 (en) * | 2013-10-25 | 2016-10-12 | Microsoft Technology Licensing Llc | Representing blocks with hash values in video and image coding and decoding |
EP3061253A4 (en) * | 2013-10-25 | 2016-08-31 | Microsoft Technology Licensing Llc | Hash-based block matching in video and image coding |
US10264290B2 (en) | 2013-10-25 | 2019-04-16 | Microsoft Technology Licensing, Llc | Hash-based block matching in video and image coding |
EP4181068A1 (en) | 2014-01-21 | 2023-05-17 | Mythical Games UK Ltd | A method and system for interactive graphics streaming |
US12118639B2 (en) | 2014-01-21 | 2024-10-15 | Mythical, Inc. | Method and system for interactive graphics streaming |
US10915984B2 (en) | 2014-01-21 | 2021-02-09 | Elektraglide Ltd | Method and system for interactive graphics streaming |
WO2015110804A1 (en) * | 2014-01-21 | 2015-07-30 | Elektraglide Ltd | A method and system for interactive graphics streaming |
US10410312B2 (en) | 2014-01-21 | 2019-09-10 | Elektraglide Ltd | Method and system for interactive graphics streaming |
US10567754B2 (en) | 2014-03-04 | 2020-02-18 | Microsoft Technology Licensing, Llc | Hash table construction and availability checking for hash-based block matching |
US10368092B2 (en) | 2014-03-04 | 2019-07-30 | Microsoft Technology Licensing, Llc | Encoder-side decisions for block flipping and skip mode in intra block copy prediction |
GB2527099B (en) * | 2014-06-11 | 2018-07-18 | Gurulogic Microsystems Oy | Apparatus and method for data compression |
US20170097981A1 (en) * | 2014-06-11 | 2017-04-06 | Gurulogic Microsystems Oy | Apparatus and method for data compression |
US10681372B2 (en) | 2014-06-23 | 2020-06-09 | Microsoft Technology Licensing, Llc | Encoder decisions based on results of hash-based block matching |
US11025923B2 (en) | 2014-09-30 | 2021-06-01 | Microsoft Technology Licensing, Llc | Hash-based encoder decisions for video coding |
US10021161B2 (en) | 2014-11-05 | 2018-07-10 | Qualcomm Incorporated | Compression of graphical commands for remote display |
WO2016073150A1 (en) * | 2014-11-05 | 2016-05-12 | Qualcomm Incorporated | Compression of graphical commands for remote display |
JP2018500854A (en) * | 2014-11-05 | 2018-01-11 | クゥアルコム・インコーポレイテッドQualcomm Incorporated | Graphical command compression for remote display |
CN107077747A (en) * | 2014-11-05 | 2017-08-18 | 高通股份有限公司 | The graph command compression remotely shown |
CN104469395A (en) * | 2014-12-12 | 2015-03-25 | 华为技术有限公司 | Image transmission method and device |
US10298970B2 (en) | 2014-12-12 | 2019-05-21 | Huawei Technologies Co., Ltd. | Image transmission method and apparatus |
WO2016095377A1 (en) * | 2014-12-18 | 2016-06-23 | 中兴通讯股份有限公司 | Image display method and device for thin client and electronic equipment |
US10390039B2 (en) | 2016-08-31 | 2019-08-20 | Microsoft Technology Licensing, Llc | Motion estimation for screen remoting scenarios |
US10523956B2 (en) | 2016-11-16 | 2019-12-31 | Citrix Systems, Inc. | Multi-pixel caching scheme for lossless encoding |
US11190787B2 (en) | 2016-11-16 | 2021-11-30 | Citrix Systems, Inc. | Multi-pixel caching scheme for lossless encoding |
AU2017363055B2 (en) * | 2016-11-16 | 2021-12-16 | Citrix Systems, Inc. | Multi-pixel caching scheme for lossless encoding |
KR102341527B1 (en) * | 2016-11-16 | 2021-12-20 | 시트릭스시스템스,인크. | Multi-pixel caching scheme for lossless encoding |
CN109691108A (en) * | 2016-11-16 | 2019-04-26 | 思杰系统有限公司 | More pixel caching schemes for lossless coding |
US11653009B2 (en) | 2016-11-16 | 2023-05-16 | Citrix Systems, Inc. | Multi-pixel caching scheme for lossless encoding |
KR20190085910A (en) * | 2016-11-16 | 2019-07-19 | 시트릭스시스템스,인크. | Multi-Pixel Caching Method for Lossless Encoding |
WO2018094030A1 (en) * | 2016-11-16 | 2018-05-24 | Citrix Systems, Inc. | Multi-pixel caching scheme for lossless encoding |
US11095877B2 (en) | 2016-11-30 | 2021-08-17 | Microsoft Technology Licensing, Llc | Local hash-based motion estimation for screen remoting scenarios |
US11202085B1 (en) | 2020-06-12 | 2021-12-14 | Microsoft Technology Licensing, Llc | Low-cost hash table construction and hash-based block matching for variable-size blocks |
CN113365065A (en) * | 2021-06-09 | 2021-09-07 | 湖南大学 | Lossless video coding method and decoding method for RPA robot screen recording |
Also Published As
Publication number | Publication date |
---|---|
US20130011064A1 (en) | 2013-01-10 |
US8355585B2 (en) | 2013-01-15 |
US9369721B2 (en) | 2016-06-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9369721B2 (en) | Data compression of images using a shared dictionary | |
US9025898B2 (en) | Dynamically selecting compression method for graphics remoting | |
US8392596B2 (en) | Methods for detecting and handling video and video-like content in remote display system | |
US9510048B2 (en) | Dynamically changing streaming video quality | |
US9135024B2 (en) | Playing multimedia content at remote graphics display client | |
US8467631B2 (en) | Method and apparatus for identification of image uniqueness | |
US8626824B2 (en) | Persisting graphics structures across resolution change in graphics remoting environment | |
JP5123186B2 (en) | Remote protocol support for large object communication in any format | |
JP6051303B2 (en) | User interface remoting using video coding techniques | |
US8230008B2 (en) | Persisting graphics structures across client change in graphics remoting environment | |
US10552639B1 (en) | Local isolator application with cohesive application-isolation interface | |
WO2017193821A1 (en) | Cloud desktop image processing method, server, client and computer storage medium | |
US20130113833A1 (en) | Method and system for rendering images in a remote web browser | |
US20160233882A1 (en) | Efficient Context Save/Restore During Hardware Decompression of DEFLATE Encoded Data | |
US9344528B2 (en) | Data compressor using hints | |
US11317123B2 (en) | Systems and methods for using pre-calculated block hashes for image block matching | |
US9754385B2 (en) | Efficient encoding of composited display frames | |
EP3410302A1 (en) | Graphic instruction data processing method, apparatus and system | |
JP2022037900A (en) | Parallel decompression of compressed data streams | |
US20120113103A1 (en) | Apparatus and method for executing 3d application program using remote rendering | |
US9519493B2 (en) | Populating a client device with graphical images specific to a machine | |
US11599381B2 (en) | Processing files via edge computing device | |
US20180227347A1 (en) | Virtualizing audio and video devices using synchronous a/v streaming | |
US9460481B2 (en) | Systems and methods for processing desktop graphics for remote display | |
US9875076B1 (en) | Remoting client having GPU off-loader |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
AS | Assignment |
Owner name: RED HAT ISRAEL, LTD., ISRAEL Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNORS:KAMAY, YANIV;HALPERIN, YONIT TOVA;REEL/FRAME:022677/0201 Effective date: 20090512 |
|
STCF | Information on status: patent grant |
Free format text: PATENTED CASE |
|
FPAY | Fee payment |
Year of fee payment: 4 |
|
MAFP | Maintenance fee payment |
Free format text: PAYMENT OF MAINTENANCE FEE, 8TH YEAR, LARGE ENTITY (ORIGINAL EVENT CODE: M1552); ENTITY STATUS OF PATENT OWNER: LARGE ENTITY Year of fee payment: 8 |
|
FEPP | Fee payment procedure |
Free format text: MAINTENANCE FEE REMINDER MAILED (ORIGINAL EVENT CODE: REM.); ENTITY STATUS OF PATENT OWNER: LARGE ENTITY |