Entropy coding for recompression of images

A code is received. The code conveys data about a quantized coefficient that corresponds to a pixel of an image file. A decoding mode and a version of a code mapping format for decoding the received code is determined. The decoding mode and the version of the code mapping format dynamically change based on a previously-decoded code. The received code is decoded, during the decoding mode, according to the version of the code mapping format to obtain the data about the quantized coefficient.

TECHNICAL FIELD

This specification relates generally to systems and methods for encoding and decoding content, and more particularly to systems and methods for encoding and decoding data related to image pixels.

BACKGROUND

For transmission of a JPEG image file, the JPEG image file is organized according to 8×8 blocks of pixels and a discrete cosine transform (DCT) is performed on each 8×8 block. After the application of the DCT, the data for each pixel in a block undergoes quantization. After the DCT and quantization, each JPEG block comprises a set of quantized coefficients prior to transmission. The process of quantization affects the accuracy of each coefficient, thereby causing some loss with regard to the image's resolution and appearance. The JPEG format applies entropy encoding to encode each quantized coefficient for transmission of the JPEG image file to an image recipient.

Upon receipt of the entropy-encoded quantized coefficients, the image recipient reverses the entropy encoding in order to obtain the JPEG image file's quantized coefficients. The quantization and the DCT can be reversed as well to obtain image data for the recipient to sufficiently reconstruct and display the JPEG image file.

SUMMARY

In accordance with an embodiment, methods, systems, and apparatus for GPEG entropy encoding and GPEG entropy decoding are provided herein. GPEG entropy encoding and GPEP entropy decoding provide a more compact and efficient approach to encode and decode the JPEG quantized coefficients without incurring any further loss experienced by JPEG quantization. GPEG entropy encoding is an intermediate image file format that can be used in place of JPEG entropy encoding. Specifically, GPEG entropy encoding and GPEG entropy decoding involve a more efficient approach for representing the JPEG quantized coefficients.

In one embodiment, a code is received. The code conveys data about a quantized coefficient that corresponds to a pixel of an image file. A decoding mode and a version of a code mapping format for decoding the received code are determined. The decoding mode and the version of the code mapping format dynamically change based on a previously-decoded code. The received code is decoded, during the decoding mode, according to the version of the code mapping format to obtain the data about the quantized coefficient.

In another embodiment, the version of the code mapping format is generated as a terminated infinite tree code designed according to parameters based on a decoding context.

In one embodiment, consecutive blocks of zero coefficients are constructed and populated upon initiating a zero block run decoding mode.

In another embodiment, a block of coefficients is constructed as having at least one zero coefficient and at least one non-zero coefficient upon initiating a block decoding mode.

In one embodiment, due to the code compression provided by GPEG entropy encoding, a reduction in memory required to store large amounts of JPEG image files can be experienced by storing the JPEG image files as GPEG encoded image files. Upon request of a particular JPEG image file, the corresponding GPEG encoded image file can be decoded, via GPEG entropy decoding, to obtain the JPEG quantized coefficients.

These and other advantages of the present disclosure will be apparent to those of ordinary skill in the art by reference to the following Detailed Description and the accompanying drawings.

DETAILED DESCRIPTION

In accordance with an embodiment, a method, system and apparatus for GPEG entropy encoding and GPEG entropy decoding is provided herein. GPEG entropy encoding is an intermediate image file format that can be used in place of JPEG entropy encoding. Specifically, GPEG entropy encoding and GPEG entropy decoding involve a more efficient and compressed approach for representing JPEG quantized coefficients.

FIG. 1shows a communication system implementing a GPEG encoder and GPEG decoder in accordance with embodiments described herein. Communication system100includes a website manager140, a network150and several user devices160-A,160-B, etc. For convenience, the term “user device160” is used herein to refer to any one of user devices160-A,160-B, etc. Accordingly, any discussion herein referring to “user device160” may be equally applicable to each of user devices160-A,160-B,160-C, etc. Communication system100may include more or fewer than three user devices.

