СПОСОБ И АППАРАТНЫЙ КОМПОНЕНТ СИГНАЛИЗАЦИИ ЧИСЛА КАНДИДАТОВ ДЛЯ РЕЖИМА СЛИЯНИЯ Российский патент 2024 года по МПК H04N19/52 

Описание патента на изобретение RU2823267C1

ПЕРЕКРЕСТНАЯ ССЫЛКА НА СВЯЗАННЫЕ ЗАЯВКИ

Данная патентная заявка испрашивает приоритет по US62/961,159, поданной 14 января 2020 года. Раскрытие вышеупомянутой патентной заявки включается в настоящий документ путем этой ссылки во всей своей полноте.

ОБЛАСТЬ ТЕХНИКИ

Варианты осуществления настоящей заявки в целом относятся к области кодирования/декодирования движущегося изображения и, в частности, к сигнализации числа кандидатов для режима слияния.

УРОВЕНЬ ТЕХНИКИ

Кодирование/декодирование видео (кодирование и декодирование видео) используется в широком спектре приложений для цифрового видео, например, для вещания цифрового телевидения, передачи видео через Интернет и мобильные сети, разговорных приложений в реальном времени, таких как видеочат, видеоконференции, дисков DVD и Blu-ray, систем сбора и редактирования видеоконтента, и видеокамер охранных приложений.

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

СУЩНОСТЬ ИЗОБРЕТЕНИЯ

Варианты осуществления настоящей заявки обеспечивают аппаратные компоненты и способы для кодирования и декодирования по независимым пунктам формулы изобретения.

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

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

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

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

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

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

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

В одной реализации упомянутое пороговое значение равно 2.

В одной реализации упомянутое предустановленное значение равно 1.

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

В одной реализации первый индикатор получают согласно синтаксическому элементу, закодированному в битовый поток.

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

В одной реализации значение второго индикатора получают из набора параметров последовательности, SPS, битового потока. Например, синтаксически анализируя синтаксический элемент в наборе параметров последовательности, SPS битового потока для получения значения второго индикатора.

В одной реализации значение третьего индикатора получают из набора параметров последовательности, SPS, битового потока. Например, синтаксически анализируя синтаксический элемент в наборе параметров последовательности, SPS битового потока для получения значения второго индикатора.

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

Способ согласно первому аспекту изобретения может быть выполнен аппаратным компонентом согласно второму аспекту изобретения. Дополнительные признаки и формы реализации способа согласно первому аспекту изобретения соответствуют признакам и формам реализации аппаратного компонента согласно второму аспекту изобретения.

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

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

В одной реализации упомянутое пороговое значение равно 2.

В одной реализации упомянутое предустановленное значение равно 1.

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

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

В одной реализации значение второго индикатора получают из набора параметров последовательности, SPS, битового потока.

В одной реализации значение третьего индикатора получают из набора параметров последовательности, SPS, битового потока.

В одной реализации раскрыт способ получения максимального числа кандидатов для режима слияния с геометрическим разделением для декодирования видео, при этом способ содержит:

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

Третий аспект настоящего изобретения обеспечивает способ кодирования максимального числа кандидатов для режима слияния с геометрическим разделением, причем способ содержит:

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

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

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

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

В одной реализации упомянутое пороговое значение равно 2.

В одной реализации упомянутое предустановленное значение равно 1.

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

В одной реализации значение второго индикатора кодируется в наборе параметров последовательности, SPS, битового потока, когда значение первого индикатора больше или равно упомянутому пороговому значению.

В одной реализации значение второго индикатора кодируют в наборе параметров последовательности, SPS, битового потока.

В одной реализации значение третьего индикатора кодируют в набор параметров последовательности, SPS, битового потока.

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

Способ согласно третьему аспекту изобретения может быть выполнен аппаратным компонентом согласно четвертому аспекту изобретения. Дополнительные признаки и формы реализации способа согласно третьему аспекту изобретения соответствуют признакам и формам реализации аппаратного компонента согласно четвертому аспекту изобретения.

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

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

В одной реализации упомянутое пороговое значение равно 2.

В одной реализации упомянутое предустановленное значение равно 1.

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

В одной реализации значение второго индикатора кодируется в наборе параметров последовательности, SPS, битового потока, когда значение первого индикатора больше или равно упомянутому пороговому значению.

В одной реализации значение второго индикатора кодируют в наборе параметров последовательности, SPS, битового потока.

В одной реализации значение третьего индикатора кодируют в набор параметров последовательности, SPS, битового потока.

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

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

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

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

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

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

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

Двенадцатый аспект настоящего изобретения обеспечивает долговременный носитель информации, содержащий битовый поток, кодируемый/декодируемый способом по любому из вышеуказанных вариантов осуществления. Тринадцатый аспект настоящего изобретения обеспечивает битовый поток для видеосигнала, кодированный путем включения в его состав множества синтаксических элементов, причем упомянутое множество синтаксических элементов содержит второй индикатор (такой как sps_geo_enabled_flag), и при этом третий индикатор sps_max_num_merge_cand_minus_max_num_geo_cand сигнализируется условно на основе по меньшей мере значения sps_geo_enabled_flag. Четырнадцатый аспект настоящего изобретения обеспечивает долговременный носитель информации, который включает в себя закодированный битовый поток, декодируемый устройством декодирования изображения, причем битовый поток генерируется путем деления кадра видеосигнала или сигнала изображения на множество блоков и включает в себя множество синтаксических элементов, при этом упомянутое множество синтаксических элементов содержит третий индикатор (такой как sps_max_num_merge_cand_minus_max_num_geo_cand) согласно любому из предшествующих притязаний.

Пятнадцатый аспект настоящего изобретения обеспечивает способ декодирования видео, причем способ содержит:

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

построение списка кандидатов на слияние для текущего блока кодирования согласно векторам движения соседних блоков у текущего блока кодирования;

получение индекса слияния согласно значению третьего индикатора;

получение вектора движения текущего блока кодирования согласно индексу слияния и списку кандидатов на слияние;

восстановление текущего блока кодирования согласно вектору движения текущего блока кодирования.

Шестнадцатый аспект настоящего изобретения обеспечивает аппаратный компонент декодирования видео, причем аппаратный компонент декодирования видео содержит: модуль приема, который выполнен с возможностью получения битового потока для видеопоследовательности; модуль получения, который выполнен с возможностью получения значения первого индикатора согласно битовому потоку, при этом первый индикатор представляет максимальное число кандидатов предсказания вектора движения, MVP, на слияние; причем модуль получения выполнен с возможностью получения значения второго индикатора согласно битовому потоку, при этом второй индикатор представляет то, является ли основанная на геометрическом разделении компенсация движения включенной для упомянутой видеопоследовательности; модуль синтаксического анализа, который выполнен с возможностью синтаксического анализа значения третьего индикатора из битового потока, когда значение первого индикатора превышает пороговое значение и когда значение второго индикатора равно предустановленному значению, при этом третий индикатор представляет максимальное число кандидатов для режима слияния с геометрическим разделением, вычитаемое из значения первого индикатора;

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

причем модуль получения выполнен с возможностью получения индекса слияния согласно значению третьего индикатора;

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

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

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

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

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

КРАТКОЕ ОПИСАНИЕ ЧЕРТЕЖЕЙ

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

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

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

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

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

ФИГ. 4 представляет собой блок-схему, иллюстрирующую пример аппаратного компонента кодирования или аппаратного компонента декодирования;

ФИГ. 5 представляет собой блок-схему, иллюстрирующую другой пример аппаратного компонента кодирования или аппаратного компонента декодирования;

ФИГ. 6 представляет собой блок-схему последовательности операций оценки параметра и принятия решения на стороне кодера о взвешенном предсказании;

ФИГ. 7 иллюстрирует пример режима треугольного предсказания;

ФИГ. 8 иллюстрирует пример режима геометрического предсказания;

ФИГ. 9 иллюстрирует другой пример режима геометрического предсказания;

ФИГ. 10 представляет собой блок-схему, показывающую примерную структуру системы 3100 предоставления контента, которая реализует службу доставки контента;

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

ФИГ. 12 представляет собой блок-схему, иллюстрирующую пример способа интер-предсказания согласно настоящей заявке;

ФИГ. 13 представляет собой блок-схему, иллюстрирующую пример аппаратного компонента для интер-предсказания согласно настоящей заявке;

ФИГ. 14 представляет собой блок-схему, иллюстрирующую другой пример аппаратного компонента для интер-предсказания согласно настоящей заявке;

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

ФИГ. 16 представляет собой блок-схему, показывающую вариант осуществления аппаратного компонента согласно настоящему изобретению.

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

ПОДРОБНОЕ ОПИСАНИЕ ВАРИАНТОВ ОСУЩЕСТВЛЕНИЯ

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

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

Кодирование/декодирование видео обычно означает обработку последовательности изображений, которые формируют видео или видеопоследовательность. Вместо термина “изображение” в качестве синонимов в области кодирования/декодирования видео может использоваться термин “картинка” или “кадр”. Кодирование/декодирование (coding) видео (или кодирование/декодирование в целом) содержит две части: кодирование (encoding) видео и декодирование (decoding) видео. Кодирование видео выполняется на стороне источника, обычно содержит обработку (например, путем сжатия) исходных видеоизображений для уменьшения объема данных, необходимых для представления видеоизображений (для более эффективного хранения и/или передачи). Декодирование видео выполняется на стороне назначения и обычно содержит обратную по сравнению с кодером обработку для восстановления видеоизображений. Варианты осуществления, относящиеся к “кодированию/декодированию” видеоизображений (или изображений в целом), следует понимать как относящиеся к “кодированию” или “декодированию” видеоизображений или соответствующих видеопоследовательностей. Объединение части кодирования и части декодирования также называется КОДЕКОМ (кодирование и декодирование).

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

Несколько стандартов кодирования/декодирования видео принадлежат к группе “гибридных видеокодеков с потерями” (т.е. объединяют пространственное и временное предсказание в области выборок и кодирование/декодирование с 2D-преобразованием для применения квантования в области преобразования). Каждое изображение видеопоследовательности обычно разделяется на набор неперекрывающихся блоков, и кодирование/декодирование обычно выполняется на уровне блоков. Другими словами, в кодере видео обычно обрабатывается, т.е. кодируется, на уровне блоков (видеоблоков), например путем использования пространственного (внутри изображения) предсказания и/или временного (между изображениями) предсказания для генерирования блока предсказания, вычитания блока предсказания из текущего блока (блока, обрабатываемого в настоящее время/подлежащего обработке) для получения остаточного блока, преобразования остаточного блока и квантования остаточного блока в области преобразования для уменьшения объема данных, подлежащих передаче (сжатию), тогда как в декодере обратная по сравнению с кодером обработка применяется к закодированному или сжатому блоку для восстановления текущего блока для представления. Кроме того, кодер дублирует цикл обработки декодера таким образом, чтобы они оба генерировали одинаковые предсказания (например, интра- и интер-предсказания) и/или реконструкции для обработки, т.е. кодирования, последующих блоков.

В следующих ниже вариантах осуществления системы 10 кодирования/декодирования видео видеокодер 20 и видеодекодер 30 описаны на основе Фиг. с 1 по 3.

Фиг. 1A представляет собой схематичное блочное представление, иллюстрирующее примерную систему 10 кодирования/декодирования, например систему 10 кодирования/декодирования видео (или, для краткости, систему 10 кодирования/декодирования), которая может использовать методы настоящей заявки. Видеокодер 20 (или, для краткости, кодер 20) и видеодекодер 30 (или, для краткости, декодер 30) системы 10 кодирования/декодирования видео представляют примеры устройств, которые могут быть выполнены с возможностью осуществления методов в соответствии с различным примерами, описанными в настоящей заявке.

Как показано на ФИГ. 1A, система 10 кодирования/декодирования содержит устройство-источник 12, выполненное с возможностью предоставления закодированных данных 21 изображения, например устройству-получателю 14, для декодирования закодированных данных 13 изображения.

Устройство-источник 12 содержит кодер 20 и может дополнительно, т.е. опционально, содержать источник 16 изображений, препроцессор (или блок предобработки) 18, например препроцессор 18 изображений, и интерфейс связи или блок 22 связи.

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

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

Препроцессор 18 выполнен с возможностью приема (необработанных) данных 17 изображения и выполнения предобработки над этими данными 17 изображения для получения предобработанного изображения 19 или предобработанных данных 19 изображения. Предобработка, выполняемая препроцессором 18, может, например, содержать обрезку, преобразование цветового формата (например из RGB в YCbCr), цветокоррекцию или устранение шумов. Можно понять, что блок 18 предобработки может быть опциональным компонентом.

Видеокодер 20 выполнен с возможностью приема предобработанных данных 19 изображения и предоставления закодированных данных 21 изображения (дополнительные подробности будут описаны ниже, например на основе Фиг. 2).

Интерфейс 22 связи устройства-источника 12 может быть выполнен с возможностью приема закодированных данных 21 изображения и передачи закодированных данных 21 изображения (или любой их дополнительной обработанной версии) по каналу 13 связи другому устройству, например устройству-получателю 14 или любому другому устройству, для сохранения или непосредственного восстановления.

Устройство-получатель 14 содержит декодер 30 (например, видеодекодер 30) и может дополнительно, т.е. опционально, содержать интерфейс связи или блок 28 связи, постпроцессор 32 (или блок 32 постобработки) и устройство 34 отображения.

Интерфейс 28 связи устройства-получателя 14 выполнен с возможностью приема закодированных данных 21 изображения (или любой их дополнительно обработанной версии), например, непосредственно от устройства-источника 12 или от любого другого источника, например устройства хранения, например устройства хранения закодированных данных изображения, и предоставления закодированных данных 21 изображения на декодер 30.

Интерфейс 22 связи и интерфейс 28 связи могут быть выполнены с возможностью передачи или приема закодированных данных 21 изображения или закодированных данных 13 через прямую линию связи между устройством-источником 12 и устройством-получателем 14, например, прямое проводное или беспроводное соединение, или через любой тип сети, например проводную или беспроводную сеть, или любую их комбинацию, или любой тип частной и общедоступной сети, или любую их комбинацию.

Интерфейс 22 связи может быть, например, выполнен с возможностью упаковки закодированных данных 21 изображения в надлежащий формат, например пакеты, и/или обработки закодированных данных изображения с использованием любого типа кодирования или обработки передачи по линии связи или сети связи.

Интерфейс 28 связи, являющийся аналогом интерфейса 22 связи, может быть, например, выполнен с возможностью приема передаваемых данных и обработки данных передачи с использованием любого типа соответствующей обработки или декодирования передачи и/или распаковки для получения закодированных данных 21 изображения.

Как интерфейс 22 связи, так и интерфейс 28 связи могут быть выполнены с возможностью интерфейсов однонаправленной связи, что указано стрелкой для канала 13 связи на Фиг. 1A, указывающий от устройства-источника 12 к устройству-получателю 14, или интерфейсов двунаправленной связи, и они могут быть выполнены с возможностью, например, отправки и приема сообщений, например для установления соединения, для квитирования и обмена любой другой информацией, относящейся к линии связи и/или передаче данных, например передаче закодированных данных изображения.

Декодер 30 выполнен с возможностью приема закодированных данных 21 изображения и предоставления декодированных данных 31 изображения или декодированного изображения 31 (дополнительные подробности будут описаны ниже, например на основе Фиг. 3 или Фиг. 5).

Постпроцессор 32 устройства-получателя 14 выполнен с возможностью постобработки декодированных данных 31 изображения (также называемых восстановленными данными изображения), например декодированного изображения 31, для получения постобработанных данных 33 изображения, например постобработанного изображения 33. Постобработка, выполняемая блоком 32 постобработки, может содержать, например, преобразование цветового формата (например, из YCbCr в RGB), цветокоррекцию, обрезку или передискретизацию, или любую другую обработку, например для подготовки декодированных данных 31 изображения для отображения, например устройством 34 отображения.

Устройство 34 отображения устройства-получателя 14 выполнено с возможностью приема постобработанных данных 33 изображения для отображения изображения, например пользователю или зрителю. Устройство 34 отображения может представлять собой или содержать дисплей любого типа для представления восстановленного изображения, например встроенный или внешний дисплей или монитор. Дисплеи могут, например, содержать жидкокристаллические дисплеи (LCD), дисплеи на органических светодиодах (OLED), плазменные дисплеи, проекторы, дисплеи на микро-LED, жидкий кристалл на кремнии (LCoS), цифровой световой процессор (DLP) или другой дисплей любого типа.

Хотя Фиг. 1A иллюстрирует устройство-источник 12 и устройство-получатель 14 как отдельные устройства, варианты осуществления устройств также могут содержать оба или обе функциональные возможности, устройство-источник 12 или соответствующую функциональную возможность и устройство-получатель 14 или соответствующую функциональную возможность. В таких вариантах осуществления устройство-источник 12 или соответствующая функциональная возможность и устройство-получатель 14 или соответствующая функциональная возможность могут быть реализованы с использованием одного и того же аппаратного и/или программного обеспечения или с помощью отдельного аппаратного и/или программного обеспечения, или любой их комбинации.

Как будет очевидно для специалиста на основе описания, наличие и (точное) разделение функциональных возможностей различных блоков или функциональных возможностей в устройстве-источнике 12 и/или устройстве-получателе 14, как показано на Фиг. 1A, может меняться в зависимости от фактического устройства и применения.

Кодер 20 (например, видеокодер 20) или декодер 30 (например, видеодекодер 30) или и кодер 20, и декодер 30 могут быть реализованы через схему обработки как показано на Фиг. 1B, такую как один или несколько микропроцессоров, цифровые сигнальные процессоры (DSP), специализированные интегральные схемы (ASIC), программируемые вентильные матрицы (FPGA), дискретную логику, аппаратное обеспечение, выделенное кодирование/декодирование видео или любые их комбинации. Кодер 20 может быть реализован через схему 46 обработки для воплощения различных модулей, как обсуждалось в отношении кодера 20 на ФИГ. 2, и/или любой другой подсистемы или системы кодера, описанной в данном документе. Декодер 30 может быть реализован через схему 46 обработки для воплощения различных модулей, как обсуждалось в отношении декодера 30 на ФИГ. 3, и/или любой другой подсистемы или системы декодера, описанной в данном документе. Схема обработки может быть выполнена с возможностью выполнения различных операций, которые будут описаны ниже. Как показано на Фиг. 5, если методики частично реализуются в программном обеспечении, устройство может хранить инструкции для программного обеспечения на подходящем, долговременном (непереходном/non-transitory) машиночитаемом носителе и может исполнять эти инструкции в аппаратном обеспечении, используя один или несколько процессоров для выполнения упомянутых методик данного раскрытия. Любой из видеокодера 20 и видеодекодера 30 может быть интегрирован как часть объединенного кодера/декодера (КОДЕК) в одном устройстве, например как показано на Фиг. 1B.

Устройство-источник 12 и устройство-получатель 14 могут содержать любое из широкого диапазона устройств, в том числе любые виды портативных или стационарных устройств, например ноутбуки или портативные компьютеры, мобильные телефоны, смартфоны, планшеты или планшетные компьютеры, камеры, настольные компьютеры, телевизионные приставки, телевизоры, устройства отображения, цифровые мультимедийные плееры, видеоигровые консоли, устройства потоковой передачи видео (например, серверы служб контента или серверы доставки контента), широковещательное приемное устройство, широковещательное передающее устройство или подобное, и могут использовать операционную систему любого типа или обходиться без нее. В некоторых случаях устройство-источник 12 и устройство-получатель 14 могут быть оборудованы для беспроводной связи. Таким образом, устройство-источник 12 и устройство-получатель 14 могут быть устройствами беспроводной связи.

В некоторых случаях система 10 кодирования/декодирования видео, проиллюстрированная на Фиг. 1A, является лишь примером, и методики настоящей заявки могут применяться к настройкам кодирования/декодирования видео (таким как видеокодирование или видеодекодирование), которые не обязательно включают в себя какую-либо передачу данных между устройствами кодирования и декодирования. В других примерах данные извлекаются из локальной памяти, передаются потоковым образом по сети или подобное. Устройство видеокодирования может кодировать и сохранять данные в память, и/или устройство видеодекодирования может извлекать и декодировать данные из памяти. В некоторых примерах кодирование и декодирование выполняется устройствами, которые связь друг с другом не осуществляют, а просто кодируют данные в память и/или извлекают и декодируют данные из памяти.

Для удобства описания здесь описаны варианты осуществления данного изобретения, например со ссылкой на высокоэффективное кодирование/декодирование видео (HEVC) или на эталонное программное обеспечение универсального кодирования/декодирования видео (VVC), стандарт кодирования/декодирования видео следующего поколения, разрабатываемый объединенной группой сотрудничества по кодированию/декодированию видео (JCT-VC) экспертной группы по кодированию/декодированию видео ITU-T (VCEG) и экспертной группой по движущимся изображениям ISO/IEC (MPEG). Обычный специалист в данной области техники поймет, что варианты осуществления данного изобретения не ограничиваются HEVC или VVC.

Кодер и способ кодирования

Фиг. 2 показывает схематичное блочное представление примерного видеокодера 20, который выполнен с возможностью реализации методик настоящей заявки. В примере на Фиг. 2 видеокодер 20 содержит ввод 201 (или входной интерфейс 201), блок 204 вычисления остатка, блок 206 обработки преобразования, блок 208 квантования, блок 210 обратного квантования и блок 212 обработки обратного преобразования, блок 214 восстановления, блок 220 контурного фильтра, буфер 230 (DPB) декодированных изображений, блок 260 выбора режима, блок 270 энтропийного кодирования и вывод 272 (или выходной интерфейс 272). Блок 260 выбора режима может включать в себя блок 244 интер-предсказания, блок 254 интра-предсказания и блок 262 разделения. Блок 244 интер-предсказания может включать в себя блок оценки движения и блок компенсации движения (не показаны). Видеокодер 20, показанный на Фиг. 2, также может называться гибридным видеокодером или видеокодером согласно гибридному видеокодеку.

Блок 204 вычисления остатка, блок 206 обработки преобразования, блок 208 квантования, блок 260 выбора режима могут относится к формированию прямого пути прохождения сигнала кодера 20, тогда как блок 210 обратного квантования, блок 212 обработки обратного преобразования, блок 214 восстановления, буфер 216, контурный фильтр 220, буфер 230 (DPB) декодированных изображений, блок 244 интер-предсказания и блок 254 интра-предсказания могут относится к формированию обратного пути прохождения сигнала видеокодера 20, при этом обратный путь прохождения сигнала видеокодера 20 соответствует пути прохождения сигнала декодера (см. видеодекодер 30 на Фиг. 3). Блок 210 обратного квантования, блок 212 обработки обратного преобразования, блок 214 восстановления, контурный фильтр 220, буфер 230 (DPB) декодированных изображений, блок 244 интер-предсказания и блок 254 интра-предсказания также относятся к формированию «встроенного декодера» видеокодера 20.

Изображения и разделение изображений (изображения и блоки)

Кодер 20 может быть выполнен с возможностью приема, например, через ввод 201, изображения 17 (или данных 17 изображения), например изображения из последовательности изображений, образующих видео или видеопоследовательность. Принятое изображение или данные изображения также могут представлять собой предобработанное изображение 19 (или предобработанные данные 19 изображения). Для простоты нижеследующее описание ссылается на изображение 17. Изображение 17 также может именоваться текущим изображением или изображением, которое подлежит кодированию/декодированию (в частности, при кодировании/декодировании видео, чтобы отличать текущее изображение от других изображений, например, ранее кодированных и/или декодированных изображений той же видеопоследовательности, т.е. видеопоследовательности, которая также содержит текущее изображение).

(Цифровое) изображение является или может рассматриваться как двумерный массив или матрица выборок со значениями интенсивности. Выборка в массиве также может упоминаться как пиксель (сокращенное наименование для элемента изображения) или pel. Число выборок в горизонтальном и вертикальном направлении (или оси) массива или изображения определяет размер и/или разрешение изображения. Для представления цвета обычно используются три цветовые компоненты, т.е. изображение может быть представлено или включать в себя три массива выборок. В формате RBG или цветовом пространстве изображение содержит соответствующий массив красных, зеленых и синих выборок. Однако при кодировании/декодировании видео каждый пиксель обычно представляется в формате яркости и цветности или цветовом пространстве, например YCbCr, которое содержит компоненту яркости, обозначаемую Y (иногда вместо этого также используется L), и две компоненты цветности (цветоразностные компоненты), обозначаемые как Cb и Cr. Компонента Y яркости (luminance) (или сокращенно яркость (luma)) представляет яркость (brightness) или интенсивность уровня серого (например, как в полутоновом изображении), в то время как две компоненты Cb и Cr цветности (chrominance) (или сокращенно цветности (chroma)) представляют компоненты информации о цветности (chromaticity) или цвете. Соответственно, изображение в формате YCbCr содержит массив выборок яркости со значениями (Y) выборок яркости и два массива выборок цветности со значениями (Cb и Cr) цветности. Изображения в формате RGB могут быть конвертированы или преобразованы в формат YCbCr и наоборот, процесс также известен как цветовое преобразование или конвертация. Если изображение является монохромным, оно может содержать только массив выборок яркости. Соответственно, изображение может быть, например, массивом выборок яркости в монохромном формате или массивом выборок яркости и двумя соответствующими массивами выборок цветности в цветовом формате 4:2:0, 4:2:2 и 4:4:4.

Варианты осуществления видеокодера 20 могут содержать блок разделения изображения (не показан на Фиг. 2), выполненный с возможностью разделения изображения 17 на множество (обычно не перекрывающихся) блоков 203 изображения. Эти блоки также могут называться корневыми блоками, макроблоками (H.264/AVC), или блоками дерева кодирования/декодирования (CTB), или единицами дерева кодирования/декодирования (CTU) (H.265/HEVC и VVC). Блок разделения изображения может быть выполнен с возможностью использования одного и того же размера блока для всех изображений в видеопоследовательности и соответствующей сетки, определяющей размер блока, или изменения размера блока между изображениями или подмножествами, или группами изображений и разделения каждого изображения на соответствующие блоки.

В дополнительных вариантах осуществления видеокодер может быть выполнен с возможностью непосредственного приема блока 203 изображения 17, например одного, нескольких или всех блоков, формирующих изображение 17. Блок 203 изображения также может именоваться текущим блоком изображения или блоком изображения, подлежащим кодированию/декодированию.

Подобно изображению 17, блок 203 изображения снова является или может рассматриваться как двумерный массив или матрица выборок со значениями интенсивности (значениями выборок), хотя и меньшего размера, чем изображение 17. Другими словами, блок 203 может содержать, например, один массив выборок (например, массив яркости в случае монохромного изображения 17 или массив яркости или цветности в случае цветного изображения) или три массива выборок (например, яркость и два массива цветности в случае цветного изображения 17) или любое другое число и/или вид массивов в зависимости от применяемого цветового формата. Число выборок в горизонтальном и вертикальном направлении (или оси) блока 203 определяет размер блока 203. Соответственно, блок может, например, быть MxN (M-столбцов на N-строк) массивом выборок или MxN массивом коэффициентов преобразования.

Варианты осуществления видеокодера 20, показанные на Фиг. 2, могут быть выполнены с возможностью кодирования изображения 17 блок за блоком, например выполнения кодирования и предсказания для каждого блока 203.

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

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

Вычисление остатка

Блок 204 вычисления остатка может быть выполнен с возможностью вычисления остаточного блока 205 (также именуемого остатком 205) на основе блока 203 изображения и блока 265 предсказания (дополнительные подробности о блоке 265 предсказания приведены ниже), например путем вычитания значений выборок блока 265 предсказания из значений выборок блока 203 изображения, выборка за выборкой (пиксель за пикселем), чтобы получить остаточный блок 205 в области выборок.

Преобразование

Блок 206 обработки преобразования может быть выполнен с возможностью применения преобразования, например дискретного косинусного преобразования (DCT) или дискретного синусного преобразования (DST), к значениям выборок остаточного блока 205, чтобы получить коэффициенты 207 преобразования в области преобразования. Коэффициенты 207 преобразования могут также именоваться остаточными коэффициентами преобразования и представлять остаточный блок 205 в области преобразования.

Блок 206 обработки преобразования может быть выполнен с возможностью применения целочисленных аппроксимаций DCT/DST, таких как преобразования, специфицированные для H.265/HEVC. По сравнению с ортогональным преобразованием DCT такие целочисленные аппроксимации обычно масштабируются с некоторым коэффициентом. Чтобы сохранить норму остаточного блока, который обрабатывается прямым и обратным преобразованиями, дополнительные коэффициенты масштабирования применяются как часть процесса преобразования. Коэффициенты масштабирования обычно выбираются на основе определенных ограничений, таких как коэффициенты масштабирования, являющиеся степенью двойки для операций сдвига, битовая глубина коэффициентов преобразования, компромисс между точностью и затратами на реализацию и т. д. Конкретные коэффициенты масштабирования специфицируются, например, для обратного преобразования, например блоком 212 обработки обратного преобразования (и соответствующего обратного преобразования, например блоком 312 обработки обратного преобразования в видеодекодере 30), а соответствующие коэффициенты масштабирования для прямого преобразования, например блоком 206 обработки преобразования, могут быть специфицированы надлежащим образом в кодере 20.

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

Квантование

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

Процесс квантования может уменьшить битовую глубину, связанную с некоторыми или всеми коэффициентами 207 преобразования. Например, n-битовый коэффициент преобразования может быть округлен до m-битового коэффициента преобразования во время квантования, где n больше m. Степень квантования может быть изменена путем регулировки параметра квантования (QP). Например, для скалярного квантования может применяться другое масштабирование для достижения более тонкого или более грубого квантования. Меньшие размеры шагов квантования соответствуют более тонкому квантованию, тогда как большие размеры шагов квантования соответствуют более грубому квантованию. Применимый размер шага квантования может быть указан параметром квантования (QP). Параметр квантования может, например, представлять собой индекс для предопределенного набора применимых размеров шагов квантования. Например, небольшие параметры квантования могут соответствовать тонкому квантованию (небольшим размерам шагов квантования), а большие параметры квантования могут соответствовать грубому квантованию (большим размерам шагов квантования) или наоборот. Квантование может включать в себя деление на размер шага квантования, а соответствующее и/или обратное деквантование, например блоком 210 обратного квантования, может включать в себя умножение на размер шага квантования. Варианты осуществления в соответствии с некоторыми стандартами, например HEVC, могут быть выполнены с возможностью использования параметра квантования для определения размера шага квантования. Как правило, размер шага квантования может быть вычислен на основе параметра квантования с использованием аппроксимации фиксированной точки уравнения, включающего в себя деление. Дополнительные коэффициенты масштабирования могут быть введены для квантования и деквантования, чтобы восстановить норму остаточного блока, которая могла быть изменена из-за масштабирования, используемого при аппроксимации фиксированной точки упомянутого уравнения для размера шага квантования и параметра квантования. В одной примерной реализации масштабирование обратного преобразования и деквантование могут быть объединены. В качестве альтернативы индивидуализированные таблицы квантования могут использоваться и сигнализироваться от кодера к декодеру, например в битовом потоке. Квантование является операцией с потерями, при которой потери возрастают с увеличением размеров шагов квантования.

Варианты осуществления видеокодера 20 (соответственно блока 208 квантования) могут быть выполнены с возможностью вывода параметров квантования (QP), например непосредственно или в кодированной форме посредством блока 270 энтропийного кодирования, так, что, например видеодекодер 30 может принимать и применять параметры квантования для декодирования.

Обратное квантование

Блок 210 обратного квантования выполнен с возможностью применения обратного квантования блока 208 квантования к квантованным коэффициентам для получения деквантованных коэффициентов 211, например путем применения обратной схемы квантования относительно таковой, применяемой блоком 208 квантования, на основе или с использованием того же размера шага квантования, что и блок 208 квантования. Деквантованные коэффициенты 211 также могут упоминаться как деквантованные остаточные коэффициенты 211 и соответствовать - хотя обычно они и не идентичны коэффициентам преобразования из-за потери при квантовании - коэффициентам 207 преобразования.

Обратное преобразование

Блок 212 обработки обратного преобразования выполнен с возможностью применения обратного преобразования относительно преобразования, применяемого блоком 206 обработки преобразования, например обратного дискретного косинусного преобразования (DCT) или обратного дискретного синусного преобразования (DST), или других обратных преобразований для получения восстановленного остаточного блока 213 (или соответствующих деквантованных коэффициентов 213) в области выборок. Восстановленный остаточный блок 213 также может именоваться блоком 213 преобразования.

Восстановление

Блок 214 восстановления (например, блок сложения или сумматор 214) выполнен с возможностью сложения блока 213 преобразования (т.е. восстановленного остаточного блока 213) с блоком 265 предсказания, чтобы получить восстановленный блок 215 в области выборок, например посредством сложения - выборка за выборкой - значений выборок восстановленного остаточного блока 213 и значений выборок блока 265 предсказания.

Фильтрация

Блок 220 контурного фильтра (или сокращенно «контурный фильтр» 220) выполнен с возможностью фильтрации восстановленного блока 215, чтобы получить отфильтрованный блок 221, или, в общем, для фильтрации восстановленных выборок для получения отфильтрованных выборок. Блок контурного фильтра выполнен с возможностью, например, сглаживания переходов пикселей или иного улучшения качества видео. Блок 220 контурного фильтра может содержать один или несколько контурных фильтров, таких как деблокирующий фильтр, фильтр с адаптивным к выборке смещением (SAO), или один или несколько других фильтров, например двусторонний фильтр, адаптивный контурный фильтр (ALF), фильтры сглаживания, повышения резкости или коллаборативные фильтры, или любая их комбинация. Хотя блок 220 контурного фильтра показан на ФИГ. 2 как внутриконтурный (in loop) фильтр, в других конфигурациях блок 220 контурного фильтра может быть реализован как пост-контурный фильтр. Отфильтрованный блок 221 также может именоваться отфильтрованным восстановленным блоком 221.

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

Буфер декодированных изображений

Буфер 230 декодированных изображений (DPB) может быть памятью, в которой хранятся опорные изображения или, в общем, данные опорных изображений, для кодирования видеоданных посредством видеокодера 20. DPB 230 может быть сформирован любым из множества запоминающих устройств, таких как динамическая память с произвольным доступом (DRAM), в том числе синхронная DRAM (SDRAM), магниторезистивная RAM (MRAM), резистивная RAM (RRAM) или запоминающие устройства других типов. Буфер 230 (DPB) декодированных изображений может быть выполнен с возможностью сохранения одного или нескольких фильтрованных блоков 221. Буфер 230 декодированных изображений может быть дополнительно выполнен с возможностью сохранения других ранее отфильтрованных блоков, например ранее восстановленных и отфильтрованных блоков 221, того же самого текущего изображения или разных изображений, например ранее восстановленных изображений, и может предоставлять полные ранее восстановленные, т.е. декодированные, изображения (и соответствующие опорные блоки и выборки) и/или частично восстановленное текущее изображение (и соответствующие опорные блоки и выборки), например для интер-предсказания. Буфер 230 декодированных изображений (DPB) также может быть выполнен с возможностью сохранения одного или нескольких нефильтрованных восстановленных блоков 215 или, в общем, нефильтрованных восстановленных выборок, например если восстановленный блок 215 не фильтруется блоком 220 контурного фильтра, или любой другой дополнительно обработанной версии восстановленных блоков или выборок.

Выбор режима (разделение и предсказание)

