EA044215B1 - ENTROPY CODING OF SIGNAL Amplification - Google Patents

ENTROPY CODING OF SIGNAL Amplification Download PDF

Info

Publication number
EA044215B1
EA044215B1 EA202190284 EA044215B1 EA 044215 B1 EA044215 B1 EA 044215B1 EA 202190284 EA202190284 EA 202190284 EA 044215 B1 EA044215 B1 EA 044215B1
Authority
EA
Eurasian Patent Office
Prior art keywords
data
encoded
stream
residual data
encoding
Prior art date
Application number
EA202190284
Other languages
Russian (ru)
Inventor
Гвидо Меарди
Original Assignee
В-Нова Интернэшнл Лтд
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by В-Нова Интернэшнл Лтд filed Critical В-Нова Интернэшнл Лтд
Publication of EA044215B1 publication Critical patent/EA044215B1/en

Links

Description

Уровень техникиState of the art

Ранее была предложена гибридная технология кодирования с обратной совместимостью, например, в WO 2014/170819 и WO 2018/046940, содержание которых включено в настоящий документ путем отсылки.A backward-compatible hybrid encoding technology has previously been proposed, for example in WO 2014/170819 and WO 2018/046940, the contents of which are incorporated herein by reference.

Предложен способ, который предусматривает: разбор потока данных на первые порции кодированных данных и вторые порции кодированных данных; реализует первый декодер для декодирования первых порций кодированных данных при первой передаче сигнала; реализует второй декодер для декодирования вторых порций кодированных данных в данные восстановления, данные восстановления, определяющие, как модифицировать первую передачу сигнала; и применяет данные восстановления к первой передаче сигнала для получения второй передачи сигнала.A method is proposed that involves: parsing the data stream into first portions of encoded data and second portions of encoded data; implements a first decoder for decoding first portions of encoded data when the signal is first transmitted; implements a second decoder for decoding the second portions of the encoded data into recovery data, the recovery data determining how to modify the first signal transmission; and applies the reconstruction data to the first signal transmission to obtain a second signal transmission.

В нем дополнительно предлагается дополнение, в котором набор остаточных элементов может использоваться для восстановления воспроизведения первой временной выборки сигнала. Генерируется набор элементов пространственно-временной корреляции, связанных с первой временной выборкой. Набор элементов пространственно-временной корреляции указывает степень пространственной корреляции между множеством остаточных элементов и степень временной корреляции между первыми опорными данными на основе воспроизведения и вторыми опорными данными на основе воспроизведения второй временной выборки сигнала. Набор элементов пространственно-временной корреляции используется для генерации выходных данных.It further proposes an extension in which a set of residual elements can be used to reconstruct the reproduction of the first time sample of the signal. A set of spatiotemporal correlation elements associated with the first time sample is generated. The set of spatiotemporal correlation elements indicates the degree of spatial correlation between the plurality of residual elements and the degree of temporal correlation between the first reproduction-based reference data and the second reproduction-based reference data of the second time sample of the signal. A set of spatiotemporal correlation elements is used to generate the output.

Типичные технологии кодирования видео предусматривают применение операции энтропийного кодирования к выходным данным. Существует потребность в простой и быстрой схеме энтропийного кодирования с низкой сложностью для применения сжатия данных к данным восстановления или остаточным элементам вышеупомянутых предложенных технологий или другим подобным остаточным данным.Typical video encoding technologies involve applying an entropy encoding operation to the output data. There is a need for a simple and fast entropy encoding scheme with low complexity for applying data compression to reconstruction data or residuals of the above proposed technologies or other such residual data.

Раскрытие изобретенияDisclosure of the Invention

Согласно аспектам изобретения предоставляется способ энтропийного кодирования или декодирования остаточных данных, причем остаточные данные могут использоваться для исправления или расширения данных базового потока, например кадра видео, закодированного с использованием унаследованной технологии кодирования видео.According to aspects of the invention, a method is provided for entropy encoding or decoding residual data, wherein the residual data can be used to correct or enhance base stream data, such as a video frame encoded using a legacy video encoding technology.

Согласно аспекту изобретения предоставляется способ кодирования видеосигнала. Способ включает: получение входного кадра; обработку входного кадра для генерирования остаточных данных, остаточные данные формируют часть расширенного потока и позволяют декодеру восстановить входной кадр на основе опорного восстановленного кадра; и применение операции кодирования длин серий к остаточным данным, при этом операция кодирования длин серий включает генерирование байтового потока, закодированного по длинам серий, содержащего набор символов, представляющих ненулевые значения остаточных данных и подсчеты последовательных нулевых значений остаточных данных, причем способ характеризуется следующими этапами: применение канонической операции кодирования Хаффмана к набору символов для генерирования данных, закодированных по Хаффману, содержащих набор кодов, представляющих байтовый поток, закодированный по длине серий; сравнение размера данных по меньшей мере части байтового потока, закодированного по длине серий, с размером данных по меньшей мере соответствующей части данных, закодированных по Хаффману; и вывод байтового потока, закодированного по длине серий, или данных, закодированных по Хаффману, в выходной битовый поток (102, 103) на основе того, какой из них имеет меньший размер данных.According to an aspect of the invention, a method for encoding a video signal is provided. The method includes: receiving an input frame; processing the input frame to generate residual data, the residual data forming part of the extended stream and allowing the decoder to reconstruct the input frame based on the reference reconstructed frame; and applying a run-length encoding operation to the residual data, the run-length encoding operation comprising generating a run-length encoded byte stream containing a set of characters representing non-zero values of the residual data and counts of consecutive zero values of the residual data, the method being characterized by the following steps: applying a canonical Huffman encoding operation on a character set for generating Huffman encoded data containing a set of codes representing a run-length encoded byte stream; comparing the data size of at least a run length encoded portion of the byte stream with the data size of at least a corresponding portion of the Huffman encoded data; and outputting the run length encoded byte stream or the Huffman encoded data to the output bit stream (102, 103) based on which one has the smaller data size.

Таким образом, способ кодирования обеспечивает несложное, простое и быстрое решение для сжатия остаточных данных. В решении используются уникальные характеристики остаточных данных, такие как относительное появление нулевых значений, вероятная группировка нулевых значений на основе порядка сканирования процесса преобразования генерирования остаточных данных (если преобразование используется) и относительное разнообразие значений данных, а также их потенциальная относительная частота/редкость в остаточных данных.Thus, the encoding method provides an uncomplicated, simple and fast solution for compressing residual data. The solution takes advantage of the unique characteristics of the residual data, such as the relative occurrence of null values, the likely grouping of null values based on the scanning order of the residual data generation transform process (if a transform is used), and the relative diversity of data values, as well as their potential relative frequency/rarity in the residual data. .

Набор символов в кодированном потоке байтов может быть последовательным. Подсчет последовательных нулевых значений также может называться серией нулей. Остаточные данные, над которыми выполняется операция кодирования длин серий, могут представлять квантованные остаточные данные, предпочтительно квантованный набор коэффициентов преобразования. Квантованный набор коэффициентов преобразования может быть упорядочен слоем, то есть по наборам коэффициентов одного типа, по плоскости, по уровню качества или по поверхности. Эти термины дополнительно описаны и определены в данном документе. Символы могут быть последовательными в соответствующем порядке сканирования операции преобразования, так что остаточные данные могут быть легко сопоставлены с опорным восстановленным кадром.The set of characters in the encoded byte stream can be sequential. Counting consecutive zero values can also be called a run of zeros. The residual data on which the run length encoding operation is performed may represent quantized residual data, preferably a quantized set of transform coefficients. The quantized set of transform coefficients can be ordered by layer, that is, by sets of coefficients of the same type, by plane, by quality level, or by surface. These terms are further described and defined herein. The symbols may be sequential in the appropriate scanning order of the transform operation, so that the residual data can be easily compared to the reference reconstructed frame.

Предпочтительно операция кодирования длин серий включает: кодирование ненулевых значений данных остаточных данных в по меньшей мере первом типе символа; и кодирование подсчетов последовательных нулевых значений во втором типе символа, так что остаточные данные кодируются как последовательность символов разных типов. Таким образом, остаточные данные могут быть закодированы как последовательность символов, содержащая тип значения данных и серию нулей. Типы обеспечивают скорость и простоту декодирования в декодере, но также облегчают дальнейшую операцию энтропийно- 1 044215 го кодирования, как описано ниже. Структурирование данных в минимизированный набор кодов фиксированной длины разных типов применяется для выполнения последующих шагов.Preferably, the run length encoding operation includes: encoding non-zero residual data data values into at least a first symbol type; and encoding the counts of consecutive zero values into a second symbol type such that the residual data is encoded as a sequence of symbols of different types. Thus, the residual data can be encoded as a sequence of characters containing the data value type and a series of zeros. Types provide speed and ease of decoding at the decoder, but also facilitate subsequent entropy encoding operations, as described below. Structuring the data into a minimized set of fixed-length codes of different types is used to perform subsequent steps.

В некоторых вариантах воплощения операция кодирования длин серий включает следующие действия: кодирование значений данных остаточных данных в первый тип символа и третий тип символа, первый и третий типы символа, каждый из которых содержит часть значения данных, так что части могут быть объединены в декодере для восстановления значения данных. Каждый тип символа может иметь фиксированный размер и может быть байтом. Значения данных, превышающие пороговое значение или превышающие размер, доступный в типе символа, могут быть легко переданы или сохранены с использованием потока байтов. Структурирование данных в байты или символы не только облегчает декодирование, но также облегчает энтропийное кодирование символов фиксированной длины, как будет рассмотрено далее в этом документе. Добавление третьего типа символа позволяет легко различать три типа символов друг от друга на стороне декодера. Там, где мы говорим о типах символов, могут использоваться термины блоки, байты (где символ является байтом), контексты или типы.In some embodiments, the run length encoding operation includes the following steps: encoding the residual data data values into a first symbol type and a third symbol type, the first and third symbol types, each containing a portion of the data value so that the portions can be combined at the decoder for reconstruction data values. Each character type can have a fixed size and can be a byte. Data values exceeding a threshold or larger than the size available in the character type can be easily transferred or stored using a byte stream. Structuring data into bytes or characters not only facilitates decoding, but also facilitates entropy encoding of fixed-length characters, as discussed later in this document. The addition of a third character type makes it easy to distinguish the three character types from each other on the decoder side. Where we talk about character types, the terms blocks, bytes (where the character is a byte), contexts, or types may be used.

Операция кодирования длин серий может включать следующие действия: сравнение размера каждого значения данных остаточных данных, которые должны быть кодированы, с пороговым значением; и кодирование каждого значения данных в символ первого типа символа, если размер ниже порогового, и кодирование части каждого значения данных в символ первого типа символа и часть каждого значения данных в символ третьего типа символа, если размер выше порогового значения.The run length encoding operation may include the following steps: comparing the size of each residual data value to be encoded with a threshold value; and encoding each data value into a symbol of a first symbol type if the size is below the threshold, and encoding a portion of each data value into a symbol of the first symbol type and a portion of each data value into a symbol of a third symbol type if the size is above the threshold.

Если размер превышает пороговое значение, способ может содержать установку флага в символе первого типа символа, указывающего, что часть представленного значения данных кодируется в дополнительный символ третьего типа символа. Флаг может быть флагом переполнения или битом переполнения и может в некоторых примерах быть младшим значащим битом символа или байта. Если наименее значимый бит символа является флагом, значение данных или часть значения данных может содержаться в оставшихся битах байта. Установка бита переполнения как младшего значащего бита облегчает комбинирование с последующими символами.If the size exceeds a threshold, the method may comprise setting a flag in the symbol of the first symbol type indicating that a portion of the represented data value is encoded into an additional symbol of the third symbol type. The flag may be an overflow flag or an overflow bit, and may in some examples be the least significant bit of a character or byte. If the least significant bit of the character is a flag, the data value or part of the data value may be contained in the remaining bits of the byte. Setting the overflow bit as the least significant bit makes it easier to combine with subsequent characters.

Способ может дополнительно включать вставку флага в каждый символ, указывающего тип символа, кодируемого следующим в байтовом потоке, закодированном по длине серий. Флаг может быть битом переполнения, как описано выше, или может дополнительно быть флагом выполнения или битом выполнения, указывающим, содержит ли следующий символ серию нулей, или значение данных, или часть значения данных. Если флаг представляет, содержит ли следующий символ серию (или подсчет последовательных нулей), флаг может быть битом символа, предпочтительно самым старшим битом символа. Подсчет последовательных нулей или значение данных может содержаться в оставшихся битах символа. Таким образом, «серия нулей» или символ второго типа содержит 7 доступных битов байта для подсчета, а «данные» или символ первого типа содержат 6 доступных битов для значения данных, где бит переполнения не установлен и 7 доступных битов для значения данных, в котором установлен бит переполнения.The method may further include inserting a flag into each character indicating the type of character encoded next in the run-length encoded byte stream. The flag may be an overflow bit as described above, or may additionally be a run flag or run bit indicating whether the next character contains a run of zeros, or a data value, or part of a data value. If the flag represents whether the next character contains a run (or a count of consecutive zeros), the flag can be a bit of the character, preferably the most significant bit of the character. A count of consecutive zeros or a data value may be contained in the remaining bits of the symbol. So a "run of zeros" or character of the second type contains 7 available bits of a byte for counting, and a "data" or character of the first type contains 6 available bits for a data value where the overflow bit is not set and 7 available bits for a data value where The overflow bit is set.

В общем, флаг может быть различным для каждого типа символа и может указывать тип символа, следующего в потоке.In general, the flag can be different for each character type and can indicate the type of character next in the stream.

В предпочтительных вариантах воплощения вышеупомянутого аспекта способ дополнительно включает применение дополнительной операции энтропийного кодирования к набору символов, созданных операцией кодирования длин серий. Таким образом, символы фиксированной длины, намеренно созданные структурой операции кодирования длин серий, могут быть преобразованы в коды переменной длины, чтобы уменьшить общий размер данных. Структура кодирования длин серий разработана для того, чтобы создавать символы фиксированной длины с высокой частотой, чтобы облегчить дальнейшее выполнение улучшенной операции энтропийного кодирования и обеспечить общее уменьшение размера данных. Дополнительная операция энтропийного кодирования использует вероятность или частоту появления символа в байтовом потоке, созданном операцией кодирования длин серий.In preferred embodiments of the above aspect, the method further includes applying an additional entropy encoding operation to the set of symbols generated by the run length encoding operation. Thus, fixed-length characters intentionally created by the run-length encoding operation structure can be converted to variable-length codes to reduce the overall data size. The run-length encoding structure is designed to produce fixed-length symbols at high frequency to facilitate further enhanced entropy encoding operation and to achieve an overall reduction in data size. An optional entropy encoding operation uses the probability or frequency of a character appearing in the byte stream produced by the run-length encoding operation.

В предпочтительном примере дополнительная операция энтропийного кодирования представляет собой операцию кодирования Хаффмана или операцию арифметического кодирования. Предпочтительно способ дополнительно включает применение операции кодирования Хаффмана к набору символов для генерации данных, закодированных кодированием Хаффмана, содержащих набор кодов, представляющих байтовый поток, закодированный по длине серии. Операция кодирования Хаффмана принимает в качестве входных символов байтовый поток, закодированный по длине серии, и выводит множество кодов переменной длины в потоке битов. Кодирование Хаффмана представляет собой способ кодирования, который может эффективно сокращать коды фиксированной длины. Структура байтов, закодированных по длине серии, означает, что символы двух типов с большой вероятностью будут часто реплицироваться, а это означает, что для каждого повторяющегося символа потребуется всего несколько битов. По всей плоскости одно и то же значение данных, вероятно, будет реплицировано (особенно, когда остаточные данные квантованы), и, следовательно, код переменной длины может быть небольшим (но повторяться).In a preferred example, the additional entropy encoding operation is a Huffman encoding operation or an arithmetic encoding operation. Preferably, the method further includes applying a Huffman encoding operation to the set of symbols to generate Huffman encoded data comprising a set of codes representing a run length encoded byte stream. The Huffman encoding operation takes as input symbols a run-length encoded byte stream and outputs a set of variable length codes in the bit stream. Huffman coding is an encoding technique that can effectively shorten fixed-length codes. The run length encoded byte structure means that the two types of characters are likely to be replicated frequently, meaning that only a few bits are required for each repeated character. Across the entire plane, the same data value is likely to be replicated (especially when the residual data is quantized), and hence the variable length code may be small (but repeatable).

Кодирование Хаффмана также хорошо оптимизировано для программной реализации (как ожидается здесь) и является эффективным сточки зрения вычислений. При этом используется минимальный объем памяти, а декодирование выполняется быстрее по сравнению с другими способами энтропийного ко- 2 044215 дирования, поскольку этапы обработки представляют простое пошаговое перемещение по дереву. Вычислительные преимущества возникают из-за формы и глубины дерева, созданного с помощью специально разработанной операции кодирования длин серий.Huffman coding is also well optimized for software implementation (as expected here) and is computationally efficient. This uses minimal memory, and decoding is faster than other entropy encoding methods because the processing steps are simple step-by-step movements through the tree. The computational benefits arise from the shape and depth of the tree created using a specially designed run length encoding operation.

Операции кодирования могут выполняться над группой коэффициентов, то есть на слое, на плоскости кадра, на уровне качества или на всей поверхности или кадре. То есть статистика или параметры каждой операции могут быть определены на основе группы значений данных и нулевых значений данных, которые должны быть кодированы, или символов, представляющих эти значения.Encoding operations can be performed on a group of coefficients, that is, on a layer, on a frame plane, on a quality level, or on an entire surface or frame. That is, the statistics or parameters of each operation can be determined based on the group of data values and null data values to be encoded, or the characters representing these values.

Операция кодирования Хаффмана может быть канонической операцией кодирования Хаффмана, так что данные, закодированные Хаффманом, содержат длину кода для каждого уникального символа из набора символов, причем длина кода представляет длину кода, используемого для кодирования соответствующего символа. Каноническое кодирование Хаффмана способствует уменьшению количества параметров кодирования, которые необходимо сообщать между кодером и декодером в метаданных, гарантируя, что идентичные длины кода прикрепляются к символам последовательным образом. Кодовая книга для декодера может быть выведена, и необходимо отправить только длины кодов. Таким образом, канонический кодер Хаффмана особенно эффективен для неглубоких деревьев, где имеется большое количество различных значений данных.The Huffman encoding operation may be a canonical Huffman encoding operation such that the Huffman encoded data contains a code length for each unique character in a character set, the code length representing the length of the code used to encode the corresponding character. Canonical Huffman coding helps reduce the number of encoding parameters that need to be communicated between encoder and decoder in metadata by ensuring that identical code lengths are attached to symbols in a consistent manner. The codebook for the decoder can be output and only the lengths of the codes need to be sent. Thus, the canonical Huffman encoder is particularly effective for shallow trees where there are a large number of different data values.

В некоторых примерах способ дополнительно включает сравнение размера данных по меньшей мере части байтового потока, закодированного по длине серий, с размером данных по меньшей мере части данных, закодированных по Хаффману; и вывод байтового потока, закодированного по длине серий, или данных, закодированных по Хаффману, в выходном битовом потоке на основе сравнения. Таким образом, каждый блок или секция входных данных выборочно отправляется для уменьшения общего размера данных, гарантируя, что декодер может легко различать типы кодирования. Разница может находиться в пределах порогового значения или допуска, так что, хотя одна схема может приводить к меньшему количеству данных, вычислительная эффективность может означать, что одна схема является предпочтительной.In some examples, the method further includes comparing the data size of at least a portion of the run length encoded byte stream with the data size of at least a portion of the Huffman encoded data; and outputting the run-length encoded byte stream or Huffman encoded data in the output bit stream based on the comparison. Thus, each block or section of input data is sent selectively to reduce the overall data size, ensuring that the decoder can easily distinguish between encoding types. The difference may be within a threshold or tolerance, so that although one scheme may result in less data, the computational efficiency may mean that one scheme is preferable.

Чтобы различать схемы, способ может дополнительно включать добавление флага к метаданным конфигурации, сопровождающим выходной поток битов, указывающего, представляет ли поток битов байтовый поток, закодированный по длине серии, или данные, закодированные по Хаффману. Это быстрый и эффективный способ передачи сигналов. Альтернативно, декодер может идентифицировать используемую схему из структуры данных, например, данные, закодированные по Хаффману, могут иметь часть заголовка и часть данных, в то время как данные, закодированные по длине серии, могут содержать только часть данных, и, таким образом, декодер может уметь различать две схемы.To distinguish between schemes, the method may further include adding a flag to the configuration metadata accompanying the output bitstream indicating whether the bitstream represents a run-length encoded byte stream or Huffman encoded data. This is a fast and efficient way to transmit signals. Alternatively, the decoder may identify the scheme used from the data structure, for example, Huffman encoded data may have a header part and a data part, while run length encoded data may only contain a data part, and thus the decoder may be able to distinguish between two schemes.

Операция кодирования Хаффмана может создавать отдельную таблицу частот для символов первого типа символа и символов второго типа символа. Кроме того, для каждого типа символа может применяться отдельная операция кодирования Хаффмана. Эти концепции способствуют особой эффективности схемы кодирования с переменной длиной кода. Например, если одно и то же значение данных реплицируется по плоскости, как это вероятно при кодировании видео, где сцена может иметь похожие цвета или ошибки/улучшения, для этих значений может потребоваться только несколько кодов (где коды не искажаются из-за символа типа серия нулей). Таким образом, этот вариант воплощения изобретения особенно выгоден для использования в сочетании с вышеописанной операцией кодирования длин серий. Как отмечалось выше, когда значения квантованы, символы могут быть реплицированы и не могут быть слишком многими разными значениями в одном кадре или группе коэффициентов.The Huffman encoding operation may create a separate frequency table for symbols of the first symbol type and symbols of the second symbol type. In addition, a separate Huffman encoding operation can be applied for each character type. These concepts contribute to the particular efficiency of the variable code length coding scheme. For example, if the same data value is replicated across a plane, as is likely when encoding video where the scene may have similar colors or errors/enhancements, those values may only require a few codes (where the codes are not corrupted by character type series zeros). Thus, this embodiment of the invention is particularly advantageous for use in combination with the run length encoding operation described above. As noted above, when values are quantized, symbols can be replicated and cannot be too many different values in one frame or group of coefficients.

