Entropy table compression by interpolation coding

By using binary interpolation coding to encode the symbol occurrence table into an integer value (f), the method addresses the inefficiency of transmitting the table in entropy encoding, achieving faster and more memory-efficient decoding.

JP7789255B1Active Publication Date: 2025-12-19NINTENDO CO LTD
View PDF 2 Cites 0 Cited by

Patent Information

Application Number
JP2025109461
Authority / Receiving Office
JP · JP
Patent Type
Patents
Current Assignee / Owner
Priority Date
2024-11-26
Filing Date
2025-06-27
Publication Date
2025-12-19
Estimated Expiration
2045-06-27

AI Technical Summary

Technical Problem

Existing entropy encoding methods, such as ANS, require transmitting a symbol occurrence table (codebook) that contributes significantly to the overall compressed size, necessitating efficient compression techniques to reduce this overhead.

Method used

The method employs a cumulative interpolation encoding technique, specifically binary interpolation coding (BIC), to encode the symbol occurrence table, converting it into an integer value (f) that is used for decoding, thereby reducing the size of the table and enhancing memory efficiency.

Benefits of technology

This approach effectively compresses the symbol occurrence table, allowing for faster and more memory-efficient decoding processes, maintaining the integrity of the encoded data while minimizing storage requirements.

✦ Generated by Eureka AI based on patent content.

Smart Images

  • Figure 0007789255000001_ABST
    Figure 0007789255000001_ABST
Patent Text Reader

Abstract

A method, system, encoding method, encoder, decoder and program for decoding an entropy-encoded symbol sequence using a symbol occurrence table are provided. [Solution] The decoding method uses an integer value f that encodes the symbol occurrence table, sequentially divides the decoding range of the symbol occurrence accumulation table by each intermediate index, and decodes each entry of the symbol occurrence accumulation table. For each decoding range, calculates (first index entry + f mod (last index entry - first index entry + 1)) from the decoded entries of the symbol occurrence accumulation table, decodes each intermediate index entry of the decoding range, and calculates (f div (last index entry - first index entry + 1)) to update f. Furthermore, calculates the symbol occurrence table from the decoded entries of the symbol occurrence accumulation table.
Need to check novelty before this filing date? Find Prior Art

Description

[Technical Field]

[0001] This technology relates to encoding and decoding, and to systems, devices, circuits, methods, techniques, and programs for entropy encoding and decoding, including encoding and decoding codebooks, parameters, and / or tables used in entropy encoding. This technology also relates to entropy encoding of compressed files and encoding and decoding symbol occurrence tables used in the entropy encoding. This technology also relates to entropy-based file segmentation in this context. [Background technology]

[0002] Movies, videos, digital music, video games, and other content are compressed before being streamed so that they can be streamed with low enough latency over limited bandwidth connections such as cellular phones and home Wi-Fi networks.

[0003] There are two common types of compression: lossy and lossless. Lossy compression reduces the size of content by removing certain information, which is usually information that is not needed (e.g., high frequencies that only some people can hear, or fine details in photos or images that are displayed at low resolutions and would otherwise lose their detail).

[0004] With lossless compression, all bits of information in the original file or content remain after compression and can be restored when the file is decompressed. Lossless compression is useful when compressing something that can be executed by a computer, because missing some of the computer's instructions can cause execution errors (like trying to follow driving instructions where every third line has been removed).

[0005] A common form of lossless compression is called "entropy coding." Entropy coding is a coding technique that involves assigning codes to symbols so that the length of the code matches the probability of the symbol's occurrence. The most frequently occurring symbols are encoded with the shortest codes. Samuel F.B. Morse and his friend Alfred Vail used entropy coding when they invented "Morse code" in the 1840s. Morse and Vail counted the number of occurrences of each character in the printing type set to estimate the frequency of characters in newspapers (they were trying to create a universal code that could be used for any message sent by telegraph, so they did not look at the actual frequency of symbols in specific messages). They found that:

[0006] 12,000 E 2,500 F

[0007] 9,000 T 2,000 W, Y

[0008] 8,000 A, I, N, O, S 1,700 G, P

[0009] 6,400 H 1,600 B

[0010] 6,200 R 1,200 V

[0011] 4,400 D 800 K

[0012] 4,000 L 500 Q

[0013] 3,400 U 400 J, X

[0014] 3,000 C, M 200 Z

[0015] Because the letter "E" occurs most frequently, Morse and Vail assigned it a single "dot" ("."), the shortest code a telegrapher could transmit. Similarly, Morse and Vail assigned the second most frequently occurring letter, "T," the second shortest code (a single "dash," "-"), and so on. Because the letters "Q," "J," "X," and "Z" occur least frequently, Morse and Vail assigned them longer codes consisting of combinations of four dots and / or dashes. Without the need to send a "code book" with each message, Morse code quickly became standardized and memorized by most telegraphers.

[0016] Entropy coding is widely used today for all types of data compression, with Huffman and arithmetic coding being the most common. They often work by exploiting redundancy in the output of a quantizer. See Huffman, "A Method for the Construction of Minimum-Redundancy Codes," Proceedings of the IRE (September 1952). Arithmetic coding encodes the entire message into a single number, an arbitrary-precision fractional number q (0.0 ≤ q < 1.0), which represents the current information as a range defined by two numbers. A more recent type of entropy coder, the asymmetric number system (ANS), operates directly on a single natural number representing the current information, allowing for faster implementations. en.wikipedia.org / wiki / Arithmetic_coding; Duda et al., "The use of asymmetric numeral systems as an accurate replacement for Huffman coding," Picture Coding Symposium (2015).

[0017] One simple method for compressing a string of symbols (e.g., a computer data file 10) is to use a two-part code based on an ANS-type entropy encoder, as shown in FIG. 1. In this case, a table F (reference numeral 16, the two-part code "codebook") is first constructed containing the number of occurrences of each symbol in the string (i.e., "message") to be compressed. FIG. 1 illustrates this table F as a histogram. Table F, which allows estimation of the probability of occurrence of each symbol, is used by the ANS encoder to iteratively encode each symbol in the string (which, in the illustrated example, is first compressed using LZ4 lossless compression to reduce redundancy) into a single large number (the encoded data). Note that in this example, table F 16 is "customized" to the particular string being compressed to provide the most accurate estimate of the number of occurrences of each symbol in the actual message being encoded. Thus, in the exemplary embodiment, each unique string being encoded has its own corresponding symbol occurrence table F.

[0018] If the table F remains the same throughout the symbol sequence encoding process for encoding a particular symbol sequence, the name "static encoding" applies (as opposed to "adaptive encoding" in which the table can change with each encoding iteration). Because a static ANS decoder needs the table F 16 (codebook) to perform the inverse of the encoding process, the table is provided to the decoder along with the encoded data 14 in what will become the compressed sequence. Compressed column = encoded data + symbol occurrence table F

[0019] Since the symbol occurrence table F is also sent to the decoder, it effectively becomes part of the compressed size of the compressed string. Therefore, it is desirable to compress table F efficiently in order to reduce the overall compressed size of the compressed string. Summary of the Invention

[0020] In one embodiment, a decoding method is performed using at least one processor and / or processing circuit, the decoding method comprising: receiving a sequence of symbols entropy coded using a table of symbol occurrences; receiving an integer value f that encodes the table of symbol occurrences; and decoding the table of symbol occurrences using the received integer value f, the table comprising: (i) decoding each entry of the accumulation table of symbol occurrences by sequentially dividing a decoding range of the accumulation table of symbol occurrences by each intermediate index, and for each decoding range, calculating (first index entry + f mod (last index entry - the first index entry + 1)) from the decoded entries of the accumulation table of symbol occurrences to decode each intermediate index entry of the decoding range, and calculating (f div (the last index entry - the first index entry + 1)) to update f; (ii) calculating the table of symbol occurrences from the decoded entries of the cumulative table of symbol occurrences; and applying the table of decoded symbol occurrences to entropy decode the received sequence of encoded symbols.

[0021] For clarity, the "table of symbol occurrences" first mentioned above refers to table F, not cumulative table C, in the embodiments described in detail below. Specifically, "accumulation interpolation encoding / decoding" in the embodiments includes the conversion between table F and table C as described in (ii) above (hence the word "accumulation"). Thus, in the embodiments, table C is decoded at the end of (i), and table F is decoded at the end of (ii). Therefore, table F is decoded in (i) + (ii). In other words,

[0022] <<Cumulative Interpolation Decoding>> decodes table F in the following procedure.

[0023] i) Decode table C by <<interpolation decoding>>.

[0024] ii) Calculate Table F from Table C.

[0025] In one embodiment, the decoding may further include receiving a second integer value m, and using a zero value as a lower bound of the accumulation table of symbol occurrences and using the received second integer value m as an upper bound of the accumulation table of symbol occurrences.

[0026] In one embodiment, the decoding may further include receiving a second integer value m, inserting a zero value as a first entry in the accumulation table of symbol occurrences, and inserting the received second integer value m as a last entry in the accumulation table of symbol occurrences.

[0027] In one embodiment, the received second integer value m may be obtained from header metadata of the encoded symbol sequence.

[0028] In one embodiment, the method may further include decoding each entry of the accumulation table by traversing a tree of the divided decoding ranges and performing a division at each node of the tree before a child node of the node. Each entry of the accumulation table may be decoded by traversing a tree of the divided decoding ranges in depth-first order and performing a division at each node of the tree.

[0029] In one embodiment, the received integer value f may be represented as a bignum.

[0030] In one embodiment, this may further include renormalizing to allow for faster and more memory efficient decoding.

[0031] In one embodiment, the encoded symbol string may include a set of different components including a token, a literal length, a literal, an offset, and a match length of a sequence of LZ4 blocks.

[0032] In one embodiment, when using the received integer value f, entries in the table of symbol occurrences may be restored using only integer arithmetic, shifts, logical operations, loads and stores.

[0033] In one embodiment, the entropy decoding may be asymmetric code system (ANS) entropy decoding.

[0034] In one embodiment, the method may further include repeating or recursively performing the sequential division and the calculation for each of the decoding ranges.

[0035] In one embodiment, the method may further include independently decoding each segment of the encoded symbol sequence obtained by performing entropy-based binary segmentation on the symbol sequence, and reconstructing the symbol sequence based on segment headers.

[0036] In one embodiment, the method may further include executing, on at least one processor, instructions losslessly reconstructed by decoding the received entropy-encoded symbol sequence.

[0037] In one embodiment, the method may further include generating, using at least one graphics processing unit, at least a portion of an interactive graphics display based at least in part on graphics data losslessly reconstructed by decoding the received entropy-coded symbol sequence.

[0038] In one embodiment, the decoder comprises at least one processor and / or processing circuitry that accesses an integer value f that encodes a table of symbol occurrences, and uses the integer value f to decode the table of symbol occurrences, the table including: (i) decoding each entry of the accumulation table of symbol occurrences by sequentially dividing a decoding range of the accumulation table of symbol occurrences by each intermediate index, and for each decoding range, calculating (first index entry + f mod (last index entry - the first index entry + 1)) from the decoded entries of the accumulation table of symbol occurrences to decode each intermediate index entry of the decoding range, and calculating (f div (the last index entry - the first index entry + 1)) to update f; (ii) calculating the table of symbol occurrences from the decoded entries of the cumulative table of symbol occurrences; Perform an action including:

[0039] In this embodiment, the following configuration may be further adopted.

[0040] The operations may further include applying the calculated table of symbol occurrences to entropy decode the encoded symbol sequence, and / or executing at least a portion of the entropy decoded symbol sequence, and / or streaming at least a portion of the entropy decoded symbol sequence and / or information derived therefrom.

[0041] The operations may further include receiving a second integer value m, and using a zero value as a lower limit of the accumulation table of symbol occurrences and using the received second integer value m as an upper limit of the accumulation table of symbol occurrences.

[0042] The operations may further include receiving a second integer value m, inserting a zero value as a first entry in the accumulation table of symbol occurrences, and inserting the received second integer value m as a last entry in the accumulation table of symbol occurrences.

[0043] The operations may further include obtaining the received second integer value m from header metadata of the encoded sequence of symbols.

[0044] The operations may further include decoding the entries of the accumulation table by traversing a tree of the split decoding ranges and performing a division at each node of the tree before its child nodes, and / or decoding the entries of the accumulation table by traversing the tree of the split decoding ranges in depth-first order and performing a division at each node of the tree.

[0045] The received integer value f may be expressed as a bignum.

[0046] The operations may further include renormalizing to allow for faster and more memory efficient decoding.

[0047] The encoded symbol string may include a set of different components including a token, a literal length, a literal, an offset, and a match length of a sequence of LZ4 blocks.

[0048] When using the integer value f, entries in the table of symbol occurrences may be restored using only integer arithmetic, shifts, logical operations, loads and stores.

[0049] In applying, an Asymmetric Number System (ANS) entropy decoding may be applied to decode the received sequence of encoded symbols.

[0050] The operations may further include repeating or recursively performing the sequential division and the calculation for each of the decoding ranges, and / or independently decoding each segment of the encoded symbol sequence obtained by performing entropy-based binary segment division on the symbol sequence and reconstructing the symbol sequence based on segment headers, and / or executing instructions losslessly reconstructed by decoding the received entropy-coded symbol sequence, and / or generating, using at least one graphics processing unit, at least a portion of an interactive graphics display based at least in part on graphics data losslessly reconstructed by decoding the received entropy-coded symbol sequence.