Блок 260 выбора режима содержит блок 262 разделения, блок 244 интер-предсказания и блок 254 интра-предсказания и выполнен с возможностью приема или получения исходных данных изображения, например исходного блока 203 (текущего блока 203 текущего изображения 17), и восстановленных данных изображения, например отфильтрованных и/или нефильтрованных восстановленных выборок или блоков того же самого (текущего) изображения и/или из одного или множества ранее декодированных изображений, например из буфера 230 декодированных изображений или других буферов (например, линейного (строкового) буфера, не показан). Восстановленные данные изображения используются в качестве данных опорного изображения для предсказания, например интер-предсказания или интра-предсказания, чтобы получить блок 265 предсказания или предиктор 265.

Блок 260 выбора режима может быть выполнен с возможностью определения или выбора разделения для режима предсказания текущего блока (в том числе без разделения) и режима предсказания (например, режима интра- или интер-предсказания) и генерирования соответствующего блока 265 предсказания, который используется для вычисления остаточного блока 205 и для восстановления восстановленного блока 215.

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

Другими словами, блок 262 разделения может быть выполнен с возможностью разделения блока 203 на более мелкие разделы блока или субблоки (которые снова образуют блоки), например итеративно с использованием разделения квадродерева (QT), двоичного разделения (BT), или разделения троичного дерева (TT), или любой их комбинации, и выполнения, например, предсказания для каждого из разделов блока или субблоков, при этом выбор режима содержит выбор древовидной структуры разделяемого блока 203, а режимы предсказания применяются к каждому из разделов блока или субблоков.

Далее более подробно поясняется разделение (например, посредством блока 260 разделения) и обработка предсказания (посредством блока 244 интер-предсказания и блока 254 интра-предсказания), выполняемая примерным видеокодером 20.

Разделение

Блок 262 разделения может разделять (или разбивать) текущий блок 203 на более мелкие разделы, например меньшие блоки квадратного или прямоугольного размера. Эти меньшие блоки (которые также могут именоваться субблоками) могут быть дополнительно разделены на еще более меньшие разделы. Это также называется разделением по дереву или иерархическим разделением по дереву, при котором корневой блок, например на корневом уровне 0 дерева (уровне 0 иерархии, глубине 0), может быть рекурсивно разделен, например разделен на два или более блоков следующего, более низкого уровня дерева, например узлов на уровне 1 дерева (уровне 1 иерархии, глубине 1), при этом эти блоки могут быть снова разделены на два или более блоков следующего более низкого уровня, например уровня 2 дерева (уровня 2 иерархии, глубины 2), и т. д. до тех пор, пока разделение не будет завершено, например из-за выполнения критерия прекращения, например достижения максимальной глубины дерева или минимального размера блока. Блоки, которые далее не разделяются, также называются листовыми блоками или листовыми узлами дерева. Дерево, использующее разделение на два раздела, называется двоичным деревом (BT), дерево, использующее разделение на три раздела, называется троичным деревом (TT), а дерево, использующее разделение на четыре раздела, называется квадродеревом (QT).

Как упоминалось ранее, используемый в данном документе термин «блок» может быть частью, в частности квадратной или прямоугольной частью, изображения. Что касается, например, HEVC и VVC, блок может представлять собой или соответствовать единице дерева кодирования/декодирования (CTU), единице кодирования/декодирования (CU), единице предсказания (PU) и единице преобразования (TU) и/или соответствующим блокам, например блоку дерева кодирования/декодирования (CTB), блоку кодирования/декодирования (CB), блоку преобразования (TB) или блоку предсказания (PB).

Например, единица дерева кодирования/декодирования (CTU) может быть или содержать CTB выборок яркости, два соответствующих CTB выборок цветности изображения, которое имеет три массива выборок, или CTB выборок монохромного изображения или изображения, которое кодируется/декодируется с использованием трех отдельных цветовых плоскостей и синтаксических структур, используемых для кодирования/декодирования выборок. Соответственно, блок дерева кодирования/декодирования (CTB) может быть N×N блоком выборок для некоторого значения N, так что деление компоненты на CTB является разделением. Единица кодирования/декодирования (CU) может представлять собой или содержать блок кодирования/декодирования выборок яркости, два соответствующих блока кодирования/декодирования выборок цветности изображения, которое имеет три массива выборок, или блок кодирования/декодирования выборок монохромного изображения или изображения, которое кодируется/декодируется с использованием трех отдельных цветовых плоскостей и синтаксических структур, используемых для кодирования/декодирования выборок. Соответственно, блок кодирования/декодирования (CB) может быть M×N блоком выборок для некоторых значений M и N, так что деление CTB на блоки кодирования/декодирования является разделением.

В вариантах осуществления, например, согласно HEVC, единица дерева кодирования/декодирования (CTU) может быть разбита на CU с использованием структуры квадродерева, обозначаемой в качества дерева кодирования/декодирования. Решение о том, следует ли кодировать/декодировать область изображения с использованием предсказания между изображениями (временного) или внутри изображения (пространственного), принимается на уровне CU. Каждая CU может быть дополнительно разбита на одну, две или четыре PU в соответствии с типом разбиения на PU. Внутри одной PU применяется один и тот же процесс предсказания, а релевантная информация передается в декодер на основе PU. После получения остаточного блока путем применения процесса предсказания на основе типа разбиения на PU, CU может быть разделена на единицы (TU) преобразования в соответствии с другой структурой квадродерева, которая аналогична дереву кодирования/декодирования для CU.

В вариантах осуществления, например в соответствии с разрабатываемым в настоящее время наиболее новым стандартом кодирования/декодирования, который называется универсальное кодирование/декодирование (VVC), для разделения блока кодирования/декодирования используется, например, разделение на основе комбинированного квадродерева и двоичного дерева (QTBT). В блочной структуре QTBT CU может иметь либо квадратную, либо прямоугольную форму. Например, единица дерева кодирования/декодирования (CTU) сначала разделяется на структуру квадродерева. Листовые узлы квадродерева дополнительно разделяются двоичным деревом или троичной (или тройной) древовидной структурой. Листовые узлы дерева разделения называются единицами кодирования/декодирования (CU), и эта сегментация используется для обработки предсказания и преобразования без какого-либо дальнейшего разделения. Это означает, что CU, PU и TU имеют одинаковый размер блока в структуре блока кодирования/декодирования QTBT. Параллельно, вместе с блочной структурой QTBT можно использовать множественный раздел, например раздел троичного дерева.

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

Как описано выше, видеокодер 20 выполнен с возможностью определения или выбора наилучшего или оптимального режима предсказания из набора (например, предопределенных) режимов предсказания. Набор режимов предсказания может содержать, например, режимы интра-предсказания и/или режимы интер-предсказания.

Интра-предсказание

Набор режимов интра-предсказания может содержать 35 различных режимов интра-предсказания, например ненаправленные режимы, такие как режим DC (или средний) и планарный режим, или направленные режимы, например определенные в HEVC, или может содержать 67 различных режимов интра-предсказания, например ненаправленные режимы типа режима DC (или среднего) и планарного режима, или направленные режимы, например определенные для VVC.

Блок 254 интра-предсказания выполнен с возможностью использования восстановленных выборок соседних блоков одного и того же текущего изображения для генерирования блока 265 интра-предсказания согласно режиму интра-предсказания из набора режимов интра-предсказания.

Блок 254 интра-предсказания (или в общем блок 260 выбора режима) дополнительно выполнен с возможностью вывода параметров интра-предсказания (или в общем информации, указывающей выбранный режим интра-предсказания для блока) в блок 270 энтропийного кодирования в форме синтаксических элементов 266 для включения в кодированные данные 21 изображения так, чтобы, например, видеодекодер 30 мог принимать и использовать эти параметры предсказания для декодирования.

Интер-предсказание

Набор (возможных) режимов интер-предсказания зависит от доступных опорных изображений (то есть предыдущих, по меньшей мере частично декодированных изображений, например сохраненных в DBP 230) и других параметров интер-предсказания, например используется ли опорное изображение целиком или только часть, например область окна поиска вокруг области текущего блока, этого опорного изображения для поиска наилучшим образом соответствующего опорного блока и/или, например, применяется ли интерполяция пикселей, например полупиксельная (half/semi-pel) и/или четвертьпиксельная (quarter-pel) интерполяция, или нет.

В дополнение к вышеупомянутым режимам предсказания могут применяться режим пропуска и/или прямой режим.

Блок 244 интер-предсказания может включать в себя блок оценки движения (ME) и блок компенсации движения (MC) (оба на Фиг. 2 не показаны). Блок оценки движения может быть выполнен с возможностью приема или получения блока 203 изображения (текущего блока 203 изображения текущего изображения 17) и декодированного изображения 231, или по меньшей мере одного или множества ранее восстановленных блоков, например восстановленных блоков одного или множества других/отличных ранее декодированных изображений 231, для оценки движения. Например, видеопоследовательность может содержать текущее изображение и ранее декодированные изображения 231 или, иными словами, текущее изображение и ранее декодированные изображения 231 могут быть частью или формировать последовательность изображений, образующих видеопоследовательность.

Кодер 20 может, например, быть выполнен с возможностью выбора опорного блока из множества опорных блоков одинаковых или разных изображений из множества других изображений и обеспечения опорного изображения (или индекса опорного изображения) и/или смещения (пространственного смещения) между позицией (x, y координатами) опорного блока и позицией текущего блока в качестве параметров интер-предсказания в блок оценки движения. Это смещение также называется вектором движения (MV).

Блок компенсации движения выполнен с возможностью получения, например, приема параметра интер-предсказания и выполнения интер-предсказания на основе или с использованием параметра интер-предсказания для получения блока 265 интер-предсказания. Компенсация движения, выполняемая блоком компенсации движения, может включать в себя получение или генерирование блока предсказания на основе вектора движения/блока, определенного посредством оценки движения, возможно с выполнением интерполяций с точностью до субпикселя. Интерполяционная фильтрация может генерировать дополнительные пиксельные выборки из известных пиксельных выборок, таким образом потенциально увеличивая число блоков предсказания-кандидатов, которые могут использоваться для кодирования/декодирования блока изображения. После приема вектора движения для PU текущего блока изображения блок компенсации движения может определить местоположение блока предсказания, на который указывает вектор движения, в одном из списков опорных изображений.

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

Энтропийное кодирование

Блок 270 энтропийного кодирования выполнен с возможностью применения, например, алгоритма или схемы энтропийного кодирования (например, схемы кодирования с переменной длиной (VLC), схемы контекстно-адаптивного VLC (CAVLC), схемы арифметического кодирования, бинаризации, контекстно-адаптивного двоичного арифметического кодирования (CABAC), основанного на синтаксисе контекстно-адаптивного двоичного арифметического кодирования (SBAC), энтропийного кодирования с разделением интервала вероятности (PIPE) или другого метода или методологии энтропийного кодирования) или обхода (без сжатия) в отношении квантованных коэффициентов 209, параметров интер-предсказания, параметров интра-предсказания, параметров контурного фильтра и/или других синтаксических элементов для получения кодированных данных 21 изображения, которые могут выводиться через вывод 272, например в форме кодированного битового потока 21, так что, например, видеодекодер 30 может принимать и использовать эти параметры для декодирования. Кодированный битовый поток 21 может быть передан на видеодекодер 30 или сохранен в памяти для последующей передачи или извлечения видеодекодером 30.

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

Декодер и способ декодирования

Фиг. 3 показывает пример видеодекодера 30, который выполнен с возможностью реализации методик настоящей заявки. Видеодекодер 30 выполнен с возможностью приема кодированных данных 21 изображения (например, кодированного битового потока 21), например кодированных кодером 20, чтобы получить декодированное изображение 331. Кодированные данные изображения или битовый поток содержит информацию для декодирования кодированных данных изображения, например данные, которые представляют блоки изображения кодированного слайса видео (и/или тайлов или групп тайлов) и связанные синтаксические элементы.

В примере на Фиг. 3, декодер 30 содержит блок 304 энтропийного декодирования, блок 310 обратного квантования, блок 312 обработки обратного преобразования, блок 314 восстановления (например, сумматор 314), контурный фильтр 320, буфер 330 (DBP) декодированных изображений, блок 360 применения режима, блок 344 интер-предсказания и блок 354 интра-предсказания. Блок 344 интер-предсказания может представлять собой или включать в себя блок компенсации движения. Видеодекодер 30 может, в некоторых примерах, выполнять проход декодирования, в целом обратный проходу кодирования, описанному в отношении видеокодера 100 с ФИГ. 2.

Как описано в отношении кодера 20, блок 210 обратного квантования, блок 212 обработки обратного преобразования, блок 214 восстановления, контурный фильтр 220, буфер 230 (DPB) декодированных изображений, блок 344 интер-предсказания и блок 354 интра-предсказания также относятся к формированию «встроенного декодера» видеокодера 20. Соответственно, блок 310 обратного квантования может быть идентичен по функции блоку 110 обратного квантования, блок 312 обработки обратного преобразования может быть идентичен по функции блоку 212 обработки обратного преобразования, блок 314 восстановления может быть идентичен по функции блоку 214 восстановления, контурный фильтр 320 может быть идентичен по функции контурному фильтру 220, а буфер 330 декодированных изображений может быть идентичен по функции буферу 230 декодированных изображений. Следовательно, пояснения, предоставленные для соответствующих блоков и функций видеокодера 20, применимы соответственно и к соответствующим блокам и функциям видеодекодера 30.

Энтропийное декодирование

Блок 304 энтропийного декодирования выполнен с возможностью синтаксического анализа битового потока 21 (или в общем кодированных данных 21 изображения) и выполнения, например, энтропийного декодирования кодированных данных 21 изображения, чтобы получить, например, квантованные коэффициенты 309 и/или декодированные параметры кодирования/декодирования (не показаны на Фиг. 3), например, любые или все из параметров интер-предсказания (например, вектор движения и индекс опорного изображения), параметра интра-предсказания (например, индекс или режим интра-предсказания), параметров преобразования, параметров квантования, параметров контурного фильтра и/или других синтаксических элементов. Блок 304 энтропийного декодирования может быть выполнен с возможностью применения алгоритмов или схем декодирования, соответствующих схемам кодирования, как описано в отношении блока 270 энтропийного кодирования кодера 20. Блок 304 энтропийного декодирования может быть дополнительно выполнен с возможностью предоставления параметров интер-предсказания, параметра интра-предсказания и/или других синтаксических элементов блоку 360 применения режима и других параметров другим блокам декодера 30. Видеодекодер 30 может принимать синтаксические элементы на уровне слайса видео и/или уровне блока видео. В дополнение или в качестве альтернативы слайсам и соответствующим синтаксическим элементам могут приниматься и/или использоваться группы тайлов и/или тайлы и соответствующие синтаксические элементы.

Обратное квантование

Блок 310 обратного квантования может быть выполнен с возможностью приема параметров квантования (QP) (или в общем информации, относящейся к обратному квантованию) и квантованных коэффициентов из кодированных данных 21 изображения (например, посредством синтаксического анализа и/или декодирования, например, посредством блока 304 энтропийного декодирования) и применения, на основе параметров квантования, обратного квантования в отношении декодированных квантованных коэффициентов 309 для получения деквантованных коэффициентов 311, которые также могут именоваться коэффициентами 311 преобразования. Процесс обратного квантования может включать в себя использование параметра квантования, определенного видеокодером 20 для каждого видеоблока в слайсе видео (или тайле или группе тайлов), для определения степени квантования и, аналогично, степени обратного квантования, которая должна быть применена.

Обратное преобразование

Блок 312 обработки обратного преобразования может быть выполнен с возможностью приема деквантованных коэффициентов 311, также именуемых коэффициентами 311 преобразования, и применения преобразования к деквантованным коэффициентам 311 для того, чтобы получить восстановленные остаточные блоки 213 в области выборок. Восстановленные остаточные блоки 213 также могут именоваться блоками 313 преобразования. Преобразование может быть обратным преобразованием, например, обратным DCT, обратным DST, обратным целочисленным преобразованием или концептуально аналогичным процессом обратного преобразования. Блок 312 обработки обратного преобразования может быть дополнительно выполнен с возможностью приема параметров преобразования или соответствующей информации из кодированных данных 21 изображения (например, путем синтаксического анализа и/или декодирования, например, посредством блока 304 энтропийного декодирования), чтобы определять преобразование, которое подлежит применению к деквантованным коэффициентам 311.

Восстановление

Блок 314 восстановления (например, блок сложения или сумматор 314) может быть выполнен с возможностью сложения восстановленного остаточного блока 313 с блоком 365 предсказания, чтобы получить восстановленный блок 315 в области выборок, например посредством сложения значений выборок восстановленного остаточного блока 313 и значений выборок блока 365 предсказания.

Фильтрация

Блок 320 контурного фильтра (либо в контуре кодирования/декодирования, либо после контура кодирования/декодирования) выполнен с возможностью фильтрации восстановленного блока 315 для получения отфильтрованного блока 321, например, для сглаживания переходов пикселей или иного улучшения качества видео. Блок 320 контурного фильтра может содержать один или несколько контурных фильтров, таких как деблокирующий фильтр, фильтр с адаптивным к выборке смещением (SAO), или один или несколько других фильтров, таких как двусторонний фильтр, адаптивный контурный фильтр (ALF), фильтры сглаживания, повышения резкости, или коллаборативные фильтры, или любую их комбинацию. Хотя блок 320 контурного фильтра показан на ФИГ. 3 как внутриконтурный (in loop) фильтр, в других конфигурациях блок 320 контурного фильтра может быть реализован как пост-контурный фильтр.

Буфер декодированных изображений

Декодированные видеоблоки 321 изображения затем сохраняются в буфере 330 декодированных изображений, который сохраняет декодированные изображения 331 в качестве опорных изображений для последующей компенсации движения для других изображений и/или для вывода, соответственно, отображения.

Декодер 30 выполнен с возможностью вывода декодированного изображения 311, например, через вывод 312 для представления или просмотра пользователем.

Предсказание

Блок 344 интер-предсказания может быть идентичен блоку 244 интер-предсказания (в частности, блоку компенсации движения), а блок 354 интра-предсказания может быть идентичен блоку 254 интра-предсказания по функции, и принимает решения по разбиению или разделению и выполняет предсказание на основе параметров разделения и/или предсказания или соответствующей информации, принимаемой из кодированных данных 21 изображения (например, путем синтаксического анализа и/или декодирования, например блоком 304 энтропийного декодирования). Блок 360 применения режима может быть выполнен с возможностью осуществления предсказания (интра- или интер-предсказания) для каждого блока на основе восстановленных изображений, блоков или соответствующих выборок (фильтрованных или нефильтрованных) для получения блока 365 предсказания.

Когда слайс видео кодируется/декодируется как интра-кодируемый/декодируемый (I) слайс, блок 354 интра-предсказания блока 360 применения режима выполнен с возможностью генерирования блока 365 предсказания для блока изображения текущего слайса видео на основе просигнализированного режима интра-предсказания и данных из ранее декодированных блоков текущего изображения. Когда видеоизображение кодируется/декодируется как интер-кодируемый/декодируемый (т.е. B или P) слайс, блок 344 интер-предсказания (например, блок компенсации движения) блока 360 применения режима выполнен с возможностью создания блоков 365 предсказания для видеоблока текущего слайса видео на основе векторов движения и других синтаксических элементов, принимаемых от блока 304 энтропийного декодирования. Для интер-предсказания блоки предсказания могут быть созданы из одного из опорных изображений в пределах одного из списков опорных изображений. Видеодекодер 30 может строить списки опорных кадров, Список 0 и Список 1, используя методы построения по умолчанию на основе опорных изображений, хранящихся в DPB 330. То же самое или подобное может применяться для или посредством вариантов осуществления с использованием групп тайлов (например, групп тайлов) и/или тайлов (например, тайлов видео) в дополнение или альтернативно к слайсам (например, видеослайсам), например, видео может быть кодировано/декодировано с использованием групп I, P или B тайлов и/или тайлов.

Блок 360 применения режима выполнен с возможностью определения информации предсказания для видеоблока текущего слайса видео путем выделения синтаксическим анализом векторов движения или связанной информации и других синтаксических элементов, и использует информацию предсказания для создания блоков предсказания для текущего декодируемого видеоблока. Например, блок 360 применения режима использует некоторые из принятых синтаксических элементов для определения режима предсказания (например, интра- или интер-предсказание), используемого для кодирования/декодирования видеоблоков слайса видео, типа слайса интер-предсказания (например, B-слайс, P-слайс или GPB-слайс), информации построения для одного или нескольких списков опорных изображений для слайса, векторов движения для каждого интер-кодированного видеоблока слайса, статуса интер-предсказания для каждого интер-кодируемого/декодируемого видеоблока слайса, а также другой информации для декодирования видеоблоков в текущем слайсе видео. То же самое или подобное может применяться для или посредством вариантов осуществления с использованием групп тайлов (например, групп тайлов видео) и/или тайлов (например, тайлов видео) в дополнение или альтернативно к слайсам (например, слайсам видео), например, видео может быть кодировано/декодировано с использованием групп I, P или B тайлов и/или тайлов.

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

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

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

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

Следует отметить, что дополнительные операции могут применяться к получаемым векторам движения текущего блока (в том числе, но без ограничения, к векторам движения контрольной точки аффинного режима, векторам движения субблока в аффинном, планарном, ATMVP режимах, временным векторам движения и им подобным). Например, значение вектора движения ограничивается предопределенным диапазоном в соответствии с его представляющим битом. Если представляющим битом вектора движения является bitDepth (битовая глубина), тогда диапазон составляет -2^(bitDepth-1) ~ 2^(bitDepth-1)-1, где «^» означает возведение в степень. Например, если bitDepth установлена равной 16, диапазон составляет -32768 ~ 32767; если bitDepth установлена равной 18, диапазон составляет -131072~131071. Например, значение получаемого вектора движения (например, MV четырех субблоков 4×4 в одном блоке 8×8) ограничивается таким образом, чтобы максимальная разность между целыми частями MV четырех субблоков 4×4 не превышала N пикселей, например была не более 1 пикселя. Здесь представлены два способа ограничения вектора движения в соответствии с bitDepth.

Способ 1: удаление MSB (наиболее значимого бита) переполнения посредством потоковых операций

ux= (mvx+2bitDepth) % 2bitDepth (1)

mvx=(ux >= 2bitDepth-1) ? (ux - 2bitDepth) : ux (2)

uy= (mvy+2bitDepth) % 2bitDepth (3)

mvy=(uy >= 2bitDepth-1) ? (uy - 2bitDepth) : uy (4)

где mvx представляет собой горизонтальную компоненту вектора движения блока изображения или субблока, mvy представляет собой вертикальную компоненту вектора движения блока изображения или субблока, а ux и uy указывает промежуточное значение.

Например, если значение mvx равно -32769, после применения формул (1) и (2) результирующее значение равно 32767. В компьютерной системе десятичные числа хранятся как дополнение до двух. Дополнением до двух для -32769 является 1,0111,1111,1111,1111 (17 битов), затем MSB отбрасывается, поэтому результирующим дополнением до двух является 0111,1111,1111,1111 (десятичное число составляет 32767), что совпадает с выходными данными от применения формул (1) и (2).

ux= (mvpx+mvdx +2bitDepth) % 2bitDepth (5)

mvx=(ux >= 2bitDepth-1) ? (ux - 2bitDepth) : ux (6)

uy= (mvpy+mvdy +2bitDepth) % 2bitDepth (7)

mvy=(uy >= 2bitDepth-1) ? (uy - 2bitDepth) : uy (8)

Операции могут применяться во время суммирования mvp и mvd, как показано в формулах с (5) по (8).

Способ 2: удаление MSB переполнения посредством усечения значения

vx=Clip3(-2bitDepth-1, 2bitDepth-1 -1, vx)

vy=Clip3(-2bitDepth-1, 2bitDepth-1 -1, vy)

где vx представляет собой горизонтальную компоненту вектора движения блока изображения или субблока, vy представляет собой вертикальную компоненту вектора движения блока изображения или субблока; x, y и z соответственно соответствуют трем входным значениям процесса усечения MV, а определение функции Clip3 является следующим:

Clip3(x, y, z)=

ФИГ. 4 является схематичным представлением устройства 400 кодирования/декодирования видео согласно варианту осуществления настоящего раскрытия. Устройство 400 кодирования/декодирования видео подходит для реализации раскрытых вариантов осуществления, которые описаны в данном документе. В варианте осуществления устройство 400 кодирования/декодирования видео может быть декодером, таким как видеодекодер 30 по ФИГ. 1A, или кодером, таким как видеокодер 20 по ФИГ. 1A.

Устройство 400 кодирования/декодирования видео содержит входные порты 410 (или порты 410 ввода) и блоки 420 (Rx) приемника для приема данных; процессор, логический блок или центральный процессор (CPU) 430 для обработки данных; блоки 440 (Tx) передатчика и выходные порты 450 (или порты 450 вывода) для передачи данных; и память 460 для хранения данных. Устройство 400 кодирования/декодирования видео также может содержать компоненты преобразования оптических сигналов в электрические (OE) и компоненты преобразования электрических сигналов в оптические (EO), подключенные к входным портам 410, блокам 420 приемника, блокам 440 передатчика и выходным портам 450 для обеспечения входа или выхода оптических или электрических сигналов.

Процессор 430 реализуется посредством аппаратного обеспечения и программного обеспечения. Процессор 430 может быть реализован в виде одного или нескольких CPU-чипов, ядер (например, в виде многоядерного процессора), FPGA, ASIC и DSP. Процессор 430 поддерживает связь с входными портами 410, блоками 420 приемника, блоками 440 передатчика, выходными портами 450 и памятью 460. Процессор 430 содержит блок 470 кодирования/декодирования. Блок 470 кодирования/декодирования реализует раскрытые варианты осуществления, описанные выше. Например, блок 470 кодирования/декодирования реализует, обрабатывает, подготавливает или обеспечивает различные операции кодирования/декодирования. Следовательно, включение блока 470 кодирования/декодирования обеспечивает существенное улучшение функциональных возможностей устройства 400 кодирования/декодирования видео и обеспечивает трансформацию устройства 400 кодирования/декодирования видео в другое состояние. В качестве альтернативы блок 470 кодирования/декодирования реализуется как инструкции, хранящиеся в памяти 460 и исполняемые процессором 430.

Память 460 может содержать один или несколько дисков, ленточных накопителей и твердотельных накопителей и может использоваться в качестве устройства хранения данных переполнения для хранения программ, когда такие программы выбраны для исполнения, и для хранения инструкций и данных, которые считываются во время исполнения программ. Память 460 может быть, например, энергозависимой и/или энергонезависимой и может быть постоянной памятью (ROM), оперативной памятью (RAM), троичной ассоциативной памятью (TCAM) и/или статической оперативной памятью (SRAM).

ФИГ. 5 является упрощенной блок-схемой аппаратной системы 500, которая может использоваться как одно или оба из устройства-источника 12 и устройства-получателя 14 с Фиг. 1, согласно примерному варианту осуществления.

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

Память 504 в аппаратном компоненте 500 может быть устройством постоянной памяти (ROM) или устройством оперативной памяти (RAM) в реализации. В качестве памяти 504 может использоваться запоминающее устройство любого другого подходящего типа. Память 504 может включать в себя код и данные 506, доступ к которым осуществляется процессором 502 с использованием шины 512. Память 504 может дополнительно включать в себя операционную систему 508 и прикладные программы 510, причем прикладные программы 510 включают в себя по меньшей мере одну программу, которая позволяет процессору 502 выполнять описанные в данном документе способы. Например, прикладные программы 510 могут включать в себя приложения с 1 по N, которые дополнительно включают в себя приложение кодирования/декодирования видео, которое выполняет описанные в данном документе способы.

Аппаратный компонент 500 может также включать в себя одно или несколько устройств вывода, например дисплей 518. Дисплей 518 может быть, в одном примере, сенсорным дисплеем, который объединяет дисплей с сенсорным элементом, способным воспринимать сенсорные вводы (касанием). Дисплей 518 может быть соединен с процессором 502 через шину 512.

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

Режим треугольного разделения (TPM) и геометрическое разделение движения (GEO), также известные соответственно как режим треугольного слияния и режим геометрического слияния представляют собой методы разделения, которые делают возможными негоризонтальные и невертикальные границы между разделами предсказания, причем единица PU1 предсказания и единица PU1 предсказания объединяются в области с использованием процедуры взвешенного усреднения подмножеств их выборок, относящихся к разным цветовым компонентам. TPM делает возможными границы между разделами предсказания по диагоналям прямоугольного блока, тогда как границы в соответствии с GEO могут располагаться в произвольных позициях. В области, к которой применяется процедура взвешенного усреднения, целые числа в квадратах обозначают веса WPU1, применяемые к компоненте яркости единицы PU1 предсказания. В примере веса WPU2, применяемые к компоненте яркости единицы PU2 предсказания, вычисляются следующим образом:

W PU2=8 - WPU1.

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

Подробная информация о синтаксисе для TPM представлена в Таблице 1, где 4 синтаксических элемента используются для сигнализации информации о TPM:

MergeTriangleFlag является флагом, который идентифицирует, выбран ли TPM или нет (“0” означает, что TPM не выбран; в ином случае TPM выбран);

merge_triangle_split_dir является флагом направления разбиения для TPM (“0” означает направление разбиения из верхнего левого угла к нижнему правому углу; в ином случае направлением разбиения является направление из верхнего правого угла к нижнему левому углу);

merge_triangle_idx0 и merge_triangle_idx1 являются индексами кандидатов 0 и 1 на слияние, используемых для TPM.

Таблица 1. Синтаксис данных о слиянии, в том числе синтаксис для TPM

merge_data(x0, y0, cbWidth, cbHeight) { Дескриптор if (CuPredMode[x0][y0]== MODE_IBC) { if(MaxNumMergeCand > 1) merge_idx[x0][y0] ae(v) } else { if(sps_mmvd_enabled_flag | | cbWidth * cbHeight != 32) regular_merge_flag[x0][y0] ae(v) if (regular_merge_flag[x0][y0]== 1){ if(MaxNumMergeCand > 1) merge_idx[x0][y0] ae(v) } else { if(sps_mmvd_enabled_flag && cbWidth * cbHeight != 32) mmvd_merge_flag[x0][y0] ae(v) if(mmvd_merge_flag[x0][y0]== 1) { if(MaxNumMergeCand > 1) mmvd_cand_flag[x0][y0] ae(v) mmvd_distance_idx[x0][y0] ae(v) mmvd_direction_idx[x0][y0] ae(v) } else { if(MaxNumSubblockMergeCand > 0 && cbWidth >= 8 && cbHeight >= 8) merge_subblock_flag[x0][y0] ae(v) if(merge_subblock_flag[x0][y0]== 1) { if(MaxNumSubblockMergeCand > 1) merge_subblock_idx[x0][y0] ae(v) } else { if(sps_ciip_enabled_flag && cu_skip_flag[x0][y0]== 0 && (cbWidth * cbHeight) >= 64 && cbWidth < 128 && cbHeight < 128) { ciip_flag[x0][y0] ae(v) if(ciip_flag[x0][y0] && MaxNumMergeCand > 1) merge_idx[x0][y0] ae(v) } if(MergeTriangleFlag[x0][y0]) { merge_triangle_split_dir[x0][y0] ae(v) merge_triangle_idx0[x0][y0] ae(v) merge_triangle_idx1[x0][y0] ae(v) } } } } } }

В примере TPM описывается в следующем предложении: R-L. Liao и C.S. Lim “CE10.3.1.b: Triangular prediction unit mode,” доклад JVET-L0124 на 12 заседании JVET, Макао, Китай, октябрь 2018 года. GEO объясняется в следующей статье: S. Esenlik, H. Gao, A. Filippov, V. Rufitskiy, A. M. Kotra, B. Wang, E. Alshina, M. Bläser и J. Sauer, “Non-CE4: Geometrical partitioning for inter blocks,” доклад JVET-O0489 на 15 заседании JVET, Гетеборг, Швеция, июль 2019 года.

Другим способом гармонизации TPM и/или GEO с WP является их отключение при применении WP. 1 реализация показана в Таблице 2, проверяется, равно ли 0 значение переменной weightedPredFlag для единицы кодирования/декодирования.

Переменная weightedPredFlag выводится следующим образом:

- Если slice_type равен P, weightedPredFlag устанавливается равным pps_weighted_pred_flag.

- В ином случае (slice_type равен B), weightedPredFlag устанавливается равным pps_weighted_bipred_flag.

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

Как описано выше, переменная weightedPredFlag указывает, следует ли использовать взвешенное предсказание на уровне слайса, при получении интер-предсказываемых выборок слайса.

Таблица 2. Раскрытый синтаксис данных о слиянии для гармонизации TPM с WP

