Кодирование изображений с малой задержкой

Иллюстрации

Показать все

Изобретение относится к параллельной обработке изображений с малой задержкой. Технический результат заключается в уменьшении сквозной задержки за счет уменьшения расходуемых издержек кодирования. Результат достигается за счет того, что изображение разбито и кодировано в единицах слайсов. Декодер выполнен с возможностью декодирования слайсов из потока данных, и декодер реагирует на участок синтаксического элемента в текущем слайсе из слайсов, чтобы декодировать текущий слайс в соответствии с одним из по меньшей мере двух режимов. Первый режим декодирования слайса из потока данных использует контекстно-адаптивное энтропийное декодирование, включающее в себя вывод контекстов через границы слайсов, непрерывное обновление вероятностей символа контекстов и инициализацию вероятностей символа. Второй режим декодирования слайса из потока данных использует контекстно-адаптивное энтропийное декодирование с ограничением вывода контекстов, чтобы не пересекать границы слайсов. 6 н. и 20 з.п. ф-лы, 32 ил., 5 табл.

Реферат

Настоящее изобретение относится к кодированию изображений с малой задержкой.

В действующей схеме HEVC (высокоэффективное видеокодирование) в качестве инструментальных средств для распараллеливания содержатся слайсы, энтропийные слайсы (прежние облегченные слайсы), тайлы и волновая параллельная обработка (WPP).

Для распараллеливания видеокодеров и декодеров разбиение на уровне изображений имеет несколько преимуществ по сравнению с другими подходами. В предыдущих видеокодеках, подобных H.264/AVC [1], разбиения изображения были возможны только с регулярными слайсами с высокой ценой в отношении эффективности кодирования. Для масштабируемого параллельного декодирования H.264/AVC необходимо объединять параллелизм на уровне макроблоков для восстановления изображения и параллелизм на уровне кадров для энтропийного декодирования. Этот подход, однако, обеспечивает ограниченное снижение латентности изображений и большое использование памяти. Чтобы преодолеть эти ограничения в кодек HEVC были включены новые стратегии разбиения изображения. Текущая эталонная версия программного обеспечения (HM-6) содержит 4 разных подхода: регулярные или нормальные слайсы, энтропийные слайсы, подпотоки волновой параллельной обработки (WPP) и тайлы (неперекрывающиеся изображения). Обычно эти разбиения изображения содержат набор наибольших единиц кодирования (LCU) или, в синонимической формулировке, единиц дерева кодирования (CTU), как определено в HEVC, или даже поднабор их.

Фиг. 1 изображает изображение 898, расположенное в качестве примера в регулярном слайсе 900 на строку 902 LCU или макроблоков в видеокадре. Регулярные или нормальные слайсы (как определено в H.264 [1]) имеют наибольшее ухудшение кодирования, так как они нарушают зависимости энтропийного декодирования и предсказания.

Энтропийные слайсы, подобно слайсам, нарушают зависимости энтропийного декодирования, но делают возможным предсказание (и фильтрацию) для пересечения границ слайсов.

В WPP разбиения изображения перемежаются по строке, и предсказанию разрешено использовать данные из блоков в других разбиениях. Таким образом минимизируются потери кодирования, тогда как одновременно может применяться волновой параллелизм. Перемежение, однако, нарушает причинность битового потока, так как предшествующему разбиению необходимо следующее разбиение для декодирования.

Фиг. 2, в качестве примера, изображает изображение 898, разделенное на две строки 904, 904b тайлов 906 горизонтального разбиения. Тайлы определяют горизонтальную 908 и вертикальную границы 910, которые разбивают изображение 898 на столбцы 912a, b, c и строки 904a, b тайлов. Подобно регулярным слайсам 900, тайлы 906 нарушают зависимости энтропийного декодирования и предсказания, но не требуют заголовка для каждого тайла.

Для каждого из этих методов количество разбиений может свободно выбираться кодером. Обычно, существование большего количества разбиений приводит к большим потерям сжатия. Однако при WPP распространение потерь не такое высокое, и поэтому количество разбиений изображения даже может быть фиксированным на один на строку. Это также приводит к нескольким преимуществам. Во-первых, для WPP гарантируется причинность битового потока. Во-вторых, реализации декодера могут принимать, что является доступной некоторая величина параллелизма, что также повышает разрешающую способность. И, наконец, ни одна из зависимостей выбора контекста и предсказания не должна нарушаться при декодировании в волновом порядке, приводя к относительно низким потерям кодирования.