Использование другой частотной таблицы для каждого типа символа обеспечивает особое преимущество в операции кодирования Хаффмана после специально разработанной операции кодирования длин серий.The use of a different frequency table for each symbol type provides a particular advantage in the Huffman encoding operation after a specially designed run length encoding operation.

Таким образом, способ может включать определение типа символа, который должен быть закодирован следующим, выбор таблицы частот на основе типа следующего символа, декодирование следующего символа с использованием выбранной таблицы частот и вывод закодированного символа в последовательности. Таблица частот может соответствовать уникальной кодовой книге.Thus, the method may include determining the type of symbol to be encoded next, selecting a frequency table based on the type of the next symbol, decoding the next symbol using the selected frequency table, and outputting the encoded symbol in sequence. The frequency table may correspond to a unique codebook.

Способ может включать создание заголовка потока, который может содержать указание множества длин кода, так что декодер может выводить длины кода и соответствующие символы для операции канонического декодирования Хаффмана. Длина кода может быть, например, длиной каждого кода, используемого для кодирования конкретного символа. Следовательно, длина кода имеет соответствующий код и соответствующий символ. Заголовок потока может быть первым типом заголовка потока и дополнительно содержать указание символа, связанного с соответствующей длиной кода из множества длин кода. В качестве альтернативы заголовок потока может быть заголовком потока второго типа, и способ может дополнительно включать упорядочивание множества длин кодов в заголовке потока на основе заранее определенного порядка символов, соответствующих каждой из длин кода, так что длины кода могут быть ассоциированы с соответствующим символом в декодере. Каждый тип обеспечивает эффективную сигнализацию параметров кодирования в зависимости от символов и длин, которые должны быть декодированы. Длины кода могут сигнализироваться как разница между длиной и другой длиной, предпочтительно сигнализируемой минимальной длиной кода.The method may include creating a stream header that may include an indication of a plurality of code lengths such that the decoder can output the code lengths and corresponding symbols for a canonical Huffman decoding operation. The code length may be, for example, the length of each code used to encode a particular character. Therefore, the code length has a corresponding code and a corresponding symbol. The stream header may be a first type of stream header and further comprise an indication of a symbol associated with a corresponding code length of the plurality of code lengths. Alternatively, the stream header may be a second type of stream header, and the method may further include ordering a plurality of code lengths in the stream header based on a predetermined order of symbols corresponding to each of the code lengths, such that the code lengths can be associated with a corresponding symbol at the decoder. Each type provides efficient signaling of encoding parameters depending on the symbols and lengths to be decoded. Code lengths may be signaled as the difference between a length and another length, preferably signaled by a minimum code length.

Второй тип заголовка потока может дополнительно содержать флаг, указывающий, что символ вThe second type of stream header may additionally contain a flag indicating that the character is in

- 3 044215 заранее определенном порядке возможного набора символов не существует в наборе символов в байтовом потоке, закодированном по длине серий. Таким образом, в заголовке должна содержаться только необходимая длина.- 3 044215 predefined order of possible character set does not exist in the character set in the run-length encoded byte stream. Thus, the header should contain only the required length.

Способ может дополнительно включать сравнение количества уникальных кодов в данных, закодированных по Хаффману, с пороговым значением и генерирование первого типа заголовка потока или второго типа заголовка потока на основе сравнения.The method may further include comparing the number of unique codes in the Huffman-encoded data with a threshold value and generating a first type of stream header or a second type of stream header based on the comparison.

Способ может дополнительно включать сравнение количества ненулевых символов или символов данных с пороговым значением и генерирование первого типа заголовка потока или второго типа заголовка потока на основе сравнения.The method may further include comparing a number of non-null symbols or data symbols with a threshold value and generating a first type of stream header or a second type of stream header based on the comparison.

В соответствии с дополнительным аспектом изобретения может быть предоставлен способ декодирования видеосигнала, при этом способ включает: извлечение кодированного потока битов; декодирование кодированного битового потока для генерирования остаточных данных, и, восстановление оригинального кадра видеосигнала на основе остаточных данных и опорного восстановленного кадра, в котором этап декодирования кодированного битового потока содержит: применение операции кодирования длин серий, чтобы генерировать остаточные данные, при этом операция кодирования длин серий включает идентификацию набора символов, представляющих ненулевые значения данных остаточных данных, и набора символов, представляющих подсчеты последовательных нулевых значений остаточных данных; анализ набора символов для получения ненулевых значений данных остаточных данных и подсчета последовательных нулевых значений; и генерирование остаточных данных на основе ненулевых значений данных и подсчеты последовательных нулевых значений, причем способ характеризуется тем, что этап декодирования закодированного битового потока включает: извлечение флага из метаданных конфигурации, сопровождающих закодированный битовый поток (102. 103), указывающего, содержит ли закодированный битовый поток байтовый поток, закодированный по длине серии, или данные, закодированные по Хаффману; и выборочное применение канонической операции кодирования Хаффмана к закодированному битовому потоку (102, 103) на основе флага для генерирования набора символов, представляющих ненулевые значения данных остаточных данных, и набора символов, представляющих подсчеты последовательных нулевых значений остаточных данных, при этом этап применения операции кодирования длин серий для генерирования остаточных данных выполняют над наборами символов.In accordance with a further aspect of the invention, a method for decoding a video signal may be provided, the method comprising: extracting a coded bit stream; decoding the encoded bitstream to generate residual data, and, restoring the original frame of the video signal based on the residual data and the reference reconstructed frame, wherein the step of decoding the encoded bitstream comprises: applying a run length encoding operation to generate the residual data, wherein the run length encoding operation includes identifying a set of characters representing non-zero residual data values and a set of characters representing counts of consecutive zero residual data values; parsing the character set to obtain non-zero residual data values and count consecutive zero values; and generating residual data based on non-zero data values and counting successive zero values, wherein the method is characterized in that the step of decoding the encoded bitstream includes: extracting a flag from configuration metadata accompanying the encoded bitstream (102, 103) indicating whether the encoded bitstream contains stream run-length encoded byte stream or Huffman encoded data; and selectively applying a canonical Huffman encoding operation to the encoded bitstream (102, 103) based on the flag to generate a set of symbols representing non-zero values of the residual data data and a set of symbols representing counts of successive zero values of the residual data, wherein the step of applying the length encoding operation series to generate residual data is performed on character sets.

Операция кодирования длин серий может содержать: идентификацию символов первого типа символа, представляющего ненулевые значения данных остаточных данных; идентификацию символов второго типа символа, представляющих подсчеты последовательных нулевых значений, так что последовательность символов разных типов декодируется для генерирования остаточных данных; и анализ набора символов согласно соответствующему типу каждого символа.The run length encoding operation may comprise: identifying symbols of a first symbol type representing non-zero values of the residual data data; identifying symbols of a second symbol type representing counts of consecutive zero values such that the sequence of symbols of the different types is decoded to generate residual data; and parsing the set of characters according to the corresponding type of each character.

Операция кодирования длин серий может содержать идентификацию символов первого типа символа и символов третьего типа символа, причем каждый первый и третий типы символа представляют часть значения данных; синтаксический анализ символа первого типа символа и символа третьего типа символа для получения частей значения данных; и объединение производных частей значения данных в значение данных.The run length encoding operation may comprise identifying symbols of a first symbol type and symbols of a third symbol type, wherein the first and third symbol types each represent a portion of a data value; parsing a character of the first character type and a character of a third character type to obtain parts of the data value; and combining the derived parts of the data value into a data value.

Способ может дополнительно включать: извлечение флага переполнения из символа первого типа символа, указывающего, содержится ли часть значения данных символа первого типа символа в последующем третьем типе символа.The method may further include: extracting an overflow flag from a symbol of the first symbol type indicating whether part of the data value of the symbol of the first symbol type is contained in a subsequent third symbol type.

Способ может дополнительно включать извлечение флага из каждого символа, указывающего следующий тип символа, который ожидается в наборе символов.The method may further include extracting a flag from each character indicating the next type of character that is expected in the character set.

Можно предположить, что начальный символ является символом первого типа, так что начальный символ анализируется для получения по меньшей мере части значения данных.It can be assumed that the start symbol is a symbol of the first type, such that the start symbol is parsed to obtain at least part of the data value.

Этап декодирования закодированного потока битов может включать применение операции кодирования Хаффмана к закодированному потоку битов для генерации набора символов, представляющих ненулевые значения данных остаточных данных, и набора символов, представляющих подсчеты последовательных нулевых значений остаточных данных, при этом этап применения операции кодирования длин серий для генерации остаточных данных выполняется над наборами символов.The step of decoding the encoded bitstream may include applying a Huffman encoding operation to the encoded bitstream to generate a set of symbols representing non-zero data values of the residual data and a set of symbols representing counts of consecutive zero values of the residual data, wherein the step of applying a run length encoding operation to generate the residuals data processing is performed on character sets.

Операция кодирования Хаффмана может быть канонической операцией кодирования Хаффмана.The Huffman encoding operation may be a canonical Huffman encoding operation.

Способ может дополнительно включать извлечение флага из метаданных конфигурации, сопровождающих закодированный поток битов, указывающего, содержит ли закодированный поток битов байтовый поток, закодированный по длине серии, или данные, закодированные по Хаффману; и выборочное применение операции кодирования Хаффмана на основе флага.The method may further include retrieving a flag from configuration metadata accompanying the encoded bitstream indicating whether the encoded bitstream contains a run length encoded byte stream or Huffman encoded data; and selectively applying a flag-based Huffman encoding operation.

Способ может дополнительно включать: идентификацию символа начального типа, который, как ожидается, будет выведен в кодированном потоке битов; применение операции кодирования Хаффмана к закодированному потоку битов для получения начального символа на основе набора параметров кодирования, связанных с начальным типом ожидаемого символа; извлечение флага из начального символа, указывающего следующий тип символа, который, как ожидается, будет получен из потока битов; и, кроме того, применение операции кодирования Хаффмана к потоку битов для получения последующего символа на основе набора параметров кодирования, связанных с последующим типом символа, который,The method may further include: identifying a symbol of an initial type that is expected to be output in the encoded bitstream; applying a Huffman encoding operation to the encoded bit stream to obtain an initial symbol based on a set of encoding parameters associated with the initial type of the expected symbol; extracting a flag from the initial symbol indicating the next type of symbol that is expected to be obtained from the bit stream; and, further, applying a Huffman encoding operation to the bitstream to obtain a subsequent symbol based on a set of encoding parameters associated with the subsequent symbol type, which,

- 4 044215 как ожидается, будет получен из потока битов.- 4 044215 is expected to be obtained from the bitstream.

Способ может дополнительно включать итеративное извлечение флага из декодированного символа, указывающего следующий тип символа, который, как ожидается, будет получен из потока битов, и применение операции кодирования Хаффмана к потоку битов для получения следующего символа на основе набора параметров кодирования, связанных с последующим типом символа, который, как ожидается, будет получен из потока битов.The method may further include iteratively extracting a flag from the decoded symbol indicating the next symbol type expected to be obtained from the bit stream, and applying a Huffman encoding operation to the bit stream to obtain the next symbol based on a set of encoding parameters associated with the subsequent symbol type. , which is expected to be obtained from the bitstream.

Таким образом, способ может включать этапы декодирования символа с использованием операции кодирования Хаффмана, декодирования символа с использованием операции кодирования длин серий, идентификации типа символа, ожидаемого следующим из операции кодирования длин серий, и декодирования следующего символа с использованием операции кодирования Хаффмана.Thus, the method may include the steps of decoding a symbol using a Huffman encoding operation, decoding a symbol using a run length encoding operation, identifying a symbol type expected to result from a run length encoding operation, and decoding the next symbol using a Huffman encoding operation.

Способ может дополнительно включать: извлечение заголовка потока, содержащего указание множества длин кода, которые должны использоваться для операции канонического кодирования Хаффмана; ассоциирование каждой длины кода с соответствующим символом в соответствии с канонической операцией кодирования Хаффмана; и идентификацию кода, связанного с каждым символом, на основе длин кода в соответствии с канонической операцией кодирования Хаффмана. Таким образом, коды могут быть связаны с последовательными символами, длины кода которых идентичны.The method may further include: retrieving a stream header containing an indication of a plurality of code lengths to be used for a canonical Huffman encoding operation; associating each code length with a corresponding symbol in accordance with a canonical Huffman encoding operation; and identifying a code associated with each symbol based on code lengths in accordance with a canonical Huffman encoding operation. Thus, codes can be associated with consecutive symbols whose code lengths are identical.

Заголовок потока может содержать указание символа, связанного с соответствующей длиной кода из множества длин кода, и этап связывания каждой длины кода с символом включает связывание каждой длины кода с соответствующим символом в заголовке потока.The stream header may include an indication of a symbol associated with a corresponding code length of the plurality of code lengths, and the step of associating each code length with a symbol includes associating each code length with a corresponding symbol in the stream header.

Этап связывания каждой длины кода с соответствующим символом включает связывание каждой длины кода с символом из набора заранее определенных символов в соответствии с порядком, в котором была извлечена каждая длина кода.The step of associating each code length with a corresponding symbol involves associating each code length with a symbol from a set of predetermined symbols according to the order in which each code length was extracted.

Способ может дополнительно содержать не связывание символа из набора заранее определенных символов с соответствующей длиной кода, где флаг заголовка потока указывает, что длина кода не существует в заголовке потока для этого символа.The method may further comprise not associating a symbol from a set of predetermined symbols with a corresponding code length, where a stream header flag indicates that the code length does not exist in a stream header for that character.

Согласно аспекту изобретения предоставляется способ кодирования видеосигнала. Способ включает: получение входного кадра; обработку входного кадра для генерации остаточных данных, остаточные данные, позволяющие декодеру восстановить входной кадр из опорного восстановленного кадра; и применение операции кодирования Хаффмана к остаточным данным, при этом операция Хаффмана содержит генерирование кодированного битового потока, содержащего набор кодов, кодирующих набор символов, представляющих остаточные данные.According to an aspect of the invention, a method for encoding a video signal is provided. The method includes: receiving an input frame; processing the input frame to generate residual data, the residual data allowing the decoder to reconstruct the input frame from the reference reconstructed frame; and applying a Huffman encoding operation to the residual data, wherein the Huffman operation comprises generating an encoded bitstream comprising a set of codes encoding a set of symbols representing the residual data.

Согласно дополнительному аспекту изобретения может быть предоставлен способ декодирования видеосигнала, при этом способ включает: извлечение закодированного битового потока; декодирование кодированного битового потока для генерирования остаточных данных, и восстановление оригинального кадра видеосигнала из остаточных данных и опорный восстановленный кадр, в котором этап декодирования кодированного битового потока содержит: применение операции кодирования Хаффмана для генерирования остаточных данных, отличающееся тем, что операция кодирования Хаффмана включает генерирование набора символов, представляющих остаточные данные путем сравнения кодированного битового потока с опорным отображением кодов в соответствующем символе, генерирование остаточных данных на основе значений данных, отличающихся от нуля, и подсчет последовательных нулевых значений.According to a further aspect of the invention, a method for decoding a video signal may be provided, the method comprising: extracting an encoded bit stream; decoding the encoded bit stream to generate residual data, and recovering the original frame of the video signal from the residual data and a reference reconstructed frame, wherein the step of decoding the encoded bit stream comprises: applying a Huffman encoding operation to generate the residual data, wherein the Huffman encoding operation includes generating a set symbols representing residual data by comparing the encoded bit stream with a reference mapping of codes in the corresponding symbol, generating residual data based on data values other than zero, and counting consecutive zero values.

Согласно дополнительному аспекту может быть предоставлено устройство для кодирования набора данных в кодированный набор данных. Устройство выполнено с возможностью кодирования входного видео в соответствии с вышеуказанными этапами. Устройство может содержать процессор, выполненный с возможностью выполнения способа в соответствии с любым из вышеуказанных аспектов.According to a further aspect, an apparatus for encoding a data set into a coded data set may be provided. The device is configured to encode the input video in accordance with the above steps. The device may include a processor configured to perform a method in accordance with any of the above aspects.

Согласно дополнительному аспекту может быть предоставлено устройство для декодирования набора данных в восстановленное видео из набора данных. Устройство выполнено с возможностью декодирования выходного видео в соответствии с вышеуказанными этапами. Устройство может содержать процессор, выполненный с возможностью выполнения способа в соответствии с любым из вышеупомянутых аспектов.According to a further aspect, an apparatus for decoding the data set into a reconstructed video from the data set may be provided. The device is configured to decode the output video in accordance with the above steps. The device may comprise a processor configured to perform a method in accordance with any of the above aspects.

Также могут быть предоставлены кодер и декодер.An encoder and decoder can also be provided.

Согласно дополнительным аспектам изобретения могут быть предоставлены машиночитаемые носители, которые при исполнении процессором заставляют процессор выполнять любой из способов в соответствии с вышеупомянутыми аспектами.In accordance with additional aspects of the invention, computer-readable media may be provided that, when executed by a processor, cause the processor to perform any of the methods in accordance with the foregoing aspects.

Согласно дополнительному аспекту может быть предоставлен закодированный битовый поток, содержащий закодированную версию остаточных данных для расширенного потока, причем остаточные данные выполнены с возможностью использования с опорным восстановленным кадром для восстановления исходного кадра видеосигнала, при этом закодированные остаточные данные содержат результат применения операции кодирования длин серий к остаточным данным, при этом операция кодирования длин серий приводит к получению набора символов, представляющих ненулевые значения данных остаточных данных, и набора символов, представляющих подсчеты последовательных нулевых значений остаточных данных; причем набор символов анализируют декодером для получения ненулевых значенийAccording to a further aspect, an encoded bit stream may be provided containing an encoded version of the residual data for the extended stream, wherein the residual data is configured to be used with a reference reconstructed frame to reconstruct the original frame of the video signal, wherein the encoded residual data comprises the result of applying a run length encoding operation to the residual data, wherein the run length encoding operation results in a set of characters representing non-zero data values of the residual data, and a set of characters representing counts of consecutive zero values of the residual data; wherein the set of symbols is analyzed by the decoder to obtain non-zero values

- 5 044215 данных остаточных данных и подсчетов последовательных нулевых значений, при этом ненулевые значения данных и подсчеты последовательных нулевых значений выполнены с возможностью использования для получения остаточных данных на декодере, причем закодированный битовый поток характеризуется следующим: метаданные конфигурации содержат флаг, указывающий, представляет ли закодированный битовый поток байтовый поток, закодированный по длине серий, или данные, закодированные по Хаффману, причем в ответ на флаг, указывающий, что закодированный битовый поток содержит данные, закодированные по Хаффману, набор символов, представляющих ненулевые значения данных остаточных данных, и набор символов, представляющих подсчеты последовательных нулевых значений, дополнительно кодируют по Хаффману в закодированном битовом потоке; и причем флаг выполнен с возможностью использования для указания декодеру применить операцию кодирования Хаффмана к закодированному битовому потоку для генерирования набора символов, представляющих ненулевые значения данных остаточных данных, и набора символов, представляющих подсчеты последовательных нулевых значений до применения операции кодирования длин серий на декодере.- 5 044215 data of residual data and counts of consecutive zero values, wherein the non-zero data values and counts of consecutive zero values are configured to be used to obtain residual data at a decoder, wherein the encoded bitstream is characterized by the following: the configuration metadata includes a flag indicating whether the encoded bitstream represents bitstream run-length encoded byte stream or Huffman encoded data, wherein in response to a flag indicating that the encoded bitstream contains Huffman encoded data, a set of characters representing non-zero data values of the residual data, and a set of characters, representing counts of consecutive zero values, further Huffman encoded in the encoded bit stream; and wherein the flag is configured to be used to instruct the decoder to apply a Huffman encoding operation to the encoded bit stream to generate a set of symbols representing non-zero values of the residual data data and a set of symbols representing counts of consecutive zero values before applying the run length encoding operation at the decoder.

Подробное описание изобретенияDetailed Description of the Invention

Примеры систем и способов в соответствии с изобретением теперь будут описаны со ссылкой на прилагаемые чертежи, на которых:Examples of systems and methods in accordance with the invention will now be described with reference to the accompanying drawings, in which:

на фиг. 1 проиллюстрирована высокоуровневая схема процесса кодирования;in fig. 1 illustrates a high-level diagram of the encoding process;

на фиг. 2 проиллюстрирована высокоуровневая схема процесса декодирования;in fig. 2 illustrates a high-level diagram of a decoding process;

на фиг. 3 проиллюстрирована высокоуровневая схема процесса генерирования остаточных данных;in fig. 3 illustrates a high-level diagram of the residual data generation process;

На фиг. 4 проиллюстрирована высокоуровневая схема процесса генерирования дополнительных остаточных данных с другим уровнем качества;In fig. 4 illustrates a high-level diagram of the process for generating additional residual data with a different quality level;

на фиг. 5 проиллюстрирована высокоуровневая схема процесса восстановления кадра из остаточных данных;in fig. 5 illustrates a high-level diagram of a process for reconstructing a frame from residual data;

на фиг. 6 проиллюстрирована иерархическая структура данных;in fig. 6 illustrates the hierarchical data structure;

на фиг. 7 проиллюстрирована дополнительная иерархическая структура данных;in fig. 7 illustrates an additional hierarchical data structure;

на фиг. 8 проиллюстрирован пример процесса кодирования;in fig. 8 illustrates an example of the encoding process;

на фиг. 9 проиллюстрирован пример процесса декодирования;in fig. 9 illustrates an example of a decoding process;

на фиг. 10 проиллюстрирована структура первого символа данных;in fig. 10 illustrates the structure of the first data symbol;

на фиг. 11 проиллюстрирована структура второго символа данных;in fig. 11 illustrates the structure of the second data symbol;

на фиг. 12 проиллюстрирована структура символа запуска;in fig. 12 illustrates the structure of a trigger symbol;

на фиг. 13 проиллюстрирована структура заголовка первого потока;in fig. 13 illustrates the header structure of the first stream;

на фиг. 14 проиллюстрирована структура заголовка второго потока;in fig. 14 illustrates the header structure of the second stream;

на фиг. 15 проиллюстрирована структура заголовка третьего потока;in fig. 15 illustrates the header structure of the third stream;