merge_data(x0, y0, cbWidth, cbHeight, chType) { Дескриптор if (CuPredMode[chType][x0][y0]== MODE_IBC) { if(MaxNumIbcMergeCand > 1) merge_idx[x0][y0] ae(v) } else { if(MaxNumSubblockMergeCand > 0 && cbWidth >= 8 && cbHeight >= 8) merge_subblock_flag[x0][y0] ae(v) if(merge_subblock_flag[x0][y0]== 1) { if(MaxNumSubblockMergeCand > 1) merge_subblock_idx[x0][y0] ae(v) } else { if((cbWidth * cbHeight) >= 64 && ((sps_ciip_enabled_flag && cu_skip_flag[x0][y0]== 0 && cbWidth < 128 && cbHeight < 128) | | (sps_triangle_enabled_flag && MaxNumTriangleMergeCand > 1 && slice_type== B))) regular_merge_flag[x0][y0] ae(v) if (regular_merge_flag[x0][y0]== 1){ if(sps_mmvd_enabled_flag) mmvd_merge_flag[x0][y0] ae(v) if(mmvd_merge_flag[x0][y0]== 1) { if(MaxNumMergeCand > 1) mmvd_cand_flag[x0][y0] ae(v) mmvd_distance_idx[x0][y0] ae(v) mmvd_direction_idx[x0][y0] ae(v) } else { if(MaxNumMergeCand > 1) merge_idx[x0][y0] ae(v) } } else { if(sps_ciip_enabled_flag && sps_triangle_enabled_flag && MaxNumTriangleMergeCand > 1 && weightedPredFlag== 0 && slice_type== B && cu_skip_flag[x0][y0]== 0 && (cbWidth * cbHeight) >= 64 && cbWidth < 128 && cbHeight < 128) { ciip_flag[x0][y0] ae(v) if(ciip_flag[x0][y0] && MaxNumMergeCand > 1) merge_idx[x0][y0] ae(v) if(!ciip_flag[x0][y0] && MaxNumTriangleMergeCand > 1) { merge_triangle_split_dir[x0][y0] ae(v) merge_triangle_idx0[x0][y0] ae(v) merge_triangle_idx1[x0][y0] ae(v) } } } } }

ciip_flag[x0][y0] специфицирует то, применяется ли комбинированное слияние между изображениями и предсказание внутри изображения для текущей единицы кодирования/декодирования. Индексы x0, y0 массива специфицируют местоположение (x0, y0) верхней левой выборки яркости рассматриваемого блока кодирования/декодирования относительно верхней левой выборки яркости изображения.

Когда ciip_flag[x0][y0] не присутствует, он логически выводится следующим образом:

- Если все нижеследующие условия верны, логически выводится, что ciip_flag[x0][y0] равен 1:

- sps_ciip_enabled_flag равен 1.

- general_merge_flag[x0][y0] равен 1.

- merge_subblock_flag[x0][y0] равен 0.

- regular_merge_flag[x0][y0] равен 0.

- cbWidth меньше 128.

- cbHeight меньше 128.

- cbWidth * cbHeight больше или равно 64.

В ином случае логически выводится, что ciip_flag[x0][y0] равен 0.

Когда ciip_flag[x0][y0] равен 1, переменная IntraPredModeY[x][y] с x=x0..x0+cbWidth - 1 и y=y0..y0+cbHeight - 1 устанавливается равной INTRA_PLANAR.

Переменная MergeTriangleFlag[x0][y0], которая специфицирует то, используется ли основанная на треугольной форме компенсация движения для генерирования выборок предсказания текущей единицы кодирования/декодирования, при декодировании B-слайса, выводится следующим образом:

- Если все нижеследующие условия верны, MergeTriangleFlag[x0][y0] равен 1:

- sps_triangle_enabled_flag равен 1.

- slice_type равен B.

- general_merge_flag[x0][y0] равен 1.

- MaxNumTriangleMergeCand больше или равно 2.

- cbWidth * cbHeight больше или равно 64.

- regular_merge_flag[x0][y0] равен 0.

- merge_subblock_flag[x0][y0] равен 0.

- ciip_flag[x0][y0] равен 0.

- weightedPredFlag равен 0.

В ином случае MergeTriangleFlag[x0][y0] устанавливается равным 0.

2 реализация представлена в Таблице 3. Если weightedPredFlag равен 1, синтаксический элемент max_num_merge_cand_minus_max_num_triangle_cand не присутствует и логически выводится с таким значением, что MaxNumTriangleMergeCand становится меньше 2.

Таблица 3. Раскрытый общий синтаксис заголовка слайса для гармонизации TPM с WP

slice_header() { Дескриптор slice_pic_parameter_set_id ue(v) if(rect_slice_flag | | NumBricksInPic > 1) slice_address u(v) if(!rect_slice_flag && !single_brick_per_slice_flag) num_bricks_in_slice_minus1 ue(v) non_reference_picture_flag u(1) slice_type ue(v) if(separate_colour_plane_flag== 1) colour_plane_id u(2) slice_pic_order_cnt_lsb u(v) if(nal_unit_type== GDR_NUT) recovery_poc_cnt ue(v) if(nal_unit_type== IDR_W_RADL | | nal_unit_type== IDR_N_LP | | nal_unit_type== CRA_NUT | | NalUnitType== GDR_NUT) no_output_of_prior_pics_flag u(1) if(output_flag_present_flag) pic_output_flag u(1) if((nal_unit_type != IDR_W_RADL && nal_unit_type != IDR_N_LP) | | sps_idr_rpl_present_flag) { for(i=0; i < 2; i++) { if(num_ref_pic_lists_in_sps[i] > 0 && !pps_ref_pic_list_sps_idc[i] && (i== 0 | | (i== 1 && rpl1_idx_present_flag))) ref_pic_list_sps_flag[i] u(1) if(ref_pic_list_sps_flag[i]) { if(num_ref_pic_lists_in_sps[i] > 1 && (i== 0 | | (i== 1 && rpl1_idx_present_flag))) ref_pic_list_idx[i] u(v) } else ref_pic_list_struct(i, num_ref_pic_lists_in_sps[i]) for(j=0; j < NumLtrpEntries[i][RplsIdx[i]]; j++) { if(ltrp_in_slice_header_flag[i][RplsIdx[i]]) slice_poc_lsb_lt[i][j] u(v) delta_poc_msb_present_flag[i][j] u(1) if(delta_poc_msb_present_flag[i][j]) delta_poc_msb_cycle_lt[i][j] ue(v) } } if((slice_type != I && num_ref_entries[0][RplsIdx[0]] > 1) | | (slice_type== B && num_ref_entries[1][RplsIdx[1]] > 1)) { num_ref_idx_active_override_flag u(1) if(num_ref_idx_active_override_flag) for(i=0; i < (slice_type== B ? 2: 1); i++) if(num_ref_entries[i][RplsIdx[i]] > 1) num_ref_idx_active_minus1[i] ue(v) } } if(partition_constraints_override_enabled_flag) { partition_constraints_override_flag ue(v) if(partition_constraints_override_flag) { slice_log2_diff_min_qt_min_cb_luma ue(v) slice_max_mtt_hierarchy_depth_luma ue(v) if(slice_max_mtt_hierarchy_depth_luma != 0) slice_log2_diff_max_bt_min_qt_luma ue(v) slice_log2_diff_max_tt_min_qt_luma ue(v) } if(slice_type== I && qtbtt_dual_tree_intra_flag) { slice_log2_diff_min_qt_min_cb_chroma ue(v) slice_max_mtt_hierarchy_depth_chroma ue(v) if(slice_max_mtt_hierarchy_depth_chroma != 0) slice_log2_diff_max_bt_min_qt_chroma ue(v) slice_log2_diff_max_tt_min_qt_chroma ue(v) } } } } if (slice_type != I) { if(sps_temporal_mvp_enabled_flag && !pps_temporal_mvp_enabled_idc) slice_temporal_mvp_enabled_flag u(1) if(slice_type== B && !pps_mvd_l1_zero_idc) mvd_l1_zero_flag u(1) if(cabac_init_present_flag) cabac_init_flag u(1) if(slice_temporal_mvp_enabled_flag) { if(slice_type== B && !pps_collocated_from_l0_idc) collocated_from_l0_flag u(1) if((collocated_from_l0_flag && NumRefIdxActive[0] > 1) | | (!collocated_from_l0_flag && NumRefIdxActive[1] > 1)) collocated_ref_idx ue(v) } if((pps_weighted_pred_flag && slice_type== P) | | (pps_weighted_bipred_flag && slice_type== B)) pred_weight_table() if(!pps_six_minus_max_num_merge_cand_plus1) six_minus_max_num_merge_cand ue(v) if(sps_affine_enabled_flag && !pps_five_minus_max_num_subblock_merge_cand_plus1) five_minus_max_num_subblock_merge_cand ue(v) if(sps_fpel_mmvd_enabled_flag) slice_fpel_mmvd_enabled_flag u(1) if(sps_bdof_dmvr_slice_present_flag) slice_disable_bdof_dmvr_flag u(1) if(sps_triangle_enabled_flag && MaxNumMergeCand >= 2 &&
slice_type== B && !weightedPredFlag && !pps_max_num_merge_cand_minus_max_num_triangle_cand_minus1) {
max_num_merge_cand_minus_max_num_triangle_cand ue(v) } } if (sps_ibc_enabled_flag) slice_six_minus_max_num_ibc_merge_cand ue(v) if(sps_joint_cbcr_enabled_flag) slice_joint_cbcr_sign_flag u(1) slice_qp_delta se(v) if(pps_slice_chroma_qp_offsets_present_flag) { slice_cb_qp_offset se(v) slice_cr_qp_offset se(v) if(sps_joint_cbcr_enabled_flag) slice_joint_cbcr_qp_offset se(v) } if(sps_sao_enabled_flag) { slice_sao_luma_flag u(1) if(ChromaArrayType != 0) slice_sao_chroma_flag u(1) } if(sps_alf_enabled_flag) { slice_alf_enabled_flag u(1) if(slice_alf_enabled_flag) { slice_num_alf_aps_ids_luma u(3) for(i=0; i < slice_num_alf_aps_ids_luma; i++) slice_alf_aps_id_luma[i] u(3) if(ChromaArrayType != 0) slice_alf_chroma_idc u(2) if(slice_alf_chroma_idc) slice_alf_aps_id_chroma u(3) } } if (!pps_dep_quant_enabled_flag) dep_quant_enabled_flag u(1) if(!dep_quant_enabled_flag) sign_data_hiding_enabled_flag u(1) if(deblocking_filter_override_enabled_flag) deblocking_filter_override_flag u(1) if(deblocking_filter_override_flag) { slice_deblocking_filter_disabled_flag u(1) if(!slice_deblocking_filter_disabled_flag) { slice_beta_offset_div2 se(v) slice_tc_offset_div2 se(v) } } if(sps_lmcs_enabled_flag) { slice_lmcs_enabled_flag u(1) if(slice_lmcs_enabled_flag) { slice_lmcs_aps_id u(2) if(ChromaArrayType != 0) slice_chroma_residual_scale_flag u(1) } } if(sps_scaling_list_enabled_flag) { slice_scaling_list_present_flag u(1) if(slice_scaling_list_present_flag) slice_scaling_list_aps_id u(3) } if(entry_point_offsets_present_flag && NumEntryPoints > 0) { offset_len_minus1 ue(v) for(i=0; i < NumEntryPoints; i++) entry_point_offset_minus1[i] u(v) } if(slice_header_extension_present_flag) { slice_header_extension_length ue(v) for(i=0; i < slice_header_extension_length; i++) slice_header_extension_data_byte[i] u(8) } byte_alignment() }

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

max_num_merge_cand_minus_max_num_triangle_cand специфицирует максимальное число кандидатов для режима треугольного слияния, поддерживаемое в слайсе, вычитаемое из MaxNumMergeCand.

Когда max_num_merge_cand_minus_max_num_triangle_cand не присутствует, а sps_triangle_enabled_flag равен 1, slice_type равен B, weightedPredFlag равен 0 и MaxNumMergeCand больше или равно 2, max_num_merge_cand_minus_max_num_triangle_cand логически выводится равным pps_max_num_merge_cand_minus_max_num_triangle_cand_minus1+1.

Когда max_num_merge_cand_minus_max_num_triangle_cand не присутствует, а sps_triangle_enabled_flag равен 1, slice_type равен B, weightedPredFlag равен 1 и MaxNumMergeCand больше или равно 2, max_num_merge_cand_minus_max_num_triangle_cand логически выводится равным MaxNumMergeCand или MaxNumMergeCand-1.

Максимальное число кандидатов для режима треугольного слияния, MaxNumTriangleMergeCand, выводится следующим образом:

MaxNumTriangleMergeCand=MaxNumMergeCand - max_num_merge_cand_minus_max_num_triangle_cand

Когда max_num_merge_cand_minus_max_num_triangle_cand присутствует, значение MaxNumTriangleMergeCand должно быть в диапазоне от 2 до MaxNumMergeCand, включительно.

Когда max_num_merge_cand_minus_max_num_triangle_cand не присутствует, и (sps_triangle_enabled_flag равен 0 или MaxNumMergeCand меньше 2), MaxNumTriangleMergeCand устанавливается равным 0.

Когда MaxNumTriangleMergeCand равно 0, режим треугольного слияния не разрешен для текущего слайса.

Раскрытые механизмы применимы не только к TPM и GEO, но и к другим непрямоугольным режимам разделения и предсказания, таким как комбинированное интра-интер предсказание с треугольными разделами.

Поскольку TPM и GEO применяются только в B-слайсе, переменная weightedPredFlag в вышеупомянутых вариантах осуществления может быть непосредственно заменена переменной pps_weighted_bipred_flag.

3 реализация показана в Таблице 6, проверяется, равно ли 0 значение переменной weightedPredFlag для единицы кодирования/декодирования.

Переменная weightedPredFlag выводится следующим образом:

- Если все нижеследующие условия верны, weightedPredFlag устанавливается равным 0

luma_weight_l0_flag[i] равен 0 для i от 0 до NumRefIdxActive[0]

luma_weight_l1_flag[i] равен 0 для i от 0 до NumRefIdxActive[1]

chroma_weight_l0_flag[i] равен 0 для i от 0 до NumRefIdxActive[0]

chroma _weight_l0_flag[i] равен 0 для i от 0 до NumRefIdxActive[1]

- В ином случае weightedPredFlag устанавливается равным 1.

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

Как описано выше, переменная weightedPredFlag указывает, следует ли использовать взвешенное предсказание на уровне слайса при получении интер-предсказываемых выборок слайса.

4 реализация показана в Таблице 2, причем weightedPredFlag заменен на slice_weighted_pred_flag, который сигнализируется в заголовке слайса как показано в Таблице 4.

Как описано выше, синтаксис slice_weighted_pred_flag указывает, следует ли использовать взвешенное предсказание на уровне слайса при получении интер-предсказываемых выборок слайса.

Таблица 4. Раскрытый общий синтаксис заголовка слайса для сигнализации флага взвешенного предсказания на уровне слайса

slice_header() { Дескриптор slice_pic_parameter_set_id ue(v) if(rect_slice_flag | | NumBricksInPic > 1) slice_address u(v) if(!rect_slice_flag && !single_brick_per_slice_flag) num_bricks_in_slice_minus1 ue(v) non_reference_picture_flag u(1) slice_type ue(v) if(separate_colour_plane_flag== 1) colour_plane_id u(2) slice_pic_order_cnt_lsb u(v) if(nal_unit_type== GDR_NUT) recovery_poc_cnt ue(v) if(nal_unit_type== IDR_W_RADL | | nal_unit_type== IDR_N_LP | | nal_unit_type== CRA_NUT | | NalUnitType== GDR_NUT) no_output_of_prior_pics_flag u(1) if(output_flag_present_flag) pic_output_flag u(1) if((nal_unit_type != IDR_W_RADL && nal_unit_type != IDR_N_LP) | | sps_idr_rpl_present_flag) { for(i=0; i < 2; i++) { if(num_ref_pic_lists_in_sps[i] > 0 && !pps_ref_pic_list_sps_idc[i] && (i== 0 | | (i== 1 && rpl1_idx_present_flag))) ref_pic_list_sps_flag[i] u(1) if(ref_pic_list_sps_flag[i]) { if(num_ref_pic_lists_in_sps[i] > 1 && (i== 0 | | (i== 1 && rpl1_idx_present_flag))) ref_pic_list_idx[i] u(v) } else ref_pic_list_struct(i, num_ref_pic_lists_in_sps[i]) for(j=0; j < NumLtrpEntries[i][RplsIdx[i]]; j++) { if(ltrp_in_slice_header_flag[i][RplsIdx[i]]) slice_poc_lsb_lt[i][j] u(v) delta_poc_msb_present_flag[i][j] u(1) if(delta_poc_msb_present_flag[i][j]) delta_poc_msb_cycle_lt[i][j] ue(v) } } if((slice_type != I && num_ref_entries[0][RplsIdx[0]] > 1) | | (slice_type== B && num_ref_entries[1][RplsIdx[1]] > 1)) { num_ref_idx_active_override_flag u(1) if(num_ref_idx_active_override_flag) for(i=0; i < (slice_type== B ? 2: 1); i++) if(num_ref_entries[i][RplsIdx[i]] > 1) num_ref_idx_active_minus1[i] ue(v) } } if(partition_constraints_override_enabled_flag) { partition_constraints_override_flag ue(v) if(partition_constraints_override_flag) { slice_log2_diff_min_qt_min_cb_luma ue(v) slice_max_mtt_hierarchy_depth_luma ue(v) if(slice_max_mtt_hierarchy_depth_luma != 0) slice_log2_diff_max_bt_min_qt_luma ue(v) slice_log2_diff_max_tt_min_qt_luma ue(v) } if(slice_type== I && qtbtt_dual_tree_intra_flag) { slice_log2_diff_min_qt_min_cb_chroma ue(v) slice_max_mtt_hierarchy_depth_chroma ue(v) if(slice_max_mtt_hierarchy_depth_chroma != 0) slice_log2_diff_max_bt_min_qt_chroma ue(v) slice_log2_diff_max_tt_min_qt_chroma ue(v) } } } } if (slice_type != I) { if(sps_temporal_mvp_enabled_flag && !pps_temporal_mvp_enabled_idc) slice_temporal_mvp_enabled_flag u(1) if(slice_type== B && !pps_mvd_l1_zero_idc) mvd_l1_zero_flag u(1) if(cabac_init_present_flag) cabac_init_flag u(1) if(slice_temporal_mvp_enabled_flag) { if(slice_type== B && !pps_collocated_from_l0_idc) collocated_from_l0_flag u(1) if((collocated_from_l0_flag && NumRefIdxActive[0] > 1) | | (!collocated_from_l0_flag && NumRefIdxActive[1] > 1)) collocated_ref_idx ue(v) } if((pps_weighted_pred_flag && slice_type== P) | | (pps_weighted_bipred_flag && slice_type== B)) slice_weighted_pred_flag u(1) if (slice_weighted_pred_flag) pred_weight_table() if(!pps_six_minus_max_num_merge_cand_plus1) six_minus_max_num_merge_cand ue(v) if(sps_affine_enabled_flag && !pps_five_minus_max_num_subblock_merge_cand_plus1) five_minus_max_num_subblock_merge_cand ue(v) if(sps_fpel_mmvd_enabled_flag) slice_fpel_mmvd_enabled_flag u(1) if(sps_bdof_dmvr_slice_present_flag) slice_disable_bdof_dmvr_flag u(1) if(sps_triangle_enabled_flag && MaxNumMergeCand >= 2 && !pps_max_num_merge_cand_minus_max_num_triangle_cand_minus1) { max_num_merge_cand_minus_max_num_triangle_cand ue(v) } } if (sps_ibc_enabled_flag) slice_six_minus_max_num_ibc_merge_cand ue(v) if(sps_joint_cbcr_enabled_flag) slice_joint_cbcr_sign_flag u(1) slice_qp_delta se(v) if(pps_slice_chroma_qp_offsets_present_flag) { slice_cb_qp_offset se(v) slice_cr_qp_offset se(v) if(sps_joint_cbcr_enabled_flag) slice_joint_cbcr_qp_offset se(v) } if(sps_sao_enabled_flag) { slice_sao_luma_flag u(1) if(ChromaArrayType != 0) slice_sao_chroma_flag u(1) } if(sps_alf_enabled_flag) { slice_alf_enabled_flag u(1) if(slice_alf_enabled_flag) { slice_num_alf_aps_ids_luma u(3) for(i=0; i < slice_num_alf_aps_ids_luma; i++) slice_alf_aps_id_luma[i] u(3) if(ChromaArrayType != 0) slice_alf_chroma_idc u(2) if(slice_alf_chroma_idc) slice_alf_aps_id_chroma u(3) } } if (!pps_dep_quant_enabled_flag) dep_quant_enabled_flag u(1) if(!dep_quant_enabled_flag) sign_data_hiding_enabled_flag u(1) if(deblocking_filter_override_enabled_flag) deblocking_filter_override_flag u(1) if(deblocking_filter_override_flag) { slice_deblocking_filter_disabled_flag u(1) if(!slice_deblocking_filter_disabled_flag) { slice_beta_offset_div2 se(v) slice_tc_offset_div2 se(v) } } if(sps_lmcs_enabled_flag) { slice_lmcs_enabled_flag u(1) if(slice_lmcs_enabled_flag) { slice_lmcs_aps_id u(2) if(ChromaArrayType != 0) slice_chroma_residual_scale_flag u(1) } } if(sps_scaling_list_enabled_flag) { slice_scaling_list_present_flag u(1) if(slice_scaling_list_present_flag) slice_scaling_list_aps_id u(3) } if(entry_point_offsets_present_flag && NumEntryPoints > 0) { offset_len_minus1 ue(v) for(i=0; i < NumEntryPoints; i++) entry_point_offset_minus1[i] u(v) } if(slice_header_extension_present_flag) { slice_header_extension_length ue(v) for(i=0; i < slice_header_extension_length; i++) slice_header_extension_data_byte[i] u(8) } byte_alignment() }

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

slice_weighted_pred_flag, равный 0, специфицирует, что взвешенное предсказание не применяется к текущему слайсу. slice_weighted_pred_flag, равный 1, специфицирует, что взвешенное предсказание применяется к текущему слайсу. Когда не присутствует, значение slice_weighted_pred_flag логически выводится равным 0.

5 реализация заключается в отключении TPM на уровне блока посредством ограничения совместимости. В случае TPM-кодируемого/декодируемого блока весовые коэффициенты для компоненты яркости и цветности опорных изображений для интер-предиктора P0 710 и P1 720 (как показано на Фиг. 7) не должны присутствовать.

Для получения более подробной информации, refIdxA и predListFlagA специфицируют опорный индекс и список опорных изображений для интер-предиктора P0; refIdxB и predListFlagB специфицируют опорный индекс и список опорных изображений для интер-предиктора P1.

Переменные lumaWeightedFlag и chromaWeightedFlag выводятся следующим образом:

lumaWeightedFlagA=predListFlagA ? luma_weight_l1_flag[refIdxA] : luma_weight_l0_flag[refIdxA]

lumaWeightedFlagB=predListFlagB ? luma_weight_l1_flag[refIdxB] : luma_weight_l0_flag[refIdxB]

chromaWeightedFlagA=predListFlagA ? chroma_weight_l1_flag[refIdxA] : chroma weight_l0_flag[refIdxA]

chromaWeightedFlagB=predListFlagB ? chroma_weight_l1_flag[refIdxB] : chroma weight_l0_flag[refIdxB]

lumaWeightedFlag=lumaWeightedFlagA | | lumaWeightedFlagB

chromaWeightedFlag=chromaWeightedFlagA | | chromaWeightedFlagB

Для совместимости битового потока требуется, чтобы lumaWeightedFlag и chromaWeightedFlag были равны 0.

6 реализация заключается в отключении процесса взвешенного предсказания выборок со смешением для TPM-кодируемого/декодируемого блока, когда используется четко определяемое взвешенное предсказание.

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

В случае TPM-кодируемого/декодируемого блока, если весовые коэффициенты для компоненты яркости или цветности опорного изображения для интер-предиктора P0 710 или P1 720 присутствуют, процесс весовой обработки в соответствии с параметрами WP (параметрами 730 WP {w0, O0} и параметрами 740 WP {w1, O1} для P0 и P1, соответственно) используется для генерирования блока интер-предиктора; в ином случае процесс весовой обработки в соответствии с весовым параметром смешивания используется для генерирования интер-предиктора для блока 750. Как показано на Фиг. 9, для интер-предиктора 901 требуются два блока P0 911 и P1 912 предсказания, которые имеют перекрывающуюся область 921, где ненулевые веса применяются к обоим блокам 911 и 912 для частичного смешивания предикторов P0 911 и P1 912. Блоки, соседние с блоком 901, обозначены как 931, 932, 933, 934, 935 и 936 на Фиг. 9. Фиг. 8 иллюстрирует некоторое различие между режимами TPM- и GEO-слияния. В случае режима GEO-слияния перекрывающаяся область между предикторами 851 и 852 может быть расположена не только вдоль диагоналей интер-предсказываемого блока 850. Предикторы P0 851 и P1 852 могут быть получены путем копирования блоков 810 и 820 из других изображений с применением или без применения весов и смещений {w0, O0} 830 и {w1, O1} 840 соответственно к блокам 810 и 820.

В одном примере, refIdxA и predListFlagA специфицируют опорный индекс и список опорных изображений для интер-предиктора P0; refIdxB и predListFlagB специфицируют опорный индекс и список опорных изображений для интер-предиктора P1.

Переменные lumaWeightedFlag и chromaWeightedFlag выводятся следующим образом:

lumaWeightedFlagA=predListFlagA ? luma_weight_l1_flag[refIdxA] : luma_weight_l0_flag[refIdxA]

lumaWeightedFlagB=predListFlagB ? luma_weight_l1_flag[refIdxB] : luma_weight_l0_flag[refIdxB]

chromaWeightedFlagA=predListFlagA ? chroma_weight_l1_flag[refIdxA] : chroma weight_l0_flag[refIdxA]

chromaWeightedFlagB=predListFlagB ? chroma_weight_l1_flag[refIdxB] : chroma weight_l0_flag[refIdxB]

lumaWeightedFlag=lumaWeightedFlagA | | lumaWeightedFlagB

chromaWeightedFlag=chromaWeightedFlagA | | chromaWeightedFlagB

Затем, если значением lumaWeightedFlag является истина (true), вызывается процесс четко определяемой весовой обработки; если значением lumaWeightedFlag является ложь (false), вызывается процесс весовой обработки со смешиванием. Точно так же решение по компоненте цветности определяется согласно chromaWeightedFlag.

В альтернативной реализации флаг весовой обработки для всех компонент рассматривается совместно. Если значением одного из lumaWeightedFlag или chromaWeightedFlag является истина, вызывается процесс четко определяемой весовой обработки; если значением обоих lumaWeightedFlag и chromaWeightedFlag является ложь, вызывается процесс весовой обработки со смешиванием.

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

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

- две переменные nCbW и nCbH, специфицирующие ширину и высоту текущего блока кодирования/декодирования,

- два (nCbW)x(nCbH)-массива predSamplesA и predSamplesB,

- флаги списков предсказания, predListFlagA и predListFlagB,

- опорные индексы refIdxA и refIdxB,

- переменная cIdx, специфицирующая индекс цветовой компоненты,

- битовая глубина выборки, bitDepth.

Выходными данными этого процесса является (nCbW)x(nCbH)-массив значений выборок pbSamples предсказания.

Переменная shift1 устанавливается равной Max(2, 14 - bitDepth).

Переменные log2Wd, o0, o1, w0 и w1 выводятся следующим образом:

- Если cIdx равен 0 для выборок яркости, применяется следующее:

log2Wd=luma_log2_weight_denom+shift1

w0=predListFlagA ? LumaWeightL1[refIdxA] : LumaWeightL0[refIdxA]

w1=predListFlagB ? LumaWeightL1[refIdxB] : LumaWeightL0[refIdxB]

o0=(predListFlagA ? luma_offset_l1[refIdxA] : luma_offset_l0[refIdxA]) << (BitDepthY - 8)

o1=(predListFlagB ? luma_offset_l1[refIdxB] : luma_offset_l0[refIdxB]) << (BitDepthY - 8)

- В ином случае (cIdx не равен 0 для выборок цветности) применяется следующее:

log2Wd=ChromaLog2WeightDenom+shift1

w0=predListFlagA ? ChromaWeightL1[refIdxA][cIdx - 1] : ChromaWeightL0[refIdxA][cIdx - 1]

w1=predListFlagA ? ChromaWeightL1[refIdxB][cIdx - 1] : ChromaWeightL0[refIdxB][cIdx - 1]

o0=(predListFlagA ? ChromaOffsetL1[refIdxA][cIdx - 1] : ChromaOffsetL0[refIdxA][cIdx - 1]) << (BitDepthC - 8)

o1=(predListFlagB ? ChromaOffsetL1[refIdxB][cIdx - 1] : ChromaOffsetL0[refIdxB][cIdx - 1]) << (BitDepthC - 8)

Выборки предсказания pbSamples[x][y] с x=0..nCbW - 1 и y=0..nCbH - 1 выводятся следующим образом:

pbSamples[x][y]=Clip3(0, (1 << bitDepth) - 1,(predSamplesA[x][y] * w0+predSamplesB[x][y] * w1 +((o0+o1+1) << log2Wd)) >> (log2Wd+1))

Параметры взвешенного предсказания на уровне слайса могут быть представлены как набор переменных, назначенных для каждого элемента списка опорных изображений. Индекс элемента далее обозначается как “i”. Эти параметры могут содержать:

- LumaWeightL0[i]

- luma_offset_l0[i] представляет собой аддитивное смещение, применяемое к значению предсказания яркости для предсказания списка 0, использующего RefPicList[0][i]. Значение luma_offset_l0[i] должно находиться в диапазоне от -128 до 127 включительно. Когда luma_weight_l0_flag[i] равен 0, luma_offset_l0[i] логически выводится равным 0.

Переменная LumaWeightL0[i] выводится равной (1 << luma_log2_weight_denom) + delta_luma_weight_l0[i]. Когда luma_weight_l0_flag[i] равен 1, значение delta_luma_weight_l0[i] должно находиться в диапазоне от -128 до 127 включительно. Когда luma_weight_l0_flag[i] равен 0, LumaWeightL0[i] логически выводится равным 2luma_log2_weight_denom.

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

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

- две переменные nCbW и nCbH, специфицирующие ширину и высоту текущего блока кодирования/декодирования,

- два (nCbW)x(nCbH)-массива predSamplesLA и predSamplesLB,

- переменная triangleDir, специфицирующая направление разделения,

- переменная cIdx, специфицирующая индекс цветовой компоненты.

Выходными данными этого процесса является (nCbW)x(nCbH)-массив значений выборок pbSamples предсказания.

Переменная nCbR выводится следующим образом:

nCbR=(nCbW > nCbH) ? (nCbW/nCbH) : (nCbH/nCbW)

Переменная bitDepth выводится следующим образом:

- Если cIdx равен 0, bitDepth устанавливается равной BitDepthY.

- В ином случае bitDepth устанавливается равной BitDepthC.

Переменные shift1 и offset1 выводятся следующим образом:

- Переменная shift1 устанавливается равной Max(5, 17 - bitDepth).

- Переменная offset1 устанавливается равной 1 << (shift1 - 1).

В зависимости от значений triangleDir, wS и cIdx, выборки предсказания pbSamples[x][y] с x=0..nCbW - 1 и y=0..nCbH - 1 выводятся следующим образом:

- Переменная wIdx выводится следующим образом:

- Если cIdx равен 0 и triangleDir равно 0, применяется следующее:

wIdx=(nCbW > nCbH) ? (Clip3(0, 8, (x/nCbR - y) + 4)) : (Clip3(0, 8, (x - y/nCbR) + 4))

- В ином случае, если cIdx равен 0 и triangleDir равно 1, применяется следующее:

wIdx=(nCbW > nCbH) ? (Clip3(0, 8, (nCbH - 1 - x/nCbR - y) + 4)) (Clip3(0, 8, (nCbW - 1 - x - y/nCbR) + 4))

- В ином случае, если cIdx больше 0 и triangleDir равно 0, применяется следующее:

wIdx=(nCbW > nCbH) ? (Clip3(0, 4, (x/nCbR - y) + 2)) : (Clip3(0, 4, (x - y/nCbR) + 2))

- В ином случае (если cIdx больше 0 и triangleDir равно 1), применяется следующее:

wIdx=(nCbW > nCbH) ? (Clip3(0, 4, (nCbH - 1 - x/nCbR - y) + 2)) (Clip3(0, 4, (nCbW - 1 - x - y/nCbR) + 2))

- Переменная wValue, специфицирующая вес выборки предсказания, выводится с использованием wIdx и cIdx следующим образом:

wValue=(cIdx== 0) ? Clip3(0, 8, wIdx) : Clip3(0, 8, wIdx * 2)

- Значения выборок предсказания выводятся следующим образом:

pbSamples[x][y]=Clip3(0, (1 << bitDepth) - 1, (predSamplesLA[x][y] * wValue+predSamplesLB[x][y] * (8 - wValue) + offset1) >> shift1)

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

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

- две переменные nCbW и nCbH, специфицирующие ширину и высоту текущего блока кодирования/декодирования,

- два (nCbW)x(nCbH)-массива predSamplesLA и predSamplesLB,

- переменная angleIdx, специфицирующая индекс угла геометрического разделения,

- переменная distanceIdx, специфицирующая расстояние idx геометрического разделения,

- переменная cIdx, специфицирующая индекс цветовой компоненты.

Выходными данными этого процесса являются (nCbW)x(nCbH)-массив значений выборок pbSamples предсказания и переменная partIdx.

Переменная bitDepth выводится следующим образом:

- Если cIdx равен 0, bitDepth устанавливается равной BitDepthY.

- В ином случае bitDepth устанавливается равной BitDepthC.

Переменные shift1 и offset1 выводятся следующим образом:

- Переменная shift1 устанавливается равной Max(5, 17 - bitDepth).

- Переменная offset1 устанавливается равной 1 << (shift1 - 1).

Массивы весов sampleWeightL[x][y] для яркости и sampleWeightC[x][y] для цветности с x=0..nCbW - 1 и y=0..nCbH - 1 выводятся следующим образом:

Устанавливаются значения следующих переменных:

- hwRatio устанавливается равным nCbH/nCbW

- displacementX устанавливается равным angleIdx

- displacementY устанавливается равным (displacementX+8)%32

- partIdx устанавливается равным angleIdx >=13 && angleIdx <=27 ? 1 : 0

- rho устанавливается равным следующему значению с использованием таблиц поиска, обозначаемых как Dis, специфицируемый в Таблице 8-12:

rho=(Dis[displacementX]<< 8) + (Dis[displacementY] << 8)

Если одно из следующих условий верно, переменная shiftHor устанавливается равной 0:

angleIdx % 16 равняется 8,

angleIdx % 16 не равняется 0 и hwRatio ≥ 1

В ином случае shiftHor устанавливается равным 1.

Если shiftHor равен 0, offsetX и offsetY выводятся следующим образом:

offsetX=(256 - nCbW) >> 1,

offsetY=(256 - nCbH) >> 1+angleIdx < 16 ? (distanceIdx * nCbH) >> 3 : -((distanceIdx * nCbH) >> 3)

В ином случае, если shiftHor равен 1, offsetX и offsetY выводятся следующим образом:

offsetX=(256 - nCbW) >> 1+angleIdx < 16 ? (distanceIdx * nCbW) >> 3 : -((distanceIdx * nCbW) >> 3)

offsetY=(256 - nCbH) >> 1

Переменные weightIdx и weightIdxAbs вычисляются с использованием таблицы поиска, Таблицы 9 с x=0..nCbW - 1 и y=0..nCbH - 1, следующим образом:

weightIdx=(((x+offsetX)<<1) + 1)*Dis[displacementX]

+ (((y+offsetY)<<1) + 1))*Dis[displacementY] - rho.

weightIdxAbs=Clip3(0, 26, abs(weightIdx)).

Значение sampleWeightL[x][y] с x=0..nCbW - 1 и y=0..nCbH - 1 устанавливается согласно Таблице 10, обозначаемой как GeoFilter:

sampleWeightL[x][y]=weightIdx <= 0 ? GeoFilter[weightIdxAbs] : 8 - GeoFilter[weightIdxAbs]

Значение sampleWeightC[x][y] с x=0..nCbW - 1 и y=0..nCbH - 1 устанавливается следующим образом:

sampleWeightC[x][y]=sampleWeightL[(x<< (SubWidthC - 1))][(y<< (SubHeightC - 1))]

ПРИМЕЧАНИЕ - Значение выборки sampleWeightL[x][y] также может быть выведено из sampleWeightL[x -shiftX][y-shiftY]. Если angleIdx больше 4 и меньше 12, или angleIdx больше 20 и меньше 24, то shiftX является тангенсом угла разбиения, а shiftY равен 1, в ином случае shiftX угла разбиения равен 1, а shiftY является котангенсом угла разбиения. Если значение тангенса (соотв. котангенса) равно бесконечности, shiftX равен 1 (соотв. 0) или shiftY равен 0 (соотв. 1).

Значения выборок предсказания выводятся следующим образом с X, обозначаемым как L или C, с cIdx равным 0 или не равным 0:

pbSamples[x][y]=partIdx ?

Clip3(0, (1 << bitDepth) - 1, (predSamplesLA[x][y] * (8 - sampleWeightX[x][y]) + predSamplesLB[x][y] * sampleWeightX [x][y] + offset1) >> shift1)

: Clip3(0, (1 << bitDepth) - 1, (predSamplesLA[x][y] * sampleWeightX [x][y] + predSamplesLB[x][y] * (8 - sampleWeightX[x][y]) + offset1) >> shift1)

Таблица 5 - Таблица поиска Dis для выведения расстояния геометрического разделения

idx 0 1 2 4 6 7 8 9 10 12 14 15 Dis[idx] 8 8 8 8 4 2 0 -2 -4 -8 -8 -8 idx 16 17 18 20 22 23 24 25 26 28 30 31 Dis[idx] -8 -8 -8 -8 -4 -2 0 2 4 8 8 8

Таблица 6 - Таблица поиска весов фильтра GeoFilter для выведения весов фильтра геометрического разделения