Однако до настоящего времени все принципы параллельного кодирования в преобразовании не обеспечивают достижение высокой эффективности сжатия в комбинации с сохранением малой задержки. Это также верно для принципа WPP. Слайсы представляют собой наименьшие единицы транспортировки в конвейере кодирования, и несколько подпотоков WPP все же должны транспортироваться последовательно.

Следовательно, задачей настоящего изобретения является обеспечение принципа кодирования изображений, который делает возможным параллельное декодирование согласно, например, волновой параллельной обработке с повышенной эффективностью, как например, с еще большим уменьшением сквозной задержки или повышением эффективности кодирования посредством уменьшения расходуемых издержек кодирования.

Эта задача достигается предметом независимых пунктов формулы изобретения.

Основным открытием настоящего изобретения является то, что принципы параллельной обработки, такие как волновая параллельная обработка, могут быть реализованы с уменьшенной сквозной задержкой, если отказаться от принципа обычных слайсов, согласно которому слайсы или кодируются/декодируются полностью независимо от областей изображения вне соответствующего слайса, или по меньшей мере независимо от областей вне соответствующего слайса, что касается энтропийного кодирования, в пользу слайсов разных видов, а именно слайсов, называемых зависимыми слайсами, которые принимают во внимание взаимозависимости через границы слайсов, и других слайсов, которые не принимают во внимание, называемых, например, нормальными слайсами.

Другим основным открытием настоящего изобретения, которое может быть объединено с первым или использоваться индивидуально, является то, что принцип обработки WPP может быть сделан более эффективным, если используются синтаксические участки начала слайсов для определения расположения точек входа WPP.

Предпочтительные варианты осуществления настоящей заявки описаны ниже в отношении фигур, причем полезные варианты осуществления являются объектом зависимых пунктов формулы изобретения. На фигурах:

Фиг. 1 изображает изображение, разбитое, в качестве примера, на регулярный слайс на строку LCU или макроблоков в изображении;

Фиг. 2 изображает изображение, разделенное, в качестве примера, на две строки горизонтально разбитых тайлов;

Фиг. 3 изображает, в качестве примера, назначение параллельно кодированных разбиений слайсу или сегменту сетевой транспортировки;

Фиг. 4 изображает схематическое представление, иллюстрирующее обобщенную фрагментацию кадра посредством подхода кодирования тайлов для минимальной сквозной задержки;

Фиг. 5 изображает схематическое представление, иллюстрирующее примерную фрагментацию кадра посредством подхода кодирования WPP для минимальной сквозной задержки;

Фиг. 6 изображает схематическую блок-схему, иллюстрирующую сценарий преобразования с использованием видеоуслуг;

Фиг. 7 иллюстрирует схематически возможное временное планирование кодирования, передачи и декодирования для тайлов с обобщенными поднаборами с минимальной сквозной задержкой;

Фиг. 8 схематически изображает временное планирование, которое обычно достигает сквозной задержки;

Фиг. 9 иллюстрирует изображение, имеющее в качестве примера блоки дерева кодирования 11×9, которое разделено на два слайса;

Фиг. 10 иллюстрирует изображение, имеющее в качестве примера блоки дерева кодирования 13×8, которое разбито на три тайла;

Фиг. 11 изображает пример синтаксиса набора параметров последовательности;

Фиг. 12 изображает пример синтаксиса набора параметров изображения;

Фиг. 13 изображает пример синтаксиса заголовка слайса;

Фиг. 14 приводит в качестве примера разбиение изображения для обработки WPP на регулярный слайс и, для обработки с малой задержкой, на зависимые слайсы;

Фиг. 15 изображает пример для участка в синтаксисе набора параметров изображения;

Фиг. 16 изображает возможный синтаксис заголовка слайса;

Фиг. 17 схематически иллюстрирует взаимозависимости кодирования для нормальных слайсов (и зависимых слайсов);

Фиг. 18 изображает схематическое представление, сравнивающее кодирование для транспортировки с малой задержкой тайлов (волновая параллельная обработка, использующая зависимые слайсы);

Фиг. 19 иллюстрирует временное планирование, иллюстрирующее примерное кодирование WPP с конвейерной передачей с малой задержкой при использовании волновой параллельной обработки, использующей зависимые слайсы, как показано на правой стороне Фиг. 18;

Фиг. 20 изображает схематическое представление, иллюстрирующее улучшение робастности посредством использования регулярных слайсов в качестве привязок;

Фиг. 21 изображает другой вариант осуществления для синтаксиса заголовка слайса;