на фиг. 16 проиллюстрирована структура заголовка четвертого потока;in fig. 16 illustrates the header structure of the fourth stream;

на фиг. 17А-17Е проиллюстрированы деревья Хаффмана и на фиг. 18 проиллюстрирован конечный автомат кодирования длин серий.in fig. 17A-17E illustrate Huffman trees and FIG. 18 illustrates a run length encoding finite state machine.

Настоящее изобретение соотносится со способами. В частности, настоящее изобретение связано со способами кодирования и декодирования сигналов. Способы обработки данных могут включать, помимо прочего, получение, извлечение, вывод, прием и восстановление данных.The present invention relates to methods. In particular, the present invention relates to methods for encoding and decoding signals. Data processing methods may include, but are not limited to, data acquisition, retrieval, output, ingestion and data recovery.

Рассматриваемая в этом документе технология кодирования является гибким, адаптируемым, высокоэффективным и недорогим в вычислительном отношении форматом кодирования, который сочетает в себе формат кодирования видео, базовый кодек (например, AVC, HEVC или любой другой существующий или будущий кодек) с уровнем расширения кодированных данных, закодированных с использованием других технологий.The encoding technology discussed in this document is a flexible, adaptable, highly efficient, and computationally inexpensive encoding format that combines a video encoding format, a base codec (such as AVC, HEVC, or any other existing or future codec) with an encoded data enhancement layer, encoded using other technologies.

Применяемая технология использует исходный сигнал с пониженной дискретизацией, закодированный с помощью базового кодека, для формирования базового потока. Расширенный поток формируется с использованием кодированного набора остаточных данных, которые исправляют или улучшают базовый поток, например, путем увеличения разрешения или увеличения частоты кадров. В иерархической структуре может быть несколько уровней расширенных данных. Стоит отметить, что обычно ожидается, что базовый поток будет декодируемым аппаратным декодером, в то время как ожидается, что поток расширения будет подходить для реализации программной обработки с подходящим потреблением энергии.The technology used uses a downsampled source signal encoded with a base codec to generate the base stream. The enhanced stream is generated using an encoded set of residual data that corrects or improves the base stream, for example by increasing the resolution or increasing the frame rate. There can be several levels of extended data in a hierarchical structure. It is worth noting that the base stream is generally expected to be decodable by a hardware decoder, while the extension stream is expected to be suitable for implementing software processing with suitable power consumption.

Необходимы способы и системы для эффективной передачи и хранения расширенной закодированной информации.Methods and systems are needed to efficiently transmit and store extended encoded information.

Важно, чтобы любая операция энтропийного кодирования, используемая в новой технологии кодирования, была адаптирована к конкретным требованиям или ограничениям потока расширения и имела низкую сложность. Такие требования или ограничения включают в себя: потенциальное снижение вычислительных возможностей в результате необходимости программного декодирования потока расширения; необходимость комбинирования декодированного набора остаточных данных с декодированным кадром; вероятная структура остаточных данных, то есть относительно высокая доля нулевых значений с сильно изменчивыми значениями данных в большом диапазоне; нюансы входного квантованного блока коэффициентов; и структура потока расширения, которая представляет собой набор дискретных оста- 6 044215 точных кадров, разделенных на плоскости, слои и т.п. Энтропийное кодирование также должно подходить для множества уровней расширения в потоке расширения.It is important that any entropy encoding operation used in a new encoding technology is tailored to the specific requirements or constraints of the extension stream and has low complexity. Such requirements or limitations include: potential reduction in computational capabilities resulting from the need to software decode the extension stream; the need to combine the decoded residual data set with the decoded frame; the likely structure of the residual data, that is, a relatively high proportion of null values with highly variable data values over a wide range; nuances of the input quantized block of coefficients; and the structure of the expansion stream, which is a set of discrete residual frames divided into planes, layers, etc. Entropy coding must also be suitable for multiple expansion levels in the expansion stream.

Исследование, проведенное изобретателями, установило, что современные схемы энтропийного кодирования, используемые в видео, такие как контекстно-зависимое адаптивное двоичное арифметическое кодирование (САВАС) или контекстно-адаптивное кодирование с переменной длиной слова (CAVLC), вряд ли будут подходящими. Например, механизмы прогнозирования могут быть ненужными или могут не давать достаточных преимуществ, чтобы компенсировать их вычислительную нагрузку, учитывая структуру входных данных. Более того, арифметическое кодирование, как правило, требует больших вычислительных затрат, и реализация соответствующего программного обеспечения зачастую нежелательна.Research conducted by the inventors has determined that current entropy coding schemes used in video, such as context-sensitive adaptive binary arithmetic coding (CABAC) or context-adaptive variable-length coding (CAVLC), are unlikely to be suitable. For example, prediction engines may be unnecessary or may not provide sufficient benefits to offset their computational burden given the structure of the input data. Moreover, arithmetic coding is typically computationally expensive, and implementing appropriate software is often undesirable.

Обратите внимание, что ограничения, наложенные на поток расширения, означают, что простая и быстрая операция энтропийного кодирования важна для того, чтобы поток расширения мог эффективно корректировать или улучшать отдельные кадры базового декодированного видео. Обратите внимание, что в некоторых сценариях базовый поток также декодируется практически одновременно перед объединением, что создает нагрузку на ресурсы.Note that the limitations placed on the enhancement stream mean that a simple and fast entropy encoding operation is essential to enable the enhancement stream to effectively correct or enhance individual frames of the underlying decoded video. Note that in some scenarios, the underlying stream is also decoded almost simultaneously before being combined, which puts a strain on resources.

Настоящий документ предпочтительно соответствует требованиям следующих документов ISO/IEC: Call for Proposals for Low Complexity Video Coding Enhancements ISO/IEC JTC1/SC29/WG11 N17944, Макао, Китай, окт. 2018 и Requirements for Low Complexity Video Coding Enhancements ISO/IEC JTC1/SC29/WG11 N18098, Макао, Китай, окт. 2018. Более того, описанные здесь подходы могут быть включены в продукты PERSEUS®, поставляемые компанией V-Nova International Ltd.This document preferably conforms to the requirements of the following ISO/IEC documents: Call for Proposals for Low Complexity Video Coding Enhancements ISO/IEC JTC1/SC29/WG11 N17944, Macau, China, Oct. 2018 and Requirements for Low Complexity Video Coding Enhancements ISO/IEC JTC1/SC29/WG11 N18098, Macau, China, Oct. 2018. Moreover, the approaches described here can be incorporated into PERSEUS® products supplied by V-Nova International Ltd.

Общая структура предлагаемой схемы кодирования, в которой могут быть применены описанные в этом документе способы, использует исходный сигнал с пониженной дискретизацией, закодированный с помощью базового кодека, добавляет первый уровень данных коррекции к декодированному выходному сигналу базового кодека для генерации скорректированного изображения, а затем добавляет дополнительный уровень данных расширения к версии скорректированного изображения с повышенной дискретизацией.The general structure of the proposed encoding scheme, in which the methods described in this document can be applied, uses the original downsampled signal encoded with a base codec, adds a first layer of correction data to the decoded output of the base codec to generate a corrected image, and then adds an additional enhancement data layer to an upsampled version of the corrected image.

Таким образом, потоки рассматриваются как базовый поток и поток расширения. Стоит отметить, что обычно ожидается, что базовый поток будет декодироваться аппаратным декодером, в то время как ожидается, что поток расширения будет подходить для реализации программной обработкой с подходящим энергопотреблением.Thus, the threads are considered as a base thread and an extension thread. It is worth noting that the base stream is generally expected to be decoded by a hardware decoder, while the enhancement stream is expected to be suitable for implementation by software processing with suitable power consumption.

Эта структура создает множество степеней свободы, которые обеспечивают большую гибкость и адаптируемость ко многим ситуациям, что делает формат кодирования подходящим для многих случаев использования, включая передачу Over-The-Top (OTT), прямую трансляцию, прямую трансляцию Ultra High Definition (UHD) и т.п.This structure creates many degrees of freedom that provide greater flexibility and adaptability to many situations, making the encoding format suitable for many use cases, including Over-The-Top (OTT) transmission, live broadcast, Ultra High Definition (UHD) live broadcast and etc.

Хотя декодированный вывод базового кодека не предназначен для просмотра, это полностью декодированное видео с более низким разрешением, что делает вывод совместимым с существующими декодерами и, где это считается подходящим, также может использоваться в качестве вывода с более низким разрешением.Although the decoded output of the base codec is not intended for viewing, it is fully decoded video at a lower resolution, making the output compatible with existing decoders and, where deemed appropriate, can also be used as lower resolution output.

В общем случае остаточные данные относятся к разнице между значением опорного массива или опорного кадра и фактическим массивом или кадром данных. Следует отметить, что этот обобщенный пример не зависит от выполняемых операций кодирования и характера входного сигнала. Ссылка на остаточные данные, в контексте данного документа, относится к данным, полученным из набора остаточных данных, например набор самих остаточных данных или результат набора операций обработки данных, которые выполняются над набором остаточных данных.In general, residual data refers to the difference between the value of a reference array or reference frame and the actual array or frame of data. It should be noted that this general example is independent of the encoding operations performed and the nature of the input signal. A reference to residual data, in the context of this document, refers to data derived from a set of residual data, such as a set of residual data itself or the result of a set of data processing operations that are performed on a set of residual data.

В некоторых примерах, представленных в данном описании, ряд кодированных потоков может быть сгенерирован и независимо отправлен декодеру. То есть в примерах способов кодирования сигнала сигнал может быть закодирован с использованием по меньшей мере двух уровней кодирования. Первый уровень кодирования может выполняться с использованием первого алгоритма кодирования, а второй уровень может быть кодирован с использованием второго алгоритма кодирования. Способ может включать: получение первой части битового потока путем кодирования первого уровня сигнала; получение второй части битового потока путем кодирования второго уровня сигнала; и передачу первой части битового потока и второй части потока байтов как двух независимых потоков битов.In some of the examples presented herein, a number of encoded streams may be generated and independently sent to the decoder. That is, in the example signal encoding methods, the signal may be encoded using at least two encoding layers. The first level of encoding may be performed using a first encoding algorithm, and the second level may be encoded using a second encoding algorithm. The method may include: obtaining a first portion of a bit stream by encoding a first signal level; obtaining a second portion of the bitstream by encoding a second signal layer; and transmitting the first part of the bit stream and the second part of the byte stream as two independent bit streams.

Следует отметить, что метод энтропийного кодирования, предлагаемый в данном документе, не ограничивается множеством LoQ, проиллюстрированных на фигурах, но обеспечивает полезность любых остаточных данных, используемых для обеспечения расширения или исправления кадра видео, восстановленного из кодированного потока, закодированного с использованием устаревшей технологии кодирования видео, такой как HEVC. Например, полезность метода кодирования при кодировании остаточных данных различных LoQ особенно выгодна.It should be noted that the entropy encoding method proposed herein is not limited to the set of LoQs illustrated in the figures, but provides the utility of any residual data used to provide expansion or correction of a video frame reconstructed from a coded stream encoded using legacy video encoding technology , such as HEVC. For example, the utility of the coding method in encoding residual data of different LoQs is particularly advantageous.

Отметим, что на фиг. 1-5, проиллюстрированы примеры кодирования и декодирования схем, в которых методы энтропийного кодирования, представленные в данном документе, могут обеспечить полезность, но будет понятно, что метод кодирования может обычно использоваться для кодирования остаточных данных.Note that in FIG. 1-5 illustrate examples of encoding and decoding schemes in which the entropy encoding techniques presented herein may provide utility, but it will be understood that the encoding technique may typically be used to encode residual data.

- 7 044215- 7 044215

Некоторые примеры, представленные в данном описании, относятся к обобщенному процессу кодирования и декодирования, который обеспечивает иерархическую, масштабируемую гибкую технологию кодирования. Первая часть битового потока или первый независимый битовый поток могут быть декодированы с использованием первого алгоритма декодирования, а вторая часть битового потока или второго либо независимого битового потока может быть декодирована с использованием второго алгоритма декодирования. Первый алгоритм декодирования может быть декодирован традиционным декодером с использованием устаревшего оборудования.Some examples presented herein relate to a general encoding and decoding process that provides a hierarchical, scalable, flexible encoding technology. The first portion of the bit stream or the first independent bit stream may be decoded using a first decoding algorithm, and the second portion of the bit stream or the second or independent bit stream may be decoded using a second decoding algorithm. The first decoding algorithm can be decoded by a traditional decoder using legacy equipment.

Возвращаясь к начальному процессу, описанному выше и обеспечивающему базовый поток и два уровня расширения в потоке расширения, пример процесса обобщенного кодирования показан на блоксхеме, проиллюстрированной на фиг. 1. Входное видео с полным разрешением 100 обрабатывается для генерирования различных кодированных потоков 101, 102, 103. Первый кодированный поток (кодированный базовый поток) создается путем подачи в базовый кодек (например, AVC, HEVC или любой другой кодек) версии входного видео с пониженной дискретизацией. Кодированный базовый поток может называться базовым слоем или базовым уровнем. Второй закодированный поток (закодированный поток уровня 1) создается путем обработки остаточных данных, полученных путем обработки разницы между восстановленным базовым видео кодеком и версией входного видео с пониженной дискретизацией. Третий кодированный поток (закодированный поток уровня 0) создается путем обработки остаточных данных, полученных путем обработки разницы между версией с повышенной дискретизацией скорректированной версии восстановленного базового кодированного видео и входным видео.Returning to the initial process described above providing a base stream and two layers of enhancement in the enhancement stream, an example of a generalized encoding process is shown in the flowchart illustrated in FIG. 1. The input video at full resolution 100 is processed to generate different coded streams 101, 102, 103. The first coded stream (the coded base stream) is created by feeding the base codec (such as AVC, HEVC or any other codec) a downscaled version of the input video sampling. The coded base stream may be called a base layer or base layer. A second coded stream (layer 1 coded stream) is created by processing the residual data obtained by processing the difference between the reconstructed base video codec and the downsampled version of the input video. A third codestream (level 0 codestream) is created by processing the residual data obtained by processing the difference between the upsampled version of the adjusted version of the reconstructed base coded video and the input video.

Операция уменьшения дискретизации может применяться к входному видео для создания видео с пониженной дискретизацией, которое должно быть закодировано с помощью базового кодека. Уменьшение дискретизации может выполняться как в вертикальном, так и в горизонтальном направлениях или, альтернативно, только в горизонтальном направлении.The downsampling operation can be applied to the input video to create a downsampled video, which must be encoded using the underlying codec. Downsampling can be performed in both the vertical and horizontal directions, or alternatively only in the horizontal direction.

Каждый процесс кодирования потока расширения не обязательно может предусматривать этап увеличения дискретизации. На фиг. 1, например, первый поток расширения концептуально является потоком коррекции, тогда как второй поток расширения подвергается увеличению дискретизации, чтобы обеспечить уровень расширения.Each spreading stream encoding process may not necessarily include an upsampling step. In fig. 1, for example, the first expansion stream is conceptually a correction stream, while the second expansion stream is upsampled to provide a level of expansion.

Рассматривая процесс генерирования расширенных потоков более подробно, для генерации кодированного потока уровня 1 кодированный базовый поток декодируется 114 (т.е. операция декодирования применяется к кодированному базовому потоку для генерирования декодированного базового потока). Затем создается разница между декодированным базовым потоком и входным видео с пониженной дискретизацией 110 (т.е. операция вычитания применяется к входному видео с пониженной дискретизацией и декодированному базовому потоку для генерирования первого набора остаточных данных).Looking at the process of generating enhanced streams in more detail, to generate a layer 1 coded stream, the coded base stream is decoded 114 (ie, a decode operation is applied to the coded base stream to generate a decoded base stream). A difference is then created between the decoded base stream and the input downsampled video 110 (ie, a subtraction operation is applied to the input downsampled video and the decoded base stream to generate a first set of residual data).

В данном документе термин остаточные данные используется так же, как и термин, известный в данной области техники, то есть обозначает ошибку между опорным кадром и желаемым кадром. В этом документе опорный кадр представляет собой декодированный базовый поток, а желаемый кадр представляет собой входное видео с пониженной дискретизацией. Таким образом, остаточные данные, используемые на первом уровне расширения, можно рассматривать как скорректированное видео, поскольку они корректируют декодированный базовый поток во входное видео с пониженной дискретизацией, которое использовалось в операции базового кодирования.In this document, the term residual data is used in the same way as a term known in the art, that is, it refers to the error between a reference frame and a desired frame. In this paper, the reference frame is the decoded base stream and the desired frame is the downsampled input video. Thus, the residual data used in the first enhancement layer can be considered as corrected video since it corrects the decoded base stream into the downsampled input video that was used in the base encoding operation.

Опять же, описанная ниже операция энтропийного кодирования подходит для любых остаточных данных, например любых данных, связанных с набором остаточных данных.Again, the entropy encoding operation described below is suitable for any residual data, such as any data associated with a set of residual data.

Затем разность кодируется 115 для генерирования закодированного потока уровня 1 102 (т.е. операция кодирования применяется к первому набору остаточных данных для генерирования первого потока расширения).The difference is then encoded 115 to generate a layer 1 coded stream 102 (ie, an encoding operation is applied to the first set of residual data to generate a first extension stream).

Как отмечено выше в документе, расширенный поток может содержать первый уровень расширения 102 и второй уровень расширения 103. Первый уровень расширения 102 может рассматриваться как скорректированный поток. Второй уровень расширения 103 можно рассматривать как дополнительный уровень расширения, который преобразует скорректированный поток в исходное входное видео.As noted above in the document, the enhanced stream may comprise a first enhancement layer 102 and a second enhancement layer 103. The first enhancement layer 102 may be considered an adjusted stream. The second enhancement layer 103 can be considered as an additional enhancement layer that converts the corrected stream to the original input video.

Дополнительный уровень расширения 103 создается путем кодирования дополнительного набора остаточных данных, которые представляют собой разницу 119 между версией 117 с повышенной дискретизацией декодированного потока уровня 1 118 и входным видео 100.An additional enhancement layer 103 is created by encoding an additional set of residual data that represents the difference 119 between the upsampled version 117 of the decoded layer 1 stream 118 and the input video 100 .

Как отмечалось в этом документе, поток с повышенной дискретизацией сравнивается с входным видео, в результате создается дополнительный набор остаточных данных (т.е. операция разности применяется к повторно созданному потоку с повышенной дискретизацией, чтобы сгенерировать дополнительный набор остаточных данных). Дальнейший набор остаточных данных затем кодируется 121 как закодированный поток расширения уровня 0 (т.е. операция кодирования затем применяется к дополнительному набору остаточных данных для генерации закодированного дополнительного потока расширения).As noted in this document, the upsampled stream is compared to the input video, resulting in an additional set of residual data (ie, the difference operation is applied to the re-created upsampled stream to generate an additional set of residual data). A further set of residual data is then encoded 121 as a layer 0 encoded extension stream (ie, the encoding operation is then applied to the additional set of residual data to generate an encoded additional extension stream).

Таким образом, как проиллюстрировано на фиг. 1 и описано выше в этом документе, выходом процесса кодирования является базовый поток 101 и один или более потоков 102, 103 расширения, которые предпочтительно содержат первый уровень расширения и дополнительный уровень расширения.Thus, as illustrated in FIG. 1 and described above in this document, the output of the encoding process is a base stream 101 and one or more extension streams 102, 103, which preferably comprise a first extension layer and an additional extension layer.

Соответствующий обобщенный процесс декодирования изображен на блок-схеме, проиллюстрироThe corresponding generalized decoding process is depicted in the flowchart illustrated

- 8 044215 ванной на фиг. 2. Декодер принимает три потока 101, 102, 103, сгенерированные кодером, вместе с заголовками, содержащими дополнительную информацию декодирования. Кодированный базовый поток декодируется базовым декодером, соответствующим базовому кодеку, используемому в кодере, и его выходные данные объединяются с декодированными остаточными данными, полученными из кодированного потока уровня 1. Комбинированное видео подвергается повышающей дискретизации и дополнительно комбинируется с декодированными остаточными данными, полученными из кодированного потока уровня 0.- 8 044215 bathroom in fig. 2. The decoder receives three streams 101, 102, 103 generated by the encoder, along with headers containing additional decoding information. The coded base stream is decoded by a base decoder corresponding to the base codec used in the encoder, and its output is combined with the decoded residual data obtained from the layer 1 code stream. The combined video is upsampled and further combined with the decoded residual data obtained from the layer 1 code stream. 0.

В процессе декодирования декодер может анализировать заголовки (глобальная конфигурация, конфигурация изображения, блок данных) и настраивать декодер на основе этих заголовков. Чтобы воссоздать входное видео, декодер может декодировать каждый из базового потока, первого потока расширения и дополнительного потока расширения. Кадры потока могут быть синхронизированы, а затем объединены для получения декодированного видео.During the decoding process, the decoder can analyze the headers (global configuration, image configuration, data block) and configure the decoder based on these headers. To recreate the input video, the decoder may decode each of the base stream, the first enhancement stream, and the additional enhancement stream. Stream frames can be synchronized and then combined to produce decoded video.

Проиллюстрированные на каждой из фиг. 1 и 2 операции кодирования уровня 0 и уровня 1 могут включать в себя этапы преобразования, квантования и энтропийного кодирования. Точно так же на этапе декодирования остаточные данные могут быть пропущены через энтропийный декодер, деквантизатор и модуль обратного преобразования. Может использоваться любое подходящее кодирование и соответствующая операция декодирования. Однако предпочтительно, чтобы этапы кодирования уровня 0 и уровня 1 могли выполняться программно.Illustrated in each of FIGS. 1 and 2, level 0 and level 1 encoding operations may include transform, quantization, and entropy encoding steps. Similarly, in the decoding stage, the residual data can be passed through an entropy decoder, a dequantizer, and an inverse transform module. Any suitable encoding and corresponding decoding operation may be used. However, it is preferable that the level 0 and level 1 encoding steps can be performed in software.