[0051] One embodiment of a system for generating animated graphics includes at least one storage means for storing at least one data block representing a sequence of symbols entropy coded using a table of symbol occurrences, and an integer value f that encodes the table of symbol occurrences; and means for decoding the table of symbol occurrences using the integer value f, the means including: (i) decoding each entry of the accumulation table of symbol occurrences by sequentially dividing the decoding range of the accumulation table of symbol occurrences by each intermediate index, and for each decoding range, calculating (first index entry+f mod (last index entry−first index entry+1)) from the decoded entries of the accumulation table of symbol occurrences, decoding each intermediate index entry of the decoding range, and calculating (f div (last index entry−first index entry+1)) to update f; (ii) calculating the table of symbol occurrences from the decoded entries of the cumulative table of symbol occurrences; and means for applying the table of decoded symbol occurrences to entropy decode the encoded sequence of symbols represented by the at least one data block, whereby at least a portion of the entropy decoded sequence of symbols represents a graphic and / or a graphic animation movement, and for generating an animated graphic based at least in part on the entropy decoded sequence of symbols.

[0052] In this embodiment, the following configuration may be further adopted.

[0053] further comprising means for receiving a second integer value m; In (i), a zero value may be used as a lower limit of the accumulation table of symbol occurrences, and the received second integer value m may be used as an upper limit of the accumulation table of symbol occurrences.

[0054] further comprising means for receiving a second integer value m; In (i), a zero value may be inserted as a first entry in the accumulation table of symbol occurrences, and the received second integer value m may be inserted as a last entry in the accumulation table of symbol occurrences.

[0055] The second integer value m may be obtained from header metadata of the encoded sequence of symbols.

[0056] In (i), each entry of the accumulation table may be decoded by traversing the tree of the divided decoding range and performing division at each node in the tree before the child node of the node.

[0057] In (i), the tree of the divided decoding range may be traced in depth-first order, and each entry of the accumulation table may be decoded by performing division at each node of the tree.

[0058] The integer value f may be expressed as a bignum.

[0059] It may further comprise means for renormalizing to allow faster and more memory efficient decoding.

[0060] The encoded symbol string may include a set of different components including a token, a literal length, a literal, an offset, and a match length of a sequence of LZ4 blocks.

[0061] When using the integer value f, entries in the table of symbol occurrences may be restored using only integer arithmetic, shifts, logical operations, loads and stores.

[0062] The entropy decoding may be an asymmetric number system (ANS) entropy decoding.

[0063] In (i), the sequential division and the calculation may be performed repeatedly or recursively for each decoding range. And / or the system may further include means for independently decoding each segment of the encoded symbol sequence obtained by performing entropy-based binary segment division on the symbol sequence and reconstructing the symbol sequence based on segment headers. And / or the system may further include means for executing instructions losslessly reconstructed by decoding the received entropy-coded symbol sequence. And / or the system may further include means for at least partially decoding the entropy-coded symbol sequence in a cloud environment.

[0064] The system may further comprise at least one graphics processing means for generating at least a portion of an interactive graphics display based at least in part on graphics data losslessly reconstructed by decoding the entropy-coded symbol sequence.

[0065] The system may further include an emulator that generates the animated graphic based at least in part on the entropy-decoded symbol sequence.

[0066] An exemplary embodiment of an encoding method implemented using at least one processor and / or processing circuitry includes generating a table of symbol occurrences based on the occurrences of symbols in a sequence of symbols to be entropy encoded; entropy encoding the sequence of symbols using the table of symbol occurrences; and encoding the table of symbol occurrences using an integer value f, the table including: (i) calculating a cumulative table of symbol occurrences from said table of symbol occurrences; (ii) encoding each entry of the accumulation table of symbol occurrences by sequentially dividing the encoding range of the accumulation table by each intermediate index, and for each encoding range, encoding the entry of each intermediate index of the encoding range by calculating f × (entry of last index − entry of first index + 1) + (entry of each intermediate index − entry of the first index), thereby updating f. forming at least one data block representing the entropy coded sequence of symbols and the resulting integer value f encoding the table of symbol occurrences.

[0067] The above corresponds to the exemplary embodiment described in detail below.

[0068] <<Cumulative Interpolation Coding>> encodes table F in the following way:

[0069] Calculating table C from table F

[0070] Encode table C using <<interpolated encoding>>

[0071] In this embodiment, the following configuration may be further adopted.

[0072] The encoding may further include generating a second integer value m, using a zero value as a lower bound of the accumulation table of symbol occurrences, and using the generated second integer value m as an upper bound of the accumulation table of symbol occurrences.

[0073] The encoding may further include generating a second integer value m, inserting a zero value as a first entry in the accumulation table of symbol occurrences, and inserting the generated second integer value m as a last entry in the accumulation table of symbol occurrences.

[0074] The encoding may include including the second integer value m as metadata in a header associated with the encoded sequence of symbols.

[0075] The encoding may further include encoding each entry of the accumulation table by walking a tree of divided encoding ranges and performing a multiplication at each node after each node's child node.

[0076] The encoding may further include encoding each entry of the accumulation table by depth-first traversing the tree of the divided encoding range in reverse order and performing multiplication at each node.

[0077] The encoding may further include representing the generated integer value f as a bignum.

[0078] The encoding may further include renormalizing to allow for faster and more memory efficient decoding.

[0079] The symbol string may include a set of different components including a token, a literal length, a literal, an offset, and a match length of a sequence of LZ4 blocks.

[0080] When using the integer value f, entries in the table of symbol occurrences may be encoded using only integer arithmetic, shifts, logical operations, loads and stores.

[0081] The entropy coding may be asymmetric number system (ANS) entropy coding.

[0082] The encoding may further include repeating or recursively performing the sequential division and the calculation for each of the encoding ranges, and / or independently encoding each segment of the encoded symbol sequence obtained by performing entropy-based binary segment division of the symbol sequence and specifying an order of each segment of the symbol sequence in a segment header.

[0083] The sequence of symbols may include losslessly encoded executable instructions and / or a sequence of bits configured to control a graphics processing unit to generate at least a portion of an interactive graphical display.

[0084] The encoding may further comprise segmenting the symbol sequence prior to encoding using entropy-based binary segmentation, which at each segmentation step reduces or minimizes the sum of the entropy and size of the resulting symbol occurrence tables for all segments.

[0085] One embodiment of a system for generating an animated graphic includes at least one storage means; means for generating a table of symbol occurrences based on occurrences of symbols in a symbol sequence that contributes at least in part to generating the animated graphic, the symbol sequence being entropy coded; means for entropy coding the symbol sequence using the table of symbol occurrences; and means for encoding the table of symbol occurrences using an integer value f, the table including: (i) calculating a cumulative table of symbol occurrences from said table of symbol occurrences; (ii) encoding each entry of the accumulation table of symbol occurrences by sequentially dividing the encoding range of the accumulation table by each intermediate index, and for each encoding range, encoding the entry of each intermediate index of the encoding range by calculating f × (entry of last index − entry of first index + 1) + (entry of each intermediate index − entry of the first index), thereby updating f. means for forming at least one data block representing said entropy coded symbol sequence and an integer value f representing said coded symbol occurrence table; The storage device may include means for storing the at least one data block in the storage device.

[0086] In this embodiment, the following configuration may be further adopted.

[0087] The method may further include means for generating the second integer value m, and in (ii), a zero value may be used as a lower limit of the accumulation table of symbol occurrences, and the generated second integer value m may be used as an upper limit of the accumulation table of symbol occurrences.

[0088] The method may further include means for generating the second integer value m, and in (ii), a zero value may be inserted as the first entry of the accumulation table of symbol occurrences, and the generated second integer value m may be inserted as the last entry of the accumulation table of symbol occurrences.

[0089] The second integer value m may be included as metadata in a header associated with the encoded sequence of symbols.

[0090] In (ii) above, each entry of the accumulation table may be coded by traversing the tree of the divided coding range and performing multiplication at each node after the child node of each node.

[0091] In (ii), the method may further include encoding each entry of the accumulation table by depth-first traversing the tree of the divided coding ranges in reverse order and performing multiplication at each node, and / or representing the received integer value f as a bignum and / or renormalizing it to enable faster and more memory-efficient encoding.

[0092] The symbol string may include a set of different components including a token, a literal length, a literal, an offset, and a match length of a sequence of LZ4 blocks.

[0093] When using the integer value f, entries in the table of symbol occurrences may be encoded using only integer arithmetic, shifts, logical operations, loads and stores.

[0094] The entropy coding may be asymmetric number system (ANS) entropy coding.

[0095] In (ii), the sequential division and the calculation may be repeated and / or recursively performed for each of the coding ranges, and / or the method may further include means for independently encoding each segment of the coded symbol sequence obtained by performing entropy-based binary segment division on the symbol sequence, and specifying the order of each segment of the symbol sequence in a segment header.

[0096] The sequence of symbols may include losslessly encoded executable instructions.

[0097] The sequence of symbols may include a sequence of bits configured to control at least one graphics processing unit to generate at least a portion of an interactive graphical display.

[0098] The method may further include segmenting the symbol string using entropy-based binary segmentation before encoding, wherein the entropy-based binary segmentation reduces or minimizes the total entropy and size of the symbol occurrence tables for all resulting segments at each segmentation step.

[0099] An embodiment of the program includes a computer including: means for accessing an integer value f that encodes a table of symbol occurrences; and means for decoding the table of symbol occurrences using the integer value f, the table including: (i) decoding each entry of the accumulation table of symbol occurrences by sequentially dividing the decoding range of the accumulation table of symbol occurrences by each intermediate index, and for each decoding range, calculating (first index entry+f mod (last index entry−first index entry+1)) from the decoded entries of the accumulation table of symbol occurrences, decoding each intermediate index entry of the decoding range, and calculating (f div (last index entry−first index entry+1)) to update f; (ii) calculating the table of symbol occurrences from the decoded entries of the cumulative table of symbol occurrences; may also be provided.

[0100] In this embodiment, the following configuration may be further adopted.

[0101] The method may further include causing the computer to function as means for receiving a sequence of symbols that has been entropy coded using a table of symbol occurrences, and means for entropy decoding the received sequence of coded symbols by applying the calculated table of symbol occurrences, and / or streaming data representing at least a portion of a graphical user interaction using at least a portion of the entropy decoded sequence of symbols, and / or executing at least a portion of the entropy decoded sequence of symbols, and / or streaming information based on at least a portion of the entropy decoded sequence of symbols.

[0102] The computer may further function as a means for receiving a second integer value m, and in (i), a zero value may be used as a lower limit of the accumulation table of symbol occurrences, and the received second integer value m may be used as an upper limit of the accumulation table of symbol occurrences.

[0103] The computer may further function as a means for receiving a second integer value m, and in (i), inserting a zero value as a first entry in the accumulation table of symbol occurrences, and inserting the received second integer value m as a last entry in the accumulation table of symbol occurrences.

[0104] The second integer value m may be obtained from header metadata of the encoded sequence of symbols.

[0105] In (i), each entry in the accumulation table may be decoded by traversing the tree of the divided decoding range and performing a division at each node in the tree before the child node of each node, and / or the entry in the accumulation table may be decoded by traversing the tree of the divided decoding range in depth-first order and performing a division at each node in the tree.

[0106] In this embodiment, the following configuration may be further adopted.

[0107] The received integer value f may be expressed as a bignum.

[0108] It may further include renormalizing to allow for faster and more memory efficient decoding.

[0109] The encoded symbol string may include a set of different components including a token, a literal length, a literal, an offset, and a match length of a sequence of LZ4 blocks.

[0110] When using f, entries in the table of symbol occurrences may be recovered from the integer value f using only integer arithmetic, shifts, logical operations, loads and stores.

[0111] The entropy decoding may be an asymmetric number system (ANS) entropy decoding.

[0112] In (i), the sequential division and the calculation may be repeated for each of the decoding ranges, and / or the sequential division and the calculation may be performed recursively for each of the decoding ranges.

[0113] The computer may further function as a means for independently decoding each segment of the encoded symbol sequence obtained by performing entropy-based binary segmentation of the symbol sequence, and for reconstructing the symbol sequence based on the segment headers.

[0114] An embodiment of a method for operating a cloud-based device includes sending commands and / or control signals via at least one network and / or communication link to a remotely located decoder processor and / or decoder processing circuit, wherein the commands and / or control signals cause the remotely located decoder processor and / or decoder processing circuit to access an integer value f that encodes a table of symbol occurrences, and to decode the table of symbol occurrences using the integer value f, the table comprising: (i) decoding each entry of the accumulation table of symbol occurrences by sequentially dividing the decoding range of the accumulation table of symbol occurrences by each intermediate index, and for each decoding range, calculating (first index entry+f mod (last index entry−first index entry+1)) from the decoded entries of the accumulation table of symbol occurrences, decoding each intermediate index entry of the decoding range, and calculating (f div (last index entry−first index entry+1)) to update f; (ii) calculating the table of symbol occurrences from the decoded entries of the cumulative table of symbol occurrences; The system may perform operations including applying the calculated table of symbol occurrences to entropy decode an encoded sequence of symbols, and receiving, via the at least one network and / or communication link, visual and / or audio information generated or provided at least in part using the entropy decoded sequence of symbols.

[0115] In this embodiment, the following configuration may be further adopted.

[0116] The receiving may include receiving data representing at least a portion of at least one graphical presentation based at least in part on the entropy decoded sequence of symbols.

[0117] The method may further include receiving a second integer value m, and using a zero value as a lower limit of the accumulation table of symbol occurrences and using the received second integer value m as an upper limit of the accumulation table of symbol occurrences.

[0118] The method may further include receiving a second integer value m, inserting a zero value as a first entry in the accumulation table of symbol occurrences, and inserting the received second integer value m as a last entry in the accumulation table of symbol occurrences.

[0119] The second integer value m may be obtained from header metadata of the encoded sequence of symbols.

[0120] The method may further include decoding each entry of the accumulation table by traversing a tree of the divided decoding ranges and performing a division at each node of the tree before a child node of the node. Each entry of the accumulation table may be decoded by traversing the tree of the divided decoding ranges in depth-first order and performing a division at each node of the tree.