Фиг. 22 изображает другой вариант осуществления для синтаксиса набора параметров изображения;

Фиг. 23 изображает схематическое представление, иллюстрирующее процесс инициализации вероятностей символа для зависимого слайса в случае начала на левой границе изображения;

Фиг. 24 изображает схематическое представление декодера;

Фиг. 25 схематически изображает блок-схему декодера вместе со схематической иллюстрацией разбиения изображения на блоки кодирования и слайсы;

Фиг. 26 схематически изображает блок-схему кодера;

Фиг. 27 схематически изображает изображение, разбитое на нормальные и зависимые слайсы, названные здесь сегментами слайса;

Фиг. 28a и 28b схематически изображают изображение, разбитое на нормальные и зависимые слайсы, названные здесь сегментами слайса, с одной стороны, и тайлы, с другой стороны;

Фиг. 29 изображает блок-схему последовательности операций, иллюстрирующую процесс инициализации контекста, использующий зависимые слайсы;

Фиг. 30 изображает блок-схему последовательности операций, иллюстрирующую процесс сохранения контекста для использования зависимых слайсов; и

Фиг. 31 схематически изображает разные возможности сигнализации точек входа WPP.

В нижеследующем описание начинается с описания современных принципов предоставления возможности параллельной обработки изображений и кодирования с малой задержкой соответственно. Кратко изложены проблемы, имеющие место при желании иметь обе возможности. В частности, как оказывается из последующего описания, принцип подпотоков WPP, как предлагается до настоящего времени, тем или иным образом вступает в противоречие с желанием иметь малую задержку из-за необходимости передавать подпотоки WPP посредством их группирования в один слайс. Нижеследующие варианты осуществления представляют принципы параллельной обработки, такие как принцип WPP, применяемые в применениях, требующих даже меньшую задержку посредством расширения принципа слайса, а именно введением другого типа слайса, позже названных зависимыми слайсами.

Минимизация сквозной задержки видео от захвата до отображения является одной из главных целей в приложениях, таких как видеоконференция и т.п.

Цепочка обработки сигнала для передачи цифрового видео состоит из камеры, устройства захвата, кодера, инкапсуляции, передачи, демультиплексора, декодера, рендера и дисплея. Каждый из этих этапов вносит свой вклад в сквозную задержку посредством буферизации данных изображения перед их последовательной передачей на последующий этап.

Некоторые приложения требуют минимизации такой задержки, например, удаленное манипулирование объектами в опасных зонах, без прямой видимости манипулируемого объекта, или минимально инвазивная хирургия. Даже короткая задержка может приводить к серьезным затруднениям надлежащего манипулирования или даже приводить к катастрофическим ошибкам.

Во многих случаях весь видеокадр буферизуется на этапе обработки, например, чтобы сделать возможной обработку интра-кадра. Некоторые этапы собирают данные, чтобы формировать пакеты, которые направляются на следующий этап. Обычно, существует нижняя граница для задержки, которая вытекает из требований к локальной обработке. Это анализируется для каждого индивидуального этапа более подробно ниже.

Обработка внутри камеры необязательно требует обработки сигнала интра-кадра, поэтому минимальная задержка определяется временем интегрирования датчика, которое ограничивается частотой кадров и некоторыми проектными решениями производителя аппаратных средств. Выходной сигнал камеры обычно связан с порядком сканирования, который обычно начинает обработку в верхнем левом углу, перемещается в верхний правый угол и продолжает построчно до нижнего правого угла. Следовательно, оно занимает длительность около одного кадра до тех пор, пока все данные не будут перенесены с датчика на выход камеры.

Устройство захвата может направлять данные камеры непосредственно после приема; однако оно обычно буферизует некоторые данные и генерирует пачки, чтобы оптимизировать доступ к данным для памяти или запоминающего устройства. Кроме того, соединение между камерой/устройством захвата и памятью компьютера обычно ограничивает скорость передачи данных для направления захваченных данных изображения в память для дальнейшей обработки (кодирования). Обычно камеры подключаются посредством универсальной последовательной шины (USB) 2.0 или в скором времени USB 3.0, которая всегда включает в себя частичную транспортировку данных изображения на кодер. Это ограничивает возможность распараллеливания на стороне кодера в сценариях с предельной малой задержкой, т.е. кодер пытается начать кодирование как можно быстрее, когда данные становятся доступными от камеры, например, в порядке сканирования растра от верха до низа изображения.