In the exemplary embodiment ofFIG. 1, network150is the Internet. In other embodiments, network150may include one or more of a number of different types of networks, such as, for example, an intranet, a local area network (LAN), a wide area network (WAN), a wireless network, a Fibre Channel-based storage area network (SAN), or Ethernet. Other networks may be used. Alternatively, network105may include a combination of different types of networks.

Website manager140can be part of a website, accessible via network150, which comprises one or more web pages containing various types of information, such as articles, comments, images, photographs, etc.

Website manager140includes a JPEG receiver160, a JPEG decoder165, a GPEG encoder290, a GPEG compressed image database150, a GPEG decoder295, a JPEG encoder170and a JPEG sender175. The GPEG compressed image database150can store any number of GPEG encoded images.

The JPEG receiver160receives JPEG images sent from a user device160to be stored by the website manager140in the GPEG compressed image database150. The JPEG decoder165decodes each received JPEG image in order to reverse the JPEG entropy encoding used for transmitting JPEG images. Decoding the JPEG entropy encoding of a received JPEG image results in obtaining blocks of quantized coefficients associated with pixels in the received JPEG image. The GPEG encoder290receives the blocks of quantized coefficients from the JPEG decoder165and encodes the blocks of quantized coefficients according to the GPEG format. The GPEG encoder290stores the encoded blocks of quantized coefficients in the GPEG compressed image database150.

When a user device160requests a particular JPEG image from the website manager140, the website manager140sends the encoded blocks of quantized coefficients that correspond to the requested JPEG image to the GPEG decoder295. The GPEG decoder295reverses the GPEG encoding to obtain the blocks of quantized coefficients that correspond to the requested JPEG image. The JPEG encoder170receives the blocks of quantized coefficients from the GPEG decoder and applies JPEG entropy encoding. Once the JPEG entropy encoding is applied, the JPEG sender175can transmit the JPEG entropy encoded data to the user160device.

User device160may be any device that enables a user to communicate via network105. User device160may be connected to network150through a direct (wired) link, or wirelessly. User device160may have a display screen (not shown) for displaying information. For example, user device160may be a personal computer, a laptop computer, a workstation, a mainframe computer, etc. Alternatively, user device160may be a mobile communication device such as a wireless phone, a personal digital assistant, etc. Other devices may be used.

FIG. 2Ashows multiple blocks of coefficients in accordance with embodiments described herein. Each block105,110,115,120,125,130,135includes multiple quantized coefficients (such as a zero coefficient127or a non-zero coefficient132) of a corresponding image pixel's DCT. It is understood that various embodiments are not limited to a particular amount of blocks or coefficients. In addition, the term “block” is not intended to limit or characterize a conceptual shape of each block105,110,115,120,125,130,135.

For purposes of simplicity,FIGS. 2B,3,5,6,7illustrate codes encoded according to the GPEG format being transmitted from the encoder290to the decoder295. However, it is understood that, in various embodiments, the GPEG compressed image database150first receives the codes from the encoder290and stores the codes. The stored codes are then later received by the decoder290to reverse the GPEG encoding.

FIG. 2Bshows a current block125being encoded and decoded in accordance with embodiments described herein. The GPEG encoder290(hereinafter “encoder290”) is currently encoding current block125and the GPEG decoder295(hereinafter “decoder295”) decodes the code200it receives to create a decoded version225of the current block. The encoder290has already encoded blocks105,110,115120near the current block125and the decoder295has already decoded corresponding blocks205,210,215and220. That is, block205is the decoded version of block105. Block210is the decoded version of block110. Block215is the decoded version of block115. Block220is the decoded version of block120.

The encoder290uses an encoding context250to encode the current block125. The encoding context250represents characteristics105-1,110-1,115-1,120-1that are associated, respectively, with blocks105,110,115,120near the current block125. Therefore, the encoding context250is predictive of the current block's125characteristics.