[0121] The received integer value f may be expressed as a bignum.

[0122] The method may further include renormalizing to allow faster and more memory efficient decoding.

[0123] The encoded symbol string may include a set of different components including a token, a literal length, a literal, an offset, and a match length of a sequence of LZ4 blocks.

[0124] Using the received integer f, entries in the table of symbol occurrences may be restored using only integer arithmetic, shifts, logical operations, loads and stores.

[0125] The entropy decoding may be an asymmetric number system (ANS) entropy decoding.

[0126] The method may further include repeating or recursively performing the sequential division and the calculation for each of the decoding ranges, and / or independently decoding each segment of the encoded symbol sequence obtained by performing entropy-based binary segment division on the symbol sequence and reconstructing the symbol sequence based on segment headers, and / or executing, on at least one processor, instructions losslessly reconstructed by decoding the received entropy-coded symbol sequence, and / or generating, using at least one graphics processing unit, at least a portion of an interactive graphics display based at least in part on graphics data losslessly reconstructed by decoding the received entropy-coded symbol sequence.

[0127] Any of the features described above may be used in combination with other features or combinations of other features. [Brief explanation of the drawings]

[0128] [Figure 1] A diagram showing the traditional LZ4 / ANS encoding process. [Figure 2A] FIG. 1 illustrates an example of an encoding and decoding system. [Figure 2B] FIG. 1 illustrates an example of an encoding and decoding system. [Figure 3] Diagram showing an example of the new LZ4 compression / ANS entropy coding process. [Figure 4] Schematic example of encoding and decoding of a table of symbol occurrences of size 4. The encoding of the whole table is f=147. [Figure 5A] FIG. 1 shows an example of a series of encoding steps. [Figure 5B] FIG. 1 shows an example of a sequence of decoding steps. [Figure 5C]FIG. 10 shows an example of encoding and decoding steps. [Figure 6] FIG. 10 illustrates an example forward pass for estimating the compressed size of a left child segment. [Figure 7] FIG. 10 illustrates an example of a backward pass to estimate the compressed size of a right child segment. [Figure 8] An example of the sum of the estimated compressed sizes of two child segments, with the index of the minimum of this sum representing the optimal potential cut point. [Figure 9] A schematic diagram of an example of segmentation. Each box represents a column segment. S(n) is the estimated compressed size of the segment with index n, calculated as the sum of its zeroth-order entropy and the size of the compressed byte-occurrence table. [Figure 10] FIG. 1 is a diagram showing an example of a conventional LZ4 block sequence format. [Figure 10A] FIG. 1 is a diagram showing an example of a conventional LZ4 block sequence format. [Figure 11] Schematic diagram showing an example of the new encoding of LZ4 blocks. [Figure 12A] 1 is a schematic diagram of an exemplary compressed file format. [Figure 12B] 1 is a schematic diagram of an exemplary compressed file format. [Figure 12C] FIG. 10 is a diagram showing an example of a file header format. [Figure 12D] A diagram showing an example of a block header format. [Figure 12E] FIG. 10 is a diagram showing an example of a stream header format. [Figure 12F] FIG. 10 is a diagram showing an example of a segment header format. [Figure 13A] A diagram showing an example of use. [Figure 13B] A diagram showing an example of use. [Figure 13C] A diagram showing an example of use. [Figure 13D] A diagram showing an example of use. [Figure 13E] A diagram showing an example of use. [Figure 13F]A diagram showing an example of use. [Figure 13G] A diagram showing an example of use. [Figure 13H] A diagram showing an example of use. [Figure 14A] 13C is a flowchart illustrating an example of an operation performed by the application server of FIG. 13H. [Figure 14B] 13C is a flowchart illustrating an example of operations performed by the presentation system of FIG. 13H. DETAILED DESCRIPTION OF THE INVENTION

[0129] Example of an encoding / decoding system

[0130] 2A and 2B show an example of an encoding and decoding system. One or more input files 50 (which may be stored on a storage medium) containing strings of symbols are encoded by an encoding device 56 to generate compressed data streams or data files 54. The compressed data streams or data files 54 are communicated from the encoding device 56 to one or more decoding devices 58. The decoding devices 58 may be located remotely from the encoding device 56 or may be located together with the encoding device. The communication medium for communicating the compressed data streams from the encoding device 56 to the decoding devices 58 may comprise a memory storage device, a network, a wireless link, a cable, a signal path, and / or any other configuration for communicating digital data from one component to one or more other components.

[0131] Decoder device(s) 58 decodes compressed data streams or data files 54 to recover input files 52. In an exemplary embodiment, the compression is lossless, so the recovered input files are an exact match for the original input files. In the illustrated non-limiting embodiment, decoder device 58 may recover one or more input files 52 for use in generating real-time or other graphics presentations, such as interactive video games.

[0132] FIG. 2B illustrates an encoding device 56 and a decoding device 58, each of which includes a processing configuration consisting of one or more central processing units (CPUs) and / or one or more graphics processing units (GPUs) and / or one or more processing circuits. In some use cases, the decoding device 58 preferably includes custom-designed hardware such as one or more application-specific integrated circuits (ASICs), and the encoding device 56 preferably includes one or more CPUs and / or GPUs and one or more non-transitory memory devices on which encoding instructions executed by the one or more CPUs and / or GPUs are stored. However, such configurations are not limited to these. In some use cases, the encoding device 56 and the decoding device 58 may each include software executed on one or more processors stored in non-transitory memory. In other use cases, both the encoding device 56 and the decoding device 58 may include hardware circuitry (e.g., consisting of transistor-based logic gates, arithmetic units, registers, etc.) provided by one or more ASICs or other hardware configurations.

[0133] In some embodiments, encoder device 56 and decoder device 58 are the same device (or are in such a common package) that can operate in both encoding and decoding modes. Such devices capable of both encoding and decoding are commonly referred to as "codecs." In other embodiments, encoder device 56 is structured differently from decoder device 58, such that encoder device 56 only encodes and does not decode, and decoder device 58 only decodes and does not encode.

[0134] As shown in FIG. 3, encoder device 56 losslessly encodes input file 10 into compressed, entropy-encoded file 14 using both LZ4 compression and ANS entropy coding. That is, in an exemplary embodiment, encoder device 56 may receive an input file that has already been compressed with LZ4 and may compress the file using LZ4 compression. Encoder device 56 entropy encodes the compressed input file, which consists of a sequence of symbols, and converts it into a corresponding entropy code. Similarly, decoder device 58 entropy decodes entropy-encoded file 14 to recover the compressed input file. The recovered input file may then be decompressed using LZ4 to recover the original uncompressed input file.

[0135] In one exemplary embodiment, the codebook or table 16 used by encoder 56 to entropy encode the compressed file and to reconstruct the entropy encoded file is itself encoded / compressed using a cumulative interpolation encoding technique, e.g., based on "binary interpolation coding" ("BIC"). Thus, encoder 56 losslessly encodes codebook or table 16 to generate compact encoded data for communication to decoder 58. Decoder 58 decodes the encoded data to reconstruct codebook or table F, which is used to decode entropy encoded file 14 and reconstruct the original file 10.

[0136] Entropy Table Compression

[0137] Entropy coding may involve creating a table F of symbol occurrences (also called a "codebook"). To compress the symbol occurrence table F, the following method (Algorithm 1) may be used. Calculate the table C (FIG. 3, reference number 18) of accumulated values ​​of F. Recursively encode the values ​​of table C using cumulative interpolation coding, such as binary interpolation coding (“BIC”), to produce the coded data, i.e., the stored integer values ​​f.

[0138] Further information regarding BIC can be found, for example, in Moffat et al., "Binary Interpolative Coding for Effective Index Compression." Information Retrieval 3, 25-47(2000).doi.org / 10.1023 / A:1013002601898, link.springer.com / article / 10.1023 / A:1013002601898;Turpin et al., Housekeeping for prefix coding, IEEE Transactions on Communications 48(4):622-628, 48(4):622-628(May 2000 DOI:10.1109 / 26.843129);Moffatt et al., Large-Alphabet Semi-Static Entropy Coding Via Asymmetric Numeral Systems, ACM Transactions on Information Systems 38(4) May 2020 DOI:10.1145 / 3397175;Trotman, "Compressing Inverted Files,” Information Retrieval 6, 5-19 (2003).