В кодере имеются некоторые степени свободы, которые допускают принять компромиссное решение по эффективности кодирования, в отношении скорости передачи данных, необходимой для некоторой верности воспроизведения видео, для снижения задержки обработки.

Кодер использует данные, которые уже были посланы для предсказания изображения, подлежащего последующему кодированию. Обычно, разность между фактическим изображением и предсказанием может кодироваться с меньшим количеством битов, чем требовалось бы без предсказания. Это значения предсказания должны быть доступны на декодере, таким образом предсказание основывается на ранее декодированных участках этого же изображения (внутрикадровое предсказание) или на других изображениях (межкадровое предсказание), которые были обработаны ранее. Стандарты видеокодирования перед HEVC используют только часть изображения над этой же строкой или на ней, но слева - которые были ранее кодированы - для внутрикадрового предсказания, предсказания вектора движения и энтропийного кодирования (контекстно-адаптивное двоичное арифметическое кодирование (CABAC)).

В дополнение к оптимизации структуры предсказания может учитываться влияние параллельной обработки. Параллельная обработка требует идентификации областей изображения, которые могут быть обработаны независимо. По практическим причинам выбираются прилегающие области, такие как горизонтальные или вертикальные прямоугольники, которые часто называют «тайлами». В случае ограничений на малую задержку эти области должны предоставлять возможность выполнения параллелизованного кодирования данных, поступающих от устройства захвата в память, как можно скорее. Предполагая пересылку содержимого памяти сканирования растра, имеют смысл вертикальные разбиения необработанных данных, чтобы начать кодирование немедленно. Внутри таких тайлов, которые делят изображение на вертикальные разбиения (ср. фигуру ниже), внутреннее предсказание, предсказание вектора движения и энтропийное кодирование (CABAC) могут приводить к приемлемой эффективности кодирования. Чтобы минимизировать задержку, только часть изображения, начиная сверху, переносится в память кадров кодера, и параллельная обработка должна начинаться в вертикальных тайлах.

Другим путем разрешения параллельной обработки является использование WPP в регулярном слайсе, который будет сравниваться с тайлами, «строкой» тайлов, включенных в единственный слайс. Данные в этом слайсе также могут кодироваться параллельным образом, используя подпотоки WPP, в пределах слайса. Разделение изображения на слайсы 900 и тайлы/подпотоки 914 WPP показано в виде примеров Фиг. 3/1.

Фиг. 3, таким образом, изображает назначение параллельно кодированных разбиений, таких как 906 или 914, слайсу или сегменту сетевой транспортировки (единственный сетевой пакет или многочисленные сетевые 900 пакеты).

Инкапсуляция кодированных данных в единицы уровня сетевой абстракции (NAL), как определено в H.264 или HEVC, перед передачей или во время процесса кодирования добавляет некоторый заголовок к блокам данных, который допускает идентификацию каждого блока и переупорядочение блоков, если это применимо. В стандартном случае, не требуется дополнительная сигнализация, так как порядок элементов кодирования всегда находится в порядке декодирования, то есть определяется явное назначение положения тайла или общего фрагмента кодирования.

Если параллельная обработка рассматривается с дополнительным транспортным уровнем для параллельной транспортировки с малой задержкой, т.е. транспортный уровень может переупорядочивать разбиения изображения для тайлов, чтобы допускать передачу с малой задержкой, подразумевая рассылку фрагментов, как показано на Фиг. 4, когда они кодируются. Эти фрагменты также могут быть не полностью кодированными слайсами, они могут быть поднабором слайса, или могут содержаться в зависимом слайсе.

В случае создания дополнительных фрагментов существует компромисс между эффективностью, которая является наибольшей с большими блоками данных, так как информация заголовка добавляет постоянное количество байтов, и задержкой, так как большие блоки данных параллельных кодеров необходимо буферизовать перед передачей. Общая задержка может быть уменьшена, если кодированное представление вертикальных тайлов 906 разделяется на ряд фрагментов 916, которые передаются, как только будет полностью кодирован фрагмент. Размер каждого фрагмента может определяться на основе фиксированной области изображения, такой как макроблоки, LCU или на основе максимальных данных, как показано на Фиг. 4.

Фиг. 4, таким образом, изображает обобщенную фрагментацию кадра посредством подхода кодирования тайлов для минимальной сквозной задержки.

Аналогично, Фиг. 5 изображает фрагментацию кадра с подходом кодирования WPP для минимальной сквозной задержки.