idx 0 1 2 3 4 5 6 7 8 9 10 11 12 13 GeoFilter[idx] 4 4 4 4 5 5 5 5 5 5 5 6 6 6 idx 14 15 16 17 18 19 20 21 22 23 24 25 26 GeoFilter[idx] 6 6 6 6 7 7 7 7 7 7 7 7 8

В проекте 7 спецификации VVC (документ JVET-P2001-vE: B. Bross, J. Chen, S. Liu, Y.- K. Wang, “Versatile Video Coding (Draft 7)”, готовый документ JVET-P2001 16-го заседания JVET, Женева, Швейцария; этот документ содержится в файле JVET-P2001-v14: http://phenix.it-sudparis.eu/jvet/doc_end_user/documents/16_Geneva/wg11/JVET-P2001-v14.zip), концепция заголовка изображения (PH) была введена путем перемещения части синтаксических элементов из заголовка слайса (SH) в этот PH, чтобы сократить непроизводительные затраты на сигнализацию, порождаемые назначением равных или аналогичных значений одним и тем же синтаксическим элементам в каждом SH, связанном с PH. Как представлено в Таблице 7, синтаксические элементы для управления максимальным числом кандидатов на слияние для режима TPM-слияния сигнализируются в PH, тогда как параметры взвешенного предсказания все еще находятся в SH как показано в Таблице 8 и Таблице 10. Семантика синтаксических элементов, используемых в Таблице 8 и Таблице 9, описана ниже.

Таблица 7 - Синтаксис RBSP заголовка изображения

picture_header_rbsp() { Дескриптор non_reference_picture_flag u(1) gdr_pic_flag u(1) no_output_of_prior_pics_flag u(1) if(gdr_pic_flag) recovery_poc_cnt ue(v) ph_pic_parameter_set_id ue(v) if(sps_poc_msb_flag) { ph_poc_msb_present_flag u(1) if(ph_poc_msb_present_flag) poc_msb_val u(v) } if(sps_triangle_enabled_flag && MaxNumMergeCand >= 2 && !pps_max_num_merge_cand_minus_max_num_triangle_cand_plus1) pic_max_num_merge_cand_minus_max_num_triangle_cand ue(v) rbsp_trailing_bits() }

Семантика RBSP заголовка изображения

PH содержит информацию, которая является общей для всех слайсов кодируемого/декодируемого изображения, связанного с этим PH.

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

gdr_pic_flag, равный 1, специфицирует, что изображение, связанное с PH, является изображением постепенного обновления декодирования (GDR). gdr_pic_flag, равный 0, специфицирует, что изображение, связанное с PH, не является GDR-изображением.

no_output_of_prior_pics_flag влияет на вывод ранее декодированных изображений в буфере декодированных изображений (DPB) после декодирования изображения начала видеопоследовательности кодируемого/декодируемого слоя (CLVSS), которое не является первым изображением в битовом потоке.

recovery_poc_cnt специфицирует точку восстановления декодированных изображений в порядке вывода. Если текущее изображение представляет собой GDR-изображение, которое связано с PH, и имеется изображение picA, которое следует за текущим GDR-изображением в порядке декодирования в видеопоследовательности кодируемого/декодируемого слоя (CLVS) и которое имеет значение PicOrderCntVal, равное значению PicOrderCntVal текущего GDR-изображения плюс значение recovery_poc_cnt, изображение picA называется изображением точки восстановления. В ином случае изображением точки восстановления называется первое изображение в порядке вывода, у которого PicOrderCntVal больше, чем PicOrderCntVal у текущего изображения плюс значение recovery_poc_cnt. Изображение точки восстановления не должно предшествовать текущему GDR-изображению в порядке декодирования. Значение recovery_poc_cnt должно находиться в диапазоне от 0 до MaxPicOrderCntLsb - 1 включительно.

ПРИМЕЧАНИЕ 1. Когда gdr_enabled_flag равен 1, а PicOrderCntVal текущего изображения больше или равно RpPicOrderCntVal связанного GDR-изображения, текущее и последующие декодируемые изображения в порядке вывода точно соответствуют соответствующим изображениям, получаемым путем запуска процесса декодирования с предыдущего изображения внутренней точки произвольного доступа (IRAP), когда присутствует, идущего перед связанным GDR-изображением в порядке декодирования.

ph_pic_parameter_set_id специфицирует значение pps_pic_parameter_set_id для используемого PPS. Значение ph_pic_parameter_set_id должно находиться в диапазоне от 0 до 63 включительно.

Для совместимости битового потока требуется, чтобы значение TemporalId PH было больше или равно значению TemporalId набора параметров изображения (PPS), который имеет pps_pic_parameter_set_id, равный ph_pic_parameter_set_id.

sps_poc_msb_flag, равный 1, специфицирует, что синтаксический элемент ph_poc_msb_cycle_present_flag присутствует в PH, ссылающихся на набор параметров последовательности (SPS). sps_poc_msb_flag, равный 0, специфицирует, что синтаксический элемент ph_poc_msb_cycle_present_flag не присутствует в PH, ссылающихся на SPS.

ph_poc_msb_present_flag, равный 1, специфицирует, что синтаксический элемент poc_msb_val присутствует в PH. ph_poc_msb_present_flag, равный 0, специфицирует, что синтаксический элемент poc_msb_val не присутствует в PH. Когда vps_independent_layer_flag[GeneralLayerIdx[nuh_layer_id]] равен 0, и в текущей единице доступа (AU) в опорном слое текущего слоя имеется изображение, значение ph_poc_msb_present_flag должно быть равно 0.

poc_msb_val специфицирует значение наиболее значимого бита (MSB) порядкового числа изображения (POC) собственно текущего изображения. Длина синтаксического элемента poc_msb_val равна poc_msb_len_minus1+1 бит.

sps_triangle_enabled_flag специфицирует, можно ли использовать основанную на треугольной форме компенсацию движения для интер-предсказания. sps_triangle_enabled_flag, равный 0, специфицирует, что синтаксис должен быть ограничен таким образом, чтобы никакая основанная на треугольной форме компенсация движения не использовалась в видеопоследовательности кодируемого/декодируемого слоя (CLVS), а merge_triangle_split_dir, merge_triangle_idx0 и merge_triangle_idx1 не присутствовали в синтаксисе единицы кодирования/декодирования упомянутой CLVS. sps_triangle_enabled_flag, равный 1, специфицирует, что основанная на треугольной форме компенсация движения может использоваться в CLVS.

pps_max_num_merge_cand_minus_max_num_triangle_cand_plus1, равное 0, специфицирует, что pic_max_num_merge_cand_minus_max_num_triangle_cand присутствует в PH слайсов, ссылающихся на набор параметров изображения (PPS). pps_max_num_merge_cand_minus_max_num_triangle_cand_plus1, большее 0, специфицирует, что pic_max_num_merge_cand_minus_max_num_triangle_cand не присутствует в PH, ссылающихся на PPS. Значение pps_max_num_merge_cand_minus_max_num_triangle_cand_plus1 должно находиться в диапазоне от 0 до MaxNumMergeCand - 1.

pps_max_num_merge_cand_minus_max_num_triangle_cand_plus1, равное 0, специфицирует, что pic_max_num_merge_cand_minus_max_num_triangle_cand присутствует в PH слайсов, ссылающихся на PPS. pps_max_num_merge_cand_minus_max_num_triangle_cand_plus1, большее 0, специфицирует, что pic_max_num_merge_cand_minus_max_num_triangle_cand не присутствует в PH, ссылающихся на PPS. Значение pps_max_num_merge_cand_minus_max_num_triangle_cand_plus1 должно находиться в диапазоне от 0 до MaxNumMergeCand - 1.

pic_six_minus_max_num_merge_cand специфицирует максимальное число кандидатов предсказания вектора движения, MVP, на слияние, поддерживаемое в слайсах, связанных с PH, вычитаемое из 6. Максимальное число MVP-кандидатов на слияние, MaxNumMergeCand, выводится следующим образом:

MaxNumMergeCand=6 - picsix_minus_max_num_merge_cand

Значение MaxNumMergeCand должно находиться в диапазоне от 1 до 6 включительно. Когда не присутствует, значение pic_six_minus_max_num_merge_cand логически выводится равным pps_six_minus_max_num_merge_cand_plus1 - 1.

Таблица 8 - Общий синтаксис заголовка слайса

slice_header() { Дескриптор slice_pic_order_cnt_lsb u(v) if(subpics_present_flag) slice_subpic_id u(v) if(rect_slice_flag | | NumTilesInPic > 1) slice_address u(v) if(!rect_slice_flag && NumTilesInPic > 1) num_tiles_in_slice_minus1 ue(v) slice_type ue(v) if(!pic_rpl_present_flag &&((nal_unit_type != IDR_W_RADL && nal_unit_type != IDR_N_LP) | | sps_idr_rpl_present_flag)) { for(i=0; i < 2; i++) { if(num_ref_pic_lists_in_sps[i] > 0 && !pps_ref_pic_list_sps_idc[i] && (i== 0 | | (i== 1 && rpl1_idx_present_flag))) slice_rpl_sps_flag[i] u(1) if(slice_rpl_sps_flag[i]) { if(num_ref_pic_lists_in_sps[i] > 1 && (i== 0 | | (i== 1 && rpl1_idx_present_flag))) slice_rpl_idx[i] u(v) } else ref_pic_list_struct(i, num_ref_pic_lists_in_sps[i]) for(j=0; j < NumLtrpEntries[i][RplsIdx[i]]; j++) { if(ltrp_in_slice_header_flag[i][RplsIdx[i]]) slice_poc_lsb_lt[i][j] u(v) slice_delta_poc_msb_present_flag[i][j] u(1) if(slice_delta_poc_msb_present_flag[i][j]) slice_delta_poc_msb_cycle_lt[i][j] ue(v) } } } if(pic_rpl_present_flag | | ((nal_unit_type != IDR_W_RADL && nal_unit_type != IDR_N_LP) | | sps_idr_rpl_present_flag)) { if((slice_type != I && num_ref_entries[0][RplsIdx[0]] > 1) | | (slice_type== B && num_ref_entries[1][RplsIdx[1]] > 1)) { num_ref_idx_active_override_flag u(1) if(num_ref_idx_active_override_flag) for(i=0; i < (slice_type== B ? 2: 1); i++) if(num_ref_entries[i][RplsIdx[i]] > 1) num_ref_idx_active_minus1[i] ue(v) } } if(slice_type != I) { if((pps_weighted_pred_flag && slice_type== P) | | (pps_weighted_bipred_flag && slice_type== B)) pred_weight_table() } byte_alignment() }

Общая семантика заголовка слайса

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

Переменная CuQpDeltaVal, специфицирующая разницу между параметром квантования яркости для единицы кодирования/декодирования, содержащей cu_qp_delta_abs, и его предсказанием, устанавливается равной 0. Переменные CuQpOffsetCb, CuQpOffsetCr и CuQpOffsetCbCr, специфицирующие значения, которые подлежат использованию при определении соответствующих значений параметров квантования Qp′ Cb, Qp′ Cr и Qp′ CbCr для единицы кодирования/декодирования, содержащей cu_chroma_qp_offset_flag, все устанавливаются равными 0.

slice_pic_order_cnt_lsb специфицирует порядковое число изображения по модулю MaxPicOrderCntLsb для текущего изображения. Длина синтаксического элемента slice_pic_order_cnt_lsb равна log2_max_pic_order_cnt_lsb_minus4+4 бит. Значение slice_pic_order_cnt_lsb должно находиться в диапазоне от 0 до MaxPicOrderCntLsb - 1 включительно.

Когда текущее изображение является GDR-изображением, переменная RpPicOrderCntVal выводится следующим образом:

RpPicOrderCntVal=PicOrderCntVal+recovery_poc_cnt.

slice_subpic_id специфицирует идентификатор субизображения для субизображения, которое содержит слайс. Если slice_subpic_id присутствует, значение переменной SubPicIdx выводится таким образом, чтобы SubpicIdList[SubPicIdx] был равен slice_subpic_id. В ином случае (slice_subpic_id не присутствует) переменная SubPicIdx выводится равной 0. Длина slice_subpic_id в битах выводится следующим образом:

- Если sps_subpic_id_signalling_present_flag равен 1, длина slice_subpic_id равна sps_subpic_id_len_minus1+1.

- В ином случае, если ph_subpic_id_signalling_present_flag равен 1, длина slice_subpic_id равна ph_subpic_id_len_minus1+1.

- В ином случае, если pps_subpic_id_signalling_present_flag равен 1, длина slice_subpic_id равна pps_subpic_id_len_minus1+1.

- В ином случае длина slice_subpic_id равна Ceil(Log2 (sps_num_subpics_minus1+1)).

slice_address специфицирует адрес слайса для слайса. Когда не присутствует, значение slice_address логически выводится равным 0.

Если rect_slice_flag равен 0, применяется следующее:

- Адрес слайса является индексом тайла растрового сканирования.

- Длина slice_address равна Ceil(Log2 (NumTilesInPic)) бит.

- Значение slice_address должно находиться в диапазоне от 0 до NumTilesInPic - 1 включительно.

В ином случае (rect_slice_flag равен 1), применяется следующее:

- Адрес слайса является индексом слайса для слайса в пределах SubPicIdx-ого субизображения.

- Длина slice_address равна Ceil(Log2(NumSlicesInSubpic[SubPicIdx])) бит.

- Значение slice_address должно находиться в диапазоне от 0 до NumSlicesInSubpic[SubPicIdx] - 1 включительно.

Для совместимости битового потока требуется, чтобы применялись следующие ограничения:

- Если rect_slice_flag равен 0 или subpics_present_flag равен 0, значение slice_address не должно быть равно значению slice_address любой другой единицы уровня сетевой абстракции (NAL) кодируемого/декодируемого слайса.

- В ином случае пара значений slice_subpic_id и slice_address не должна быть равна паре значений slice_subpic_id и slice_address любой другой единицы NAL кодируемого/декодируемого слайса.

- Когда rect_slice_flag равен 0, слайсы изображения должны располагаться в порядке возрастания их значений slice_address.

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

num_tiles_in_slice_minus1 плюс 1, когда присутствует, специфицирует число тайлов в слайсе. Значение num_tiles_in_slice_minus1 должно находиться в диапазоне от 0 до NumTilesInPic - 1 включительно.

Переменная NumCtuInCurrSlice, которая специфицирует число CTU в текущем слайсе, и список CtbAddrInCurrSlice[i] для i в диапазоне от 0 до NumCtuInCurrSlice - 1 включительно, специфицирующий адрес растрового сканирования изображения i-го блока дерева кодирования/декодирования (CTB) в слайсе, выводятся следующим образом:

if(rect_slice_flag) {picLevelSliceIdx = SliceSubpicToPicIdx[SubPicIdx][slice_address]NumCtuInCurrSlice = NumCtuInSlice[picLevelSliceIdx]for(i = 0; i < NumCtuInCurrSlice; i++)CtbAddrInCurrSlice[i] = CtbAddrInSlice[picLevelSliceIdx][i]} else {NumCtuInCurrSlice = 0 for(tileIdx = slice_address; tileIdx <= slice_address + num_tiles_in_slice_minus1[i]; tileIdx++) {tileX = tileIdx % NumTileColumnstileY = tileIdx / NumTileColumns for(ctbY = tileRowBd[tileY]; ctbY < tileRowBd[tileY + 1]; ctbY++) {for(ctbX = tileColBd[tileX]; ctbX < tileColBd[tileX + 1]; ctbX++) {CtbAddrInCurrSlice[NumCtuInCurrSlice] = ctbY * PicWidthInCtb + ctbX umCtuInCurrSlice++}}}}

Переменные SubPicLeftBoundaryPos, SubPicTopBoundaryPos, SubPicRightBoundaryPos и SubPicBotBoundaryPos выводятся следующим образом:

if(subpic_treated_as_pic_flag[SubPicIdx]){SubPicLeftBoundaryPos = subpic_ctu_top_left_x[SubPicIdx] * CtbSizeYSubPicRightBoundaryPos = Min(pic_width_max_in_luma_samples - 1,(subpic_ctu_top_left_x[SubPicIdx] + subpic_width_minus1[SubPicIdx] + 1) * CtbSizeY - 1)SubPicTopBoundaryPos = subpic_ctu_top_left_y[SubPicIdx] *CtbSizeY SubPicBotBoundaryPos = Min(pic_height_max_in_luma_samples - 1,(subpic_ctu_top_left_y[SubPicIdx] + subpic_height_minus1[SubPicIdx] + 1) * CtbSizeY - 1)}

slice_type специфицирует тип кодирования/декодирования слайса согласно Таблице 9.

Таблица 9 - Связь наименования с slice_type

slice_type Наименование slice_type 0 B (B-слайс) 1 P (P-слайс) 2 I (I-слайс)

slice_rpl_sps_flag[i], равный 1, специфицирует, что список i опорных изображений текущего слайса выводится на основе одной из синтаксических структур ref_pic_list_struct(listIdx, rplsIdx) с listIdx, равным i, в SPS. slice_rpl_sps_flag[i], равный 0, специфицирует, что список i опорных изображений текущего слайса выводится на основе синтаксической структуры ref_pic_list_struct(listIdx, rplsIdx) с listIdx, равным i, которая непосредственно включается в заголовки слайсов текущего изображения.

Когда slice_rpl_sps_flag[i] не присутствует, применяется следующее:

- Если pic_rpl_present_flag равен 1, значение slice_rpl_sps_flag[i] логически выводится равным pic_rpl_sps_flag[i].

- В ином случае, если num_ref_pic_lists_in_sps[i] равно 0, значение ref_pic_list_sps_flag[i] логически выводится равным 0.

- В ином случае, если num_ref_pic_lists_in_sps[i] больше 0 и если rpl1_idx_present_flag равен 0, значение slice_rpl_sps_flag[1] логически выводится равным slice_rpl_sps_flag[0].

slice_rpl_idx[i] специфицирует индекс, в список синтаксических структур ref_pic_list_struct(listIdx, rplsIdx) с listIdx, равным i, включенных в SPS, синтаксической структуры ref_pic_list_struct(listIdx, rplsIdx) с listIdx, равным i, которая используется для выведения списка i опорных изображений для текущего изображения. Синтаксический элемент slice_rpl_idx[i] представляется Ceil(Log2(num_ref_pic_lists_in_sps[i])) битами. Когда не присутствует, значение slice_rpl_idx[i] логически выводится равным 0. Значение slice_rpl_idx[i] должно находиться в диапазоне от 0 до num_ref_pic_lists_in_sps[i] - 1 включительно. Когда slice_rpl_sps_flag[i] равен 1, а num_ref_pic_lists_in_sps[i] равен 1, значение slice_rpl_idx[i] логически выводится равным 0. Когда slice_rpl_sps_flag[i] равен 1, а rpl1_idx_present_flag равен 0, значение slice_rpl_idx[1] логически выводится равным slice_rpl_idx[0].

Переменная RplsIdx[i] выводится следующим образом:

slice_poc_lsb_lt[i][j] специфицирует значение порядкового числа изображения по модулю MaxPicOrderCntLsb j-й LTRP-записи в i-м списке опорных изображений. Длина синтаксического элемента slice_poc_lsb_lt[i][j] равна log2_max_pic_order_cnt_lsb_minus4+4 бит.

Переменная PocLsbLt[i][j] выводится следующим образом:

slice_delta_poc_msb_present_flag[i][j], равный 1, специфицирует, что slice_delta_poc_msb_cycle_lt[i][j] присутствует. slice_delta_poc_msb_present_flag[i][j], равный 0, специфицирует, что slice_delta_poc_msb_cycle_lt[i][j] не присутствует.

Пусть prevTid0Pic будет предыдущим изображением в порядке декодирования, которое имеет nuh_layer_id такой же, как у текущего изображения, имеет TemporalId, равный 0, и не является пропущенным ведущим изображением произвольного доступа (RASL) или декодируемым ведущим изображением произвольного доступа (RADL). Пусть setOfPrevPocVals будет набором, состоящим из следующего:

- PicOrderCntVal для prevTid0Pic,

- PicOrderCntVal каждого изображения, на которое ссылаются записи в RefPicList[0] или RefPicList[1] для prevTid0Pic и которое имеет такой же nuh_layer_id, что и текущее изображение,

- PicOrderCntVal каждого изображения, которое следует за prevTid0Pic в порядке декодирования, имеет такой же nuh_layer_id, что и текущее изображение, и предшествует текущему изображению в порядке декодирования.

Когда pic_rpl_present_flag равен 0 и имеется более одного значения в setOfPrevPocVals, для которого значение по модулю MaxPicOrderCntLsb равно PocLsbLt[i][j], значение slice_delta_poc_msb_present_flag[i][j] должно быть равно 1.

slice_delta_poc_msb_cycle_lt[i][j] специфицирует значение переменной FullPocLt[i][j] следующим образом:

Значение slice_delta_poc_msb_cycle_lt[i][j] должно находиться в диапазоне от 0 до 2(32 - log2_max_pic_order_cnt_lsb_minus4 - 4) включительно. Когда не присутствует, значение slice_delta_poc_msb_cycle_lt[i][j] логически выводится равным 0.

num_ref_idx_active_override_flag, равный 1, специфицирует, что синтаксический элемент num_ref_idx_active_minus1[0] присутствует для P- и B-слайсов и что синтаксический элемент num_ref_idx_active_minus1[1] присутствует для B-слайсов. num_ref_idx_active_override_flag, равный 0, специфицирует, что синтаксические элементы num_ref_idx_active_minus1[0] и num_ref_idx_active_minus1[1] не присутствуют. Когда не присутствует, значение num_ref_idx_active_override_flag логически выводится равным 1.

num_ref_idx_active_minus1[i] используется для выведения переменной NumRefIdxActive[i], как специфицировано Уравнением 145. Значение num_ref_idx_active_minus1[i] должно находиться в диапазоне от 0 до 14 включительно.

Для i, равного 0 или 1, когда текущим слайсом является B-слайс, num_ref_idx_active_override_flag равен 1 и num_ref_idx_active_minus1[i] не присутствует, num_ref_idx_active_minus1[i] логически выводится равным 0.

Когда текущим слайсом является P-слайс, num_ref_idx_active_override_flag равен 1 и num_ref_idx_active_minus1[i] не присутствует, num_ref_idx_active_minus1[i] логически выводится равным 0.

Переменная NumRefIdxActive[i] выводится следующим образом:

Значение NumRefIdxActive[i] - 1 специфицирует максимальный опорный индекс для списка i опорных изображений, который может быть использован для декодирования слайса. Когда значение NumRefIdxActive[i] равно 0, никакой опорный индекс для списка i опорных изображений не может быть использован для декодирования слайса.

Когда текущий слайс представляет собой P-слайс, значение NumRefIdxActive[0] должно быть больше 0.

Когда текущий слайс представляет собой B-слайс, как NumRefIdxActive[0], так и NumRefIdxActive[1] должны быть больше 0.

Синтаксис параметров взвешенного предсказания

pred_weight_table() { Дескриптор luma_log2_weight_denom ue(v) if(ChromaArrayType != 0) delta_chroma_log2_weight_denom se(v) for(i=0; i < NumRefIdxActive[0]; i++) luma_weight_l0_flag[i] u(1) if(ChromaArrayType != 0) for(i=0; i < NumRefIdxActive[0]; i++) chroma_weight_l0_flag[i] u(1) for(i=0; i < NumRefIdxActive[0]; i++) { if(luma_weight_l0_flag[i]) { delta_luma_weight_l0[i] se(v) luma_offset_l0[i] se(v) } if(chroma_weight_l0_flag[i]) for(j=0; j < 2; j++) { delta_chroma_weight_l0[i][j] se(v) delta_chroma_offset_l0[i][j] se(v) } } if(slice_type== B) { for(i=0; i < NumRefIdxActive[1]; i++) luma_weight_l1_flag[i] u(1) if(ChromaArrayType != 0) for(i=0; i < NumRefIdxActive[1]; i++) chroma_weight_l1_flag[i] u(1) for(i=0; i < NumRefIdxActive[1]; i++) { if(luma_weight_l1_flag[i]) { delta_luma_weight_l1[i] se(v) luma_offset_l1[i] se(v) } if(chroma_weight_l1_flag[i]) for(j=0; j < 2; j++) { delta_chroma_weight_l1[i][j] se(v) delta_chroma_offset_l1[i][j] se(v) } } } }

Семантика параметров взвешенного предсказания

luma_log2_weight_denom представляет собой логарифм знаменателя по основанию 2 для всех весовых коэффициентов яркости. Значение luma_log2_weight_denom должно находиться в диапазоне от 0 до 7 включительно.

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

Переменная ChromaLog2WeightDenom выводится равной luma_log2_weight_denom+delta_chroma_log2_weight_denom и значение должно находиться в диапазоне от 0 до 7 включительно.

luma_weight_l0_flag[i], равный 1, специфицирует, что весовые коэффициенты для компоненты яркости предсказания списка 0, использующего RefPicList[0][i], присутствуют. luma_weight_l0_flag[i], равный 0, специфицирует, что эти весовые коэффициенты не присутствуют.

chroma_weight_l0_flag[i], равный 1, специфицирует, что весовые коэффициенты для значений предсказания цветности для предсказания списка 0, использующего RefPicList[0][i], присутствуют.

chroma_weight_l0_flag[i], равный 0, специфицирует, что эти весовые коэффициенты не присутствуют. Когда chroma_weight_l0_flag[i] не присутствует, он логически выводится равным 0.

delta_luma_weight_l0[i] представляет собой разность весового коэффициента, применяемого к значению предсказания яркости для предсказания списка 0, использующего RefPicList[0][i].

Переменная LumaWeightL0[i] выводится равной (1 << luma_log2_weight_denom) + delta_luma_weight_l0[i]. Когда luma_weight_l0_flag[i] равен 1, значение delta_luma_weight_l0[i] должно находиться в диапазоне от -128 до 127 включительно. Когда luma_weight_l0_flag[i] равен 0, LumaWeightL0[i] логически выводится равным 2luma_log2_weight_denom.

luma_offset_l0[i] представляет собой аддитивное смещение, применяемое к значению предсказания яркости для предсказания списка 0, использующего RefPicList[0][i]. Значение luma_offset_l0[i] должно находиться в диапазоне от -128 до 127 включительно. Когда luma_weight_l0_flag[i] равен 0, luma_offset_l0[i] логически выводится равным 0.

delta_chroma_weight_l0[i][j] является разностью весового коэффициента, применяемого к значениям предсказания цветности для предсказания списка 0, использующего RefPicList[0][i], где j равно 0 для Cb и j равно 1 для Cr.

Переменная ChromaWeightL0[i][j] выводится равной (1 << ChromaLog2WeightDenom) + delta_chroma_weight_l0[i][j]. Когда chroma_weight_l0_flag[i] равен 1, значение delta_chroma_weight_l0[i][j] должно находиться в диапазоне от -128 до 127 включительно. Когда chroma_weight_l0_flag[i] равен 0, ChromaWeightL0[i][j] логически выводится равным 2ChromaLog2WeightDenom.

delta_chroma_offset_l0[i][j] является разностью аддитивного смещения, применяемого к значениям предсказания цветности для предсказания списка 0, использующего RefPicList[0][i], где j равно 0 для Cb и j равно 1 для Cr.

Переменная ChromaOffsetL0[i][j] выводится следующим образом:

ChromaOffsetL0[i][j]=Clip3(-128, 127, (128+delta_chroma_offset_l0[i][j] - ((128 * ChromaWeightL0[i][j]) >> ChromaLog2WeightDenom)))

Значение delta_chroma_offset_l0[i][j] должно находиться в диапазоне от -4 * 128 до 4 * 127 включительно. Когда chroma_weight_l0_flag[i] равен 0, ChromaOffsetL0[i][j] логически выводится равным 0.

luma_weight_l1_flag[i], chroma_weight_l1_flag[i], delta_luma_weight_l1[i], luma_offset_l1[i], delta_chroma_weight_l1[i][j] и delta_chroma_offset_l1[i][j] имеют ту же самую семантику, что и, соответственно, luma_weight_l0_flag[i], chroma_weight_l0_flag[i], delta_luma_weight_l0[i], luma_offset_l0[i], delta_chroma_weight_l0[i][j] и delta_chroma_offset_l0[i][j], причем l0, L0, список 0 и List0 соответственно заменяются на l1, L1, список 1 и List1.

Переменная sumWeightL0Flags выводится равной сумме luma_weight_l0_flag[i] + 2 * chroma_weight_l0_flag[i], для i=0..NumRefIdxActive[0] - 1.

Когда slice_type равен B, переменная sumWeightL1Flags выводится равной сумме luma_weight_l1_flag[i] + 2 * chroma_weight_l1_flag[i], для i=0..NumRefIdxActive[1] - 1.

Для совместимости битового потока требуется, чтобы, когда slice_type равен P, sumWeightL0Flags должна быть меньше или равна 24, а когда slice_type равен B, сумма sumWeightL0Flags и sumWeightL1Flags должна быть меньше или равна 24.

Семантика структуры списка опорных изображений

Синтаксическая структура ref_pic_list_struct(listIdx, rplsIdx) может присутствовать в SPS или в заголовке слайса. В зависимости от того, включена ли синтаксическая структура в заголовок слайса или в SPS, применяется следующее:

- Если присутствует в заголовке слайса, синтаксическая структура ref_pic_list_struct(listIdx, rplsIdx) специфицирует список listIdx опорных изображений для текущего изображения (изображения, содержащего слайс).

- В ином случае (присутствует в SPS) синтаксическая структура ref_pic_list_struct(listIdx, rplsIdx) специфицирует кандидата для списка listIdx опорных изображений, а термин "текущее изображение" в семантике, специфицируемой в остальной части этого пункта, относится к каждому изображению, которое 1) имеет один или несколько слайсов, содержащих ref_pic_list_idx[listIdx] равный индексу в список синтаксических структур ref_pic_list_struct(listIdx, rplsIdx), включенных в SPS, и 2) находится в кодируемой/декодируемой видеопоследовательности (CVS), которая ссылается на SPS.

num_ref_entries[listIdx][rplsIdx] специфицирует число записей в синтаксической структуре ref_pic_list_struct(listIdx, rplsIdx). Значение num_ref_entries[listIdx][rplsIdx] должно находиться в диапазоне от 0 до MaxDecPicBuffMinus1+14 включительно.

ltrp_in_slice_header_flag[listIdx][rplsIdx], равный 0, специфицирует, что LSB POC LTRP-записей в синтаксической структуре ref_pic_list_struct(listIdx, rplsIdx) присутствуют в синтаксической структуре ref_pic_list_struct(listIdx, rplsIdx). ltrp_in_slice_header_flag[listIdx][rplsIdx], равный 1, специфицирует, что LSB POC записей долгосрочного опорного изображения (LTRP) в синтаксической структуре ref_pic_list_struct(listIdx, rplsIdx) не присутствуют в синтаксической структуре ref_pic_list_struct(listIdx, rplsIdx).

inter_layer_ref_pic_flag[listIdx][rplsIdx][i], равный 1, специфицирует, что i-я запись в синтаксической структуре ref_pic_list_struct(listIdx, rplsIdx) является записью межслойного опорного изображения (ILRP). inter_layer_ref_pic_flag[listIdx][rplsIdx][i], равный 0, специфицирует, что i-я запись в синтаксической структуре ref_pic_list_struct(listIdx, rplsIdx) не является ILRP-записью. Когда не присутствует, значение inter_layer_ref_pic_flag[listIdx][rplsIdx][i] логически выводится равным 0.

st_ref_pic_flag[listIdx][rplsIdx][i], равный 1, специфицирует, что i-я запись в синтаксической структуре ref_pic_list_struct(listIdx, rplsIdx) является STRP-записью. st_ref_pic_flag[listIdx][rplsIdx][i], равный 0, специфицирует, что i-я запись в синтаксической структуре ref_pic_list_struct(listIdx, rplsIdx) является LTRP-записью. Когда inter_layer_ref_pic_flag[listIdx][rplsIdx][i] равен 0, а st_ref_pic_flag[listIdx][rplsIdx][i] не присутствует, значение st_ref_pic_flag[listIdx][rplsIdx][i] логически выводится равным 1.

Переменная NumLtrpEntries[listIdx][rplsIdx] выводится следующим образом:

for(i = 0, NumLtrpEntries[listIdx][rplsIdx] = 0; i < num_ref_entries[listIdx][rplsIdx]; i++)if(!inter_layer_ref_pic_flag[listIdx][rplsIdx][i] && !st_ref_pic_flag[listIdx][rplsIdx][i])NumLtrpEntries[listIdx][rplsIdx]++

abs_delta_poc_st[listIdx][rplsIdx][i] специфицирует значение переменной AbsDeltaPocSt[listIdx][rplsIdx][i] следующим образом:

if(sps_weighted_pred_flag | | sps_weighted_bipred_flag)AbsDeltaPocSt[listIdx][rplsIdx][i] = abs_delta_poc_st[listIdx][rplsIdx][i]elseAbsDeltaPocSt[listIdx][rplsIdx][i] = abs_delta_poc_st[listIdx][rplsIdx][i] + 1

Значение abs_delta_poc_st[listIdx][rplsIdx][i] должно находиться в диапазоне от 0 до 215 - 1 включительно.

strp_entry_sign_flag[listIdx][rplsIdx][i], равный 1, специфицирует, что i-я запись в синтаксической структуре ref_pic_list_struct(listIdx, rplsIdx) имеет значение, большее или равное 0. strp_entry_sign_flag[listIdx][rplsIdx][i], равный 0, специфицирует, что i-я запись в синтаксической структуре ref_pic_list_struct(listIdx, rplsIdx) имеет значение меньше 0. Когда не присутствует, значение strp_entry_sign_flag[listIdx][rplsIdx][i] логически выводится равным 1.

Список DeltaPocValSt[listIdx][rplsIdx] выводится следующим образом:

for(i = 0; i < num_ref_entries[listIdx][rplsIdx]; i++)if(!inter_layer_ref_pic_flag[listIdx][rplsIdx][i] && st_ref_pic_flag[listIdx][rplsIdx][i])

DeltaPocValSt[listIdx][rplsIdx][i] = (strp_entry_sign_flag[listIdx][rplsIdx][i]) ?AbsDeltaPocSt[listIdx][rplsIdx][i] : 0 - AbsDeltaPocSt[listIdx][rplsIdx][i]

rpls_poc_lsb_lt[listIdx][rplsIdx][i] специфицирует значение порядкового числа изображения по модулю MaxPicOrderCntLsb для изображения, на которое ссылается i-я запись в синтаксической структуре ref_pic_list_struct(listIdx, rplsIdx). Длина синтаксического элемента rpls_poc_lsb_lt[listIdx][rplsIdx][i] равна log2_max_pic_order_cnt_lsb_minus4+4 бит.

ilrp_idx[listIdx][rplsIdx][i] специфицирует индекс, в список непосредственных опорных слоев, ILRP i-й записи в синтаксической структуре ref_pic_list_struct(listIdx, rplsIdx). Значение ilrp_idx[listIdx][rplsIdx][i] должно находиться в диапазоне от 0 до NumDirectRefLayers[GeneralLayerIdx[nuh_layer_id]] - 1 включительно.

Таким образом, разные механизмы могут быть использованы для обеспечения возможности управления режимами GEO/TPM-слияния в зависимости от того, применяется ли WP к опорным изображениям, из которых взяты опорные блоки P0 и P1, а именно:

- Перемещение параметров WP, перечисленных в Таблице 14, из SH в PH;

- Перемещение параметров GEO/TPM из PH обратно в SH;

- Изменение семантики MaxNumTriangleMergeCand, например путем установки MaxNumTriangleMergeCand равным 0 или 1 для таких слайсов, когда могут использоваться опорные изображения с WP (например, где по меньшей мере значением одного из флагов lumaWeightedFlag или является истина).