[0139] In the example configuration shown in FIG. 3, the encoding of table C (and therefore table F) is represented by the integer f(20). Thus, the integer value f constitutes the encoded data of table F of symbol occurrences. This integer f can be very large, and its size is generally unknown in advance, nor is the amount of memory required to store it. To solve this problem, one embodiment uses the "bignum" structure (http: / / en.wikipedia.org / wiki / Arbitrary-precision_arithmetic), which can represent arbitrary precision integers (although other embodiments may use other alternative representations). Dividing a bignum at each decoding step actually means multiple divisions. For example, if a bignum is represented by n 32-bit values, n divisions are required. To achieve faster and more memory-efficient decoding, a "renormalization" step can be added to each encoding and decoding step. Renormalization keeps the encoded values ​​within a small, manageable range throughout the encoding / decoding process, avoiding the need to perform operations on very large integers. To keep the integer values ​​within a small range, encoding can write the least significant bits of an integer value to a buffer whenever the integer value exceeds a threshold. In this case, each decoding step requires only a single division of a relatively small integer (and optionally reading bits from a buffer), instead of the division of a very large integer or multiple divisions of small integers that would be required using a bignum structure. While this early release of bits may result in a slight loss of compression, it is generally negligible compared to the speed and memory efficiency. Renormalization is often used to improve ANS encoding (graphallthethings.com / posts / streaming-ans-explained / #:~:text=Streaming%20and%20normalization). While using such renormalization can make some implementations more efficient, other implementations may instead use repeated divisions at each step (e.g., when speed is not an issue or when implemented with fast hardware).

[0140] This non-limiting example also assumes the following: The symbol sequence is encoded as 8-bit symbols, so the table F(16) contains 256 elements. In the proposed implementation, this can be easily generalized to a table with 2^k elements (k>0), where k is the symbol size in bits, or to tables of any size with minor modifications, such as padding with leading zeros to revert to the power-of-two case. The number m of symbols in the symbol sequence, i.e., the total number of occurrences in table F (16) and the last value in table C (18), does not need to be coded because it is known at decoding time and provided to the decoder. This is a reasonable assumption in most practical use cases where the data file or message to be coded is predetermined and not randomly generated in real time during coding, especially since entropy encoders such as ANS require this value to start decoding. More precisely, the number m of symbols is stored in the compressed file because it is needed to decompress it. Therefore, both the ANS decoder and the interpolation decoder obtain this value when they receive a compressed file containing it. This value can then be used by the interpolation decoder as the last value in table C. In a non-limiting example, this value is stored in the header metadata preceding the coded data f in the symbol occurrence table. For example, in Figures 12A-12B, each "segment data" (616, 618) consists of entropy-encoded data s of a symbol string and interpolation-encoded data f of the corresponding symbol occurrence table used for entropy encoding, preceded by a segment header (608) containing metadata necessary for decoding the segment data. In this example file format, the number of codes m (used as the input integer value m for the interpolation decoder) is stored in the segment header (608) as "[u8] Raw data size." In other embodiments, the number may be sent to the interpolation decoder in other ways, such as along with the symbol occurrence table encoding data.

[0141] Below we describe the algorithm using Python-oriented pseudocode. In particular, as shown in Algorithm 1 and Algorithm 2, when we define one function inside another, the inner function can access the variables of the outer function as if they were "global" variables. We want all calls to the recursive function to update the same encoded data as if it were "shared" by them. The implementation may vary depending on the programming language. For example, in C or C++, we could implement the algorithm using two independent functions and pointers to the table C and the encoded data f.

[0142] Algorithm 1: Accumulative Interpolation Coding (Recursive Implementation) JPEG0007789255000002.jpg161170

[0143] Algorithm 2: Accumulative Interpolation Decoding (Recursive Implementation) JPEG0007789255000003.jpg183170

[0144] Additional notes

[0145] As can be seen from the above, in the embodiment, f is updated from the entries of the accumulation table at each encoding step (intermediate entries are encoded). In the embodiment, there is no need to generate entries, and only the integer f is updated. Therefore, the encoding process of the embodiment updates f at each encoding step by calculating f × (last index entry−first index entry+1)+(intermediate index entry−first index entry) from the accumulation table of symbol occurrences.

[0146] This differs from the decoding in the embodiment, which performs the following first and second operations at each decoding step to generate entries and update f: (1) from the accumulation table of partially decoded symbol occurrences, calculate the first index entry + f mod (last index entry - first index entry + 1) and decode the intermediate index entries in the decoding range, and (2) calculate f div (last index entry - first index entry + 1) and update f.

[0147] Example

[0148] Figure 4 shows an example of encoding and decoding of table C calculated from table F of size 4 with m=10. Since the value 10 is known at the time of decoding, only three values ​​less than 10 need to be encoded. In a simple encoding, (┌·┐ is the ceiling function, see en.wikipedia.org / wiki / Floor_and_ceiling_functions). This requires a total of 3 × 4 = 12 bits to encode table C. However, as shown in Figure 1, the technique in this example encodes the three values ​​stepwise and sequentially (e.g., in one example, iteratively) into a sequence of intermediate representations, resulting in the integer f = 147, which means that table C is This means that the image is encoded as JPEG0007789255000005.jpg5170.

[0149] More specifically, FIG. 4 shows an example of an encoding process used to encode an input file table F, where a representation 102 of the input file table F is shown as a histogram with an array of values ​​F0, F1, F2, and F3, each having an integer number of occurrences of 3, 1, 2, and 4, respectively.

[0150] A C array 104 of 257 zero values ​​is defined above (C1=F0, C i =Ci-1 +F i-1 etc.), i min is defined as the first index of the range, and i max is defined as the last index of the range.

[0151] Since the value 10 is known at decoding time, only three values ​​less than 10 are coded, see 106. An interpolation coding technique such as BIC is used with three iterations as an operation on table C to code the three values ​​as a single coded integer 147.

[0152] 0x(6+1)+2=2 (operation step 110)

[0153] 2x(4+1)+3=13 (operation step 112)

[0154] 13 x (10 + 1) + 4 = 147 (calculation step 114)

[0155] In the right part of Figure 4, the decoding process starts with the value 10 known (see array 116) and receives the value 147. The decoding process then performs these decoding steps to reconstruct each intermediate table C shown on the left.

[0156] 147 mod (10+1)=4 (decoding step 116 a ) produces array 118 that matches the defined portion in intermediate array 104 .

[0157] 147÷(10+1)=13 (decoding step 118a)

[0158] 13 mod (4+1)=3 (decoding step 118 b ) results in an array 120 that matches the defined portion of intermediate C array 106 .

[0159] 13div(4+1)=2 (decoding step 120a)

[0160] 2 mod (6+1)=2 (decoding step 120 b ) results in an array 122 that matches the defined portion of intermediate C array 108 .

[0161] 2div(6+1)=0 (decoding step 122a) results in an array 124 that is an exact match with the original F array 102 (i.e., the original frequency array is recovered without any loss).

[0162] In the above example, the encoding is dynamic / adaptive, meaning that the next f operation (in the encoder case) can change for each operation.

[0163] JPEG0007789255000006.jpg6170

[0164] For reference, in Figure 4, the change is "6" -> "4" -> "10" (the reverse order occurs when decoding). This operation (at the decoder) divides the received integer value by a dynamically changing value, resulting in a series of remainder values, which can be thought of as changing depending on the maximum and minimum values ​​of the range being operated on.

[0165] In other respects, the algorithms described above are recursive and are executed iteratively, and while such recursive program code is elegant (compact and efficient), they can instead be implemented using "sequential operations" where each operation is written "sequentially" one at a time, for example using inline code rather than loops or recursions (i.e., functions that call themselves). On the other hand, hardware configurations can include multiple passes of data through the same circuit, or a series or succession of operation circuits, such as a pipeline, or both.

[0166] Example: Compression of symbol strings

[0167] To compress a sequence of symbols (e.g. a file), one simply integrates the above algorithm with the ANS encoding / decoding.

[0168] Algorithm 3: Encoding a string of symbols input: -S: Arbitrary size sequence of symbols Compute a table F of symbol occurrences (Figure 5A, block 152) Encode F through S using an ANS encoder to obtain symbol sequence encoded data s (FIG. 5A, block 154). Encode F using Algorithm 1 to obtain table-encoded data f (Figure 5A, block 156). Concatenate s and f to obtain the coded segment S' (Figure 5A, block 158) Output: S'

[0169] Algorithm 4: Decoding a symbol sequence input: -S': A sequence of any size encoded using algorithm 5 Divide S' to obtain symbol string encoded data s and table encoded data f (FIG. 5B, block 162). Decode f with Algorithm 2 to obtain a table of symbol occurrences F (Figure 5B, block 164) Decode s from F with the ANS decoder to obtain the decoded segment S (Figure 5B, block 166). Output: S (Figure 5B, block 168)

[0170] 5C is an overview of one example of the overall encoding and decoding steps, which may be performed by the same component operated by the same party, by the same component operated by different parties, or by different components operated by different parties. In this example, the encoding step of Table F and the decoding step of Table F are characterized as a "cumulative interpolation algorithm," which, in certain embodiments, may also be referred to by those skilled in the art as "binary interpolation coding" (BIC).

[0171] An example of binary segmentation

[0172] When the symbol distribution changes significantly within a symbol sequence, higher compression ratios can sometimes be achieved by splitting the symbol sequence into multiple segments with uniform distributions and compressing these segments separately. To do this, we cut out the symbol sequence where a significant change in distribution occurs. Detecting such "change points" in the probability distribution of a stochastic process (a sequence of random variables) is a well-known problem called change point detection. See, for example, en.wikipedia.org / wiki / Change_detection. Here, we propose a custom greedy algorithm with a top-to-bottom binary segment split.

[0173] Our segmentation algorithm splits a symbol string into two segments if the sum of the estimated compressed sizes of the two segments is less than the estimated compressed size of the symbol string. To do this, we iterate through the symbol string and, for each added symbol, calculate the (zeroth order) entropy of the underlying segment. This gives, for each symbol, the estimated compressed size of the first of the two segments (the left child segment) if we decide to cut the string at that position. In practice, to save computation time, we perform this evaluation every N symbols.

[0174] To estimate the compressed size of the second segment (the right-hand child segment), we perform the same calculation while traversing the symbol sequence in reverse order. The entropy of a symbol sequence, calculated from the symbol occurrences, is the same regardless of the direction of repetition. We then add the two estimates obtained for each symbol and select the cut point that minimizes the sum.

[0175] Once the cut point is determined, the proposed compression method is used to compare the sum of the compressed sizes of the two child segments obtained with the compressed size of the parent segment. To do this, it is not necessary to actually compress the segment. The (zeroth-order) entropy is a fairly accurate estimate of the compressed size of a column using an ANS encoder with a frequency table as a two-part code, and does not include the storage size of the ANS table itself. Therefore, to calculate the entropy, the already calculated ANS table is compressed using a cumulative interpolation algorithm, and the entropy of the segment is added to the compressed size to obtain the compressed size of the segment. Next, if the sum of the compressed sizes of the child segments is smaller than the compressed size of the parent segment, segment splitting is performed; otherwise, it is not performed.

[0176] After segment splitting, the same algorithm is applied recursively to two child segments, gradually building a segment tree. See, for example, en.wikipedia.org / wiki / Segment_tree. At the end of the algorithm, we obtain the leaf segments in the segment tree. Since we only cut node segments when it is beneficial, the leaf segments represent the optimal segment split provided by the algorithm in the segment tree, as shown in Figure 9.

[0177] Figures 6, 7, 8 and 9 show an example of finding a break point in a byte string. The string was generated by concatenating two strings obtained by randomly drawing bytes according to two different Gaussian distributions. The first string is 12000 bytes long and the second is 8000 bytes long. Thus, the entire string has a size of 20000 bytes, with a change in distribution around byte 12000. As shown below, the algorithm clearly identifies a break point around byte 12000.

[0178] If the symbol string is segmented using this binary segmentation, the compression and decompression algorithm for the symbol string is as follows:

[0179] Algorithm 5: Encoding a string of symbols by segmentation input: -S: Arbitrary size sequence of symbols Segment S using binary segmentation and divide the segments (S i ) i=1···N get. Each segment S i About: Using Algorithm 3, i Encode the segment S i ' is obtained. Encoding Segment (S i ') i=1···N and concatenate them to obtain the encoded sequence S'. Output: S'

[0180] Algorithm 6: Decrypting a sequence by segmentation input: -S': A sequence of any size encoded using algorithm 5 Divide S' into coded segments (S i ') (i=1···N) get. Each coded segment S i About: Using Algorithm 4, i Decode segment S' i get. Decrypted Segment (S i ) i=1···N Concatenate these to get the decoded string S. Output: S

[0181] In Algorithm 5, concatenating the coded segments involves storing one or more special headers that allow the coded stream to be split into coded segments upon decoding. The above details an example configuration, but there are several ways to do this.

[0182] As mentioned above, most of the segmentation work is done on the encoder side, but the decoder at least "knows" that it is operating on segments, as it concatenates the decoded segments in the proper order into a continuous file or stream.

[0183] LZ4 block compression

[0184] We propose to apply the above compression method to LZ4 compression. As explained in the LZ4 document at github.com / lz4 / lz4 / blob / dev / doc / lz4_Block_format.md and shown diagrammatically in Figures 10 and 10A, an LZ4 compressed block is composed of "sequences," and each sequence is composed of five streams as follows: Tokens Literal length Literals offset, and Match length

[0185] These streams are explained in detail in the LZ4 document mentioned above and in the blog post "LZ4 Explained" (fastcompression.blogspot.com / 2011 / 05 / lz4-explained.html). Because an LZ4 block consists of many such sequences, we group all the different streams of block sequences into five groups. Then, for each group, we concatenate the streams into a single sequence and compress it using Algorithm 5 above. Depending on the size of each group of streams, we may be able to compress only some of them.

[0186] This method achieves significantly better compression than LZ4 alone (experiments show an additional compression of 21.2% ± 2.5%) and also allows for faster decompression.

[0187] FIG. 11 is an overview of an exemplary algorithm for encoding an LZ4 block. FIG. 11 also illustrates all of the encoding algorithms described above. In this example, file X 502 is parsed by a processor using a conventional LZ4 encoder 504 to generate an LZ4 block 506 containing multiple LZ4 sequences, resulting in multiple files 508A, 508B, 508C, 508D, and 508E. Each of these files 508 is processed by Algorithm 5, which divides each file into segment files 512 as described above. This generates multiple files 512(S1) through 512(Sn) for each of 508A, 508B, 508C, 508D, and 508E. Each of segment files 512(S1) through 512(Sn) is processed by Algorithm 3 using ANS entropy coding to generate entropy-encoded data (integer s i , 514), and Algorithm 1 processes the symbol occurrence table F of the segment file entropy coded as above using interpolation coding to generate integer f i Also, Algorithm 3 generates an integer s i and an integer f i Concatenate these to create file S' i Then, create file S1', 516(S'1) from file S n A plurality of files from file A', 522A to file E', 522E correspond to file S', 520 (when file A', 508A is processed by algorithm 5, file S', 520 is used as file A', 522A). The resulting files 522A to 522E are concatenated and stored in file X', 524, which has the format shown in FIGS. 12A to 12B.

[0188] 12A and 12B show the file format of the compressed file 610. The compressed file 610 has a format having the following hierarchical structure: A compressed file 610 is composed of a file header 602 (see FIG. 12C) concatenated with file data 612. The file data 612 comprises one or more blocks, each of which is composed of a block header 604 (see FIG. 12D) and block data 614 concatenated together. Each block data 614 comprises one or more streams 607, each of which is made up of a stream header 606 (see FIG. 12E) and stream data 609 concatenated together. Each stream data 609 comprises one or more segments, each of which is made up of a segment header 608 (see FIG. 12F) and segment data 618 concatenated together.

[0189] In the illustrated example, there are multiple blocks 614(0),...,614(z). Each block 614 includes multiple streams 607. For example, block 614(0) includes streams 607(0),...,607(4), and block 614(z) includes streams 607(5),...,607(n). Each block 614 may include the same number of streams 607 or a different number of streams.

[0190] In the illustrated example, each stream 607 includes multiple segments, each including a segment header 608 and segment data 618. For example, stream 609(0) includes segment header 608(0)(0) and associated segment data 618(0)(0), ..., segment header 608(0)(i) and associated segment data 618(0)(i). Stream 609(1) also includes segment header 608(1)(0) and associated segment data 618(1)(0), ..., segment header 608(1)(j) and associated segment data 618(1)(j). In the illustrated example, stream 609(n) includes segment header 608(n)(0) and associated segment data 618(n)(0), ..., segment header 608(n)(t) and associated segment data 618(n)(t). The integer values ​​i, j, k, l, m, n, p, q, r, s, and t may be the same or different.

[0191] Each stream data from the file data 612 in FIGS. 12A-12B corresponds to each file from file A', 522A to file E', 522E in FIG. 11. The stream data within a stream may include segments 616 each preceded by a segment header 608. Segment data 616a, 616b, 616c, 616d, and 616j in FIG. 12A (corresponding to 618a, 618b, 618c, 618d, and 618k in FIG. 12B) correspond to files S_1', 516 (S'1) in FIG. 11, respectively, because all the initial segment data exists in those stream data. Files A'-E' actually correspond to each stream data.

[0192] Examples of the meaning of the "u" values ​​shown in the headers of 12C, 12D, 12E, and 12F are given below as illustrative embodiments.

[0193] u32: An unsigned integer that holds 32 bits of data

[0194] u8: An unsigned integer that holds 8 bits of data

[0195] u6: An unsigned integer that holds 6 bits of data

[0196] u4: An unsigned integer that holds 4 bits of data

[0197] u2: An unsigned integer that holds 2 bits of data

[0198] [u8]: Array of u8 values

[0199] The stream header 606 shown in FIG. 12E has a field called "u2 Additional Stream Size in Bytes" and a field called "[u8] Additional Stream Size b6···bN (Optional)." If the size (in bytes) of the "Stream Data" fits within 6 bits (b0···b5), i.e., the maximum size is 63 bytes, then "[u8] Additional Stream Size b6···bN (Optional)" is empty and "[u2 Additional Stream Size in Bytes" is 0. If the "Stream Data" exceeds 63 bytes (which is highly likely), more than 6 bits are used to encode its size. For example, if its size is 100 KB, the size is encoded in 17 bits (log2(100000) = 16.61), which means that 11 bits are added, and 2 bytes (u8) are added. In this case, "[u8] Additional Stream Size b6···bN" contains two bytes (b6···b21, two u8 tables), and "[u2 Additional Stream Size Bytes" is 2, which tells the decoder that it needs to read these two additional bytes after "[u6 Stream Size b0···b5" to get the complete stream size. Therefore, the decoder concatenates the first six bits (b0···b5) with the next two bytes (b6···b21) to get the stream size (b0···b21 in binary, representing the integer 100000).

[0200] 12A / 12B, compressed files can easily be "embedded" into other files without storing some or all of the illustrated headers. For example, when embedding an encoded file into a game compressed file, only the streams can be stored without storing the file header 602, block header 604, stream header 606, or segment header 608.

[0201] In one embodiment, data in the illustrated format may be stored in a non-transitory storage device and sent from the encoder to the decoder. For example, FIG. 13A illustrates an example of sending encoded data from an encoding device to a decoding device over any type of connection. FIG. 13B illustrates an example of sending encoded data from an encoding device to a decoding device over a network connection. Decoding by the decoder occurs in reverse, and the decoding device stores the decoded data in at least one non-transitory memory device as instructions or computer code executed by at least one processor for use. FIG. 13C also illustrates an intermediate application server that receives the encoded compressed data file from the encoding device and provides the encoded compressed data file to one or more application execution systems over a network. Each application execution system includes a decoder that decodes the encoded compressed data file and uses (e.g., executes) the decoded data to produce output. In FIG. 13C, the intermediate application server need not decode the encoded compressed data file; instead, it may store the encoded compressed data file “as received” for provision to the application execution server. Also, FIG. 13D shows another embodiment in which the application server may decode the encoded compressed data file, then re-encode the data, and provide the encoded compressed data file to the application execution system.

[0202] Figure 13E shows yet another embodiment, in which the application development system provides a data file to an application server via a network, and the application server encodes the data file and provides the encoded compressed data file to the application execution system via a network, etc. Figure 13F shows yet another embodiment, in which the application development system provides a data file to the application server via a path other than a network, and the application server encodes the data file and provides the encoded compressed data file to the application execution system via a network, etc.

[0203] Example I: Decryption Method

[0204] In one embodiment, a decoding method is performed using at least one processor and / or processing circuit, and the decoding method may include receiving a sequence of symbols that has been entropy coded using a table of symbol occurrences; receiving an integer value f that encodes the table of symbol occurrences; decoding the table of symbol occurrences using the received integer value f, the table including: (i) and (ii) below; and entropy decoding the received coded sequence of symbols using the decoded table of symbol occurrences. (i) decoding each entry of the symbol occurrence accumulation table by sequentially dividing the decoding range of the symbol occurrence accumulation table by each intermediate index, and for each decoding range, calculating (first index entry+f mod (last index entry−first index entry+1)) from the decoded entries of the symbol occurrence accumulation table to decode each intermediate index entry of the decoding range, and calculating (f div (last index entry−first index entry+1)) to update f; (ii) calculating the table of symbol occurrences from the decoded entries of the cumulative table of symbol occurrences;

[0205] For clarity, the "table of symbol occurrences" first mentioned above refers to table F, not cumulative table C, in the embodiments described in detail below. Specifically, <<accumulation interpolation encoding / decoding>> in the embodiments includes the conversion between table F and table C as described in (ii) above (hence the word <<accumulation>>). Thus, in the embodiments, table C is decoded at the end of (i), and table F is decoded at the end of (ii). Therefore, table F is decoded in (i) + (ii). In other words,

[0206] <<Cumulative Interpolation Decoding>> decodes table F in the following procedure.

[0207] i) Decode table C by <<interpolation decoding>>.

[0208] ii) Calculate Table F from Table C.