Передача может добавлять дополнительную задержку, например, если применяется дополнительная ориентированная на блоки обработка, такая как коды прямой коррекции ошибок, повышающие робастность передачи. Кроме того, сетевая инфраструктура (маршрутизаторы и т.д.) или физический уровень могут добавлять задержку, она обычно известна как латентность для соединения. В дополнение к латентности скорость передачи битов при передаче определяет время (задержку) для пересылки данных от Стороны a к Стороне b при разговоре, как показано на Фиг. 6, который использует видеоуслуги.

Если кодированные блоки данных передаются вне порядка, необходимо учитывать задержку на переупорядочение. Декодирование может начинаться, как только поступит единица данных, предполагая, что являются доступными другие единицы данных, которые должны декодироваться перед этой.

В случае тайлов не существует зависимостей между тайлами, таким образом, тайл может декодироваться немедленно. Если были созданы фрагменты тайла, такие как отдельные слайсы на каждый фрагмент, как показано на Фиг. 4, фрагменты могут непосредственно транспортироваться, как только они будут кодированы соответственно тому, как были кодированы их содержащиеся LCU или единицы кодирования (CU).

Рендерер собирает выходные сигналы механизмов параллельного декодирования и направляет объединенное изображение построчно на дисплей.

Дисплей не добавляет обязательно никакой задержки, но на практике может выполнять некоторую внутрикадровую обработку перед тем, как данные изображения фактически отображаются. Это зависит от проектных решений производителя аппаратных средств.

Суммируя, изобретатели могут оказывать влияние на этапы кодирования, инкапсуляции, передачи и декодирования, чтобы достичь минимальной сквозной задержки. Если изобретатели используют параллельную обработку, тайлы и фрагментацию в тайлах, общая задержка может быть значительно уменьшена, как показано на Фиг. 7, по сравнению с обычно используемой цепочкой обработки, которая добавляет задержку около одного кадра на каждом из этих этапов, как показано на Фиг. 8.

В частности, в то время как Фиг. 7 изображает кодирование, передачу и декодирование для тайлов с обобщенными поднаборами с минимальной сквозной задержкой, Фиг. 8 иллюстрирует обычно достигаемую сквозную задержку.

HEVC позволяет использовать разбиение слайса, разбиение тайла и следующим образом.

Тайл: Целочисленное количество блоков дерева, совместно встречающихся в одном столбце и одной строке, упорядоченное последовательно в сканировании растра блоков дерева тайла. Деление каждого изображения на тайлы представляет собой разбиение. Тайлы в изображении упорядочиваются последовательно в сканировании растра тайла изображения. Хотя слайс содержит блоки дерева, которые являются последовательными в сканировании растра блоков дерева тайла, эти блоки дерева не являются обязательно последовательными в сканировании растра блоков дерева изображения.

Слайс: Целочисленное количество блоков дерева, упорядоченное последовательно в сканировании растра. Деление каждого изображения на слайсы представляет собой разбиение. Адреса блоков дерева выводятся из адреса первого блока дерева в слайсе (как представлено в заголовке слайса).

Сканирование растра: Отображение прямоугольного двумерного образца на одномерный образец, так что первые вводы в одномерном образце выполняются из первой верхней строки двумерного образца, сканируемого слева направо, за которым следуют аналогично вторая, третья и т.д. строки образца (идя вниз), причем каждая сканируется слева направо.

Блок дерева: блок N×N отсчетов яркости и два соответствующих блока отсчетов цветности изображения, которое имеет три массива отсчетов, или блок N×N отсчетов монохромного изображения или изображения, которое кодируется с использованием трех отдельных цветовых плоскостей. Деление слайса на блоки дерева представляет собой разбиение.

Разбиение: Деление набора на поднаборы, так что каждый элемент набора находится точно в одном из поднаборов.

Квадродерево: Дерево, в котором родительский узел может быть разбит на четыре дочерних узла. Дочерний узел может стать родительским узлом для другого разбиения на четыре дочерних узла.

В нижеследующем объясняется пространственное подразделение изображений, слайсов и тайлов. В частности, следующее описание задает то, как изображение разбивается на слайсы, тайлы и блоки дерева кодирования. Изображения делятся на слайсы и тайлы. Слайс представляет собой последовательность блоков дерева кодирования. Аналогично, тайл представляет собой последовательность блоков дерева кодирования.