Since the encoding context250is predictive of characteristics of the current block125, parameters derived from the encoding context250assist in updating a current version of a code mapping format that produces bitcodes to efficiently represent the various coefficients in the current block125. The parameters from the encoding context250, for example, can be the number of coefficients in the current block125, as well as a predicted range and distribution of the current block's125coefficients. The code mapping format module260applies the parameters to terminated infinite-trees in order to generate bitcodes that represent the values of the current block's125coefficients. A terminated infinite tree code updates the code mapping format so that the coefficient value that is predicted to occur most often in the current block125will have the smallest bitcode length. In addition, the bitcode length produced by the terminated infinite tree code will also be affected by the predicted range of coefficient values in the current block125and the number of coefficients in the current block125. The code mapping format module262of the decoder295uses parameters from the decoding context275in a similar fashion.

As the encoder290moves from encoding the current block125to encoding a subsequent block130, the encoder290updates the encoding context250based on characteristics of certain neighboring blocks near the subsequent block130. For example, characteristics of the current block125can be included in the encoding context250for encoding of the subsequent block130. Therefore, each block is encoded according to its own encoding context250, which ensures a greater likelihood that changes to the code mapping format from block to block will generate the most efficient bit codes to best represent the coefficients in each block.

In the encoder290, the code mapping format module260uses characteristics105-1,110-1,115-1,120-1(such as DC coefficients and total number of non-zero coefficients) of each neighboring, previously-encoded block105,110,115,120to determine parameters to be used by the code mapping format module260.

In some embodiments, the encoding context250is based on stored DC coefficients (i.e. average grey scale values) of each previously-encoded block105,110,115,120and a stored total number of non-zero coefficients for each previously-encoded block105,110,115,120. The encoding context250provides parameters regarding the number of coefficients to be encoded in the current block125, a most common coefficient from the previously-encoded blocks105,110,115,120and a shape of the distribution of the coefficients from the previously-encoded blocks105,110,115,120. These parameters are used to design a terminated infinite-tree code to generate a particular version of the code mapping format for encoding coefficients that are predicted to occur in the current block125. As the encoding context250changes, the parameters will change, thereby effecting the design of the terminated infinite-tree code used to generate the code mapping format.

Encoder290transmits a code200to the decoder295. When decoding a code200representing a coefficient in the current block125, the decoder295utilizes characteristics205-1,210-1,215-1,220-1(such as DC coefficients and a total number of non-zero coefficients) that are associated, respectively, with previously-decoded blocks205,201,215,220to determine a compatible version of the code mapping format used by the encoder290to create the code200. Since the decoder295has already decoded various blocks205,210,215220, the decoder295creates a decoding context275that is based on the same block characteristics105-1,110-1,115-1,120-1used by the encoding context250. The decoding context275thereby provides its code mapping format module262with the same (or similar) parameters as the encoding context250. The decoder295obtains parameters from the decoding context275to effect the design of a terminated infinite-tree code in order to determine the compatible version of the code mapping format.

In addition, the encoder290and decoder295achieve greater levels of efficiency through the use of implicit encoding modes265and decoding modes270, respectively. In other words, not only is code compression achieved through dynamically changing versions of the code mapping format used to encode and decode the coefficients in each block, but various coding modes signal to the encoder290and decoder295that certain codes are to represent different types (or amounts) of data at different times.

FIG. 3shows multiple blocks being encoded and decoded during a zero block run encoding mode and a zero block run decoding mode, respectively, in accordance with embodiments described herein. The encoder290uses the encoding context250to determine when it is appropriate to switch to the zero block run encoding mode, such as when the block characteristics105-1,110-1,115-1,120-1indicate only zero coefficients in the previously-encoded blocks105,110,115,120. The zero block run encoding mode generates a code305that represents a total number300(i.e. “2”) of subsequent, consecutive blocks125,130that are populated with only zero coefficients.