[0209] In one embodiment, the decoding may further include receiving a second integer value m, and using a zero value as a lower bound of the accumulation table of symbol occurrences and using the received second integer value m as an upper bound of the accumulation table of symbol occurrences.

[0210] In one embodiment, the decoding may further include receiving a second integer value m, inserting a zero value as a first entry in the accumulation table of symbol occurrences, and inserting the received second integer value m as a last entry in the accumulation table of symbol occurrences.

[0211] In one embodiment, the received second integer value m may be obtained from header metadata of the encoded symbol sequence.

[0212] In one embodiment, the method may further include decoding each entry of the accumulation table by traversing a tree of the divided decoding ranges and performing a division at each node of the tree before a child node of the node. Each entry of the accumulation table may be decoded by traversing a tree of the divided decoding ranges in depth-first order and performing a division at each node of the tree.

[0213] In one embodiment, the received integer value f may be represented as a bignum.

[0214] In one embodiment, this may further include renormalizing to allow for faster and more memory efficient decoding.

[0215] In one embodiment, the encoded symbol string may include a set of different components including a token, a literal length, a literal, an offset, and a match length of a sequence of LZ4 blocks.

[0216] In one embodiment, when using the received integer value f, entries in the table of symbol occurrences may be restored using only integer arithmetic, shifts, logical operations, loads and stores.

[0217] In one embodiment, the entropy decoding may be asymmetric code system (ANS) entropy decoding.

[0218] In one embodiment, the method may further include repeating or recursively performing the sequential division and the calculation for each of the decoding ranges.

[0219] In one embodiment, the method may further include independently decoding each segment of the encoded symbol sequence obtained by performing entropy-based binary segmentation on the symbol sequence, and reconstructing the symbol sequence based on segment headers.

[0220] In one embodiment, the method may further include executing, on at least one processor, instructions losslessly reconstructed by decoding the received entropy-encoded symbol sequence.

[0221] In one embodiment, the method may further include generating, using at least one graphics processing unit, at least a portion of an interactive graphics display based at least in part on graphics data losslessly reconstructed by decoding the received entropy-coded symbol sequence.

[0222] Example 2: Decoder

[0223] In one embodiment, the decoder may comprise means for accessing an integer value f that encodes a table of symbol occurrences, and means for using said integer value f to perform operations for decoding said table of symbol occurrences, including: (i) and (ii) below. (i) decoding each entry of the symbol occurrence accumulation table by sequentially dividing the decoding range of the symbol occurrence accumulation table by each intermediate index, and for each decoding range, calculating (first index entry+f mod (last index entry−first index entry+1)) from the decoded entries of the symbol occurrence accumulation table to decode each intermediate index entry of the decoding range, and calculating (f div (last index entry−first index entry+1)) to update f; (ii) calculating the table of symbol occurrences from the decoded entries of the cumulative table of symbol occurrences;

[0224] In this embodiment, the following configuration may be further adopted.

[0225] The method may further comprise means for receiving a sequence of symbols that has been entropy coded using a table of symbol occurrences, and means for entropy decoding the coded sequence of symbols by applying the calculated table of symbol occurrences, and / or means for executing at least a portion of the entropy decoded sequence of symbols, and / or means for streaming at least a portion of the entropy decoded sequence of symbols and / or information derived therefrom.

[0226] The operations may further include receiving a second integer value m, and using a zero value as a lower limit of the accumulation table of symbol occurrences and using the received second integer value m as an upper limit of the accumulation table of symbol occurrences.

[0227] The operations may further include receiving a second integer value m, inserting a zero value as a first entry in the accumulation table of symbol occurrences, and inserting the received second integer value m as a last entry in the accumulation table of symbol occurrences.

[0228] The operations may further include obtaining the received second integer value m from header metadata of the encoded sequence of symbols.

[0229] The operations may further include: decoding each entry in the accumulation table by traversing a tree of the split decoding ranges and performing a division at each node in the tree before its child nodes; and / or decoding each entry in the accumulation table by traversing a tree of the split decoding ranges in depth-first order and performing a division at each node in the tree.

[0230] The received integer value f may be expressed as a bignum.

[0231] The operations may further include renormalizing to allow for faster and more memory efficient decoding.

[0232] The encoded symbol string may include a set of different components including a token, a literal length, a literal, an offset, and a match length of a sequence of LZ4 blocks.

[0233] When using the integer value f, entries in the table of symbol occurrences may be restored using only integer arithmetic, shifts, logical operations, loads and stores.

[0234] The entropy decoding may be asymmetric signature (ANS) entropy decoding.

[0235] The operations may further include repeating or recursively performing the sequential division and the calculation for each of the decoding ranges, and / or independently decoding each segment of the encoded symbol sequence obtained by performing entropy-based binary segment division on the symbol sequence and reconstructing the symbol sequence based on segment headers, and / or executing instructions losslessly reconstructed by decoding the received entropy-coded symbol sequence, and / or generating, using at least one graphics processing unit, at least a portion of an interactive graphics display based at least in part on graphics data losslessly reconstructed by decoding the received entropy-coded symbol sequence.

[0236] Example 3: Decryption System

[0237] One embodiment of a system for generating animated graphics may include at least one storage means for storing (i) at least one data block representing a sequence of symbols entropy coded using a table of symbol occurrences, and (ii) an integer value f that encodes the table of symbol occurrences; means for performing an operation of decoding the table of symbol occurrences using the integer value f, the operation comprising: (i) and (ii) applying the decoded table of symbol occurrences to entropy decode the encoded sequence of symbols represented by the at least one data block; and means for generating animated graphics based at least in part on the entropy decoded sequence of symbols, at least a portion of which represents a graphic and / or graphic animation movement. (i) decoding each entry of the symbol occurrence accumulation table by sequentially dividing the decoding range of the symbol occurrence accumulation table by each intermediate index, and for each decoding range, calculating (first index entry+f mod (last index entry−first index entry+1)) from the decoded entries of the symbol occurrence accumulation table to decode each intermediate index entry of the decoding range, and calculating (f div) (last index entry−first index entry+1) to update f; (ii) calculating the table of symbol occurrences from the decoded entries of the cumulative table of symbol occurrences;

[0238] In this embodiment, the following configuration may be further adopted.

[0239] The operations may further include receiving a second integer value m, and using a zero value as a lower limit of the accumulation table of symbol occurrences and using the received second integer value m as an upper limit of the accumulation table of symbol occurrences.

[0240] The operations may further include receiving a second integer value m, inserting a zero value as a first entry in the accumulation table of symbol occurrences, and inserting the received second integer value m as a last entry in the accumulation table of symbol occurrences.

[0241] The second integer value m may be obtained from header metadata of the encoded sequence of symbols.

[0242] The operations may further include traversing a tree of the divided decoding range and decoding each entry of the accumulation table by performing a division at each node of the tree before a child node of the node.

[0243] The operations may further include decoding each entry of the accumulation table by depth-first traversing a tree of the divided decoding ranges and performing a division at each node of the tree.

[0244] The integer value f may be expressed as a bignum.

[0245] The operations may further include renormalizing to allow for faster and more memory efficient decoding.

[0246] The encoded symbol string may include a set of different components including a token, a literal length, a literal, an offset, and a match length of a sequence of LZ4 blocks.

[0247] When using the integer value f, entries in the table of symbol occurrences may be restored using only integer arithmetic, shifts, logical operations, loads and stores.

[0248] The entropy decoding may be an asymmetric code system (ANS) entropy decoding.

[0249] The operations may include repeating or recursively performing the sequential division and the calculation for each decoding range, and / or independently decoding each segment of the encoded symbol sequence obtained by performing entropy-based binary segment division on the symbol sequence and reconstructing the symbol sequence based on segment headers, and / or executing losslessly recovered instructions by decoding the received entropy-coded symbol sequence, and / or at least partially decoding the entropy-coded symbol sequence in a cloud environment.

[0250] The means for generating an animated graphic may generate at least a portion of an interactive graphic display based at least in part on graphic data losslessly reconstructed by decoding the received sequence of entropy-coded symbols.

[0251] The means for generating the animated graphic may include an emulator that generates the animated graphic based at least in part on the entropy decoded symbol sequence.

[0252] Example 4: Method of Operation of a Decryption Cloud-Based Server or Computing Device

[0253] An embodiment of a method for operating a cloud-based device may include sending commands and / or control signals via at least one network and / or communications link to a remotely located decoder processor and / or decoder processing circuit, causing the commands and / or control signals to perform operations including accessing an integer value f that encodes a table of symbol occurrences; using the integer value f to decode the table of symbol occurrences, the operations including: applying the computed table of symbol occurrences to entropy decode a coded sequence of symbols; and receiving, via the at least one network and / or communications link, visual and / or audio information generated or provided at least in part using the entropy decoded sequence of symbols. (i) decoding each entry of the symbol occurrence accumulation table by sequentially dividing the decoding range of the symbol occurrence accumulation table by each intermediate index, and for each decoding range, calculating (first index entry+f mod (last index entry−first index entry+1)) from the decoded entries of the symbol occurrence accumulation table to decode each intermediate index entry of the decoding range, and calculating (f div (last index entry−first index entry+1)) to update f; (ii) calculating the table of symbol occurrences from the decoded entries of the cumulative table of symbol occurrences;

[0254] As shown in FIG. 13H, in one embodiment, an application server or other computing device includes a decoding system or decoder that is located “in the cloud,” i.e., in a server farm or other remote location, and is connected to communicate with other remote devices via one or more networks or other communications connections. The server or other computing device containing the decoding system or decoder may receive or otherwise be provided with an encoded (e.g., compressed) digital data file for decoding. Here, the term “digital data” may include image data, audio data, computer or processor instructions, computer programs, instructions, constants, and any other type of information. Thus, the term “data file” is not limited to non-executable data and may include or encompass, by way of example, one or more computer programs executable by one or more processors. Data files may or may not include a file header and may or may not be structured in one or more specific, standardized “data file formats,” such as those described at wikipedia.org / wiki / List_of_file_formats.

[0255] The encoded compressed data file may be provided / generated by an encoding system or encoder of the type described above, which may or may not be part of an application development system, and which may or may not be operatively coupled or connected to the application development system. For example, the application development system may produce, generate, and / or create the data file with or without human involvement or intervention. In one embodiment, the encoded compressed data file (e.g., computer instructions or programs, processor instructions, GPU instructions, image data such as texture data) may be provided from the encoding system or encoder to the decoding system or decoder in any manner, such as via a digital network, a communications link, a physically portable tangible storage medium such as a flash drive, or any other convenient manner. A server or other computing device may include one or more non-volatile storage devices configured to store or retain the encoded compressed data file after the data file is provided to the decoding system or decoder. In other embodiments, the application development server and the cloud-based application server may be collocated with each other (e.g., may comprise an integrated or linked cloud-based content authorization and distribution system such as an e-shop).