Для режима TPM-слияния примерные опорные блоки P0 и P1 обозначаются соответственно как 710 и 720 на Фиг. 7. Для режима GEO-слияния примерные опорные блоки P0 и P1 обозначаются соответственно как 810 и 820 на Фиг. 8.

Таким образом, разные механизмы могут быть использованы для обеспечения возможности управления режимами GEO/TPM-слияния в зависимости от того, применяется ли WP к опорным изображениям, из которых взяты опорные блоки P0 и P1, а именно:

- Перемещение параметров WP, перечисленных в Таблице 14, из SH в PH;

- Перемещение параметров GEO/TPM из PH обратно в SH;

- Изменение семантики MaxNumTriangleMergeCand, например путем установки MaxNumTriangleMergeCand равным 0 или 1 для таких слайсов, когда могут использоваться опорные изображения с WP (например, где по меньшей мере значением одного из флагов lumaWeightedFlag или является истина).

Для режима TPM-слияния примерные опорные блоки P0 и P1 обозначаются соответственно как 710 и 720 на Фиг. 7. Для режима GEO-слияния примерные опорные блоки P0 и P1 обозначаются соответственно как 810 и 820 на Фиг. 8.

В варианте осуществления, когда параметры WP и включение непрямоугольных режимов (например, GEO и TPM) сигнализируются в заголовке изображения, может использоваться следующий синтаксис, как показано в таблице ниже:

Таблица - Синтаксис RBSP заголовка изображения

picture_header_rbsp() { Дескриптор non_reference_picture_flag u(1) gdr_pic_flag u(1) no_output_of_prior_pics_flag u(1) if(gdr_pic_flag) recovery_poc_cnt ue(v) ph_pic_parameter_set_id ue(v) if(sps_poc_msb_flag) { ph_poc_msb_present_flag u(1) if(ph_poc_msb_present_flag) poc_msb_val u(v) } pic_rpl_present_flag u(1) if(pic_rpl_present_flag) { for(i=0; i < 2; i++) { if(num_ref_pic_lists_in_sps[i] > 0 && !pps_ref_pic_list_sps_idc[i] && (i== 0 | | (i== 1 && rpl1_idx_present_flag))) pic_rpl_sps_flag[i] u(1) if(pic_rpl_sps_flag[i]) { if(num_ref_pic_lists_in_sps[i] > 1 && (i== 0 | | (i== 1 && rpl1_idx_present_flag))) pic_rpl_idx[i] u(v) } else ref_pic_list_struct(i, num_ref_pic_lists_in_sps[i]) for(j=0; j < NumLtrpEntries[i][RplsIdx[i]]; j++) { if(ltrp_in_slice_header_flag[i][RplsIdx[i]]) pic_poc_lsb_lt[i][j] u(v) pic_delta_poc_msb_present_flag[i][j] u(1) if(pic_delta_poc_msb_present_flag[i][j]) pic_delta_poc_msb_cycle_lt[i][j] ue(v) } } } if((pps_weighted_pred_flag && slice_type== P) | | (pps_weighted_bipred_flag && slice_type== B)) pred_weight_table() if(sps_triangle_enabled_flag && MaxNumMergeCand >= 2 && !pps_max_num_merge_cand_minus_max_num_triangle_cand_plus1 && WPDisabled) pic_max_num_merge_cand_minus_max_num_triangle_cand ue(v) rbsp_trailing_bits() }

….

Переменная WPDisabled устанавливается равной 1, когда все значения luma_weight_l0_flag[i], chroma_weight_l0_flag[i], luma_weight_l1_flag[j] и chroma_weight_l1_flag[j] установлены равными нулю, причем значение i=0 .. NumRefIdxActive[0]; и значение j=0.. NumRefIdxActive[1]; в ином случае значение WPDisabled устанавливается равным 0.

Когда переменная WPDisabled устанавливается равной 0, значение pic_max_num_merge_cand_minus_max_num_triangle_cand устанавливается равным MaxNumMergeCand.

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

slice_header() { Дескриптор slice_pic_parameter_set_id ue(v) if(rect_slice_flag | | NumBricksInPic > 1) slice_address u(v) if(!rect_slice_flag && !single_brick_per_slice_flag) num_bricks_in_slice_minus1 ue(v) non_reference_picture_flag u(1) slice_type ue(v) if(separate_colour_plane_flag== 1) colour_plane_id u(2) slice_pic_order_cnt_lsb u(v) if(nal_unit_type== GDR_NUT) recovery_poc_cnt ue(v) if(nal_unit_type== IDR_W_RADL | | nal_unit_type== IDR_N_LP | | nal_unit_type== CRA_NUT | | NalUnitType== GDR_NUT) no_output_of_prior_pics_flag u(1) if(output_flag_present_flag) pic_output_flag u(1) if((nal_unit_type != IDR_W_RADL && nal_unit_type != IDR_N_LP) | | sps_idr_rpl_present_flag) { for(i=0; i < 2; i++) { if(num_ref_pic_lists_in_sps[i] > 0 && !pps_ref_pic_list_sps_idc[i] && (i== 0 | | (i== 1 && rpl1_idx_present_flag))) ref_pic_list_sps_flag[i] u(1) if(ref_pic_list_sps_flag[i]) { if(num_ref_pic_lists_in_sps[i] > 1 && (i== 0 | | (i== 1 && rpl1_idx_present_flag))) ref_pic_list_idx[i] u(v) } else ref_pic_list_struct(i, num_ref_pic_lists_in_sps[i]) for(j=0; j < NumLtrpEntries[i][RplsIdx[i]]; j++) { if(ltrp_in_slice_header_flag[i][RplsIdx[i]]) slice_poc_lsb_lt[i][j] u(v) delta_poc_msb_present_flag[i][j] u(1) if(delta_poc_msb_present_flag[i][j]) delta_poc_msb_cycle_lt[i][j] ue(v) } } if((slice_type != I && num_ref_entries[0][RplsIdx[0]] > 1) | | (slice_type== B && num_ref_entries[1][RplsIdx[1]] > 1)) { num_ref_idx_active_override_flag u(1) if(num_ref_idx_active_override_flag) for(i=0; i < (slice_type== B ? 2: 1); i++) if(num_ref_entries[i][RplsIdx[i]] > 1) num_ref_idx_active_minus1[i] ue(v) } } if(partition_constraints_override_enabled_flag) { partition_constraints_override_flag ue(v) if(partition_constraints_override_flag) { slice_log2_diff_min_qt_min_cb_luma ue(v) slice_max_mtt_hierarchy_depth_luma ue(v) if(slice_max_mtt_hierarchy_depth_luma != 0) slice_log2_diff_max_bt_min_qt_luma ue(v) slice_log2_diff_max_tt_min_qt_luma ue(v) } if(slice_type== I && qtbtt_dual_tree_intra_flag) { slice_log2_diff_min_qt_min_cb_chroma ue(v) slice_max_mtt_hierarchy_depth_chroma ue(v) if(slice_max_mtt_hierarchy_depth_chroma != 0) slice_log2_diff_max_bt_min_qt_chroma ue(v) slice_log2_diff_max_tt_min_qt_chroma ue(v) } } } } if (slice_type != I) { if(sps_temporal_mvp_enabled_flag && !pps_temporal_mvp_enabled_idc) slice_temporal_mvp_enabled_flag u(1) if(slice_type== B && !pps_mvd_l1_zero_idc) mvd_l1_zero_flag u(1) if(cabac_init_present_flag) cabac_init_flag u(1) if(slice_temporal_mvp_enabled_flag) { if(slice_type== B && !pps_collocated_from_l0_idc) collocated_from_l0_flag u(1) if((collocated_from_l0_flag && NumRefIdxActive[0] > 1) | | (!collocated_from_l0_flag && NumRefIdxActive[1] > 1)) collocated_ref_idx ue(v) } if((pps_weighted_pred_flag && slice_type== P) | | (pps_weighted_bipred_flag && slice_type== B)) slice_weighted_pred_flag u(1) if (slice_weighted_pred_flag) pred_weight_table() if(!pps_six_minus_max_num_merge_cand_plus1) six_minus_max_num_merge_cand ue(v) if(sps_affine_enabled_flag && !pps_five_minus_max_num_subblock_merge_cand_plus1) five_minus_max_num_subblock_merge_cand ue(v) if(sps_fpel_mmvd_enabled_flag) slice_fpel_mmvd_enabled_flag u(1) if(sps_bdof_dmvr_slice_present_flag) slice_disable_bdof_dmvr_flag u(1) if(sps_triangle_enabled_flag && MaxNumMergeCand >= 2 && !pps_max_num_merge_cand_minus_max_num_triangle_cand_minus1 && WPDisabled) { max_num_merge_cand_minus_max_num_triangle_cand ue(v) } } if (sps_ibc_enabled_flag) slice_six_minus_max_num_ibc_merge_cand ue(v) if(sps_joint_cbcr_enabled_flag) slice_joint_cbcr_sign_flag u(1) slice_qp_delta se(v) if(pps_slice_chroma_qp_offsets_present_flag) { slice_cb_qp_offset se(v) slice_cr_qp_offset se(v) if(sps_joint_cbcr_enabled_flag) slice_joint_cbcr_qp_offset se(v) } if(sps_sao_enabled_flag) { slice_sao_luma_flag u(1) if(ChromaArrayType != 0) slice_sao_chroma_flag u(1) } if(sps_alf_enabled_flag) { slice_alf_enabled_flag u(1) if(slice_alf_enabled_flag) { slice_num_alf_aps_ids_luma u(3) for(i=0; i < slice_num_alf_aps_ids_luma; i++) slice_alf_aps_id_luma[i] u(3) if(ChromaArrayType != 0) slice_alf_chroma_idc u(2) if(slice_alf_chroma_idc) slice_alf_aps_id_chroma u(3) } } if (!pps_dep_quant_enabled_flag) dep_quant_enabled_flag u(1) if(!dep_quant_enabled_flag) sign_data_hiding_enabled_flag u(1) if(deblocking_filter_override_enabled_flag) deblocking_filter_override_flag u(1) if(deblocking_filter_override_flag) { slice_deblocking_filter_disabled_flag u(1) if(!slice_deblocking_filter_disabled_flag) { slice_beta_offset_div2 se(v) slice_tc_offset_div2 se(v) } } if(sps_lmcs_enabled_flag) { slice_lmcs_enabled_flag u(1) if(slice_lmcs_enabled_flag) { slice_lmcs_aps_id u(2) if(ChromaArrayType != 0) slice_chroma_residual_scale_flag u(1) } } if(sps_scaling_list_enabled_flag) { slice_scaling_list_present_flag u(1) if(slice_scaling_list_present_flag) slice_scaling_list_aps_id u(3) } if(entry_point_offsets_present_flag && NumEntryPoints > 0) { offset_len_minus1 ue(v) for(i=0; i < NumEntryPoints; i++) entry_point_offset_minus1[i] u(v) } if(slice_header_extension_present_flag) { slice_header_extension_length ue(v) for(i=0; i < slice_header_extension_length; i++) slice_header_extension_data_byte[i] u(8) } byte_alignment() }

….

Переменная WPDisabled устанавливается равной 1, когда все значения luma_weight_l0_flag[i], chroma_weight_l0_flag[i], luma_weight_l1_flag[j] и chroma_weight_l1_flag[j] установлены равными нулю, причем значение i=0 .. NumRefIdxActive[0]; и значение j=0.. NumRefIdxActive[1]; в ином случае значение WPDisabled устанавливается равным 0.

Когда переменная WPDisabled устанавливается равной 0, значение max_num_merge_cand_minus_max_num_triangle_cand устанавливается равным MaxNumMergeCand

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

В примере определение того, является ли TPM или GEO включенным, выполняется с учетом списков опорных изображений, которые блок может использовать для непрямоугольного взвешенного предсказания. Когда список слияния для блока содержит элементы только из одного списка k опорных изображений, значение переменной WPDisabled [k] определяет, является ли этот режим слияния включенным или нет.

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

Нижеследующая часть описания иллюстрирует этот пример:

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

- местоположение (xCb, yCb) яркости верхней левой выборки текущего блока кодирования/декодирования яркости относительно верхней левой выборки яркости текущего изображения,

- переменная cbWidth, специфицирующая ширину текущего блока кодирования/декодирования в выборках яркости,

- переменная cbHeight, специфицирующая высоту текущего блока кодирования/декодирования в выборках яркости.

Выходными данными этого процесса являются следующие, причем X равен 0 или 1:

- флаги доступности availableFlagA0, availableFlagA1, availableFlagB0, availableFlagB1 и availableFlagB2 соседних единиц кодирования/декодирования,

- опорные индексы refIdxLXA0, refIdxLXA1, refIdxLXB0, refIdxLXB1 и refIdxLXB2 соседних единиц кодирования/декодирования,

- флаги использования списков предсказания predFlagLXA0, predFlagLXA1, predFlagLXB0, predFlagLXB1 и predFlagLXB2 соседних единиц кодирования/декодирования,

- векторы движения с точностью до 1/16 дробной выборки mvLXA0, mvLXA1, mvLXB0, mvLXB1 и mvLXB2 соседних единиц кодирования/декодирования,

- индексы интерполяционных фильтров в половину выборки hpelIfIdxA0, hpelIfIdxA1, hpelIfIdxB0, hpelIfIdxB1 и hpelIfIdxB2,

индексы весов двойного предсказания bcwIdxA 0, bcwIdxA 1, bcwIdxB 0, bcwIdxB 1 и bcwIdxB 2.

Для выведения availableFlagB1, refIdxLXB1, predFlagLXB1, mvLXB1, hpelIfIdxB1 и bcwIdxB1 применяется следующее:

- Местоположение (xNbB1, yNbB1) яркости внутри соседнего блока кодирования/декодирования яркости устанавливается равным (xCb+cbWidth - 1, yCb - 1).

- Процесс выведения доступности соседнего блока, как специфицирован в пункте 6.4.4, вызывается установкой текущего местоположения (xCurr, yCurr) яркости равным (xCb, yCb), установкой значений соседнего местоположения (xNbB1, yNbB1) яркости, checkPredModeY равными ИСТИНА, и установкой cIdx равным 0 в качестве входных данных, а выходные данные назначаются флагу availableB1 доступности блока.

- Переменные availableFlagB1, refIdxLXB1, predFlagLXB1, mvLXB1, hpelIfIdxB1 и bcwIdxB1 выводятся следующим образом:

- Если значением availableB1 является ЛОЖЬ, availableFlagB1 устанавливается равным 0, обе компоненты mvLXB1 устанавливаются равными 0, refIdxLXB1 устанавливается равным -1 и predFlagLXB1 устанавливается равным 0, причем X равен 0 или 1, hpelIfIdxB1 устанавливается равным 0 и bcwIdxB1 устанавливается равным 0.

- В ином случае availableFlagB1 устанавливается равным 1 и выполняются следующие назначения:

mvLXB1=MvLX[xNbB1][yNbB1] (501)

refIdxLXB1=RefIdxLX[xNbB1][yNbB1] (502)

predFlagLXB1=PredFlagLX[xNbB1][yNbB1] (503)

hpelIfIdxB1=HpelIfIdx[xNbB1][yNbB1] (504)

bcwIdxB1=BcwIdx[xNbB1][yNbB1] (505)

Для выведения availableFlagA1, refIdxLXA1, predFlagLXA1, mvLXA1, hpelIfIdxA1 и bcwIdxA1 применяется следующее:

- Местоположение (xNbA1, yNbA1) яркости внутри соседнего блока кодирования/декодирования яркости устанавливается равным (xCb - 1, yCb+cbHeight - 1).

- Процесс выведения доступности соседнего блока, как специфицирован в пункте 6.4.4, вызывается установкой текущего местоположения (xCurr, yCurr) яркости равным (xCb, yCb). установкой значений соседнего местоположения (xNbA1, yNbA1) яркости, checkPredModeY равными ИСТИНА, и установкой cIdx равным 0 в качестве входных данных, а выходные данные назначаются флагу availableA1 доступности блока.

- Переменные availableFlagA1, refIdxLXA1, predFlagLXA1, mvLXA1, hpelIfIdxA1 и bcwIdxA1 выводятся следующим образом:

- Если одно или несколько нижеследующих условий верны, availableFlagA1 установлен равным 0, обе компоненты mvLXA1 установлены равными 0, refIdxLXA1 установлен равным -1 и predFlagLXA1 установлен равным 0, причем X равен 0 или 1, hpelIfIdxA1 установлен равным 0 и bcwIdxA1 установлен равным 0:

- значением availableA1 является ЛОЖЬ.

- значением availableB1 является ИСТИНА и местоположения (xNbA1, yNbA1) и (xNbB1, yNbB1) яркости имеют одинаковые векторы движения и одинаковые опорные индексы.

- WPDisabledX[RefIdxLX[xNbA1][yNbA1]] устанавливается равным 0 и режим слияния является непрямоугольным (например флаг треугольника установлен равным 1 для блока в текущем местоположении (xCurr, yCurr) яркости)

- WPDisabledX[RefIdxLX[xNbB1][yNbB1]] устанавливается равным 0 и режим слияния является непрямоугольным (например флаг треугольника установлен равным 1 для блока в текущем местоположении (xCurr, yCurr) яркости)

- В ином случае availableFlagA1 устанавливается равным 1 и выполняются следующие назначения:

mvLXA1=MvLX[xNbA1][yNbA1] (506)

refIdxLXA1=RefIdxLX[xNbA1][yNbA1] (507)

predFlagLXA1=PredFlagLX[xNbA1][yNbA1] (508)

hpelIfIdxA1=HpelIfIdx[xNbA1][yNbA1] (509)

bcwIdxA1=BcwIdx[xNbA1][yNbA1] (510)

Для выведения availableFlagB0, refIdxLXB0, predFlagLXB0, mvLXB0, hpelIfIdxB0 и bcwIdxB0 применяется следующее:

- Местоположение (xNbB0, yNbB0) яркости внутри соседнего блока кодирования/декодирования яркости устанавливается равным (xCb+cbWidth, yCb - 1).

- Процесс выведения доступности соседнего блока, как специфицирован в пункте 6.4.4, вызывается установкой текущего местоположения (xCurr, yCurr) яркости равным (xCb, yCb), установкой значений соседнего местоположения (xNbB0, yNbB0) яркости, checkPredModeY равными ИСТИНА, и установкой cIdx равным 0 в качестве входных данных, а выходные данные назначаются флагу availableB0 доступности блока.

- Переменные availableFlagB0, refIdxLXB0, predFlagLXB0, mvLXB0, hpelIfIdxB0 и bcwIdxB0 выводятся следующим образом:

- Если одно или несколько нижеследующих условий верны, availableFlagB0 установлен равным 0, обе компоненты mvLXB0 установлены равными 0, refIdxLXB0 установлен равным -1 и predFlagLXB0 установлен равным 0, причем X равен 0 или 1, hpelIfIdxB0 установлен равным 0 и bcwIdxB0 установлен равным 0:

- значением availableB0 является ЛОЖЬ.

- значением availableB1 является ИСТИНА и местоположения (xNbB1, yNbB1) и (xNbB0, yNbB0) яркости имеют одинаковые векторы движения и одинаковые опорные индексы.

- WPDisabledX[RefIdxLX[xNbB0][yNbB0]] устанавливается равным 0 и режим слияния является непрямоугольным (например флаг треугольника установлен равным 1 для блока в текущем местоположении (xCurr, yCurr) яркости)

- WPDisabledX[RefIdxLX[xNbB1][yNbB1]] устанавливается равным 0 и режим слияния является непрямоугольным (например флаг треугольника установлен равным 1 для блока в текущем местоположении (xCurr, yCurr) яркости)

- В ином случае availableFlagB0 устанавливается равным 1 и выполняются следующие назначения:

mvLXB0=MvLX[xNbB0][yNbB0] (511)

refIdxLXB0=RefIdxLX[xNbB0][yNbB0] (512)

predFlagLXB0=PredFlagLX[xNbB0][yNbB0] (513)

hpelIfIdxB0=HpelIfIdx[xNbB0][yNbB0] (514)

bcwIdxB0=BcwIdx[xNbB0][yNbB0] (515)

Для выведения availableFlagA0, refIdxLXA0, predFlagLXA0, mvLXA0, hpelIfIdxA0 и bcwIdxA0 применяется следующее:

- Местоположение (xNbA0, yNbA0) яркости внутри соседнего блока кодирования/декодирования яркости устанавливается равным (xCb - 1, yCb+cbWidth).

- Процесс выведения доступности соседнего блока, как специфицирован в пункте 6.4.4, вызывается установкой текущего местоположения (xCurr, yCurr) яркости равным (xCb, yCb). установкой значений соседнего местоположения (xNbA0, yNbA0) яркости, checkPredModeY равными ИСТИНА, и установкой cIdx равным 0 в качестве входных данных, а выходные данные назначаются флагу availableA0 доступности блока.

- Переменные availableFlagA0, refIdxLXA0, predFlagLXA0, mvLXA0, hpelIfIdxA0 и bcwIdxA0 выводятся следующим образом:

- Если одно или несколько нижеследующих условий верны, availableFlagA0 установлен равным 0, обе компоненты mvLXA0 установлены равными 0, refIdxLXA0 установлен равным -1 и predFlagLXA0 установлен равным 0, причем X равен 0 или 1, hpelIfIdxA0 установлен равным 0 и bcwIdxA0 установлен равным 0:

- значением availableA0 является ЛОЖЬ.

- значением availableA1 является ИСТИНА и местоположения (xNbA1, yNbA1) и (xNbA0, yNbA0) яркости имеют одинаковые векторы движения и одинаковые опорные индексы.

- WPDisabledX[RefIdxLX[xNbA0][yNbA0]] устанавливается равным 0 и режим слияния является непрямоугольным (например флаг треугольника установлен равным 1 для блока в текущем местоположении (xCurr, yCurr) яркости)

- WPDisabledX[RefIdxLX[xNbA1][yNbA1]] устанавливается равным 0 и режим слияния является непрямоугольным (например флаг треугольника установлен равным 1 для блока в текущем местоположении (xCurr, yCurr) яркости)

- В ином случае availableFlagA0 устанавливается равным 1 и выполняются следующие назначения:

mvLXA0=MvLX[xNbA0][yNbA0] (516)

refIdxLXA0=RefIdxLX[xNbA0][yNbA0] (517)

predFlagLXA0=PredFlagLX[xNbA0][yNbA0] (518)

hpelIfIdxA0=HpelIfIdx[xNbA0][yNbA0] (519)

bcwIdxA0=BcwIdx[xNbA0][yNbA0] (520)

Для выведения availableFlagB2, refIdxLXB2, predFlagLXB2, mvLXB2, hpelIfIdxB2 and bcwIdxB2 применяется следующее:

- Местоположение (xNbB2, yNbB2) яркости внутри соседнего блока кодирования/декодирования яркости устанавливается равным (xCb - 1, yCb - 1).

- Процесс выведения доступности соседнего блока, как специфицирован в пункте 6.4.4, вызывается установкой текущего местоположения (xCurr, yCurr) яркости равным (xCb, yCb), установкой значений соседнего местоположения (xNbB2, yNbB2) яркости, checkPredModeY равными ИСТИНА, и установкой cIdx равным 0 в качестве входных данных, а выходные данные назначаются флагу availableB2 доступности блока.

- Переменные availableFlagB2, refIdxLXB2, predFlagLXB2, mvLXB2, hpelIfIdxB2 и bcwIdxB2 выводятся следующим образом:

- Если одно или несколько нижеследующих условий верны, availableFlagB2 установлен равным 0, обе компоненты mvLXB2 установлены равными 0, refIdxLXB2 установлен равным -1 и predFlagLXB2 установлен равным 0, причем X равен 0 или 1, hpelIfIdxB2 установлен равным 0 и bcwIdxB2 установлен равным 0:

- значением availableB2 является ЛОЖЬ.

- значением availableA1 является ИСТИНА и местоположения (xNbA1, yNbA1) и (xNbB2, yNbB2) яркости имеют одинаковые векторы движения и одинаковые опорные индексы.

- значением availableB1 является ИСТИНА и местоположения (xNbB1, yNbB1) и (xNbB2, yNbB2) яркости имеют одинаковые векторы движения и одинаковые опорные индексы.

- availableFlagA0+availableFlagA1+availableFlagB0+availableFlagB1 равно 4.

- WPDisabledX[RefIdxLX[xNbB1][yNbB1]] устанавливается равным 0 и режим слияния является непрямоугольным (например флаг треугольника установлен равным 1 для блока в текущем местоположении (xCurr, yCurr) яркости)

- WPDisabledX[RefIdxLX[xNbB2][yNbB2]] устанавливается равным 0 и режим слияния является непрямоугольным (например флаг треугольника установлен равным 1 для блока в текущем местоположении (xCurr, yCurr) яркости)

- В ином случае availableFlagB2 устанавливается равным 1 и выполняются следующие назначения:

mvLXB2=MvLX[xNbB2][yNbB2] (521)

refIdxLXB2=RefIdxLX[xNbB2][yNbB2] (522)

predFlagLXB2=PredFlagLX[xNbB2][yNbB2] (523)

hpelIfIdxB2=HpelIfIdx[xNbB2][yNbB2] (524)

bcwIdxB2=BcwIdx[xNbB2][yNbB2] (525)

В приведенных выше примерах используется следующее определение переменных:

Переменная WPDisabled0[i] устанавливается равной 1, когда все значения luma_weight_l0_flag[i] и chroma_weight_l0_flag[i] установлены равными нулю, причем значение i =0 .. NumRefIdxActive[0] . В ином случае значение WPDisabled0[i] устанавливается равным 0.

Переменная WPDisabled1[i] устанавливается равной 1, когда все значения luma_weight_l1_flag[i] и chroma_weight_l1_flag[i] установлены равными нулю, причем значение i =0 .. NumRefIdxActive[1] . В ином случае значение WPDisabled1 [1] устанавливается равным 0.

В другом примере переменная SliceMaxNumTriangleMergeCand определяется в заголовке слайса в соответствии с одним из следующего:

- SliceMaxNumTriangleMergeCand=(lumaWeightedFlag || chromaWeightedFlag) ? 0 : MaxNumTriangleMergeCand ;

- SliceMaxNumTriangleMergeCand=(lumaWeightedFlag || chromaWeightedFlag) ? 1 : MaxNumTriangleMergeCand ;

- SliceMaxNumTriangleMergeCand=slice_weighted_pred_flag ? 0 : MaxNumTriangleMergeCand ;

или

- SliceMaxNumTriangleMergeCand=slice_weighted_pred_flag ? 1 : MaxNumTriangleMergeCand

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