Отсчеты обрабатываются в единицах блоков дерева кодирования. Размером массива яркости для каждого блока дерева в отсчетах как по ширине, так и по высоте является CtbSize. Шириной и высотой массивов цветности для каждого блока дерева кодирования являются CtbWidthC и CtbHeightC соответственно. Например, изображение может делиться на два слайса, как показано на следующей фигуре. В качестве другого примера, изображение может делиться на три тайла, как показано на второй последующей фигуре.

В отличие от слайсов, тайлы всегда являются прямоугольными и всегда содержат целочисленное количество блоков дерева кодирования в сканировании растра блоков дерева кодирования. Тайл может состоять из блоков дерева кодирования, содержащихся в более, чем одном слайсе. Аналогично, слайс может содержать блоки дерева кодирования, содержащиеся в более, чем одном тайле.

Фиг. 9 иллюстрирует изображение 898 с 11 на 9 блоками 918 дерева кодирования, которое разбивается на два слайса 900a, b.

Фиг. 10 иллюстрирует изображение с 13 на 8 блоками 918 дерева кодирования, которое разбивается на три тайла.

Каждому блоку 918 дерева кодирования 898 назначается разбиение, сигнализирующее для идентификации размеров блока для внутреннего или внешнего предсказания и для кодирования с преобразованием. Разбиение представляет собой рекурсивное разбиение методом квадродерева. Корень квадродерева ассоциируется с блоком дерева кодирования. Квадродерево разделяется до тех пор, пока не будет достигнут лист, который упоминается как блок кодирования. Блок кодирования представляет собой корневой узел двух деревьев, дерева предсказания и дерева преобразования.

Дерево предсказания задает положение и размер блоков предсказания. Блоки предсказания и ассоциированные данные предсказания упоминаются как единица предсказания.

Фиг. 11 изображает примерный синтаксис RBSP набора параметров последовательности.

Дерево преобразования задает положение и размер блоков преобразования. Блоки преобразования и ассоциированные данные преобразования упоминаются как единица преобразования.

Информация о разбиении для яркости и цветности является идентичной для дерева предсказания и может быть идентичной или может не быть идентичной для дерева преобразования.

Блок кодирования, ассоциированные данные кодирования и ассоциированные единицы предсказания и преобразования вместе образуют единицу кодирования.

Процесс для преобразования адреса блока дерева кодирования в порядке растра блока дерева кодирования в порядок сканирования тайла может быть следующим:

Выходами данного процесса являются

- массив CtbAddrTS[ctbAddrRS] с ctbAddrRS в диапазоне от 0 до PicHeightInCtbs * PicWidthInCtbs-1 включительно.

- массив TileId[ctbAddrTS] с ctbAddrTS в диапазоне от 0 до PicHeightInCtbs * PicWidthInCtbs-1 включительно.

Массив CtbAddrTS[] выводится следующим образом:

Массив TileId[] выводится следующим образом:

Соответствующий примерный синтаксис показан на Фиг. 11, 12 и 13, причем Фиг. 12 имеет примерный синтаксис RBSP набора параметров изображений. Фиг. 13 изображает примерный синтаксис заголовка слайса.

В примере синтаксиса может применяться следующая семантика:

entropy_slice_flag равный 1 задает, что подразумевается, что значение неприсутствующих синтаксических элементов заголовка слайса равно значению синтаксических элементов заголовка слайса в предшествующем слайсе, где предшествующий слайс определяется как слайс, содержащий блок дерева кодирования с расположением (SliceCtbAddrRS-1). entropy_slice_flag должен быть равен 0, когда SliceCtbAddrRS равен 0.

tiles_or_entropy_coding_sync_idc равный 0 задает, что существует только один тайл в каждом изображении в кодированной видеопоследовательности, и не вызывается конкретный процесс синхронизации для контекстных переменных перед декодированием первого блока дерева кодирования строки блоков дерева кодирования.

tiles_or_entropy_coding_sync_idc равный 1 задает, что может быть более одного тайла в каждом изображении в кодированной видеопоследовательности, и не вызывается конкретный процесс синхронизации для контекстных переменных перед декодированием первого блока дерева кодирования строки блоков дерева кодирования.

tiles_or_entropy_coding_sync_idc равный 2 задает, что существует только один тайл в каждом изображении в кодированной видеопоследовательности, конкретный процесс синхронизации для контекстных переменных вызывается перед декодированием первого блока дерева кодирования строки блоков дерева кодирования, и конкретный процесс запоминания для контекстных переменных вызывается после декодирования двух блоков дерева кодирования строки блоков дерева кодирования.

Значение tiles_or_entropy_coding_sync_idc должно быть в диапазоне от 0 до 2 включительно.

