МНОГОУРОВНЕВАЯ СТРУКТУРА КОДИРОВАННОГО БИТОВОГО ПОТОКА
MULTI-LEVEL STRUCTURE OF CODED BITSTREAM

Настоящая заявка испрашивает приоритет на основании предварительной заявки на патент US № 60/979734, поданной 12 октября 2007 г., содержание которой в полном объеме включено в данный документ посредством ссылки.
Область техники, к которой относится изобретение
Настоящее раскрытие относится к цифровому кодированию видеоданных и, более конкретно, к кодированию информации заголовка блока видеопоследовательности.
Уровень техники
Функциональные возможности цифрового видео могут быть использованы в обширном наборе устройств, включая цифровое телевидение, системы цифрового прямого вещания, устройства беспроводной связи, системы беспроводного вещания, персональный цифровой секретарь (PDA), портативный переносной компьютер или настольный компьютер, цифровые камеры, цифровые записывающие устройства, устройства для видеоигр, приставки для видеоигр, сотовые и спутниковые радиотелефоны и другие подобные устройства. Для более эффективной передачи и приема видеоданных цифровые видеоустройства используют технологии сжатия видеоданных, такие как MPEG-2, MPEG-4 или H264/MPEG-4, Part 10, обычно называемые расширенным кодированием видеоданных (AVC). Технологии сжатия видеоданных выполняют пространственное и временное предсказание для снижения или исключения избыточности, присущей видеопоследовательностям.
При кодировании видео, сжатие видеоданных зачастую включает в себя пространственное предсказание, оценку движения и компенсацию движения. Внутрикадровое кодирование основывается на пространственном предсказании для снижения или исключения пространственной избыточности между видеоблоками в пределах данного видеокадра. Межкадровое кодирование основывается на временном предсказании для снижения или исключения временной избыточности между видеоблоками последовательных видеокадров видеопоследовательности. В случае с межкадровым кодированием видеокодер выполняет оценку движения для отслеживания движения соответствующих видеоблоков у двух или более смежных кадров. Оценка движения формирует вектора движения, которые указывают смещение видеоблоков относительно соответствующих видеоблоков предсказания в одном или более опорных кадрах. Компенсация движения использует вектора движения для размещения и формирования видеоблоков предсказания из опорного кадра. После компенсации движения формируется блок остаточной информации посредством вычитания видеоблока предсказания из исходного видеоблока, который должен быть кодирован. Таким образом, остаточная информация определяет количество различий между видеоблоком предсказания и кодируемым видеоблоком для того, чтобы, после идентификации видеоблока предсказания и остаточной информации, кодированный видеоблок мог быть восстановлен в декодере.
Видеокодер может применять процессы преобразования, квантования и энтропийного кодирования для того, чтобы дополнительно снизить скорость передачи битов, связанную с передачей блоков остаточной информации. Энтропийное кодирование обычно подразумевает применение арифметических кодов или кодов с переменной длиной (VLC) для того, чтобы дополнительно сжать остаточные коэффициенты, полученные с помощью операций преобразования и квантования. Примеры включают в себя контекстное адаптивное бинарное арифметическое кодирование (CABAC) и контекстное адаптивное кодирование с переменной длиной кодового слова (CAVLC), которые могут быть использованы в качестве альтернативных режимов энтропийного кодирования в некоторых кодерах. Видеодекодер выполняет обратные операции для восстановления кодированных видеоданных с использованием информации движения и остаточной информации для каждого из блоков.
Раскрытие изобретения
Настоящее раскрытие описывает способы для формирования уровневой структуры кодированного битового потока, которая использует корреляцию в информации заголовка между видеоблоками кодируемого единичного элемента видеоданных. Видеокодер, выполненный с возможностью функционирования в соответствии с способами настоящего раскрытия, отделяет информацию заголовка видеоблоков слоя (или другого кодируемого единичного элемента данных) от остальной информации видеоблоков упомянутого слоя. Информация заголовка каждого из блоков может включать в себя множество синтаксических элементов заголовка, таких как синтаксический элемент типа блока, синтаксический элемент режима предсказания, синтаксический элемент размера раздела, синтаксический элемент вектора движения, синтаксический элемент шаблона кодированного блока или синтаксический элемент другого типа.
Видеокодер может скомпоновать синтаксические элементы заголовка блока в группы на основе типа синтаксического элемента. Например, видеокодер может группировать вместе синтаксические элементы типа блока каждого из блоков, группировать вместе синтаксические элементы режима предсказания каждого из блоков и так далее. Видеокодер выполняет кодирование длин серий в отношении групп синтаксических элементов для лучшего использования корреляции информации заголовка между блоками слоя. Например, в случае, когда имеется некоторое количества блоков слоя с одинаковым синтаксическим элементом типа блока, видеокодер может кодировать тип блока для блоков слоя в качестве серии из N элементов, где N представляет собой количество последовательных блоков в слое, имеющих тот же самый тип блока.
После кодирования каждой из групп синтаксических элементов заголовка видеокодер может кодировать остаточную информацию для каждого из блоков упомянутого слоя. Кодированная информация заголовка для блоков упомянутого слоя может рассматриваться как один «уровень» битового потока, а остаточная информация может рассматриваться как другой «уровень» битового потока. Другими словами, видеокодер может кодировать первую последовательность битов, которая соответствует кодированной информации заголовка блоков упомянутого слоя, и кодировать вторую последовательность битов, которая соответствует кодированной остаточной информации блоков упомянутого слоя.
В одном аспекте, способ кодирования видеоданных содержит этап, на котором кодируют информацию заголовка множества видеоблоков кодируемого единичного элемента видеоданных в первой последовательности битов кодированного битового потока и этап, на котором кодируют остаточную информацию множества видеоблоков во второй последовательности битов кодированного битового потока.
В другом аспекте, устройство кодирования содержит первый модуль кодирования, который кодирует информацию заголовка множества видеоблоков кодируемого единичного элемента видеоданных в первой последовательности битов кодированного битового потока и второй модуль кодирования, который кодирует остаточную информацию множества видеоблоков во второй последовательности битов кодированного битового потока.
В другом аспекте, считываемый компьютером носитель данных, содержащий команды для побуждения процессора кодировать информацию заголовка множества видеоблоков кодируемого единичного элемента видеоданных в первой последовательности битов кодированного битового потока, а также кодировать остаточную информацию множества видеоблоков во второй последовательности битов кодированного битового потока.
В другом аспекте, устройство кодирования содержит средство для кодирования информации заголовка множества видеоблоков кодируемого единичного элемента видеоданных в первой последовательности битов кодированного битового потока и средство для кодирования остаточной информации множества видеоблоков во второй последовательности битов кодированного битового потока.
В другом аспекте, способ декодирования видеоданных содержит этап, на котором декодируют первую последовательность битов кодированного битового потока для получения информации заголовка множества видеоблоков кодированного единичного элемента данных, этап, на котором декодируют вторую последовательность битов кодированного битового потока для получения остаточной информации множества видеоблоков, и этап, на котором устанавливают связь остаточной информации каждого из множества видеоблоков с соответствующей информацией заголовка.
В другом аспекте, устройство декодирования содержит, по меньшей мере, один модуль декодера, который декодирует первую последовательность битов кодированного битового потока для получения информации заголовка множества видеоблоков кодированного единичного элемента данных, и декодирует вторую последовательность битов кодированного битового потока для получения остаточной информации множества видеоблоков, а также модуль установления связи заголовка, который устанавливает связь остаточной информации каждого из множества видеоблоков с соответствующей информацией заголовка.
В другом аспекте, считываемый компьютером носитель данных содержит команды для побуждения, по меньшей мере, одного процессора декодировать первую последовательность битов кодированного битового потока для получения информации заголовка множества видеоблоков кодированного единичного элемента данных, декодировать вторую последовательность битов кодированного битового потока для получения остаточной информации множества видеоблоков, и устанавливать связь остаточной информации каждого из множества видеоблоков с соответствующей информацией заголовка.
В другом аспекте, устройство декодирования содержит средство для декодирования первой последовательности битов кодированного битового потока для получения информации заголовка множества видеоблоков кодированного единичного элемента данных, средство для декодирования второй последовательности битов кодированного битового потока для получения остаточной информации множества видеоблоков и средство для установления связи остаточной информации каждого из множества видеоблоков с соответствующей информацией заголовка.
Способы, описанные в настоящем раскрытии, могут быть осуществлены в аппаратных средствах, программном обеспечении, встроенном программном обеспечении или любой их комбинации. В случае осуществления в программном обеспечении, программное обеспечение может исполняться в процессоре, который может упоминаться как один или более процессоров, например, таких как микропроцессор, специализированная интегральная схема (ASIC), программируемая пользователем вентильная матрица (FPGA), или цифровой сигнальный процессор (DSP), или другая эквивалентная интегральная или дискретная логическая схема. Программное обеспечение, содержащее команды для исполнения упомянутых способов, могут быть изначально сохранено на считываемом компьютером носителе данных, загружено и выполнено процессором.
Соответственно, настоящее раскрытие также рассматривает считываемый компьютером носитель данных, содержащий команды для побуждения процессора выполнять любую из множества способов, описанных в настоящем раскрытии. В некоторых случаях, считываемый компьютером носитель данных может составлять часть компьютерного программного продукта, который может продаваться производителям и/или использоваться в устройстве. Компьютерный программный продукт может включать в себя считываемый компьютером носитель данных, а в некоторых случаях может также включать в себя упаковочные материалы.
Подробности одного или более аспектов настоящего раскрытия представлены далее на сопроводительных чертежах и в описании. Другие признаки, объекты и преимущества способов, описанных в настоящем раскрытии, станут очевидными из описания, чертежей и формулы изобретения.
Краткое описание чертежей
Фиг. 1 - блок-схема, иллюстрирующая систему кодирования и декодирования видеоданных.
Фиг. 2 - блок-схема, иллюстрирующая пример видеокодера.
Фиг. 3 - блок-схема блока энтропийного кодирования, выполненного с возможностью формирования уровневого кодированного битового потока в соответствии с аспектом настоящего раскрытия.
Фиг. 4 - блок-схема, иллюстрирующая пример видеодекодера.
Фиг. 5 - блок-схема, иллюстрирующая пример блока энтропийного декодирования, выполненного с возможностью декодирования уровневого кодированного битового потока в соответствии с аспектом настоящего раскрытия.
Фиг. 6 - блок-схема, иллюстрирующая другой примерный блок энтропийного декодирования, выполненный с возможностью декодирования перемеженного уровневого кодированного битового потока в соответствии с аспектом настоящего раскрытия.
Фиг. 7А-7С - иллюстрируют примерные структуры кодированного битового потока.
Фиг. 8 - блок-схема последовательности операций, иллюстрирующая примерную работу блока энтропийного кодирования, формирующего уровневый кодированный битовый поток.
Фиг. 9 - блок-схема последовательности операций, иллюстрирующая примерную работу блока энтропийного декодирования, декодирующего уровневый кодированный битовый поток.
Фиг. 10 - блок-схема последовательности операций, иллюстрирующая примерную работу блока энтропийного декодирования, декодирующего перемеженный уровневый кодированный битовый поток.
Осуществление изобретения
Настоящее раскрытие описывает способы для кодирования видеоданных. Видеоданные могут представлять собой серию видеокадров видеопоследовательности. Видеокодер может разделять каждый из видеокадров на множество блоков пикселей или блоков коэффициентов преобразования (называемых далее «блоками») для того, чтобы кодировать видеоданные. Затем видеокодер кодирует каждый из блоков упомянутой серии видеокадров и выдает кодированный битовый поток. Например, для каждого блока видеокодер может кодировать информацию заголовка блока и остаточную информацию блока. Информация заголовка каждого блока может включать в себя некоторое количество синтаксических элементов, которые идентифицируют конкретные характеристики блока, такие как тип блока, режим предсказания, размер раздела, вектор движения, шаблон кодированного блока, изменение параметра квантования относительно предыдущего блока (дельта-QP), размер преобразования и другие. Информация заголовка используется декодером для формирования блока предсказания. Остаточная информация каждого блока определяет количество различий между блоком и одним или более блоками предсказания для того, чтобы, после идентификации информации заголовка, используемой для формирования блока предсказания, и остаточной информации, кодированный видеоблок мог быть восстановлен в декодере.
Традиционный видеокодер кодирует видеоблоки в режиме «блок за блоком». Другими словами, традиционный видеокодер кодирует информацию заголовка первого блока, за которой следует соответствующая остаточная информация первого блока, и затем кодирует информацию заголовка второго блока, за которой следует соответствующая остаточная информация второго блока. Традиционный видеокодер продолжает кодировать видеоблоки в режиме «блок за блоком» до тех пор, пока не будут кодированы блоки кодируемого единичного элемента данных (например, слоя или кадра). Таким образом, традиционный видеокодер может рассматриваться как видеокодер, формирующий структуру кодированного битового потока в режиме «блок за блоком».
Информация заголовка для некоторого количества блоков кодируемого единичного элемента данных может быть пространственно коррелированна. Другими словами, некоторое количество блоков слоя (или другого кодируемого единичного элемента данных) может включать в себя аналогичную информацию заголовка блока, то есть один или более одинаковых синтаксических элементов заголовка. Например, некоторое количество блоков упомянутого слоя может иметь одинаковый тип блока, одинаковый дельта-QP и так далее. Используя преимущество такой корреляции, энторпийным кодером может быть достигнута большая эффективность кодирования. Если энтропийный кодер использует арифметическое кодирование, такая корреляция обычно используется посредством формирования контекстов арифметического кодирования, основанных на значениях одинаковых синтаксических элементов соседних блоков. Если энтропийный кодер использует кодирование с переменной длиной (кодового слова) (VLC), такая корреляция обычно используется посредством предсказания значения текущего синтаксического элемента относительно значений того же самого синтаксического элемента соседних блоков. Поскольку традиционный видеокодер кодирует видеоблоки упомянутого слоя в режиме «блок за блоком», то традиционный видеокодер может не иметь возможности использовать полностью корреляцию информации заголовка между блоками упомянутого слоя. Это, в частности, справедливо для случая, когда энтропийный кодер использует кодирование с переменной длиной. Используя синтаксический элемент заголовка для типа блока, в качестве примера, даже если некоторое количество последовательных блоков имеет одинаковый тип блока, традиционный видеокодер, работающий в режиме VLC, может посылать 1-битный флаг для каждого блока для указания того, что тип блока является тем же самым, что и предыдущего блока. Таким образом, традиционный видеокодер, использующий VLC, может кодировать, по меньшей мере, один бит на один блок и на один синтаксический элемент для использования корреляции информации заголовка между блоками упомянутого слоя.
Настоящее раскрытие описывает способы для формирования уровневой структуры кодированного битового потока. Видеокодер, выполненный с возможностью формирования уровневой структуры кодированного битового потока, может быть выполнен с возможностью группирования синтаксических элементов заголовка для некоторого количества блоков некоторого слоя (или другого кодируемого единичного элемента данных) и кодирования сгруппированных вместе синтаксических элементов заголовка. Видеокодер может осуществлять кодирование длин серий в отношении сгруппированных синтаксических элементов для лучшего использования корреляции информации заголовка между блоками слоя, то есть через границы блоков. Например, в случае, когда имеется некоторое количество блоков слоя с одинаковым типом блоков, видеокодер может кодировать тип блока для блоков упомянутого слоя в качестве серии из N элементов, где N представляет собой количество последовательных блоков в слое, имеющих одинаковый тип блока, вместо кодирования одного бита на блок, как это осуществляется традиционным видеокодером.
Способы согласно настоящему описанию могут привести к снижению количества битов, используемых для кодирования информации заголовка блока для множества блоков, например, по сравнению с традиционными способами VLC. В вышеописанном примере, видеокодер, использующий VLC, может потратить менее одного бита на блок для кодирования типа блока, в то время как традиционный видеокодер, использующий VLC, потратил бы, по меньшей мере, один бит на блок для кодирования одинаковой информации типа блока. Видеокодер, который использует арифметическое кодирование, также может использовать уровневую структуру кодированного битового потока, описанную в настоящем раскрытии. Использование перемеженного кодированного битового потока как для VLC, так и для арифметического кодирования может обеспечить более универсальную структуру битового потока для VLC-кодеров и арифметических кодеров. Дополнительно, уровневая структура битового потока обеспечивает возможность неодинаковой защиты от ошибок на уровне заголовка и на остаточном уровне. Например, уровень заголовка, который переносит более важную информацию, может быть обеспечен лучшей защитой от ошибок, чем остаточный уровень.
Фиг. 1 представляет собой блок-схему, иллюстрирующую систему 10 кодирования и декодирования видеоданных. Как показано на фиг. 1, система 10 включает в себя устройство-источник 12, которое передает кодированные видеоданные приемному устройству 14 посредством канала 16 связи. Канал 16 связи может содержать любую беспроводную или проводную среду передачи данных, например радиочастотный (RF) спектр, или одну или более физических линий передачи данных, или любую комбинацию беспроводной и проводной сред передачи данных. Канал 16 связи может образовывать часть сети пакетной передачи данных, такой как локальная сеть, широкомасштабная сеть или глобальная сеть, такая как Интернет. Канал 16 связи в целом представляет любую подходящую среду связи, или набор различных сред связи, для передачи кодированных видеоданных от устройства-источника 12 к приемному устройству 14.
Устройство-источник 12 формирует кодированные видеоданные для передачи приемному устройству 14. Устройство-источник 12 может включать в себя источник 18 видео, видеокодер 20 и передатчик 22. Источник 18 видео устройства-источника 12 может включать в себя устройство захвата видеоизображения, такое как видеокамера, видеоархив, содержащий ранее захваченные видеоизображения, или видеоданные, предоставляемые поставщиком видеоконтента. В качестве дополнительной альтернативы, источник 18 видео может формировать данные на основе компьютерной графики в качестве источника видеоданных или комбинацию видео в реальном масштабе времени и видео, сформированного с помощью компьютера. В некоторых случаях, если источник 18 видео является камерой, то устройство-источник 12 может образовывать так называемый камерофон или видеофон. В каждом случае, захваченное, предварительно захваченное или сформированное с помощью компьютера видеоизображение может быть кодировано видеокодером 20 для передачи от устройства-источника 12 к приемному устройству 14 посредством передатчика 22 и канала 16 связи.
Видеокодер 20 принимает видеоданные от источника 18 видео. Видеоданные, принятые от источника 18 видео, могут быть серией видеокадров. Видеокодер 20 работает над блоком пикселей (или блоком коэффициентов преобразования) в пределах отдельных видеокадров для кодирования видеоданных. Видеоблоки могут иметь фиксированные или переменные размеры и могут отличаться по размеру в соответствии с заданным стандартом кодирования. В некоторых случаях каждый видеокадр представляет собой кодируемый единичный элемент данных, в то время как в других случаях каждый видеокадр может быть разделен на серии или слои, которые образуют кодируемый единичный элемент массива данных. Другими словами, каждый слой может представлять собой кодируемый единичный элемент данных, который включает в себя только часть видеоблоков кадра. Видеокадр может быть разделен на слои любым способом из множества таковых. Например, видеокадр может быть разделен на слои на основе пространственного размещения блоков в пределах кадра, причем первый слой соответствует блокам в верхней трети видеокадра, второй слой соответствует блокам в средней трети видеокадра, а третий слой соответствует блокам в нижней трети видеокадра. В качестве другого примера, видеокадр может быть разбит на два слоя, где каждый другой блок принадлежит той же самой слоя. Такие группировки данных часто называют «шахматными» частями массива данных. В еще одном примере, слой может соответствовать блокам в пределах местоположения видеокадра, она идентифицируется как объект в пределах видеокадра. Также могут использоваться другие способы для разделения видеокадра на слои.
Каждый видеоблок, часто называемый макроблоком (MB), может быть скомпонован в подблоки. В качестве примера, стандарт Н.264 согласно международному союзу электросвязи - сектору телекоммуникаций (ITU-T) поддерживает внутриблочное предсказание в различных размерах блока, таких как 16×16, 8×8, 4×4 для компонентов яркости, и 8×8 для компонентов цветности, а также внутриблочное предсказание в различных размерах блока, таких как 16×16, 16×8, 8×16, 8×8, 8×4, 4×8 и 4×4 для компонентов яркости и в соответствующих масштабированных размерах для компонентов цветности. Видеоблоки меньших размеров могут обеспечить лучшее разрешение и могут быть использованы для тех местоположений видеокадра, которые имеют более высокие уровни детализации. В общем, макроблоки (MB) и различные подблоки могут рассматриваться в качестве видеоблоков. Таким образом, MB могут рассматриваться в качестве видеоблоков, и, в случае деления на разделы или подразделы, MB могут сами рассматриваться в качестве определяющих наборы видеоблоков. В дополнение, слой может рассматриваться в качестве набора видеоблоков, например, набора MB и/или подблоков. Как это уже было отмечено, каждый слой может представлять собой независимо декодируемый единичный элемент данных видеокадра. Если видеокадр представляет собой кодируемый единичный элемент данных (а не слой), то видеокадр также может рассматриваться в качестве набора видеоблоков, например набора MB и/или подблоков.
Вслед за внутриблочным или межблочным предсказанием видеоблоков, видеокодер 20 может выполнить некоторое количество операций над видеоблоками. Как это будет далее описано более подробно со ссылкой на фиг. 2, эти дополнительные операции могут включать в себя операции преобразования (например, преобразование с целыми числами для размеров 4×4 или 8×8 согласно H.264/AVC или дискретное косинусное преобразование (DCT)), операции квантования и операции энтропийного кодирования (например, кодирование с переменной длиной (кодового слова) (VLC), бинарное арифметическое кодирование или другая методика энтропийного кодирования).
Видеокодер 20 кодирует множество видеоблоков кодируемого единичного элемента данных (например, слой или кадр) в соответствии со способами, описанными в настоящем раскрытии, для формирования уровневой структуры кодированного битового потока. Видеокодер 20 отделяет информацию заголовка видеоблоков слоя, сформированной видеокодером 20, от остаточной информации (например, остаточных коэффициентов) видеоблоков слоя, сформированной видеокодером 20. Видеокодер 20 может скомпоновать синтаксические элементы заголовка для блоков в группы. В некоторых случаях, каждая из групп включает в себя последовательное расположение определенных синтаксических элементов блока. Например, группа синтаксических элементов типа блока может включать в себя синтаксический элемент типа блока для первого блока слоя, синтаксический элемент типа блока для второго блока слоя, синтаксический элемент типа блока для третьего блока слоя и так далее в таком порядке. Видеокодер 20 также может формировать аналогичные группы для других синтаксических элементов заголовка, таких как режим предсказания, размер раздела, вектор движения, шаблон кодированного блока, дельта-QP, размер преобразования и других.
Видеокодер 20 кодирует каждую из групп синтаксических элементов заголовка с использованием кодирования длин серий. Кодирование длин серий для групп синтаксических элементов заголовка позволяет видеокодеру 20 использовать корреляцию синтаксических элементов заголовка между блоками слоя. Например, если первые три блока упомянутого слоя имеют одинаковый синтаксический элемент типа блока, то видеокодер 20 может кодировать серию длиной в три элемента для представления типа блока для трех блоков вместо кодирования типа блока или 1-битного флага раздельно в отдельных заголовках каждого блока. В результате, видеокодер 20 может более эффективно кодировать информацию заголовка блока для множества блоков. В некоторых случаях, видеокодер 20 может использовать VLC для кодирования синтаксических элементов заголовка с эффективностью кодирования аналогичной эффективности бинарного арифметического кодирования.
После кодирования каждой из групп синтаксических элементов заголовка, видеокодер 20 кодирует остаточную информацию для каждого из блоков упомянутого слоя. Кодированная информация заголовка для блоков слоя может рассматриваться в качестве одного «уровня» битового потока, а остаточная информация может рассматриваться в качестве другого «уровня» битового потока. Другими словами, видеокодер 20 может кодировать первую последовательность битов, которая соответствует кодированной информации заголовка для блоков слоя, называемую в данном документе «уровнем заголовка», и кодировать вторую последовательность битов, которая соответствует кодированной остаточной информации, называемой в данном документе «остаточным уровнем». Таким образом, используемые в данном документе термины «уровень заголовка» и «остаточный уровень» относятся к различным последовательностям битов в пределах кодированного уровневого битового потока.
В некоторых случаях, видеокодер 20 может кодировать и передать уровень заголовка слоя в структуре кодированного уровневого битового потока до кодирования и передачи соответствующего остаточного уровня упомянутого слоя. В других случаях, однако, видеокодер 20 может кодировать и передать уровень заголовка слоя в структуре кодированного уровневого битового потока после кодирования и передачи соответствующего остаточного уровня упомянутого слоя. В любом случае, видеокодер 20 может дополнительно кодировать идентификатор, который указывает местоположение, в котором кодированная уровневая структура битового потока переходит от уровня заголовка к остаточному уровню или от остаточного уровня к уровню заголовка. Устройство-источник 12 передает кодированные видеоданные приемному устройству посредством передатчика 22.
Приемное устройство 14 может включать в себя приемник 24, видеодекодер 26 и устройство 28 отображения. Приемник 24 принимает кодированный уровневый битовый поток видеоданных от устройства-источника 12 посредством канала 16. Видеодекодер 26 декодирует уровневый битовый поток видеоданных для получения информации заголовка для блоков слоя и остаточной информации для блоков слоя. Видеодекодер 26 может идентифицировать уровень заголовка и остаточный уровень, используя идентификатор, находящийся в уровневом битовом потоке, который указывает местоположение перехода от уровня заголовка к остаточному уровню. Видеодекодер 26 устанавливает связь информации заголовка (например, синтаксические элементы заголовка) с остаточной информацией каждого из блоков слоя. Видеодекодер 26 восстанавливает видеоблоки упомянутого слоя с помощью формирования блока предсказания для каждого из блоков с использованием информации заголовка и объединения блока предсказания с соответствующей остаточной информацией блока. Приемное устройство 14 может отображать реконструированные видеоблоки пользователю с помощью устройства 28 отображения. Устройство 28 отображения может содержать любое из разнообразных устройств отображения, таких как электронно-лучевая трубка (CRT), жидкокристаллический дисплей (LCD), дисплей на основе светоизлучающих диодов (LED), дисплей на основе органических LED или другой тип устройства отображения.
В некоторых случаях, устройство-источник 12 и приемное устройство 14 могут работать, по существу, в симметричном режиме. Например, устройство-источник 12 и приемное устройство 14 каждое могут включать в себя компоненты кодирования декодирования видеоданных. Следовательно, система 10 может поддерживать однонаправленную или двунаправленную передачу видеоданных между видеоустройствами 12, 14, например, для потокового видео, широковещательной передачи видео или видеотелефонии.
Видеокодер 20 и видеодекодер 26 могут работать в соответствии со стандартом сжатия видеоданных, таким как стандарт экспертной группы по вопросам движущегося изображения (MPEG)-2, MPEG-4, ITU-T H.263 или ITU-T 264/MPEG-4, Part 10, расширенное кодирование видеоданных (AVC). Несмотря на то, что это не показано на фиг. 1, в некоторых аспектах видеокодер 20 и видеодекодер 26 могут быть каждый объединены с аудиокодером и аудиодекодером соответственно и могут включать в себя соответствующие устройства MUX-DEMUX или другое аппаратное обеспечение и программное обеспечение для того, чтобы кодировать и аудиоданные и видеоданные в общем потоке данных или раздельных потоках данных. Таким образом, устройство-источник 12 и приемное устройство 14 могут работать с мультимедийными данными. Если это применимо, то устройства MUX-DEMUX могут соответствовать протоколу мультиплексора ITU H.223 или другим протоколам, например пользовательскому протоколу дейтаграмм (UDP).
Стандарт AVC H.264/MPEG-4 был сформулирован экспертной группой по кодированию видеоданных (VCEG) ITU-T вместе с MPEG ISO/IEC в результате коллективного сотрудничества, известного как объединенная группа по вопросам видео (JVT). В некоторых аспектах, способы, описанные в настоящем раскрытии, могут быть применены к устройствам, которые в целом соответствуют стандарту H.264. Стандарт H.264 описывается группой по изучению ITU-T в рекомендации ITU-T к H.264, расширенном кодировании видеоданных для общих аудиовизуальных услуг, от марта 2005 г., который может упоминаться в данном документе как стандарт H.264 или спецификация H.264 либо как стандарт или спецификация H.264/AVC.
В некоторых случаях, видеокодер 20 или видеодекодер 26 может быть выполнен с возможностью поддержки масштабируемого кодирования видеоданных (SVC) для пространственной, временной масштабируемости и/или масштабируемости отношения сигнала к шуму (SNR). Кодер 20 и декодер 26 могут поддерживать различные степени масштабируемости посредством поддержки кодирования, передачи и декодирования базового уровня и одного или более масштабируемых уровней расширения. Для масштабируемого кодирования видеоданных базовый уровень передает видеоданные с помощью базисного уровня качества. Один или более уровней расширения передает дополнительные данные для поддержки более высоких пространственного, временного уровня или уровня SNR. Базовый уровень может быть передан таким образом, который является более надежным, чем передача уровней расширения. Базовый уровень и уровни расширения не являются отдельными последовательностями битов в пределах одного и того же кодированного единичного элемента данных подобно уровню заголовка и уровню остаточных данных. Вместо этого, базовый уровень и уровни расширения кодируются с использованием иерархической модуляции на физическом уровне таким образом, что базовый уровень и уровни расширения могут быть переданы на одной и той же несущей или поднесущих, но с различными характеристиками передачи, которые приводят к различной частоте ошибок пакетов данных (PER).
В некоторых аспектах, для широковещательной передачи видео, способы, описанные в настоящем раскрытии, могут быть применены к расширенному H.264 кодированию видеоданных для предоставления услуг видео в реальном времени в системах наземной мобильной многоадресной передачи мультимедийных данных (TM3), использующих спецификацию радиоинтерфейса, предназначенную только для прямых линий связи (FLO), «Forward Link Only (FLO) Air Interface Specification», опубликованную в июле 2007 г. в качестве технического стандарта TIA-1099 («FLO Specification»). То есть канал 16 связи может включать в себя беспроводной информационный канал, используемый для беспроводной трансляции видеоинформации в соответствии с FLO Specification, или подобный. FLO Specification включает в себя примеры, определяющие синтаксис и семантику битового потока, а также процессы декодирования, подходящие для радиоинтерфейса FLO.
Альтернативно, видео может транслироваться в соответствии с другими стандартами, например DVB-H (трансляция цифрового видео для портативных компьютеров), ISDB-T (цифровое вещание с интегрированными услугами для наземных систем связи) или DMB (цифровое мультимедийное вещание). Следовательно, устройство-источник 12 может быть мобильным беспроводным терминалом, сервером потокового видео или сервером трансляции видео. Тем не менее, способы, описанные в настоящем раскрытии, не ограничиваются каким-либо определенным типом систем широковещательной передачи, многоадресной передачи или систем типа «точка-точка». В случае с широковещательной передачей, устройство-источник 12 может осуществлять широковещательную передачу нескольких каналов видеоданных множеству приемных устройств, каждое из которых может быть аналогичным приемному устройству 14, представленному на фиг. 1. Таким образом, несмотря на то, что на фиг. 1 показано одно приемное устройство 14, в случае с широковещательной передачей видео, устройство-источник 12 обычно осуществляет широковещательную передачу видеоконтента одновременно множеству приемных устройств.
TM
В других примерах, передатчик 22, канал 16 связи и приемник 24 могут быть выполнены с возможностью осуществления связи в соответствии с любой проводной или беспроводной системой связи, включая одну или более из следующих систем: сеть Ethernet, телефонный кабель (например, POTS - простая старая телефонная служба), силовая линия, волоконно-оптические системы и/или система беспроводной связи, включающая в себя одну или более систем связи множественного доступа с кодовым разделением каналов (CDMA или CDMA 2000), множественного доступа с частотным разделением каналов (FDMA), множественного доступа с мультиплексированием и ортогональным частотным разделением каналов (OFDM), множественного доступа с временным разделением каналов, например GSM (глобальная система мобильной связи), GPRS (пакетная радиосвязь общего назначения) или EDGE (среда GSM с увеличенной скоростью передачи данных), мобильная телефонная система TETRA (наземное транкинговое радио), система широкополосного множественного доступа с кодовым разделением каналов (WCDMA), система высокоскоростной передачи данных 1xEV-DO (эволюционировавшая передача данных первого поколения) или 1xEV-DO с функцией Gold Multicast, система IEEE 802.18, система MediaFLO, система DVB-H или другая схема для обмена данными между двумя или более устройствами.
Видеокодер 20 и видеодекодер 26 могут быть реализованы в виде одного или более микропроцессоров, цифровых сигнальных процессоров (DSP), специализированных интегральных схем (ASIC), программируемых пользователем вентильных матриц (FPGA), дискретных логических схем, программного обеспечения, аппаратного обеспечения, встроенного программного обеспечения или их комбинации. Каждый из видеокодера 20 и видеодекодера 26 может быть включен в состав одного или более кодеров и декодеров, любой из которых может быть интегрирован в качестве части объединенного кодера/декодера (CODEC) в соответствующее мобильное устройство, абонентское устройство, широковещательное устройство, сервер и тому подобное. Дополнительно, каждое из устройства-источника 12 и приемного устройства 14 может включать в себя соответствующие компоненты модуляции, демодуляции, частотного преобразования, фильтрации и усиления для передачи и приема кодированного видео, которые могут быть пригодны, включая радиочастотные (RF) компоненты антенны для беспроводной передачи данных, достаточные для поддержки беспроводного обмена данными. Однако, в целях упрощения иллюстрации, такие компоненты объединены и образуют передатчик 22 устройства-источника 12 и приемник 24 приемного устройства 14, представленных на фиг. 1.
Фиг. 2 представляет собой блок-схему, иллюстрирующую пример видеокодера 20, который может соответствовать видеокодеру устройства-источника 12, представленного на фиг. 1. Видеокодер 20 может выполнять внутрикадровое и межкадровое кодирование блоков в пределах видеокадров. Внутрикадровое кодирование основывается на пространственном предсказании для снижения исключения пространственной избыточности в видеоданных в пределах заданного видеокадра. Для внутрикадрового кодирования, видеокодер 20 выполняет пространственное предсказание с использованием уже кодированных блоков в пределах того же самого кадра. Межкадровое кодирование основывается на временном предсказании для снижения или исключения временной избыточности в видеоданных у смежных кадров видеопоследовательности. Для межкадрового кодирования, видеокодер 20 выполняет оценку движения для отслеживания движения соответствующих видеоблоков между двумя или более смежными кадрами.
Как показано на фиг. 2, видеокодер 20 принимает текущий видеоблок в пределах видеокадра, который должен быть кодирован. В примере, представленном на фиг. 2, видеокодер 20 включает в себя модуль 32 оценки движения, хранилище 32 опорных кадров, модуль 36 компенсации движения, модуль 38 преобразования блоков, модуль 40 квантования, модуль 42 обратного квантования, модуль 44 обратного преобразования и модуль 46 энтропийного кодирования. Контурный фильтр для удаления блочности (не показан) может быть применен для реконструированных видеоблоков для удаления блочных артефактов (дефектов изображения). Видеокодер 20 также включает в себя сумматоры 48А и 48В («сумматоры 48»). Фиг. 2 иллюстрирует компоненты временного предсказания видеокодера 20 для межкадрового кодирования видеоблоков. Несмотря на то, что в целях упрощения иллюстрации на фиг. 2 это не показано, видеокодер 20 также может включать в себя компоненты внутрикадрового кодирования некоторых видеоблоков. Способы кодирования видеоблоков согласно настоящему раскрытию могут быть применены в отношении видеоданных любых блоков, например блоков, подвергнутых внутрикадровому кодированию, или блоков, подвергнутых межкадровому кодированию.
Для выполнения временного предсказания, модуль 32 оценки движения сравнивает текущий видеоблок с блоками в одном или более смежных видеокадрах для формирования одного или более векторов движения. Текущий видеоблок относится к видеоблоку, который в настоящий момент кодируется и может содержать входной сигнал для видеокодера 20. Смежный кадр или кадры (которые содержат видеоблоки, с которыми сравнивается текущий видеоблок) могут быть извлечены из хранилища 34 опорных кадров. Хранилище 34 опорных кадров, которое может содержать память или устройство хранения данных любого типа для хранения одного или более ранее кодированных кадров или блоков в пределах ранее кодированных кадров. Модуль 32 оценки движения идентифицирует блок в смежном кадре, который обеспечивает наилучшее предсказание для текущего видеоблока, обычно при условии наличия определенного критерия искажения в зависимости от скорости передачи данных. Оценка движения может быть выполнена для блоков различных размеров, например 16×16, 16×8, 8×16, 8×8 или меньших размеров блоков.
Модуль 32 оценки движения формирует вектор движения (MV) (или множество MV в случае двунаправленного предсказания), который указывает величину и траекторию смещения между текущим видеоблоком и идентифицированным блоком предсказания, используемым для кодирования текущего видеоблока. Вектора движения могут иметь точность в половину или четверть пикселя или даже более высокую точность, позволяющую видеокодеру 20 отслеживать движение с более высокой точностью, чем целочисленные положения пикселей и получать лучший блок предсказания. Используя результирующий вектор движения, модуль 36 компенсации движения формирует видеоблок предсказания с помощью компенсации движения. В случае с целочисленной пиксельной точностью, модуль 36 компенсации движения просто выбирает блок в местоположении, идентифицированном вектором движения в качестве блока предсказания. В случае с дробной пиксельной точностью, модуль 36 компенсации движения может выполнить интерполяцию для формирования блока предсказания.
Видеокодер 20 формирует остаточную информацию (отмеченную на фиг. 2 как «RESID INFO») посредством вычитания видеоблока предсказания, сформированного модулем 36 компенсации движения в случае межкадрового кодирования, из текущего видеоблока в сумматоре 48А. Как это было описано выше, остаточная информация определяет количество различий между видеоблоком предсказания и текущим видеоблоком, который кодируется. Модуль 38 преобразования блока применяет преобразование, такое как DST или целочисленное преобразование 4×4 или 8×8, к остаточной информации для формирования остаточных коэффициентов преобразования. Модуль 40 квантования квантует остаточные коэффициенты преобразования для дополнительного снижения скорости передачи битов.
После квантования, модуль 42 обратного квантования и модуль 44 обратного преобразования применяют обратное квантование и обратное преобразование соответственно для восстановления остаточной информации (отмеченной на фиг. 2 как «RECON RESID»). Сумматор 48А прибавляет реконструированную остаточную информацию к блоку предсказания, сформированному модулем 36 компенсации движения, для формирования реконструированного видеоблока для хранения в хранилище 34 опорных кадров. Восстановленный видеоблок может быть использован модулем 32 оценки движения и модулем 36 компенсации движения для кодирования блока в последующем видеокадре.
Модуль 46 энтропийного кодирования принимает остаточную информацию в форме квантованных остаточных коэффициентов для текущего видеоблока от модуля 40 квантования. Дополнительно, модуль 46 энтропийного кодирования принимает информацию заголовка блока для текущего видеоблока. Информация заголовка может включать в себя, например, количество синтаксических элементов заголовка, которые идентифицируют конкретные характеристики текущего видеоблока. Один такой синтаксический элемент заголовка блока, подвергаемого межкадровому кодированию, может быть одним или более вектором движения текущего видеоблока, принятого от модуля 32 оценки движения. Другие синтаксические элементы заголовка текущего видеоблока могут включать в себя, например, тип блока (с межкадровым или внутрикадровым кодированием), режим предсказания (направленность предсказания для блоков, подвергнутых внутрикадровому кодированию или прямое/двунаправленное предсказание для блоков, подвергнутых межкадровому кодированию), размер раздела (16×16, 8×8 и так далее), шаблон кодированного блока (CBP/ШКБ для яркости и/или цветности), дельта-QP, размер преобразования и другие. Другие синтаксические элементы заголовка могут быть приняты от других компонентов (не показаны на фиг. 2), находящихся в видеокодере 20.
В традиционных видеокодерах, синтаксические элементы заголовка для каждого видеоблока и соответствующая остаточная информация для каждого видеоблока кодируются в режиме «блок за блоком». Другими словами, традиционный видеокодер кодирует информацию заголовка первого блока, за которой следует соответствующая остаточная информация первого блока, кодирует информацию заголовка второго блока, за которой следует соответствующая остаточная информация для второго блока, и так далее до тех пор, пока все видеоблоки слоя не будут кодированы и переданы. Таким образом, традиционный видеокодер может рассматриваться в качестве видеокодера, формирующего в режиме «блок за блоком» структуру кодированного битового потока, как это описывается более подробно со ссылкой на фиг. 6А.
Тем не менее, синтаксические элементы заголовка для блоков слоя могут быть пространственно коррелированны. Другими словами, по меньшей мере, часть блоков слоя может содержать аналогичную информацию заголовка, то есть один или более одинаковых синтаксических элементов заголовка. В соответствии со способами настоящего раскрытия, модуль 46 энтропийного кодирования кодирует вместе информацию заголовка двух или более блоков слоя, как это будет описано подробно ниже.
В частности, модуль 46 энтропийного кодирования отделяет информацию заголовка видеоблоков слоя от остаточной информации видеоблоков слоя. Модуль 46 энтропийного кодирования компонует информацию заголовка блоков в группы на основе типа синтаксических элементов заголовка. Например, модуль 46 энтропийного кодирования может сгруппировать вместе синтаксические элементы типа блока для каждого блока в первую группу, сгруппировать вместе синтаксические элементы режима предсказания для каждого блока во вторую группу и так далее для каждого из типов синтаксических элементов. Таким образом, каждая из групп синтаксических элементов может содержать синтаксические элементы последовательных блоков. В одном случае, такие группы синтаксических элементов могут быть расположены последовательно таким образом, что первая группа отсылается перед второй группой, вторая группа отсылается перед третьей группой и так далее. В другом случае, такие группы синтаксических элементов могут быть расположены перемежающимся образом. Оба типа расположения синтаксических элементов заголовка описываются подробно ниже.
После отделения и расположения синтаксических элементов заголовка, модуль 46 энтропийного кодирования кодирует синтаксические элементы заголовка групп с использованием кодирования длин серий для формирования уровня заголовка. Таким образом, уровень заголовка содержит информацию заголовка более чем одного блока. Кодирование информации заголовка более чем одного блока позволяет модулю 46 энтропийного кодирования уменьшить избыточность и лучше использовать корреляцию информации заголовка для множества блоков слоя, особенно при использовании VLC. Модуль 46 энтропийного кодирования дополнительно кодирует остаточную информацию блоков слоя отдельно от информации заголовка. Таким образом, модуль 26 энтропийного кодирования не кодирует последовательно информацию заголовка каждого блока, а затем остаточную информацию соответствующего блока. Вместо этого, модуль 46 энтропийного кодирования кодирует блоки в уровневой структуре битового потока, которая включает в себя первую последовательность битов, то есть уровень заголовка, который соответствует кодированной информации заголовка множества видеоблоков слоя, и вторую последовательность битов, то есть остаточный уровень, который соответствует кодированной остаточной информации множества видеоблоков упомянутого слоя.
Модуль 46 энтропийного кодирования может дополнительно кодировать индикатор, который идентифицирует местоположения в уровневом битовом потоке, в которых происходит переход от уровня заголовка к остаточному уровню. Модуль 46 энтропийного кодирования может кодировать некоторое количество различных типов индикаторов для идентификации местоположения разделения уровней в кодированном битовом потоке. Например, модуль 46 энтропийного кодирования может кодировать уникальный битовый шаблон определенной длины для идентификации местоположения такого разделения. В качестве другого примера, модуль 46 энтропийного кодирования кодирует синтаксический элемент в уровне заголовка, который указывает длину уровня заголовка, например, в битах.
Модуль 46 энтропийного кодирования ожидает, когда будет сформирована информация заголовка и остаточная информация для блоков слоя, перед тем как выполнять энтропийное кодирование упомянутого слоя. Поэтому, видеокодер 20 может испытывать некоторую задержку, ожидая формирования информации заголовка и остаточной информации для блоков слоя. Это может быть непригодным для некоторых приложений, таких как приложения, которые требуют кодирования в реальном времени и/или, когда видеокодер 20 ограничивает ресурсы памяти. Тем не менее, для других приложений, таких как приложения, в которых не требуется кодирование в реальном времени (например, потоковое видео и широковещательная передача видео), или когда видеокодер 20 имеет достаточно ресурсов памяти, уровневая компоновка битового потока обеспечивает преимущества когерентной структуры битового потока и высокую эффективность кодирования.
Кодирование блоков слоя в уровневой структуре битового потока позволяет модулю 46 энтропийного кодирования улучшить эффективность кодирования, лучше использовать корреляцию информации заголовка блоков слоя, если он выполнен с возможностью использования VLC. Модуль 46 энтропийного кодирования также может использовать уровневую структуру кодированного битового потока, описанную в настоящем раскрытии, если он выполнен с возможностью использования арифметического кодирования. Использование уровневого кодированного битового потока как для VLC, так и для арифметического кодирования может обеспечить более универсальную структуру битового потока для кодеров VLC и арифметических кодеров. Дополнительно, уровневая структура битового потока обеспечивает возможность для неодинаковой защиты от ошибок на уровне заголовка и на остаточном уровне. Например, уровень заголовка, который переносит более важную информацию, может быть обеспечен лучшей защитой от ошибок, чем остаточный уровень.
В некоторых случаях, модуль 46 энтропийного кодирования может использовать уровневую структуру битового потока, описанную в настоящем раскрытии, в сочетании со структурой битового потока типа «блок за блоком». Другими словами, модуль 46 энтропийного кодирования может кодировать некоторые кодируемые единичные элементы данных в форме уровневой структуры битового потока и кодировать другие кодированные элементы данных в форме структуры битового потока типа «блок за блоком». Например, в масштабируемом битовом потоке видео, который включает в себя один битовый поток базового уровня и один или более битовых потоков уровня расширения, битовый поток базового уровня может быть кодирован в форме структуры битового потока типа «блок за блоком», в то время как уровень расширения может быть кодирован в форме уровневой структуры битового потока.
Такая компоновка обеспечивает преимущества обратной совместимости для битового потока базового уровня (например, существующий декодер H.264/AVC может декодировать базовый уровень) и более высокой эффективности кодирования для уровня расширения. В этом случае, модуль 46 энтропийного кодирования может содержать флаг в заголовке кодированного единичного элемента данных (например, заголовок слоя или заголовок уровня изображения или уровня последовательности) для указания типа структуры битового потока, то есть скомпонован ли битовый поток в уровневую структуру или структуру типа «блок за блоком». Таким образом, модуль 46 энтропийного кодирования может использовать как уровневую структуру кодированного битового потока, так и структуру битового потока, кодированную в режиме «блок за блоком», например, посредством динамического переключения между упомянутыми структурами.
Несмотря на то, что способы уровневого кодирования, описанные в настоящем раскрытии, описываются со ссылкой на блоки кодирования слоя некоторого кадра, упомянутые способы могут быть использованы при кодировании других кодируемых единичных элементов данных в уровневой структуре битового потока. Например, видеокодер 20 может кодировать кодируемые единичные элементы данных, которые больше чем некоторый слой, например больше чем один слой, целый кадр или целая последовательность, в уровневую структуру битового потока. Дополнительно, способы согласно настоящему раскрытию могут быть использованы для кодирования кодируемых единичных элементов данных с использованием VLC или арифметического кодирования.
Фиг. 3 представляет собой блок-схему модуля 46 энтропийного кодирования, выполненного с возможностью формирования уровневой структуры битового потока в соответствии с аспектом настоящего раскрытия. Модуль 46 энтропийного кодирования может располагаться в видеокодере 20, представленном на фиг. 1 и 2. Модуль 46 энтропийного кодирования принимает данные блока для множества блоков и формирует уровневый битовый поток для передачи другому устройству для декодирования. В примере, изображенном на фиг. 3, модуль 46 энтропийного кодирования включает в себя модуль 50 разделения данных блока, память 52 информации заголовка, память 54 остаточной информации, модуль 58 кодирования длин серий (RLC) и модуль 59 кодирования с переменной длиной (VLC).
Во время работы, модуль 50 разделения данных блока принимает данные блока для видеоблоков некоторого слоя. Модуль 50 разделения данных блока может принимать данные блока для видеоблоков упомянутого слоя в качестве данных блока, сформированных другими компонентами видеокодера 20, например, модулем 20 квантования, модулем 32 оценки движения и другими. Данные блока, принятые от каждого блока, могут включать в себя остаточную информацию (например, в форме квантованных остаточных коэффициентов преобразования) и информацию заголовка (например, в форме одного или более синтаксических элементов заголовка, таких как один или более векторов движения, тип блока, режим предсказания, размер раздела, шаблон кодированного блока, дельта-QP, размер преобразования и другие).
Модуль 50 разделения данных блока отделяет остаточную информацию каждого блока от информации заголовка блока. Например, модуль 50 разделения данных блока может сохранять остаточную информацию каждого блока в памяти 56 остаточной информации и сохраняет информацию заголовка каждого блока в памяти 52 информации заголовка. Модуль 50 разделения данных продолжает принимать данные блока для видеоблоков слоя, отделять информацию заголовка от остаточной информации и сохранять разделенную информацию в соответствующих памятях 52 и 56.
После приема и разделения данных блока для каждого из блоков упомянутого слоя, модуль 54 группирования заголовка группирует информацию заголовка блоков упомянутого слоя для использования корреляции информации заголовка межу блоками упомянутого слоя с использованием кодирования длин серий. Модуль 54 группирования заголовка может группировать одинаковые синтаксические элементы заголовка для каждого из блоков в одну группу. В качестве примера, предположим, что слой включает в себя пять блоков с информацией заголовка, которая включает в себя синтаксический элемент типа блока и синтаксический элемент дельта-QP, причем первый блок имеет тип блока равный нулю и дельта-QP равный нулю, второй блок имеет тип блока равный нулю и дельта-QP равный нулю, третий блок имеет тип блока равный единице и дельта-QP равный нулю, четвертый блок имеет тип блока равный единице и дельта-QP равный нулю, пятый блок имеет тип блока равный нулю и дельта-QP равный единице. В этом примере, модуль 54 группирования заголовка группирует синтаксические элементы заголовка для упомянутых блоков в две следующие группы: одну группу синтаксических элементов типа блока и одну группу синтаксических элементов дельта-QP.
Модуль 58 RLC кодирует серии каждой из групп синтаксических элементов заголовка для уменьшения избыточности и использования корреляции синтаксических элементов заголовка между блоками упомянутого слоя. В одном случае, модуль 58 RLC может кодировать каждую из групп синтаксических элементов заголовка последовательно. Таким образом, модуль 58 RLC последовательно кодирует серии первого синтаксического элемента заголовка блоков перед сериями второго синтаксического элемента блоков и так далее до тех пор, пока модуль 58 RLC не кодирует серии для последнего синтаксического элемента блоков. В описанном выше примере, модуль 58 RLC последовательно кодирует серии синтаксического элемента типа блока пяти блоков перед сериями синтаксического элемента дельта-QP пяти блоков. В частности, модуль 58 RLC последовательно кодирует первую серию {0, 2} типа блока, затем вторую серию {1, 2} типа блока, затем третью серию {0, 1} типа блока, затем первую серию {0, 4} дельта-QP, затем вторую серию {1, 1} дельта-QP.
Альтернативно, модуль 58 RLC кодирует информацию заголовка блоков слоя таким образом, что серии синтаксических элементов заголовка перемежаются между собой. Например, модуль 58 RLC может кодировать, по меньшей мере, одну серию для каждого синтаксического элемента перед кодированием дополнительных серий любого из синтаксических элементов. В этом случае, со ссылкой на приведенный выше пример со слоем, состоящим из пяти блоков, с синтаксическими элементами типа блока и дельта-QP, модуль 58 RLC кодирует первую серию {0, 2} типа блока, затем первую серию {0, 4} дельта-QP, затем вторую серию {1, 2} типа блока, затем третью серию {0, 1} типа блока, затем вторую серию {1, 1} дельта-QP. Таким образом, модуль 58 RLC перемежает кодированные серии синтаксических элементов в тех местоположениях, где синтаксические элементы необходимы для декодирования текущего блока, тем самым снижая сложность установления связи синтаксических элементов заголовка и остаточной информации в декодере. Например, модуль 58 RLC кодирует вторую серию типа блока перед второй серией дельта-QP потому, что первая серия типа блока короче, чем первая серия дельта-QP. Если первая серия дельта-QP была короче, чем первая серия типа блока, то вторая серия дельта-QP может быть кодирована перед второй серией типа блока. Таким образом, модуль 58 RLC кодирует дополнительные серии синтаксических элементов, если имеются дополнительные серии для кодирования, когда предыдущая серия такого же синтаксического элемента полностью исчерпана (то есть завершилась). В некоторых случаях, модуль 46 энтропийного кодирования может кодировать флаг, указывающий, скомпонован ли уровень заголовка последовательно или с перемежением.
После формирования серий синтаксических элементов блоков слоя, модуль 59 VLC кодирует серии синтаксических элементов для формирования уровня заголовка уровневого битового потока. Модуль 59 VLC дополнительно кодирует остаточную информацию каждого из множества блоков отдельно от информации заголовка для остаточного уровня уровневого битового потока. Таким образом, модуль 59 VLC кодирует уровневый битовый поток для включения в его состав первой последовательности битов, которая соответствует информации заголовка множества видеоблоков и второй последовательности битов, которая соответствует остаточной информации множества видеоблоков. Модуль 59 VLC может кодировать серии синтаксических элементов информации заголовка и остаточной информации с использованием одной или более таблиц кодирования с переменной длиной.
Модуль 59 VLC может дополнительно формировать индикатор, который идентифицирует местоположение перехода от уровня заголовка к остаточному уровню для конкретного слоя. В одном случае, модуль 59 VLC может кодировать уникальный шаблон битов, который указывает окончание уровня заголовка. Альтернативно, модуль 59 VLC может кодировать синтаксический элемент в начале уровня заголовка, который указывает длину, например, в битах, уровня заголовка. Кроме того, в тех случаях, когда модуль 46 энтропийного кодирования, может формировать как уровневую структуру битового потока так и структуру битового потока типа «блок за блоком», модуль 59 VLC может установить флаг в заголовке некоторого слоя для указания типа структуры битового потока, то есть, скомпонован ли битовый поток в уровневую структуру или структуру типа «блок за блоком».
Несмотря на то, что модуль 46 энтропийного кодирования, представленный на фиг. 3, описан как модуль, выполняющий VLC, упомянутые способы могут быть использованы для арифметического кодирования. Например, модуль 46 энтропийного кодирования может включать в себя модуль арифметического кодирования вместо модуля 59 VLC. Серии синтаксических элементов могут быть арифметически кодированы для формирования уровня заголовка уровневого битового потока, и остаточная информация может быть отдельно арифметически кодирована для формирования остаточного уровня уровневого битового потока. Альтернативно, модуль 46 энтропийного кодирования может использовать комбинацию VLC-кодирования и арифметического кодирования для кодирования информации заголовка и остаточной информации. Например, серии синтаксических элементов заголовка могут быть кодированы с использованием VLC, а остаточная информация может быть кодирована с использованием арифметического кодирования или наоборот.
Фиг. 4 представляет собой блок-схему, иллюстрирующую пример видеокодера 26, который может соответствовать видеокодеру, представленному на фиг. 1. Видеокодер 26 может выполнять внутрикадровое и межкадровое декодирование блоков в видеокадрах. В примере, приведенном на фиг. 4, видеодекодер 26 включает в себя модуль 60 энтропийного декодирования, модуль 62 компенсации движения, модуль 64 обратного квантования, модуль 66 обратного преобразования и хранилище 68 опорных кадров. Видеодекодер 26 также включает в себя сумматор 69, который объединяет выходные сигналы модуля 66 обратного преобразования и модуля 62 компенсации движения. Фиг. 4 иллюстрирует компоненты временного предсказания видеодекодера 26 для межкадрового декодирования видеоблоков. Несмотря на то, что это не показано на фиг. 4, видеодекодер 26 также включает в себя компоненты пространственного предсказания, например модуль пространственного предсказания, для внутрикадрового декодирования некоторых видеоблоков.
Модуль 60 энтропийного декодирования принимает кодированный битовый поток видео и применяет способы декодирования с переменной длиной, например, посредством использования одной или более таблиц кодирования с переменной длиной, для декодирования битового потока. Как это было подробно описано выше, кодированный битовый поток видео может быть скомпонован в уровневую структуру битового потока для более эффективного использования корреляции информации заголовка между блоками некоторого слоя. Например, принятый битовый поток может содержать первую последовательность битов, то есть уровень заголовка, который соответствует информации заголовка для множества блоков, и вторую последовательность битов, то есть остаточный уровень, который соответствует остаточной информации для множества блоков. Модуль 60 энтропийного декодирования выполняет декодирование в обратном порядке по отношению к модулю 46 энтропийного кодирования, представленному на фиг. 2, для того, чтобы извлечь остаточную информацию и информацию заголовка блока слоя.
Для определения того, какая последовательность битов соответствует информации заголовка, а какая последовательность битов соответствует остаточной информации, модуль 60 энтропийного декодирования обнаруживает индикатор в уровневом битовом потоке, который идентифицирует местоположение, в котором происходит переход между уровнем заголовка и остаточным уровнем. Например, модуль 60 энтропийного декодирования может обнаружить уникальный битовый шаблон, который указывает, что кодированный битовый поток переходит от уровня заголовка к остаточному уровню. В качестве другого примера, модуль 60 энтропийного декодирования может обнаруживать синтаксический элемент заголовка, который указывает длину, например, в битах, уровня заголовка. Тем не менее, модуль 60 энтропийного декодирования может обнаруживать некоторое количество других индикаторов для идентификации перехода от уровня заголовка к остаточному уровню.
Модуль 60 энтропийного декодирования декодирует уровень заголовка и остаточный уровень и сохраняет декодированные синтаксические элементы заголовка и остаточную информацию. Модуль 60 энтропийного декодирования устанавливает связь остаточной информации для каждого блока с соответствующими синтаксическими элементами заголовка блока. Модуль 60 энтропийного декодирования может перекомпоновывать декодированные синтаксические элементы заголовка для группировки синтаксических элементов, которые принадлежат тому же самому блоку. Таким образом, модуль 60 энтропийного декодирования перекомпоновывает данные блока так, чтобы получить порядок типа «блок за блоком». Например, в случае последовательного уровневого битового потока, модуль 60 энтропийного декодирования может декодировать и сохранить остаточную информацию, собрать информацию заголовка и остаточную информацию для каждого блока и предоставить такую информацию другим компонентам модуля декодирования. Тем не менее, в случае уровневого битового потока с перемежением, модуль 60 энтропийного декодирования может начать восстановление некоторых из блоков слоя перед полным декодированием уровня заголовка и остаточного уровня, как это будет подробно описано ниже.
Видеодекодер 26 восстанавливает кадры видеоблока в режиме «блок за блоком» с использованием синтаксических элементов заголовка и остаточной информации. Синтаксические элементы заголовка могут быть использованы видеодекодером 26 для конфигурирования одного или более компонентов. Например, модуль 60 энтропийного декодирования может предоставить вектора движения и размеры раздела в модуль 62 компенсации движения, значения QP для использования при обратном квантовании в модуль 64 обратного квантования или тому подобное. Компоненты видеодекодера 26 формируют блок предсказания и остаточный блок и объединяют остаточный блок с блоком предсказания для восстановления видеоблока.
Для каждого блока, подвергнутого межкадровому кодированию, модуль 62 компенсации движения принимает один или более векторов движения и размеры раздела от модуля 60 энтропийного декодирования и один или более реконструированных опорных кадров из хранилища 68 опорных кадров и формирует блок предсказания, то есть блок компенсации движения. Модуль 64 обратного квантования выполняет обратное квантование, то есть выполняет деквантизацию, квантованных остаточных коэффициентов в соответствии с синтаксическим элементом QP. Модуль 66 обратного преобразования применяет обратное преобразование, например обратное DCT или обратное целочисленное преобразование 4×4 или 8×8, к деквантизованным остаточным коэффициентам для формирования остаточного блока. Сумматор 69 суммирует блок предсказания, сформированный модулем 62 компенсации движения, с остаточным блоком, предоставленным из модуля 66 обратного преобразования, для формирования декодированного блока.
Основанное на блоках кодирование видео иногда может приводить к визуально различимой блочности на границах блоков кодированных видеокадров. В таких случаях, фильтрация, устраняющая блочность, может сгладить границы блоков для уменьшения или исключения визуально различимой блочности. По существу, фильтр, устраняющий блочность (не показан), также может быть применен для фильтрации декодированных блоков для удаления артефактов блочности. После любой фильтрации, устраняющей блочность, которая является необязательной, реконструированные блоки помещаются в хранилище 68 опорных кадров, которое предоставляет опорные кадры для компенсации движения, а также предоставляет декодированное видео для приведения в действие устройства отображения (такого как устройство 28, представленное на фиг. 1).
Фиг. 5 представляет собой блок-схему, иллюстрирующую пример модуля 60 энтропийного декодирования, выполненного с возможностью декодирования уровневого кодированного битового потока в соответствии с аспектом настоящего раскрытия. Модуль 60 энтропийного кодирования может располагаться в видеодекодере 26, представленном на фиг. 1 и 4. Модуль 60 энтропийного декодирования принимает уровневый кодированный битовый поток видео некоторого слоя и формирует данные блока для блоков упомянутого слоя для использования при восстановлении видеоданных. В примере, представленном на фиг. 5, модуль 60 энтропийного декодирования включает в себя модуль 72 VLC-декодирования, модуль 74 RLC-декодирования, память 76 информации заголовка, память 78 остаточной информации и модуль 79 установления связи заголовка.
Модуль 72 VLC-декодирования декодирует уровневый битовый поток слоя. Как это было описано выше, видеокодер 20 кодирует слой с использованием уровневой структуры битового потока, который включает в себя первую последовательность битов, которая соответствует кодированной информации заголовка блоков (то есть уровень заголовка), и вторую последовательность битов, которая соответствует кодированной остаточной информации блоков (то есть остаточный уровень). Местоположение перехода от уровня заголовка и остаточного уровня может быть идентифицировано в уровневом битовом потоке с помощью одного или более индикаторов.
Модуль 72 VLC-декодирования применяет способы декодирования с переменной длиной, например, посредством использования таблиц кодирования с переменной длиной, для декодирования уровня заголовка и остаточного уровня. Например, модуль 72 VLC-декодирования использует один набор таблиц кодирования для декодирования уровня заголовка и другой набор таблиц кодирования для декодирования остаточного уровня. После обнаружения перехода от уровня заголовка к остаточному уровню, модуль 72 VLC-декодирования может выбрать разные наборы таблиц кодирования. Декодированная информация заголовка и декодированная остаточная информация могут быть сохранены в памяти 74 информации заголовка и памяти 78 остаточной информации соответственно.
После выполнения декодирования с переменной длиной в отношении уровня заголовка, модуль 74 RLC-декодирования выполняет декодирование длин серий в отношении уровня заголовка для получения информации заголовка для блоков слоя. Декодированная информация заголовка включает в себя количество синтаксических элементов, которые сгруппированы на основе типов синтаксических элементов. В одном примере, синтаксические элементы могут быть сгруппированы таким образом, что синтаксические элементы первого типа (например, типа блока) для всех блоков упомянутого слоя сгруппированы вместе, синтаксические элементы второго типа (например, режим предсказания) для всех блоков упомянутого слоя сгруппированы вместе и так далее. Таким образом, декодированная информация заголовка располагается последовательно таким образом, что все синтаксические элементы первого типа предшествуют всем синтаксическим элементам второго типа, и все синтаксические элементы второго типа предшествуют всем синтаксическим элементам третьего типа и так далее.
Альтернативно, синтаксические элементы информации заголовка могут перемежаться между собой. Например, за первым поднабором синтаксических элементов первого типа может следовать первый поднабор синтаксических элементов второго типа, за первым поднабором синтаксических элементов второго типа может следовать первый поднабор синтаксических элементов третьего типа, за первым поднабором синтаксических элементов третьего типа может следовать второй поднабор синтаксических элементов первого типа и так далее. Таким образом, серии синтаксических элементов заголовка перемежаются между собой. Модуль 60 энтропийного декодирования может идентифицировать флаг, который указывает, скомпонованы ли синтаксические элементы заголовка последовательно или с перемежением.
Модуль 79 установления связи заголовка устанавливает связь остаточной информации каждого из блоков слоя с синтаксическими элементами заголовка упомянутых блоков. Например, модуль 79 установления связи заголовка может устанавливать связь остаточной информации первого блока некоторого слоя с первым значением каждого из синтаксических элементов заголовка декодированного уровня заголовка, устанавливать связь остаточной информации второго блока упомянутого слоя со вторым значением каждого из синтаксических элементов заголовка и так далее до тех пор, пока остаточная информация каждого из блоков упомянутого слоя не будет поставлена в соответствие с соответствующими синтаксическими элементами заголовка.
Модуль 79 установления связи заголовка устанавливает связь остаточной информации некоторого блока с соответствующими синтаксическими элементами заголовка, модуль 79 установления связи заголовка выдает данные блока для упомянутого блока другим компонентам видеодекодера для реконструкции упомянутого блока. В некоторых случаях, модуль 79 установления связи заголовка может выдавать части данных блока разным компонентам видеодекодера, как это было описано выше со ссылкой на фиг. 4. Таким образом, модуль 79 установления связи заголовка реорганизует данные блока слоя в структуру типа «блок за блоком» для реконструкции видеоданных.
Несмотря на то, что модуль 60 энтропийного декодирования, представленный на фиг. 5, описан как модуль, выполняющий VLC-декодирование, упомянутые способы могут быть подобным образом использованы для арифметического кодирования. Например, модуль 60 энтропийного декодирования может включать в себя модуль арифметического декодирования вместо модуля 72 VLC-декодирования. Уровень заголовка уровневого битового потока может быть арифметически декодирован для формирования серий синтаксических элементов заголовка, а остаточный уровень уровневого битового потока может быть отдельно арифметически декодирован для формирования остаточной информации. Альтернативно, модуль 60 энтропийного декодирования может использовать комбинацию VLC-декодирования и арифметического декодирования для декодирования информации заголовка и остаточной информации.
Фиг. 6 представляет собой блок-схему, иллюстрирующую другой пример модуля 80 энтропийного декодирования, выполненного с возможностью декодирования уровневого битового потока в соответствии с аспектом настоящего раскрытия. Модуль 80 энтропийного декодирования может располагаться в видеодекодере 26, представленном на фиг. 1 и 4. Модуль 80 энтропийного декодирования принимает перемеженный уровневый кодированный битовый поток видео некоторого слоя и формирует данные блока для блоков упомянутого слоя для использования при восстановлении блока. В примере, приведенном на фиг. 6, модуль 80 энтропийного декодирования включает в себя модуль 82 раздела, модуль 84 декодирования заголовка, модуль 85 декодирования остаточной информации, память 86 информации заголовка, память 88 остаточной информации и модуль 89 установления связи заголовка.
Модуль 82 раздела принимает уровневый битовый поток слоя и разделяет уровневый битовый поток на уровень заголовка и остаточный уровень. Как это было описано выше, видеокодер 20 может кодировать упомянутый слой с индикатором, который идентифицирует местоположение перехода от уровня заголовка к остаточному уровню, например уникальной последовательностью битов в конце уровня заголовка или синтаксическим элементом, указывающим длину уровня заголовка. Модуль 82 раздела идентифицирует местоположение перехода на основании индикатора и отделяет уровень заголовка от остаточного уровня. Модуль 82 раздела предоставляет в модуль 84 декодирования заголовка кодированный уровень заголовка и предоставляет в модуль 85 декодирования остаточной информации кодированный остаточный уровень.
Модуль 80 энтропийного декодирования может выполнять синхронизированное, в режиме «блок за блоком» декодирование блоков слоя. Модуль 84 декодирования заголовка декодирует уровень заголовка для получения информации заголовка, например, в форме одного или более синтаксических элементов, и сохраняет синтаксические элементы заголовка в памяти 86 информации заголовка. Модуль 84 декодирования заголовка может использовать способы VLC-декодирования или арифметического декодирования для получения серий синтаксических элементов заголовка, и выполнять декодирование длин серий для упомянутых серий для получения синтаксических элементов заголовка. Перемеженный уровневый битовый поток скомпонован с сериями разных синтаксических элементов заголовка, перемеженных между собой. Последующие серии синтаксических элементов появляются тогда, когда завершается предыдущая серия того же самого синтаксического элемента. Таким образом, кодированные серии синтаксических элементов размещаются в тех местоположениях, где синтаксические элементы необходимы для декодирования текущего блока, тем самым снижая сложность установления связи синтаксических элементов заголовка и остаточной информации в декодере. Таким образом, модуль 84 декодирования заголовка может декодировать серии для получения синтаксических элементов заголовка для первого блока упомянутого слоя без декодирования всех серий синтаксических элементов заголовка.
Модуль 85 декодирования остаточной информации декодирует остаточный уровень для получения остаточной информации, например, в форме коэффициентов преобразования, и сохраняет остаточные коэффициенты в памяти 88 остаточной информации. Модуль 85 декодирования остаточной информации может декодировать остаточный уровень с использованием способов VLC-кодирования или арифметического кодирования для получения коэффициентов преобразования. Модуль 85 декодирования остаточной информации и модуль 84 декодирования заголовка могут декодировать остаточный уровень и уровень заголовка одновременно.
Модуль 89 установления связи заголовка устанавливает связь остаточной информации каждого блока слоя с синтаксическими элементами заголовка упомянутых блоков. Например, модуль 89 установления связи заголовка может формировать данные блока для первого блока упомянутого слоя, как только декодированы остаточная информация и информация заголовка первого блока. В частности, модуль 89 установления связи заголовка устанавливает связь остаточной информации первого блока упомянутого слоя со значениями каждой из первых серий синтаксических элементов заголовка декодированного уровня заголовка. Таким образом, другие компоненты в видеокодере 26 могут начать восстанавливать первый блок упомянутого слоя до того, как будет декодирована оставшаяся часть информации заголовка и остаточной информации. Модуль 89 установления связи заголовка продолжает устанавливать связь остаточной информации с соответствующими синтаксическими элементами заголовка по мере декодирования информации. Таким образом, компоновка с перемежением уровня заголовка позволяет видеодекодеру 26 выполнять синхронизированное, в режиме «блок за блоком» декодирование блоков упомянутого слоя с уменьшенной величиной задержки и уменьшенным количеством памяти, которое требуется для сохранения информации заголовка и остаточной информации.
Фиг 7А-7С иллюстрируют пример структуры битового потока. Фиг. 7А иллюстрирует пример структуры 90 битового потока типа «блок за блоком», а фиг. 7В и 7С иллюстрируют примеры уровневых структур 92А и 92В битового потока соответственно. Структура 90 битового потока типа «блок за блоком» сконфигурирована таким образом, что информация заголовка и соответствующая остаточная информация каждого блока кодируются последовательно. В частности, структура битового потока типа «блок за блоком» сконфигурирована таким образом, что за кодированной информацией 94А заголовка первого блока (обозначен на фиг. 7А как «МВ 1») следует соответствующая кодированная остаточная информация 96А блока МВ 1, за кодированной информацией 94В заголовка второго блока (обозначен на фиг. 7А как «МВ 2») следует соответствующая кодированная остаточная информация 96В для второго блока МВ 2 и так далее вплоть до последнего блока (обозначен на фиг. 7А как «МВ n»).
1
1
1
1
1
1
А
2
2
n
n
Как далее проиллюстрировано на фиг. 7А, информация 94А заголовка блока МВ 1 включает в себя синтаксические элементы 98А-98К заголовка (вместе обозначаются как «синтаксические элементы 98 заголовка»). Синтаксические элементы 98 заголовка могут включать в себя тип блока (межкадровый или внутрикадровый), режим предсказания (направленность предсказания для блоков, подвергнутых внутрикадровому кодированию, или прямое/обратное/двунаправленное предсказание для блоков, подвергнутых межкадровому кодированию), размер раздела (16×16, 8×8 и так далее), вектор движения, шаблон кодированного блока (CBP), дельта-QP, размер преобразования и другие. Другими словами, каждый из синтаксических элементов 98 заголовка может соответствовать разным синтаксическим элементам. В качестве примера, синтаксический элемент 98А может соответствовать синтаксическому элементу типа блока, синтаксический элемент 98В может соответствовать синтаксическому элементу режима предсказания, синтаксический элемент 98С может соответствовать синтаксическому элементу размера раздела, а синтаксический элемент и синтаксический элемент 98К типа блока может соответствовать синтаксическому элементу CBP. Тем не менее, информация 94 заголовка может содержать большее или меньшее количество синтаксических элементов 98. Кодированная информация 94 заголовка других блоков битового потока 90 также может содержать синтаксические элементы заголовка. Например, кодированная информация 94В заголовка блока МВ 2 может включать в себя синтаксические элементы 98А-98К (не показаны на фиг. 7А), а кодированная информация 94N заголовка блока МВ n может включать в себя синтаксические элементы 98A-98K (не показаны на фиг. 7А). Таким образом, в структуре битового потока типа «блок за блоком» синтаксические элементы заголовка и соответствующая остаточная информация кодируются последовательно для каждого блока.
Как это было описано выше, блоки с МВ 1 по МВ n могут иметь одинаковое значение для одного или более одинаковых синтаксических элементов заголовка. Например, первая часть блоков может иметь одинаковое значение синтаксического элемента типа блока, а вторая часть блоков может иметь одинаковое значение синтаксического элемента дельта-QP. Вследствие того что битовый поток 90 типа «блок за блоком» сконфигурирован на основе структуры «блок за блоком», то есть за последовательно кодированной информацией 94 заголовка блока следует соответствующая остаточная информация 94 того же самого блока, может не быть возможности для битового потока 90 типа «блок за блоком» в полной мере использовать корреляцию информации заголовка между блоками. Используя синтаксический элемент заголовка для типа блока в качестве примера, даже если некоторое количество последовательных блоков имеет одинаковый тип блока, если энтропийный кодер использует VLC-кодирование и предсказывает текущий тип блока, исходя из предшествующего типа блока, то, по меньшей мере, 1-битовый флаг включается в состав кодированной информации 94 заголовка каждого блока для представления синтаксического элемента типа блока. Например, 1-битовый флаг, равный 1, указывает, что текущий тип блока является тем же самым что и предшествующий тип блока, 1-битовый флаг, равный 0, указывает, что текущий тип блока является отличным от предшествующего типа блока, в этом случае текущий тип блока также необходимо кодировать. Таким образом, посылается, по меньшей мере, один бит на один блок и на один синтаксический элемент 98 для использования корреляции информации заголовка между блоками.
1
2
n
1
2
n
Фиг. 7В иллюстрирует последовательную уровневую структуру 92А битового потока, которая включает в себя уровень заголовка и остаточный уровень в соответствии с аспектом настоящего раскрытия. Уровень заголовка включает в себя кодированную информацию заголовка всех блоков, кодированных вместе для уменьшения избыточности и лучшего использования корреляции информации заголовка между блоками. Как это проиллюстрировано на фиг. 7В, уровень заголовка включает в себя кодированные серии 99А-99К синтаксических элементов (вместе обозначаются как «серии 99 SE»), которые скомпонованы последовательно. Кодированная серия 99А синтаксического элемента заголовка содержит синтаксические элементы заголовка, подвергнутые кодированию длин серий, одного типа для всех блоков. В частности, кодированная серия 99А синтаксических элементов (SE) заголовка включает в себя одну или более кодированных серий синтаксического элемента 98А заголовка блока МВ 1, серий синтаксического элемента 98А блока МВ 2 и так далее вплоть до синтаксического элемента 98A блока МВ n, кодированная серия 99В SE заголовка включает в себя одну или более кодированных серий синтаксического элемента 98В заголовка блока МВ 1, серий синтаксического элемента 98В блока МВ 2 и так далее вплоть до синтаксического элемента 98B блока МВ n и так далее. Таким образом, последовательная уровневая структура 92А битового потока включает в себя серии 99SE каждого из типов синтаксических элементов заголовка, скомпонованных последовательно. Остаточный уровень включает в себя кодированные остаточные данные для каждого из блоков.
1
1
1
2
1
1
2
n
1
2
n
1
1
1
2
n
1
2
n
2
1
2
1
2
Фиг. 7С иллюстрирует перемеженную уровневую структуру 92В битового потока, которая включает в себя уровень заголовка и остаточный уровень. Уровень заголовка перемеженной уровневой структуры 92В битового потока включает в себя кодированную информацию заголовка, в которой серии 99 SE разных синтаксических элементов заголовка перемежаются в пределах уровня заголовка. Это называется перемеженной компоновкой уровня заголовка. Как это проиллюстрировано на фиг. 7С, уровень заголовка включает в себя серию 99А SE, серию 99В SE вплоть до серии 99К SE, за которой следует серия 99Х SE и так далее. Серия 99А SE является кодированной серией для первой серии синтаксических элементов 98А. Синтаксический элемент 98А относится к группе, которая включает в себя синтаксические элементы 98А, 98А … 98A. Другими словами, синтаксические элементы 98А, 98А … 98A вместе обозначаются как синтаксический элемент 98А. Подобным образом, серии с 99В SE по 99К SE являются кодированными сериями для первых серий синтаксических элементов с 98В по 98К соответственно. Синтаксические элементы 98В и 98К относятся к объединенной группе, которая включает в себя синтаксические элементы 98В, 98В … 98B и 98К, 98К … 98K соответственно. Серия 99Х SE является кодированной серией для второй серии синтаксического элемента с самой короткой первой серией. Например, если первая серия 99В синтаксического элемента 98В является самой короткой первой серией, то серия 99Х SE является второй серией синтаксического элемента 98В. Однако, если первая серия 99К синтаксического элемента 99К является самой короткой серией синтаксического элемента, то серия 99Х SE является второй серией синтаксического элемента 98К. Таким образом, уровень заголовка может включать в себя, по меньшей мере, одну кодированную серию 99 SE для каждого синтаксического элемента перед любыми вторыми кодированными сериями любого из других синтаксических элементов 98. Это позволяет декодеру начать восстановление блоков некоторого слоя до того, как будет полностью декодирован целый уровень заголовка и остаточный уровень так, как это будет подробно описано ниже.
Таким образом, перемеженная уровневая структура 92В битового потока может быть скомпонована в серии 99 SE разных синтаксических элементов заголовка, перемеженные в уровне заголовка таким образом, что, когда серия одного из синтаксических элементов исчерпана (то есть завершается), то кодируется следующая серия для того же самого синтаксического элемента (если таковая имеется). По существу, перемеженная уровневая структура 92В битового потока компонуется динамически на основе значений каждой из серий, вместо того чтобы быть фиксированной структурой. Несмотря на то, что перемеженная уровневая структура 92В битового потока, представленная на фиг. 7С, показана как структура, включающая в себя только одну вторую серию, перемеженная уровневая структура 92В битового потока может включать в себя вторые серии для всех или какой-либо части синтаксических элементов. Дополнительно, синтаксические элементы заголовка могут включать в себя дополнительные серии (например, третьи серии, четвертые серии, пятые серии и так далее) для всех или какой-либо части синтаксических элементов.
Дополнительные серии синтаксических элементов заголовка кодируются в режиме перемежения в тех местоположениях, в которых завершаются предыдущая серия синтаксического элемента заголовка. По существу, третья серия синтаксического элемента заголовка может появиться перед второй серией другого синтаксического элемента заголовка и так далее в зависимости от длин серий синтаксических элементов заголовка.
Последовательная уровневая структура 92А битового потока и перемеженная уровневая структура 92В битового потока также содержат индикатор 97, который идентифицирует местоположение, в котором происходит переход от уровня заголовка и остаточного уровня. Несмотря на то, что в примере, приведенном на фиг. 7В и 7С, индикатор 97 расположен в месте перехода, в других случаях индикатор 97 может являться синтаксическим элементом заголовка в начале уровня заголовка, который указывает длину уровня заголовка.
Фиг. 8 представляет собой блок-схему последовательности операций модуля 46 энтропийного кодирования, формирующего уровневый кодированный битовый поток. Модуль 46 энтропийного кодирования принимает данные блока для видеоблока некоторого слоя (100). Модуль 46 энтропийного кодирования принимает данные блока от других компонентов видеокодера 20, например модуля 40 квантования или модуля 32 оценки движения. Принятые данные блока могут включать в себя остаточную информацию (например, в форме квантованных остаточных коэффициентов) и информацию заголовка (например, в форме одного или более синтаксических элементов заголовка, таких как один или более векторов движения, тип блока, режим предсказания, размер раздела, шаблон кодированного блока, дельта-QP, размер преобразования и других).
Модуль 50 разделения данных блока отделяет информацию заголовка блока от остаточной информации блока (102). Модуль 50 разделения данных блока может сохранить информацию заголовка и остаточную информацию в одном или более модулях памяти (104). В некоторых случаях, модули памяти могут быть отдельными модулями памяти. В некоторых случаях, модули памяти могут быть одним и тем же модулем памяти.
Модуль 46 энтропийного кодирования определяет, является ли блок окончанием слоя (106). Если блок не является последним блоком слоя, то модуль энтропийного кодирования принимает данные блока для последующего блока, отделяет информацию заголовка упомянутого последующего блока от остаточной информации упомянутого последующего блока и сохраняет разделенную информацию блока.
Если блок является последним блоком слоя, то модуль 54 группирования заголовка компонует информацию заголовка блоков упомянутого слоя для использования корреляции информации заголовка между блоками упомянутого слоя с использованием кодирования с переменной длиной (108). Модуль 54 группирования заголовка может группировать синтаксические элементы заголовка каждого из блоков группы на основе типа синтаксических элементов заголовка. Например, модуль группирования заголовка может группировать синтаксические элементы типа блока для блоков в группу синтаксических элементов типа блока. Модуль 54 группирования заголовка может также формировать аналогичные группы для других синтаксических элементов заголовка, таких как режим предсказания, размер раздела, вектор движения, CBP, QP, размер преобразования и других.
Модуль 46 энтропийного кодирования кодирует информацию заголовка для блоков слоя в уровень заголовка (110). Например, модуль 58 RLC выполняет кодирование длин серий каждой из групп синтаксических элементов заголовка для снижения избыточности и использования корреляции синтаксических элементов заголовка между блоками упомянутого слоя. В одном случае, модуль 58 RLC кодирует серии первого синтаксического элемента заголовка для блоков, за которыми следуют серии второго синтаксического элемента для упомянутых блоков и так далее до тех пор, пока модуль 58 RLC не кодирует серии для последнего синтаксического элемента для блоков. Альтернативно, модуль 58 RLC кодирует серии синтаксических элементов заголовка таким образом, что серии разных синтаксических элементов заголовка перемежаются между собой. После формирования серий синтаксических элементов для блоков упомянутого слоя, модуль 59 VLC кодирует серии синтаксических элементов для формирования уровня заголовка уровневого битового потока.
Модуль 46 энтропийного кодирования также может кодировать индикатор, идентифицирующий окончание уровня заголовка (112). В одном случае, модуль 59 VLC кодирует уникальный шаблон битов, который указывает окончание уровня заголовка. Альтернативно, модуль 59 VLC может кодировать синтаксический элемент в начале уровня заголовка, который указывает длину, например, в битах, уровня заголовка.
Модуль 46 энтропийного кодирования также кодирует остаточную информацию каждого из блоков для формирования остаточного уровня уровневого битового потока (114). Модуль 46 энтропийного кодирования также может кодировать остаточную информацию с использованием VLC-кодирования или арифметического кодирования. Таким образом, модуль энтропийного кодирования формирует уровневый кодированный битовый поток, который включает в себя первую последовательность битов, которая соответствует информации заголовка блоков, и вторую последовательность битов, которая соответствует остаточной информации блоков. Модуль 46 энтропийного кодирования передает уровневый кодированный поток (116).
Фиг. 9 представляет собой блок-схему последовательности операций, иллюстрирующую примерную работу модуля 60 энтропийного декодирования декодирующего уровневый кодированный битовый поток. Модуль 60 энтропийного декодирования принимает уровневый кодированный битовый поток видео некоторого слоя (120). Модуль 60 энтропийного декодирования декодирует уровень заголовка битового потока для получения синтаксических элементов заголовка блоков упомянутого слоя (122). Модуль 72 VLC-декодирования применяет способы декодирования с переменной длиной, например, посредством использования одной или более таблиц кодирования с переменной длиной, для декодирования уровня заголовка. После выполнения декодирования с переменной длиной для уровня заголовка, модуль 74 RLC-декодирования выполняет декодирование длин серий для уровня заголовка для получения информации заголовка для блоков упомянутого слоя.
Декодированная информация заголовка включает в себя количество синтаксических элементов, которые группируются на основе типов синтаксических элементов. В одном примере, синтаксические элементы могут быть сгруппированы таким образом, что синтаксические элементы первого типа (например, тип блока) для всех блоков слоя группируются вместе, синтаксические элементы второго типа (например, режим предсказания) для всех блоков упомянутого слоя группируются вместе и так далее. Альтернативно, синтаксические элементы информации заголовка могут перемежаться между собой. Например, по меньшей мере, одна серия для каждого синтаксического элемента может быть кодирована перед кодированием дополнительных серий любого из синтаксических элементов. Дополнительные серии синтаксических элементов кодируются, если предыдущая серия этого же синтаксического элемента завершается. Таким образом, дополнительные серии синтаксических элементов кодируются в тех местоположениях, в которых синтаксические элементы необходимы для декодирования текущего блока, тем самым снижая сложность установления связи синтаксических элементов заголовка и остаточной информации в декодере. Модуль 60 энтропийного декодирования сохраняет синтаксический элемент заголовка (124).
Модуль 60 энтропийного декодирования обнаруживает индикатор, который идентифицирует переход от уровня заголовка к остаточному уровню (126). После обнаружения перехода от уровня заголовка к остаточному уровню, модуль 72 VLC-декодирования декодирует остаточный уровень битового потока (128). В некоторых случаях модуль 72 VLC-декодирования может выбрать другой набор таблиц кодирования для декодирования остаточного уровня. Модуль 72 VLC-декодирования сохраняет остаточную информацию (130).
Модуль 79 установления связи заголовка устанавливает связь остаточной информации первого блока слоя с синтаксическими элементами заголовка блоков (132). Например, модуль 79 установления связи заголовка может устанавливать связь остаточной информации с первого блока упомянутого слоя с первым значением каждого из синтаксических элементов заголовка декодированного уровня заголовка. Модуль 60 энтропийного декодирования выдает данные блока для упомянутого блока другим компонентам видедекодера 26 для реконструкции упомянутого блока (134). В некоторых случаях, модуль 79 установления связи заголовка может выдавать части данных блока разным компонентам видеодекодера, как это было описано выше со ссылкой на фиг. 4.
Модуль 60 энтропийного декодирования определяет, является ли блок концом слоя (136). Если блок не является последним блоком слоя, то модуль 60 энтропийного декодирования устанавливает связь остаточной информации последующего блока упомянутого слоя с синтаксическими элементами упомянутого последующего блока. Если блок является последним блоком слоя, то модуль 60 энтропийного декодирования ожидает приема другого уровневого кодированного битового потока.
Фиг. 10 представляет собой блок-схему последовательности операций, иллюстрирующую примерную работу модуля 80 энтропийного декодирования, декодирующего перемеженный уровневый битовый поток. Модуль 80 энтропийного декодирования принимает перемеженный уровневый битовый поток видео некоторого слоя (140). Модуль 80 энтропийного декодирования обнаруживает индикатор в перемеженном уровневом битовом потоке, который идентифицирует переход между уровнем заголовка и остаточным уровнем (142). Модуль 80 энтропийного декодирования разделяет битовый поток на уровень заголовка и остаточный уровень (144). Модуль 80 энтропийного декодирования предоставляет в модуль 84 декодирования заголовка кодированный уровень заголовка, а также предоставляет в модуль 85 декодирования остаточной информации кодированный остаточный уровень (146).
Модуль 80 энтропийного декодирования декодирует уровень заголовка битового потока для получения синтаксических элементов заголовка для блоков слоя (146). Модуль 84 декодирования заголовка модуля 80 энтропийного декодирования может использовать способы VLC-декодирования или арифметического декодирования для получения серий синтаксических элементов заголовка и выполняет декодирование длин серий в отношении упомянутых серий для получения синтаксических элементов заголовка. Перемеженный уровневый битовый поток компонуется в серии различных синтаксических элементов заголовка перемеженных между собой. Последующие серии синтаксического элемента появляются, когда завершается предыдущая серия такого же элемента. Таким образом, кодированные серии синтаксических элементов размещаются в тех местоположениях, в которых синтаксические элементы необходимы для декодирования текущего блока, тем самым снижая сложность установления связи синтаксических элементов заголовка и остаточной информации в декодере. Модуль 80 энтропийного декодирования сохраняет декодированные синтаксические элементы заголовка части битового потока в памяти 86 информации заголовка (148).
Модуль 80 энтропийного декодирования декодирует остаточную информацию для получения остаточных коэффициентов преобразования (150). Модуль 85 декодирования остаточной информации модуля 85 энтропийного декодирования может декодировать остаточный уровень с использованием способов VLC-кодирования или арифметического кодирования для получения остаточных коэффициентов преобразования. Модуль 18 энтропийного декодирования сохраняет остаточные коэффициенты преобразования в памяти 88 остаточной информации (152). Модуль 80 энтропийного декодирования может декодировать остаточный уровень и уровень заголовка одновременно, таким образом снижая задержку декодирования и требования к памяти, обусловленные сохранением декодированной информации заголовка и остаточной информации для целого кодированного единичного элемента данных (например, слоя).
Модуль 80 энтропийного декодирования устанавливает связь остаточной информации первого блока слоя с соответствующими синтаксическими элементами заголовка блока для формирования данных блока для первого блока (154). Модуль 80 энтропийного декодирования выдает данные блока для первого блока для реконструкции первого блока посредством других компонентов модуля 80 энтропийного декодирования (156). Например, модуль 89 установления связи заголовка может формировать данные блока для первого блока упомянутого слоя, как только декодирована остаточная информация и информация заголовка первого блока. Другими словами, модуль 89 установления связи заголовка может формировать данные блока для первого блока, в то время как модуль 80 энтропийного декодирования все еще декодирует оставшуюся часть информации заголовка и остаточной информации.
Модуль 80 энтропийного декодирования определяет, является ли блок окончанием слоя (158). Если блок не является последним блоком слоя, то модуль 80 энтропийного декодирования устанавливает связь остаточной информации последующего блока упомянутого слоя с синтаксическими элементами заголовка упомянутого последующего блока, как только становятся доступными остаточная информация и синтаксические элементы заголовка упомянутого последующего блока. Таким образом, компоновка с перемежением уровня заголовка позволяет модулю 80 энтропийного декодирования выполнять синхронизированное, в режиме «блок за блоком» декодирование упомянутого слоя с уменьшенной величиной задержки и сниженными требованиями к памяти. Если блок является последним блоком слоя, то модуль 80 энтропийного декодирования ожидает приема другого уровневого кодированного битового потока.
Способы, описанные в настоящем раскрытии, могут быть осуществлены в аппаратном обеспечении, программном обеспечении, встроенном программном обеспечении или любой их комбинации. Любые признаки, описанные как модули или компоненты, могут быть осуществлены совместно в интегральном логическом устройстве или раздельно в качестве отдельных, но взаимодействующих логических устройств. В случае осуществления в программном обеспечении, упомянутые способы могут быть реализованы, по меньшей мере, частично посредством считываемого компьютером носителя данных, содержащего команды, которые, при их исполнении, выполняют один или более способов, описанных выше. Считываемый компьютером носитель данных может быть частью компьютерного программного продукта, который может включать в себя упаковочные материалы. Считываемый компьютером носитель данных может включать в себя оперативную память (RAM), синхронную динамическую память (SDRAM), постоянную память (ROM), энергонезависимую оперативную память (NVRAM), электрически стираемую программируемую постоянную память (EEPROM), память типа FLASH, магнитные или оптические носители хранения данных и другие подобные устройства. Упомянутые способы, дополнительно или альтернативно, могут быть реализованы, по меньшей мере, частично посредством считываемой компьютером среды передачи данных, которая переносит или передает код в форме команд или структур данных, к которым может быть осуществлен доступ и которые могут быть считаны и/или исполнены компьютером.
Код может быть исполнен одним или более процессорами, например одним или более цифровыми сигнальными процессорами (DSP), микропроцессорами общего назначения, специализированными интегральными схемами (ASIC), программируемыми вентильными матрицами (FPGA) или другими эквивалентными интегральными или дискретными логическими схемами. Соответственно, термин «процессор», используемый в настоящем описании, может относиться к любой предшествующей структуре или любой другой структуре, подходящей для осуществления способов, описанных в настоящем документе. Кроме того, в некоторых аспектах, функциональные возможности, описанные в настоящем документе, могут быть обеспечены в предназначенных для этого модулях программного обеспечения, или аппаратных модулях, выполненных с возможностью кодирования и декодирования, или могут быть встроены в объединенный кодер-декодер видео (CODEC).
Описаны различные варианты осуществления изобретения. Эти и другие варианты осуществления входят в объем притязаний, определяемый следующей далее формулой изобретения.