Likewise, the decoder295, utilizes the block characteristics205-1,210-1,215-1,220-1in the decoding context275to determine the encoder290is sending the code305during the zero block run encoding mode. When the decoder295receives the code305, the decoder's295code mapping format module262determines the compatible version of the code mapping format to decode the code305based on parameters from the decoding context275. In addition, the decoder295initiates a zero block run decoding mode to decode the code305as representing a total number300(i.e. “2”) of consecutive blocks125,130populated with only zero coefficients. Upon decoding the code305, the decoder295constructs two blocks225,230of coefficients as being populated with only zero coefficients. Therefore, both the zero block run encoding and decoding modes, with the use of the dynamically changing code mapping format, allow the code305to represent all the zero coefficients in multiple blocks125,130with a minimal use of bits.

In addition, in one embodiment, when the zero block run encoding mode is complete and the encoder290begins encoding a new block, encoding logic in the encoder290assumes that the new block must have at least one non-zero coefficient—or else it would have already been encoded during the previous zero block run coding mode. In this case, the encoder290utilizes the logical assumption of a presence of at least one non-zero coefficient in the new block as a parameter from the encoding context250to change the code mapping format during encoding of the new block. The decoder295can use the same logical assumption to similarly change the code mapping format when decoding the code for the new block.

FIG. 4shows zero coefficients and non-zero coefficients positioned within a current block125in accordance with embodiments described herein. It is understood that the coefficients illustrated inFIG. 4are placed in the current block125according to a reverse zig-zag scan order of: NZ-1400, “0”420, “0”425, NZ-2405, “0”430, NZ-3410and NZ-4415. The encoder290can predict how many non-zero coefficients400,405,410,415are in the current block125based on the encoding context250. As illustrated inFIG. 4, the current block125has a total of four (4) non-zero coefficients400,405,410,415and three (3) zero coefficients420,425,430occur after the first occurrence of a non-zero coefficient400in reverse zig-zag scan order. It is understood that all other coefficients in the current block125are zero coefficients as well.

FIG. 5shows a scenario for encoding and decoding a total number of non-zero coefficients in a current block125during a block encoding mode and a block decoding mode, respectively, in accordance with embodiments described herein.

Based on the encoding context250, the encoder290detects a presence of at least one non-zero coefficient amongst the previously-encoded blocks105,110,115,120near the current block125and initiates a block run encoding mode. A first code500generated by the encoder290during the block run encoding mode represents the total number of non-zero coefficients510in the current block125. The encoder290updates the current version of the code mapping format and creates the first code500to represent the total number (i.e. “4”) of non-zero coefficients510in the current block125. The encoder290sends the first code500to the decoder295.

Based on the decoding context275, the decoder295initiates a block run decoding mode in which the first code500is implicitly understood as representing the total number of non-zero coefficients510in the current block125. The decoder295receives the first code500and determines a compatible code mapping format, via the decoding context275, for the first code500in order to decode the total number (“4”) of non-zero coefficients510in the current block125. By leveraging the updated code mapping format and the block run encoding mode, the encoder290has communicated to the decoder295how many non-zero coefficients are present in the current block125via an efficient use of bits.

FIG. 6shows a scenario for encoding and decoding a number of zero coefficients in a current block125during a block encoding mode and a block decoding mode, respectively, in accordance with embodiments described herein. Specifically, a second code600in the block run encoding mode represents a number of zero coefficients that occur after a particular instance of a non-zero coefficient.

For example, the encoder290detects a presence of three zero coefficients420,425,430amongst the four non-zero coefficients400,405,410,415(as illustrated inFIG. 4). The second code600in the block run encoding mode represents these three zero coefficients420,425,430. The encoder290creates the second code600to represent the number610(i.e. “3”) of the detected of zero coefficients420,425,430according to a code mapping format changed by parameters from the encoding context250. However, in this case, the encoding context250is based on characteristics125-1of the current block125that have already been encoded—as opposed to characteristics of previously-encoded neighboring blocks. The encoder290sends the second code600to the decoder295.