[0256] A cloud-located decoding system or decoder may include one or more processors and / or processing circuits and / or graphics processing units executing instructions stored in non-transitory storage devices. Execution of such instructions causes the one or more processors and / or processing circuits and / or graphics processing units to access stored encoded, compressed data files and decode the stored encoded, compressed data files into decoded, uncompressed data files in the manner described in detail above. The one or more processors and / or processing circuits and / or graphics processing units may directly execute such stored decoding instructions, interpret or translate the stored instructions to perform such encoding, emulate hardware and / or software decoders, or use any combination of these approaches to provide the decoder functionality described in detail above. Alternatively, or in addition, the decoding process may be incorporated into a hardware state machine or other hardware circuit decoder implementation. Alternatively, part of the decoding process may be implemented in instructions executable by one or more processors, and another part of the decoding process may be implemented in one or more hardware circuits, such as an ASIC, a state machine, etc.

[0257] As shown in FIG. 13H, the decoding system or decoder may be activated, initiated, or controlled to perform decoding in response to one or more control signals received by the cloud-based server or other computing device over a network or other communications link from a remotely located device, such as the Presentation System. See FIG. 14A, blocks 702, 704, and 706. Thus, in one embodiment, the Presentation System may generate remote commands or control signals (see FIG. 14B, blocks 802 and 804) that, when sent over a network or communications link to the cloud-based server or other computing device, cause the cloud-based decoding system or decoder to perform decoding (see FIG. 14A, blocks 702, 704, and 706). The Presentation System may generate these commands or control signals automatically, or in response to a human request, such as to play a particular game or use a particular application. See FIG. 14B, blocks 802 and 804. In response to such a human request, the Presentation System may send commands or control signals to a cloud-located decoding system or decoder specifying stored encoded compressed data files or associated therewith that correspond to the human request, and the decoding system or decoder may access the particular stored encoded compressed data files, decode them, and store the decoded decompressed data files in non-transitory memory (FIG. 14A, blocks 702, 704, 706). In this manner, for example, a human user of the Presentation System may initiate "on-demand" decoding of data files associated with a particular game the human user wants to play or a particular application the human user wants to use.

[0258] After the cloud-located decoding system or decoder decodes the stored encoded (compressed) data files (as described in detail above) to generate corresponding decoded (uncompressed) data files, the cloud-located server or other computing device stores the decoded (uncompressed) data files in one or more non-transitory memory devices, such as one or more register files, NAND flash devices, magnetic storage devices, semiconductor read / write memories (RAMs), etc. (FIG. 14A, block 706). Such stored decoded uncompressed data files are made available for processing and / or transmission by the cloud-located server or other computing device.

[0259] In one embodiment, a cloud-based server or other computing device may access the decoded (uncompressed) data files, e.g., stored in memory (or in other embodiments, obtain these files from another source, such as a remote source) (FIG. 14A, block 708) and execute, process, or use the computer instructions, computer programs, processor instructions, GPU instructions, image data, or other information in the decoded, uncompressed data files to automatically generate a visual and / or audio presentation (FIG. 14A, block 710). For example, the visual and / or audio presentation may comprise a series of image frames and / or a series of audio frames providing one or more graphical user interfaces. As an example, a server processor and / or processor circuitry and / or graphics processing unit located on the cloud may directly execute or process the computer instructions, computer programs, processor instructions, GPU instructions, or other information in the decoded, uncompressed data files to generate the visual and / or audio presentation. In another example, a server processor and / or processor circuitry and / or graphics processing unit located on the cloud may emulate other hardware and / or software to generate visual and / or audio presentations based at least in part on the computer instructions, computer programs, processor instructions, GPU instructions, or other information in the decoded uncompressed data file (see, e.g., US11911700; USP10926174; USP9662574; USP20230356078; Game Console GPUs, pp. 187-237; Peddie, J., The History of the GPU - New Developments, Springer, Cham. doi.org / 10.1007 / 978-3-031-14047-1_4(2022)).

[0260] The server processor and / or processing circuitry and / or graphics processing unit located on the cloud may be the same or a different processor and / or processing circuitry and / or graphics processing unit used to perform the decoding process described above. In one embodiment, the server processor and / or processing circuitry and / or graphics processing unit located on the cloud may be remotely controlled or operated to execute or process computer instructions, computer programs, processor instructions, GPU instructions, or other information in the decoded uncompressed data file. For example, the server processor and / or processing circuitry and / or graphics processing unit located on the cloud may be initiated, controlled, or operated by commands or control signals to execute computer instructions, computer programs, processor instructions, GPU instructions, or other information in the decoded uncompressed data file. Such commands or control signals may be provided, for example, by a presentation system and transmitted to the server or other computing device located on the cloud over a network or other communications link (see FIG. 14B , blocks 802 and 804). In one embodiment, the commands or control signals may specify, for example, a particular game or other application. In one embodiment, the same command or control signal may be used to cause a decoding system or decoder to decode one or more encoded compressed data files associated with a game and use the decoded decompressed data files to generate a graphical, audio, and / or visual presentation corresponding to the game or other application (see FIG. 14A).