Таким образом, приведенные здесь способы и устройства основаны на общем алгоритме, который построен на существующем алгоритме кодирования и/или декодирования (таком как стандарты MPEG, такие как AVC/H.264, HEVC/H.265 и т.п., а также нестандартный алгоритм, такой как VP9, AV1 и другие), который работает как базовый уровень для слоя расширения, который работает в соответствии с другим алгоритмом кодирования и/или декодирования. Идея, лежащая в основе общего алгоритма, заключается в иерархическом кодировании/декодировании видеокадра в отличие от блочных подходов, используемых в семействе алгоритмов MPEG. Иерархическое кодирование кадра включает в себя создание остаточных данных для полного кадра, затем прореженного кадра и так далее.Thus, the methods and apparatuses provided herein are based on a general algorithm that is built upon an existing encoding and/or decoding algorithm (such as MPEG standards such as AVC/H.264, HEVC/H.265, etc., as well as a non-standard algorithm such as VP9, AV1 and others) that works as a base layer for an enhancement layer that works according to a different encoding and/or decoding algorithm. The idea behind the general algorithm is hierarchical encoding/decoding of a video frame, as opposed to the block-based approaches used in the MPEG family of algorithms. Hierarchical frame encoding involves creating residual data for the full frame, then the decimated frame, and so on.

Остаточные данные сжатия видео для полноразмерного видеокадра могут называться LoQ-0 (например, 1920x1080 для видеокадра HD), тогда как данные прореженного кадра могут называться LoQ-x, где x обозначает количество иерархических прореживаний. В примерах, проиллюстрированных на фиг. 1 и 2, переменная х имеет максимальное значение 1 и, следовательно, существует 2 иерархических уровня, для которых будут сгенерированы остаточные данные сжатия.The residual video compression data for a full-length video frame may be called LoQ-0 (e.g., 1920x1080 for an HD video frame), while the decimated frame data may be called LoQ-x, where x denotes the number of hierarchical decimations. In the examples illustrated in FIGS. 1 and 2, the variable x has a maximum value of 1 and hence there are 2 hierarchical levels for which residual compression data will be generated.

На фиг. 3 проиллюстрирован пример того, как LoQ-1 может быть сгенерирован на устройстве кодирования. На данной фигуре общий алгоритм и способы описаны с использованием алгоритма кодирования/декодирования AVC/H.264 в качестве базового алгоритма, но понятно, что другие алгоритмы кодирования/декодирования могут использоваться в качестве базовых алгоритмов без какого-либо влияния на способ, посредством которого работает общий алгоритм.In fig. 3 illustrates an example of how LoQ-1 can be generated on an encoder. In this figure, the general algorithm and methods are described using the AVC/H.264 encoding/decoding algorithm as the base algorithm, but it is understood that other encoding/decoding algorithms can be used as the base algorithms without any impact on the manner in which the general algorithm.

Конечно, будет понятно, что блоки, проиллюстрированные на фиг. 3, являются просто примерами того, как можно реализовать широкие концепции.Of course, it will be understood that the blocks illustrated in FIG. 3 are simply examples of how broad concepts can be implemented.

Схема, проиллюстрированная на фиг. 3, демонстрирует процесс генерирования энтропийного кодирования остаточных данных для уровня иерархии LoQ-1. В этом примере первым шагом является прореживание входящего несжатого видео с коэффициентом 2. Этот прореженный кадр затем пропускается через базовый алгоритм кодирования (в данном случае алгоритм кодирования AVC/H.264), при этом создается и сохраняется ссылка с энтропийным кодированием на кадр. Затем генерируется декодированная версия закодированного опорного кадра, а разница между декодированным опорным кадром и прореженным кадром (остаточные данные LoQ-1) будет формировать входные данные для преобразования блока.The circuit illustrated in FIG. 3 shows the process of generating entropy coding of residual data for the LoQ-1 hierarchy level. In this example, the first step is to decimate the incoming uncompressed video by a factor of 2. This decimated frame is then passed through the underlying encoding algorithm (in this case the AVC/H.264 encoding algorithm), creating and storing an entropy-encoded reference to the frame. A decoded version of the encoded reference frame is then generated, and the difference between the decoded reference frame and the decimated frame (LoQ-1 residual data) will form the input data for the block transform.

Преобразование (например, преобразование на основе Адамара в этом проиллюстрированном примере) преобразует эту разницу в 4 компонента (или плоскости), а именно А (средний), Н (горизонтальный), V (вертикальный) и D (диагональный). Затем эти компоненты квантуются с использованием переменных, называемых шириной шага (например, остаточное значение может быть разделено на ширину шага и выбранное ближайшее целое значение). Подходящий процесс энтропийного кодирования является предметом этого изобретения и подробно описывается ниже в этом документе. Эти квантованные остаточные данные затем энтропийно кодируются, чтобы удалить любую избыточную информацию. Квантованные кодированные коэффициенты или компоненты (Ae, He, Ve и De) затем помещаются в последовательный поток с пакетами определения, вставленными в начало потока, этот заключительный этап выполняется с использованием процедуры сериализации файлов. Пакетные данные могут включать в себя такую информацию, как спецификация кодера, тип применяемой повышающей дискретизации, отбрасываются ли плоскости А и D или нет, и другую информацию, позволяющую декодеру декодировать потоки.A transform (such as the Hadamard-based transform in this illustrated example) converts this difference into 4 components (or planes), namely A (mid), H (horizontal), V (vertical), and D (diagonal). These components are then quantized using variables called step width (for example, the residual value can be divided by the step width and the selected nearest integer value). A suitable entropy encoding process is the subject of this invention and is described in detail later in this document. This quantized residual data is then entropy encoded to remove any redundant information. The quantized encoded coefficients or components (Ae, He, Ve and De) are then placed into a serial stream with definition packets inserted at the beginning of the stream, this final step is performed using a file serialization procedure. The packet data may include information such as the specification of the encoder, the type of upsampling applied, whether the A and D planes are discarded or not, and other information that allows the decoder to decode the streams.

Как опорные данные (кадр с базовым энтропийным кодированием половинного размера), так и остаточные данные LoQ-1 с энтропийным кодированием могут быть буферизованы, переданы или сохранены для использования декодером во время процесса восстановления.Both the reference data (half-size entropy encoded frame) and LoQ-1 entropy encoded residual data can be buffered, transmitted, or stored for use by the decoder during the reconstruction process.

- 9 044215- 9 044215

Чтобы сгенерировать остаточные данные LoQ-0, квантованный вывод разветвляется, и над ним выполняются процессы обратного квантования и преобразования, чтобы восстановить остаточные данныеTo generate LoQ-0 residual data, the quantized output is forked and inverse quantization and transform processes are performed on it to recover the residual data

LoQ-1, которые затем добавляются к декодированным опорным данным (кодируются и декодируются) чтобы получить обратно видеокадр, очень похожий на первоначально прореженный входной кадр.LoQ-1, which are then added to the decoded reference data (encoded and decoded) to produce back a video frame very similar to the originally decimated input frame.

Этот процесс идеально имитирует процесс декодирования, и, следовательно, первоначально прореженный кадр не используется.This process perfectly mimics the decoding process and hence the initially decimated frame is not used.

На фиг. 4 проиллюстрирован пример того, как LoQ-0 может быть сгенерирован на устройстве кодирования. Чтобы получить остаточные данные LoQ-0, восстанавливается кадр размера LoQ-1, как описано в предыдущем разделе.In fig. 4 illustrates an example of how LoQ-0 can be generated on an encoder. To obtain residual LoQ-0 data, a frame of size LoQ-1 is reconstructed as described in the previous section.

Следующим шагом является выполнение повышающей дискретизации восстановленного кадра до полного размера (на 2). На этом этапе могут использоваться различные алгоритмы для улучшения процесса повышения дискретизации, такие как алгоритмы ближайшего, билинейного, точного или кубического алгоритмов. Этот восстановленный полноразмерный кадр, называемый прогнозируемым кадром, затем вычитается из исходного несжатого видеовхода, что создает некоторые остаточные данные (остаточные данные LoQ-1).The next step is to upsample the reconstructed frame to full size (by 2). At this stage, various algorithms can be used to improve the upsampling process, such as nearest, bilinear, exact or cubic algorithms. This reconstructed full-length frame, called a predicted frame, is then subtracted from the original uncompressed video input, which creates some residual data (LoQ-1 residual data).

Подобно процессу LoQ-1, разница затем преобразуется, квантуется, энтропийно кодируется и файл сериализуется, что затем приводит к формированию третьих и последних данных. Это может быть буферизовано, передано или сохранено для дальнейшего использования декодером. Как можно видеть, компонент, называемый прогнозируемое среднее (описанный ниже), может быть получен с использованием процесса повышения дискретизации и использован вместо компонента А (среднего) для дальнейшего повышения эффективности алгоритма кодирования.Similar to the LoQ-1 process, the difference is then converted, quantized, entropy encoded, and the file is serialized, which then produces the third and final data. This may be buffered, transmitted, or stored for later use by the decoder. As can be seen, a component called the predicted average (described below) can be obtained using an upsampling process and used in place of the A (average) component to further improve the efficiency of the encoding algorithm.

На фиг. 5 схематически проиллюстрировано, как процесс декодирования может быть выполнен в конкретном примере. Энтропийно закодированные данные, энтропийно закодированные остаточные данные LOQ-1 и энтропийно закодированные остаточные данные LOQ-О (например, в виде сериализованных в файл данных). Данные энтропийного кодирования содержат базу кодирования уменьшенного размера (например, половинного размера, т.е. с размерами W/2 и Н/2 по отношению к полному кадру, имеющему размеры W и Н).In fig. 5 schematically illustrates how the decoding process can be performed in a specific example. Entropy encoded data, entropy encoded LOQ-1 residual data, and entropy encoded LOQ-O residual data (eg, as file-serialized data). The entropy encoding data comprises a reduced-size encoding base (eg, half size, i.e., with dimensions W/2 and H/2 relative to a full frame having dimensions W and H).

Затем данные, закодированные энтропийным кодированием, декодируются с использованием алгоритма декодирования, соответствующего алгоритму, который использовался для кодирования этих данных (в примере, алгоритм декодирования AVC/H.264). В конце этого шага создается декодированный видеокадр уменьшенного размера (например, половинного размера) (обозначенный в настоящем примере как видео AVC/H.264).The entropy encoded data is then decoded using a decoding algorithm corresponding to the algorithm that was used to encode the data (in the example, the AVC/H.264 decoding algorithm). At the end of this step, a decoded video frame of reduced size (eg, half size) is created (denoted in this example as AVC/H.264 video).

Параллельно декодируются остаточные данные с энтропийным кодированием LoQ-1. Как рассматривалось ранее в этом документе, остаточные данные LoQ-1 кодируются с использованием четырех коэффициентов или компонентов (А, V, Н и D), которые, как проиллюстрировано на этой фигуре, имеют размеры, соответствующие одной четверти размера полного кадра, а именно W/4 и Н/4. Это связано с тем, что, как рассматривалось в предыдущих патентных заявках US 13/893669 и РСТ/ЕР2О13/О59847, содержание которых включено в настоящий документ посредством ссылки, четыре компонента содержат всю информацию, относящуюся к остаточным данным, и генерируются путем применения преобразования 2x2 ядра к остаточным данным, размерность которых для LoQ-1 будет W/2 и Н/2, то есть такая же размерность данных, закодированных энтропией уменьшенного размера. Четыре компонента энтропийно декодируются, затем деквантизируются и, наконец, преобразуются обратно в исходные остаточные данные LoQ-1 с помощью обратного преобразования (в данном случае обратного преобразования Адамара 2x2).In parallel, the LoQ-1 entropy encoded residual data is decoded. As discussed earlier in this document, LoQ-1 residual data is encoded using four coefficients or components (A, V, H and D), which, as illustrated in this figure, are sized to correspond to one-quarter the size of the full frame, namely W /4 and N/4. This is because, as discussed in previous patent applications US 13/893669 and PCT/EP2O13/O59847, the contents of which are incorporated herein by reference, the four components contain all information related to the residual data and are generated by applying a 2x2 transform kernels to the residual data, the dimensions of which for LoQ-1 will be W/2 and H/2, that is, the same dimension of the data encoded by reduced size entropy. The four components are entropy decoded, then dequantized, and finally converted back to the original LoQ-1 residual data using an inverse transform (in this case a 2x2 inverse Hadamard transform).

Декодированные остаточные данные LoQ-1 затем добавляются к декодированному видеокадру для создания восстановленного видеокадра уменьшенного размера (в данном случае половинного размера), идентифицированного как восстановление размера Half-2D.The decoded LoQ-1 residual data is then added to the decoded video frame to create a reduced-size (in this case half-size) reconstructed video frame, identified as a Half-2D size restoration.

Этот восстановленный видеокадр затем подвергается повышающей дискретизации, которая доводит его до полного разрешения (так, в этом примере, от полуширины (W/2) и полувысоты (Н/2) до полной ширины (W) и полной высоты (Н)) с использованием фильтра с повышающей дискретизацией, такого как билинейный, бикубический, точный и т.п. Восстановленный видеокадр с повышенной дискретизацией будет предсказанным кадром (полноразмерным, WxH), к которому затем добавляются остаточные данные декодирования LoQ-0.This reconstructed video frame is then upsampled, which brings it to full resolution (so, in this example, from half-width (W/2) and half-height (H/2) to full-width (W) and full-height (H)) using upsampling filter such as bilinear, bicubic, exact, etc. The reconstructed upsampled video frame will be a predicted frame (full-length, WxH), to which residual LoQ-0 decoding data is then added.

В частности, декодируются остаточные данные, закодированные в LoQ-0. Как рассматривалось ранее в этом документе, остаточные данные LoQ-0 кодируются с использованием четырех коэффициентов или компонентов (А, V, Н и D), размер которых, как проиллюстрировано на этой фигуре, составляет половину размера полного кадра, а именно W/2 и Н/2. Это связано с тем, что, как рассматривалось в предыдущих патентных заявках US 13/893669 и РСТ/ЕР2О13/О59847, содержание которых включено в настоящий документ посредством ссылки, четыре компонента содержат всю информацию, относящуюся к остаточным данным, и генерируются путем применения преобразования 2x2 ядра к остаточным данным, размерность которых для LoQ-0 была бы W и Н, то есть такая же размерность полного кадра. ЧетыреIn particular, the residual data encoded in LoQ-0 is decoded. As discussed earlier in this document, LoQ-0 residual data is encoded using four coefficients or components (A, V, H and D), the size of which, as illustrated in this figure, is half the size of the full frame, namely W/2 and N/2. This is because, as discussed in previous patent applications US 13/893669 and PCT/EP2O13/O59847, the contents of which are incorporated herein by reference, the four components contain all information related to the residual data and are generated by applying a 2x2 transform kernels to residual data, the dimensions of which for LoQ-0 would be W and H, that is, the same dimension of the full frame. Four

- 10 044215 компонента энтропийно декодируются (см. процесс, описанный далее в документе), затем деквантизируются и, наконец, преобразуются обратно в исходные остаточные данные LoQ-0 с помощью обратного преобразования (в данном случае обратного преобразования Адамара 2x2).- 10 044215 components are entropy decoded (see process described later in the document), then dequantized and finally converted back to the original LoQ-0 residual data using an inverse transform (in this case a 2x2 inverse Hadamard transform).

Декодированные остаточные данные LoQ-0 затем добавляются к предсказанному кадру для создания восстановленного полного видеокадра - выходного кадра.The decoded LoQ-0 residual data is then added to the predicted frame to create a reconstructed full video frame - the output frame.

Структура данных проиллюстрирована в качестве примера на фиг. 6. Как рассматривалось ранее в этом документе, приведенное выше описание было сделано со ссылкой на конкретные размеры и базовые алгоритмы, но вышеупомянутые способы применимы к другим размерам и/или базовым алгоритмам, и приведенное выше описание дается лишь в качестве примера описанных более общих понятий.The data structure is illustrated as an example in FIG. 6. As discussed earlier in this document, the above description has been made with reference to specific dimensions and basic algorithms, but the above methods are applicable to other sizes and/or basic algorithms, and the above description is given only as an example of the more general concepts described.

В алгоритме кодирования/декодирования, описанном выше в этом документе, обычно существуют 3 плоскости (например, YUV или RGB) с двумя уровнями качества LoQ, которые описываются как LoQ0 (или верхний уровень, полное разрешение) и LoQ-1 (или нижний уровень, разрешение уменьшенного размера, например, половинное разрешение) в каждой плоскости. Каждая плоскость может представлять различную цветовую составляющую для видеосигнала.In the encoding/decoding algorithm described earlier in this document, there are typically 3 planes (such as YUV or RGB) with two LoQ quality levels, which are described as LoQ0 (or upper level, full resolution) and LoQ-1 (or lower level, full resolution) reduced size resolution, e.g. half resolution) in each plane. Each plane can represent a different color component for the video signal.

Каждый LoQ содержит четыре компонента или слоя, а именно А, Н, V и D. Это дает всего 3x2x4=24 поверхности, из которых 12 полноразмерных (например, WxH) и 12 уменьшенных размеров (например, W/2xH/2). Каждый слой может содержать значения коэффициентов для конкретного одного из компонентов, например слой А может содержать значение коэффициента А в верхнем левом углу для каждого блока 2x2 входного изображения или кадра.Each LoQ contains four components or layers, namely A, H, V and D. This gives a total of 3x2x4=24 surfaces, of which 12 are full size (eg WxH) and 12 are reduced size (eg W/2xH/2). Each layer may contain coefficient values for a particular one of the components, for example layer A may contain the value of coefficient A in the upper left corner for each 2x2 block of the input image or frame.

На фиг. 7 проиллюстрирован альтернативный вид предлагаемой иерархической структуры данных. Закодированные данные могут быть разделены на части. Каждую полезную нагрузку можно иерархически упорядочить по кускам. То есть каждая полезная нагрузка группируется в плоскости, затем в каждой плоскости каждого уровня группируется в слои, и каждый слой содержит набор фрагментов для этого слоя. Уровень представляет каждый уровень расширения (первый или последующий), а слой представляет собой набор коэффициентов преобразования.In fig. 7 illustrates an alternative view of the proposed hierarchical data structure. The encoded data can be divided into parts. Each payload can be hierarchically ordered into chunks. That is, each payload is grouped into a plane, then within each plane of each layer is grouped into layers, and each layer contains a set of tiles for that layer. A layer represents each level of expansion (first or subsequent), and a layer represents a set of transform coefficients.

Способ может включать извлечение фрагментов для двух уровней расширения для каждой плоскости. Способ может содержать извлечение 16 слоев для каждого уровня (например, если используется преобразование 4x4). Таким образом, каждая полезная нагрузка упорядочивается в набор фрагментов для всех слоев на каждом уровне, а затем набор фрагментов для всех слоев на следующем уровне плоскости. Затем полезная нагрузка включает набор фрагментов для слоев первого уровня следующей плоскости и так далее.The method may include extracting fragments for two levels of expansion for each plane. The method may comprise extracting 16 layers for each layer (eg if a 4x4 transform is used). Thus, each payload is ordered into a set of tiles for all layers at each level, and then a set of tiles for all layers at the next level of the plane. The payload then includes a set of fragments for the first level layers of the next plane, and so on.

Таким образом, способ может декодировать заголовки и выводить энтропийно кодированные коэффициенты, сгруппированные по плоскости, уровням и слоям, принадлежащим декодируемому расширению изображения. Таким образом, на выходе могут быть поверхности массива (n Плоскостей)х(п Уровень)χ(n Слой) с элементами поверхности [п Плоскостей]^ Уровень][п Слой].Thus, the method can decode the headers and output entropy-coded coefficients grouped by plane, levels, and layers belonging to the image extension being decoded. Thus, the output can be array surfaces (n Planes)x(n Level)χ(n Layer) with surface elements [n Planes]^ Level][n Layer].

Отметим, что способы энтропийного кодирования, представленные в данном документе, могут выполняться для каждой группы, то есть могут выполняться для каждой поверхности, для каждой плоскости, для каждого уровня (LoQ) или для каждого отдельного слоя. Отметим, что энтропийное кодирование может выполняться для любых остаточных данных и не обязательно квантованных и/или преобразованных коэффициентов.Note that the entropy encoding methods presented herein can be performed on a per-group basis, that is, can be performed on a per-surface, per-plane, per-layer (LoQ) basis, or per-layer basis. Note that entropy encoding can be performed on any residual data and not necessarily quantized and/or transformed coefficients.

Как проиллюстрировано на фиг. 4 и 5, предлагаемые операции кодирования и декодирования предусматривают этап или операцию энтропийного кодирования. В дальнейшем предлагается, чтобы операция энтропийного кодирования содержала один или более из компонента кодирования длин серий (RLE) и компонента кодирования Хаффмана. Эти два компонента могут взаимодействовать друг с другом, обеспечивая дополнительные преимущества.As illustrated in FIG. 4 and 5, the proposed encoding and decoding operations include an entropy encoding step or operation. It is further proposed that the entropy encoding operation comprise one or more of a run length encoding (RLE) component and a Huffman encoding component. These two components can interact with each other to provide additional benefits.

Как отмечено и проиллюстрировано на фиг. 8, вход энтропийного кодера представляет собой поверхность (например, остаточные данные, полученные на основе квантованного набора остаточных данных, как проиллюстрировано в этом примере), а выходом процесса является энтропийно-кодированная версия остаточных данных (Ае, He, Ve, De). Однако, как указано выше в этом документе, следует отметить, что энтропийное кодирование может выполняться для любых остаточных данных и не обязательно квантованных и/или преобразованных коэффициентов. На фиг. 9 проиллюстрирован соответствующий высокоуровневый декодер с инверсными входами и выходами. То есть энтропийный декодер принимает в качестве входных данных энтропийно-кодированные остаточные данные (Ае, He, Ve, De) и выводит остаточные данные (например, квантованные остаточные данные в этом проиллюстрированном примере).As noted and illustrated in FIG. 8, the input to the entropy encoder is a surface (eg, residual data derived from a quantized set of residual data, as illustrated in this example), and the output of the process is an entropy-coded version of the residual data (Ae, He, Ve, De). However, as stated earlier in this document, it should be noted that entropy coding can be performed on any residual data and not necessarily quantized and/or transformed coefficients. In fig. 9 illustrates a corresponding high-level decoder with inverse inputs and outputs. That is, the entropy decoder takes entropy-coded residual data (Ae, He, Ve, De) as input and outputs residual data (eg, quantized residual data in this illustrated example).