The decoder295receives the second code600during the decoding block decoding mode and determines a compatible code mapping format for the second code600in order to decode the number (i.e. “3”) of zero coefficients420,425,430. The compatible code mapping format is based on parameters from a decoding context275using characteristics225-1of the current decoded block225that have already been decoded.

At this point, the decoder295has received two types of codes500,600—each encoded in a distinct and efficient code mapping format during the block encoding mode—that, together, convey to the decoder295the presence of seven coefficients400,405,410,415,420,425,430in the current block125.

FIG. 7shows a scenario for encoding and decoding a zero-run array710during a block encoding mode and a block decoding mode, respectively, in accordance with embodiments described herein. Specifically, a third code700in the block run encoding mode conveys a placement of the respective occurrences of the non-zero coefficients405,410,415and the zero coefficients420,425,430in the current block125.

For example, the encoder290conveys a placement, in reverse zig-zag scan order, of the three non-zero coefficients405,410,415after an occurrence of the first non-zero coefficient400. To do so, the encoder290encodes the zero run array710. In one embodiment, the elements of the zero run array710describe how many zero coefficients are present in between each of the remaining non-zero coefficients405,410,415after the first non-zero coefficient400. The number of array elements (i.e. the array's length) corresponds to the total number of remaining non-zero coefficients405,410,415, which was previously conveyed by the second code600. To generate the code mapping format for the zero run array710, the encoding context250is based on characteristics125-2of the current block125that have already been encoded.

To encode the zero run array710, the encoder290detects that the remaining non-zero coefficients405,410,415present in the current block125after the first occurrence of the non-zero coefficient400fail to outnumber the zero coefficients420,425,430. The zero run array710can be described as “{2, 1, 0}.” The first array element “2” of the zero run array710indicates that two zero coefficients420,425occur between the first non-zero coefficient400and second non-zero-coefficient405in reverse zig-zag scan order. The second array element “1” indicates one zero coefficient430occurs between the second non-zero coefficient405and the third non-zero coefficient410in reverse zig-zag scan order. The third array element “0” indicates that no zero coefficient occurs between the third non-zero coefficient410and the last non-zero coefficient415in reverse zig-zag scan order.

Once the zero run array710is encoded, the encoder290sends the code700to the decoder295. The decoder295receives the code700during the block decoding mode and, likewise, generates the code mapping format for the code700based on characteristics225-2of the current decoded block225that have already been decoded. The decoder295then decodes the code700to construct the current block125as populated with the non-zero coefficients400-415and the zero coefficients420-430according to their respective placements, in reverse zig-zag scan order, conveyed by the elements of the zero run array710.

In some embodiments, the encoder290skips encoding the third array element “0” of the zero run array710because the first two array elements “2” and “1” when added together are equal to the total number of remaining non-zero coefficients (i.e.“3”)—as represented by code600. Even though it is left encoded, the decoder295will implicitly know the third array element should be “0” because it previously received and decoded the code600for the total number (“3”) of zero coefficients, so the decoder295would not expect the third array element to be anything other than “0” upon decoding the first two array elements, “2” and “1.”

In another embodiment, if any zero run array has consecutive array elements with a value of “0,” the encoder290encodes the number of consecutive zero array elements rather than each individual array element. For example, if a zero run array has three consecutive array elements with a value of “0,” the encoder290will generate a code for the value “3,” rather than encode three consecutive zeros. The encoder290will switch to this type of zero run array encoding mode when the remaining non-zero coefficients after the first occurrence of the non-zero coefficient400(in reverse zig-zag scan order) substantially outnumber the zero coefficients. Upon receiving the code for “3” from the encoder290, the decoder295will similarly recognize that the remaining non-zero coefficients substantially outnumber the zero coefficients from information about the current block225it has recently decoded (i.e. codes500,600). The decoder295will thereby implicitly know that the received code for “3” describes three consecutive array elements that have a value of “0.” The decoder295decodes the zero run array as having three consecutive array elements having a value of “0,” as opposed to decoding a single array element as having a value of “3.”

After encoding and decoding a zero run array, in some embodiments, the encoder290detects that some of the non-zero coefficients, in reverse zig-zag scan order, may each fall within a particular range of values. The encoder290encodes a total number of these non-zero coefficients, with an encoding context250based on the total number of non-zero coefficients in the current block125and the predetermined range of values. The following codes sent by the encoder290represent the actual values of each of these non-zero coefficients that fall within the predetermined range as well as their sign (i.e. positive, negative).

Code compression is achieved by using the total number of non-zero coefficients in the current block125, the predetermined range of values and the total number of the non-zero coefficients that fall within the predetermined range as parameters to update the code mapping format. The code mapping format therefore only needs to use a minimum number of bits to represent a few non-zero coefficients within the predetermined range of values. In other words, since the encoder290is only encoding a few non-zero coefficients within a range of values, the possible permutations of bitcodes from a terminated infinite-tree is minimized.

The decoder295receives the codes and determines the compatible code mapping format to decode the codes because it also has access to the total number of non-zero coefficients in the current block125, the predetermined range of values and the total number of the non-zero coefficients that fall within the predetermined range.

FIG. 8shows a scenario for encoding and decoding a value a non-zero coefficient410, in a current block125, during a block encoding mode and a block decoding mode, respectively, in accordance with embodiments described herein.

Some remaining non-zero coefficients may not fall within the predetermined range and have yet to be encoded by the encoder290. The encoder290encodes the actual value for each remaining non-zero coefficient based on an encoding context that uses characteristics of surrounding coefficients.

For example, as illustrated in theFIG. 8, the encoder290encodes the third non-zero coefficient410in reverse zig-zag scan order with a code mapping format that uses parameters from an encoding context based on surrounding coefficients400,420,425,810,820,830,840,850. When the decoder295receives the corresponding code, it determines a compatible code mapping format because the decoder295will have already decoded the surrounding coefficients. The decoder295decodes the code for the third non-zero coefficient410with the compatible code mapping format.

In addition to various coding modes and dynamically changing the code mapping format by changing an encoding context (or decoding context) that provides parameters for a terminated infinite-tree code, the encoder290performs DC prediction for each block. A certain coefficient (i.e. a DC coefficient) in each block represents the DC value (i.e. the average gray scale value) for that block. The encoder290creates a code that conveys the value of the DC coefficient without incurring the processing costs of actually encoding the DC coefficient's value. The encoder290predicts the current block's125DC coefficient value based on the various DC coefficients of the previously-encoded neighboring blocks NW105, N110, NE115, W120.

Referring again toFIG. 2A, block105is labeled as “NW,” block110is labeled as “N,” block115is labeled as “NE,” and block120is labeled as “W.” In one embodiment, the predicted DC coefficient (hereinafter “pred(DC)”) of the current block125can be based on the median of (N′, W, N′+W−NW), where N′ is a linear combination of N+NE. The encoder290generates a code that represents the difference between pred(DC) and the actual value of the current block's125DC coefficient (i.e. difference=actual DC value−pred(DC)).

The decoder295receives code representing the difference (i.e. difference=actual DC value−pred(DC)) and decodes it with the same code mapping format in which it was encoded. Since the decoder295previously decoded the neighboring blocks, the decoder295can independently determine pred(DC) as well. Once the decoder295decodes the code and determines pred(DC), the decoder295has enough data to determine the actual value of the DC coefficient for the current block125by merely adding the decoded value of the code and pred(DC) together.

FIG. 9is a flowchart900of a method of decoding a code in accordance with embodiments described herein.

At step910, a code that conveys data about a quantized coefficient that corresponds to a pixel of an image file is received. As illustrated herein inFIGS. 2B,3,5,6,7, the decoder295receives codes encoded according to the GPEG format.

At step920, a decoding mode and a version of a code mapping format is determined for decoding the received code. The decoding mode and the version of the code mapping format dynamically change based on a previously-decoded code. Specifically, the decoder295uses the decoding context275, which is based on characteristics of previously-decoded blocks of quantized coefficients, in order to determine a decoding mode and code mapping format to decode a received code.

At step930, the received code is decoded, by the decoder295, according to the version of the code mapping format during the decoding mode to obtain the data about the quantized coefficient.

In various embodiments, the method steps described herein, including the method steps described inFIG. 9, may be performed in an order different from the particular order described or shown. In other embodiments, other steps may be provided, or steps may be eliminated, from the described methods.

Systems, apparatus, and methods described herein may be used within a network-based cloud computing system. In such a network-based cloud computing system, a server or another processor that is connected to a network communicates with one or more client computers via a network. A client computer may communicate with the server via a network browser application residing and operating on the client computer, for example. A client computer may store data on the server and access the data via the network. A client computer may transmit requests for data, or requests for online services, to the server via the network. The server may perform requested services and provide data to the client computer. The server may also transmit data adapted to cause a client computer to perform a specified function, e.g., to perform a calculation, to display specified data on a screen, etc. For example, the server may transmit a request adapted to cause a client computer to perform one or more of the method steps described herein, including one or more of the steps ofFIG. 9. Certain steps of the methods described herein, including one or more of the steps ofFIG. 9, may be performed by a server or by another processor in a network-based cloud-computing system. Certain steps of the methods described herein, including one or more of the steps ofFIG. 9, may be performed by a client computer in a network-based cloud computing system. The steps of the methods described herein, including one or more of the steps ofFIG. 9, may be performed by a server and/or by a client computer in a network-based cloud computing system, in any combination.

A high-level block diagram of an exemplary computer that may be used to implement systems, apparatus and methods described herein is illustrated inFIG. 10. Computer1000comprises a processor1001operatively coupled to a data storage device1002and a memory1003. Processor1001controls the overall operation of computer1000by executing computer program instructions that define such operations. The computer program instructions may be stored in data storage device1002, or other computer readable medium, and loaded into memory1003when execution of the computer program instructions is desired. Thus, the method steps ofFIG. 9can be defined by the computer program instructions stored in memory1003and/or data storage device1002and controlled by the processor1001executing the computer program instructions. For example, the computer program instructions can be implemented as computer executable code programmed by one skilled in the art to perform an algorithm defined by the method steps ofFIG. 9. Accordingly, by executing the computer program instructions, the processor1001executes an algorithm defined by the method steps ofFIG. 9. Computer1000also includes one or more network interfaces1004for communicating with other devices via a network. Computer1000also includes one or more input/output devices1005that enable user interaction with computer1000(e.g., display, keyboard, mouse, speakers, buttons, etc.).

Processor1001may include both general and special purpose microprocessors, and may be the sole processor or one of multiple processors of computer1000. Processor1001may comprise one or more central processing units (CPUs), for example. Processor1001, data storage device1002, and/or memory1003may include, be supplemented by, or incorporated in, one or more application-specific integrated circuits (ASICs) and/or one or more field programmable gate arrays (FPGAs).

Input/output devices1005may include peripherals, such as a printer, scanner, display screen, etc. For example, input/output devices1005may include a display device such as a cathode ray tube (CRT) or liquid crystal display (LCD) monitor for displaying information to the user, a keyboard, and a pointing device such as a mouse or a trackball by which the user can provide input to computer1200.

Any or all of the systems and apparatus discussed herein, including encoder290, decoder290, and components thereof, including encoding context250, decoding context270and code mapping format modules260,262may be implemented using a computer such as computer1000.

One skilled in the art will recognize that an implementation of an actual computer or computer system may have other structures and may contain other components as well, and thatFIG. 10is a high level representation of some of the components of such a computer for illustrative purposes.