num_tile_columns_minus1 плюс 1 задает количество столбцов тайла, разбивающих изображение.

num_tile_rows_minus1 плюс 1 задает количество строк тайла, разбивающих изображение.

Когда num_tile_columns_minus1 равен 0, num_tile_rows_minus1 не должен быть равен 0.

Одно или оба из следующих условий должны выполняться для каждого слайса и тайла:

- Все кодированные блоки в слайсе принадлежат одному и тому же тайлу.

- Все кодированные блоки в тайле принадлежат одному и тому же слайсу.

ПРИМЕЧАНИЕ - В пределах одного и того же изображения могут быть как слайсы, которые содержат многочисленные тайлы, так и тайлы, которые содержат многочисленные слайсы.

uniform_spacing_flag равный 1 задает, что границы столбцов и, аналогично, границы строк распределяются равномерно по изображению. uniform_spacing_flag равный 0 задает, что границы столбцов и, аналогично, границы строк не распределяются равномерно по изображению, но сигнализируются однозначно, используя синтаксические элементы column_width[i] и row_height[i].

column_width[i] задает ширину i-ого столбца тайла в единицах блоков дерева кодирования.

row_height[i] задает высоту i-ой строки тайла в единицах блоков дерева кодирования.

Значения ColumnWidth[i], задающие ширину i-ого столбца тайла в единицах блоков дерева кодирования, и значения ColumnWidthInLumaSamples[i], задающие ширину i-ого столбца тайла в единицах отсчетов яркости, выводятся следующим образом:

Значения RowHeight[i], задающие высоту i-ой строки тайла в единицах блоков дерева кодирования, выводятся следующим образом:

Значения ColBd[i], задающие расположение левой границы столбца i-ого столбца тайла в единицах блоков дерева кодирования, выводятся следующим образом:

Значения RowBd[i], задающие расположение верхней границы строки i-ой строки тайла в единицах блоков дерева кодирования, выводятся следующим образом:

num_substreams_minus1 плюс 1 задает максимальное количество поднаборов, включенных в слайс, когда tiles_or_entropy_coding_sync_idc равен 2. Когда он не присутствует, делается заключение, что значение num_substreams_minus1 равно 0.

num_entry_point_offsets задает количество синтаксических элементов entry_point_offset[i] в заголовке слайса. Когда tiles_or_entropy_coding_sync_idc равен 1, значение num_entry_point_offsets должно быть в диапазоне от 0 до (num_tile_columns_minus1 + 1) * (num_tile_rows_minus1 + 1) - 1 включительно. Когда tiles_or_entropy_coding_sync_idc равен 2, значение num_entry_point_offsets должно быть в диапазоне от 0 до num_substreams_minus1 включительно. Когда не присутствует, подразумевается, что значение num_entry_point_offsets равно 0.

offset_len_minus1 плюс 1 задает длину в битах синтаксических элементов entry_point_offset[i].

entry_point_offset[i] задает смещение i-ой точки входа в байтах и должно быть представлено посредством offset_len_minus1 плюс 1 битов. Кодированная единица NAL слайса состоит из num_entry_point_offsets + 1 поднаборов, причем значения индекса поднабора находятся в диапазоне от 0 до num_entry_point_offsets включительно. Поднабор 0 состоит из байтов от 0 до entry_point_offset[0] - 1 включительно, кодированной единицы NAL слайса, поднабор k, с k в диапазоне от 1 до num_entry_point_offsets - 1 включительно, состоит из байтов от entry_point_offset[k-1] до entry_point_offset[k] + entry_point_offset[k-1] - 1 включительно, кодированной единицы NAL слайса, и последний поднабор (с индексом поднабора равным num_entry_point_offsets) состоит из оставшихся байтов кодированной единицы NAL слайса.

ПРИМЕЧАНИЕ - Заголовок единицы NAL и заголовок слайса кодированной единицы NAL слайса всегда включены в поднабор 0.

Когда tiles_or_entropy_coding_sync_idc равен 1 и num_entry_point_offsets больше 0, каждый поднабор должен содержать все кодированные биты одного или многих завершенных тайлов, и количество поднаборов должно быть равно или меньше количеству тайлов в слайсе.

Когда tiles_or_entropy_coding_sync_idc равен 2 и num_entry_point_offsets больше 0, поднабор k для каждого из всех возможных значений k должен содержать все биты, подлежащие использованию во время процесса инициализации для текущего указателя k битового потока.