Обратите внимание, что как проиллюстрировано на фиг. 8, обычно показано декодирование RLE до декодирования по Хаффману, но, как будет ясно из всей настоящей заявки, такой порядок не является ограничивающим, и этапы могут быть взаимозаменяемыми, взаимосвязанными или располагаться в любом порядке.Note that, as illustrated in FIG. 8, RLE decoding prior to Huffman decoding is generally shown, but as will be clear throughout this application, this order is not limiting and the steps may be interchangeable, interrelated, or in any order.

Точно так же мы отмечаем, что кодирование длин серий может быть предоставлено без кодирования Хаффмана, и в сравнительных случаях кодирование длин серий и кодирование Хаффмана может не выполняться (либо заменено альтернативным энтропийным кодированием без потерь, либо энтропийноеSimilarly, we note that run-length encoding may be provided without Huffman encoding, and in comparative cases run-length encoding and Huffman encoding may not be performed (either replaced by alternative lossless entropy encoding, or entropy encoding

- 11 044215 кодирование не выполняется вообще). Например, в продуктивном примере с уменьшенным акцентом на сжатие данных конвейер кодирования может не содержать энтропийное кодирование, но преимущества остаточных данных могут заключаться в многоуровневом хранилище для распространения.- 11 044215 coding is not performed at all). For example, in a productive example with a reduced emphasis on data compression, the encoding pipeline may not contain entropy encoding, but the residual data may benefit from tiered storage for distribution.

Кодер сравнительных длин серий (RLE) может сжимать данные путем кодирования последовательностей того же значения данных, что и одно значение данных, и счет этого значения данных. Например, последовательность 555500022 может быть закодирована как (4,5) (3,0) (2,2). То есть идет серия из четырех пятерок, серия из трех нулей, за которыми следует серия из двух двоек.A relative run length encoder (RLE) can compress data by encoding sequences of the same data value as one data value and counting that data value. For example, the sequence 555500022 could be encoded as (4,5)(3,0)(2,2). That is, there is a series of four fives, a series of three zeros, followed by a series of two twos.

Для кодирования остаточных данных предлагается модифицированная операция кодирования RLE. Чтобы воспользоваться структурой остаточных данных, предлагается кодировать только серии нулей. То есть каждое значение отправляется как величина, при этом каждый ноль отправляется как серия нулей. Операции модифицированного кодирования RLE, описанные в данном документе, могут использоваться, например для обеспечения энтропийного кодирования и/или декодирования на одном или более слоях LoQ, например как показано на фиг. 1-5.A modified RLE encoding operation is proposed to encode residual data. To take advantage of the residual data structure, it is suggested that only runs of zeros be encoded. That is, each value is sent as a quantity, with each zero sent as a series of zeros. The modified RLE encoding operations described herein can be used, for example, to provide entropy encoding and/or decoding on one or more LoQ layers, for example as shown in FIG. 1-5.

Таким образом, операция энтропийного кодирования включает анализ остаточных данных и кодирование нулевых значений как серию последовательных нулей.Thus, the entropy encoding operation involves analyzing the residual data and encoding the zero values as a series of consecutive zeros.

Как отмечено выше в данном документе, чтобы обеспечить дополнительный уровень сжатия данных (который может быть без потерь), операция энтропийного кодирования дополнительно применяет операцию кодирования Хаффмана к данным с серийным кодированием.As noted earlier in this document, to provide an additional level of data compression (which may be lossless), the entropy encoding operation additionally applies a Huffman encoding operation to the serially encoded data.

Кодирование Хаффмана и кодирование длин серий ранее сочетались вместе, например, в факсимильном кодировании (например, согласно Рекомендациям ITU Т.4 и Т.45) и формате обмена файлами JPEG, но за последние 30 лет они были заменены другими способами кодирования. В настоящем описании предлагаются способы и технологии для реализации кодирования Хаффмана в сочетании с кодированием RLE, методы и способы для эффективного обмена данными и метаданными между кодером и декодером, а также методы и способы для уменьшения общего размера данных такой комбинации при использовании для кодирования остаточных данных.Huffman encoding and run-length encoding were previously combined together, for example in facsimile encoding (eg ITU Recommendations T.4 and T.45) and the JPEG file interchange format, but over the last 30 years they have been replaced by other encoding methods. The present disclosure provides methods and techniques for implementing Huffman coding in combination with RLE coding, methods and techniques for efficiently exchanging data and metadata between an encoder and decoder, and methods and techniques for reducing the overall data size of such a combination when used for encoding residual data.

Код Хаффмана представляет собой оптимальный префиксный код, который используется для сжатия данных (например, сжатие без потерь). Префиксный код представляет собой систему кодов, для которой в системе нет работы кода, которая является префиксом любого другого кода. То есть операция кодирования Хаффмана берет набор входных символов и преобразует каждый входной символ в соответствующий код. Выбранный код основан на частоте появления каждого символа в исходном наборе данных. Таким образом, меньшие коды могут быть связаны с символами, которые встречаются чаще, чтобы уменьшить общий размер данных.Huffman code is an optimal prefix code that is used for data compression (such as lossless compression). A prefix code is a system of codes for which there is no code work in the system that is a prefix of any other code. That is, the Huffman encoding operation takes a set of input symbols and converts each input symbol into its corresponding code. The selected code is based on the frequency of occurrence of each character in the original data set. Thus, smaller codes can be associated with characters that occur more frequently to reduce the overall data size.

Чтобы облегчить кодирование Хаффмана, входные данные предпочтительно структурированы как символы. Выходные данные операции кодирования длин серий предпочтительно структурированы так, чтобы представлять собой поток байтов закодированных данных.To facilitate Huffman coding, the input data is preferably structured as characters. The output of the run length encoding operation is preferably structured to be a stream of bytes of encoded data.

В одном примере операция кодирования длин серий выводит два типа байтов или символов. Первый тип символа представляет собой значение ненулевого пикселя, а второй тип символа представляет собой серию последовательных нулевых значений. То есть количество нулевых значений, которые последовательно встречаются в исходном наборе данных.In one example, the run-length encoding operation outputs two types of bytes or characters. The first character type represents a non-zero pixel value, and the second character type represents a series of consecutive zero values. That is, the number of null values that consistently occur in the original data set.

В дополнительном примере для кодирования определенных значений данных могут быть объединены два байта или символа. То есть, например, когда значение пикселя больше порогового значения, два байта или символа могут использоваться для кодирования значения данных в символе. Эти два символа могут быть объединены в декодере для воссоздания исходного значения данных пикселя.In an additional example, two bytes or characters may be concatenated to encode certain data values. That is, for example, when a pixel value is greater than a threshold, two bytes or characters can be used to encode the data value in the character. These two symbols can be combined in a decoder to recreate the original pixel data value.

Каждый символ или байт может содержать 6 или 7 бит данных и один или более флагов или битов, указывающих тип символа.Each character or byte may contain 6 or 7 bits of data and one or more flags or bits indicating the type of the character.

В примере осуществления данные, закодированные по длине серий, могут быть эффективно закодированы путем вставки в каждый символ одного или более флагов, указывающих следующий символ, который ожидается в потоке байтов.In an exemplary embodiment, run-length encoded data can be efficiently encoded by inserting into each character one or more flags indicating the next character that is expected in the byte stream.

Чтобы облегчить синхронизацию между кодером и декодером, первый байт потока данных с кодированием длин серий может быть типом значения данных символа. Затем этот байт может указывать на следующий тип байта, который был закодирован.To facilitate synchronization between the encoder and decoder, the first byte of the run-length encoding data stream may be the data value type of the symbol. This byte can then point to the next byte type that was encoded.

В некоторых вариантах воплощения флаг, указывающий следующий байт, может отличаться в зависимости от типа символа. Например, флаг или бит могут быть расположены в начале или в конце байта или в обоих. Например, в начале байта бит может указывать, что следующий символ может быть серией нулей. В конце байта бит может быть битом переполнения, указывающим, что следующий символ содержит часть значения данных, которая должна быть объединена со значением данных в текущем символе.In some embodiments, the flag indicating the next byte may differ depending on the type of character. For example, a flag or bit may be located at the beginning or end of a byte, or both. For example, at the beginning of a byte, a bit may indicate that the next character may be a series of zeros. At the end of the byte, the bit may be an overflow bit indicating that the next character contains part of the data value that must be combined with the data value in the current character.

Далее описывается конкретный пример реализации операции кодирования длин серий. RLE содержит три контекста: RLC_RESIDUAL_LSB, RLC_RESIDUAL_MSB и RLC_ZERO_RUN. Структура этих байтов проиллюстрирована на фиг. 10, 11 и 12.The following describes a specific example of the implementation of the run length encoding operation. The RLE contains three contexts: RLC_RESIDUAL_LSB, RLC_RESIDUAL_MSB and RLC_ZERO_RUN. The structure of these bytes is illustrated in FIG. 10, 11 and 12.

В первом типе символа, RLC_RESIDUAL_LSB, проиллюстрированном на фиг. 10, кодируются 6 младших значащих битов ненулевого пикселя. Может быть предусмотрен бит выполнения, указываю- 12 044215 щий, что следующий байт кодирует счет серии нулей. Бит переполнения может быть установлен, если значение пикселя не соответствует 6 битам данных. Когда бит переполнения установлен, контекст следующего байта будет иметь тип RLC_RESIDUAL_MSB. To есть следующий символ будет содержать байт данных, который может быть объединен с битами текущего символа для кодирования значения данных. Если установлен бит переполнения, следующий контекст не может быть серией нулей, и поэтому символ может использоваться для кодирования данных.In the first symbol type, RLC_RESIDUAL_LSB, illustrated in FIG. 10, the least significant 6 bits of a non-zero pixel are encoded. An execute bit may be provided to indicate that the next byte encodes a run of zeros count. The overflow bit can be set if the pixel value does not correspond to 6 data bits. When the overflow bit is set, the context of the next byte will be of type RLC_RESIDUAL_MSB. That is, the next character will contain a byte of data that can be combined with the bits of the current character to encode the data value. If the overflow bit is set, the next context cannot be a series of zeros, and so the character can be used to encode data.

На фиг. 10 проиллюстрирован пример этого типа символа. Если значение данных, которые должны быть закодированы, больше порогового значения 64 или значение пикселя не соответствует 6 битам данных, бит переполнения может быть установлен процессом кодирования. Если бит переполнения установлен как младший бит байта, то оставшиеся биты байта могут кодировать данные. Если значение пикселя умещается в пределах 6 битов, бит переполнения не может быть установлен и может быть включен бит выполнения, который указывает, является ли следующий символ значением данных или серией нулей, или нет.In fig. Figure 10 illustrates an example of this type of symbol. If the value of the data to be encoded is greater than the threshold value of 64 or the pixel value does not correspond to 6 bits of data, the overflow bit may be set by the encoding process. If the overflow bit is set as the least significant bit of the byte, then the remaining bits of the byte can encode data. If the pixel value fits within 6 bits, the overflow bit cannot be set and the run bit can be turned on, which indicates whether the next character is a data value or a series of zeros or not.

Второй тип символа, RLC_RESIDUAL_MSB, проиллюстрированный на фиг. 11, кодирует биты с 7 по 13 значений пикселей, которые не помещаются в 6 бит данных. Бит 7 этого типа символа кодирует, является ли следующий байт серией нулей или нет.The second symbol type, RLC_RESIDUAL_MSB, illustrated in FIG. 11 encodes bits 7 through 13 of pixel values that do not fit into 6 bits of data. Bit 7 of this character type encodes whether the next byte is a series of zeros or not.

Третий тип символа, RLC_ZERO_RUN, проиллюстрированный на фиг. 12, кодирует 7 бит нулевого подсчета серий. То есть символ содержит количество последовательных нулей в остаточных данных. Бит выполнения символа имеет высокий уровень, если для кодирования подсчета требуется больше битов. Бит выполнения может быть самым старшим битом байта. То есть, когда имеется ряд последовательных нулей, для которых требуется более 7 доступных битов, например 178 или 255, бит выполнения указывает, что следующий бит будет указывать на дополнительную серию нулей.The third symbol type, RLC_ZERO_RUN, illustrated in FIG. 12, encodes 7 bits of zero run count. That is, the symbol contains the number of consecutive zeros in the residual data. The character progress bit is high if more bits are required to encode the count. The execute bit may be the most significant bit of the byte. That is, when there is a run of consecutive zeros that requires more than 7 available bits, such as 178 or 255, the execute bit indicates that the next bit will point to an additional run of zeros.

Необязательно, дополнительный символ может содержать вторую серию нулей, которая может быть объединена с первой серией, или может содержать набор битов значения, которые могут быть объединены с битами первого символа в декодере для указания счета.Optionally, the additional symbol may contain a second run of zeros, which may be combined with the first run, or may contain a set of value bits, which may be combined with the bits of the first symbol at the decoder to indicate a count.

Как указано выше в данном документе, для того, чтобы декодер начал работу в известном контексте, первый символ в кодированном потоке может быть типом значения остаточных данных символа, то есть может быть типом RLC_RESIDUAL_LSB.As stated earlier in this document, in order for the decoder to start operating in a known context, the first symbol in the codestream may be a symbol residual data value type, that is, it may be an RLC_RESIDUAL_LSB type.

В конкретном примере данные RLE могут быть организованы в блоки. Каждый блок может иметь выходную емкость 4096 байт. RLE может переключиться на новый блок в следующих случаях:In a specific example, the RLE data may be organized into blocks. Each block can have an output capacity of 4096 bytes. RLE may switch to a new block in the following cases:

текущий блок заполнен;the current block is full;

текущие данные RLE являются прогоном, а в текущем блоке осталось менее 5 байтов; и/или текущие данные RLE приводят к паре LSB/MSB, а в текущем блоке осталось менее 2 байтов.the current RLE data is a run and there are less than 5 bytes left in the current block; and/or the current RLE data results in an LSB/MSB pair and there are less than 2 bytes remaining in the current block.

Таким образом, операция кодирования длин серий может выполняться над остаточными данными новой технологии кодирования, которая включает кодирование в поток набора значений данных и подсчета последовательных нулевых значений. В конкретной реализации вывод операции кодирования длин серий может быть потоком байтов или символов, где каждый байт является одним из трех типов или контекстов. Байт указывает следующий тип байта, который ожидается в потоке байтов.Thus, the run length encoding operation can be performed on the residual data of a new encoding technique that involves encoding into a stream a set of data values and counting consecutive zero values. In a particular implementation, the output of a run-length encoding operation may be a stream of bytes or characters, where each byte is one of three types or contexts. Byte specifies the next byte type expected in the byte stream.

Следует отметить, что эти структуры предоставлены в качестве примера, и что могут применяться различные схемы кодирования битов, следуя функциональным принципам, описанным в данном документе. Например, можно обмениваться кодированием младшего и старшего значащих битов и/или можно применять различные длины битов. Кроме того, биты флагов могут быть расположены в различных заранее определенных позициях в байте.It should be noted that these structures are provided as examples, and that various bit encoding schemes may be used following the functional principles described herein. For example, the encoding of the least significant and most significant bits may be exchanged and/or different bit lengths may be used. In addition, flag bits can be located at various predefined positions in a byte.

Как отмечено выше в данном документе, операция кодирования Хаффмана может применяться к потоку байтов, чтобы дополнительно уменьшить размер данных. Процесс может создать частотную таблицу относительного появления каждого символа в потоке. Из частотной таблицы процесс может сгенерировать дерево Хаффмана. Код Хаффмана для каждого символа может быть сгенерирован путем обхода дерева от корня до тех пор, пока символ не будет достигнут, назначая бит кода для каждой взятой ветви.As noted earlier in this document, a Huffman encoding operation can be applied to a byte stream to further reduce the data size. The process can create a frequency table of the relative occurrence of each character in the stream. From the frequency table, the process can generate a Huffman tree. A Huffman code for each character can be generated by traversing the tree from the root until the character is reached, assigning a code bit for each branch taken.

В предпочтительном варианте осуществления для использования со спецификой кодированных по длине серий символов квантованных остатков данных (то есть остаточных данных) может применяться каноническая операция кодирования Хаффмана. Канонические коды Хаффмана могут уменьшить требования к хранению набора кодов в зависимости от структуры входных данных. Каноническая процедура Хаффмана обеспечивает способ создания кода, который неявно содержит информацию о том, какое кодовое слово применимо к какому символу. Коды Хаффмана могут быть установлены с набором условий, например, все коды заданной длины могут иметь лексикографически последовательные значения в том же порядке, что и символы, которые они представляют, а более короткие коды лексикографически предшествуют более длинным кодам. В канонической реализации кодирования Хаффмана только кодовые слова и длины каждого кода должны быть переданы, чтобы декодер мог воспроизвести каждый символ.In a preferred embodiment, a canonical Huffman encoding operation may be used for use with run-length coded symbol length specific quantized data residuals (ie, residual data). Canonical Huffman codes can reduce the storage requirements of a set of codes depending on the structure of the input data. The canonical Huffman procedure provides a way to create a code that implicitly contains information about which codeword applies to which symbol. Huffman codes can be specified with a set of conditions, for example, all codes of a given length can have lexicographically sequential values in the same order as the characters they represent, and shorter codes lexicographically precede longer codes. In a canonical implementation of Huffman encoding, only the codewords and the lengths of each code must be transmitted in order for the decoder to reproduce each symbol.

После применения операции канонического кодирования Хаффмана размер выходных данных можно сравнить с размером данных после выполнения операции кодирования длин серий. Если размер данных меньше, то меньшие данные могут быть переданы или сохранены. Сравнение размера данных может выполняться на основе размера блока данных, размера слоя, плоскости или поверхности или обAfter applying the canonical Huffman encoding operation, the size of the output data can be compared with the size of the data after performing the run length encoding operation. If the data size is smaller, then smaller data can be transferred or stored. Data size comparisons can be made based on data block size, layer size, plane or surface, or volume.

- 13 044215 щего размера кадра или видео. Чтобы сигнализировать декодеру, как данные были закодированы, в заголовке данных может быть передан флаг, что данные кодируются с использованием кодирования Хаффмана, кодирования RLE или того и другого. В альтернативной реализации декодер может иметь возможность определять по характеристикам данных, что данные были закодированы с использованием конкретной операции кодирования. Например, как указано ниже, данные могут быть разделены на заголовок и часть данных, где используется каноническое кодирование Хаффмана, чтобы сигнализировать о длинах кодов закодированных символов.- 13 044215 total frame or video size. To signal to the decoder how the data has been encoded, a flag may be passed in the data header that the data is encoded using Huffman encoding, RLE encoding, or both. In an alternative implementation, the decoder may be able to determine from characteristics of the data that the data has been encoded using a particular encoding operation. For example, as discussed below, the data may be divided into a header and a data portion, where canonical Huffman encoding is used to signal the code lengths of the encoded characters.

Канонические данные, закодированные по способу Хаффмана, содержат часть, которая сообщает декодеру о длине кода, используемого для каждого символа, и часть, которая содержит битовый поток, представляющих кодированные данные. В конкретной реализации, предложенной в данном документе, длины кода могут сообщаться в части заголовка, а данные сообщаться в части данных. Предпочтительно часть заголовка будет сигнализироваться для каждой поверхности, но может сигнализироваться для каждого блока или другого подразделения в зависимости от конфигурации.Canonical Huffman-encoded data contains a part that tells the decoder the length of the code used for each symbol, and a part that contains a bitstream representing the encoded data. In the specific implementation proposed herein, code lengths may be reported in the header portion and data lengths may be reported in the data portion. Preferably, the header portion will be signaled for each surface, but may be signaled for each block or other division depending on the configuration.

В предлагаемом примере заголовок может отличаться в зависимости от количества кодируемых ненулевых кодов. Количество кодируемых ненулевых кодов (например, для каждой поверхности или блока) может сравниваться с пороговым значением и заголовком, используемым на основе сравнения. Например, если имеется более 31 символа ненулевого кода, заголовок может последовательно указывать все символы, начиная с заранее определенного сигнала, такого как 0. По порядку, длина каждого символа может сигнализироваться. Если имеется менее 31 ненулевого символа кода, каждое значение символа может сигнализироваться в заголовке с соответствующей длиной кода для этого символа.In the proposed example, the header may differ depending on the number of non-zero codes encoded. The number of non-zero codes to be encoded (eg, for each surface or block) may be compared with a threshold and header used based on the comparison. For example, if there are more than 31 non-zero code characters, the header may sequentially indicate all the characters, starting with a predetermined signal such as 0. In order, the length of each character may be signaled. If there are fewer than 31 non-zero code characters, each character value may be signaled in a header with the corresponding code length for that character.

На фиг. 13-16 иллюстрируется конкретная реализация форматов заголовков и то, как длины кода могут быть записаны в заголовок потока в зависимости от количества ненулевых кодов.In fig. Figures 13-16 illustrate specific implementations of header formats and how code lengths can be written to a stream header depending on the number of non-zero codes.

На фиг. 13 проиллюстрирована ситуация, когда в данных может быть более 31 ненулевого символа. Заголовок включает минимальную длину кода и максимальную длину кода. Длина кода для каждого символа отправляется последовательно. Флаг указывает, что длина символа не равна нулю. Затем биты длины кода отправляются как разница между длиной кода и минимальной сигнальной длиной. Благодаря этому уменьшается общий размер заголовка.In fig. Figure 13 illustrates a situation where there may be more than 31 non-zero characters in the data. The header includes a minimum code length and a maximum code length. The code length for each character is sent sequentially. The flag indicates that the length of the character is not zero. The code length bits are then sent as the difference between the code length and the minimum signal length. This reduces the overall size of the header.

На фиг. 14 проиллюстрирован заголовок, аналогичный заголовку, проиллюстрированному на фиг. 13, но используемый там, где имеется менее 31 ненулевого кода. Заголовок дополнительно включает количество символов в данных, за которым следует значение символа и длина кодового слова для этого символа, снова отправленные как разность.In fig. 14 illustrates a header similar to the header illustrated in FIG. 13, but used where there are fewer than 31 non-zero codes. The header further includes the number of characters in the data, followed by the value of the character and the codeword length for that character, again sent as a difference.