merge_data(x0, y0, cbWidth, cbHeight, chType) { Дескриптор if (CuPredMode[chType][x0][y0]== MODE_IBC) { if(MaxNumIbcMergeCand > 1) merge_idx[x0][y0] ae(v) } else { if(MaxNumSubblockMergeCand > 0 && cbWidth >= 8 && cbHeight >= 8) merge_subblock_flag[x0][y0] ae(v) if(merge_subblock_flag[x0][y0]== 1) { if(MaxNumSubblockMergeCand > 1) merge_subblock_idx[x0][y0] ae(v) } else { if((cbWidth * cbHeight) >= 64 && ((sps_ciip_enabled_flag && cu_skip_flag[x0][y0]== 0 && cbWidth < 128 && cbHeight < 128) | | (sps_triangle_enabled_flag && SliceMaxNumTriangleMergeCand > 1 && slice_type== B))) regular_merge_flag[x0][y0] ae(v) if (regular_merge_flag[x0][y0]== 1){ if(sps_mmvd_enabled_flag) mmvd_merge_flag[x0][y0] ae(v) if(mmvd_merge_flag[x0][y0]== 1) { if(MaxNumMergeCand > 1) mmvd_cand_flag[x0][y0] ae(v) mmvd_distance_idx[x0][y0] ae(v) mmvd_direction_idx[x0][y0] ae(v) } else { if(MaxNumMergeCand > 1) merge_idx[x0][y0] ae(v) } } else { if(sps_ciip_enabled_flag && sps_triangle_enabled_flag && SliceMaxNumTriangleMergeCand > 1 && weightedPredFlag== 0 && slice_type== B && cu_skip_flag[x0][y0]== 0 && (cbWidth * cbHeight) >= 64 && cbWidth < 128 && cbHeight < 128) { ciip_flag[x0][y0] ae(v) if(ciip_flag[x0][y0] && MaxNumMergeCand > 1) merge_idx[x0][y0] ae(v) if(!ciip_flag[x0][y0] && SliceMaxNumTriangleMergeCand > 1) { merge_triangle_split_dir[x0][y0] ae(v) merge_triangle_idx0[x0][y0] ae(v) merge_triangle_idx1[x0][y0] ae(v) } } } } }

Для случаев, когда режимом непрямоугольного интер-предсказания является режим GEO, дополнительно описываются следующие примеры.

Разные механизмы могут быть использованы для обеспечения возможности управления режимами GEO/TPM-слияния, в зависимости от того, применяется ли WP к опорным изображениям, из которых взяты опорные блоки P0 и P1, а именно:

- Перемещение параметров WP, перечисленных в Таблице 14, из SH в PH;

- Перемещение параметров GEO из PH обратно в SH;

- Изменение семантики MaxNumGeoMergeCand, например путем установки MaxNumGeoMergeCand равным 0 или 1 для таких слайсов, когда могут использоваться опорные изображения с WP (например, где по меньшей мере значением одного из флагов lumaWeightedFlag или является истина).

Для режима GEO-слияния примерные опорные блоки P0 и P1 обозначаются соответственно как 810 и 820 на Фиг. 8.

В примере, когда параметры WP и включение непрямоугольных режимов (например, GEO и TPM) сигнализируются в заголовке изображения, может использоваться следующий синтаксис, как показано в таблице ниже:

Таблица - Синтаксис RBSP заголовка изображения

picture_header_rbsp() { Дескриптор non_reference_picture_flag u(1) gdr_pic_flag u(1) no_output_of_prior_pics_flag u(1) if(gdr_pic_flag) recovery_poc_cnt ue(v) ph_pic_parameter_set_id ue(v) if(sps_poc_msb_flag) { ph_poc_msb_present_flag u(1) if(ph_poc_msb_present_flag) poc_msb_val u(v) } pic_rpl_present_flag u(1) if(pic_rpl_present_flag) { for(i=0; i < 2; i++) { if(num_ref_pic_lists_in_sps[i] > 0 && !pps_ref_pic_list_sps_idc[i] && (i== 0 | | (i== 1 && rpl1_idx_present_flag))) pic_rpl_sps_flag[i] u(1) if(pic_rpl_sps_flag[i]) { if(num_ref_pic_lists_in_sps[i] > 1 && (i== 0 | | (i== 1 && rpl1_idx_present_flag))) pic_rpl_idx[i] u(v) } else ref_pic_list_struct(i, num_ref_pic_lists_in_sps[i]) for(j=0; j < NumLtrpEntries[i][RplsIdx[i]]; j++) { if(ltrp_in_slice_header_flag[i][RplsIdx[i]]) pic_poc_lsb_lt[i][j] u(v) pic_delta_poc_msb_present_flag[i][j] u(1) if(pic_delta_poc_msb_present_flag[i][j]) pic_delta_poc_msb_cycle_lt[i][j] ue(v) } } } if((pps_weighted_pred_flag && slice_type== P) | | (pps_weighted_bipred_flag && slice_type== B)) pred_weight_table() if(sps_triangle_enabled_flag && MaxNumMergeCand >= 2 && !pps_max_num_merge_cand_minus_max_num_triangle_cand_plus1 && WPDisabled) pic_max_num_merge_cand_minus_max_num_triangle_cand ue(v) rbsp_trailing_bits() }

….

Переменная WPDisabled устанавливается равной 1, когда все значения luma_weight_l0_flag[i], chroma_weight_l0_flag[i], luma_weight_l1_flag[j] и chroma_weight_l1_flag[j] установлены равными нулю, причем значение i=0 .. NumRefIdxActive[0]; и значение j=0.. NumRefIdxActive[1]; в ином случае значение WPDisabled устанавливается равным 0.

Когда переменная WPDisabled устанавливается равной 0, значение pic_max_num_merge_cand_minus_max_num_geo_cand устанавливается равным MaxNumMergeCand.

В другом примере pic_max_num_merge_cand_minus_max_num_geo_cand устанавливается равным MaxNumMergeCand - 1.

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

slice_header() { Дескриптор slice_pic_order_cnt_lsb u(v) if(subpics_present_flag) slice_subpic_id u(v) if(rect_slice_flag | | NumTilesInPic > 1) slice_address u(v) if(!rect_slice_flag && NumTilesInPic > 1) num_tiles_in_slice_minus1 ue(v) slice_type ue(v) if(!pic_rpl_present_flag &&((nal_unit_type != IDR_W_RADL && nal_unit_type != IDR_N_LP) | | sps_idr_rpl_present_flag)) { for(i=0; i < 2; i++) { if(num_ref_pic_lists_in_sps[i] > 0 && !pps_ref_pic_list_sps_idc[i] && (i== 0 | | (i== 1 && rpl1_idx_present_flag))) slice_rpl_sps_flag[i] u(1) if(slice_rpl_sps_flag[i]) { if(num_ref_pic_lists_in_sps[i] > 1 && (i== 0 | | (i== 1 && rpl1_idx_present_flag))) slice_rpl_idx[i] u(v) } else ref_pic_list_struct(i, num_ref_pic_lists_in_sps[i]) for(j=0; j < NumLtrpEntries[i][RplsIdx[i]]; j++) { if(ltrp_in_slice_header_flag[i][RplsIdx[i]]) slice_poc_lsb_lt[i][j] u(v) slice_delta_poc_msb_present_flag[i][j] u(1) if(slice_delta_poc_msb_present_flag[i][j]) slice_delta_poc_msb_cycle_lt[i][j] ue(v) } } } if(pic_rpl_present_flag | | ((nal_unit_type != IDR_W_RADL && nal_unit_type != IDR_N_LP) | | sps_idr_rpl_present_flag)) { if((slice_type != I && num_ref_entries[0][RplsIdx[0]] > 1) | | (slice_type== B && num_ref_entries[1][RplsIdx[1]] > 1)) { num_ref_idx_active_override_flag u(1) if(num_ref_idx_active_override_flag) for(i=0; i < (slice_type== B ? 2: 1); i++) if(num_ref_entries[i][RplsIdx[i]] > 1) num_ref_idx_active_minus1[i] ue(v) } } if(slice_type != I) { if(cabac_init_present_flag) cabac_init_flag u(1) if(pic_temporal_mvp_enabled_flag) { if(slice_type== B && !pps_collocated_from_l0_idc) collocated_from_l0_flag u(1) if((collocated_from_l0_flag && NumRefIdxActive[0] > 1) | | (!collocated_from_l0_flag && NumRefIdxActive[1] > 1)) collocated_ref_idx ue(v) } if (slice_weighted_pred_flag) pred_weight_table() if(!pps_six_minus_max_num_merge_cand_plus1) six_minus_max_num_merge_cand ue(v) if(sps_affine_enabled_flag && !pps_five_minus_max_num_subblock_merge_cand_plus1) five_minus_max_num_subblock_merge_cand ue(v) if(sps_fpel_mmvd_enabled_flag) slice_fpel_mmvd_enabled_flag u(1) if(sps_bdof_dmvr_slice_present_flag) slice_disable_bdof_dmvr_flag u(1) if(sps_triangle_enabled_flag && MaxNumMergeCand >= 2 && !pps_max_num_merge_cand_minus_max_num_triangle_cand_minus1 && WPDisabled) { max_num_merge_cand_minus_max_num_geo_cand ue(v) } } slice_qp_delta se(v) if(pps_slice_chroma_qp_offsets_present_flag) { slice_cb_qp_offset se(v) slice_cr_qp_offset se(v) if(sps_joint_cbcr_enabled_flag) slice_joint_cbcr_qp_offset se(v) } if(pps_cu_chroma_qp_offset_list_enabled_flag) cu_chroma_qp_offset_enabled_flag u(1) if(sps_sao_enabled_flag && !pic_sao_enabled_present_flag) { slice_sao_luma_flag u(1) if(ChromaArrayType != 0) slice_sao_chroma_flag u(1) } if(sps_alf_enabled_flag && !pic_alf_enabled_present_flag) { slice_alf_enabled_flag u(1) if(slice_alf_enabled_flag) { slice_num_alf_aps_ids_luma u(3) for(i=0; i < slice_num_alf_aps_ids_luma; i++) slice_alf_aps_id_luma[i] u(3) if(ChromaArrayType != 0) slice_alf_chroma_idc u(2) if(slice_alf_chroma_idc) slice_alf_aps_id_chroma u(3) } } if(deblocking_filter_override_enabled_flag && !pic_deblocking_filter_override_present_flag) slice_deblocking_filter_override_flag u(1) if(slice_deblocking_filter_override_flag) { slice_deblocking_filter_disabled_flag u(1) if(!slice_deblocking_filter_disabled_flag) { slice_beta_offset_div2 se(v) slice_tc_offset_div2 se(v) } } if(entry_point_offsets_present_flag && NumEntryPoints > 0) { offset_len_minus1 ue(v) for(i=0; i < NumEntryPoints; i++) entry_point_offset_minus1[i] u(v) } if(slice_header_extension_present_flag) { slice_header_extension_length ue(v) for(i=0; i < slice_header_extension_length; i++) slice_header_extension_data_byte[i] u(8) } byte_alignment() }

Переменная WPDisabled устанавливается равной 1, когда все значения luma_weight_l0_flag[i], chroma_weight_l0_flag[i], luma_weight_l1_flag[j] и chroma_weight_l1_flag[j] установлены равными нулю, причем значение i=0 .. NumRefIdxActive[0]; и значение j=0.. NumRefIdxActive[1]; в ином случае значение WPDisabled устанавливается равным 0.

Когда переменная WPDisabled устанавливается равной 0, значение max_num_merge_cand_minus_max_num_geo_cand устанавливается равным MaxNumMergeCand.

В другом варианте осуществления, когда переменная WPDisabled устанавливается равной 0, значение max_num_merge_cand_minus_max_num_geo_cand устанавливается равным MaxNumMergeCand - 1.

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

В других вариантах осуществления переменная SliceMaxNumGeoMergeCand определяется в заголовке слайса в соответствии с одним из следующего:

- SliceMaxNumGeoMergeCand=(lumaWeightedFlag || chromaWeightedFlag) ? 0 : MaxNumGeoMergeCand ;

- SliceMaxNumGeoMergeCand=(lumaWeightedFlag || chromaWeightedFlag) ? 1 : MaxNumGeoMergeCand ;

- SliceMaxNumGeoMergeCand=slice_weighted_pred_flag ? 0 : MaxNumGeoMergeCand ;

или SliceMaxNumGeoMergeCand=slice_weighted_pred_flag ? 1 : MaxNumGeoMergeCand

В разных вариантах осуществления используются разные случаи, перечисленные выше.

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

7.3.9.7 Синтаксис данных о слиянии

merge_data(x0, y0, cbWidth, cbHeight, chType) { Дескриптор if(CuPredMode[chType][x0][y0]== MODE_IBC) { if(MaxNumIbcMergeCand > 1) merge_idx[x0][y0] ae(v) } else { if(MaxNumSubblockMergeCand > 0 && cbWidth >= 8 && cbHeight >= 8) merge_subblock_flag[x0][y0] ae(v) if(merge_subblock_flag[x0][y0]== 1) { if(MaxNumSubblockMergeCand > 1) merge_subblock_idx[x0][y0] ae(v) } else { if((sps_ciip_enabled_flag && cu_skip_flag[x0][y0]== 0 && (cbWidth * cbHeight) >= 64 && cbWidth < 128 && cbHeight < 128) | | (sps_geo_enabled_flag && SliceMaxNumGeoMergeCand > 1 && cbWidth>=8 && cbHeight >=8 && slice_type== B)) regular_merge_flag[x0][y0] ae(v) if(regular_merge_flag[x0][y0]== 1) { if(sps_mmvd_enabled_flag) mmvd_merge_flag[x0][y0] ae(v) if(mmvd_merge_flag[x0][y0]== 1) { if(MaxNumMergeCand > 1) mmvd_cand_flag[x0][y0] ae(v) mmvd_distance_idx[x0][y0] ae(v) mmvd_direction_idx[x0][y0] ae(v) } else if(MaxNumMergeCand > 1) merge_idx[x0][y0] ae(v) } else { if(sps_ciip_enabled_flag && sps_geo_enabled_flag && SliceMaxNumGeoMergeCand > 1 && slice_type== B && cu_skip_flag[x0][y0]== 0 && cbWidth >= 8 && cbHeight >= 8 && cbWidth < 128 && cbHeight < 128) ciip_flag[x0][y0] ae(v) if(ciip_flag[x0][y0] && MaxNumMergeCand > 1) merge_idx[x0][y0] ae(v) if(!ciip_flag[x0][y0] && SliceMaxNumGeoMergeCand > 1) { merge_geo_partition_idx[x0][y0] ae(v) merge_geo_idx0[x0][y0] ae(v) if(SliceMaxNumGeoMergeCand > 2) merge_geo_idx1[x0][y0] ae(v) } } } } }

Связанная семантика заголовка изображения является следующей:

pic_max_num_merge_cand_minus_max_num_geo_cand специфицирует максимальное число кандидатов для режима geo-слияния, поддерживаемое в слайсах, связанных с заголовком изображения, вычитаемое из MaxNumMergeCand.

Когда pic_max_num_merge_cand_minus_max_num_geo_cand не присутствует, а sps_geo_enabled_flag равен 1 и MaxNumMergeCand больше или равен 2, pic_max_num_merge_cand_minus_max_num_geo_cand логически выводится равным pps_max_num_merge_cand_minus_max_num_geo_cand_plus1 - 1.

Максимальное число кандидатов для режима geo-слияния, MaxNumGeoMergeCand выводится следующим образом:

MaxNumGeoMergeCand=MaxNumMergeCand - pic_max_num_merge_cand_minus_max_num_geo_cand

Когда pic_max_num_merge_cand_minus_max_num_geo_cand присутствует, значение MaxNumGeoMergeCand должно находиться в диапазоне от 2 до MaxNumMergeCand включительно.

Когда pic_max_num_merge_cand_minus_max_num_geo_cand не присутствует и (sps_geo_enabled_flag равен 0 или MaxNumMergeCand меньше 2), MaxNumGeoMergeCand устанавливается равным 0.

Когда MaxNumGeoMergeCand равно 0, режим geo-слияния не разрешен для слайсов, связанных с PH.

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

- синтаксические элементы, связанные с числом кандидатов для режима слияния (), сигнализируются в наборе параметров последовательности (SPS), что позволяет для конкретных реализаций выводить число кандидатов на слияние в непрямоугольном режиме (MaxNumGeoMergeCand) на уровне SPS;

- PH может быть сигнализирован в SH, когда изображение содержит только один слайс;

- Определение механизма переопределения параметров PH/SH с помощью следующего заключается в следующем:

Флаги PPS, которые специфицируют, присутствует ли синтаксический элемент связанного инструмента кодирования/декодирования в PH или SH (но не в обоих).

В частности, список опорных изображений и таблица взвешенных предсказаний могли бы использовать этот механизм

- таблица весов предсказаний - это пятый тип данных, которые могут быть сигнализированы либо в PH, либо в SH (например, ALF, деблокирование, RPL и SAO);

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

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

В частности, вводятся два флага: pic_inter_slice_present_flag и pic_intra_slice_present_flag.

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

7.3.2.3 Синтаксис RBSP набора параметров последовательности

seq_parameter_set_rbsp() { Дескриптор sps_decoding_parameter_set_id u(4) sps_video_parameter_set_id u(4) sps_max_sublayers_minus1 u(3) sps_reserved_zero_4bits u(4) sps_ptl_dpb_hrd_params_present_flag u(1) if(sps_ptl_dpb_hrd_params_present_flag) profile_tier_level(1, sps_max_sublayers_minus1) gdr_enabled_flag u(1) sps_seq_parameter_set_id u(4) sps_sbt_enabled_flag u(1) sps_affine_enabled_flag u(1) if(sps_affine_enabled_flag) { sps_affine_type_flag u(1) sps_affine_amvr_enabled_flag u(1) sps_affine_prof_enabled_flag u(1) if(sps_affine_prof_enabled_flag) sps_prof_pic_present_flag u(1) } if(chroma_format_idc== 3) { sps_palette_enabled_flag u(1) sps_act_enabled_flag u(1) } sps_bcw_enabled_flag u(1) sps_ibc_enabled_flag u(1) sps_ciip_enabled_flag u(1) if(sps_mmvd_enabled_flag) sps_fpel_mmvd_enabled_flag u(1) sps_geo_enabled_flag u(1) sps_six_minus_max_num_merge_cand_plus1 ue(v) if (sps_geo_enabled_flag) sps_max_num_merge_cand_minus_max_num_geo_cand_plus1 ue(v) sps_lmcs_enabled_flag u(1) sps_lfnst_enabled_flag u(1) sps_ladf_enabled_flag u(1)

Синтаксис, описанный выше, имеет следующую семантику.

sps_six_minus_max_num_merge_cand_plus1, равный 0, специфицирует, что pic_six_minus_max_num_merge_cand присутствует в PH, ссылающихся на PPS. sps_six_minus_max_num_merge_cand_plus1, большее 0, специфицирует, что pic_six_minus_max_num_merge_cand не присутствует в PH, ссылающихся на PPS. Значение sps_six_minus_max_num_merge_cand_plus1 должно находиться в диапазоне от 0 до 6 включительно.

sps_max_num_merge_cand_minus_max_num_geo_cand_plus1, равный 0, специфицирует, что pic_max_num_merge_cand_minus_max_num_geo_cand присутствует в PH слайсов, ссылающихся на PPS. sps_max_num_merge_cand_minus_max_num_geo_cand_plus1, большее 0, специфицирует, что pic_max_num_merge_cand_minus_max_num_geo_cand не присутствует в PH, ссылающихся на PPS. Значение sps_max_num_merge_cand_minus_max_num_geo_cand_plus1 должно находиться в диапазоне от 0 до MaxNumMergeCand - 1.

Семантика соответствующих элементов PH является следующей:

pic_six_minus_max_num_merge_cand специфицирует максимальное число кандидатов предсказания вектора движения, MVP, на слияние, поддерживаемое в слайсах, связанных с PH, вычитаемое из 6. Максимальное число MVP-кандидатов на слияние, MaxNumMergeCand, выводится следующим образом:

MaxNumMergeCand=6 - pic_six_minus_max_num_merge_cand

Значение MaxNumMergeCand должно находиться в диапазоне от 1 до 6 включительно. Когда не присутствует, значение pic_six_minus_max_num_merge_cand логически выводится равным sps_six_minus_max_num_merge_cand_plus1 - 1.

pic_max_num_merge_cand_minus_max_num_geo_cand специфицирует максимальное число кандидатов для режима geo-слияния, поддерживаемое в слайсах, связанных с заголовком изображения, вычитаемое из MaxNumMergeCand.

Когда sps_max_num_merge_cand_minus_max_num_geo_cand не присутствует, а sps_geo_enabled_flag равен 1 и MaxNumMergeCand больше или равен 2, pic_max_num_merge_cand_minus_max_num_geo_cand логически выводится равным sps_max_num_merge_cand_minus_max_num_geo_cand_plus1 - 1.

Максимальное число кандидатов для режима geo-слияния, MaxNumGeoMergeCand выводится следующим образом:

MaxNumGeoMergeCand=MaxNumMergeCand - pic_max_num_merge_cand_minus_max_num_geo_cand

Когда pic_max_num_merge_cand_minus_max_num_geo_cand присутствует, значение MaxNumGeoMergeCand должно находиться в диапазоне от 2 до MaxNumMergeCand включительно.

Когда pic_max_num_merge_cand_minus_max_num_geo_cand не присутствует и (sps_geo_enabled_flag равен 0 или MaxNumMergeCand меньше 2), MaxNumGeoMergeCand устанавливается равным 0.

Когда MaxNumGeoMergeCand равно 0, режим geo-слияния не разрешен для слайсов, связанных с PH.

В качестве альтернативы 104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104max_num_merge_cand_minus_max_num_geo_cand специфицирует максимальное число кандидатов для режима GEO-слияния, поддерживаемое в SPS, вычитаемое из MaxNumMergeCand.

Когда sps_geo_enabled_flag равен 1, а MaxNumMergeCand больше или равно 3, максимальное число кандидатов для режима GEO-слияния, MaxNumGeoMergeCand выводится следующим образом:

MaxNumGeoMergeCand=MaxNumMergeCand - max_num_merge_cand_minus_max_num_geo_cand

Если значение sps_geo_enabled_flag равно 1, значение MaxNumGeoMergeCand должно находиться в диапазоне от 2 до MaxNumMergeCand включительно.

В ином случае, когда sps_geo_enabled_flag равен 1, а MaxNumMergeCand равен 2, MaxNumGeoMergeCand устанавливается равным 2.

В ином случае MaxNumGeoMergeCand устанавливается равным 0.

Альтернативным синтаксисом и семантикой для этого примера является следующее:

sps_geo_enabled_flag u(1) sps_six_minus_max_num_merge_cand ue(v) if (sps_geo_enabled_flag) sps_max_num_merge_cand_minus_max_num_geo_cand ue(v)

sps_six_minus_max_num_merge_cand специфицирует максимальное число кандидатов предсказания вектора движения (MVP) на слияние, поддерживаемое в слайсах, связанных с PH, вычитаемое из 6. Максимальное число MVP-кандидатов на слияние, MaxNumMergeCand, выводится следующим образом:

MaxNumMergeCand=6 - sps_six_minus_max_num_merge_cand

Значение MaxNumMergeCand должно находиться в диапазоне от 1 до 6 включительно.

sps_max_num_merge_cand_minus_max_num_geo_cand специфицирует максимальное число кандидатов для режима geo-слияния, поддерживаемое в слайсах, связанных с заголовком изображения, вычитаемое из MaxNumMergeCand.

Максимальное число кандидатов для режима geo-слияния, MaxNumGeoMergeCand выводится следующим образом:

MaxNumGeoMergeCand=MaxNumMergeCand - sps_max_num_merge_cand_minus_max_num_geo_cand

Когда sps_max_num_merge_cand_minus_max_num_geo_cand присутствует, значение MaxNumGeoMergeCand должно находиться в диапазоне от 2 до MaxNumMergeCand включительно.

Когда sps_max_num_merge_cand_minus_max_num_geo_cand не присутствует и (sps_geo_enabled_flag равен 0 или MaxNumMergeCand меньше 2), MaxNumGeoMergeCand устанавливается равным 0.

Когда MaxNumGeoMergeCand равно 0, режим geo-слияния не разрешен.

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

- когда для значения i=0 .. NumRefIdxActive[0] и значения j=0 .. NumRefIdxActive[1] все значения luma_weight_l0_flag[i], chroma_weight_l0_flag[i], luma_weight_l1_flag[j] и chroma_weight_l1_flag[j] либо установлены равными нулю, либо не присутствуют;

- когда флаг в SPS или PPS указывает наличие двунаправленного взвешенного предсказания (pps_weighted_bipred_flag);

- когда наличие двунаправленного взвешенного предсказания указывается либо в заголовке (PH) изображения, либо в заголовке (SH) слайса.

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

sps_bcw_enabled_flag u(1) sps_ibc_enabled_flag u(1) sps_ciip_enabled_flag u(1) if(sps_mmvd_enabled_flag) sps_fpel_mmvd_enabled_flag u(1) sps_wp_enabled_flag if (!sps_wp_enabled_flag) sps_geo_enabled_flag u(1) sps_six_minus_max_num_merge_cand_plus1 ue(v) if (sps_geo_enabled_flag) sps_max_num_merge_cand_minus_max_num_geo_cand_plus1 ue(v) sps_lmcs_enabled_flag u(1) sps_lfnst_enabled_flag u(1) sps_ladf_enabled_flag u(1)

Синтаксический элемент “sps_wp_enabled_flag” определяет, можно ли включить взвешенное предсказание на более низком уровне (PPS, PH или SH). Примерная реализация приведена ниже:

if(pps_cu_chroma_qp_offset_list_enabled_flag) { chroma_qp_offset_list_len_minus1 ue(v) for(i=0; i <= chroma_qp_offset_list_len_minus1; i++) { cb_qp_offset_list[i] se(v) cr_qp_offset_list[i] se(v) if(pps_joint_cbcr_qp_offset_present_flag) joint_cbcr_qp_offset_list[i] se(v) } } if (sps_wp_enabled_flag) { pps_weighted_pred_flag u(1) pps_weighted_bipred_flag u(1) }

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

В примере, в котором флаги взвешенного предсказания специфицируются в заголовке изображения, например как pic_weighted_pred_flag и pic_weighted_bipred_flag, следующая зависимость от sps_wp_enabled_flag может быть специфицирована в синтаксисе битового потока:

if (sps_wp_enabled_flag) { pic_weighted_pred_flag pic_weighted_bipred_flag }

В примере, в котором флаги взвешенного предсказания специфицируются в заголовке слайса, например как weighted_pred_flag и weighted_bipred_flag, следующая зависимость от sps_wp_enabled_flag может быть специфицирована в синтаксисе битового потока:

if (sps_wp_enabled_flag) { weighted_pred_flag weighted_bipred_flag }

В примере списки опорных изображений могут быть указаны либо в PPS, либо в PH или SH (но не в обоих). В некоторых примерах сигнализация списка опорных изображений зависит от синтаксических элементов, которые указывают наличие взвешенного предсказания (например, pps_weighted_pred_flag и pps_weighted_bipred_flag). Следовательно, в зависимости от того, указывается ли список опорных изображений в PPS, PH или SH, параметры взвешенного предсказания сигнализируются перед списком опорных изображений соответственно в PPS, PH или SH.

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

Синтаксис набора параметров изображения

pic_parameter_set_rbsp() { Дескриптор rpl_present_in_ph_flag u(1) sao_present_in_ph_flag u(1) alf_present_in_ph_flag u(1) pps_weighted_pred_flag u(1) pps_weighted_bipred_flag u(1) if(pps_weighted_pred_flag || pps_weighted_bipred_flag || rpl_present_in_ph_flag) weighted_pred_table_present_in_ph_flag u(1) deblocking_filter_control_present_flag u(1) if(deblocking_filter_control_present_flag) { deblocking_filter_override_enabled_flag u(1) if(deblocking_filter_override_enabled_flag) deblocking_filter_override_present_in_ph_flag u(1) pps_deblocking_filter_disabled_flag u(1) if(!pps_deblocking_filter_disabled_flag) { pps_beta_offset_div2 se(v) pps_tc_offset_div2 se(v) } } constant_slice_header_params_enabled_flag u(1) }

rpl_present_in_ph_flag, равный 1, специфицирует, что сигнализация списка опорных изображений не присутствует в заголовках слайсов, ссылающихся на PPS, но может присутствовать в PH, ссылающихся на PPS. rpl_present_in_ph_flag, равный 0, специфицирует, что сигнализация списка опорных изображений не присутствует в PH, ссылающихся на PPS, но может присутствовать в заголовках слайсов, ссылающихся на PPS.

sao_present_in_ph_flag, равный 1, специфицирует, что синтаксические элементы для включения использования SAO не присутствуют в заголовках слайсов, ссылающихся на PPS, но могут присутствовать в PH, ссылающихся на PPS. sao_present_in_ph_flag, равный 0, специфицирует, что синтаксические элементы для включения использования SAO не присутствуют в PH, ссылающихся на PPS, но могут присутствовать в заголовках слайсов, ссылающихся на PPS.

alf_present_in_ph_flag, равный 1, специфицирует, что синтаксические элементы для включения использования ALF не присутствуют в заголовках слайсов, ссылающихся на PPS, но могут присутствовать в PH, ссылающихся на PPS. alf_present_in_ph_flag, равный 0, специфицирует, что синтаксические элементы для включения использования ALF не присутствуют в PH, ссылающихся на PPS, но могут присутствовать в заголовках слайсов, ссылающихся на PPS.

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

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

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

Альтернативным синтаксисом для заголовка изображения является следующее:

В другом примере сигнализация элементов заголовка изображения и заголовка слайса может быть объединена в едином процессе.

В этом примере вводится флаг (“picture_header_in_slice_header_flag”), который указывает, объединены ли заголовки слайса и изображения. Синтаксис для битового потока согласно этому примеру заключается в следующем:

Синтаксис RBSP заголовка изображения

Синтаксис структуры заголовка изображения

Общий синтаксис заголовка слайса

Семантикой для picture_header_in_slice_header_flag и связанных ограничений битового потока является следующее:

picture_header_in_slice_header_flag, равный 1, специфицирует, что синтаксическая структура заголовка изображения присутствует в заголовке слайса. picture_header_in_slice_header_flag, равный 0, специфицирует, что синтаксическая структура заголовка изображения не присутствует в заголовке слайса.

Для совместимости битового потока требуется, чтобы значение picture_header_in_slice_header_flag было одинаковым во всех слайсах CLVS.

Когда picture_header_in_slice_header_flag равен 1, для совместимости битового потока требуется, чтобы никакая NAL-единица с типом NAL-единицы, равным PH_NUT, не присутствовала в CLVS.

Когда picture_header_in_slice_header_flag равен 0, для совместимости битового потока требуется, чтобы NAL-единица с типом NAL-единицы, равным PH_NUT, присутствовала в PU, предшествуя первой VCL NAL-единице этой PU.

Комбинация аспектов этих примеров является следующей.

Когда picture_header_in_slice_header_flag равен 0, флаги, которые специфицируют, присутствует ли синтаксический элемент связанного инструмента кодирования/декодирования либо PH, либо в SH (но не в обоих);

В ином случае (когда picture_header_in_slice_header_flag равен 1), эти флаги логически выводятся равными 0, указывая сигнализацию параметра инструмента на уровне слайса.

Альтернативной комбинацией является следующее:

Когда picture_header_in_slice_header_flag равен 0, флаги, которые специфицируют, присутствует ли синтаксический элемент связанного инструмента кодирования/декодирования либо PH, либо в SH (но не в обоих);

В ином случае (когда picture_header_in_slice_header_flag равен 1), эти флаги логически выводятся равными 0, указывая сигнализацию параметра инструмента на уровне заголовка изображения.

Эта комбинация имеет следующий синтаксис:

Синтаксис набора параметров изображения

pic_parameter_set_rbsp() { Дескриптор picture_header_in_slice_header_flag u(1) if (picture_header_in_slice_header_flag) { rpl_present_in_ph_flag u(1) sao_present_in_ph_flag u(1) alf_present_in_ph_flag u(1) } pps_weighted_pred_flag u(1) pps_weighted_bipred_flag u(1) if(pps_weighted_pred_flag || pps_weighted_bipred_flag || rpl_present_in_ph_flag) weighted_pred_table_present_in_ph_flag u(1) deblocking_filter_control_present_flag u(1) if(deblocking_filter_control_present_flag) { deblocking_filter_override_enabled_flag u(1) if(deblocking_filter_override_enabled_flag) deblocking_filter_override_present_in_ph_flag u(1) pps_deblocking_filter_disabled_flag u(1) if(!pps_deblocking_filter_disabled_flag) { pps_beta_offset_div2 se(v) pps_tc_offset_div2 se(v) } } constant_slice_header_params_enabled_flag u(1) }

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

Синтаксис и семантика в этом примере определяются следующим образом:

pred_weight_table() { Дескриптор luma_log2_weight_denom ue(v) if(ChromaArrayType != 0) delta_chroma_log2_weight_denom se(v) num_l0_weighted_ref_pics ue(v) for(i=0; i < num_l0_weighted_ref_pics; i++) luma_weight_l0_flag[i] u(1) if(ChromaArrayType != 0) for(i=0; i < NumRefIdxActive[0]; i++) chroma_weight_l0_flag[i] u(1) for(i=0; i < NumRefIdxActive[0]; i++) { if(luma_weight_l0_flag[i]) { delta_luma_weight_l0[i] se(v) luma_offset_l0[i] se(v) } if(chroma_weight_l0_flag[i]) for(j=0; j < 2; j++) { delta_chroma_weight_l0[i][j] se(v) delta_chroma_offset_l0[i][j] se(v) } } num_l1_weighted_ref_pics ue(v) for(i=0; i < num_l1_weighted_ref_pics; i++) luma_weight_l1_flag[i] u(1) if(ChromaArrayType != 0) for(i=0; i < NumRefIdxActive[1]; i++)

chroma_weight_l1_flag[i] u(1) for(i=0; i < NumRefIdxActive[1]; i++) { if(luma_weight_l1_flag[i]) { delta_luma_weight_l1[i] se(v) luma_offset_l1[i] se(v) } if(chroma_weight_l1_flag[i]) for(j=0; j < 2; j++) { delta_chroma_weight_l1[i][j] se(v) delta_chroma_offset_l1[i][j] se(v) } } }

num_l0_weighted_ref_pics специфицирует число опорных изображений в списке 0 опорных изображений, которые являются взвешенными. Значение num_l0_weighted_ref_pics должно находиться в диапазоне от 0 до MaxDecPicBuffMinus1+14 включительно.

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

num_l1_weighted_ref_pics специфицирует число опорных изображений в списке 1 опорных изображений, которые являются взвешенными. Значение num_l1_weighted_ref_pics должно находиться в диапазоне от 0 до MaxDecPicBuffMinus1+14 включительно.

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

MaxNumGeoMergeCand устанавливается равным нулю, когда либо num_l0_weighted_ref_pics, либо num_l1_weighted_ref_pics является ненулевым. Следующий синтаксис является примером того, как можно использовать эту зависимость:

if(sps_prof_pic_present_flag) pic_disable_prof_flag u(1) if(sps_geo_enabled_flag && MaxNumMergeCand >= 2 && !pps_max_num_merge_cand_minus_max_num_geo_cand_plus1 && num_l0_weighted_ref_pics==0 && num_l1_weighted_ref_pics==0) pic_max_num_merge_cand_minus_max_num_geo_cand ue(v) if (sps_ibc_enabled_flag) pic_six_minus_max_num_ibc_merge_cand ue(v) if(sps_joint_cbcr_enabled_flag)

Семантика pic_max_num_merge_cand_minus_max_num_geo_cand в этом варианте осуществления является такой же, как и для предыдущих вариантов осуществления.

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

Синтаксис для этого примера приведен ниже:

7.3.7.1 Общий синтаксис заголовка слайса

7.4.3.6 Семантика RBSP заголовка изображения

pic_inter_slice_present_flag, равный 1, специфицирует, что один или несколько слайсов с slice_type, равным 0 (B) или 1 (P), могут присутствовать в изображении, связанном с PH. pic_inter_slice_present_flag, равный 0, специфицирует, что никакой слайс с slice_type, равным 0 (B) или 1 (P), может присутствовать в изображении, связанном с PH.

pic_intra_slice_present_flag, равный 1, специфицирует, что один или несколько слайсов с slice_type, равным 2 (I), могут присутствовать в изображении, связанном с PH. pic_intra_slice_present_flag, равный 0, специфицирует, что никакой слайс с slice_type, равным 2 (I), может присутствовать в изображении, связанном с PH. Когда не присутствует, значение pic_intra_slice_only_flag логически выводится равным 1.

ПРИМЕЧАНИЕ - : Значения как pic_inter_slice_present_flag, так и pic_intra_slice_present_flag устанавливаются равными 1 в заголовке изображения, связанном с изображением, содержащим один или несколько субизображений, содержащих интра-кодируемый/декодируемый слайс(ы), которые могут быть подвергнуты слиянию с одним или несколькими субизображениями, содержащими интер-кодируемый/декодируемый слайс(ы).

7.4.8.1 Общая семантика заголовка слайса

slice_type специфицирует тип кодирования/декодирования слайса согласно Таблице 7-5.

Таблица 7-5 - Связь наименования с slice_type

slice_type Наименование slice_type 0 B (B-слайс) 1 P (P-слайс) 2 I (I-слайс)

Когда nal_unit_type является значением nal_unit_type в диапазоне от IDR_W_RADL до CRA_NUT включительно, а текущее изображение является первым изображением в единице доступа, slice_type должен быть равен 2.

Когда не присутствует, значение slice_type логически выводится равным 2.

Когда pic_intra_slice_present_flag равен 0, значение slice_type должно находиться в диапазоне от 0 до 1 включительно.

Этот пример можно было бы объединить с сигнализацией pred_weight_table() в заголовке изображения. Сигнализация pred_weight_table() в заголовке изображения раскрыта в предыдущих примерах.

Примерным синтаксисом является следующее:

picture_header_rbsp() { Дескриптор if((pps_weighted_pred_flag | | pps_weighted_bipred_flag) && weighted_pred_table_present_in_ph_flag) pred_weight_table()

При указании наличия pred_weight_table() в заголовке изображения можно использовать следующий синтаксис.

picture_header_rbsp() { Дескриптор pic_inter_slice_present_flag u(1) if(pic_inter_slice_present_flag) pic_intra_slice_present_flag u(1) if((pps_weighted_pred_flag | | pps_weighted_bipred_flag) && pic_inter_slice_present_flag) pred_weight_table()

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

picture_header_rbsp() { Дескриптор pic_inter_slice_present_flag u(1) if(pic_inter_slice_present_flag) pic_intra_slice_present_flag u(1) if((pps_weighted_pred_flag | | pps_weighted_bipred_flag) && pic_inter_slice_present_flag && weighted_pred_table_present_in_ph_flag) pred_weight_table()

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

picture_header_rbsp() { Дескриптор pic_inter_bipred_slice_present_flag u(1) if (!pic_inter_bipred_slice_present_flag) pic_inter_slice_present_flag u(1) if(pic_inter_slice_present_flag) pic_intra_slice_present_flag u(1) if((pps_weighted_pred_flag | | pps_weighted_bipred_flag) && pic_inter_slice_present_flag && weighted_pred_table_present_in_ph_flag) pred_weight_table()

В приведенном выше синтаксисе pic_inter_bipred_slice_present_flag указывает наличие всех типов слайсов, I-, B- и P-слайсов, которые ссылаются на заголовок изображения.

Когда pic_inter_bipred_slice_present_flag равен 0, изображение содержит только слайсы либо I-, либо B-типа.

В этом случае непрямоугольные режимы выключены.

В примере раскрыта комбинация вышеприведенных примеров. Примерным синтаксисом является следующее:

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

В этом примере семантика определяется следующим образом:

7.4.10.7 Семантика данных о слиянии

Переменная MergeGeoFlag[x0][y0], которая специфицирует то, используется ли основанная на геометрической форме компенсация движения для генерирования выборок предсказания текущей единицы кодирования/декодирования, при декодировании B-слайса, выводится следующим образом:

Если все нижеследующие условия верны, MergeGeoFlag[x0][y0] устанавливается равным 1:

- sps_geo_enabled_flag равен 1.

- slice_type равен B.

- general_merge_flag[x0][y0] равен 1.

- MaxNumGeoMergeCand больше или равно 2.

- cbWidth больше или равна 8.

- cbHeight больше или равна 8.

- cbWidth меньше, чем 8*cbHeight

- cbHeight меньше, чем 8*cbWidth

- regular_merge_flag[x0][y0] равен 0.

- merge_subblock_flag[x0][y0] равен 0.

- ciip_flag[x0][y0] равен 0.

- В ином случае MergeGeoFlag[x0][y0] устанавливается равным 0.

Для совместимости битового потока требуется, чтобы, если значением одного из флагов четко определяемой весовой обработки яркости или цветности CU является ИСТИНА, MergeGeoFlag[x0][y0] должен быть равен 0.

В примере часть спецификации VVC объясняется следующим образом:

8.5.7 Процесс декодирования geo интер-блоков

8.5.7.1 Общие положения

Этот процесс вызывается при декодировании единицы кодирования/декодирования с MergeGeoFlag[xCb][yCb], равным 1.

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

- местоположение (xCb, yCb) яркости, специфицирующее верхнюю левую выборку текущего блока кодирования/декодирования относительно верхней- левой выборки яркости текущего изображения,

- переменная cbWidth, специфицирующая ширину текущего блока кодирования/декодирования в выборках яркости,

- переменная cbHeight, специфицирующая высоту текущего блока кодирования/декодирования в выборках яркости,

- векторы mvA и mvB движения яркости с точностью до 1/16 дробной выборки,

- векторы mvCA и mvCB движения цветности,

- опорные индексы refIdxA и refIdxB,

- флаги predListFlagA и predListFlagB списков предсказания.

Пусть predSamplesLAL и predSamplesLBL будут (cbWidth)x(cbHeight)-массивами значений предсказываемых выборок яркости, а predSamplesLACb, predSamplesLBCb, predSamplesLACr и predSamplesLBCr будут (cbWidth/SubWidthC)x(cbHeight/SubHeightC)-массивами значений предсказываемых выборок цветности.

predSamplesL, predSamplesCb и predSamplesCr выводятся посредством следующих упорядоченных этапов:

1. Для N, являющегося каждым из A и B, применяется следующее:

2. Угол разделения и расстояние переменных angleIdx и distanceIdx режима geo-слияния устанавливаются согласно значению merge_geo_partition_idx[xCb][yCb], как специфицировано в Таблице 36.

3. Переменная explictWeightedFlag выводится следующим образом:

lumaWeightedFlagA=predListFlagA ? luma_weight_l1_flag[refIdxA] : luma_weight_l0_flag[refIdxA]

lumaWeightedFlagB=predListFlagB ? luma_weight_l1_flag[refIdxB] : luma_weight_l0_flag[refIdxB]

chromaWeightedFlagA=predListFlagA ? chroma_weight_l1_flag[refIdxA] : chroma weight_l0_flag[refIdxA]

chromaWeightedFlagB=predListFlagB ? chroma_weight_l1_flag[refIdxB] : chroma weight_l0_flag[refIdxB]

weightedFlag=lumaWeightedFlagA | | lumaWeightedFlagB | | chromaWeightedFlagA | | chromaWeightedFlagB

4. Выборки предсказания внутри текущего блока кодирования/декодирования яркости, predSamplesL[xL][yL] с xL=0..cbWidth - 1 и yL=0..cbHeight - 1, выводятся посредством вызова процесса взвешенного предсказания выборок для режима geo-слияния, специфицированного в пункте 8.5.7.2, если weightedFlag равен 0, и процесса четко определяемого взвешенного предсказания выборок в пункте 8.5.6.6.3, если weightedFlag равен 1, с шириной nCbW блока кодирования/декодирования, установленной равной cbWidth, высотой nCbH блока кодирования/декодирования, установленной равной cbHeight, массивами predSamplesLA L и predSamplesLB L выборок и переменными angleIdx и distanceIdx, а также cIdx, равным 0, в качестве входных данных.

5. Выборки предсказания внутри текущего блока кодирования/декодирования компоненты цветности Cb, predSamplesCb[xC][yC] с xC=0..cbWidth/SubWidthC - 1 и yC=0..cbHeight/SubHeightC - 1, выводятся посредством вызова процесса взвешенного предсказания выборок для режима geo-слияния, специфицированного в пункте 8.5.7.2, если weightedFlag равен 0, и процесса четко определяемого взвешенного предсказания выборок в пункте 8.5.6.6.3, если weightedFlag равен 1, с шириной nCbW блока кодирования/декодирования, установленной равной cbWidth/SubWidthC, высотой nCbH блока кодирования/декодирования, установленной равной cbHeight/SubHeightC, массивами predSamplesLACb и predSamplesLBCb выборок и переменными angleIdx и distanceIdx, а также cIdx, равным 0, в качестве входных данных.

6. Выборки предсказания внутри текущего блока кодирования/декодирования компоненты цветности Cr, predSamplesCr[xC][yC] с xC=0..cbWidth/SubWidthC - 1 и yC=0..cbHeight/SubHeightC - 1, выводятся посредством вызова процесса взвешенного предсказания выборок для режима geo-слияния, специфицированного в пункте 8.5.7.2, если weightedFlag равен 0, и процесса четко определяемого взвешенного предсказания выборок в пункте 8.5.6.6.3, если weightedFlag равен 1, с шириной nCbW блока кодирования/декодирования, установленной равной cbWidth/SubWidthC, высотой nCbH блока кодирования/декодирования, установленной равной cbHeight/SubHeightC, массивами predSamplesLACr и predSamplesLBCr выборок и переменными angleIdx и distanceIdx, а также cIdx, равным 2, в качестве входных данных.

7. Процесс сохранения вектора движения для режима geo-слияния, специфицированный в пункте 8.5.7.3, вызывается с местоположением блока кодирования/декодирования яркости (xCb, yCb), шириной cbWidth блока кодирования/декодирования яркости, высотой cbHeight блока кодирования/декодирования яркости, distanceIdx и angleIdx направления разделения, векторами mvA и mvB движения яркости, опорными индексами refIdxA и refIdxB и флагами predListFlagA и predListFlagB списков предсказаний в качестве входных данных.

Таблица 36 - Спецификация значений angleIdx и distanceIdx на основе значения merge_geo_partition_idx.

merge_geo_partition_idx 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 angleIdx 0 0 1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 distanceIdx 1 3 0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 merge_geo_partition_idx 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 angleIdx 4 6 6 8 8 8 8 9 9 9 9 10 10 10 10 11 11 distanceIdx 3 1 3 0 1 2 3 0 1 2 3 0 1 2 3 0 1 merge_geo_partition_idx 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 angleIdx 11 11 12 12 13 13 13 14 14 14 15 15 15 16 16 16 18 distanceIdx 2 3 1 3 1 2 3 1 2 3 1 2 3 1 2 3 1 merge_geo_partition_idx 51 52 53 54 55 56 57 58 59 60 61 62 63 angleIdx 18 20 20 20 21 21 21 22 22 22 23 23 23 distanceIdx 3 1 2 3 1 2 3 1 2 3 1 2 3

8.5.6.6.3 Процесс четко определяемого взвешенного предсказания выборок

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

- две переменные nCbW и nCbH, специфицирующие ширину и высоту текущего блока кодирования/декодирования,

- два (nCbW)x(nCbH)-массива predSamplesL0 и predSamplesL1,

- флаги использования списков предсказаний, predFlagL0 и predFlagL1,

- опорные индексы refIdxL0 и refIdxL1,

- переменная cIdx, специфицирующая индекс цветовой компоненты,

- битовая глубина выборки, bitDepth.

Выходными данными этого процесса является (nCbW)x(nCbH)-массив значений выборок pbSamples предсказания.

Переменная shift1 устанавливается равной Max(2, 14 - bitDepth).

Переменные log2Wd, o0, o1, w0 и w1 выводятся следующим образом:

- Если cIdx равен 0 для выборок яркости, применяется следующее:

log2Wd=luma_log2_weight_denom+shift1 (1010)

w0=LumaWeightL0[refIdxL0] (1011)

w1=LumaWeightL1[refIdxL1] (1012)

o0=luma_offset_l0[refIdxL0] << (bitDepth - 8) (1013)

o1=luma_offset_l1[refIdxL1] << (bitDepth - 8) (1014)

- В ином случае (cIdx не равен 0 для выборок цветности) применяется следующее:

log2Wd=ChromaLog2WeightDenom+shift1 (1015)

w0=ChromaWeightL0[refIdxL0][cIdx - 1] (1016)

w1=ChromaWeightL1[refIdxL1][cIdx - 1] (1017)

o0=ChromaOffsetL0[refIdxL0][cIdx - 1] << (bitDepth - 8) (1018)

o1=ChromaOffsetL1[refIdxL1][cIdx - 1] <<(bitDepth - 8) (1019)

Выборки предсказания pbSamples[x][y] с x=0..nCbW - 1 и y=0..nCbH - 1 выводятся следующим образом:

- Если predFlagL0 равен 1 и predFlagL1 равен 0, значения выборок предсказания выводятся следующим образом:

if(log2Wd >= 1)pbSamples[x][y] = Clip3(0, (1 << bitDepth) - 1,((predSamplesL0[x][y] * w0 + 2log2Wd - 1) >> log2Wd) + o0)(1020)elsepbSamples[x][y] = Clip3(0, (1 << bitDepth) - 1, predSamplesL0[x][y] * w0 + o0)

- В ином случае, если predFlagL0 равен 0 и predFlagL1 равен 1, значения выборок предсказания выводятся следующим образом:

if(log2Wd >= 1)pbSamples[x][y] = Clip3(0, (1 << bitDepth) - 1, ((predSamplesL1[x][y] * w1 + 2log2Wd - 1) >> log2Wd) + o1)(1021)else pbSamples[x][y] = Clip3(0, (1 << bitDepth) - 1, predSamplesL1[x][y] * w1 + o1)

- В ином случае (predFlagL0 равен 1 и predFlagL1 равен 1), значения выборок предсказания выводятся следующим образом:

pbSamples[x][y] = Clip3(0, (1 << bitDepth) - 1, (predSamplesL0[x][y] * w0 + predSamplesL1[x][y] * w1 +((o0 + o1 + 1) << log2Wd)) >> (log2Wd + 1)) (1022)

В этом примере раскрывается синтаксис параметра данных о слиянии, который содержит проверку переменной, которая указывает наличие режима непрямоугольного слияния (например, GEO-режима). Пример синтаксиса приведен ниже:

merge_data(x0, y0, cbWidth, cbHeight, chType) { Дескриптор if(CuPredMode[chType][x0][y0]== MODE_IBC) { if(MaxNumIbcMergeCand > 1) merge_idx[x0][y0] ae(v) } else { if(MaxNumSubblockMergeCand > 0 && cbWidth >= 8 && cbHeight >= 8) merge_subblock_flag[x0][y0] ae(v) if(merge_subblock_flag[x0][y0]== 1) { if(MaxNumSubblockMergeCand > 1) merge_subblock_idx[x0][y0] ae(v) } else { if(cbWidth < 128 && cbHeight < 128 && ((sps_ciip_enabled_flag && cu_skip_flag[x0][y0]== 0 && (cbWidth * cbHeight) >= 64) | | (sps_geo_enabled_flag && MaxNumGeoMergeCand > 1 && cbWidth>=8 && cbHeight >=8 && cbWidth < 8*cbHeight && cbHeight < 8*cbWidth && slice_type== B))) regular_merge_flag[x0][y0] ae(v) if(regular_merge_flag[x0][y0]== 1) { if(sps_mmvd_enabled_flag) mmvd_merge_flag[x0][y0] ae(v) if(mmvd_merge_flag[x0][y0]== 1) { if(MaxNumMergeCand > 1) mmvd_cand_flag[x0][y0] ae(v) mmvd_distance_idx[x0][y0] ae(v) mmvd_direction_idx[x0][y0] ae(v) } else if(MaxNumMergeCand > 1) merge_idx[x0][y0] ae(v) } else { if(sps_ciip_enabled_flag && sps_geo_enabled_flag && MaxNumGeoMergeCand > 1 && slice_type== B && cu_skip_flag[x0][y0]== 0 && cbWidth >= 8 && cbHeight >= 8 && cbWidth < 8*cbHeight && cbHeight < 8*cbWidth && cbWidth < 128 && cbHeight < 128) ciip_flag[x0][y0] ae(v) if(ciip_flag[x0][y0] && MaxNumMergeCand > 1) merge_idx[x0][y0] ae(v) if(!ciip_flag[x0][y0] && MaxNumGeoMergeCand > 1) { merge_geo_partition_idx[x0][y0] ae(v) merge_geo_idx0[x0][y0] ae(v) if(MaxNumGeoMergeCand > 2) merge_geo_idx1[x0][y0] ae(v) } } } } }

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

Может быть использована альтернативная переменная SliceMaxNumGeoMergeCand, которая выводится из переменной MaxNumGeoMergeCand. Значение MaxNumGeoMergeCand получается на более высоких уровнях сигнализации (например, PH, PPS или SPS).

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

Например, SliceMaxNumGeoMergeCand=(num_l0_weighted_ref_pics>0 || num_l1_weighted_ref_pics>0) ? 0 : MaxNumGeoMergeCand.

В другом примере для определения значения MaxNumGeoMergeCand используется следующее выражение:

SliceMaxNumGeoMergeCand=(!pic_inter_slice_present_flag) ? 0: MaxNumGeoMergeCand.

В примере

Определена следующая таблица синтаксиса:

picture_header_rbsp() { Дескриптор pic_inter_bipred_slice_present_flag if (!pic_inter_bipred_slice_present_flag) pic_inter_slice_present_flag if(pic_inter_slice_present_flag) pic_intra_slice_present_flag u(1) if((pps_weighted_pred_flag | | pps_weighted_bipred_flag) && pic_inter_slice_present_flag && weighted_pred_table_present_in_ph_flag) pred_weight_table()

Переменная MaxNumGeoMergeCand выводится следующим образом:

SliceMaxNumGeoMergeCand=(!pic_inter_bipred_slice_present_flag) ? 0: MaxNumGeoMergeCand.

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

В частности, для режимов TPM или Geo-слияния должно быть по меньшей мере два кандидата на режим слияния, поскольку блок, предсказываемый с использованием любого из этих режимов непрямоугольного слияния, требует двух интер-предикторов с различными специфицированными для них MV. В варианте осуществления, когда число кандидатов для режима слияния указано в наборе параметров последовательности (SPS), может использоваться следующий синтаксис:

7.3.2.3 Синтаксис RBSP набора параметров последовательности

seq_parameter_set_rbsp() { Дескриптор sps_decoding_parameter_set_id u(4) sps_video_parameter_set_id u(4) sps_max_sublayers_minus1 u(3) sps_reserved_zero_4bits u(4) sps_ptl_dpb_hrd_params_present_flag u(1) if(sps_ptl_dpb_hrd_params_present_flag) profile_tier_level(1, sps_max_sublayers_minus1) gdr_enabled_flag u(1) sps_seq_parameter_set_id u(4) chroma_format_idc u(2) if(chroma_format_idc== 3) separate_colour_plane_flag u(1) ref_pic_resampling_enabled_flag u(1) pic_width_max_in_luma_samples ue(v) pic_height_max_in_luma_samples ue(v) sps_log2_ctu_size_minus5 u(2) subpics_present_flag u(1) if(subpics_present_flag) { sps_num_subpics_minus1 u(8) for(i=0; i <= sps_num_subpics_minus1; i++) { subpic_ctu_top_left_x[i] u(v) subpic_ctu_top_left_y[i] u(v) subpic_width_minus1[i] u(v) subpic_height_minus1[i] u(v) subpic_treated_as_pic_flag[i] u(1) loop_filter_across_subpic_enabled_flag[i] u(1) } } sps_subpic_id_present_flag u(1) if(sps_subpic_id_present_flag) { sps_subpic_id_signalling_present_flag u(1) if(sps_subpic_id_signalling_present_flag) { sps_subpic_id_len_minus1 ue(v) for(i=0; i <= sps_num_subpics_minus1; i++) sps_subpic_id[i] u(v) } } bit_depth_minus8 ue(v) min_qp_prime_ts_minus4 ue(v) sps_weighted_pred_flag u(1) sps_weighted_bipred_flag u(1) log2_max_pic_order_cnt_lsb_minus4 u(4) sps_poc_msb_flag u(1) if(sps_poc_msb_flag) poc_msb_len_minus1 ue(v) if(sps_max_sublayers_minus1 > 0) sps_sublayer_dpb_params_flag u(1) if(sps_ptl_dpb_hrd_params_present_flag) dpb_parameters(0, sps_max_sublayers_minus1, sps_sublayer_dpb_params_flag) long_term_ref_pics_flag u(1) inter_layer_ref_pics_present_flag u(1) sps_idr_rpl_present_flag) { u(1) rpl1_same_as_rpl0_flag u(1) for(i=0; i < !rpl1_same_as_rpl0_flag ? 2 : 1; i++) { num_ref_pic_lists_in_sps[i] ue(v) for(j=0; j < num_ref_pic_lists_in_sps[i]; j++) ref_pic_list_struct(i, j) } if(ChromaArrayType != 0) qtbtt_dual_tree_intra_flag u(1) log2_min_luma_coding_block_size_minus2 ue(v) partition_constraints_override_enabled_flag u(1) sps_log2_diff_min_qt_min_cb_intra_slice_luma ue(v) sps_log2_diff_min_qt_min_cb_inter_slice ue(v) sps_max_mtt_hierarchy_depth_inter_slice ue(v) sps_max_mtt_hierarchy_depth_intra_slice_luma ue(v) if(sps_max_mtt_hierarchy_depth_intra_slice_luma != 0) { sps_log2_diff_max_bt_min_qt_intra_slice_luma ue(v) sps_log2_diff_max_tt_min_qt_intra_slice_luma ue(v) } if(sps_max_mtt_hierarchy_depth_inter_slice != 0) { sps_log2_diff_max_bt_min_qt_inter_slice ue(v) sps_log2_diff_max_tt_min_qt_inter_slice ue(v) } if(qtbtt_dual_tree_intra_flag) { sps_log2_diff_min_qt_min_cb_intra_slice_chroma ue(v) sps_max_mtt_hierarchy_depth_intra_slice_chroma ue(v) if(sps_max_mtt_hierarchy_depth_intra_slice_chroma != 0) { sps_log2_diff_max_bt_min_qt_intra_slice_chroma ue(v) sps_log2_diff_max_tt_min_qt_intra_slice_chroma ue(v) } } sps_max_luma_transform_size_64_flag u(1) sps_joint_cbcr_enabled_flag u(1) if(ChromaArrayType != 0) { same_qp_table_for_chroma u(1) numQpTables=same_qp_table_for_chroma ? 1 : (sps_joint_cbcr_enabled_flag ? 3 : 2) for(i=0; i < numQpTables; i++) { qp_table_start_minus26[i] se(v) num_points_in_qp_table_minus1[i] ue(v) for(j=0; j <= num_points_in_qp_table_minus1[i]; j++) { delta_qp_in_val_minus1[i][j] ue(v) delta_qp_diff_val[i][j] ue(v) } } } sps_sao_enabled_flag u(1) sps_alf_enabled_flag u(1) sps_transform_skip_enabled_flag u(1) if(sps_transform_skip_enabled_flag) sps_bdpcm_enabled_flag u(1) if(sps_bdpcm_enabled_flag && chroma_format_idc== 3) sps_bdpcm_chroma_enabled_flag u(1) sps_ref_wraparound_enabled_flag u(1) if(sps_ref_wraparound_enabled_flag) sps_ref_wraparound_offset_minus1 ue(v) sps_temporal_mvp_enabled_flag u(1) if(sps_temporal_mvp_enabled_flag) sps_sbtmvp_enabled_flag u(1) sps_amvr_enabled_flag u(1) sps_bdof_enabled_flag u(1) if(sps_bdof_enabled_flag) sps_bdof_pic_present_flag u(1) sps_smvd_enabled_flag u(1) sps_dmvr_enabled_flag u(1) if(sps_dmvr_enabled_flag) sps_dmvr_pic_present_flag u(1) sps_mmvd_enabled_flag u(1) sps_isp_enabled_flag u(1) sps_mrl_enabled_flag u(1) sps_mip_enabled_flag u(1) if(ChromaArrayType != 0) sps_cclm_enabled_flag u(1) if(chroma_format_idc== 1) { sps_chroma_horizontal_collocated_flag u(1) sps_chroma_vertical_collocated_flag u(1) } sps_mts_enabled_flag u(1) if(sps_mts_enabled_flag) { sps_explicit_mts_intra_enabled_flag u(1) sps_explicit_mts_inter_enabled_flag u(1) } sps_six_minus_max_num_merge_cand ue(v) sps_sbt_enabled_flag u(1) sps_affine_enabled_flag u(1) if(sps_affine_enabled_flag) { sps_five_minus_max_num_subblock_merge_cand ue(v) sps_affine_type_flag u(1) sps_affine_amvr_enabled_flag u(1) sps_affine_prof_enabled_flag u(1) if(sps_affine_prof_enabled_flag) sps_prof_pic_present_flag u(1) } if(chroma_format_idc== 3) { sps_act_enabled_flag u(1) sps_palette_enabled_flag u(1) } sps_bcw_enabled_flag u(1) sps_ibc_enabled_flag u(1) if (sps_ibc_enabled_flag) sps_six_minus_max_num_ibc_merge_cand ue(v) sps_ciip_enabled_flag u(1) if(sps_mmvd_enabled_flag) sps_fpel_mmvd_enabled_flag u(1) sps_geo_enabled_flag u(1) if (sps_geo_enabled_flag && MaxNumMergeCand >= 3) sps_max_num_merge_cand_minus_max_num_geo_cand ue(v) sps_lmcs_enabled_flag u(1) sps_lfnst_enabled_flag u(1) sps_ladf_enabled_flag u(1) if(sps_ladf_enabled_flag) { sps_num_ladf_intervals_minus2 u(2) sps_ladf_lowest_interval_qp_offset se(v) for(i=0; i < sps_num_ladf_intervals_minus2+1; i++) { sps_ladf_qp_offset[i] se(v) sps_ladf_delta_threshold_minus1[i] ue(v) } } sps_scaling_list_enabled_flag u(1) sps_virtual_boundaries_present_flag u(1) if(sps_virtual_boundaries_present_flag) { sps_num_ver_virtual_boundaries u(2) for(i=0; i < sps_num_ver_virtual_boundaries; i++) sps_virtual_boundaries_pos_x[i] u(13) sps_num_hor_virtual_boundaries u(2) for(i=0; i < sps_num_hor_virtual_boundaries; i++) sps_virtual_boundaries_pos_y[i] u(13) } if(sps_ptl_dpb_hrd_params_present_flag) { sps_general_hrd_params_present_flag u(1) if(sps_general_hrd_params_present_flag) { general_hrd_parameters() if(sps_max_sublayers_minus1 > 0) sps_sublayer_cpb_params_present_flag u(1) firstSubLayer=sps_sublayer_cpb_params_present_flag ? 0 : sps_max_sublayers_minus1 ols_hrd_parameters(firstSubLayer, sps_max_sublayers_minus1) } } field_seq_flag u(1) vui_parameters_present_flag u(1) if(vui_parameters_present_flag) vui_parameters() /* Специфицированы в ITU-T H.SEI | ISO/IEC 23002-7 */ sps_extension_flag u(1) if(sps_extension_flag) while(more_rbsp_data()) sps_extension_data_flag u(1) rbsp_trailing_bits() }

Согласно варианту осуществления изобретения, следующие этапы выполняются для указания числа кандидатов для режима слияния в SPS:

- Указание числа кандидатов для режима слияния для обычных режимов (MaxNumMergeCand);

- Указание того, являются ли непрямоугольные режимы включенными посредством флага включения непрямоугольного слияния (sps_geo_enabled_flag); и

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

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

В Варианте 1 осуществления эта последовательность этапов показана как следующая часть синтаксиса SPS спецификации VVC:

if (MaxNumMergeCand > 1) sps_geo_enabled_flag u(1) if (sps_geo_enabled_flag && MaxNumMergeCand >= 3) sps_max_num_merge_cand_minus_max_num_geo_cand ue(v)

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

В Варианте 2 осуществления вторая проверка выполняется по-другому по сравнению с процессом, описанным для Варианта 1 осуществления. В частности, в Варианте 1 осуществления используется условие “больше” вместо “больше или равно”. Эта последовательность этапов показана как следующая часть синтаксиса SPS спецификации VVC:

if (MaxNumMergeCand > 1) sps_geo_enabled_flag u(1) if (sps_geo_enabled_flag && MaxNumMergeCand > 2) sps_max_num_merge_cand_minus_max_num_geo_cand ue(v)

Вариант 3 осуществления отличается от Варианта 1 осуществления тем, что вторая проверка не выполняется, когда первая проверка приводит в результате к значению 'ложь', значение флага включения непрямоугольного слияния (sps_geo_enabled_flag) определяется после завершения процесса выведения значения MaxNumMergeCand из синтаксического элемента sps_six_minus_max_num_merge_cand, что является техническим преимуществом, поскольку на значение sps_geo_enabled_flag для некоторых значений MaxNumMergeCand не ссылаются и, следовательно, его можно пропустить при обработке в процессе синтаксического анализа. Эта последовательность этапов, выполняемых в соответствии с Вариантом 3 осуществления, показана как следующая часть синтаксиса SPS спецификации VVC:

if (MaxNumMergeCand > 1) { sps_geo_enabled_flag u(1) if (sps_geo_enabled_flag && MaxNumMergeCand >= 3) sps_max_num_merge_cand_minus_max_num_geo_cand ue(v) }

Вариант 4 осуществления представляет собой комбинацию аспектов Варианта 2 осуществления и Варианта 3 осуществления. Эта последовательность этапов, выполняемых в соответствии с Вариантом 4 осуществления, показана как следующая часть синтаксиса SPS спецификации VVC:

if (MaxNumMergeCand > 1) { sps_geo_enabled_flag u(1) if (sps_geo_enabled_flag && MaxNumMergeCand > 2) sps_max_num_merge_cand_minus_max_num_geo_cand ue(v) }

Варианты 5-8 осуществления раскрывают различные составы первой и второй проверок. Эти варианты осуществления могут быть объяснены следующим образом:

Вариант 5 осуществления

if (MaxNumMergeCand >= 2) sps_geo_enabled_flag u(1) if (sps_geo_enabled_flag && MaxNumMergeCand >= 3) sps_max_num_merge_cand_minus_max_num_geo_cand ue(v)

Вариант 6 осуществления

if (MaxNumMergeCand >= 2) sps_geo_enabled_flag u(1) if (sps_geo_enabled_flag && MaxNumMergeCand > 2) sps_max_num_merge_cand_minus_max_num_geo_cand ue(v)

Вариант 7 осуществления

if (MaxNumMergeCand >= 2) { sps_geo_enabled_flag u(1) if (sps_geo_enabled_flag && MaxNumMergeCand >= 3) sps_max_num_merge_cand_minus_max_num_geo_cand ue(v) }

Вариант 8 осуществления

if (MaxNumMergeCand >= 2) { sps_geo_enabled_flag u(1) if (sps_geo_enabled_flag && MaxNumMergeCand > 2) sps_max_num_merge_cand_minus_max_num_geo_cand ue(v) }

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

S1501: получение битового потока для видеопоследовательности.

Битовый поток может быть получен согласно беспроводной сети или проводной сети. Битовый поток может передаваться с веб-сайта, сервера или другого удаленного источника с использованием коаксиального кабеля, оптоволоконного кабеля, витой пары, цифровой абонентской линии (DSL) или беспроводных технологий, таких как инфракрасное, радио, микроволновое излучение, WIFI, Bluetooth, LTE или 5G.

В варианте осуществления битовый поток представляет собой последовательность битов в форме потока единиц уровня сетевой абстракции (NAL) или потока байтов, который формирует представление последовательности единиц доступа (AU), образующих одну или несколько кодируемых/декодируемых видеопоследовательностей (CVS).

В некоторых вариантах осуществления для процесса декодирования сторона декодера считывает битовый поток и выводит декодированные изображения из битового потока; для процесса кодирования сторона кодера создает битовый поток.

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

синтаксическая структура: ноль или более синтаксических элементов, присутствующих вместе в битовом потоке в определенном порядке.

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

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

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

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

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

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

- Только яркость (Y) (монохромный).

- Яркость и две цветности (YCbCr или YCgCo).

- Зеленый, синий и красный (GBR, также известный как RGB).

- Массивы, представляющие другие неспецифицированные монохромные или трехстимульные цветовые дискретизации (например YZX, также известная XYZ).

Переменные и члены, связанные с этими массивами, называются яркость (или L или Y) и цветность, причем два массива цветности называются Cb и Cr; независимо от фактического используемого способа представления цвета. Фактический используемый способ представления цвета может быть указан в синтаксисе, который специфицирован в VUI-параметрах, как специфицировано в ITU-T H.SEI | ISO/IEC 23002-7.

S1502: получение значения первого индикатора согласно битовому потоку.

Первый индикатор представляет максимальное число кандидатов предсказания вектора движения, MVP, на слияние.

В примере первый индикатор представляется согласно переменной MaxNumMergeCand.

В примере максимальное число MVP-кандидатов на слияние, MaxNumMergeCand, выводится следующим образом:

MaxNumMergeCand=6 - sps_six_minus_max_num_merge_cand.

При этом sps_six_minus_max_num_merge_cand специфицирует вычитаемое из 6 максимальное число кандидатов предсказания вектора движения (MVP) на слияние, поддерживаемое в SPS. Значение sps_six_minus_max_num_merge_cand должно находиться в диапазоне от 0 до 5 включительно.

В примере sps_six_minus_max_num_merge_cand выделяется синтаксическим анализом из синтаксической структуры RBSP набора параметров последовательности в битовом потоке.

S1503: получение значения второго индикатора согласно битовому потоку.

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

В примере второй индикатор представляется согласно sps_geo_enabled_flag (sps_gpm_enabled_flag). sps_geo_enabled_flag, равный 1, специфицирует, что основанная на геометрическом разделении компенсация движения включена для CLVS, а merge_gpm_partition_idx, merge_gpm_idx0 и merge_gpm_idx1 могут присутствовать в синтаксисе единицы кодирования/декодирования CLVS. sps_geo_enabled_flag, равный 0, специфицирует, что основанная на геометрическом разделении компенсация движения выключена для CLVS и merge_gpm_partition_idx, merge_gpm_idx0 и merge_gpm_idx1 не присутствуют в синтаксисе единицы кодирования/декодирования CLVS. Когда не присутствует, значение sps_geo_enabled_flag логически выводится равным 1.

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

В одной реализации значение второго индикатора получают из набора параметров последовательности, SPS, битового потока.

В одной реализации значение второго индикатора выделяется синтаксическим анализом из набора параметров последовательности, SPS, битового потока, когда значение первого индикатора больше или равно упомянутому пороговому значению. Пороговое значение представляет собой целочисленное значение, в примере пороговое значение равно 2.

Например, значение второго индикатора sps_gpm_enabled_flag получается согласно следующему

Синтаксис RBSP набора параметров последовательности

if(MaxNumMergeCand >= 2) { sps_gpm_enabled_flag u(1)

S1504: выделение синтаксическим анализом значения третьего индикатора из битового потока.

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

Пороговое значение является целочисленным значением, предустановленное значение является целочисленным значением. В примере пороговое значение равно 2.

В примере предустановленное значение равно 1.

В примере значение третьего индикатора получают из набора параметров последовательности, SPS, битового потока

В примере третий индикатор представляется согласно sps_max_num_merge_cand_minus_max_num_geo_cand (sps_max_num_merge_cand_minus_max_num_gpm_cand).

Например, значение третьего индикатора sps_max_num_merge_cand_minus_max_num_gpm_cand получается согласно следующему

Синтаксис RBSP набора параметров последовательности

if(MaxNumMergeCand >= 2) { sps_gpm_enabled_flag u(1) if(sps_gpm_enabled_flag && MaxNumMergeCand >= 3) sps_max_num_merge_cand_minus_max_num_gpm_cand ue(v) }

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

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

В примере sps_max_num_merge_cand_minus_max_num_gpm_cand специфицирует максимальное число кандидатов для режима слияния с геометрическим разделением, поддерживаемое в SPS, вычитаемое из MaxNumMergeCand. Значение sps_max_num_merge_cand_minus_max_num_gpm_cand должно находиться в диапазоне от 0 до MaxNumMergeCand - 2 включительно.

Максимальное число кандидатов для режима слияния с геометрическим разделением, MaxNumGpmMergeCand (MaxNumGeoMergeCand), выводится следующим образом:

if(sps_gpm_enabled_flag && MaxNumMergeCand >= 3) MaxNumGpmMergeCand=MaxNumMergeCand - sps_max_num_merge_cand_minus_max_num_gpm_cand else if(sps_gpm_enabled_flag && MaxNumMergeCand== 2) MaxNumGpmMergeCand=2 else MaxNumGpmMergeCand=0.

В показанной на Фиг. 16 реализации раскрыт аппаратный компонент 1600 декодирования видео, причем аппаратный компонент декодирования видео содержит: модуль 1601 приема, который выполнен с возможностью получения битового потока для видеопоследовательности; модуль 1602 получения, который выполнен с возможностью получения значения первого индикатора согласно битовому потоку, при этом первый индикатор представляет максимальное число кандидатов предсказания вектора движения, MVP, на слияние; причем модуль 1602 получения выполнен с возможностью получения значения второго индикатора согласно битовому потоку, при этом второй индикатор представляет то, является ли основанная на геометрическом разделении компенсация движения включенной для упомянутой видеопоследовательности; модуль 1603 синтаксического анализа, который выполнен с возможностью синтаксического анализа значения третьего индикатора из битового потока, когда значение первого индикатора превышает пороговое значение и когда значение второго индикатора равно предустановленному значению, при этом третий индикатор представляет максимальное число кандидатов для режима слияния с геометрическим разделением, вычитаемое из значения первого индикатора.

В реализации модуль 1602 получения выполнен с возможностью установки значения максимального числа кандидатов для режима слияния с геометрическим разделением равным 2, когда значение первого индикатора равно пороговому значению и когда значение второго индикатора равно предустановленному значению.

В реализации модуль 1602 получения выполнен с возможностью установки значения максимального числа кандидатов для режима слияния с геометрическим разделением равным 0, когда значение первого индикатора меньше упомянутого порогового значения, или когда значение второго индикатора не равно предустановленному значению.

В реализации пороговое значение равно 2.

В реализации предустановленное значение равно 1.

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

В реализации значение второго индикатора выделяется синтаксическим анализом из набора параметров последовательности, SPS, битового потока, когда значение первого индикатора больше или равно упомянутому пороговому значению.

В реализации значение второго индикатора получают из набора параметров последовательности, SPS, битового потока.

В реализации значение третьего индикатора получают из набора параметров последовательности, SPS, битового потока.

За дополнительными подробностями о модуле 1601 приема, модуле 1602 получения и модуле 1603 синтаксического анализа можно обратиться к приведенным выше реализациям и примерам способов.

Пример 1. Способ кодирования/декодирования видео, содержащий сигнализацию числа кандидатов для режима слияния, причем способ содержит:

- Указание числа кандидатов для режима слияния для обычных режимов (MaxNumMergeCand);

- Указание того, являются ли непрямоугольные режимы включенными посредством флага включения непрямоугольного слияния (sps_geo_enabled_flag); и

- В случае если значение флага включения непрямоугольного слияния является ненулевым, и когда число кандидатов для режима слияния для обычных режимов слияния превышает первое пороговое значение, указание числа режимов непрямоугольных режимов (sps_max_num_merge_cand_minus_max_num_geo_cand),

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

Пример 2. Способ по примеру 1, в котором значение флага включения непрямоугольного слияния определяют после завершения процесса выведения значения MaxNumMergeCand из синтаксического элемента sps_six_minus_max_num_merge_cand.

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

Пример 4. Способ по примеру 1 или примеру 2, в котором проверка первого порогового значения представляет собой сравнение того, является ли число кандидатов для режима слияния для обычных режимов слияния большим или равным 3.

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

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

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

В примере определение, разрешен ли режим непрямоугольного интер-предсказания, содержит: указание, что максимальное число кандидатов на треугольное слияние (MaxNumTriangleMergeCand) больше 1.

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

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

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

В примере режим непрямоугольного интер-предсказания представляет собой режим с геометрическим (GEO) разделением.

В примере параметры взвешенного предсказания используются для компенсации яркости на уровне слайса.

В примере параметры взвешенного предсказания используются для компенсации яркости на уровне блока.

В примере параметры взвешенного предсказания содержат: флаги, указывающие, применяется ли взвешенное предсказание к компонентам яркости и/или цветности блока предсказания; и параметры линейной модели, специфицирующие линейное преобразование значения блока предсказания.

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

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

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

В примере режим непрямоугольного интер-предсказания включается в случае, если взвешенное предсказание отключено.

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

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

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

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

В примере режим непрямоугольного интер-предсказания представляет собой режим с геометрическим (GEO) разделением.

В примере параметры взвешенного предсказания используются для компенсации яркости на уровне слайса.

В примере параметры взвешенного предсказания используются для компенсации яркости на уровне блока.

В примере параметры взвешенного предсказания содержат: флаги, указывающие, применяется ли взвешенное предсказание к компонентам яркости и/или цветности блока предсказания; и параметры линейной модели, специфицирующие линейное преобразование значения блока предсказания.

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

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

В примере режим непрямоугольного интер-предсказания включается в случае, если взвешенное предсказание отключено.

В примере модуль определения в частности выполнен с возможностью: указания, что максимальное число кандидатов на треугольное слияние (MaxNumTriangleMergeCand) больше 1.

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

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

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

В примере режим непрямоугольного интер-предсказания представляет собой режим с геометрическим (GEO) разделением.

В примере параметры взвешенного предсказания используются для компенсации яркости на уровне слайса.

В примере параметры взвешенного предсказания используются для компенсации яркости на уровне блока.

В примере параметры взвешенного предсказания содержат: флаги, указывающие, применяется ли взвешенное предсказание к компонентам яркости и/или цветности блока предсказания; и параметры линейной модели, специфицирующие линейное преобразование значения блока предсказания.

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

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

ФИГ. 10 представляет собой блок-схему, показывающую систему 3100 предоставления контента для реализации службы распространения контента. Данная система 3100 предоставления контента включает в себя устройство 3102 захвата, терминальное устройство 3106 и опционально включает в себя дисплей 3126. Устройство 3102 захвата осуществляет связь с терминальным устройством 3106 по линии 3104 связи. Линия связи может включать в себя канал 13 связи, описанный выше. Линия 3104 связи включает в себя, но без ограничения упомянутым, WIFI, Ethernet, кабель, беспроводную связь (3G/4G/5G), USB или любую их комбинацию, или подобное.

Устройство 3102 захвата генерирует данные и может кодировать данные способом кодирования, показанным в вышеуказанных вариантах осуществления. В качестве альтернативы устройство 3102 захвата может распространять данные на сервер потоковой передачи (не показан на Фигурах), а сервер кодирует эти данные и передает закодированные данные на терминальное устройство 3106. Устройство 3102 захвата включает в себя, но без ограничения упомянутым, камеру, смартфон или планшет, компьютер или ноутбук, систему видеоконференцсвязи, КПК, устанавливаемое на транспортное средство устройство, или комбинацию любых из них, или подобное. Например, устройство 3102 захвата может включать в себя устройство-источник 12, описанное выше. Когда данные включают в себя видео, видеокодер 20, включенный в устройство 3102 захвата, может фактически выполнять обработку видеокодирования. Когда данные включают в себя аудио (т.е. речь), аудиокодер, включенный в устройство 3102 захвата, может фактически выполнять обработку аудиокодирования. Для некоторых практических сценариев устройство 3102 захвата распространяет закодированные видео- и аудиоданные путем их совместного мультиплексирования. Для других практических сценариев, например, в системе видеоконференцсвязи, кодированные аудиоданные и кодированные видеоданные не мультиплексируются. Устройство 3102 захвата распространяет закодированные аудиоданные и закодированные видеоданные на терминальное устройство 3106 по отдельности.

В системе 3100 предоставления контента терминальное устройство 310 принимает и воспроизводит закодированные данные. Терминальное устройство 3106 может быть устройством с возможностью приема и извлечения данных, таким как смартфон или планшет 3108, компьютер или ноутбук 3110, сетевой видеорегистратор (NVR) / цифровой видеорегистратор (DVR) 3112, телевизор 3114, телеприставка (STB) 3116, система 3118 видеоконференцсвязи, система 3120 видеонаблюдения, карманный персональный компьютер (КПК) 3122, устанавливаемое на транспортное средство устройство 3124, или их комбинация, или подобное, способное декодировать вышеупомянутые закодированные данные. Например, терминальное устройство 3106 может включать в себя устройство-получатель 14, описанное выше. Когда закодированные данные включают в себя видео, видеодекодеру 30, включенному в терминальное устройство, отдается приоритет для выполнения видеодекодирования. Когда закодированные данные включают в себя аудио, аудиодекодеру, включенному в терминальное устройство, отдается приоритет для выполнения обработки аудиодекодирования.

Для терминального устройства со своим дисплеем, например смартфона или планшета 3108, компьютера или ноутбука 3110, сетевого видеорегистратора (NVR) / цифрового видеорегистратора (DVR) 3112, телевизора 3114, карманного персонального компьютера (КПК) 3122 или устанавливаемого на транспортное средство устройства 3124, терминальное устройство может передавать декодированные данные на свой дисплей. Для терминального устройства, не оборудованного дисплеем, такого как STB 3116, система 3118 видеоконференцсвязи или система 3120 видеонаблюдения, контакт в нем устанавливается с внешним дисплеем 3126 для приема и показа декодированных данных.

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

ФИГ. 11 является схемой, показывающей структуру примера терминального устройства 3106. После того, как терминальное устройство 3106 принимает поток от устройства 3102 захвата, блок 3202 обработки протокола анализирует протокол передачи упомянутого потока. Протокол включает в себя, но без ограничения упомянутым, протокол потоковой передачи в реальном времени (RTSP), протокол передачи гипертекста (HTTP), протокол потоковой передачи HTTP Live (HLS), MPEG-DASH, транспортный протокол реального времени (RTP), протокол обмена сообщениями в реальном времени (RTMP) или любую их комбинацию, или подобное.

После того, как блок 3202 обработки протокола обработает поток, генерируется файл потока. Файл выводится в блок 3204 демультиплексирования. Блок 3204 демультиплексирования может разделять мультиплексированные данные на закодированные аудиоданные и закодированные видеоданные. Как описано выше, в других практических сценариях, например, в системе видеоконференцсвязи, закодированные аудиоданные и закодированные видеоданные не мультиплексируются. В этой ситуации кодированные данные передаются на видеодекодер 3206 и аудиодекодер 3208 не через блок 3204 демультиплексирования.

Посредством обработки демультиплексирования генерируются элементарный поток (ES) видео, ES аудио и, опционально, субтитры. Видеодекодер 3206, который включает в себя видеодекодер 30, описанный в вышеупомянутых вариантах осуществления, декодирует ES видео с помощью способа декодирования, как показано в вышеупомянутых вариантах осуществления, для генерирования видеокадра, и подает эти данные в блок 3212 синхронизации. Аудиодекодер 3208 декодирует ES аудио для генерирования аудиокадра и подает эти данные в блок 3212 синхронизации. В качестве альтернативы видеокадр может сохраняться в буфере (не показан на ФИГ. 11) перед его подачей в блок 3212 синхронизации. Точно так же аудиокадр может сохраняться в буфере (не показан на ФИГ. 11) перед его подачей в блок 3212 синхронизации.

Блок 3212 синхронизации синхронизирует видеокадр и аудиокадр и предоставляет видео/аудио в видео/аудио дисплей 3214. Например, блок 3212 синхронизации синхронизирует представление видео и аудио информации. Информация может кодироваться/декодироваться в синтаксисе с использованием временных меток, касающихся представления кодируемых/декодируемых аудио- и видеоданных, а также временных меток, касающихся доставки самого потока данных.

Если субтитр включен в поток, декодер 3210 субтитров декодирует субтитр и синхронизирует его с видеокадром и аудиокадром, а также передает видео/аудио/субтитр на средство 3216 воспроизведения видео/аудио/субтитров.

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

Математические операторы

Математические операторы, используемые в этой заявке, аналогичны тем, которые используются в языке программирования C. Однако результаты операций целочисленного деления и арифметического сдвига определяются более точно, а также определяются дополнительные операции, такие как возведение в степень и вещественнозначное деление. Соглашения о нумерации и подсчете определяют начало с 0, например, «первый» эквивалентен 0-му, «второй» эквивалентен 1-му и т. д.

Арифметические операторы

Следующие арифметические операторы определяются следующим образом:

+ Сложение - Вычитание (как оператор с двумя аргументами) или отрицание (как унарный префиксный оператор) * Умножение, в том числе матричное умножение xy Возведение в степень. Определяет x в степени y. В других контекстах такая запись используется в качестве надстрочного индекса, который не следует интерпретировать как возведение в степень. / Целочисленное деление с усечением результата в сторону нуля. Например, 7/4 и -7 / -4 усекаются до 1, а -7/4 и 7 / -4 усекаются до -1. ÷ Используется для обозначения деления в математических уравнениях, где усечение или округление не предполагается. Используется для обозначения деления в математических уравнениях, где усечение или округление не предполагается. Суммирование f(i), при котором i принимает все целочисленные значения от x до y включительно. x % y Операция по модулю. Остаток от деления x на y, определена только для целых чисел x и y, где x >= 0 и y > 0

Логические операторы

Следующие логические операторы определяются следующим образом:

x && y Булево логическое "и" для x и y

x | | y Булево логическое "или" для x и y

! Булево логическое "не"

x ? y : z Если значением x является ИСТИНА или оно не равно 0, определяется в значение y; в ином случае определяется в значение z.

Операторы сравнения

Следующие операторы сравнения определяются следующим образом:

> Больше, чем

>= Больше или равно

< Меньше, чем

<= Меньше или равно

==Равно

!= Не равно

Когда оператор сравнения применяется к синтаксическому элементу или переменной, которым присвоено значение "na" (неприменимо), значение "na" обрабатывается как отдельное значение для синтаксического элемента или переменной. Считается, что значение "na" не равно какому-либо другому значению.

Побитовые операторы

Следующие побитовые операторы определяются следующим образом:

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

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

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

x >> y Арифметический сдвиг вправо целочисленного представления дополнения до двух x на y двоичных разрядов. Эта функция определена только для неотрицательных целочисленных значений y. Биты, сдвинутые в наиболее значимые биты (MSB) в результате сдвига вправо, имеют значение, равное MSB для x до этой операции сдвига.

x << y Арифметический сдвиг влево целочисленного представления дополнения до двух x на y двоичных разрядов. Эта функция определена только для неотрицательных целочисленных значений y. Биты, сдвинутые в менее значимые биты (LSB) в результате сдвига влево, имеют значение, равное 0.

Операторы присваивания

Следующие арифметические операторы определяются следующим образом:

= Оператор присваивания

+ + Приращение, т.е. x+ + эквивалентно x=x+1; при использовании в индексе массива определяется в значение переменной до этой операции приращения.

- - Уменьшение, т.е. x- - эквивалентно x=x - 1; при использовании в индексе массива определяется в значение переменной до этой операции уменьшения.

+= Приращение на указанную величину, т.е. x += 3 эквивалентно x=x+3, а x += (-3) эквивалентно x=x + (-3).

-= Уменьшение на указанную величину, т.е. x -= 3 эквивалентно x=x - 3, а x -= (-3) эквивалентно x=x - (-3).

Запись диапазона

Следующая запись используется для задания диапазона значений:

x=y..z x принимает целочисленные значения от y до z включительно, причем x, y и z являются целыми числами, а z больше y.

Математические функции

Определены следующие математические функции:

Abs(x)=

Asin(x) тригонометрическая функция арксинуса, работающая с аргументом x, который находится в диапазоне от -1,0 до 1,0 включительно, с выходным значением в диапазоне от -π÷2 до π÷2 включительно в единицах радиан

Atan(x) тригонометрическая функция арктангенса, работающая с аргументом x, с выходным значением в диапазоне от -π÷2 до π÷2 включительно в единицах радиан

Atan2(y, x)=

Ceil(x) наименьшее целое число, большее или равное x.

Clip1Y(x)=Clip3(0, (1 << BitDepthY) - 1, x)

Clip1C(x)=Clip3(0, (1 << BitDepthC) - 1, x)

Clip3(x, y, z)=

Cos(x) тригонометрическая функция косинуса, работающая с аргументом x в единицах радиан.

Floor(x) наибольшее целое число, меньшее или равное x.

GetCurrMsb(a, b, c, d)=

Ln(x) натуральный логарифм x (логарифм по основанию e, где e - постоянная основания натурального логарифма 2,718 281 828…).

Log2(x) логарифм x по основанию 2.

Log10(x) логарифм x по основанию 10.

Min(x, y)=

Max(x, y)=

Round(x)=Sign(x) * Floor(Abs(x) + 0,5)

Sign(x)=

Sin(x) тригонометрическая функция синуса, работающая с аргументом x в единицах радиан

Sqrt(x)=

Swap(x, y)=(y, x)

Tan(x) тригонометрическая функция тангенса, работающая с аргументом x в единицах радиан

Порядок приоритетности операций

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

- Операции с более высоким приоритетом выполняются перед любой операцией с более низким приоритетом.

- Операции с одинаковым приоритетом выполняются последовательно слева направо.

В таблице ниже указана приоритетность операций от наивысшей к низшей; более высокая позиция в таблице указывает более высокий приоритет.

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

Таблица: Приоритетность операций от наивысшей (в верхней части таблицы) до низшей (в нижней части таблицы)

операции (с операндами x, y и z) "x++", "x- -" "!x", "-x" (как унарный префиксный оператор) xy "x * y", "x/y", "x ÷ y", "", "x % y" "x+y", "x - y" (как оператор с двумя аргументами), " " "x << y", "x >> y" "x < y", "x <= y", "x > y", "x >= y" "x== y", "x != y" "x & y" "x | y" "x && y" "x | | y" "x ? y : z" "x..y" "x=y", "x += y", "x -= y"

Текстовое описание логических операций

В тексте определение логических операций, которое математически бы описывалось в следующей форме:

если(условие 0)

определение 0

еще одно если (условие 1)

определение 1

иначе /* информативный комментарий по оставшемуся условию */ определение n

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

… следующим образом / … применяется следующее:

- Если условие 0, определение 0

- В ином случае, если условие 1, определение 1

- …

- В ином случае (информативный комментарий по оставшемуся условию), определение n.

Каждое определение "Если … В ином случае, если … В ином случае, …" в тексте вводится с помощью "… следующим образом" или "… применяется следующее" сразу после "Если … ". Последнее условие "Если … В ином случае, если … В ином случае, …" всегда является "В ином случае, …". Чередование определений "Если … В ином случае, если … В ином случае …" могут быть идентифицированы путем сопоставления "… следующим образом" или "… применяется следующее " с завершающим "В ином случае, …".

В тексте определение логических операций, которое математически бы описывалось в следующей форме:

если(условие 0a && условие 0b)

определение 0

еще одно если(условие 1a | | условие 1b)

определение 1

иначе

определение n

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

… следующим образом / … применяется следующее:

- Если все следующие условия верны, определение 0:

- условие 0a

- условие 0b

- В ином случае, если одно или несколько из следующих условий верно(ы), определение 1:

- условие 1a

- условие 1b

- …

- В ином случае определение n

В тексте определение логических операций, которое математически бы описывалось в следующей форме:

если(условие 0)

определение 0

если(условие 1)

определение 1

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

Когда условие 0, определение 0

Когда условие 1, определение 1.

Варианты осуществления, например кодера 20 и декодера 30, а также описанные в данном документе функции, например применительно к кодеру 20 и декодеру 30 могут быть реализованы аппаратным обеспечением, программным обеспечением, микропрограммным обеспечением или любой их комбинацией. Если реализованы в программном обеспечении, функции могут храниться на машиночитаемом носителе или передаваться через среду связи в виде одной или нескольких инструкций или кода и исполняться аппаратным блоком обработки. Машиночитаемые носители могут включать в себя машиночитаемые носители, которые соответствуют материальному носителю, например носителю данных, или среде связи, в том числе любой среде, которая обеспечивает передачу компьютерной программы из одного места в другое, например, согласно протоколу связи. Таким образом, машиночитаемые носители обычно могут соответствовать (1) материальным машиночитаемым запоминающим носителям, которые являются долговременными, или (2) среде связи, такой как сигнал или несущая волна. Носители данных могут быть любыми доступными носителями, к которым может быть осуществлен доступ одним или несколькими компьютерами, или одним или несколькими процессорами для извлечения инструкций, кода и/или структур данных для реализации методик, описанных в этом раскрытии. Компьютерный программный продукт может включать в себя машиночитаемый носитель.

В качестве примера, а не ограничения, такие машиночитаемые носители могут содержать RAM, ROM, EEPROM, CD-ROM или другое хранилище на оптическом диске, хранилище на магнитном диске или другие магнитные запоминающие устройства, флэш-память или любой другой носитель, который может использоваться для хранения желаемого программного кода в форме инструкций или структур данных и может быть доступен для компьютера. Кроме того, любое соединение правильно называть машиночитаемой средой. Например, если инструкции передаются с веб-сайта, сервера или другого удаленного источника с использованием коаксиального кабеля, оптоволоконного кабеля, витой пары, цифровой абонентской линии (DSL) или беспроводных технологий, таких как инфракрасная-, радио- и микроволновая- связь, тогда коаксиальный кабель, оптоволоконный кабель, витая пара, DSL или беспроводные технологии, такие как инфракрасная-, радио- и микроволновая- связь, включаются в определение носителя. Однако следует понимать, что машиночитаемые носители и носители хранения данных не включают в себя соединения, несущие волны, сигналы или другие кратковременные носители, а вместо этого направлены на долговременные, материальные запоминающие носители. Диск (disk) и диск (disc), используемые в данном документе, включают в себя компакт-диск (CD), лазерный диск, оптический диск, цифровой универсальный диск (DVD), дискету и диск Blu-ray, где диски (disks) обычно воспроизводят данные магнитным образом, а диски (discs) воспроизводят данные оптически с помощью лазеров. Комбинации вышеперечисленного также должны быть включены в объем машиночитаемых носителей.

Инструкции могут исполняться одним или несколькими процессорами, такими как один или несколько цифровых сигнальных процессоров (DSP), микропроцессоров общего назначения, интегральных схем специального назначения (ASIC), программируемых вентильных матриц (FPGA) или других эквивалентных интегральных или дискретных логических схем. Соответственно, термин «процессор», используемый в данном документе, может относиться к любой из вышеупомянутой структуры или любой другой структуре, подходящей для реализации методик, описанных в данном документе. Кроме того, в некоторых аспектах функциональные возможности, описанные в данном документе, могут быть предоставлены в рамках специализированных аппаратных и/или программных модулей, сконфигурированных для кодирования и декодирования, или включены в комбинированный кодек. Кроме того, методики могут быть полностью реализованы в одной или более схемах или логических элементах.

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

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

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

Вариант 2 осуществления: Способ по варианту 1 осуществления, в котором включение непрямоугольного интер-предсказания выполняется путем указания максимального числа кандидатов на треугольное слияние (MaxNumTriangleMergeCand), которое больше 1.

Вариант 3 осуществления: Способ по варианту 1 или 2 осуществления, в котором логически выводится, что непрямоугольное интер-предсказание выключено, когда параметры взвешенного предсказания специфицируют включенное взвешенное предсказание для по меньшей мере одного опорного индекса.

Вариант 4 осуществления: Способ по любому из вариантов с 1 по 3 осуществления, в котором группа блоков представляет собой изображение, и в заголовке изображения указываются как параметры взвешенного предсказания, так и включение параметров режима непрямоугольного интер-предсказания.

Вариант 5 осуществления: Способ по любому из вариантов с 1 по 4 осуществления, в котором группа блоков представляет собой слайс, и в заголовке слайса указываются как параметры взвешенного предсказания, так и включение параметров режима непрямоугольного интер-предсказания.

Вариант 6 осуществления: Способ по любому из вариантов с 1 по 5 осуществления, в котором параметры режима интер-предсказания содержат опорный индекс, используемый для определения опорного изображения, и информацию вектора движения, используемую для определения позиции опорного блока в опорном изображении.

Вариант 7 осуществления: Способ по любому из вариантов с 1 по 6 осуществления, в котором режим непрямоугольного слияния является режимом с треугольным разделением.

Вариант 8 осуществления: Способ по любому из вариантов с 1 по 7 осуществления, в котором режим непрямоугольного слияния является GEO-режимом.

Вариант 9 осуществления: Способ по любому из вариантов с 1 по 8 осуществления, в котором взвешенное предсказание представляет собой механизм компенсации яркости на уровне слайса (например, глобальное взвешенное предсказание).

Вариант 10 осуществления: Способ по любому из вариантов с 1 по 9 осуществления, в котором взвешенное предсказание представляет собой механизм компенсации яркости на уровне блока, например локальная компенсация освещенности (LIC).

Вариант 11 осуществления: Способ по любому из вариантов с 1 по 10 осуществления, в котором параметры взвешенного предсказания содержат: набор флагов, указывающих, применяется ли взвешенное предсказание к компонентам яркости и цветности предсказываемого блока; параметры \alpha и \betta линейной модели, специфицирующие линейное преобразование значений предсказываемого блока.

В первом аспекте настоящей заявки, показанном на Фиг. 12, раскрыт способ 1200 интер-предсказания, который содержит: S1201: определение того, разрешен ли режим непрямоугольного интер-предсказания для группы блоков; S1202: получение одного или нескольких параметров режима интер-предсказания и параметров взвешенного предсказания для этой группы блоков; и S1203: получение значения предсказания текущего блока на основе одного или нескольких параметров режима интер-предсказания и параметров взвешенного предсказания, при этом один из параметров режима интер-предсказания указывает информацию опорного изображения для текущего блока, и при этом упомянутая группа блоков содержит этот текущий блок.

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

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

В осуществимой реализации определение, разрешен ли режим непрямоугольного интер-предсказания, содержит: указание, что максимальное число кандидатов на треугольное слияние (MaxNumTriangleMergeCand) больше 1.

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

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

В осуществимой реализации режим непрямоугольного интер-предсказания представляет собой режим с треугольным разделением.

В осуществимой реализации режим непрямоугольного интер-предсказания представляет собой режим с геометрическим (GEO) разделением.

В осуществимой реализации параметры взвешенного предсказания используются для компенсации яркости на уровне слайса.

В осуществимой реализации параметры взвешенного предсказания используются для компенсации яркости на уровне блока.

В осуществимой реализации параметры взвешенного предсказания содержат: флаги, указывающие, применяется ли взвешенное предсказание к компонентам яркости и/или цветности блока предсказания; и параметры линейной модели, специфицирующие линейное преобразование значения блока предсказания.

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

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

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

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

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

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

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

В осуществимой реализации режим непрямоугольного интер-предсказания представляет собой режим с треугольным разделением.

В осуществимой реализации режим непрямоугольного интер-предсказания представляет собой режим с геометрическим (GEO) разделением.

В осуществимой реализации параметры взвешенного предсказания используются для компенсации яркости на уровне слайса.

В осуществимой реализации параметры взвешенного предсказания используются для компенсации яркости на уровне блока.

В осуществимой реализации параметры взвешенного предсказания содержат: флаги, указывающие, применяется ли взвешенное предсказание к компонентам яркости и/или цветности блока предсказания; и параметры линейной модели, специфицирующие линейное преобразование значения блока предсказания.

В четвертом аспекте настоящей заявки, показанном на Фиг. 14, раскрыт аппаратный компонент 1400 интер-предсказания, который содержит: модуль 1401 определения, выполненный с возможностью определения того, разрешен ли режим непрямоугольного интер-предсказания для группы блоков; модуль 1402 получения, выполненный с возможностью получения одного или нескольких параметров режима интер-предсказания и параметров взвешенного предсказания для этой группы блоков; и модуль 1403 предсказания, выполненный с возможностью получения значения предсказания текущего блока на основе одного или нескольких параметров режима внешнего предсказания и параметров взвешенного предсказания, при этом один из параметров режима интер-предсказания указывает информацию опорного изображения для текущего блока, и при этом упомянутая группа блоков содержит этот текущий блок.

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

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

В осуществимой реализации модуль 1401 определения в частности выполнен с возможностью: указания, что максимальное число кандидатов на треугольное слияние (MaxNumTriangleMergeCand) больше 1.

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

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

В осуществимой реализации режим непрямоугольного интер-предсказания представляет собой режим с треугольным разделением.

В осуществимой реализации режим непрямоугольного интер-предсказания представляет собой режим с геометрическим (GEO) разделением.

В осуществимой реализации параметры взвешенного предсказания используются для компенсации яркости на уровне слайса.

В осуществимой реализации параметры взвешенного предсказания используются для компенсации яркости на уровне блока.

В осуществимой реализации параметры взвешенного предсказания содержат: флаги, указывающие, применяется ли взвешенное предсказание к компонентам яркости и/или цветности блока предсказания; и параметры линейной модели, специфицирующие линейное преобразование значения блока предсказания.

Способы предшествующего уровня техники можно обобщить в следующем списке аспектов:

Аспект 1. Способ интер-предсказания, содержащий:

определение того, разрешен ли режим непрямоугольного интер-предсказания для группы блоков;

получение одного или нескольких параметров режима интер-предсказания и параметров взвешенного предсказания для группы блоков; и

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

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

Аспект 3. Способ по аспекту 1 или 2, в котором режим непрямоугольного интер-предсказания включатся в случае, если взвешенное предсказание выключено.

Аспект 4. Способ по любому из аспектов с 1 по 3, в котором определение, разрешен ли режим непрямоугольного интер-предсказания, содержит:

указание, что максимальное число кандидатов на треугольное слияние (MaxNumTriangleMergeCand) больше 1.

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

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

Аспект 7. Способ по любому из аспектов с 1 по 6, в котором режим непрямоугольного интер-предсказания представляет собой режим с треугольным разделением.

Аспект 8. Способ по любому из аспектов с 1 по 6, в котором режим непрямоугольного интер-предсказания представляет собой режим с геометрическим (GEO) разделением.

Аспект 8а. Способ по любому из аспектов с 1 по 8, в котором синтаксические элементы, связанные с числом кандидатов для режима слияния (указывающая информация для определения непрямоугольного интер-предсказания), сигнализируются в наборе параметров последовательности (SPS)

Аспект 8b. Способ по любому из аспектов с 1 по 8a, в котором заголовок изображения сигнализируется в заголовке слайса, когда изображение содержит только один слайс.

Аспект 8с. Способ по любому из аспектов с 1 по 8b, в котором заголовок изображения сигнализируется в заголовке слайса, когда изображение содержит только один слайс.

Аспект 8d. Способ по любому из аспектов с 1 по 8c, в котором набор параметров изображения содержит флаг, значение которого определяет, присутствуют ли параметры взвешенного предсказания в заголовке изображения или в заголовке слайса.

Аспект 8е. Способ по любому из аспектов с 1 по 8d, в котором флаг в заголовке изображения указывает, присутствует ли слайс не-интра-типа, и сигнализируются ли параметры режима интер-предсказания для этого слайса.

Аспект 9. Способ по любому из аспектов с 1 по 8, в котором параметры взвешенного предсказания используются для компенсации яркости на уровне слайса.

Аспект 10. Способ по любому из аспектов с 1 по 8, в котором параметры взвешенного предсказания используются для компенсации яркости на уровне блока.

Аспект 11. Способ по любому из аспектов с 1 по 10, в котором параметры взвешенного предсказания содержат:

флаги, указывающие, применяется ли взвешенное предсказание к компонентам яркости и/или цветности блока предсказания; и

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

Аспект 12. Аппаратный компонент для интер-предсказания, содержащий:

долговременную память, хранящую исполняемые процессором инструкции; и

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

Аспект 13. Битовый поток для интер-предсказания, содержащий:

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

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

Аспект 14. Битовый поток по аспекту 13, при этом информация опорного изображения содержит то, является ли взвешенное предсказание включенным для индекса опорного изображения, и при этом режим непрямоугольного интер-предсказания выключается в случае, если взвешенное предсказание является включенным.

Аспект 15. Битовый поток по аспекту 13 или 14, при этом режим непрямоугольного интер-предсказания включатся в случае, если взвешенное предсказание выключено.

Аспект 16. Битовый поток по любому из аспектов с 13 по 15, при этом указывающая информация содержит то, что максимальное число кандидатов на треугольное слияние (MaxNumTriangleMergeCand) больше 1.

Аспект 17. Битовый поток по любому из аспектов с 13 по 16, при этом группа блоков состоит из изображения, и при этом параметры взвешенного предсказания и указывающая информация находятся в заголовке изображения упомянутого изображения.

Аспект 18. Битовый поток по любому из аспектов с 13 по 17, при этом группа блоков состоит из слайса, и при этом параметры взвешенного предсказания и указывающая информация находятся в заголовке слайса упомянутого слайса.

Аспект 19. Битовый поток по любому из аспектов с 13 по 18, при этом режим непрямоугольного интер-предсказания представляет собой режим с треугольным разделением.

Аспект 20. Битовый поток по любому из аспектов с 13 по 19, при этом режим непрямоугольного интер-предсказания представляет собой режим с геометрическим (GEO) разделением.

Аспект 21. Битовый поток по любому из аспектов с 13 по 20, при этом параметры взвешенного предсказания используются для компенсации яркости на уровне слайса.

Аспект 22. Битовый поток по любому из аспектов с 13 по 20, при этом параметры взвешенного предсказания используются для компенсации яркости на уровне блока.

Аспект 23. Битовый поток по любому из аспектов с 13 по 20, при этом параметры взвешенного предсказания содержат:

флаги, указывающие, применяется ли взвешенное предсказание к компонентам яркости и/или цветности блока предсказания; и

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

Похожие патенты RU2823267C1

название год авторы номер документа
СПОСОБ И УСТРОЙСТВО СОГЛАСОВАНИЯ ВЗВЕШЕННОГО ПРЕДСКАЗАНИЯ С НЕПРЯМОУГОЛЬНЫМИ РЕЖИМАМИ СЛИЯНИЯ 2021
  • Филиппов, Алексей Константинович
  • Чэнь, Хуаньбан
  • Руфицкий, Василий Алексеевич
  • Ян, Хайтао
  • Алшина, Елена Александровна
RU2821011C1
КОДИРОВАНИЕ ОСТАТКОВ И КОЭФФИЦИЕНТОВ ДЛЯ КОДИРОВАНИЯ ВИДЕО 2022
  • Цзху, Хун-Цзхэн
  • Сю, Сяоюй
  • Чэнь, И-Вэнь
  • Чэнь, Вэй
  • Ко, Чэ-Вэй
  • Ван, Сянлинь
  • Юй, Бин
RU2824946C2
СПОСОБ И АППАРАТУРА ПРЕДСКАЗАНИЯ ВИДЕОИЗОБРАЖЕНИЙ 2019
  • Чэнь, Хуаньбан
  • Ян, Хайтао
RU2787812C2
КОДЕР, ДЕКОДЕР И СООТВЕТСТВУЮЩИЕ СПОСОБЫ 2020
  • Ма, Сян
  • Ян, Хайтао
RU2823668C1
СПОСОБ И УСТРОЙСТВО СИГНАЛИЗАЦИИ ВЫСОКОГО УРОВНЯ ДЛЯ ВЗВЕШЕННОГО ПРОГНОЗИРОВАНИЯ 2020
  • Филиппов, Алексей Константинович
  • Руфицкий, Василий Алексеевич
  • Алшина, Елена Александровна
RU2822506C1
КОДЕР, ДЕКОДЕР И СООТВЕТСТВУЮЩИЕ СПОСОБЫ ДЛЯ РЕЖИМА СУББЛОЧНОГО РАЗДЕЛЕНИЯ 2020
  • Эсенлик, Семих
  • Блезер, Макс
  • Чжао, Чжицзе
  • Гао, Хань
  • Котра, Ананд Меер
  • Ван, Бяо
  • Алшина, Елена Александровна
RU2811983C2
СИНТАКСИЧЕСКИЕ ЭЛЕМЕНТЫ ДЛЯ КОДИРОВАНИЯ ИЛИ ДЕКОДИРОВАНИЯ ВИДЕО 2019
  • Лелеаннек, Фабрис
  • Гальпэн, Франк
  • Пуарье, Танжи
  • Франсуа, Эдуар
RU2802368C2
ПЕРЕДАЧА В СЛУЖЕБНЫХ СИГНАЛАХ ИНФОРМАЦИИ ЗНАЧЕНИЙ ПАРАМЕТРОВ В НАБОРЕ ПАРАМЕТРОВ, ЧТОБЫ УМЕНЬШАТЬ ОБЪЕМ ДАННЫХ, СОДЕРЖАЩИХСЯ В КОДИРОВАННОМ ПОТОКЕ БИТОВ ВИДЕО 2020
  • Шеберг, Риккард
  • Дамганиан, Митра
  • Веннерстен, Пер
  • Петтерссон, Мартин
RU2758901C1
УПРАВЛЕНИЕ БУФЕРОМ ДЕКОДИРОВАННЫХ ИЗОБРАЖЕНИЙ 2012
  • Ван Е-Куй
  • Чэнь Ин
RU2587420C2
Устройство декодирования движущегося изображения и способ декодирования движущегося изображения 2013
  • Накамура Хиройя
  • Фукусима Сигеру
  • Такехара Хидеки
RU2658146C9

Иллюстрации к изобретению RU 2 823 267 C1

Реферат патента 2024 года СПОСОБ И АППАРАТНЫЙ КОМПОНЕНТ СИГНАЛИЗАЦИИ ЧИСЛА КАНДИДАТОВ ДЛЯ РЕЖИМА СЛИЯНИЯ

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

Формула изобретения RU 2 823 267 C1

1. Способ получения максимального числа кандидатов для режима слияния с геометрическим разделением для декодирования видео, при этом способ содержит:

получение битового потока для видеопоследовательности;

получение значения первого индикатора согласно битовому потоку, при этом первый индикатор представляет максимальное число кандидатов предсказания вектора движения, MVP, на слияние;

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

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

2. Способ по п. 1, в котором пороговое значение равно 2.

3. Способ по п. 1 или 2, при этом способ дополнительно содержит

установку значения максимального числа кандидатов для режима слияния с геометрическим разделением, равным 2, когда значение первого индикатора равно упомянутому пороговому значению и когда значение второго индикатора равно упомянутому предустановленному значению.

4. Способ по любому из пп. 1-3, при этом способ дополнительно содержит

установку значения максимального числа кандидатов для режима слияния с геометрическим разделением, равным 0, когда значение первого индикатора меньше упомянутого порогового значения, или когда значение второго индикатора не равно упомянутому предустановленному значению.

5. Способ по любому из пп. 1-4, в котором предустановленное значение равно 1.

6. Способ по любому из пп. 1-5, в котором этап получения значения второго индикатора выполняется после этапа получения значения первого индикатора.

7. Способ по п. 6, в котором значение второго индикатора выделяется синтаксическим анализом из набора параметров последовательности, SPS, битового потока, когда значение первого индикатора больше или равно упомянутому пороговому значению.

8. Способ по любому из пп. 1-7, в котором значение второго индикатора получают из набора параметров последовательности, SPS, битового потока.

9. Способ по любому из пп. 1-8, в котором значение третьего индикатора получают из набора параметров последовательности, SPS, битового потока.

10. Аппаратный компонент декодирования видео, при этом аппаратный компонент декодирования видео содержит:

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

модуль получения, который выполнен с возможностью получения значения первого индикатора согласно битовому потоку, при этом первый индикатор представляет максимальное число кандидатов предсказания вектора движения, MVP, на слияние;

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

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

11. Аппаратный компонент декодирования видео по п. 10, в котором модуль получения выполнен с возможностью установки значения максимального числа кандидатов для режима слияния с геометрическим разделением, равным 2, когда значение первого индикатора равно упомянутому пороговому значению, и когда значение второго индикатора равно упомянутому предустановленному значению.

12. Аппаратный компонент декодирования видео по п. 10 или 11, в котором модуль получения выполнен с возможностью установки значения максимального числа кандидатов для режима слияния с геометрическим разделением, равным 0, когда значение первого индикатора меньше упомянутого порогового значения, или когда значение второго индикатора не равно упомянутому предустановленному значению.

13. Аппаратный компонент декодирования видео по любому из пп. 10-12, в котором пороговое значение равно 2.

14. Аппаратный компонент декодирования видео по любому из пп. 10-13, в котором предустановленное значение равно 1.

15. Аппаратный компонент декодирования видео по любому из пп. 10-14, в котором этап получения значения второго индикатора выполняется после этапа получения значения первого индикатора.

16. Аппаратный компонент декодирования видео по п. 15, в котором значение второго индикатора выделяется синтаксическим анализом из набора параметров последовательности, SPS, битового потока, когда значение первого индикатора больше или равно упомянутому пороговому значению.

17. Аппаратный компонент декодирования видео по любому из пп. 10-16, в котором значение второго индикатора получают из набора параметров последовательности, SPS, битового потока.

18. Аппаратный компонент декодирования видео по любому из пп. 10-17, в котором значение третьего индикатора получают из набора параметров последовательности, SPS, битового потока.

19. Декодер, содержащий:

один или несколько процессоров; и

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

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

Документы, цитированные в отчете о поиске Патент 2024 года RU2823267C1

Способ защиты переносных электрических установок от опасностей, связанных с заземлением одной из фаз 1924
  • Подольский Л.П.
SU2014A1
Устройство для закрепления лыж на раме мотоциклов и велосипедов взамен переднего колеса 1924
  • Шапошников Н.П.
SU2015A1
Устройство для закрепления лыж на раме мотоциклов и велосипедов взамен переднего колеса 1924
  • Шапошников Н.П.
SU2015A1
Изложница с суживающимся книзу сечением и с вертикально перемещающимся днищем 1924
  • Волынский С.В.
SU2012A1
УСТРОЙСТВО КОДИРОВАНИЯ ИЗОБРАЖЕНИЯ, СПОСОБ КОДИРОВАНИЯ ИЗОБРАЖЕНИЯ, УСТРОЙСТВО ДЕКОДИРОВАНИЯ ИЗОБРАЖЕНИЯ, СПОСОБ ДЕКОДИРОВАНИЯ ИЗОБРАЖЕНИЯ И ПРОГРАММА 2017
  • Окава Кодзи
RU2668729C1

RU 2 823 267 C1

Авторы

Филиппов, Алексей Константинович

Руфицкий, Василий Алексеевич

Алшина, Елена Александровна

Даты

2024-07-22Публикация

2021-01-13Подача