[0261] In one embodiment, a server or other computing device located on the cloud may generate visual and / or audio presentations through interaction with one, two, or more human users (and / or automated “bots,” in one embodiment) via an associated presentation system. For example, each presentation system (which in one embodiment may include a gaming console, portable or mobile gaming device, smartphone, tablet, or other computing device capable of providing human-perceivable output) may have at least one corresponding human user who operates input devices such as joysticks, pointer-type devices, mouse-type devices, digital control buttons, etc. The presentation system may generate input signals based on the human users' operation of the input devices and transmit them (or information based thereon) in real time or near real time (i.e., with low latency) from the presentation system to a server or other computing device located on the cloud via one or more networks or other communication links. Different presentation systems may be located in different locations, and each presentation system may simultaneously and independently generate input signals based on the human users' (and / or bots') operation of physical and / or virtual input devices in, for, or associated with that presentation system.

[0262] A server or other computing device located on the cloud may use such input signals to at least partially control the graphical, audio, and / or visual presentation or information associated therewith corresponding to a game or other application. For example, a server or other computing device located on the cloud may use a first input signal provided by a first presentation system to control a first game character or first avatar and / or a first virtual camera / audio position viewpoint in a game, and a second input signal provided by a second presentation system to control a second game character or second avatar and / or a second virtual camera / audio position viewpoint in the game. In response to the first and second input signals, a server or other computing device located on the cloud may generate data representing at least a portion of the same or different visual and / or audio display sequences, for example, to provide a multiplayer game or multi-user application in which different players or users experience the same or different visual and / or audio presentations (e.g., from different virtual camera / audio position viewpoints). See FIG. 14A, blocks 710, 712, and 714; see FIG. 14B, blocks 802 and 804. A server or other computing device located in the cloud may update the visual and / or audio presentation, for example, every 1 / 30th or 1 / 60th of a second, or some other frequency, and provide information to the presentation systems, which in turn may use the information to provide animated video and audio in response to the first and second input signals. In one embodiment, an application server may generate and stream video and / or audio frames to the presentation systems, and a thin-client presentation system may perform the presentation. In another exemplary embodiment, each presentation system runs a local game process in response to locally provided (and possibly remotely provided) user input, and the application server provides coordination between the presentation systems.In yet another embodiment, the application server provides a download service to the presentation system by downloading encoded and / or decoded data, such as executable code and / or control and coordination information, that the presentation system uses to locally generate a user presentation.

[0263] In one embodiment, a server or other computing device located in the cloud may stream or otherwise transmit information related to such visual and / or audio presentations to one or any number of presentation systems for presentation to users. See FIG. 14A, block 710. As previously discussed, such a cloud-based server or other computing device may access and use or execute the decoded instructions or data directly on a processor or other hardware, translate or interpret the decoded instructions or data for use, or run an emulator configured to be compatible with the decoded instructions or data. See FIG. 14A, blocks 708, 710.

[0264] In one embodiment, an emulator generates the animated graphic based at least in part on the entropy-decoded sequence of symbols.

[0265] In one embodiment, the at least one processor and / or processing circuitry is configured to at least partially decode the sequence of symbols in a cloud environment.

[0266] In this embodiment, the following configuration may be further adopted.

[0267] The receiving may include receiving data representing at least a portion of at least one graphical presentation based at least in part on the entropy decoded sequence of symbols.

[0268] The method may further include receiving a second integer value m, and using a zero value as a lower limit of the accumulation table of symbol occurrences and using the received second integer value m as an upper limit of the accumulation table of symbol occurrences.

[0269] The method may further include receiving a second integer value m, inserting a zero value as a first entry in the accumulation table of symbol occurrences, and inserting the received second integer value m as a last entry in the accumulation table of symbol occurrences.

[0270] The second integer value m may be obtained from header metadata of the encoded sequence of symbols.

[0271] The method may further include decoding each entry of the accumulation table by traversing the tree of the divided decoding ranges and performing a division at each node of the tree before a child node of the node. Each entry of the accumulation table may be decoded by traversing the tree of the divided decoding ranges in depth-first order and performing a division at each node of the tree.

[0272] The received integer value f may be expressed as a bignum.

[0273] The method may further include renormalizing to allow faster and more memory efficient decoding.

[0274] The encoded symbol string may include a set of different components including a token, a literal length, a literal, an offset, and a match length of a sequence of LZ4 blocks.

[0275] Using the received integer f, entries in the table of symbol occurrences may be restored using only integer arithmetic, shifts, logical operations, loads and stores.

[0276] The entropy decoding may be an asymmetric code system (ANS) entropy decoding.

[0277] The method may further include repeating or recursively performing the sequential division and the calculation for each of the decoding ranges, and / or independently decoding each segment of the encoded symbol sequence obtained by performing entropy-based binary segment division on the symbol sequence and reconstructing the symbol sequence based on segment headers, and / or executing, on at least one processor, instructions losslessly reconstructed by decoding the received entropy-coded symbol sequence, and / or generating, using at least one graphics processing unit, at least a portion of an interactive graphics display based at least in part on graphics data losslessly reconstructed by decoding the received entropy-coded symbol sequence.

[0278] Example 5: Encoding method

[0279] An exemplary embodiment of an encoding method performed using at least one processor and / or processing circuit may include generating a table of symbol occurrences based on the occurrences of symbols in a sequence of symbols to be entropy encoded; entropy encoding the sequence of symbols using the table of symbol occurrences; encoding the table of symbol occurrences using an integer value f, the table of symbol occurrences including: (i) a symbol occurrence number f = 1; (i) calculating a cumulative table of symbol occurrences from said table of symbol occurrences; (ii) encoding each entry of the accumulation table of symbol occurrences by sequentially dividing the encoding range of the accumulation table by each intermediate index, and updating f by calculating, for each encoding range, f × (entry at last index − entry at first index + 1) + (entry at each intermediate index − entry at first index).

[0280] The above corresponds to the exemplary embodiment described in detail below.

[0281] <<Cumulative Interpolation Coding>> encodes table F in the following way:

[0282] Calculating table C from table F

[0283] Encode table C using <<interpolated encoding>>

[0284] In this embodiment, the following configuration may be further adopted.

[0285] The encoding may further include generating a second integer value m, using a zero value as a lower bound of the accumulation table of symbol occurrences, and using the generated second integer value m as an upper bound of the accumulation table of symbol occurrences.

[0286] The encoding may further include generating a second integer value m, inserting a zero value as a first entry in the accumulation table of symbol occurrences, and inserting the generated second integer value m as a last entry in the accumulation table of symbol occurrences.

[0287] The encoding may include including the second integer value m as metadata in a header associated with the encoded sequence of symbols.

[0288] The encoding may further include encoding each entry of the accumulation table by walking a tree of the divided encoding range and performing a multiplication at each node after each node's child node.

[0289] The encoding may further include encoding the accumulation table entries by depth-first traversing the tree of the divided encoding ranges in reverse order and performing multiplication at each node.

[0290] The encoding may further include representing the generated integer value f as a bignum.

[0291] The encoding may further include renormalizing to allow for faster and more memory efficient decoding.

[0292] The symbol string may include a set of different components including a token, a literal length, a literal, an offset, and a match length of a sequence of LZ4 blocks.

[0293] When using the integer value f, entries in the table of symbol occurrences may be encoded using only integer arithmetic, shifts, logical operations, loads and stores.

[0294] The entropy coding may be asymmetric code system (ANS) entropy coding.

[0295] The encoding may further include repeating or recursively performing the sequential division and the calculation for each of the encoding ranges, and / or independently encoding each segment of the encoded symbol sequence obtained by performing entropy-based binary segment division of the symbol sequence and specifying an order of each segment of the symbol sequence in a segment header.

[0296] The sequence of symbols may include losslessly encoded executable instructions and / or a sequence of bits configured to control a graphics processing unit to generate at least a portion of an interactive graphical display.

[0297] The encoding may further comprise segmenting the symbol sequence prior to encoding using entropy-based binary segmentation, which at each segmentation step reduces or minimizes the sum of the entropy and size of the resulting symbol occurrence tables for all segments.

[0298] Example 6: Encoder

[0299] In another embodiment, the encoder may include: means for generating a table of symbol occurrences based on the occurrences of symbols in a symbol sequence that contributes at least in part to generating an animated graphic, the symbol sequence being entropy coded; means for entropy coding the symbol sequence using the table of symbol occurrences; means for encoding the table of symbol occurrences using an integer value f, the operations including (i) and (ii) below; means for forming at least one data block representing the entropy coded symbol sequence and the integer value f that represents the coded table of symbol occurrences; and means for storing the at least one data block in a storage means. (i) calculating a cumulative table of symbol occurrences from said table of symbol occurrences; (ii) encoding each entry of the accumulation table of symbol occurrences by sequentially dividing the encoding range of the accumulation table by each intermediate index, and updating f by calculating, for each encoding range, f × (entry at last index − entry at first index + 1) + (entry at the intermediate index − entry at the first index).

[0300] In this embodiment, the following configuration may be further adopted.

[0301] The operations may further include generating a second integer value m, using a zero value as a lower bound for the accumulation table of symbol occurrences, and using the generated second integer value m as an upper bound for the accumulation table of symbol occurrences.

[0302] The operations may further include generating a second integer value m, inserting a zero value as a first entry in the accumulation table of symbol occurrences, and inserting the generated second integer value m as a last entry in the accumulation table of symbol occurrences.

[0303] The operations may include including the second integer value m as metadata in a header associated with the encoded sequence of symbols.

[0304] The operations may further include encoding each entry of the accumulation table by walking the tree of the divided encoding range and performing a multiplication at each node after each node's child node.

[0305] The method may further include encoding each entry in the accumulation table by depth-first traversing the tree of the partitioned coding ranges in reverse order and performing a multiplication at each node, and / or representing the generated integer value f as a bignum and / or renormalizing it to allow for faster and more memory-efficient encoding.

[0306] The symbol string may include a set of different components including a token, a literal length, a literal, an offset, and a match length of a sequence of LZ4 blocks.

[0307] When using the integer value f, entries in the table of symbol occurrences may be encoded using only integer arithmetic, shifts, logical operations, loads and stores.

[0308] The entropy coding may be asymmetric code system (ANS) entropy coding.

[0309] The method may further include repeating and / or recursively performing the sequential division and the calculation for each encoding range, and / or independently encoding each segment of the encoded symbol sequence obtained by performing entropy-based binary segment division on the symbol sequence, and specifying an order of each segment of the symbol sequence in a segment header.

[0310] The sequence of symbols may include losslessly encoded executable instructions.

[0311] The sequence of symbols may include a sequence of bits configured to control at least one graphics processing unit to generate at least a portion of an interactive graphical display.

[0312] The method may further include segmenting the symbol sequence using entropy-based binary segmentation before encoding, which at each segmentation step reduces or minimizes the total entropy and size of the symbol occurrence tables for all resulting segments.

[0313] Example 7 Encoding System

[0314] One embodiment of a system for generating animated graphics may include: means for generating a table of symbol occurrences based on the occurrences of symbols in a symbol sequence that contributes at least in part to the generation of the animated graphic, the symbol sequence being entropy coded; means for entropy coding the symbol sequence using the table of symbol occurrences; means for encoding the table of symbol occurrences using an integer value f, the operations including (i) and (ii) below; means for forming at least one data block representing the entropy coded symbol sequence and the integer value f representing the coded table of symbol occurrences; and means for storing the at least one data block in the storage device. (i) calculating a cumulative table of symbol occurrences from said table of symbol occurrences; (ii) encoding each entry of the accumulation table of symbol occurrences by sequentially dividing the encoding range of the accumulation table by each intermediate index, and for each encoding range, encoding the entry of each intermediate index of the encoding range by calculating f × (entry of last index − entry of first index + 1) + (entry of each intermediate index − entry of the first index) to update f.

[0315] In this embodiment, the following configuration may be further adopted.

[0316] The operations may further comprise means for generating a second integer value m, using a zero value as a lower bound for the accumulation table of symbol occurrences, and using the generated second integer value m as an upper bound for the accumulation table of symbol occurrences.

[0317] The operations further comprise means for generating a second integer value m and inserting a zero value as a first entry in the accumulation table of symbol occurrences; The generated second integer value m may be inserted as the last entry in the accumulation table of symbol occurrences.

[0318] The operations may include including the second integer value m as metadata in a header associated with the encoded sequence of symbols.

[0319] The operation may involve walking the tree of partitioned coding ranges and encoding each entry of the accumulation table by performing a multiplication at each node after each node's child nodes.

[0320] The operations may further include encoding each entry in the accumulation table by depth-first traversing the split coding range tree in reverse order and performing a multiplication at each node, and / or representing the received integer value f as a bignum and / or renormalizing it to allow for faster and more memory-efficient encoding.

[0321] The symbol string may include a set of different components including a token, a literal length, a literal, an offset, and a match length of a sequence of LZ4 blocks.

[0322] When using the integer value f, entries in the table of symbol occurrences may be encoded using only integer arithmetic, shifts, logical operations, loads and stores.

[0323] The entropy coding may be asymmetric code system (ANS) entropy coding.

[0324] The method may further comprise means for repeating and / or recursively performing the sequential division and the calculation for each encoding range, and / or means for independently encoding each segment of the encoded symbol sequence obtained by performing entropy-based binary segment division of the symbol sequence and specifying an order of each segment of the symbol sequence in a segment header.

[0325] The sequence of symbols may include losslessly encoded executable instructions.

[0326] The sequence of symbols may include a sequence of bits configured to control at least one graphics processing unit to generate at least a portion of an interactive graphical display.

[0327] The operations may further include segmenting the symbol sequence before encoding using entropy-based binary segmentation, which at each segmentation step reduces or minimizes the sum of the entropy and size of the symbol occurrence tables for all resulting segments.

[0328] Example 8: Program for Decryption

[0329] An embodiment of the program may cause a computer to function as means for accessing an integer value f that encodes a table of symbol occurrences, and means for using the integer value f to perform operations for decoding the table of symbol occurrences, including the following (i) and (ii): (i) decoding each entry of the symbol occurrence accumulation table by sequentially dividing the decoding range of the symbol occurrence accumulation table by each intermediate index, and for each decoding range, calculating (first index entry+f mod (last index entry−first index entry+1)) from the decoded entries of the symbol occurrence accumulation table to decode each intermediate index entry of the decoding range, and calculating (f div (last index entry−first index entry+1)) to update f; (ii) calculating the table of symbol occurrences from the decoded entries of the cumulative table of symbol occurrences;

[0330] In such an embodiment, the computer may further be configured to:

[0331] The computer may be configured to function as: means for receiving a sequence of symbols that has been entropy coded using a table of symbol occurrences; means for entropy decoding the coded sequence of symbols by applying the calculated table of symbol occurrences; and / or means for streaming data representing at least a portion of a graphical user interaction using at least a portion of the entropy decoded sequence of symbols; and / or means for executing at least a portion of the entropy decoded sequence of symbols; and / or means for streaming information based on at least a portion of the entropy decoded sequence of symbols.

[0332] The computer may further function as a means for receiving a second integer value m, and in (i), a zero value may be used as a lower limit of the accumulation table of symbol occurrences, and the received second integer value m may be used as an upper limit of the accumulation table of symbol occurrences.

[0333] The computer may further function as a means for receiving a second integer value m, and in (i), insert a zero value as a first entry in the accumulation table of symbol occurrences, and insert the received second integer value m as a last entry in the accumulation table of symbol occurrences.

[0334] The received second integer value m may be received from header metadata of the encoded sequence of symbols.

[0335] The computer may further function as: means for decoding each entry of the accumulation table by traversing a tree of the divided decoding ranges and performing a division at each node of the tree before its child node; and / or means for decoding each entry of the accumulation table by traversing the tree of the divided decoding ranges in depth-first order and performing a division at each node of the tree.

[0336] In this embodiment, the following configuration may be further adopted.

[0337] The received integer value f may be expressed as a bignum.

[0338] It may further include renormalizing to allow for faster and more memory efficient decoding.

[0339] The encoded symbol string may include a set of different components including a token, a literal length, a literal, an offset, and a match length of a sequence of LZ4 blocks.

[0340] When using f, entries in the table of symbol occurrences may be recovered from the integer value f using only integer arithmetic, shifts, logical operations, loads and stores.

[0341] The entropy decoding may be an asymmetric code system (ANS) entropy decoding.

[0342] In (i), the sequential division and the calculation may be repeated for each of the decoding ranges, and / or the sequential division and the calculation may be performed recursively for each of the decoding ranges.

[0343] The computer may further function as a means for independently decoding each segment of the encoded symbol sequence obtained by performing entropy-based binary segmentation of the symbol sequence, and for reconstructing the symbol sequence based on the segment headers.

[0344] Example 9: Program for encoding

[0345] An embodiment of the program may cause a computer to function as: means for generating a table of symbol occurrences based on the occurrences of symbols in a sequence of symbols to be entropy coded; means for entropy coding the sequence of symbols using the table of symbol occurrences; and means for encoding the table of symbol occurrences using an integer value f, the operation including: (i) calculating an accumulation table of symbol occurrences from the table of symbol occurrences; (ii) encoding each entry of the accumulation table of symbol occurrences by sequentially dividing an encoding range of the accumulation table of symbol occurrences by each intermediate index, wherein for each encoding range, f is calculated by: f × (entry at last index - entry at first index + 1) + (entry at each of the intermediate indexes - entry at the first index), thereby encoding the entry at each intermediate index of the encoding range to update f; and forming at least one data block representing the entropy coded sequence of symbols and the resulting integer value f encoding the table of symbol occurrences.

[0346] In this embodiment, the following configuration may be further adopted.

[0347] The computer may further function as a means for receiving a second integer value m, using a zero value as a lower limit of the accumulation table of symbol occurrences, and using the received second integer value m as an upper limit of the accumulation table of symbol occurrences.

[0348] The computer may further be configured to: receive a second integer value m; insert a zero value as a first entry in the accumulation table of symbol occurrences; and insert the received second integer value m as a last entry in the accumulation table of symbol occurrences.

[0349] The encoding may include including the second integer value m as metadata in a header associated with the encoded sequence of symbols.

[0350] The operations may further include encoding each entry of the accumulation table by walking the tree of divided encoding ranges and performing a multiplication at each node after each node's child node.

[0351] The operations may further include encoding the accumulation table entries by depth-first traversing the tree of the divided coding ranges in reverse order and performing a multiplication at each node.

[0352] The operations may further include representing the received integer value f as a bignum.

[0353] The operations may further include renormalizing to allow for faster and more memory efficient decoding.

[0354] The symbol string may include a set of different components including a token, a literal length, a literal, an offset, and a match length of a sequence of LZ4 blocks.

[0355] When using the integer value f, entries in the table of symbol occurrences may be encoded using only integer arithmetic, shifts, logical operations, loads and stores.

[0356] The entropy coding may be asymmetric code system (ANS) entropy coding.

[0357] The computer may further function as a means for repeating or recursively performing the sequential division and the calculation for each of the coding ranges, and / or a means for independently encoding each segment of the coded symbol sequence obtained by performing entropy-based binary segment division of the symbol sequence and specifying an order of each segment of the symbol sequence in a segment header.

[0358] The sequence of symbols may include losslessly encoded executable instructions and / or a sequence of bits configured to control a graphics processing unit to generate at least a portion of an interactive graphical display.

[0359] The operations may further include segmenting the symbol sequence before encoding using entropy-based binary segmentation, which at each segmentation step reduces or minimizes the sum of the entropy and size of the symbol occurrence tables for all resulting segments.

[0360] Embodiment 10: The encoding device and the decoding device may be the same device.

[0361] Example 11: The encoding and decoding methods may be combined into a common overall method.

[0362] Example 12: Algorithm 1 / Algorithm 2 for encoding / decoding entropy tables.

[0363] Example 13: Part of Algorithm 1 / Algorithm 2 that encodes / decodes part of the accumulation table.

[0364] Example 14: Algorithm 3 / Algorithm 4 for encoding / decoding symbol sequences of any length

[0365] Example 15: Algorithm 5 / Algorithm 6 for encoding / decoding arbitrary length symbol sequences using low-cost entropy-based binary segmentation to improve compression ratio.

[0366] Example 16: Algorithm 5 / Algorithm 6 for encoding / decoding LZ4 blocks by grouping a stream of LZ4 block sequences by type and encoding some or all of the groups independently.

[0367] Exemplary Related Items

[0368] Binary Interpolation Coding:

[0369] Binary Interpolative Coding for Effective Index Compression: https: / / link.springer.com / article / 10.1023 / A:1013002601898

[0370] Housekeeping for Prefix Coding: https: / / www.researchgate.net / publication / 3160122

[0371] Large-Alphabet Semi-Static Entropy Coding Via Asymmetric Numeral Systems https: / / www.researchgate.net / publication / 342752784

[0372] Encoding of probability distributions for Asymmetric Numeral Systems https: / / www.researchgate.net / publication / 352373099

[0373] Binary segmentation:

[0374] Selective review of offline change point detection methods: https: / / arxiv.org / abs / 1801.00718

[0375] ruptures: change point detection in Python: https: / / arxiv.org / abs / 1801.00826

[0376] Change Point Detection with Copula Entropy based Two-Sample Test: https: / / arxiv.org / abs / 2403.07892

[0377] Change-point detection using the conditional entropy of ordinal patterns: https: / / arxiv.org / abs / 1510.01457

[0378] Optimal detection of changepoints with a linear computational cost: https: / / arxiv.org / abs / 1101.1438

[0379] Using an adaptive entropy-based threshold for change detection methods - Application to fault-tolerant fusion in collaborative mobile robotics: https: / / ieeexplore.ieee.org / document / 8820667

[0380] All patents and publications cited herein are incorporated by reference as if expressly set forth.

[0381] While the present invention has been described in terms of what are presently considered to be the most practical and preferred embodiments, it is to be understood that the invention is not limited to the disclosed embodiments, but rather encompasses various modifications and equivalent arrangements included within the spirit and scope of the appended claims.

Claims

1. 1. A decoding method implemented using at least one processor and / or processing circuitry, comprising: receiving a sequence of symbols entropy coded using a table of symbol occurrences; receiving an integer value f that encodes said table of symbol occurrences; using the received integer value f to decode the table of symbol occurrences, which table includes: (i) decoding each entry of the accumulation table of symbol occurrences by sequentially dividing a decoding range of the accumulation table of symbol occurrences by a respective intermediate index, wherein for each decoding range: From the decoded entries of the accumulation table of symbol occurrences: Decode each intermediate index entry in the decoding range by calculating the first index entry + f mod (last index entry - the first index entry + 1); Calculate f div (the last index entry - the first index entry + 1) and update f. (ii) calculating the table of symbol occurrences from the decoded entries of the cumulative table of symbol occurrences; and applying the table of decoded symbol occurrences to entropy decode the received sequence of encoded symbols.

2. receiving a second integer value m; 2. The decoding method of claim 1, further comprising: using a zero value as a lower bound of the accumulation table of symbol occurrences and using the received second integer value m as an upper bound of the accumulation table of symbol occurrences.

3. receiving a second integer value m; inserting a zero value as a first entry in said accumulation table of symbol occurrences; 2. The decoding method of claim 1, further comprising: inserting the received second integer value m as a last entry in the accumulation table of symbol occurrences.

4. 4. A method of decoding according to claim 2 or 3, wherein the received second integer value m is obtained from header metadata of the encoded sequence of symbols.

5. 4. The decoding method according to claim 1, further comprising: decoding each entry of the accumulation table by traversing a tree of the divided decoding range and performing a division at each node of the tree before a child node of the node.

6. 6. The decoding method of claim 5, wherein each entry of the accumulation table is decoded by traversing the tree of the divided decoding range in depth-first order and performing division at each node of the tree.

7. 4. A method of decoding as claimed in claim 1, wherein the received integer value f is expressed as a bignum.

8. 4. A decoding method according to claim 1, further comprising renormalizing to enable faster and more memory efficient decoding.

9. 4. The decoding method according to claim 1, wherein the encoded symbol sequence comprises a set of different components including a token, a literal length, a literal, an offset, and a match length of a sequence of LZ4 blocks.

10. 4. A decoding method according to claim 1, wherein when using the received integer f, entries in the table of symbol occurrences are restored using only integer operations, shifts, logical operations, loads and stores.

11. 4. The decoding method according to claim 1, wherein the entropy decoding is an asymmetric code system (ANS) entropy decoding.

12. The decoding method according to claim 1 , further comprising repeating the sequential division and the calculation for each of the decoding ranges.

13. The decoding method according to claim 1 , further comprising: recursively performing the sequential division and the calculation for each of the decoding ranges.

14. 4. The decoding method according to claim 1, further comprising independently decoding each segment of the encoded symbol sequence obtained by performing entropy-based binary segmentation of the symbol sequence, and reconstructing the symbol sequence based on segment headers.

15. 4. The decoding method of claim 1, further comprising: executing, on at least one processor, instructions losslessly reconstructed by decoding the received entropy-coded symbol sequence.

16. 4. The decoding method of claim 1, further comprising generating, using at least one graphics processing unit, at least a portion of an interactive graphics display based at least in part on graphics data losslessly reconstructed by decoding the received sequence of entropy-coded symbols.

17. 1. A method of encoding performed using at least one processor and / or processing circuitry, comprising: generating a table of symbol occurrences based on the occurrences of symbols in a sequence of symbols to be entropy coded; entropy encoding the sequence of symbols using the table of symbol occurrences; encoding said table of symbol occurrences using an integer value f, said table including: (i) calculating a cumulative table of symbol occurrences from said table of symbol occurrences; (ii) encoding each entry of the accumulation table of symbol occurrences by sequentially dividing a coding range of the accumulation table of symbol occurrences by a respective intermediate index, wherein for each coding range: updating f by encoding each intermediate index entry in the encoding range by calculating f×(last index entry−first index entry+1)+(each intermediate index entry−first index entry); forming at least one data block representing said entropy coded sequence of symbols and an integer value f obtained by coding said table of symbol occurrences.

18. generating a second integer value m; 20. The method of claim 17, further comprising: using a zero value as a lower bound for the accumulation table of symbol occurrences; and using the generated second integer value m as an upper bound for the accumulation table of symbol occurrences.

19. generating a second integer value m; inserting a zero value as a first entry in said accumulation table of symbol occurrences; 18. The encoding method of claim 17, further comprising: inserting the generated second integer value m as a last entry in the accumulation table of symbol occurrences.

20. 20. A method of encoding according to claim 18 or 19, wherein the encoding comprises including the second integer value m as metadata in a header associated with the encoded sequence of symbols.

21. 20. The method of claim 17, further comprising: encoding each entry of the accumulation table by traversing the tree of the divided coding range and performing a multiplication at each node after its child nodes.

22. 22. The encoding method of claim 21, further comprising: encoding each entry of the accumulation table by depth-first traversing the tree of the partitioned encoding ranges in reverse order and performing a multiplication at each node.

23. 20. A method according to any one of claims 17 to 19, comprising expressing the integer value f obtained by encoding the table of symbol occurrences as a bignum.

24. 20. The method of any of claims 17 to 19, further comprising renormalizing to allow faster and more memory efficient decoding.

25. 20. The method of any of claims 17 to 19, wherein the symbol sequence comprises a set of different components including a token, a literal length, a literal, an offset, and a match length of a sequence of LZ4 blocks.

26. 20. A method according to any one of claims 17 to 19, wherein when using the integer value f, entries in the table of symbol occurrences are encoded using only integer arithmetic, shifts, logical operations, loads and stores.

27. 20. The method of claim 17, wherein the entropy coding is an Asymmetric Code System (ANS) entropy coding.

28. 20. The encoding method of claim 17, further comprising repeating the sequential division and the calculation for each of the encoding ranges.

29. The encoding method according to claim 17 , further comprising: recursively performing the sequential division and the calculation for each of the encoding ranges.

30. 20. The encoding method of claim 17, further comprising independently encoding each segment of the encoded symbol sequence obtained by performing entropy-based binary segmentation on the symbol sequence, and specifying an order of each segment of the symbol sequence in a segment header.

31. 20. The method of claim 17, wherein the sequence of symbols comprises losslessly encoded executable instructions.

32. 20. A method according to any one of claims 17 to 19, wherein the sequence of symbols comprises a sequence of bits configured to control a graphics processing unit to generate at least part of an interactive graphical display.

33. 20. The method of claim 17, further comprising segmenting the symbol sequence before encoding using entropy-based binary segmentation, which at each segmentation step reduces or minimizes the sum of the entropy and the size of the table of symbol occurrences of all resulting segments.

34. Computer, means for generating a table of symbol occurrences based on the occurrence of symbols in a symbol sequence that contributes at least in part to generating an animated graphic and that is entropy coded; means for entropy coding said sequence of symbols using said table of symbol occurrences; means for encoding said table of symbol occurrences using an integer value f, said means comprising the operations of: (i) calculating a cumulative table of symbol occurrences from said table of symbol occurrences; (ii) encoding each entry of the accumulation table of symbol occurrences by sequentially dividing a coding range of the accumulation table of symbol occurrences by a respective intermediate index, wherein for each coding range: updating f by encoding each intermediate index entry in the encoding range by calculating f×(last index entry−first index entry+1)+(each intermediate index entry−first index entry); means for forming at least one data block representing said entropy coded symbol sequence and an integer value f representing said coded symbol occurrence table; a program that functions as a means for storing the at least one data block in a storage means;

35. The operation is generating a second integer value m; 35. The program of claim 34, further comprising using a zero value as a lower bound for the accumulation table of symbol occurrences and using the generated second integer value m as an upper bound for the accumulation table of symbol occurrences.

36. The operation is generating a second integer value m; inserting a zero value as a first entry in said accumulation table of symbol occurrences; 35. The program of claim 34, further comprising inserting the generated second integer value m as a last entry in the accumulation table of symbol occurrences.

37. 37. The program of claim 35 or 36, wherein the action comprises including the second integer value m as metadata in a header associated with the encoded sequence of symbols.

38. 36. The program of claim 35, wherein the operations further include encoding each entry of the accumulation table by walking the tree of the divided encoding ranges and performing a multiplication at each node after each node's child node.

39. 39. The program of claim 38, wherein the operations further include encoding each entry of the accumulation table by depth-first traversing the tree of the divided coding ranges in reverse order and performing a multiplication at each node.

40. 37. The program of claim 34, wherein the action further comprises expressing the generated integer value f as a bignum.

41. 37. The program of claim 34, wherein the operations further comprise renormalizing to allow for faster and more memory-efficient decoding.

42. 37. The program of claim 34, wherein the symbol string comprises a set of different components including a token, a literal length, a literal, an offset, and a match length of a sequence of LZ4 blocks.

43. 37. A program as claimed in any one of claims 34 to 36, wherein when using the integer value f, entries in the table of symbol occurrences are encoded using only integer arithmetic, shifts, logical operations, loads and stores.

44. 37. The program of claim 34, wherein the entropy coding is an asymmetric code system (ANS) entropy coding.

45. 37. The program of claim 34, wherein the operations further comprise repeating the sequential division and the calculation for each of the coding ranges.

46. 37. The program according to claim 34, wherein the operation further comprises recursively performing the sequential division and the calculation for each of the coding ranges.

47. 37. The program of claim 34, wherein the operations further comprise: independently encoding each segment of the encoded symbol sequence obtained by performing entropy-based binary segmentation on the symbol sequence; and specifying an order of each segment of the symbol sequence in a segment header.

48. 37. A program as claimed in any one of claims 34 to 36, wherein the sequence of symbols comprises losslessly encoded executable instructions.

49. 37. A program as claimed in any one of claims 34 to 36, wherein the sequence of symbols comprises a sequence of bits configured to control at least one graphics processing unit to generate at least a portion of an interactive graphical display.

50. 37. The program of claim 34, wherein the operations further comprise segmenting the symbol sequence before encoding using entropy-based binary segmentation, the entropy-based binary segmentation reducing or minimizing the sum of the entropy and size of the symbol occurrence tables for all resulting segments at each segmentation step.

51. Computer, means for accessing an integer value f encoding a table of symbol occurrences; means for performing the operation of decoding said table of symbol occurrences using said integer value f, said table including: (i) decoding each entry of the accumulation table of symbol occurrences by sequentially dividing a decoding range of the accumulation table of symbol occurrences by a respective intermediate index, wherein for each decoding range: Decode each intermediate index entry of the decoding range by calculating the first index entry+f mod (last index entry−first index entry+1) from the decoded entries of the accumulation table of symbol occurrences; Calculate f div (the last index entry - the first index entry + 1) and update f. (ii) calculating the table of symbol occurrences from the decoded entries of the cumulative table of symbol occurrences; A program that functions as a

52. The computer further comprises: means for receiving a sequence of symbols entropy coded using a table of symbol occurrences; 52. The program of claim 51, further comprising means for entropy decoding the encoded symbol sequence by applying the calculated table of symbol occurrences.

53. 53. The program of claim 52, further causing the computer to function as a means for streaming data representing at least a portion of a graphical user interaction using at least a portion of the entropy decoded symbol sequence.

54. 53. The program of claim 52, further causing the computer to function as a means for executing at least a portion of the entropy-decoded symbol sequence.

55. 53. The program of claim 52, further causing the computer to function as a means for streaming information based on at least a portion of the entropy-decoded sequence of symbols.

56. The computer further comprises: and functioning as a means for receiving a second integer value m; 52. The program of claim 51, wherein in (i), a zero value is used as a lower limit of the accumulation table of symbol occurrences and the received second integer value m is used as an upper limit of the accumulation table of symbol occurrences.

57. The computer further comprises: and functioning as a means for receiving a second integer value m; 52. The program of claim 51 , wherein in (i), a zero value is inserted as a first entry in the accumulation table of symbol occurrences, and the received second integer value m is inserted as a last entry in the accumulation table of symbol occurrences.

58. 58. The program of claim 56 or 57, wherein the second integer value m is received from header metadata of the encoded sequence of symbols.

59. 58. The program of claim 51, wherein the operations further comprise: traversing a tree of the divided decoding ranges and decoding each entry of the accumulation table by performing a division at each node of the tree before a child node of the node.

60. 60. The program of claim 59, wherein the operations further include decoding each entry in the accumulation table by depth-first traversing a tree of the divided decoding ranges and performing a division at each node of the tree.

61. 58. The program according to claim 51, wherein the integer value f obtained by said access is represented as a bignum.

62. 58. The program of any of claims 51 to 57, wherein the operations further comprise renormalizing to allow for faster and more memory-efficient decoding.

63. 58. The program of claim 52, wherein the encoded symbol sequence comprises a set of distinct components including a token, a literal length, a literal, an offset, and a match length of a sequence of LZ4 blocks.

64. 58. The program of claim 51, wherein the operations restore entries in the table of symbol occurrences from the integer value f using only integer arithmetic, shifts, logical operations, loads and stores.

65. 56. The program of claim 52, wherein the entropy decoding is asymmetric code system (ANS) entropy decoding.

66. 58. The program according to claim 51, wherein in (i), the sequential division and the calculation are repeated for each of the decoding ranges.

67. 58. The program according to claim 51, wherein in (i), the sequential division and the calculation are performed recursively for each of the decoding ranges.

68. 56. The program of claim 52, further causing the computer to function as a means for independently decoding each segment of the encoded symbol sequence obtained by performing entropy-based binary segmentation of the symbol sequence, and reconstructing the symbol sequence based on segment headers.

Citation Information

Patent Citations

  • Data lossless compression and decoding method combining rANS and LZ4 coding

    CN114520659A

  • System and method for compressing data using asymmetric numeral systems with probability distributions

    US20160248440A1