На фиг. 15 и 16 проиллюстрированы дополнительные заголовки, которые нужно отправлять в особых случаях. Например, если все частоты равны нулю, заголовок потока может быть таким, как проиллюстрировано на фиг. 14, указывая два значения 31 в полях минимальной и максимальной длины, чтобы указать особую ситуацию. Если в дереве Хаффмана есть только один код, заголовок потока может быть таким, как показано на рисунке 16, с использованием значения 0 в полях минимальной и максимальной длины, чтобы указать особую ситуацию, а затем следует значение символа, которое будет использоваться.In fig. Figures 15 and 16 illustrate additional headers that need to be sent in special cases. For example, if all frequencies are zero, the stream header may be as illustrated in FIG. 14, specifying two values 31 in the minimum and maximum length fields to indicate the exception. If there is only one code in the Huffman tree, the stream header could be as shown in Figure 16, using the value 0 in the minimum and maximum length fields to indicate the exception, followed by the character value to be used.

В этом последнем примере, где есть только одно значение символа, это может указывать на то, что в остаточных данных есть только одно значение данных.In this last example, where there is only one character value, this may indicate that there is only one data value in the residual data.

Таким образом, процесс кодирования можно резюмировать следующим образом:Thus, the encoding process can be summarized as follows:

Анализ остаточных данных для определения значений данных и последовательных подсчетов нулевых значений.Residual data analysis to determine data values and successive counts of zero values.

Генерирование набора символов, в котором каждый символ является байтом, а каждый байт содержит либо значение данных, либо серию нулей, а также указание следующего символа в наборе символов. Символы могут содержать бит переполнения, указывающий, что следующий символ включает в себя часть значения данных, включенных в текущий символ, или бит выполнения, указывающий, что следующий символ представляет собой серию нулей.Generates a character set in which each character is a byte, and each byte contains either a data value or a series of zeros, and specifies the next character in the character set. Symbols may contain an overflow bit, indicating that the next symbol includes part of the data value included in the current symbol, or a run bit, indicating that the next symbol is a series of zeros.

Преобразование каждого символа фиксированной длины в код переменной, используя каноническое кодирование Хаффмана. Каноническое кодирование Хаффмана анализирует символы, чтобы идентифицировать частоту, с которой каждый символ встречается в наборе символов, и присваивает символу код на основе частоты и значения символа (для одинаковой длины кода).Convert each fixed-length character into a variable code using canonical Huffman encoding. Canonical Huffman coding analyzes characters to identify the frequency with which each character occurs in a set of characters, and assigns a code to the character based on the frequency and value of the character (for the same code length).

Генерирование и вывод набора длин кода, каждая из которых связана с символом. Длина кода представляет собой длину каждого кода, назначенного каждому символу.Generate and output a set of code lengths, each associated with a symbol. The code length is the length of each code assigned to each character.

Объединение кодов переменной длины в битовый поток.Combining variable length codes into a bitstream.

Вывод закодированного битового потока.Output the encoded bitstream.

В конкретной описанной реализации следует отметить, что максимальная длина кода зависит от количества закодированных символов и количества выборок, используемых для получения таблицы частот Хаффмана. Для N символов максимальная длина кода составляет N-1. Однако, чтобы символ имел k-битный код Хаффмана, количество выборок, используемых для вывода частотной таблицы, должно быть по меньшей мере:In the particular implementation described, it should be noted that the maximum code length depends on the number of symbols encoded and the number of samples used to obtain the Huffman frequency table. For N characters, the maximum code length is N-1. However, for a symbol to have a k-bit Huffman code, the number of samples used to output the frequency table must be at least:

- 14 044215- 14 044215

где Fi является i-ым числом Фибоначчи.where Fi is the i-th Fibonacci number.

Например, для 8-битных символов теоретическая максимальная длина кода составляет 255. Однако для видео HD 1080р максимальное количество выборок, используемых для вывода таблицы частот для контекста RLE остаточных данных, составляет 1920x1080/4=518 400, что находится между S26 и S27. Следовательно, в этом примере ни один символ не может иметь код Хаффмана более 26 бит. Для 4К это число увеличивается до 29 бит.For example, for 8-bit symbols, the theoretical maximum code length is 255. However, for HD 1080p video, the maximum number of samples used to output the frequency table for the RLE residual data context is 1920x1080/4=518,400, which is between S26 and S27. Therefore, in this example, no character can have a Huffman code greater than 26 bits. For 4K this number increases to 29 bits.

Для полноты картины на фиг. 17 проиллюстрирован пример кодирования набора символов Хаффманом, в этом примере символы являются буквенно-цифровыми. Как отмечалось выше, код Хаффмана представляет собой оптимальный префиксный код, который может использоваться для сжатия данных без потерь. Префиксный код представляет собой кодовую систему, для которой в системе нет кодового слова, которое является префиксом любого другого кода.For completeness, FIG. 17 illustrates an example of Huffman character set encoding, in this example the characters are alphanumeric. As noted above, the Huffman code is an optimal prefix code that can be used for lossless data compression. A prefix code is a code system for which the system does not have a code word that is a prefix of any other code.

Чтобы найти код Хаффмана для данного набора символов, необходимо создать дерево Хаффмана.To find the Huffman code for a given set of characters, you need to create a Huffman tree.

Сначала символы по частоте,Symbols first by frequency,

Символ Symbol Частота Frequency А A 3 3 В IN 8 8 С WITH 10 10 D D 15 15 Е E 20 20 F F 43 43

Два самых нижних элемента удаляются из списка и превращаются в листья с родительским узлом, частота которого равна сумме частот двух нижних элементов. Частичное дерево проиллюстрировано на фиг. 17а.The bottom two elements are removed from the list and turned into leaves with a parent node whose frequency is equal to the sum of the frequencies of the bottom two elements. A partial tree is illustrated in FIG. 17a.

Затем цикл повторяется, объединяя два самых нижних элемента, как проиллюстрировано на фиг. 17b.The cycle then repeats, combining the two lowest elements, as illustrated in FIG. 17b.

Новый список:New list:

Символ Symbol Частота Frequency D D 15 15 Е E 20 20 * * 21 21 F F 43 43

Это повторяется до тех пор, пока в списке не останется только один элемент, как проиллюстрировано на фиг. 17с, , 17d, 17e и в таблицах.This is repeated until there is only one element left in the list, as illustrated in FIG. 17c, , 17d, 17e and in tables.

Символ Symbol Частота Frequency * * 21 21 * * 35 35 F F 43 43

Символ Symbol Частота Frequency F F 43 43 * * 56 56

Символ Symbol Частота Frequency * * 99 99

- 15 044215- 15 044215

После построения дерева для генерирования кода Хаффмана для символа тройка обходит от корня до этого символа, выводя 0 каждый раз, когда берется левая ветвь, и 1 каждый раз, когда выбирается правая ветвь. В приведенном выше примере это дает следующий код:After constructing a tree to generate a Huffman code for a character, the triple traverses from the root to that character, outputting 0 each time the left branch is taken and 1 each time the right branch is taken. In the example above, this produces the following code:

Длина кода символа представляет собой длину соответствующего ему кода.The code length of a character is the length of its corresponding code.

Чтобы декодировать код Хаффмана, дерево просматривается, начиная с корня, выбирая левый путь, если читается 0, и правый путь, если читается 1. Символ обнаруживается при ударе по листу.To decode the Huffman code, the tree is traversed starting at the root, choosing the left path if a 0 is read and the right path if a 1 is read. The character is found when a leaf is struck.

Как описано выше в документе, символы RLE могут кодироваться с использованием кодирования Хаффмана. В предпочтительном примере используется каноническое кодирование Хаффмана. В реализации канонического кодирования Хаффмана может использоваться процедура кодирования Хаффмана, и полученный код преобразовывается в канонические коды Хаффмана. То есть таблица перестраивается так, чтобы одинаковые длины были последовательными в том же порядке, что и символы, которые они представляют, и чтобы более поздний код всегда был выше по значению, чем более ранний. Если символы расположены в алфавитном порядке, их можно переставить в алфавитном порядке. Если символы являются значениями, они могут располагаться в последовательном порядке значений, и соответствующие кодовые слова изменяются, чтобы соответствовать указанным выше ограничениям. Каноническое кодирование Хаффмана и/или другие подходы к кодированию Хаффмана, описанные в данном документе, могут отличаться от базового примера, проиллюстрированного на фиг. 17а-17е.As described earlier in the document, RLE symbols may be encoded using Huffman encoding. The preferred example uses canonical Huffman encoding. An implementation of canonical Huffman encoding may use a Huffman encoding procedure and convert the resulting code into canonical Huffman codes. That is, the table is rearranged so that like lengths are sequential in the same order as the characters they represent, and so that the later code is always higher in value than the earlier. If the characters are in alphabetical order, they can be rearranged in alphabetical order. If the symbols are values, they may be in sequential value order, and the corresponding codewords are modified to meet the above restrictions. Canonical Huffman coding and/or other Huffman coding approaches described herein may differ from the base example illustrated in FIG. 17a-17e.

В примерах, описанных выше в данном документе, операция кодирования Хаффмана может применяться к символам данных, кодированным с использованием операции кодирования модифицированной длины серий. Далее предлагается создать частотную таблицу для каждого контекста или состояния RLE. Для каждого типа символа, закодированного с помощью операции кодирования RLE, может быть свой набор кодов Хаффмана. В варианте реализации может быть свой кодировщик Хаффмана для каждого контекста или состояния RLE.In the examples described above herein, a Huffman encoding operation may be applied to data symbols encoded using a modified run length encoding operation. The next step is to create a frequency table for each RLE context or state. Each character type encoded using the RLE encoding operation can have its own set of Huffman codes. An implementation may have a different Huffman encoder for each RLE context or state.

Предполагается, что один заголовок потока может быть отправлен для каждого контекста RLE или типа символа, то есть множество заголовков потока может указывать длины кодов для каждого набора кодов, то есть для каждого кодера Хаффмана или каждой таблицы частот.It is assumed that one stream header can be sent for each RLE context or symbol type, that is, multiple stream headers can indicate code lengths for each code set, ie, for each Huffman encoder or frequency table.

Ниже описан пример конкретных этапов реализации кодировщика. В одной реализации кодирование данных, выводимых RLE, выполняется в три основных этапа:Below is an example of the specific steps involved in implementing an encoder. In one implementation, encoding the data output from RLE is done in three main steps:

1. Инициализация кодеров (например, с помощью функции InitialiseEncode):1. Initializing encoders (for example, using the InitialiseEncode function):

а. инициализация каждого кодера (по одному на состояние RLE) соответствующей таблицей частот, созданной RLE;A. initializing each encoder (one per RLE state) with the corresponding frequency table created by the RLE;

б. создание дерева Хаффмана;b. creating a Huffman tree;

в. вычисление длины кода каждого символа; иV. calculating the code length of each character; And

г. определение минимальной и максимальной длины кода.d. determination of the minimum and maximum code length.

2. Запись длины кода и таблицы кодов в заголовок потока (например, с помощью функции WriteCodeLengths) для каждого кодера:2. Write the code length and code table into the stream header (for example, using the WriteCodeLengths function) for each encoder:

а. присваивание кодов символам (например, с помощью функции AssignCodes). Обратите внимание, что функция, используемая для присвоения кодов символу, немного отличается от примера, проиллюстрированного на фиг. 19а-19е выше, поскольку она обеспечивает последовательное выполнение всех кодов заданной длины, т.е. использует каноническое кодирование Хаффмана;A. assigning codes to symbols (for example, using the AssignCodes function). Note that the function used to assign character codes is slightly different from the example illustrated in FIG. 19a-19e above, since it ensures sequential execution of all codes of a given length, i.e. uses canonical Huffman coding;

б. запись минимальной и максимальной длины кода в заголовок потока; иb. recording the minimum and maximum code length in the stream header; And

в. запись длин кода каждого символа в поток.V. writing the code lengths of each character to the stream.

3. Кодирование данных RLE:3. RLE data encoding:

а. присваивание текущего RLE-контекста RLC_RESIDUAL_LSB;A. assignment of the current RLE context RLC_RESIDUAL_LSB;

б. кодирование текущего символа во входном потоке с помощью кодера, соответствующего текущему контексту;b. encoding the current character in the input stream using an encoder appropriate for the current context;

в. использование конечного автомата RLE, чтобы получить следующий контекст (см. фиг. 20). Если это не последний символ потока, перейдите к b; иV. using the RLE state machine to obtain the next context (see FIG. 20). If this is not the last character of the stream, go to b; And

г. если данные RLE представляют собой только один блок, а закодированный поток больше, чем RLE, сохранение закодированного потока RLE, а не закодированного потока Хаффмана.d. If the RLE data is only one block and the encoded stream is larger than the RLE, store the RLE encoded stream rather than the Huffman encoded stream.

Для каждого блока RLE кодеры Хаффмана создают соответствующую кодированную часть Хаффмана.For each RLE block, Huffman encoders produce a corresponding Huffman encoded part.

- 16 044215- 16 044215

Таким образом, результатом описанного здесь процесса кодирования является либо битовый поток, закодированный по Хаффману, либо поток байтов, закодированный по длине серий. Таким образом соответствующий декодер использует соответствующую операцию декодирования Хаффмана способом, обратным операции кодирования. Тем не менее, в описанной ниже операции декодирования есть нюансы для повышения эффективности и адаптации к специфике операции кодирования, описанной выше в документе.Thus, the result of the encoding process described here is either a Huffman-encoded bitstream or a run-length-encoded byte stream. Thus, the corresponding decoder uses the corresponding Huffman decoding operation in the reverse manner of the encoding operation. However, the decoding operation described below has nuances to improve efficiency and adapt to the specifics of the encoding operation described earlier in the document.

Когда кодер сигнализирует в заголовке или других метаданных конфигурации, что была использована операция кодирования RLE или Хаффмана, декодер может сначала идентифицировать, что операция декодирования Хаффмана должна быть применена к потоку. Точно также, как описано выше, декодер может идентифицировать из потока данных, использовалось ли кодирование Хаффмана, путем определения количества частей потока. Если есть часть заголовка и часть данных, тогда должна применяться операция декодирования Хаффмана. Если в потоке есть только часть данных, тогда может применяться только часть декодирования RLE.When the encoder signals in a header or other configuration metadata that an RLE or Huffman encoding operation was used, the decoder may first identify that a Huffman decoding operation should be applied to the stream. Just as described above, the decoder can identify from the data stream whether Huffman coding was used by determining the number of parts of the stream. If there is a header part and a data part, then the Huffman decoding operation must be applied. If there is only part of the data in the stream, then only part of the RLE decoding can be applied.

Энтропийный декодер выполняет обратные преобразования декодирования. В данном примере за декодированием по Хаффману следует декодирование длины серии.The entropy decoder performs inverse decoding transformations. In this example, Huffman decoding is followed by run length decoding.

В следующем примере описывается процесс декодирования, в котором битовый поток был закодирован с использованием канонической операции кодирования Хаффмана и операции кодирования длин серий, как описано выше в примере потока кодирования. Однако следует понимать, что операции кодирования Хаффмана и операции кодирования длин серий могут применяться отдельно для декодирования потоков, закодированных другим способом.The following example describes a decoding process in which a bitstream has been encoded using the canonical Huffman encoding operation and the run-length encoding operation as described above in the stream encoding example. However, it should be understood that Huffman encoding operations and run length encoding operations can be used separately to decode streams encoded in a different manner.

Вход в процесс представляет собой закодированный битовый поток. Битовый поток может быть получен из сохраненного файла или передан в потоковом режиме локально или удаленно. Закодированный битовый поток представляет собой последовательность последовательных битов без сразу различимой структуры. Только после применения операции кодирования Хаффмана к потоку битов можно вывести последовательность символов.The input to the process is an encoded bitstream. The bitstream can be obtained from a stored file or streamed locally or remotely. An encoded bit stream is a sequence of sequential bits with no immediately discernible structure. Only after applying the Huffman encoding operation to the bit stream can a sequence of characters be output.

Таким образом, процесс сначала применяет операцию кодирования Хаффмана к потоку битов.Thus, the process first applies a Huffman encoding operation to the bitstream.

Предполагается, что первый кодированный символ является символом типа значения данных. Таким образом, если операция кодирования Хаффмана использует разные частотные таблицы или параметры, операция кодирования Хаффмана может использовать правильную кодовую книгу для типа символа.The first encoded character is assumed to be a data value type character. Thus, if a Huffman encoding operation uses different frequency tables or parameters, the Huffman encoding operation can use the correct codebook for the symbol type.

Каноническая операция кодирования Хаффмана должна сначала извлечь подходящие параметры кодирования или метаданные, чтобы облегчить декодирование битового потока. В приведенном здесь примере параметры представляют собой набор длин кода, извлеченных из заголовка потока. Для простоты будет описан один набор длин кода, которым обмениваются кодер и декодер, но отметим, что, как и выше, могут передаваться сигналы нескольких наборов длин кода, так что операция кодирования может использовать разные параметры для каждого типа символа, который она предполагает расшифровать.A canonical Huffman encoding operation must first extract suitable encoding parameters or metadata to facilitate decoding of the bitstream. In the example here, the parameters are a set of code lengths extracted from the stream header. For simplicity, a single set of code lengths exchanged between the encoder and decoder will be described, but note that, as above, multiple sets of code lengths may be signaled, so that an encoding operation may use different parameters for each type of symbol it expects to decode.

Операция кодирования назначит длины кода, полученные в заголовке потока, соответствующему символу. Как отмечено выше, заголовок потока может отправляться в разных типах. Если заголовок потока включает в себя набор длин кода с соответствующими символами, каждая длина кода может быть связана с соответствующим значением символа. Если длины кода отправляются последовательно, декодер может ассоциировать каждую длину принятого кода с символом в заранее определенном порядке. Например, длины кода могут быть извлечены в порядке 3, 4, 6, 2 и т.д. Затем процесс кодирования может связать каждую длину с соответствующим символом. Здесь порядок последовательный - (символ, длина)-(0,3) (1,4) (3,6) (4,2).The encoding operation will assign the code lengths received in the stream header to the corresponding symbol. As noted above, the stream header can be sent in different types. If the stream header includes a set of code lengths with corresponding symbols, each code length can be associated with a corresponding symbol value. If code lengths are sent sequentially, the decoder can associate each received code length with a symbol in a predetermined order. For example, code lengths can be extracted in the order of 3, 4, 6, 2, etc. The encoding process can then associate each length with a corresponding character. Here the order is sequential - (character, length)-(0.3) (1.4) (3.6) (4.2).

Как проиллюстрировано на фиг. 15, некоторые символы могут не отправляться, но флаг может указывать, что символ имеет соответствующую нулевую длину кода, то есть этот символ не существует в потоке битов, который должен быть декодирован (или не используется).As illustrated in FIG. 15, some symbols may not be sent, but a flag may indicate that the symbol has a corresponding zero code length, that is, the symbol does not exist in the bitstream to be decoded (or is not used).

Затем каноническая операция кодирования Хаффмана может назначать код каждому символу на основе длины кода. Например, если длина кода равна 2, код для этого символа будет '1x'. Здесь x указывает, что значение является несущественным. В определенных реализациях код будет '10'.The canonical Huffman encoding operation can then assign a code to each character based on the code length. For example, if the code length is 2, the code for this character will be '1x'. Here x indicates that the value is not significant. In certain implementations the code will be '10'.

Если длины идентичны, каноническая операция кодирования Хаффмана назначает коды на основе последовательного порядка символов. Каждый код назначается таким образом, что по мере анализа битового потока декодер может продолжать проверять следующий бит, пока не будет существовать только один возможный код. Например, первому последовательному символу длины 4 может быть назначен код 1110, а второму последовательному символу длины 4 может быть назначен код 1111. Таким образом, анализируя битовый поток, если первые биты битового потока равны 1110x, возможна лишь кодировка потоком битов первого последовательного символа длиной 4.If the lengths are identical, the canonical Huffman encoding operation assigns codes based on the sequential order of the symbols. Each code is assigned in such a way that as the bit stream is analyzed, the decoder can continue to check the next bit until there is only one possible code. For example, the first consecutive character of length 4 may be assigned code 1110, and the second consecutive character of length 4 may be assigned code 1111. Thus, when analyzing the bitstream, if the first bits of the bitstream are 1110x, it is only possible to encode the first consecutive character of length 4 with a bitstream .

Соответственно, как только операция кодирования установила набор кодов, связанных с каждым символом, операция кодирования может перейти к синтаксическому анализу битового потока. В некоторых вариантах воплощения операция кодирования будет строить дерево, чтобы установить символ, связанный с кодом битового потока. То есть операция кодирования будет брать каждый бит битового потока и проходить по дереву в соответствии со значением бита в потоке битов, пока не будет найден лист. Как только лист найден, выводится символ, связанный с листом. Процесс продолжается в корне дереваAccordingly, once the encoding operation has established the set of codes associated with each symbol, the encoding operation can proceed to parse the bitstream. In some embodiments, the encoding operation will construct a tree to establish the symbol associated with the bitstream code. That is, the encoding operation will take each bit of the bitstream and traverse the tree according to the value of the bit in the bitstream until a leaf is found. Once a sheet is found, the symbol associated with the sheet is displayed. The process continues at the root of the tree

- 17 044215 со следующим битом битового потока. Таким образом, операция кодирования может выводить набор символов, полученных из набора кодов, хранящихся в кодированном потоке битов. В предпочтительных вариантах воплощения каждый символ представляет собой байт, как описано в другом месте в данном документе.- 17 044215 with the next bit of the bitstream. Thus, the encoding operation can output a set of symbols derived from a set of codes stored in the encoded bitstream. In preferred embodiments, each character is a byte, as described elsewhere herein.

Затем набор символов может быть передан в операцию кодирования длин серий. Операция кодирования длин серий идентифицирует тип символа и анализирует символ, чтобы извлечь значение данных или серию нулей. На основе значений данных и серий нулей операция может воссоздать исходные остаточные данные, которые были закодированы.The character set can then be passed to the run length encoding operation. The run-length encoding operation identifies the character type and parses the character to extract the data value or run of zeros. Based on the data values and the series of zeros, the operation can recreate the original residual data that was encoded.