Что касается семантики данных слайса, то может применяться следующее.

end_of_slice_flag равный 0 задает, что следует другой макроблок в слайсе.

end_of_slice_flag равный 1 задает окончание слайса и что не следует другой макроблок.

entry_point_marker_two_3bytes представляет собой последовательность фиксированного значения из 3 байтов равную 0x000002. Этот синтаксический элемент называется префиксом маркера входа.

tile_idx_minus_1 задает TileID в порядке сканирования растра. Первый тайл в изображении должен иметь TileID равный 0. Значение tile_idx_minus_1 должно быть в диапазоне от 0 до (num_tile_columns_minus1 + 1) * ( num_tile_rows_minus1 + 1) - 1.

Процесс синтаксического анализа CABAC для данных слайса может быть следующим:

Этот процесс вызывается при синтаксическом анализе синтаксических элементов с дескриптором ae(v).

Входами для этого процесса являются запрос значения синтаксического элемента и значения синтаксически анализированных синтаксических элементов.

Выходом этого процесса является значение синтаксического элемента.

В начале синтаксического анализа данных слайса в слайсе вызывается процесс инициализации процесса синтаксического анализа CABAC. Когда tiles_or_entropy_coding_sync_idc равен 2 и num_substreams_minus1 больше 0, таблица отображения BitStreamTable c num_substreams_minus1 + 1 элементами, задающими таблицу указателей битового потока для использования для последующего выведения текущего указателя битового потока, выводится следующим образом.

- BitStreamTable[0] инициализируется на содержание указателя битового потока.

- Для всех индексов i больше 0 и меньше num_substreams_minus1 + 1, BitStreamTable[i] содержит указатель битового потока на entry_point_offset[i] байтов после BitStreamTable[i-1].

Текущий указатель битового потока устанавливается на BitStreamTable[0].

Адрес минимального блока кодирования блока дерева кодирования, содержащего пространственный соседний блок T, ctbMinCbAddrT, выводится с использованием расположения (x0, y0) верхнего левого отсчета яркости текущего блока дерева кодирования, например, следующим образом.

Переменная availableFlagT получается посредством вызова соответствующего процесса вывода доступности блока кодирования с ctbMinCbAddrT в качестве входа.

В начале синтаксического анализа дерева кодирования и tiles_or_entropy_coding_sync_idc равным 2, и num_substreams_minus1 больше 0, применяется следующее.

- Если CtbAddrRS % PicWidthInCtbs равняется 0, применяется следующее.

- Когда availableFlagT равен 1, вызывается процесс синхронизации процесса синтаксического анализа CABAC, как определено в подпункте «Процесс синхронизации для контекстных переменных».

- Вызывается процесс декодирования для двоичных решений перед завершением, за которым следует процесс инициализации для механизма арифметического декодирования.

- Текущий указатель битового потока устанавливается на указание BitStreamTable[i] с индексом i, выводимым следующим образом.

i=(CtbAddrRS/PicWidthInCtbs) % (num_substreams_minus1 + 1)

- Иначе, если CtbAddrRS % PicWidthInCtbs равен 2, процесс запоминания процесса синтаксического анализа CABAC вызывается так, как задается в подпункте «Процесс запоминания для контекстных переменных».

Процесс инициализации может быть следующим:

Выходы этого процесса инициализируются внутренними переменными CABAC.

Его специальные процессы вызываются при начале синтаксического анализа данных слайса в слайсе, или при начале синтаксического анализа данных дерева кодирования, и деревом кодирования является первое дерево кодирования в тайле.

Процесс запоминания для контекстных переменных может быть следующим:

Входами этого процесса являются контекстные переменные CABAC, индексированные посредством ctxIdx.

Выходом этого процесса являются переменные TableStateSync и TableMPSSync, содержащие значения переменных m и n, используемых в процессе инициализации контекстных переменных, которые назначаются синтаксическим элементам за исключением флага окончания слайса.

Для каждой контекстной переменной соответствующие элементы n и m таблиц TableStateSync и TableMPSSync инициализируются до соответствующих pStateIdx и valMPS.

Процесс синхронизации для контекстных переменных может быть следующим:

Входами этого процесса являются переменные TableStateSync и TableMPSSync, содержащие значения переменных n и m, используемых в процессе запоминания контекстных переменных, которые назначаются синтаксическим элементам за исключением флага окончания слайса.

Выходами этого процесса являются контекстные переменные CABAC, индексируемые посредством ctxIdx.

Для каждой контекстной переменной соответствующие контекстны