Как отмечалось выше в данном документе, выходной сигнал кодирования Хаффмана, вероятно, будет набором символов. Задача на следующем этапе декодирования состоит в том, чтобы извлечь из этих символов релевантную информацию, учитывая, что каждый символ содержит данные в разном формате, и каждый символ будет представлять различную информацию, несмотря на то, что информация не будет сразу различима из символа или байта.As noted earlier in this document, the output of Huffman encoding is likely to be a set of symbols. The task in the next stage of decoding is to extract relevant information from these symbols, given that each symbol contains data in a different format, and each symbol will represent different information, even though the information will not be immediately distinguishable from the symbol or byte .

В предпочтительных примерах операция кодирования обращается к конечному автомату, как проиллюстрировано на фиг. 18. В целом, операция кодирования сначала предполагает, что первый символ является типом значения данных (значение данных, конечно, может быть 0). Исходя из этого, операция кодирования может идентифицировать, включает ли байт флаг переполнения или флаг выполнения. Флаг переполнения и запуска описаны выше в документе и проиллюстрированы на фиг. 10.In preferred examples, the encoding operation is accessed by a state machine, as illustrated in FIG. 18. In general, the encoding operation first assumes that the first character is a data value type (the data value can, of course, be 0). From this, the encoding operation can identify whether the byte includes an overflow flag or a run flag. The overflow and trigger flags are described above in the document and illustrated in FIG. 10.

Операция кодирования может сначала проверить младший значащий бит символа (или байта). В данном контексте, это флаг (или бит) переполнения. Если установлен младший значащий бит, операция кодирования определяет, что следующий символ также будет значением данных и будет иметь тип RLC_RESIDUAL_MSB. Остальные биты символа будут младшими значащими битами значения данных.An encoding operation may first check the least significant bit of a character (or byte). In this context, it is an overflow flag (or bit). If the least significant bit is set, the encoding operation determines that the next character will also be a data value and will be of type RLC_RESIDUAL_MSB. The remaining bits of the character will be the least significant bits of the data value.

Процесс кодирования переходит к синтаксическому анализу следующего символа и извлечению младших битов как оставшейся части значения данных. Биты первого символа могут быть объединены с битами второго символа для восстановления значения данных.The encoding process proceeds to parse the next character and extract the least significant bits as the remainder of the data value. The bits of the first character can be combined with the bits of the second character to reconstruct the data value.

В этом текущем символе, проиллюстрированном на фиг. 11, также будет флаг выполнения, здесь самый старший бит. Если это установлено, следующим символом будет символ запуска, а не символ данных.In this current symbol illustrated in FIG. 11, there will also be an execution flag, here is the most significant bit. If this is set, the next character will be the start character rather than the data character.

В символе запуска, проиллюстрированном на фиг. 12, операция кодирования проверяет самый старший бит, чтобы указать, является ли следующий символ символом запуска или символом данных, и извлекает оставшиеся биты как серию нулей. То есть максимальную серию из 127 нулей.In the trigger symbol illustrated in FIG. 12, the encoding operation checks the most significant bit to indicate whether the next symbol is a start symbol or a data symbol, and extracts the remaining bits as a series of zeros. That is, the maximum series of 127 zeros.

Если символ данных указывает на отсутствие переполнения (во флаге переполнения, здесь наименее значимый бит), тогда символ также будет содержать в самом значительном бите бит выполнения, и операция кодирования сможет определить по этому биту, что следующий символ в наборе - это символ запуска или символ данных. Таким образом, операция кодирования может извлекать значение данных из битов 6-1. Здесь доступно 31 значение данных без переполнения.If a data character indicates no overflow (in the overflow flag, here the least significant bit), then the character will also contain in its most significant bit an execute bit, and the encoding operation will be able to determine from this bit that the next character in the set is a run character or a data. Thus, the encoding operation can extract the data value from bits 6-1. There are 31 data values available here without overflow.

Как уже отмечалось, конечный автомат, проиллюстрированный на фиг. 18, просто иллюстрирует процесс.As already noted, the state machine illustrated in FIG. 18 simply illustrates the process.

Начиная с символа RLC_RESIDUAL_LSB, если бит переполнения=0 и бит выполнения=0, то следующим символом будет символ RLC_RESIDUAL_LSB. Если бит переполнения=1, то следующим символом будет RLC_RESIDUAL_MSB. Если бит переполнения=1, бита выполнения не будет. Если бит выполнения=1 и бит переполнения=0, то следующим битом будет символ RLC_ZERO_RUN.Starting with the RLC_RESIDUAL_LSB character, if the overflow bit=0 and the execute bit=0, then the next character will be the RLC_RESIDUAL_LSB character. If the overflow bit=1, then the next character will be RLC_RESIDUAL_MSB. If overflow bit=1, there will be no progress bit. If run bit=1 and overflow bit=0, then the next bit will be the RLC_ZERO_RUN character.

В символе RLC RLC_RESIDUAL_MSB, если бит выполнения равен 0, следующим символом будет символ RLC_RESIDUAL_LSB. Если бит выполнения равен 1, следующим символом будет символ RLC_ZERO_RUN.In an RLC symbol RLC_RESIDUAL_MSB, if the execute bit is 0, the next symbol will be the RLC_RESIDUAL_LSB symbol. If the run bit is 1, the next character will be the RLC_ZERO_RUN character.

В символе RLC_ZERO_RUN, если бит выполнения равен 0, следующим битом будет символ RLC_RESIDUAL_LSB. Если бит выполнения равен 1, следующим битом будет символ RLC_ZERO_RUN.In the RLC_ZERO_RUN symbol, if the run bit is 0, the next bit will be the RLC_RESIDUAL_LSB symbol. If the run bit is 1, the next bit will be the RLC_ZERO_RUN character.

Разумеется, биты можно инвертировать (0/1, 1/0 и т.п.) без потери функциональности. Точно так же положения внутри символов или байтов флагов являются просто иллюстративными.Of course, bits can be inverted (0/1, 1/0, etc.) without loss of functionality. Likewise, positions within flag characters or bytes are merely illustrative.

Операция кодирования длин серий может идентифицировать следующий символ в наборе символов и извлекать либо значение данных, либо серию нулей. Затем операция кодирования может объединить эти значения и нули для воссоздания остаточных данных. Порядок может быть в порядке извлечения или, альтернативно, в некотором заранее определенном порядке.The run-length encoding operation can identify the next character in a character set and extract either a data value or a run of zeros. The encoding operation can then combine these values and zeros to recreate the residual data. The order may be in order of extraction or, alternatively, in some predetermined order.

Таким образом, операция кодирования может выводить остаточные данные, которые были закодированы в байтовый поток.Thus, the encoding operation can output residual data that was encoded into the byte stream.

Выше в данном документе было описано, как несколько метаданных или параметров кодирования могут использоваться в процессе кодирования. На стороне декодирования операция кодирования может включать в себя обратную связь между операциями. То есть ожидаемый следующий символ может быть извлечен из текущего символа (например, с использованием битов переполнения и выполнения), а ожидаемый следующий символ может быть передан операции кодирования Хаффмана.It has been described earlier in this document how several metadata or encoding parameters can be used during the encoding process. On the decoding side, the encoding operation may include feedback between operations. That is, the expected next character can be extracted from the current character (eg, using overflow and execute bits), and the expected next character can be passed to a Huffman encoding operation.

Операция кодирования Хаффмана может необязательно генерировать отдельную кодовую книгуThe Huffman encoding operation may optionally generate a separate codebook

- 18 044215 для каждого типа символа (и извлекать несколько заголовков потока или строить таблицу из нескольких кодов и символов).- 18 044215 for each character type (and extract multiple stream headers or build a table of multiple codes and characters).

Предполагая, что первый символ будет значением данных, операция кодирования Хаффмана декодирует первый код для соответствия символу этого типа. Из согласованного символа операция кодирования может идентифицировать бит переполнения и/или бит выполнения и идентифицировать следующий тип символа. Затем операция кодирования Хаффмана может использовать соответствующую кодовую книгу для этого типа символа для извлечения следующего кода в потоке битов. Процесс переносится таким итеративным способом с использованием текущего декодированного символа для извлечения указания следующего символа и соответствующего изменения кодовых книг.Assuming that the first character will be a data value, the Huffman encoding operation decodes the first code to match a character of that type. From a matched symbol, the encoding operation can identify the overflow bit and/or the execute bit and identify the next symbol type. The Huffman encoding operation can then use the appropriate codebook for that character type to extract the next code in the bitstream. The process carries over in this iterative manner, using the currently decoded symbol to extract the next symbol indication and modify the codebooks accordingly.

Выше в данном документе было описано, как операция декодирования может комбинировать операцию кодирования Хаффмана, предпочтительно операцию канонического кодирования Хаффмана, и операцию кодирования длин серий для воссоздания остаточных данных из закодированного битового потока. Следует понимать, что методы операции кодирования длин серий могут применяться к байтовому потоку, который не был закодирован с использованием операции кодирования Хаффмана. Точно так же операция кодирования Хаффмана может применяться без последующего этапа операции кодирования длин серий.It has been described above in this document how a decoding operation can combine a Huffman encoding operation, preferably a canonical Huffman encoding operation, and a run length encoding operation to reconstruct residual data from the encoded bit stream. It should be understood that run-length encoding techniques may be applied to a byte stream that has not been encoded using a Huffman encoding operation. Similarly, the Huffman encoding operation can be applied without the subsequent run length encoding step.

Ниже описывается пример конкретных этапов реализации декодера. В примере реализации, если поток состоит из более чем одной части, выполняются следующие шаги:An example of specific steps in implementing a decoder is described below. In the example implementation, if a stream consists of more than one part, the following steps are performed:

1. Считывание длин кода из заголовка потока (например, с помощью функции ReadCodeLengths):1. Reading code lengths from the stream header (for example, using the ReadCodeLengths function):

а. установка длин кода для каждого символа;A. setting code lengths for each character;

б. Назначение кодов символам на основе длин кода (например, с помощью функции AssignCodes); и в. генерирование таблицы для поиска подмножеств кодов одинаковой длины. Каждый элемент таблицы записывает первый индекс заданной длины и соответствующий код (firstldx, firstCode).b. Assigning codes to characters based on code lengths (for example, using the AssignCodes function); and c. generating a table to search for subsets of codes of the same length. Each table element records the first index of a given length and the corresponding code (firstldx, firstCode).

2. Декодирование данных RLE:2. Decoding RLE data:

а. Присваивание контекста RLE символу RLC_RESIDUAL_LSB.A. Assigning an RLE context to the RLC_RESIDUAL_LSB symbol.

б. Декодирование текущего кода с поиском корректной длины кода в сгенерированной таблице и индексирование массива кодов с помощью: firstldx -(current_code - firstCode). Это работает, потому что все коды для заданной длины являются последовательными по построению дерева Хаффмана.b. Decoding the current code, searching for the correct code length in the generated table and indexing the array of codes using: firstldx -(current_code - firstCode). This works because all codes for a given length are sequential in the construction of the Huffman tree.

в. Использование конечного автомата RLE для получения следующего контекста (см. фиг. 18). Если поток не пустой, переход к б.V. Using the RLE state machine to obtain the next context (see Fig. 18). If the stream is not empty, go to b.

Декодер длин серии считывает данные, закодированные по длине серии, побайтно. По построению контекст первого байта данных гарантированно будет RLC_RESIDUAL_LSB. Декодер использует конечный автомат, проиллюстрированный на фиг. 18, для определения контекста следующего байта данных. Контекст сообщает декодеру, как интерпретировать текущий байт данных, как описано выше в данном документе.The run length decoder reads run length encoded data one byte at a time. By construction, the context of the first data byte is guaranteed to be RLC_RESIDUAL_LSB. The decoder uses the state machine illustrated in FIG. 18 to determine the context of the next data byte. The context tells the decoder how to interpret the current data byte, as described earlier in this document.

Обратите внимание, что в этом конкретном примере реализации конечный автомат длины серий также используется процессом кодирования и декодирования Хаффмана, чтобы знать, какой код Хаффмана использовать для текущего символа или кодового слова.Note that in this particular implementation example, the run-length state machine is also used by the Huffman encoding and decoding process to know which Huffman code to use for the current symbol or codeword.

Как в кодере, так и в декодере, например, реализованном в потоковом сервере или клиентском устройстве, или в клиентском устройстве, декодирующем данные из хранилища данных, способы и процессы, описанные в данном документе, могут быть воплощены в виде кода (например, программного кода) и/или данных. Кодер и декодер могут быть реализованы аппаратно или программно, что хорошо известно в области сжатия данных. Например, аппаратное ускорение с использованием специально запрограммированного графического процессора (GPU) или специально разработанной программируемой вентильной матрицы (FPGA) может обеспечить определенную эффективность. Для полноты такой код и данные могут храниться на одном или более машиночитаемых носителях, которые могут содержать любое устройство или носитель, который может хранить код и/или данные для использования компьютерной системой. Когда компьютерная система считывает и выполняет код и/или данные, хранящиеся на машиночитаемом носителе, компьютерная система выполняет способы и процессы, воплощенные в виде структур данных и кода, хранящихся на машиночитаемом носителе данных. В некоторых вариантах воплощения один или более этапов описанных здесь способов и процессов могут выполняться процессором (например, процессором компьютерной системы или системы хранения данных).In both an encoder and a decoder, for example, implemented in a streaming server or client device, or in a client device decoding data from a data store, the methods and processes described herein may be embodied in code (e.g., program code ) and/or data. The encoder and decoder may be implemented in hardware or software, which is well known in the field of data compression. For example, hardware acceleration using a specially programmed graphics processing unit (GPU) or a specially designed field programmable gate array (FPGA) can provide some efficiency. For completeness, such code and data may be stored on one or more computer-readable media, which may comprise any device or medium that can store code and/or data for use by a computer system. When a computer system reads and executes code and/or data stored on a computer-readable medium, the computer system executes methods and processes embodied in data structures and code stored on the computer-readable medium. In some embodiments, one or more steps of the methods and processes described herein may be performed by a processor (eg, a processor of a computer system or storage system).

Как правило, любые функциональные возможности, описанные в этом тексте или проиллюстрированные на чертежах, могут быть реализованы с использованием программного обеспечения, встроенного программного обеспечения (например, схемы с фиксированными логическими функциями), программируемого или непрограммируемого оборудования или комбинации этих реализаций. Термины компонент или функция, в контексте данного документа, обычно представляют программное обеспечение, встроенное программное обеспечение, аппаратное обеспечение или их комбинацию. Например, в случае программной реализации термины компонент или функция могут относиться к программному коду, который выполняет определенные задачи при выполнении на устройстве или устройствах обработки. Проиллюстрированное разделение компонентов и функций на отдельные блоки может отражать любую фактическую или концептуальную физическую группировку и распределение такого программногоIn general, any functionality described in this text or illustrated in the drawings may be implemented using software, firmware (eg, fixed logic circuits), programmable or non-programmable hardware, or a combination of these implementations. The terms component or feature, as used herein, typically represent software, firmware, hardware, or a combination thereof. For example, when implemented in software, the terms component or function may refer to software code that performs specific tasks when executed on a processing device or devices. The illustrated division of components and functions into separate blocks may reflect any actual or conceptual physical grouping and distribution of such software

- 19 044215 обеспечения и/или оборудования и задач.- 19 044215 provision and/or equipment and tasks.

В настоящей заявке был описан способ кодирования и декодирования сигнала, в частности видеосигнала и/или сигнала изображения.The present application has described a method for encoding and decoding a signal, in particular a video signal and/or an image signal.

В частности, описан способ кодирования сигнала, включающий прием входного кадра и обработку входного кадра для генерации по меньшей мере одного первого набора остаточных данных, упомянутые остаточные данные позволяют декодеру восстановить исходный кадр из опорного восстановленного кадра.In particular, a method of encoding a signal is described, including receiving an input frame and processing the input frame to generate at least one first set of residual data, said residual data allowing a decoder to reconstruct an original frame from a reference reconstructed frame.

В одном варианте воплощения способ включает получение восстановленного кадра из декодированного кадра, полученного из модуля декодирования, при этом модуль декодирования выполнен с возможностью генерирования упомянутого декодированного кадра путем декодирования первого кодированного кадра, который был закодирован согласно первому способу кодирования. Способ дополнительно содержит понижающую дискретизацию входного кадра для получения кадра с пониженной дискретизацией и передачу указанного кадра с пониженной дискретизацией в модуль кодирования, сконфигурированный для кодирования указанного кадра с пониженной дискретизацией в соответствии с первым способом кодирования для генерирования первого закодированного кадра. Получение восстановленного кадра может дополнительно включать повышающую дискретизацию декодированного кадра для генерирования восстановленного кадра.In one embodiment, the method includes obtaining a reconstructed frame from a decoded frame obtained from a decoding module, wherein the decoding module is configured to generate said decoded frame by decoding a first encoded frame that has been encoded according to the first encoding method. The method further comprises downsampling the input frame to obtain a downsampled frame and transmitting said downsampling frame to an encoding module configured to encode said downsampling frame in accordance with a first encoding method to generate a first encoded frame. Obtaining the reconstructed frame may further include upsampling the decoded frame to generate the reconstructed frame.

В другом варианте воплощения способ включает получение восстановленного кадра из комбинации второго набора остаточных данных и декодированного кадра, полученного из модуля декодирования, при этом модуль декодирования выполнен с возможностью генерирования указанного декодированного кадра путем декодирования первого кодированного кадра, который был закодирован согласно первому способу кодирования. Способ дополнительно включает понижающую дискретизацию входного кадра для получения кадра с пониженной дискретизацией и передачу указанного кадра с пониженной дискретизацией в модуль кодирования, выполненный с возможностью кодирования указанного кадра с пониженной дискретизацией в соответствии с первым способом кодирования, чтобы сгенерировать первый закодированный кадр. Способ дополнительно включает формирование упомянутого второго набора остаточных данных путем взятия разницы между декодированным кадром и кадром с пониженной дискретизацией. Способ дополнительно включает кодирование упомянутого второго набора остаточных данных для создания первого набора закодированных остаточных данных. Кодирование упомянутого второго набора остаточных данных может выполняться согласно второму способу кодирования. Второй способ кодирования включает преобразование второго набора остаточных данных в преобразованный второй набор остаточных данных. Преобразование второго набора остаточных данных включает выбор подмножества второго набора остаточных данных и применение преобразования к упомянутому подмножеству для создания соответствующего подмножества преобразованного второго набора остаточных данных. Один из подмножества преобразованного второго набора остаточных данных может быть получен путем усреднения подмножества второго набора остаточных данных. Получение восстановленного кадра может дополнительно включать повышающую дискретизацию комбинации второго набора остаточных данных и декодированного кадра для генерирования восстановленного кадра.In another embodiment, the method includes obtaining a reconstructed frame from a combination of a second set of residual data and a decoded frame obtained from a decoding module, wherein the decoding module is configured to generate said decoded frame by decoding a first encoded frame that has been encoded according to the first encoding method. The method further includes downsampling the input frame to obtain a downsampled frame and transmitting said downsampling frame to an encoding module configured to encode said downsampling frame in accordance with a first encoding method to generate a first encoded frame. The method further includes generating said second set of residual data by taking the difference between the decoded frame and the downsampled frame. The method further includes encoding said second set of residual data to create a first set of encoded residual data. Encoding of said second set of residual data may be performed according to a second encoding method. The second encoding method involves transforming the second set of residual data into a transformed second set of residual data. Transforming the second residual data set includes selecting a subset of the second residual data set and applying a transformation to said subset to create a corresponding subset of the transformed second residual data set. One of a subset of the transformed second residual data set may be obtained by averaging a subset of the second residual data set. Obtaining the reconstructed frame may further include upsampling the combination of the second set of residual data and the decoded frame to generate the reconstructed frame.

В одном варианте воплощения генерирование по меньшей мере одного набора остаточных данных включает взятие разницы между опорным восстановленным кадром и входным кадром. Способ дополнительно включает кодирование упомянутого первого набора остаточных данных для создания первого набора кодированных остаточных данных. Кодирование упомянутого первого набора остаточных данных может выполняться согласно третьему способу кодирования. Третий способ кодирования включает преобразование первого набора остаточных данных в преобразованный первый набор остаточных данных. Преобразование первого набора остаточных данных включает выбор подмножества первого набора остаточных данных и применение преобразования к упомянутому подмножеству для генерации соответствующего подмножества преобразованного первого набора остаточных данных. Один из подмножеств преобразованного первого набора остаточных данных может быть получен посредством разности между средним значением поднабора входного кадра и соответствующего элемента комбинации второго набора остаточных данных и декодированного кадра.In one embodiment, generating the at least one set of residual data includes taking the difference between a reference reconstructed frame and an input frame. The method further includes encoding said first set of residual data to create a first set of encoded residual data. Encoding of said first set of residual data may be performed according to a third encoding method. The third encoding method involves transforming the first residual data set into a transformed first residual data set. Transforming the first residual data set includes selecting a subset of the first residual data set and applying a transformation to said subset to generate a corresponding subset of the transformed first residual data set. One of the subsets of the transformed first residual data set may be obtained by the difference between the average of the subset of the input frame and the corresponding element of the combination of the second residual data set and the decoded frame.

В частности, описан способ декодирования сигнала, содержащий прием кодированного кадра и по меньшей мере одного набора кодированных остаточных данных. Первый кодированный кадр может быть закодирован с использованием первого способа кодирования.In particular, a method of decoding a signal is described, comprising receiving an encoded frame and at least one set of encoded residual data. The first encoded frame may be encoded using a first encoding method.

По меньшей мере один набор остаточных данных может быть закодирован с использованием второго и/или третьего способа кодирования.The at least one set of residual data may be encoded using a second and/or third encoding method.

Способ дополнительно включает передачу первого кодированного кадра в модуль декодирования, при этом модуль декодирования выполнен с возможностью генерирования декодированного кадра путем декодирования кодированного кадра, который был закодирован согласно первому способу кодирования.The method further includes transmitting the first encoded frame to a decoding module, wherein the decoding module is configured to generate a decoded frame by decoding the encoded frame that has been encoded according to the first encoding method.

Способ может дополнительно включать декодирование по меньшей мере одного набора закодированных остаточных данных согласно соответствующему способу кодирования, используемому для их кодирования.The method may further include decoding the at least one set of encoded residual data according to a corresponding encoding method used to encode it.

В одном варианте воплощения первый набор кодированных остаточных данных декодируется пу- 20 044215 тем применения второго способа декодирования, соответствующего упомянутому второму способу кодирования, для получения первого набора декодированных остаточных данных. Способ дополнительно содержит объединение первого набора остаточных данных с декодированным кадром для получения объединенного кадра. Способ дополнительно содержит повышающую дискретизацию комбинированного кадра, чтобы получить опорный декодированный кадр.In one embodiment, the first set of encoded residual data is decoded by applying a second decoding method corresponding to said second encoding method to obtain a first set of decoded residual data. The method further comprises combining the first set of residual data with the decoded frame to obtain a combined frame. The method further comprises upsampling the combined frame to obtain a reference decoded frame.

Способ дополнительно включает декодирование второго набора кодированных остаточных данных путем применения третьего способа декодирования, соответствующего упомянутому третьему способу кодирования, для получения второго набора декодированных остаточных данных. Способ дополнительно включает объединение второго набора декодированных остаточных данных с опорным декодированным кадром для получения восстановленного кадра.The method further includes decoding the second set of encoded residual data by applying a third decoding method corresponding to said third encoding method to obtain a second set of decoded residual data. The method further includes combining the second set of decoded residual data with the reference decoded frame to obtain a reconstructed frame.

В другом варианте воплощения способ включает повышение дискретизации декодированного кадра, чтобы получить опорный декодированный кадр.In another embodiment, the method includes upsampling a decoded frame to obtain a reference decoded frame.

Способ дополнительно включает декодирование набора закодированных остаточных данных путем применения второго или третьего способа декодирования, соответствующего упомянутому второму или третьему способу кодирования, для получения набора декодированных остаточных данных. Способ дополнительно содержит объединение набора декодированных остаточных данных с опорным декодированным кадром для получения восстановленного кадра.The method further includes decoding the encoded residual data set by applying a second or third decoding method corresponding to the second or third encoding method to obtain a decoded residual data set. The method further comprises combining the set of decoded residual data with a reference decoded frame to obtain a reconstructed frame.

Следующие ниже утверждения описывают предпочтительные или иллюстративные аспекты, описанные и проиллюстрированные в данном документе.The following statements describe preferred or illustrative aspects described and illustrated herein.

Способ кодирования входного видео во множество кодированных потоков, так что кодированные потоки могут быть объединены для восстановления входного видео, способ, включающий:A method of encoding input video into a plurality of coded streams such that the coded streams can be combined to reconstruct the input video, the method comprising:

получение входного видео с полным разрешением;receiving input video at full resolution;

понижение дискретизации входного видео с полным разрешением для создания видео с пониженной дискретизацией;downsampling input full resolution video to create downsampled video;

кодирование видео с пониженной дискретизацией с использованием первого кодека для создания базового кодированного потока;downsampling the video using the first codec to create a base code stream;

восстановление видео из кодированного видео для создания восстановленного видео;recover video from encoded video to create reconstructed video;

сравнение восстановленного видео с исходным видео и создание одного или более дополнительно закодированных потоков на основе сравнения.comparing the recovered video with the original video and creating one or more additionally encoded streams based on the comparison.

Входное видео по сравнению с восстановленным видео может быть видео с пониженной дискретизацией.The input video compared to the reconstructed video may be downsampled video.

Согласно одному из примеров способа, сравнение восстановленного видео с входным видео включает: сравнение восстановленного видео с видео, имеющим пониженную дискретизацию, для создания первого набора остаточных данных, и при этом создание одного или более дополнительных кодированных потоков включает кодирование первого набора остаточных данных для создания кодированного потока первого уровня.According to one example of a method, comparing a reconstructed video to an input video includes: comparing the reconstructed video to a downsampled video to create a first set of residual data, and wherein creating one or more additional encoded streams includes encoding the first set of residual data to create a coded first level flow.

Входное видео по сравнению с восстановленным видео может быть входным видео с полным разрешением, а восстановленное видео может быть подвергнуто повышению дискретизации.The input video versus the reconstructed video may be a full resolution input video, and the reconstructed video may be upsampled.

Согласно одному из примеров способа, сравнение восстановленного видео с входным видео включает: повышение дискретизации восстановленного видео для создания восстановленного видео с повышенной дискретизацией и сравнение восстановленного видео с повышенной дискретизацией и входного видео с полным разрешением для создания второго набора остаточных данных, и при этом создание одного или более дополнительных кодированных потоков включает кодирование второй разности для создания кодированного потока второго уровня.According to one example method, comparing the reconstructed video to an input video includes: upsampling the reconstructed video to create an upsampled reconstructed video, and comparing the reconstructed upsampling video and the input full resolution video to create a second set of residual data, and thereby creating one or more additional codestreams includes encoding a second difference to create a second layer codestream.

Соответственно, в одном из примеров, способ предусматривает генерирование базового кодированного потока, кодированного потока первого уровня и кодированного потока второго уровня согласно описанным выше примерам способов. Каждый из кодированного потока первого уровня и кодированного потока второго уровня может содержать данные расширения, используемые декодером для расширения кодированного базового потока.Accordingly, in one example, the method involves generating a base codestream, a first layer codestream, and a second layer codestream according to the example methods described above. Each of the first layer coded stream and the second layer coded stream may contain extension data used by the decoder to extend the base coded stream.

Остаточные данные могут выступать в качестве различий между двумя видео или кадрами.Residual data can act as differences between two videos or frames.

Кодированные потоки могут сопровождаться одним или более заголовками, которые содержат параметры, указывающие аспекты процесса кодирования для облегчения декодирования. Например, заголовки могут содержать используемый кодек, применяемое преобразование, применяемое квантование и/или другие параметры декодирования.Encoded streams may be accompanied by one or more headers that contain parameters indicating aspects of the encoding process to facilitate decoding. For example, the headers may contain the codec used, the transform applied, the quantization applied, and/or other decoding parameters.

Выше в документе было описано, как этап ранжирования и выбора может применяться к остаточным данным, может выполняться этап вычитания временных коэффициентов, а также может быть адаптировано квантование. Каждый из этих шагов может быть заранее определен и выборочно применен или может применяться на основе анализа входящего видео, видео с пониженной дискретизацией, восстановленного видео, видео с повышенной дискретизацией или любой комбинации вышеперечисленного для улучшения общей производительности кодера. Этапы могут применяться выборочно на основе заранее определенного набора правил или применяться непосредственно на основе анализа или обратной связи производительности.The document has described above how a ranking and selection step can be applied to the residual data, a time coefficient subtraction step can be performed, and quantization can be adapted. Each of these steps can be predefined and selectively applied, or can be applied based on analysis of the incoming video, downsampled video, reconstructed video, upsampled video, or any combination of the above to improve the overall performance of the encoder. Stages can be applied selectively based on a predefined set of rules or applied directly based on analysis or performance feedback.

--

Claims (15)

Один из примеров способа дополнительно включает: отправку базового закодированного потока.One example method further includes: sending an underlying encoded stream. Один из примеров способа дополнительно включает: отправку закодированного потока первого уровня.One example method further includes: sending a first layer encoded stream. Один из примеров способа дополнительно включает: отправку закодированного потока второго уровня.One example method further includes: sending a second layer encoded stream. Согласно дополнительному аспекту настоящего изобретения предоставляется способ декодирования.According to a further aspect of the present invention, a decoding method is provided. Способ декодирования множества закодированных потоков в восстановленное выходное видео, включающий:A method for decoding a plurality of encoded streams into a reconstructed output video, comprising: прием первого базового кодированного потока;receiving a first base code stream; декодирование первого базового кодированного потока согласно первому кодеку для генерации первого выходного видео;decoding a first base code stream according to a first codec to generate a first output video; получение одного или более дополнительно закодированных потоков;receiving one or more additionally encoded streams; декодирование одного или более дополнительно закодированных потоков для генерирования набора остаточных данных и объединение набора остаточных данных с первым видео для создания декодированного видео.decoding one or more additionally encoded streams to generate a set of residual data; and combining the set of residual data with the first video to generate a decoded video. В одном примере способ содержит извлечение множества параметров декодирования из заголовка. Параметры декодирования могут указывать, какие процедурные этапы были включены в процесс кодирования.In one example, the method comprises retrieving a plurality of decoding parameters from a header. Decoding parameters may indicate which procedural steps were included in the encoding process. В одном примере способ может включать прием закодированного потока первого уровня и прием закодированного потока второго уровня. В этом примере этап декодирования одного или более дополнительно закодированных потоков для генерации набора остаточных данных включает:In one example, a method may include receiving a first layer encoded stream and receiving a second layer encoded stream. In this example, the step of decoding one or more additionally encoded streams to generate a residual data set includes: декодирование закодированного потока первого уровня для получения первого набора остаточных данных;decoding the first layer encoded stream to obtain a first set of residual data; при этом этап комбинирования набора остаточных данных с первым видео для генерирования декодированного видео включает:wherein the step of combining the residual data set with the first video to generate a decoded video includes: объединение первого набора остаточных данных с первым выходным видео для генерации второго выходного видео;combining the first set of residual data with the first output video to generate a second output video; повышающая дискретизация второго выходного видео для создания второго выходного видео с повышенной дискретизацией;upsampling the second output video to create a second upsampled output video; декодирование закодированного потока второго уровня для получения второго набора остаточных данных и объединение второго набора остаточных данных со вторым выходным видео для создания восстановленного выходного видео.decoding the second layer encoded stream to obtain a second set of residual data, and combining the second set of residual data with a second output video to produce a reconstructed output video. Способ может дополнительно включать отображение или вывод восстановленного вывода.The method may further include displaying or outputting the reconstructed output. ФОРМУЛА ИЗОБРЕТЕНИЯCLAIM 1. Способ кодирования видеосигнала, включающий: получение входного кадра (100);1. A method for encoding a video signal, including: obtaining an input frame (100); обработку входного кадра (100) для генерирования остаточных данных (110, 119), причем остаточные данные формируют часть расширенного потока и позволяют декодеру восстановить входной кадр на основе опорного восстановленного кадра;processing the input frame (100) to generate residual data (110, 119), wherein the residual data forms part of the extended stream and allows the decoder to reconstruct the input frame based on the reference reconstructed frame; применение операции кодирования длин серий к остаточным данным (110, 119), при этом операция кодирования длин серий включает генерирование байтового потока, закодированного по длинам серий, содержащего набор символов, представляющих ненулевые значения данных остаточных данных, и подсчеты последовательных нулевых значений остаточных данных; и причем способ характеризуется следующими этапами:applying a run-length encoding operation to the residual data (110, 119), wherein the run-length encoding operation includes generating a run-length-encoded byte stream containing a set of characters representing non-zero data values of the residual data, and counts of consecutive zero values of the residual data; and wherein the method is characterized by the following steps: применение канонической операции кодирования Хаффмана к набору символов для генерирования данных, закодированных по Хаффману, содержащих набор кодов, представляющих байтовый поток, закодированный по длине серий;applying a canonical Huffman encoding operation to a set of characters to generate Huffman encoded data comprising a set of codes representing a run-length encoded byte stream; сравнение размера данных по меньшей мере части байтового потока, закодированного по длине серий, с размером данных по меньшей мере соответствующей части данных, закодированных по Хаффману; и вывод байтового потока, закодированного по длине серий, или данных, закодированных по Хаффману, в выходной битовый поток (102, 103) на основе того, какой из них имеет меньший размер данных.comparing the data size of at least a run length encoded portion of the byte stream with the data size of at least a corresponding portion of the Huffman encoded data; and outputting the run length encoded byte stream or the Huffman encoded data to the output bit stream (102, 103) based on which one has the smaller data size. 2. Способ по п.1, в котором операция кодирования длин серий включает: кодирование ненулевых значений данных остаточных данных по меньшей мере в первый тип символа и кодирование подсчетов последовательных нулевых значений во второй тип символа, так что остаточные данные кодируются как последовательность символов разных типов.2. The method of claim 1, wherein the operation of encoding run lengths includes: encoding non-zero data values of the residual data into at least a first symbol type and encoding counts of consecutive zero values into a second symbol type such that the residual data is encoded as a sequence of symbols of different types. . 3. Способ по п.1 или п.2, в котором операция кодирования длин серий включает: кодирование значений данных остаточных данных в первый тип символа и третий тип символа, причем первый и третий типы символа каждый содержит часть значения данных, так что части могут быть объединены в декодере для восстановления значений данных.3. The method of claim 1 or claim 2, wherein the run length encoding operation comprises: encoding the data values of the residual data into a first symbol type and a third symbol type, wherein the first and third symbol types each contain a portion of the data value such that the portions may be combined in the decoder to reconstruct the data values. 4. Способ по п.3, в котором операция кодирования длин серий включает: сравнение размера каждого значения данных остаточных данных, подлежащих кодированию, с пороговым значением и кодирова-4. The method according to claim 3, wherein the run length encoding operation includes: comparing the size of each residual data value to be encoded with a threshold value and encoding - 22 044215 ние каждого значения данных в первый тип символа, если размер ниже порогового значения, и кодирование части каждого значения данных в первый тип символа и части каждого значения данных в третий тип символа, если размер выше порогового значения.- 22 044215 encoding each data value into a first character type if the size is below the threshold, and encoding part of each data value into the first character type and part of each data value into a third character type if the size is above the threshold. 5. Способ по п.4, который дополнительно включает: если размер превышает пороговое значение, установку флага в символе первого типа символа, указывающего на часть представленного значения данных, кодируют в дополнительный символ третьего типа символа.5. The method of claim 4, further comprising: if the size exceeds a threshold value, setting a flag in the symbol of the first symbol type indicating a portion of the represented data value is encoded into an additional symbol of the third symbol type. 6. Способ по любому из пп.2-5, который дополнительно включает: вставку флага в каждый символ, указывающий тип символа, кодируемого следующим в байтовом потоке, закодированном по длине серий.6. The method according to any one of claims 2 to 5, which further includes: inserting a flag into each character indicating the type of character encoded next in the run-length encoded byte stream. 7. Способ по любому из предшествующих пунктов, который дополнительно включает: добавление флага к метаданным конфигурации, сопровождающим выходной битовый поток, указывающего, представляет ли битовый поток байтовый поток, закодированный по длине серий, или данные, закодированные по Хаффману.7. The method of any one of the preceding claims, further comprising: adding a flag to the configuration metadata accompanying the output bitstream indicating whether the bitstream represents a run-length encoded byte stream or Huffman encoded data. 8. Способ по любому из предшествующих пунктов, в котором операция кодирования Хаффмана включает: формирование отдельной таблицы частот для символов первого типа символа и символов второго типа символа.8. The method as claimed in any one of the preceding claims, wherein the Huffman encoding operation comprises: generating a separate frequency table for symbols of the first symbol type and symbols of the second symbol type. 9. Способ по любому предшествующих пунктов, который дополнительно включает: генерирование заголовка потока, содержащего указание множества длин кодов, так что декодер может выводить длины кодов и соответствующие символы для операции канонического декодирования Хаффмана.9. The method of any one of the preceding claims, further comprising: generating a stream header comprising an indication of a plurality of code lengths such that the decoder can output the code lengths and corresponding symbols for a canonical Huffman decoding operation. 10. Способ по п.9, в котором заголовок потока является одним из следующего: первым типом заголовка потока, содержащим указание символа, связанного с соответствующей длиной кода из множества длин кода.10. The method of claim 9, wherein the stream header is one of the following: a first type of stream header comprising an indication of a character associated with a corresponding code length of the plurality of code lengths. 11. Способ по п.9, в котором заголовок потока является вторым типом заголовка потока, причем для второго типа заголовка потока способ дополнительно включает упорядочивание множества длин кода в заголовке потока на основе заранее определенного порядка символов, соответствующих каждой из длин кода, так что длины кода могут быть связаны с соответствующим символом в декодере.11. The method of claim 9, wherein the stream header is a second stream header type, wherein for the second stream header type, the method further includes ordering a plurality of code lengths in the stream header based on a predetermined order of symbols corresponding to each of the code lengths such that the lengths codes can be associated with the corresponding symbol in the decoder. 12. Способ по п.11, в котором второй тип заголовка потока дополнительно содержит флаг, указывающий, что символ в заранее определенном порядке возможного набора символов не существует в наборе символов в байтовом потоке, закодированном по длине серий.12. The method of claim 11, wherein the second stream header type further comprises a flag indicating that a character in the predetermined order of a possible character set does not exist in the character set in the run-length encoded byte stream. 13. Способ по любому из пп.10-12, который дополнительно включает: сравнение количества уникальных кодов в данных, закодированных по Хаффману, с пороговым значением и создание первого типа заголовка потока или второго типа заголовка потока на основе сравнения.13. The method as claimed in any one of claims 10 to 12, further comprising: comparing the number of unique codes in the Huffman-encoded data with a threshold value and generating a first stream header type or a second stream header type based on the comparison. 14. Способ декодирования видеосигнала, включающий:14. A method for decoding a video signal, including: получение закодированного битового потока (102, 103);receiving encoded bitstream (102, 103); декодирование закодированного битового потока (102, 103) для генерирования остаточных данных для расширенного потока и восстановление исходного кадра видеосигнала из остаточных данных и опорного восстановленного кадра, причем этап декодирования закодированного битового потока (102, 103) включает:decoding the encoded bit stream (102, 103) to generate residual data for the extended stream; and recovering the original video frame from the residual data and a reference reconstructed frame, the step of decoding the encoded bit stream (102, 103) comprising: применение операции кодирования длин серий для генерирования остаточных данных, при этом операция кодирования длин серий включает:applying a run length encoding operation to generate residual data, wherein the run length encoding operation includes: идентификацию набора символов, представляющих ненулевые значения данных остаточных данных, и набора символов, представляющих подсчеты последовательных нулевых значений остаточных данных;identifying a set of characters representing non-zero values of the residual data data and a set of characters representing counts of successive zero values of the residual data; анализ набора символов для получения ненулевых значений данных остаточных данных и подсчета последовательных нулевых значений и генерирование остаточных данных из ненулевых значений данных и подсчетов последовательных нулевых значений, причем способ характеризуется тем, что этап декодирования закодированного битового потока включает:analyzing a set of symbols to obtain non-zero data values of the residual data and counting consecutive zero values, and generating residual data from the non-zero data values and counts of consecutive zero values, the method being characterized in that the step of decoding the encoded bitstream includes: извлечение флага из метаданных конфигурации, сопровождающих закодированный битовый поток (102. 103), указывающего, содержит ли закодированный битовый поток байтовый поток, закодированный по длине серии, или данные, закодированные по Хаффману; и выборочное применение канонической операции кодирования Хаффмана к закодированному битовому потоку (102, 103) на основе флага для генерирования набора символов, представляющих ненулевые значения данных остаточных данных, и набора символов, представляющих подсчеты последовательных нулевых значений остаточных данных, при этом этап применения операции кодирования длин серий для генерирования остаточных данных выполняют над наборами символов.retrieving a flag from the configuration metadata accompanying the encoded bitstream (102, 103) indicating whether the encoded bitstream contains a run length encoded byte stream or Huffman encoded data; and selectively applying a canonical Huffman encoding operation to the encoded bitstream (102, 103) based on the flag to generate a set of symbols representing non-zero values of the residual data data and a set of symbols representing counts of successive zero values of the residual data, wherein the step of applying the length encoding operation series to generate residual data is performed on character sets. 15. Способ по п.14, в котором операция кодирования длин серий включает:15. The method according to claim 14, in which the operation of encoding run lengths includes: идентификацию символов первого типа символа, представляющих ненулевые значения данных остаточных данных;identifying symbols of a first symbol type representing non-zero values of the residual data data; идентификацию символов второго типа символа, представляющих подсчеты последовательных нулевых значений, так что последовательность символов разных типов декодируется для генерации оста-identification of symbols of a second symbol type representing counts of consecutive zero values, such that the sequence of symbols of different types is decoded to generate the remaining
EA202190284 2018-08-03 2019-08-01 ENTROPY CODING OF SIGNAL Amplification EA044215B1 (en)

Applications Claiming Priority (7)

Application Number Priority Date Filing Date Title
GB1812709.2 2018-08-03
GB1812710.0 2018-08-03
GB1812708.4 2018-08-03
GB1903844.7 2019-03-20
GB1904014.6 2019-03-23
GB1904492.4 2019-03-29
GB1905325.5 2019-04-15

Publications (1)

Publication Number Publication Date
EA044215B1 true EA044215B1 (en) 2023-07-31

Family

ID=

Similar Documents

Publication Publication Date Title
AU2019315758B2 (en) Entropy coding for signal enhancement coding
RU2417518C2 (en) Efficient coding and decoding conversion units
US11115663B2 (en) Codebook generation for cloud-based video applications
US6917310B2 (en) Video decoder and encoder transcoder to and from re-orderable format
KR101737294B1 (en) Methods and devices for source-coding and decoding of data involving symbol compression
US8942502B2 (en) Parallelization of variable length decoding
EP2362657B1 (en) Parallel entropy coding and decoding methods and devices
US9191668B1 (en) Division of entropy coding in codecs
US20060067582A1 (en) Progressive JPEG decoding system
US20070285285A1 (en) System and method for efficient compression of digital data
JP5733935B2 (en) Digital content encoder, decoder, search device, encoding method, search method, and storage device
EP2561680A1 (en) Methods and devices for reordered parallel entropy coding and decoding
CN103918272A (en) Data encoding and decoding
US10455244B2 (en) Method and device for entropy encoding or entropy decoding video signal for high-capacity parallel processing
JP2009152990A (en) Image encoding device and image decoding device
EP1333679B1 (en) Data compression
JP2022539311A (en) Separate CABAC for subsections of pictures
EP1734738A2 (en) Image encoding and decoding method and apparatus, and computer-readable recording medium storing program for executing the method
EA044215B1 (en) ENTROPY CODING OF SIGNAL Amplification
Aziz et al. Implementation of H. 264/MPEG-4 AVC for compound image compression using histogram based block classification scheme
JP2022548685A (en) Encoding and decoding image data
JP2013165506A (en) Image encoder
JPWO2012111315A1 (en) Stream generation device, stream generation method, stream processing device, and stream processing method
Moreira et al. Addressing Image Compression Techniques on current Internet Technologies