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

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

Настоящий патентный документ относится к технологиям, устройствам и системам для кодирования и декодирования видео.

Уровень техники

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

Раскрытие сущности изобретения

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

Согласно одному примерному аспекту предложен способ обработки визуальных медиаданных. Способ содержит этапы, на которых определяют, для преобразования между текущим видеоблоком текущего изображения визуальных медиаданных и представлением текущего видеоблока в виде потока битов данных, блочный вектор (BVx,BVy), причем действительность блочного вектора (BVx, BVy) не зависит от (1) позиции (P, Q) блока отсчетов, и/или от того (2), реконструирован ли отсчет в позиции (P,Q), и/или от (3) позиции текущего видеоблока, при этом блочный вектор (BVx, BVy) представляет смещение пикселей между текущим видеоблоком и указанным блоком отсчетов; и выполняют, с использованием блочного вектора, преобразование в режиме внутрикадрового копирования блоков на основе реконструированного блока, расположенного в той же видеообласти, что и текущий видеоблок, содержащий опорные отсчеты, используемые для определения прогнозируемого блока для текущего видеоблока, при этом в процессе преобразования прогнозируемый отсчет в позиции (A, B) из опорных отсчетов в буфере определяется по меньшей мере в соответствии с размером буфера и/или блочным вектором (BVx, BVy).

Согласно другому примерному аспекту предложен другой способ обработки визуальных медиаданных. Способ содержит этапы, на которых определяют, для преобразования между текущим видеоблоком текущего изображения визуальных медиаданных и представлением визуальных медиаданных в виде потока битов данных, является ли блочный вектор (BVx, BVy), соответствующий текущему видеоблоку, действительным в соответствии с некоторым правилом, причем блочный вектор (BVx, BVy) представляет смещение пикселей между текущим видеоблоком и блоком отсчетов; и выполняют, с использованием блочного вектора, преобразование на основе опорной области из текущего изображения, содержащей опорные отсчеты, используемые для определения прогнозируемого блока для текущего видеоблока, причем указанное правило определяет, что блочный вектор (BVx, BVy) действителен в случае, когда (1) один или более отсчетов из блока отсчетов находятся вне текущего изображения, и/или (2) один или более отсчетов из блока отсчетов находятся по меньшей мере вне одной единицы дерева кодирования (CTU), ассоциированной с текущим видеоблоком, и/или (3) один или более отсчетов из блока отсчетов не удалось реконструировать

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

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

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

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

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

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

Краткое описание чертежей

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

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

Фиг. 3 показывает пример кодирования блока, начиная от точки (x,y).

Фиг. 4 показывает примеры возможных альтернативных способов выбора ранее кодированных блоков размером 64×64.

Фиг. 5 показывает пример возможного альтернативного способа изменения порядка кодирования/декодирования блоков размером 64×64.

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

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

Фиг. 8 показывает другой возможный альтернативный способ выбора ранее кодированных блоков размером 64×64, когда порядок декодирования для блоков размером 64x64 установлен сверху вниз, слева направо.

Фиг. 9 показывает другой возможный альтернативный способ выбора ранее кодированных блоков размером 64×64.

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

Фиг. 11 показывает другой возможный альтернативный способ выбора ранее кодированных блоков размером 64×64, когда порядок декодирования для блоков размером 64x64 установлен слева направо, сверху вниз.

Фиг. 12 показывает иллюстрацию статуса опорного буфера для режима копирования IBC, где блок обозначает единицу CTU размером 64x64.

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

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

Фиг. 15 показывает другой вариант расположения опорной области для режима копирования IBC, когда текущая единица данных виртуального конвейера (VPDU) находится на правой стороне границы изображения.

Фиг. 16 показывает пример статуса виртуального буфера, когда единицы VPDU в строке единиц CTU декодируют последовательно.

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

Фиг. 18 предлагает логическую схему примера способа обработки визуальных медиаданных.

Фиг. 19 предлагает логическую схему примера способа обработки визуальных медиаданных.

Фиг. 20 предлагает логическую схему примера способа обработки визуальных медиаданных.

Фиг. 21 предлагает логическую схему примера способа обработки визуальных медиаданных.

Фиг. 22 предлагает логическую схему примера способа обработки визуальных медиаданных.

Осуществление изобретения

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

1. Краткое изложение существа изобретения

Настоящий патентный документ относится к способам кодирования видео. В частности, он относится к внутрикадровому копированию блоков при кодировании видео. Это может быть применено к стандартам, находящимся в стадии разработки, например, к стандарту «Универсального видео кодирования» (Versatile Video Coding). Это может быть также применимо к стандартам кодирования видео или к видео кодекам будущего.

2. Краткое обсуждение

Стандарты кодирования видео развивались главным образом через разработку хорошо известных стандартов ITU-T и ISO/IEC. Союз ITU-T выпустил стандарты H.261 и H.263, организация ISO/IEC выпустила стандарты MPEG-1 и MPEG-4 Visual, а также эти две организации совместно выпустили стандарты H.262/MPEG-2 Video и H.264/MPEG-4 Advanced Video Coding (AVC) (усовершенствованное видео кодирование) и H.265/HEVC. Со времени стандарта H.262, стандарты кодирования видео основаны на гибридной структуре кодирования видео, использующей временное прогнозирование плюс трансформационное кодирование. Для исследований в области технологий кодирования видео будущего, которые будут разработаны после технологии кодирования HEVC, группа экспертов по кодированию видео (VCEG) и группа экспертов по кинематографии (MPEG) в 2015 г. совместно основали Объединенную группу исследований в области видео (Joint Video Exploration Team (JVET)). С тех пор группа JVET разработала множество новых способов и ввела их в эталонное программное обеспечение, называемое Совместной исследовательской моделью (Joint Exploration Model (JEM)). В апреле 2018 г. группа VCEG (Q6/16) и отдел ISO/IEC JTC1 SC29/WG11 (MPEG) создали объединенную группу экспертов в области видео (Joint Video Expert Team (JVET)) для работ над стандартом VVC, имея целью добиться снижения требуемой скорости передачи битов данных на 50% по сравнению с кодированием HEVC

2.1 Межкадровое прогнозирование в стандарте HEVC/H.265

Каждая единица межкадрового прогнозирования PU (prediction unit (единица прогнозирования)) имеет параметры движения для одного или двух списков опорных изображений. Совокупность параметров движения содержит вектор движения и индекс опорного изображения. Об использовании одного или двух списков опорных изображений может быть также передано в виде сигнализации с применением параметра inter_pred_idc. Векторы движения могут быть в явной форме закодированы в виде приращений относительно предикторов.

Когда единица CU (coding unit (единица кодирования)) кодирована в режиме пропуска, с этой единицей CU ассоциирована одна единица PU, и при этом нет ни значительных коэффициентов остатка, ни кодированного приращения вектора движения или индекса опорного изображения. Режим объединения специфицирован таким образом, что параметры движения для текущей единицы PU получают из соседних единиц PU, включая пространственные и временные кандидаты. Режим объединения может быть применен к любой единице PU межкадрового прогнозирования, не только в режиме пропуска. Альтернативой для режима объединения является передача параметров движения в явном виде, где векторы движения (более точно, разницы векторов движения (motion vector difference (MVD)) относительно предиктора вектора движения), соответствующий индекс опорного изображения для каждого списка опорных изображений и показатель использования списка опорных изображений передают в виде сигнализации в явной форме для каждой единицы PU. Этот тип режима называется в этом документе усовершенствованным прогнозированием вектора движения (advanced motion vector prediction (AMVP)).

Когда сигнализация указывает, что следует использовать один из двух списков опорных изображений, единицу PU создают из одного блока отсчетов. Это называется «однонаправленным прогнозированием» (‘uni-prediction’). Однонаправленное прогнозирование доступно для срезов обоих видов – P-среза (P-slice) или среза со ссылкой на предыдущий срез (предсказанного среза) и B-среза (B-slice) или среза со ссылками на предыдущий и последующий срезы (или двунаправлено интерполированного среза).

Когда сигнализация указывает, что следует использовать оба списка опорных изображений, единицу PU создают из двух блоков отсчетов. Это называется «двунаправленной интерполяцией (прогнозированием)» (‘bi-prediction’). Двунаправленная интерполяция доступна только для B-срезов.

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

2.2 Использование текущего изображения в качестве опоры

Режим использования текущего изображения в качестве опоры (Current Picture Referencing (CPR)), или, как он был когда-то назван, Внутрикадровое копирование блоков (Intra Block Copy (IBC)) был принят в расширениях кодирования контента экрана (HEVC Screen Content Coding extensions (HEVC-SCC)) и в тестовой модели сегодняшней версии стандарта кодирования VVC. Принцип копирования IBC расширяет концепцию компенсации движения от кодирования с межкадровым прогнозированием на кодирование с внутрикадровым прогнозированием. Как показано на фиг. 1, когда применяется режим CPR, текущий блок прогнозируют на основе опорного блока из того же самого изображения. Отсчеты из опорного блока должны быть уже реконструированы прежде, чем текущий блок будет кодирован или декодирован. Хотя режим CPR не является таким уж эффективным для большинства захватываемых видеокамерой последовательностей, он демонстрирует значительный выигрыш по кодированию контента экрана. Причиной этого является наличие больших групп из повторяющихся структур, таких как иконки и текстовые символы, в изображении контента экрана. Режим CPR может эффективно устранить избыточность между этими повторяющимися структурами. В стандарте HEVC-SCC, единица кодирования (coding unit (CU)) с применением межкадрового прогнозирования может применить режим CPR, если она выберет текущее изображение в качестве опорного изображения. В этом случае вектор движения (MV) переименовывают в блочный вектор (block vector (BV)), причем этот вектор BV всегда имеет точность до целого пикселя. Для обеспечения совместимости с главным профилем кодирования HEVC, текущее изображение маркируют как «долговременное» (“long-term”) опорное изображение в буфере декодированных изображений (Decoded Picture Buffer (DPB)). Следует отметить, что аналогично, в стандартах многовидового/3D кодирования видео, межвидовое опорное изображение также маркируют в качестве «долговременного» опорного изображения.

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

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

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

2.3 Режим CPR в расширениях HEVC Screen Content Coding

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

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

offsetX = ( ChromaArrayType = = 0 ) ? 0 : ( mvCLX[ 0 ] & 0x7 ? 2 : 0 ) (8-104)

offsetY = ( ChromaArrayType = = 0 ) ? 0 : ( mvCLX[ 1 ] & 0x7 ? 2 : 0 ) (8-105)

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

- Когда процедура вывода для доступности блоков в порядке z-сканирования, как это специфицировано в статье 6.4.1, привлекается при ( xCurr, yCurr ), установленных равным ( xCb, yCb ), и соседнем положении яркостной составляющей ( xNbY, yNbY ), установленном равным ( xPb + (mvLX[ 0 ] >> 2) − offsetX, yPb + ( mvLX[ 1 ] >> 2 ) − offsetY ), в качестве входных данных, выходной сигнал должен иметь значение «Истинно» (TRUE).

- Когда процедура вывода для доступности блоков в порядке z-сканирования, как это специфицировано в статье 6.4.1, привлекается при ( xCurr, yCurr ), установленных равным ( xCb, yCb ), и соседнем положении яркостной составляющей ( xNbY, yNbY ), установленном равным ( xPb + (mvLX[ 0 ] >> 2) + nPbW − 1 + offsetX, yPb + (mvLX[ 1 ] >> 2) + nPbH − 1 + offsetY), в качестве входных данных, выходной сигнал должен иметь значение «Истинно» (TRUE).

- Одно или оба из следующим условий должно быть «истинным»:

- Значение ( mvLX[ 0 ] >> 2 ) + nPbW + xB1 + offsetX не больше 0.

- Значение ( mvLX[ 1 ] >> 2 ) + nPbH + yB1 + offsetY не больше 0.

- Следующее условие должно быть истинным:

( xPb + ( mvLX[ 0 ] >> 2 ) + nPbSw − 1 + offsetX) / CtbSizeY − xCb / CtbSizeY <= yCb/CtbSizeY − ( yPb + ( mvLX[ 1 ] >> 2 ) + nPbSh − 1 + offsetY ) / CtbSizeY (8-106)

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

2.4 Примеры кодирования с копированием блоков CPR/IBC

В сегодняшней тестовой модели кодирования VVC, весь опорный блок должен быть с текущей единицей дерева кодирования (current coding tree unit (CTU)) и не должен накладываться на текущий блок. Таким образом, нет необходимости «заполнять» опорный или прогнозируемый блок.

Когда активизировано двойное дерево, структура разбиения может быть различной для единиц CTU яркостной составляющей и единиц CTU цветностной составляющей. Поэтому, для цветового формата 4:2:0 один блок цветностной составляющей (например, единица CU) может соответствовать одной расположенной в этом же месте области яркостной составляющей, которая была разбита на несколько единиц CU яркостной составляющей.

Блок цветностной составляющей может быть кодирован только в режиме CPR, когда следующие условия должны быть истинными:

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

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

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

Следует отметить, что определение «действительный вектор BV» имеет следующие ограничения:

1. все отсчеты в пределах опорного блока, идентифицированного вектором BV, должны находиться в пределах ограниченного диапазона поиска (например, должны быть в пределах одной и той же единицы CTU в сегодняшней редакции стандарта кодирования VVC).

2. все отсчеты в пределах опорного блока, идентифицированного вектором BV, уже были реконструированы к текущему моменту.

2.5 Примеры кодирования с копированием блоков CPR/IBC

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

На фиг. 2 показан способ, где блок имеет размер 64x64 и единица CTU содержит 4 блока размером 64x64. При кодировании блока размером 64x64 предыдущие 3 блока размером 64x64 могут быть использованы в качестве опоры. При таком подходе декодирующему устройству необходимо просто сохранять 4 блока размером 64x64 для поддержки режима CPR/IBC.

Предположим, что позиция текущей единицы CU яркостной составляющей относительно верхнего-левого угла изображения имеет координаты (x, y) и блочный вектор равен (BVx, BVy). В текущей конфигурации, является ли вектор BV действительным, может быть сообщено тем фактом, что позиция яркостной составляющей ((x+BVx)>>6<<6+(1<<7), (y+BVy)>>6<<6) не была реконструирована, и ((x+BVx)>>6<<6+(1<<7), (y+BVy)>>6<<6) не равно (x>>6<<6, y>>6<<6).

2.6. Внутриконтурное переформирование (ILR)

Основная идея внутриконтурного переформирования (ILR) состоит в преобразовании исходного (в первой области) сигнала (прогнозируемого/реконструированного сигнала) во вторую область (переформированную область).

Внутриконтурное устройство для переформирования яркостной составляющей реализовано в виде пары преобразовательных таблиц (look-up table (LUT)), но только об одной из этих двух таблиц LUT необходимо сообщить посредством сигнализации, тогда как другая таблица может быть вычислена на основе сообщенной таблицы LUT. Каждая таблица LUT является одномерной, 10-битовой, таблицей отображения с 1024 входными позициями (1D-LUT). Одна таблица LUT является таблицей LUT для прямого преобразования (прямая таблица LUT), FwdLUT, которая преобразует значения входного цветностного кода в измененные значения : . Другая таблица LUT является таблицей LUT для обратного преобразования (обратная таблица LUT), InvLUT, которая преобразует измененные кодовые значения в значения : . ( представляет реконструированные значения .).

2.6.1 Кусочно-линейная (PWL) модель

Концептуально, кусочно-линейная модель (piece-wise linear (PWL)) реализуется следующим образом:

Пусть x1, x2 являются двумя входными опорными точками, а y1, y2 являются соответствующими выходными опорными точками для одного отрезка. Выходное значение y для какого-либо входного значения x между значениями x1 и x2 может быть интерполирована посредством следующего уравнения:

y = ((y2-y1)/(x2-x1)) * (x-x1) + y1

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

y = ((m * x + 2FP_PREC-1) >> FP_PREC) + c

где m обозначает скаляр, c обозначает сдвиг и FP_PREC представляет собой константу для специфицирования точности.

В некоторых примерах, модель PWL используется для предварительного вычисления имеющих по 1024 входных позиций каждая таблиц прямого FwdLUT и обратного InvLUT отображения; но модель PWL также позволяет создать реализации для вычисления идентичных отображаемых значений в реальном времени без предварительного вычисления таблиц LUT.

2.6.2.1 Переформирование яркостной составляющей

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

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

16-элементные кусочно-линейные (PWL) модели подвергают тестированию для масштабирования остатков яркостной и цветностной составляющих вместо 32-элементных моделей PWL.

Реконструкция среза при внутрикадровом прогнозировании с применением устройства внутриконтурного переформирования яркостной составляющей (заштрихованные светло-зеленым блоки обозначают сигнал в переформированной области: остаток яркостной составляющей; яркостную составляющую при внутрикадровом прогнозировании; реконструированную яркостную составляющую при внутрикадровом прогнозировании).

2.6.2.2 Зависящее от яркостной составляющей масштабирование остатка цветностной составляющей

Зависящее от яркостной составляющей масштабирование остатка цветностной составляющей является мультипликативным процессом, реализуемым целочисленной операцией с фиксированной запятой. Масштабирование остатка цветностной составляющей компенсирует взаимодействие яркостного сигнала с цветностным сигналом. Масштабирование остатка цветностной составляющей применяется на уровне единиц TU. Более конкретно, применяется следующее:

Для внутрикадрового прогнозирования, усредняют реконструированную яркостную составляющую.

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

Усреднение используется для идентификации индекса в модели PWL. Этот индекс идентифицирует масштабный коэффициент cScaleInv. Остаток цветностной составляющей умножают на этот коэффициент.

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

2.6.2.3 Передача сигнализации дополнительной информации о переформировании ILR

Эти параметры передают (в настоящий момент) в заголовке группы плиток (аналогично фильтрации ALF). Эти сообщения занимают 40 – 100 бит.

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

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

seq_parameter_set_rbsp( ) { Дескриптор sps_seq_parameter_set_id ue(v) sps_triangle_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_reshaper_enabled_flag u(1) rbsp_trailing_bits( ) }

В 7.3.3.1 Синтаксис общего заголовка группы плиток

tile_group_header( ) { Дескриптор if( num_tiles_in_tile_group_minus1 > 0 ) { offset_len_minus1 ue(v) for( i = 0; i < num_tiles_in_tile_group_minus1; i++ ) entry_point_offset_minus1[ i ] u(v) } if ( sps_reshaper_enabled_flag ) { tile_group_reshaper_model_present_flag u(1) if ( tile_group_reshaper_model_present_flag ) tile_group_reshaper_model ( ) tile_group_reshaper_enable_flag u(1) if ( tile_group_reshaper_enable_flag && (!( qtbtt_dual_tree_intra_flag && tile_group_type == I ) ) ) tile_group_reshaper_chr oma_residual_scale_flag u(1) } byte_alignment( ) }

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

tile_group_reshaper_model () { Дескриптор reshaper_model_min_bin_idx ue(v) reshaper_model_delta_max_bin_idx ue(v) reshaper_model_bin_delta_abs_cw_prec_minus1 ue(v) for ( i = reshaper_model_min_bin_idx; i <= reshaper_model_max_bin_idx; i++ ) {   reshape_model_bin_delta_abs_CW [ i ] u(v) if ( reshaper_model_bin_delta_abs_CW[ i ] ) > 0 )   reshaper_model_bin_delta_sign_CW_flag[ i ] u(1) }   }

В общую семантику набора параметров последовательности RBSP добавление следующей семантики:

Флаг sps_reshaper_enabled_flag, равный 1, специфицирует, что устройство переформирования используется в кодированной последовательности видео (coded video sequence (CVS)). Флаг sps_reshaper_enabled_flag, равный 0, специфицирует, что устройство переформирования не используется в последовательности.

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

Флаг tile_group_reshaper_model_present_flag, равный 1, специфицирует, что параметр tile_group_reshaper_model()присутствует в заголовке группы плиток. Флаг tile_group_reshaper_model_present_flag, равный 0, специфицирует, что параметр tile_group_reshaper_model() не присутствует в заголовке группы плиток. Когда флаг tile_group_reshaper_model_present_flag, не присутствует, его считают равным 0.

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

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

Добавление синтаксиса tile_group_reshaper_model( )

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

Индекс reshape_model_delta_max_bin_idx специфицирует индекс максимального допустимого разряда (или отрезка) MaxBinIdx минус максимальный индекс разряда для использования в процессе конструирования устройства для переформирования. Значение индекса reshape_model_max_bin_idx устанавливают равным MaxBinIdx – reshape_model_delta_max_bin_idx.

Параметр reshaper_model_bin_delta_abs_cw_prec_minus1 плюс 1 специфицирует число битов, используемое для представления синтаксиса reshape_model_bin_delta_abs_CW[ i ].

Параметр reshape_model_bin_delta_abs_CW[ i ] специфицирует абсолютное значение кодового слова приращения (дельта) для i-го разряда.

Параметр reshaper_model_bin_delta_sign_CW_flag[ i ] специфицирует знак параметра reshape_model_bin_delta_abs_CW[ i ] следующим образом:

– Если флаг reshape_model_bin_delta_sign_CW_flag[ i ] равен 0, соответствующая переменная RspDeltaCW[ i ] имеет положительное значение.

– В противном случае ( reshape_model_bin_delta_sign_CW_flag[ i ] не равен 0 ), соответствующая переменная RspDeltaCW[ i ] имеет отрицательное значение.

Когда флаг reshape_model_bin_delta_sign_CW_flag[ i ] не присутствуют, его считают равным 0.

Переменная RspDeltaCW[ i ] = (1 2*reshape_model_bin_delta_sign_CW [ i ]) * reshape_model_bin_delta_abs_CW [ i ];

Переменную RspCW[ i ] определяют посредством следующих этапов:

Переменную OrgCW устанавливают равной (1 << BitDepthY ) / ( MaxBinIdx + 1).

– Если reshaper_model_min_bin_idx < = i <= reshaper_model_max_bin_idx

RspCW[ i ] = OrgCW + RspDeltaCW[ i ].

– В противном случае, RspCW[ i ] = 0.

Значение RspCW [ i ] должна быть в диапазоне от 32 до 2 * OrgCW – 1, если значение BitDepthY равна 10.

Переменные InputPivot[ i ] с i в диапазоне от 0 до MaxBinIdx + 1, включительно, формируют следующим образом

Переменную ReshapePivot[ i ] для i в диапазоне от 0 до MaxBinIdx + 1, включительно, переменную ScaleCoef[ i ] и переменную InvScaleCoeff[ i ] при i в диапазоне от 0 до MaxBinIdx , включительно, определяют следующим образом:

InputPivot[ i ] = i * OrgCW

shiftY = 14
ReshapePivot[ 0 ] = 0;

for( i = 0; i <= MaxBinIdx ; i++) {
ReshapePivot[ i + 1 ] = ReshapePivot[ i ] + RspCW[ i ]

ScaleCoef[ i ] = ( RspCW[ i ] * (1 << shiftY) + (1 << (Log2(OrgCW) - 1))) >> (Log2(OrgCW))
if ( RspCW[ i ] == 0 )
InvScaleCoeff[ i ] = 0
else
InvScaleCoeff[ i ] = OrgCW * (1 << shiftY) / RspCW[ i ]
}

Переменную ChromaScaleCoef[ i ] при i в диапазоне от 0 до MaxBinIdx, включительно, определяют следующим образом:

ChromaResidualScaleLut[64] = {16384, 16384, 16384, 16384, 16384, 16384, 16384, 8192, 8192, 8192, 8192, 5461, 5461, 5461, 5461, 4096, 4096, 4096, 4096, 3277, 3277, 3277, 3277, 2731, 2731, 2731, 2731, 2341, 2341, 2341, 2048, 2048, 2048, 1820, 1820, 1820, 1638, 1638, 1638, 1638, 1489, 1489, 1489, 1489, 1365, 1365, 1365, 1365, 1260, 1260, 1260, 1260, 1170, 1170, 1170, 1170, 1092, 1092, 1092, 1092, 1024, 1024, 1024, 1024};

shiftC = 11

– если ( RspCW[ i ] == 0 )

ChromaScaleCoef [ i ] = (1 << shiftC)

– В противном случае (RspCW[ i ] != 0), ChromaScaleCoef[ i ] = ChromaResidualScaleLut[RspCW[ i ] >> 1]

2.6.2.4 Использование переформирования ILR

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

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

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

Текущий блок кодирован с применением внутрикадрового прогнозирования

Текущий блок кодирован с использованием текущего изображения в качестве опоры (CPR (current picture referencing)) (также называется внутрикадровым копированием блоков, IBC)

Текущий блок кодирован с применением комбинированного режима с внутрикадровым и межкадровым прогнозированием (combined inter-intra mode (CIIP)), а процедура прямого переформирования не активизирована для блока с внутрикадровым прогнозированием

3. Примеры проблем решаемых различными вариантами

В сегодняшнем варианте кодирования в режиме CPR/IBC существуют несколько проблем.

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

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

3. Нерегулярная опорная область ведет к неэффективному кодированию блочного вектора.

4. Неясно, как работать с единицами CTU размером меньше 128x128.

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

4. Примеры вариантов

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

Определена функция isRec(x,y) для индикации, был ли реконструирован пиксель с координатами (x,y) для использования в качестве опоры в режиме копирования IBC. Когда точка (x,y) находится вне изображения, другого среза/плитки/блока, функция isRec(x,y) имеет значение «ложно»; когда пиксель в точке (x,y) еще не был реконструирован, функция isRec(x,y) имеет значение «ложно». В другом примере, когда отсчет в точке (x,y) уже был реконструирован, но удовлетворяются некоторые другие условия, он также может быть маркирован как недоступный, например, как находящийся вне опорной области/в другой единице VPDU, и функция isRec(x,y) имеет значение «ложно».

Функция isRec(c, x,y) определена для индикации, является ли отсчет в точке (x,y) для составляющей c доступным. Например, если отсчет в точке (x, y) еще не был реконструирован, его маркируют как недоступный. В другом примере, когда отсчет в точке (x,y) уже был реконструирован, но удовлетворяются некоторые другие условия, он также может быть маркирован как недоступный, например, как находящийся вне изображения/в другом срезе/плитке/блоке/в другой единице VPDU, вне допустимой опорной области. Функция isRec(c, x,y) имеет значение «ложно», когда отсчет в точке (x, y) недоступен, в противном случае, она имеет значение «истинно».

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

Опорный буфер для режима CPR/IBC

1. Предлагается использовать буфер пикселей размером M×N для сохранения опорных отсчетов цветностной составляющей для режима CPR/IBC.

- В одном из примеров размер буфера равен 64x64.

- В одном из примеров размер буфера равен 128x128.

- В одном из примеров размер буфера равен 64x128.

- В одном из примеров размер буфера равен 128x64.

- В одном из примеров, N равно высоте единицы CTU.

- В одном из примеров, N=nH, где H – высота единицы CTU, n – положительное целое число.

- В одном из примеров, M равно ширине единицы CTU.

- В одном из примеров, M=mW, где W – ширина единицы CTU, m – положительное целое число.

- В одном из примеров размер буфера, такой как 96x128 или 128x96, не равен размеру единицы CTU.

- В одном из примеров размер буфера равен размеру единицы CTU

- В одном из примеров, M=mW и N=H, где W и H обозначают ширину и высоту единицы CTU, m – положительное целое число.

- В одном из примеров, M=W и N=nH, где W и H обозначают ширину и высоту единицы CTU, n – положительное целое число.

- В одном из примеров, M=mW и N=nH, где W и H обозначают ширину и высоту единицы CTU, m и n – положительные целые числа.

- В приведенном выше примере, m и n могут зависеть от размера единицы CTU.

- В одном из примеров, когда размер единицы CTU равен 128x128, m=1 и n=1.

- В одном из примеров, когда размер единицы CTU равен 64x64, m=4 и n=1.

- В одном из примеров, когда размер единицы CTU равен 32x32, m=16 и n=1.

- В одном из примеров, когда размер единицы CTU равен 16x16, m=64 и n=1.

- В качестве альтернативы, размер буфера соответствует размеру единицы CTU.

- В качестве альтернативы, размер буфера соответствует размеру единицы данных виртуального конвейера (VPDU).

- Значения M и/или N могут быть сообщены в виде сигнализации от кодирующего устройства декодирующему устройству, например в составе набора VPS/набора SPS/набора PPS/заголовка изображения/заголовка среза/заголовка группы плиток.

23. Значения M и/или N могут быть различными в разных профилях/уровнях/ярусах, определяемых стандартом. Предлагается использовать другой буфер пикселей размером Mc×Nc для сохранения опорных отсчетов цветностной составляющей для режима CPR/IBC.

- В одном из примеров, Mc = M/2 и Nc = N/2 для формата 4:2:0 видео

- В одном из примеров, Mc = M и Nc = N для формата 4:4:4 видео

- В одном из примеров, Mc = M и Nc = N/2 для формата 4:2:2 видео

- В качестве альтернативы, Mc и Nc могут быть независимы от M и N.

- В одном из примеров, буфер цветностной составляющей содержит два канала, соответствующих составляющим Cb и Cr.

- В одном из примеров, Mc=M и Nc=N.

30. Предлагается использовать буфер отсчетов размером M×N для сохранения опорных отсчетов в формате RGB для режима CPR/IBC

- В одном из примеров размер буфера равен 64x64.

- В одном из примеров размер буфера равен 128x128.

- В одном из примеров размер буфера равен 64x128.

- В одном из примеров размер буфера равен 128x64.

- В качестве альтернативы, размер буфера соответствует размеру единицы CTU.

- В качестве альтернативы, размер буфера соответствует размеру единицы данных виртуального конвейера (VPDU).

37. Предлагается, чтобы буфер мог сохранять реконструированные пиксели прежде контурной фильтрации. Контурная фильтрация может относиться к использованию деблокирующего фильтра, адаптивного контурного фильтра (adaptive loop filter (ALF)), нелинейного фильтра с адаптивным смещением (sample adaptive offset (SAO)), кросс-компонентного фильтра ALF или каких-либо других фильтров.

- В одном из примеров, буфер может сохранять отсчеты текущей единицы CTU.

- В одном из примеров, буфер может сохранять отсчеты вне текущей единицы CTU.

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

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

42. Предлагается, чтобы буфер мог сохранять реконструированные пиксели после контурной фильтрации. Контурная фильтрация может относиться к использованию деблокирующего фильтра, адаптивного контурного фильтра (ALF), нелинейного фильтра с адаптивным смещением (SAO), кросс-компонентного фильтра ALF или каких-либо других фильтров.

- В одном из примеров, буфер может сохранять отсчеты текущей единицы CTU.

- В одном из примеров, буфер может сохранять отсчеты вне текущей единицы CTU.

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

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

47. Предлагается, чтобы буфер мог сохранять реконструированные пиксели и прежде контурной фильтрации, и после контурной фильтрации. Контурная фильтрация может относиться к использованию деблокирующего фильтра, адаптивного контурного фильтра (ALF), нелинейного фильтра с адаптивным смещением (SAO), кросс-компонентного фильтра ALF или каких-либо других фильтров.

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

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

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

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

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

- В одном из примеров, даже если внутренняя битовая глубина отличается от входной битовой глубины для последовательности видео, например, (10 бит против 8 бит), опорные отсчеты для режима копирования IBC сохраняют так, чтобы совместить с входной битовой глубиной.

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

- В одном из примеров, битовая глубина идентична битовой глубине входного изображения/видео.

- В одном из примеров, битовая глубина идентична заданному числу.

- В одном из примеров, битовая глубина зависит от профиля стандарта.

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

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

- Битовая глубина каждой цветовой составляющей в буфере может отличаться от других составляющих.

Инициализация буфера

61. Предлагается инициализировать буфер с использованием заданного значения

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

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

- В одном из примеров, буфер инициализируют с использованием среднего уровня серого, например, 128 для 8-битового сигнала или 512 для 10-битового сигнала.

- В одном из примеров, буфер инициализируют с использованием значения forwardLUT(m), когда используется переформирование ILR. Например, m= 1<<(Bitdepth-1).

- В качестве альтернативы, буфер инициализируют с использованием значения, сообщаемой в виде сигнализации в наборе SPS/наборе VPS/наборе APS/наборе PPS/заголовке последовательности/заголовке группы плиток/заголовке изображения/плитке/единице/CTU/единице кодирования/единице VPDU/области.

- В одном из примеров, указанное заданное значение может быть выведено из отсчетов ранее декодированных изображений или срезов, или строк единиц CTU или единиц CTU или единиц CU.

- Указанное заданное значение может быть различной для разных цветовых составляющих.

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

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

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

- В одном из примеров, когда буфера размер равен 64x64, буфер этого размера инициализируют с использованием декодированных пикселей из ранее декодированного блока размером 64x64, если таковой доступен.

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

Ссылки на буфер

74. Блок, которому нужно использовать буфер в качестве опоры, может использовать позицию (x,y), x=0,1,2,…,M-1;y=0,1,2,…,N-1, в буфере для индикации, откуда взять опору.

75. В качестве альтернативы, опорная позиция может быть обозначена как l = y*M+x, l=0,1,…,M*N-1.

76. Когда верхняя-левая позиция блока, относящегося к текущей единице CTU, обозначена (x0,y0), блочный вектор (BVx,BVy)=(x-x0,y-y0) может быть передан декодирующему устройству для индикации, где взять опору в буфере.

77. В качестве альтернативы, блочный вектор (BVx,BVy) может быть определен как (x-x0+Tx,y-y0+Ty), где Tx и Ty представляют собой заданные сдвиги.

78. Для любого пикселя в точке (x0, y0) и вектора (BVx, BVy), соответствующая опора в буфере может быть найдена в точке (x0+BVx, y0+BVy)

- В одном из примеров, когда точка (x0+BVx, y0+BVy) находится вне буфера, она должна быть усечена до границы.

- В качестве альтернативы, когда точка (x0+BVx, y0+BVy) находится вне буфера, ее опорное значение заранее определяют, как заданное значение, например, средний уровень серого.

- В качестве альтернативы, опорную позицию определяют как ((x0+BVx) mod M, (y0+BVy) mod N), так что она всегда находится в буфере.

82. Для любого пикселя (x0, y0) и (BVx, BVy), когда точка (x0+BVx, y0+BVy) находится вне буфера, ее опорное значение может быть выведено из значений в буфере.

- В одном из примеров, это значение выводят из отсчета ((x0+BVx) mod M, (y0+BVy) mod N) в буфере.

- В одном из примеров, это значение выводят из отсчета ((x0+BVx) mod M, clip(y0+BVy, 0, N-1)) в буфере.

- В одном из примеров, это значение выводят из отсчета (clip(x0+BVx, 0, M-1), (y0+BVy) mod N) в буфере.

- В одном из примеров, это значение выводят из отсчета (clip(x0+BVx, 0, M-1), clip(y0+BVy, 0, N-1)) в буфере.

87. Могут быть не допустимы определенные координаты вне диапазона буфера

- В одном из примеров, для любого пикселя в точке (x0, y0) относительно верхнего-левого угла единицы CTU и блочного вектора (BVx, BVy), имеется ограничение для потока битов данных, что точка y0+BVy должна находиться в диапазоне [0,…,N-1].

- В одном из примеров, для любого пикселя в точке (x0, y0) относительно верхнего-левого угла единицы CTU и блочного вектора (BVx, BVy), имеется ограничение для потока битов данных, что точка x0+BVx должна находиться в диапазоне [0,…,M-1].

- В одном из примеров, для любого пикселя в точке (x0, y0) относительно верхнего-левого угла единицы CTU и блочного вектора (BVx, BVy), имеется ограничение для потока битов данных, что точка y0+BVy должна находиться в диапазоне [0,…,N-1] и точка x0+BVx должна находиться в диапазоне [0,…,M-1].

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

- В одном из примеров, значение любого отсчета вне буфера определено с использованием заданного значения.

- В одном из примеров, это значение может быть 1<<(Bitdepth-1), например 128 для 8-битовых сигналов и 512 для 10-битовых сигналов.

- В одном из примеров, это значение может быть forwardLUT(m), когда используется переформирование ILR. Например m= 1<<(Bitdepth-1).

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

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

97. Способы обработки опоры из буфера могут различаться в горизонтальном направлении и вертикальном направлении, либо могут различаться в соответствии с положением текущего блока (например, близко к границе изображения или нет).

- В одном из примеров, когда точка y0+BVy находится вне интервала [0, N-1], значению отсчета в точке (x0+BVx, y0+BVy) назначают заданное значение.

- В одном из примеров, когда точка x0+BVx находится вне интервала [0, M-1], значению отсчета в точке (x0+BVx, y0+BVy) назначают заданное значение.

- В качестве альтернативы, значению отсчета в точке (x0+BVx, y0+BVy) назначают значение ((x0+BVx)mod M, y0+BVy), что может привлекать другой способ для дальнейшего вывода, если ((x0+BVx)mod M, y0+BVy) по-прежнему находится вне буфера.

- В качестве альтернативы, значению отсчета в точке (x0+BVx, y0+BVy) назначают значение (x0+BVx, (y0+BVy) mod N), что может привлекать другой способ для дальнейшего вывода, если (x0+BVx, (y0+BVy) mod N) по-прежнему находится вне буфера.

Представление блочного вектора

102. Каждый компонент блочного вектора (BVx, BVy) или один из этих компонентов может быть нормирован в некоторый диапазон.

- В одном из примеров, компонент BVx может быть заменен компонентом (BVx mod M).

- В качестве альтернативы, компонент BVx может быть заменен компонентом ((BVx+X) mod M)-X, где X – заданное значение.

- В одном из примеров, X равно 64.

- В одном из примеров, X равно M/2;

- В одном из примеров, X равно горизонтальной координате блока относительно текущей единицы CTU.

- В одном из примеров, компонент BVy может быть заменен компонентом (BVy mod N).

- В качестве альтернативы, компонент BVy может быть заменен компонентом ((BVy+Y) mod N)-Y, где Y – заданное значение.

- В одном из примеров, Y равно 64.

- В одном из примеров, Y равно N/2;

- В одном из примеров, Y равно вертикальной координате блока относительно текущей единицы CTU.

113. Компоненты BVx и BVy могут иметь разные нормированные диапазоны.

114. Разность блочных векторов (BVDx, BVDy) может быть нормирована в некоторый диапазон.

- В одном из примеров, компонент BVDx может быть заменен компонентом (BVDx mod M), где результатом функции взятия по модулю (mod) является остаток.

- В качестве альтернативы, компонент BVDx может быть заменен компонентом ((BVDx+X) mod M)-X, где X – заданное значение.

- В одном из примеров, X равно 64.

- В одном из примеров, X равно M/2;

- В одном из примеров, компонент BVy может быть заменен компонентом (BVDy mod N).

- В качестве альтернативы, компонент BVy может быть заменен компонентом ((BVDy+Y) mod N)-Y, где Y – заданное значение.

- В одном из примеров, Y равно 64.

- В одном из примеров, Y равно N/2;

123. Компоненты BVDx и BVDy могут иметь разные нормированные диапазоны.

Проверка действительности для блочного вектора

Обозначим ширину и высоту буфера для режима копирования IBC как Wbuf и Hbuf. Для блока размером WxH (это может быть блок яркостной составляющей, блок цветностной составляющей, единица CU, единица TU, субблок размером 4x4, 2x2 или другие субблоки), начиная от точки (X, Y) относительно верхнего левого угла изображения, следующее может быть применено для сообщения, действителен блочный вектор (BVx, BVy) или нет. Пусть Wpic и Hpic обозначают ширину и высоту изображения и; Wctu и Hctu обозначают ширину и высоту единицы CTU. Результатом функции floor(x) является наибольшее целое число не больше x. Функция isRec(x, y) определяет, был ли отсчет в точке (x, y) реконструирован.

124. Блочный вектор (BVx, BVy) может быть установлен действительным, даже если какая-либо опорная позиция находится вне границ изображения.

- В одном из примеров, блочный вектор может быть установлен как действительный, даже если X+BVx < 0.

- В одном из примеров, блочный вектор может быть установлен как действительный, даже если X+W+BVx > Wpic.

- В одном из примеров, блочный вектор может быть установлен как действительный, даже если Y+BVy < 0.

- В одном из примеров, блочный вектор может быть установлен как действительный, даже если Y+H+BVy > Hpic.

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

- В одном из примеров, блочный вектор может быть установлен как действительный, даже если Y+BVy<floor(Y/ Hctu)* Hctu.

- В одном из примеров, блочный вектор может быть установлен как действительный, даже если Y+H+BVy>=floor(Y/ Hctu)*Hctu+ Hctu.

132. Блочный вектор (BVx, BVy) может быть установлен как действительный, даже если какая-либо опорная позиция находится вне текущей и (n-1) левых единиц CTU, где n обозначает число единиц CTU (включая или исключая текущую единицу CTU), которые могут быть использованы в качестве опорной области для режима копирования IBC.

- В одном из примеров, блочный вектор может быть установлен как действительный, даже если X+BVx<floor(X/Wctu)* Wctu - (n-1)* Wctu.

- В одном из примеров, блочный вектор может быть установлен как действительный, даже если X+W+BVx > floor(X/Wctu)* Wctu + Wctu

135. Блочный вектор (BVx, BVy) может быть установлен как действительный, даже если какой-то определенный отсчет еще не был реконструирован.

- В одном из примеров, блочный вектор может быть установлен как действительный, даже если функция isRec(X+BVx, Y+ BVy) является ложной.

- В одном из примеров, блочный вектор может быть установлен как действительный, даже если функция isRec(X+BVx +W-1, Y+BVy) является ложной.

- В одном из примеров, блочный вектор может быть установлен как действительный, даже если функция isRec(X+BVx, Y+BVy +H-1) является ложной.

- В одном из примеров, блочный вектор может быть установлен как действительный, даже если функция isRec(X+BVx +W-1, Y+BVy +H-1) является ложной.

140. Блочный вектор (BVx, BVy) может быть всегда установлен как действительный, когда блок не является 1-ой единицей CTU в строке единиц CTU.

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

142. Блочный вектор (BVx, BVy) может быть всегда установлен как действительный, когда удовлетворяются следующие 3 условия

- X + BVx >= 0

- Y + BVy >= floor(Y / Hctu)

- isRec(X + BVx + W - 1, Y + BVy + H - 1) == true (истинно)

- В качестве альтернативы, когда удовлетворяются все три условия для блока 1-ой единицы CTU в строке единиц CTU, блочный вектор может быть всегда установлен как действительный.

144. Когда блочный вектор (BVx, BVy) действителен, копирование отсчетов для соответствующего блока может быть основано на этом блочном векторе.

- В одном из примеров, прогнозирование отсчета (X, Y) может быть осуществлено от ((X+BVx)%Wbuf, (Y+BVy)%Hbuf)

Обновление буфера

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

- Термин «сброс» может означать, что буфер инициализируют.

- Термин «сброс» может обозначать, что всем отсчетам/пикселям в буфере присваивают заданное значение (например, 0 или -1).

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

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

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

- В одном из примеров, когда буфер заполнен целиком, будут обновлять область буфера, соответствующую самой старой единице CTU.

- В одном из примеров, когда M=mW и N=H (W и H обозначают размеры единицы CTU; M и N обозначают размеры буфера) и ранее обновленная область начинается с (kW, 0), следующая стартовая позиция для обновления будут ((k+1)W mod M, 0).

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

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

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

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

158. При завершении кодирования блока, начиная с точки (x,y), соответствующая область буфера, начиная с этой точки (x,y), будет обновлена реконструированными данными этого блока.

- В одном из примеров, координаты (x,y) обозначают позицию относительно верхнего-левого угла единицы CTU.

160. При завершении кодирования блока относительно изображения соответствующая область буфера будет обновлена реконструированными данными этого блока.

- В одном из примеров, значение в позиции (x mod M, y mod N) в буфере может быть обновлено реконструированным значением пикселя из позиции (x, y) относительно верхнего-левого угла изображения.

- В одном из примеров, значение в позиции (x mod M, y mod N) в буфере может быть обновлено реконструированным значением пикселя из позиции (x, y) относительно верхнего-левого угла текущей плитки.

- В одном из примеров, значение в позиции (x mod M, y mod N) в буфере может быть обновлено реконструированным значением пикселя из позиции (x, y) относительно верхнего-левого угла текущей строки единиц CTU.

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

165. При завершении кодирования блока, начиная с точки (x,y), соответствующая область буфера, начиная с точки (xb,yb), будет обновлена реконструированными данными этого блока, где (xb, yb) и (x, y) являются разными координатами

- В одном из примеров, координаты (x,y) представляют позицию относительно верхнего-левого угла единицы CTU, и координаты (xb, yb) равны (x+update_x, y+update_y), где приращения update_x и update_y указывают на обновляемую позицию в буфере.

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

- В качестве альтернативы, реконструированные значения блока могут указывать реконструированные значения после применения фильтров (например, деблокирующего фильтра).

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

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

- В одном из примеров, значением в буфере обновляют в соответствии с значением {p+[1<<(b-1)]}>>b, где p обозначает значение реконструированного отсчета, b обозначает заданное значение сдвига битов.

- В одном из примеров, значение в буфере обновляют в соответствии со значением clip({p+[1<<(b-1)]}>>b, 0, (1<<bitdepth)-1), где p обозначает значение реконструированного отсчета, b обозначает заданное значение сдвига битов, bitdepth обозначает битовую глубину буфера.

- В одном из примеров, значение в буфере обновляют в соответствии со значением {p+[1<<(b-1)-1]}>>b, где p обозначает значение реконструированного отсчета, b обозначает заданное значение сдвига битов.

- В одном из примеров, значение в буфере обновляют в соответствии со значением clip({p+[1<<(b-1)-1]}>>b, 0, (1<<bitdepth)-1), где p обозначает значение реконструированного отсчета, b обозначает заданное значение сдвига битов, bitdepth обозначает битовую глубину буфера.

- В одном из примеров, значение в буфере обновляют в соответствии со значением p>>b.

- В одном из примеров, значение в буфере обновляют в соответствии со значением clip(p>>b, 0, (1<<bitdepth)-1), где bitdepth обозначает битовую глубину буфера.

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

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

- В одном из примеров, прогнозируемое значение соответствует p<<b, где p обозначает значение отсчета в буфере, и b обозначает заданное значение.

- В одном из примеров, прогнозируемое значение соответствует clip(p<<b, 0, 1<<bitdepth), где bitdepth обозначает битовое значение для реконструированных отсчетов.

- В одном из примеров, прогнозируемое значение соответствует (p<<b)+(1<<(bitdepth-1)), где p обозначает значение отсчета в буфере, и b обозначает заданное значение, bitdepth обозначает битовую глубину для реконструированных отсчетов.

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

183. Буфер может быть обновлен в некотором конкретном порядке.

- В одном из примеров, буфер может быть обновлен последовательно.

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

186. Когда буфер заполнен целиком, отсчеты в буфере могут быть заменены самыми последними реконструированными отсчетами.

- В одном из примеров, обновление отсчетов может происходить по принципу «первый пришел - первый ушел».

- В одном из примеров, могут быть заменены самые старые отсчеты.

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

- В одном из примеров, отсчеты могут быть маркированы как «долговременные» (“long-term”), так что первыми будут заменять другие отсчеты.

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

- В одном из примеров, вместе с блоком может быть передан номер для индикации приоритета.

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

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

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

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

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

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

- Пороговое значение можно сообщить в виде сигнализации в наборе SPS/наборе PPS/заголовке последовательности /заголовке среза/в группе плиток/на уровне плиток/в области.

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

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

Альтернативная комбинация буфера

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

- В одном из примеров, при кодировании/декодировании блока размером 64×64, предыдущие 3 блока размером 64×64 могут быть использованы в качестве опоры. По сравнению с фиг. 2, могут быть применены больше видов комбинаций предшествующих блоков размером 64×64. На фиг. 2 показан пример различных комбинаций предыдущих блоков размером 64×64.

204. Вместо использования порядка z-scan сканирования может быть использован вертикальный порядок сканирования.

- В одном из примеров, когда один блок разбит на 4 единицы VPDU с индексами 0..3 в порядке z-scan, порядок кодирования/декодирования имеет вид 0, 2, 1, 3.

- В одном из примеров, при кодировании/декодировании блоков размером 64×64 предшествующие 3 блока размером 64×64 каждый могут быть использованы в качестве опоры. По сравнению с фиг. 2, могут быть применены больше типов порядков кодирования/декодирования блоков размером 64×64. На фиг. 4 показан пример другого порядка кодирования/декодирования блоков размером 64×64.

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

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

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

Виртуальный буфер для режима с копированием IBC

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

210. Виртуальный буфер можно поддерживать для отслеживания статуса опорной области для режима с копированием IBC.

- В одном из примеров, виртуальный буфер имеет размер m WVPDU x n HVPDU.

- В одном из примеров, m равно 3 и n равно 2.

- В одном из примеров, параметры m и/или n могут зависеть от разрешения изображения, размеров единиц CTU.

- В одном из примеров, параметры m и/или n могут быть переданы в виде сигнализации или предварительно заданы.

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

- В одном из примеров, отсчет в точке (x, y) относительно верхнего-левого угла изображения/среза/плитки/кирпича, может быть отображен на (x%(mWVPDU), y%(nHVPDU))

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

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

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

- В одном из примеров, массив, соответствующий 3x2 VPDU, (например, каждый блок размером 4x4 может совместно использовать один и тот же флаг доступности) поддерживают для отслеживания доступности опорных отсчетов для режима копирования IBC.

- В одном из примеров, массив, соответствующий 4x2 VPDU, (например, каждый блок размером 4x4 может совместно использовать один и тот же флаг доступности) поддерживают для отслеживания доступности опорных отсчетов для режима копирования IBC.

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

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

- Когда один отсчет маркирован как недоступный, прогнозирование от этого отсчета не допускается.

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

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

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

- В одном из примеров, если обозначить (xPrevVPDU, yPrevVPDU) как верхнюю-левую позицию относительно верхнего-левого угла изображения/среза/плитки/кирпича/другой единицы обработки видео из самой последней декодированной единицы VPDU, и если yPrevVPDU%(n HVPDU) равно 0, некоторые позиции (x, y) могут быть маркированы как недоступные.

- В одном из примеров, x может быть в таком диапазоне, что [xPrevVPDU - 2WVPDU + 2mWVPDU)% mWVPDU, ((xPrevVPDU – 2 WVPDU + 2m WVPDU)% mWVPDU)-1+WVPDU];

- В одном из примеров, y может быть в таком диапазоне, что [yPrevVPDU%(n HVPDU), (yPrevVPDU%(n HVPDU))-1+HVPDU];

- В одном из примеров, x может быть в таком диапазоне, что [xPrevVPDU - 2WVPDU + 2mWVPDU)% mWVPDU, ((xPrevVPDU - 2WVPDU + 2mWVPDU)% mWVPDU)-1+WVPDU], и y может быть в таком диапазоне, что [yPrevVPDU%(n HVPDU), (yPrevVPDU%(n HVPDU))-1+HVPDU].

- В одном из примеров, если обозначить (xPrevVPDU, yPrevVPDU) как верхнюю-левую позицию относительно верхнего-левого угла изображения/среза/плитки/кирпича/другой единицы обработки видео из самой последней декодированной единицы VPDU, и если yPrevVPDU%(n HVPDU) не равно 0, некоторые позиции (x, y) могут быть маркированы как недоступные.

- В одном из примеров, x может быть в таком диапазоне, что [xPrevVPDU - WVPDU + 2mWVPDU)% mWVPDU, ((xPrevVPDU - WVPDU + 2mWVPDU)% mWVPDU)-1+WVPDU];

- В одном из примеров, y может быть в таком диапазоне, что [yPrevVPDU%(n HVPDU), (yPrevVPDU%(n HVPDU))-1+HVPDU]

- В одном из примеров, x может быть в таком диапазоне, что [xPrevVPDU - WVPDU + 2mWVPDU)% mWVPDU, ((xPrevVPDU - WVPDU + 2mWVPDU)% mWVPDU)-1+WVPDU], и y может быть в таком диапазоне, что [yPrevVPDU%(n HVPDU), (yPrevVPDU%(n HVPDU))-1+HVPDU].

233. Когда единица CU содержит несколько единиц VPDU, вместо применения процедуры маркировки доступности опоры для режима с копированием IBC в соответствии с единицей VPDU, процедура маркировки доступности опоры для режима с копированием IBC может быть выполнена в соответствии с единицей CU

- В одном из примеров, в начале декодирования единицы CU, содержащей несколько единиц VPDU, процедура маркировки доступности опоры для режима с копированием IBC может быть применена для каждой единицы VPDU прежде, чем единица VPDU в пределах единицы CU будет декодирована.

- В таком случае, в режиме с копированием IBC блоки размером 128x64 и 64x128 могут быть недопустимы.

- В одном из примеров, флаг pred_mode_ibc_flag для единиц CU размером 128x64 и 64x128 может не быть передан и может быть признан (выведен) равным 0.

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

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

239. Размер буфера для режима с копированием IBC может зависеть от размера единицы VPDU (где отношение ширина/высота обозначено как vSize) и/или размер CTB/CTU (где отношение ширина/высота обозначено как ctbSize)

- В одном из примеров, высота буфера может быть равна ctbSize.

- В одном из примеров, ширина буфера может зависеть от min(ctbSize, 64)

- В одном из примеров, ширина буфера может быть (128*128/vSize, min(ctbSize, 64 ))

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

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

- В одном из примеров, это значение может быть равно -1.

- В одном из примеров, указанное значение может быть равно какому-либо значению вне диапазона [0, 1<<(internal_bit_depth) – 1], где параметр internal_bit_depth представляет собой положительное целое число. Например, параметр internal_bit_depth обозначает внутреннюю битовую глубину, используемую для кодирования/декодирования отсчета для цветовой составляющей.

- В одном из примеров, указанное значение может быть равно какому-либо значению вне диапазона [0, 1<<(input_bit_depth) – 1] где параметр input_bit_depth представляет собой положительное целое число. Например, input_bit_depth обозначает входную битовую глубину, используемую для кодирования/декодирования отсчета для цветовой составляющей.

248. Маркировка доступности для отсчетов в буфере для режима с копированием IBC может зависеть от позиции текущего блока, размера текущего блока, размера единицы/блока CTU/CTB и размера единицы VPDU. В одном из примеров, пусть (xCb, yCb) обозначает позицию блока относительно верхнего-левого угла изображения; параметр ctbSize представляет размер (т.е. ширина и/или высота) единицы/блока CTU/CTB; vSize= min(ctbSize, 64); wIbcBuf и hIbcBuf обозначают ширину и высоту буфера для режима с копированием IBC.

- В одном из примеров, если параметр (xCb%vSize) равен 0 и параметр (yCb%vSize) равен 0, определенный набор позиций в буфере для режима с копированием IBC может быть маркирован как недоступный.

- В одном из примеров, когда размер текущего блока меньше размера единицы VPDU, т.е. min(ctbSize, 64), область, маркированная как недоступная, может быть определена в соответствии с размером единицы VPDU.

- В одном из примеров, когда размер текущего блока больше размера единицы VPDU, т.е. min(ctbSize, 64), область, маркированная как недоступная, может быть определена в соответствии с размером единицы CU.

252. В начале декодирования единицы видео (например, VPDU (xV, yV)) относительно верхней-левой позиции изображения, соответствующей позициям в буфере для режима с копированием IBC может быть присвоено значение вне диапазона пикселей.

- В одном из примеров, отсчетам в буфере, расположенным в позиции (x%wIbcBuf, y%hIbcBuf) в буфере, при x = xV, …,xV+ctbSize-1 и y=yV,…,yV+ctbSize-1, будет присвоено значение -1. Здесь параметры wIbcBuf и hIbcBuf представляют собой ширину и высоту буфера для режима копирования IBC, параметр ctbSize представляет собой ширину единицы/блока CTU/CTB.

- В одном из примеров, параметр hIbcBuf может быть равен параметру ctbSize.

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

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

257. Ограничение соответствия потока битов данных может быть установлено в соответствии с индикацией доступности в буфере режима с копированием IBC.

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

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

- Соответствующий поток битов данных может удовлетворять тому, что для блока, кодированного в режиме с копированием IBC, ассоциированный блочный вектор может указывать на опорный блок, отображаемый в буфер режима с копированием IBC, и каждый из опорных отсчетов яркостной составляющей, расположенных в буфере режима с копированием IBC для кодирования/декодирования блока, должен быть маркирован как недоступный, (например, значения отсчетов находятся в пределах диапазона [K0, K1], где, например, K0 устанавливают равным 0 и K1 устанавливают равным (1<<BitDepth-1) где BitDepth обозначает внутреннюю битовую глубину или входную битовую глубину).

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

- В одном из примеров, если на высоком уровне (например, срез/изображение/кирпич/плитка) допускается двойное дерево, а текущий блок видео (например, единица CU/единица PU/блок CB/блок PB) кодирован с использованием единичного дерева, ограничения потоков битов данных могут нуждаться в проверке, все ли позиции компонентов, отображенных в буфер режима с копированием IBC, маркированы как недоступные, или нет.

- В одном из примеров, если на высоком уровне (например, срез/изображение/кирпич/плитка) допускается двойное дерево, и текущий блок яркостной составляющей видео (например, единица CU/единица PU/блок CB/блок PB) кодирован с использованием двойного дерева, ограничения потоков битов данных могут пренебрегать позициями цветностных составляющих, отображенных в буфер режима с копированием IBC, маркированы ли они как недоступные, или нет.

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

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

Усовершенствования сегодняшнего варианта стандарта VTM

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

- В одном из примеров, прогнозируемое значение определяют в соответствии со значением clip{{p+[1<<(b-1)]}>>b,0,(1<<bitdepth)-1}<<b, где p обозначает значение реконструированного отсчета, b обозначает заданное значение сдвига битов, bitdepth обозначает битовую глубину прогнозируемого отсчета.

- В одном из примеров, прогнозируемое значение определяют в соответствии со значением clip{{p+[1<<(b-1)-1]}>>b,0,(1<<bitdepth)-1}<<b, где p обозначает значение реконструированного отсчета, b обозначает заданное значение сдвига битов.

- В одном из примеров, прогнозируемое значение определяют в соответствии со значением ((p>>b)+(1<<(bitdepth-1)))<<b, где bitdepth обозначает битовую глубину прогнозируемого отсчета.

- В одном из примеров, прогнозируемое значение определяют в соответствии со значением (clip((p>>b),0,(1<<(bitdepth-b)))+(1<<(bitdepth-1)))<<b, где bitdepth обозначает битовую глубину прогнозируемого отсчета.

- В одном из примеров, прогнозируемое занчение подвергают усечению различными способами в зависимости от того, применяется ли переформирование ILR или нет.

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

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

267. Часть прогнозирования в режиме с копированием IBC может иметь более низкую точность, а другая часть имеет такую же точность, как реконструкция.

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

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

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

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

268. Когда единица CTU имеет размер MxM и размер опорной области равен nMxnM, опорная область представляет собой ближайшую доступную единицу CTU размером nxn в строке единиц CTU.

- В одном из примеров, когда размер опорной области равен 128x128 и размер единицы CTU равен 64x64, ближайшие доступные 4 единицы CTU в строке единиц CTU могут быть использованы в качестве опоры для режима с копированием IBC.

- В одном из примеров, когда размер опорной области равен 128x128 и размер единицы CTU равен 32x32, ближайшие доступные 16 единиц CTU в строке единиц CTU могут быть использованы в качестве опоры для режима с копированием IBC.

269. Когда размер единицы CTU равен M и размер опорной области равен nM, опорная область является ближайшими доступными n-1 единицами CTU в строке единиц CTU/плитке.

- В одном из примеров, когда размер опорной области равен 128x128 или 256x64 и размер единицы CTU равен 64x64, ближайшие доступные 3 единицы CTU в строке единиц CTU могут быть использованы в качестве опоры для режима с копированием IBC.

- В одном из примеров, когда размер опорной области равен 128x128 или 512x32 и размер единицы CTU равен 32x32, ближайшие доступные 15 единиц CTU в строке единиц CTU могут быть использованы в качестве опоры для режима с копированием IBC.

270. Когда размер единицы CTU равен M, размер единицы VPDU равен kM и размер опорной области равен nM, и опорная область является ближайшими доступными n-k единицами CTU в строке единиц CTU/плитке.

- В одном из примеров, размер единицы CTU равен 64x64, размер единицы VPDU также равен 64x64, размер опорной области равен 128x128, ближайшие 3 единицы CTU в строке единиц CTU могут быть использованы в качестве опоры для режима с копированием IBC.

- В одном из примеров, размер единицы CTU равен 32x32, размер единицы VPDU равен 64x64, размер опорной области равен 128x128, ближайшие (16-4)=12 единиц CTU в строке единиц CTU могут быть использованы в качестве опоры для режима с копированием IBC.

271. Для блока размером w x h и с верхним-левым углом в точке (x, y) с использованием режима с копированием IBC, имеются ограничения, которые удерживают опорный блок из некоторой области для повторного использования памяти, где w и h обозначают ширину и высоту текущего блока.

- В одном из примеров, когда размер единицы CTU равен 128x128 и (x, y)=(m x 64,n x 64), опорный блок не может накладываться на область размером 64x64, начиная от ((m-2)x64, n x 64).

- В одном из примеров, когда размер единицы CTU равен 128x128, опорный блок не может накладываться на блок размером w x h с верхним-левым углом в точке (x-128, y).

- В одном из примеров, когда размер единицы CTU равен 128x128, точка (x+BVx, y+BVy) не может быть в пределах блока размером w*h с верхним-левым углом в точке (x-128, y), где BVx и BVy обозначают блочный вектор для текущего блока.

- В одном из примеров, когда размер единицы CTU равен M x M и размер буфера для режима с копированием IBC равен k x M x M, опорный блок не может накладываться на блок размером w x h с верхним-левым углом в точке (x-k x M, y), где BVx и BVy обозначают блочный вектор для текущего блока.

- В одном из примеров, когда размер единицы CTU равен M x M и размер буфера для режима с копированием IBC равен k x M x M, точка (x+BVx, y+BVy) не может быть в пределах блока размером w x h с верхним-левым углом в точке (x-k x M, y), где BVx и BVy обозначают блочный вектор для текущего блока.

272. Когда размер единицы CTU не равен M x M и размер опорной области равен nM x nM, опорная область является ближайшими доступными nxn-1 единицами CTU в строке единиц CTU.

- В одном из примеров, когда размер опорной области равен 128x128 и размер единицы CTU равен 64x64, ближайшие доступные 3 единицы CTU в строке единиц CTU могут быть использованы в качестве опоры для режима с копированием IBC.

- В одном из примеров, когда размер опорной области равен 128x128 и размер единицы CTU равен 32x32, ближайшие доступные 15 единиц CTU в строке единиц CTU могут быть использованы в качестве опоры для режима с копированием IBC.

273. Для единицы CU в пределах блока размером 64x64, начиная от (2m*64, 2n*64), т.е. верхнего-левого блока размером 64x64 в единице CTU размером 128x128, прогнозируемая область в режиме копирования IBC может быть составлена из реконструированных отсчетов в блоке размером 64x64, начиная от ((2m-2)*64, 2n*64), блоке размером 64x64, начиная от ((2m-1)*64, 2n*64), блоке размером 64x64, начиная от ((2m-1)*64, (2n+1)*64), и в текущем блоке размером 64x64.

274. Для единицы CU в пределах блока размером 64x64, начиная от ((2m+1)*64, (2n+1)*64), т.е. нижнего-правого блока размером 64x64 в единице CTU размером 128x128, прогнозируемая область в режиме копирования IBC может быть составлена из текущей единицы CTU размером 128x128.

275. Для единицы CU в пределах блока размером 64x64, начиная от ((2m+1)*64, 2n*64), т.е. верхнего-правого блока размером 64x64 в единице CTU размером 128x128, прогнозируемая область в режиме копирования IBC может быть составлена из реконструированных отсчетов в блоке размером 64x64, начиная от ((2m-1)*64, 2n*64), блоке размером 64x64, начиная от ((2m-1)*64, (2n+1)*64), блоке размером 64x64, начиная от (2m*64, 2n*64), и в текущем блоке размером 64x64.

- В качестве альтернативы, если текущий блок размером 64x64, начиная от (2m*64, (2n+1)*64), был реконструирован, прогнозируемая область в режиме копирования IBC может быть составлена из реконструированных отсчетов в блоке размером 64x64, начиная от ((2m-1)*64, 2n*64), блоке размером 64x64, начиная от (2m*64, 2n*64), блоке размером 64x64, начиная от (2m*64, (2n+1)*64), и в текущем блоке размером 64x64.

276. Для единицы CU в пределах блока размером 64x64, начиная от (2m*64, (2n+1)*64), т.е. нижнего-левого блока размером 64x64 в единице CTU размером 128x128, прогнозируемая область в режиме копирования IBC может быть составлена из реконструированных отсчетов в блоке размером 64x64, начиная от ((2m-1)*64, (2n+1)*64), блоке размером 64x64, начиная от (2m*64, 2n*64); блоке размером 64x64, начиная от ((2m+1)*64, 2n*64), и в текущем блоке размером 64x64.

- В качестве альтернативы, если текущий блок размером 64x64, начиная от ((2m+1)*64, 2n*64), не был реконструирован, прогнозируемая область в режиме копирования IBC может быть составлена из реконструированных отсчетов в блоке размером 64x64, начиная от ((2m-1)*64, 2n*64), блоке размером 64x64, начиная от ((2m-1)*64, (2n+1)*64), блоке размером 64x64, начиная от (2m*64, 2n*64), и в текущем блоке размером 64x64.

277. Предлагается регулировать опорную область на основе того, каким блокам размером 64x64 принадлежит текущая единица CU.

- В одном из примеров, для единицы CU, начиная от (x,y), когда (y>>6)&1 == 0, два или до двух предшествующих блоков размером 64x64, начиная от ((x>>6<<6)-128, y>>6<<6) и ((x>>6<<6)-64, y>>6<<6), могут быть опорными в режиме с копированием IBC.

- В одном из примеров, для единицы CU, начиная от (x,y), когда (y>>6)&1 == 1, один предшествующий блок размером 64x64, начиная от ((x>>6<<6)-64, y>>6<<6), может быть опорным в режиме с копированием IBC.

278. Для блока, начиная с точки (x,y), и с блочным вектором (BVx, BVy), если isRec(((x+BVx)>>6<<6)+128-(((y+BVy)>>6)&1)*64+(x%64), ((y+BVy)>>6<<6) +(y%64)) является истинным, этот блочный вектор недействителен.

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

- В одном из примеров, рассматриваемый блок является блоком цветностной составляющей в формате 4:4:4.

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

279. Для блока цветностной составляющей в формате 4:2:0, начиная от (x,y), и с блочным вектором (BVx, BVy), если isRec(((x+BVx)>>5<<5)+64-(((y+BVy)>>5)&1)*32+(x%32), ((y+BVy)>>5<<5) +(y%32)) является истинным, этот блочный вектор недействителен.

280. Определение, является ли вектор BV недействительным или нет, для блока составляющей c может опираться на доступность отсчетов составляющей X, вместо проверки только отсчета яркостной составляющей.

- Для блока составляющей c, начиная с точки (x,y), и с блочным вектором (BVx, BVy), если isRec(c, ((x+BVx)>>6<<6)+128-(((y+BVy)>>6)&1)*64+(x%64), ((y+BVy)>>6<<6) +(y%64)) является истинным, этот блочный вектор можно считать недействительным.

- В одном из примеров, рассматриваемый блок является блоком яркостной составляющей (например, c является яркостной составляющей или зеленой (G) составляющей для кодирования в формате RGB).

- В одном из примеров, рассматриваемый блок является блоком цветностной составляющей в формате 4:4:4 (например, c является составляющей cb или cr, либо синей/красной (B/R) составляющей при кодировании RGB).

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

- Для блока цветностной составляющей в формате 4:2:0, начиная от точки (x,y) составляющей c, и с блочным вектором (BVx, BVy), если isRec(c, ((x+BVx)>>5<<5)+64-(((y+BVy)>>5)&1)*32+(x%32), ((y+BVy)>>5<<5) +(y%32)) является истинным, этот блочный вектор можно считать недействительным.

- Для блока или субблока цветностной составляющей, начиная от точки (x, y) составляющей c, и с блочным вектором (BVx, BVy), если isRec(c, x+BVx+Chroma_CTU_size, y) для цветностной составляющей является истинным, этот блочный вектор можно считать недействительным, где параметр Chroma_CTU_size является размером единицы CTU для цветностной составляющей.

- В одном из примеров, для формата 4:2:0, параметр Chroma_CTU_size может быть равен 64.

- В одном из примеров, субблок цветностной составляющей может быть блоком размером 2x2 в формате 4:2:0.

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

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

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

281. Для всех разделов приведенных выше, предполагается, что опорный буфер содержит несколько блоков размером MxM (M=64). Однако это можно расширить и на другие случаи, например, когда опорный буфер содержит несколько блоков размером NxM (например, N=128, M=64).

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

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

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

283. Предлагается иметь K1 самых последних кодированных единиц VPDU, если доступны, в 1-ой строке единиц VPDU из строки единиц/блоков CTU/CTB и K2 самых последних кодированных единиц VPDU, если доступны, во 2-ой строке единиц VPDU из строки единиц/блоков CTU/CTB в качестве опорной области для режима с копированием IBC, исключая текущую единицу VPDU.

- В одном из примеров, K1 равно 2 и K2 равно 1.

- В одном из примеров, приведенные выше способы могут быть применены, когда размер единицы/блока CTU/CTB равен 128x128 и размер единицы VPDU равен 64x64.

- В одном из примеров, приведенные выше способы могут быть применены, когда размер единицы/блока CTU/CTB равен 64x64 и размер единицы VPDU равен 64x64 и/или 32x32.

- В одном из примеров, приведенные выше способы могут быть применены, когда размер единицы/блока CTU/CTB равен 32x32 и размер единицы VPDU равен 32x32 или меньше.

49. Приведенные выше способы могут быть применены на разных этапах.

- В одном из примеров, операция взятия по модулю (например, a mod b) блочных векторов (BV) может быть привлечена в процедуре проверки доступности векторов BV с целью решить, является ли такой вектор BV действительным или нет.

- В одном из примеров, операция взятия по модулю (например, a mod b) блочных векторов (BV) может быть привлечена для идентификации местонахождения опорного отсчета (например, в соответствии с операцией взятия по модулю результатов определения положения текущего отсчета и вектора BV) в виртуальном буфере для режима с копированием IBC или в буфере для реконструированного изображения (например, прежде процедуры внутриконтурной фильтрации).

5. Варианты

5.1 Вариант #1

Ниже описан вариант реализации буфера для режима с копированием IBC:

Размер буфера равен 128x128. Размер единицы CTU также равен 128x128. Для кодирования 1-ой единицы CTU в строке единиц CTU буфер инициализируют числом 128 (для 8-битового сигнала видео). Для кодирования k-ой единицы CTU в строке единиц CTU буфер инициализируют реконструированными данными прежде контурной фильтрации (k-1)-ой единицы CTU.

Фиг. 3 показывает пример кодирования блока, начиная с точки с координатами (x,y).

При кодировании блока начиная с точки (x,y), относящейся к текущей единице CTU, блочный вектор (BVx, BVy) = (x-x0, y-y0) передают декодирующему устройству для индикации, что опорный блок начинается с точки (x0,y0) в буфере для режима с копированием IBC. Предположим, что ширина и высота блока равны w и h, соответственно. После завершения кодирования блока область wxh, начиная с точки (x,y), в буфере для режима с копированием IBC будет обновлена реконструированными данными блока прежде контурной фильтрации.

5.2 Вариант #2

На фиг. 4 показаны примеры возможных альтернативных способов выбора ранее кодированных блоков размером 64×64.

5.3 Вариант #3

На фиг. 5 показан пример возможного альтернативного способа изменения порядка кодирования/декодирования блоков размером 64×64.

5.4 Вариант #4

На фиг. 8 показан другой возможный альтернативный способ выбора ранее кодированных блоков размером 64×64, когда порядок декодирования блоков размером 64x64 установлен сверху вниз, слева направо.

5.5 Вариант #5

На фиг. 9 показан другой возможный альтернативный способ выбора ранее кодированных блоков размером 64×64.

5.6 Вариант #6

На фиг. 11 показан другой возможный альтернативный способ выбора ранее кодированных блоков размером 64×64, когда порядок декодирования блоков размером 64x64 установлен слева направо, сверху вниз.

5.7 Вариант #7

Предположим, что размер единицы CTU равен WxW, тогда вариант реализации буфера для режима с копированием IBC размером mWxW и битовой глубиной B, в декодирующем устройстве описан ниже.

В начале декодирования строки единиц CTU инициализируют буфер с использованием значения (1<<(B-1)) и устанавливают стартовую точку для обновления (xb, yb) равную (0,0).

Когда единицу CU, начинающуюся с точки (x, y), относящейся к верхнему-левому углу единицы CTU, и имеющую размер wxh, декодируют, область, начинающаяся с точки (xb+x, yb+y) и имеющая размер wxh, будет обновлена с использованием значений реконструированных пикселей единицы CU, после совмещения битовой глубины с B бит.

После декодирования единицы CTU стартовую точку для обновления (xb, yb) устанавливают на ((xb+W) mod mW, 0).

При декодировании единицы CU, кодированной в режиме с копированием IBC, с блочным вектором (BVx, BVy), для любого пикселя (x, y), относящегося к верхнему-левому углу единицы CTU, прогнозируемые пиксели извлекают из буфера в позиции ((x+BVx) mod mW, (y+BVy) mode W) после совмещения битовой глубины с битовой глубиной прогнозируемых сигналов.

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

5.8 Вариант #8

Для единицы CU яркостной составляющей или объединенной единицы CU яркостной/цветностной составляющей, начиная с точки (x,y), относящейся к верхнему-левому углу изображения, и блочного вектора (BVx, BVy), этот блочный вектор является недействительным, когда функция isRec(((x+BVx)>>6<<6)+128-(((y+BVy)>>6)&1)*64+(x%64), ((y+BVy)>>6<<6) +(y%64)) является истинной.

Для единицы CU цветностной составляющей, начиная с точки (x,y), относящейся к верхнему-левому углу изображения, и блочного вектора (BVx, BVy), этот блочный вектор является недействительным, когда функция isRec(((x+BVx)>>5<<5)+64-(((y+BVy)>>5)&1)*32+(x%32), ((y+BVy)>>5<<5) +(y%32)) является истинной.

5.9 Вариант #9

Для блока или субблока цветностной составляющей, начиная с точки (x,y) в формате 4:2:0, относящейся к верхнему-левому углу изображения, и блочного вектора (BVx, BVy), этот блочный вектор является недействительным, когда функция isRec(c, (x+BVx+64, y+BVy) является истинной, где c обозначает цветностную составляющую.

Для блока или субблока цветностной составляющей, начиная от точки (x,y) в формате 4:4:4, относящейся к верхнему-левому углу изображения, и блочного вектора (BVx, BVy), этот блочный вектор является недействительным, когда функция isRec(c, (x+BVx+128, y+BVy) является истинной, где c обозначает цветностную составляющую.

5.10 Вариант #10

Для единицы CU яркостной составляющей или объединенной единицы CU яркостной/цветностной составляющей, начиная с точки (x,y), относящейся к верхнему-левому углу изображения, и блочного вектора (BVx, BVy), этот блочный вектор является недействительным, когда функция isRec(((x+BVx)>>6<<6)+128-(((y+BVy)>>6)&1)*64+(x%64), ((y+BVy)>>6<<6) +(y%64)) является истинной.

Для блока или субблока цветностной составляющей, начиная от точки (x,y) в формате 4:2:0, относящейся к верхнему-левому углу изображения, и блочного вектора (BVx, BVy), этот блочный вектор является недействительным, когда функция isRec(c, ((x+BVx)>>5<<5)+64-(((y+BVy)>>5)&1)*32+(x%32), ((y+BVy)>>5<<5) +(y%32)) является истинной, где c обозначает цветностную составляющую.

5.11 Вариант #11

Этот вариант сосредоточен на реализации, поддерживающей две самые последние кодированные единицы VPDU в 1-ой строке единиц VPDU и одну из самых последних кодированных единиц VPDU 2-ой строке единиц VPDU из строки единиц/блоков CTU/CTB, исключая текущую единицу VPDU.

Когда кодирование единиц VPDU осуществляется в порядке сверху вниз и слева направо, опорная область иллюстрирована на фиг. 13.

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

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

Имея блок яркостной составляющей (x, y) размером wxh, можно сообщить, является блочный вектор (BVx, BVy) действительным или нет, путем проверки следующего условия:

Функция isRec(((x+BVx+128)>>6<<6) – (refy&0x40) + (x%64), ((y+BVy)>>6<<6) + (refy>>6 == y>>6)?(y%64):0), где refy = (y&0x40) ? (y+BVy) : (y+BVy+w-1).

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

5.12 Вариант #12

Если единица CTU имеет размер 192x128, поддерживают виртуальный буфер размером 192x128 для отслеживания опорных отсчетов для режима с копированием IBC.

Отсчет (x, y) относительно верхнего-левого угла изображения ассоциирован с позицией (x%192, y%128) относительно верхнего-левого угла буфера. Следующие этапы показывают, как маркировать доступность отсчетов, ассоциированных с виртуальным буфером для опорной области для режима с копированием IBC.

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

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

2. В начале декодирования 1-ой единицы CU из единицы VPDU, позиции (x, y) с x = (xPrevVPDU - 2WVPDU+ 2mWVPDU)%(mWVPDU), .., ((xPrevVPDU - 2WVPDU+ 2mWVPDU)% (mWVPDU))-1+WVPDU; и y = yPrevVPDU%(nHVPDU), .., (yPrevVPDU%(nHVPDU))-1+HVPDU могут быть маркированы как недоступные. Тогда (xPrevVPDU, yPrevVPDU) устанавливают как (xCU, yCU), т.е. верхней левой позиции указанной единицы CU относительно изображения.

3. После декодирования единицы CU, позиции (x, y) с x = xCU%(mWVPDU), ..., (xCU+CU_width-1)%(mWVPDU) и y = yCU%(nHVPDU),…,(yCU+CU_height-1)%(nHVPDU) маркируют как недоступные.

4. Для единицы CU, кодируемой в режиме с копированием IBC, с блочным вектором (xBV, yBV), если какую-либо позицию (x, y) с x = (xCU+xBV)%(mWVPDU), ..., (xCU+xBV+CU_width-1)%(mWVPDU) и y = (yCU+yBV)%(nHVPDU),…,(yCU+yBV+CU_height-1)%(nHVPDU) маркируют как недоступную, блочный вектор считается недействительным.

На фиг. 16 показан статус буфера вместе со статусом декодирования единиц VPDU в изображении.

5.13 Вариант #13

Если размер единицы CTU равен 128x128 или размер единицы CTU больше заданного размера единицы VPDU (например, 64x64 в текущем варианте способа) или размер единицы CTU больше размера единицы VPDU (например, 64x64 в сегодняшнем варианте), поддерживают виртуальный буфер размером 192x128 для отслеживания опорных отсчетов для режима с копированием IBC. В последующем, когда a < 0, (a % b) определено как функция floor(a/b)*b, где результатом функции floor(c) является наибольшим целым числом не больше c.

Отсчет (x, y) относительно верхнего-левого угла изображения ассоциирован с позицией (x%192, y%128) относительно верхнего-левого угла буфера. Следующие этапы показывают, как маркировать доступность отсчетов, ассоциированных с виртуальным буфером для опорной области режима с копированием IBC.

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

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

2. В начале декодирования 1-ой единицы CU из единицы VPDU,

- Если параметр yPrevVPDU%64 равен 0, позиции (x, y) с x = (xPrevVPDU – 128)%192, .., ((xPrevVPDU – 128)%192) + 63; и y = yPrevVPDU%128, .., (yPrevVPDU%128)+63, маркируют как недоступные. Тогда (xPrevVPDU, yPrevVPDU) устанавливают как (xCU, yCU), т.е. верхняя-левая позиция единицы CU относительно изображения.

- В противном случае, позиции (x, y) с x = (xPrevVPDU – 64)%192, .., ((xPrevVPDU – 64)%192) + 63; и y = yPrevVPDU%128, .., (yPrevVPDU%128)+63, маркируют как недоступные. Тогда (xPrevVPDU, yPrevVPDU) устанавливают как (xCU, yCU), т.е. верхняя-левая позиция единицы CU относительно изображения.

5. После декодирования единицы CU, позиции (x, y) с x = xCU%192, ..., (xCU+CU_width-1)%192 и y = yCU%128,…,(yCU+CU_height-1)%128 маркируют как недоступные.

6. Для единицы CU, кодируемой в режиме с копированием IBC, с блочным вектором (xBV, yBV), если какую-либо позицию (x, y) с x = (xCU+xBV)%192, ..., (xCU+xBV+CU_width-1)%192 и y = (yCU+yBV)%128,…,(yCU+yBV+CU_height-1)%128 маркируют как недоступную, блочный вектор считается недействительным.

Если размер единицы CTU равен SxS, S не равно 128, пусть Wbuf будет равно 128*128/S. Тогда поддерживают виртуальный буфер размером WbufxS для отслеживания опорных отсчетов для режима с копированием IBC. Размер единицы VPDU в таком случае равен размеру единицы CTU.

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

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

2. В начале декодирования 1-ой единицы CU из единицы VPDU, позиции (x, y) с x = (xPrevVPDU – Wbuf*S)%S, .., ((xPrevVPDU – Wbuf*S)%S) + S - 1; и y = yPrevVPDU%S, .., (yPrevVPDU%S) + S -1; маркируют как недоступные. Тогда (xPrevVPDU, yPrevVPDU) устанавливают как (xCU, yCU), т.е. верхняя-левая позиция единицы CU относительно изображения.

3. После декодирования единицы CU, позиции (x, y) с x = xCU%(Wbuf), ..., (xCU+CU_width-1)%(Wbuf) и y = yCU%S,…,(yCU+CU_height-1)%S маркируют как доступные.

4. Для единицы CU, кодируемой в режиме с копированием IBC, с блочным вектором (xBV, yBV), если какую-либо позицию (x, y) с x = (xCU+xBV)%(Wbuf), ..., (xCU+xBV+CU_width-1)%(Wbuf) и y = (yCU+yBV)%S,…,(yCU+yBV+CU_height-1)%S маркируют как недоступную, блочный вектор считается недействительным.

5.14 Вариант #14

Если размер единицы CTU равен 128x128 или размер единицы CTU больше размера единицы VPDU (например, 64x64 в сегодняшнем варианте) или размер единицы CTU больше размера единицы VPDU (например, 64x64 в сегодняшнем варианте), тогда поддерживают виртуальный буфер размером 256x128 для отслеживания опорных отсчетов для режима с копированием IBC. В последующем, когда a < 0, (a % b) определено как функция floor(a/b)*b, где результат функции floor(c) является наибольшим целым числом не больше c.

Отсчет (x, y) относительно верхнего-левого угла изображения ассоциирован с позицией (x%256, y%128) относительно верхнего-левого угла буфера. Следующие этапы показывают, как маркировать доступность отсчетов, ассоциированных с виртуальным буфером для опорной области режима с копированием IBC.

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

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

2. В начале декодирования 1-ой единицы CU из единицы VPDU,

- Если yPrevVPDU%64 равно 0, позиции (x, y) с x = (xPrevVPDU – 128)%256, .., ((xPrevVPDU – 128)% 256) + 63; и y = yPrevVPDU%128, .., (yPrevVPDU%128)+63, маркируют как недоступные. Тогда (xPrevVPDU, yPrevVPDU) устанавливают как (xCU, yCU), т.е. верхняя-левая позиция единицы CU относительно изображения.

- В противном случае, позиции (x, y) с x = (xPrevVPDU – 64)% 256, .., ((xPrevVPDU – 64)% 256) + 63; и y = yPrevVPDU%128, .., (yPrevVPDU%128)+63, маркируют как недоступные. Тогда (xPrevVPDU, yPrevVPDU) устанавливают как (xCU, yCU), т.е. верхняя-левая позиция единицы CU относительно изображения.

5. После декодирования единицы CU, позиции (x, y) с x = xCU%256, ..., (xCU+CU_width-1)%256 и y = yCU%128,…,(yCU+CU_height-1)%128 маркируют как доступные.

6. Для единицы CU, кодируемой в режиме с копированием IBC, с блочным вектором (xBV, yBV), если какую-либо позицию (x, y) с x = (xCU+xBV)%256, ..., (xCU+xBV+CU_width-1)%256 и y = (yCU+yBV)%128,…,(yCU+yBV+CU_height-1)%128 маркируют как недоступную, блочный вектор считается недействительным.

Когда размер единицы CTU не равен 128x128 или меньше 64x64 или меньше 64x64, применяют такую же процедуру, как в предшествующем варианте, т.е. варианте #14.

5.15 Вариант #15

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

7.3.7.1 Общий синтаксис среза данных

slice_data( ) { Дескриптор for( i = 0; i < NumBricksInCurrSlice; i++ ) { CtbAddrInBs = FirstCtbAddrBs[ SliceBrickIdx[ i ] ] for( j = 0; j < NumCtusInBrick[ SliceBrickIdx[ i ] ]; j++, CtbAddrInBs++ ) { if( ( j % BrickWidth[ SliceBrickIdx[ i ] ] ) = = 0 ) { NumHmvpCand = 0 NumHmvpIbcCand = 0 xPrevVPDU = 0 yPrevVPDU = 0 if( CtbSizeY == 128 ) reset_ibc_isDecoded(0, 0, 256, CtbSizeY, BufWidth, BufHeight) else reset_ibc_isDecoded(0, 0, 128*128/CtbSizeY, CtbSizeY, BufWidth, BufHeight) } CtbAddrInRs = CtbAddrBsToRs[ CtbAddrInBs ] …… reset_ibc_isDecoded(x0, y0, w, h, BufWidth, BufHeight) { Дескриптор if( x0 >= 0) for (x = x0 % BufWidth; x < x0 + w; x+=4) for (y = y0 % BufHeight; y < y0 + h; y+=4) isDecoded[ x >> 2 ][ y >> 2 ] = 0 }

Параметр BufWidth равен (CtbSizeY==128)?256:(128*128/CtbSizeY) и параметр BufHeight равен CtbSizeY.

7.3.7.5 Синтаксис единицы кодирования

coding_unit( x0, y0, cbWidth, cbHeight, treeType ) { Дескриптор if( treeType != DUAL_TREE_CHROMA && ( CtbSizeY = = 128 ) && (x0 % 64) = = 0 && (y0 % 64) = = 0 ) { for( x = x0; x < x0 + cbWidth; x += 64 ) for( y = y0; y < y0 + cbHeight; y += 64 ) if( ( yPrevVPDU % 64 ) = = 0 ) reset_ibc_isDecoded(xPrevVPDU – 128, yPrevVPDU, 64, 64, BufWidth, BufHeight) else reset_ibc_isDecoded(xPrevVPDU – 64, yPrevVPDU, 64, 64, BufWidth, BufHeight) xPrevVPDU = x0 yPrevVPDU = y0 } if( treeType != DUAL_TREE_CHROMA && ( CtbSizeY < 128 ) && (x0 % CtbSizeY) = = 0 && (y0 % CtbSizeY) = = 0 ) { reset_ibc_isDecoded(xPrevVPDU – (128*128/CtbSizeY – CtbSizeY), yPrevVPDU, 64, 64, BufWidth, BufHeight) xPrevVPDU = x0 yPrevVPDU = y0 } if( slice_type != I | | sps_ibc_enabled_flag ) { if( treeType != DUAL_TREE_CHROMA &&
!( cbWidth = = 4 && cbHeight = = 4 && !sps_ibc_enabled_flag ) )
cu_skip_flag[ x0 ][ y0 ] ae(v) if( cu_skip_flag[ x0 ][ y0 ] = = 0 && slice_type != I
&& !( cbWidth = = 4 && cbHeight = = 4 ) )
pred_mode_flag ae(v) if( ( ( slice_type = = I && cu_skip_flag[ x0 ][ y0 ] = =0 ) | |
( slice_type != I && ( CuPredMode[ x0 ][ y0 ] != MODE_INTRA | |
( cbWidth = = 4 && cbHeight = = 4 && cu_skip_flag[ x0 ][ y0 ] = = 0 ) ) ) ) &&
sps_ibc_enabled_flag && ( cbWidth != 128 && cbHeight != 128 ) )
pred_mode_ibc_flag ae(v) }

8.6.2 Процедура получения компонентов вектора движения для блоков в режиме с копированием IBC

8.6.2.1 Общие положения

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

8.6.3 Процедура декодирования для блоков, кодированных в режиме с копированием ibc

8.6.3.1 Общие положения

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

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

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

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

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

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

- векторы движения mv[ xSbIdx ][ ySbIdx ] при xSbIdx = 0 .. numSbX − 1, и ySbIdx = 0 .. numSbY − 1,

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

- массив ibcBuf размсером (nIbcBufW)x(ctbSize)

Для каждого субблока кодирования с индексом субблока ( xSbIdx, ySbIdx ) при xSbIdx = 0 .. numSbX − 1, и ySbIdx = 0 .. numSbY − 1, применяется следующее:

- Ппозицию яркостной составляющей ( xSb, ySb ), специфицирующую верхний-евый отсчет текущего субблока кодирования относительно верхнего-левого отсчета яркостной составляющей в текущем изображении, определяют следующим образом:

( xSb, ySb ) = ( xCb + xSbIdx * sbWidth, yCb + ySbIdx * sbHeight ) (8-913)

Если параметр cIdx параметр 0, параметр nIbcBufW устанавливают равным ibcBufferWidth, иначе параметр nIbcBufW устанавливают равным ( ibcBufferWidth / SubWidthC ). Применяется следующее:

predSamples[ xSb + x ][ ySb + y ] = ibcBuf [ ( xSb + x + (mv[ xSb ][ ySb ][ 0 ] >> 4 )) % nIbcRefW ][ ySb + y + (mv[ xSb ][ ySb ][ 1 ] >> 4) ]

при x = 0..sbWidth − 1 и y = 0..sbHeight – 1.

8.6.3.2 Процедура проверки действительности блочного вектора

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

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

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

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

- переменные numSbX и numSbY, специфицирующие число субблоков кодирования яркостной составляющей в горизонтальном и вертикальном направлении,

- блочные векторы mv[ xSbIdx ][ ySbIdx ] при xSbIdx = 0 .. numSbX − 1, и ySbIdx = 0 .. numSbY − 1,

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

- массив ibcBuf размером (nIbcBufW)x(ctbSize)

Выходными данными этой процедуры является флаг isBVvalid для индикации, является ли блочный вектор действительным или нет.

Применяется следующее

1. Флаг isBVvalid устанавливают на значение «истинно».

2. Если ( ( yCb & ( ctbSize – 1 ) ) + mv[ 0 ][ 0 ][ 1 ] + cbHeight ) > ctbSize, флаг isBVvalid устанавливают на значение «ложно».

3. В противном случае, для каждого индекса xSbIdx, ySbIdx субблока при xSbIdx = 0 .. numSbX − 1, и ySbIdx = 0 .. numSbY – 1, определяют положение этого субблока относительно верхнего-левого отсчета яркостной составляющей блока ibcBuf:

xTL = ( xCb + xSbIdx * sbWidth + mv[ xSbIdx ][ ySbIdx ][ 0 ] ) & ( nIbcBufW – 1 )

yTL = ( yCb & ( ctbSize – 1 ) ) + ySbIdx * sbHeight + mv[ xSbIdx ][ ySbIdx ][ 1 ]

xBR = ( xCb + xSbIdx * sbWidth + sbWidth – 1 + mv[ xSbIdx ][ ySbIdx ][ 0 ] ) & ( nIbcBufW – 1 )

yBR = ( yCb & ( ctbSize – 1 ) ) + ySbIdx * sbHeight + sbHeight – 1 + mv[ xSbIdx ][ ySbIdx ][ 1 ]

если (isDecoded[ xTL>>2 ][ yTL>>2 ] == 0) или (isDecoded[ xBR>>2 ][ yTL>>2 ] == 0) или (isDecoded[ xBR>>2 ][ yBR>>2 ] == 0), флаг isBVvalid устанавливают на значение «ложно».

8.7.5 Процедура реконструкции изображения

8.7.5.1 Общие положения

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

- позиция ( xCurr, yCurr ), специфицирующая верхний-левый отсчет текущего блока относительно верхнего-левого составляющей текущего изображения,

- переменные nCurrSw и nCurrSh, специфицирующие ширину и высоту, соответственно, текущего блока,

- переменная cIdx, специфицирующая цветовую составляющую текущего блока,

- массив predSamples размером (nCurrSw) x (nCurrSh), специфицирующий прогнозируемые отсчеты текущего блока,

- массив resSamples размером (nCurrSw) x (nCurrSh), специфицирующий отсчеты остатка текущего блока.

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

- массив recSamples реконструированных отсчетов изображения.

- массив ibcBuf опоры для режима с копированием IBC.

Обозначив nIbcBufW в качестве ширины массива ibcBuf, применяется следующее:

ibcBuf[ ( xCurr + i ) & ( nIbcBufW – 1 ) ][ ( yCurr + j ) & ( ctbSize – 1 ) ] = recSamples[ xCurr + i ][ yCurr + j ]

при i = 0..nCurrSw − 1, j = 0..nCurrSh – 1.

5.16 Вариант #16

Это идентично предшествующему варианту за исключением следующих изменений

slice_data( ) { Дескриптор for( i = 0; i < NumBricksInCurrSlice; i++ ) { CtbAddrInBs = FirstCtbAddrBs[ SliceBrickIdx[ i ] ] for( j = 0; j < NumCtusInBrick[ SliceBrickIdx[ i ] ]; j++, CtbAddrInBs++ ) { if( ( j % BrickWidth[ SliceBrickIdx[ i ] ] ) = = 0 ) { NumHmvpCand = 0 NumHmvpIbcCand = 0 xPrevVPDU = 0 yPrevVPDU = 0 if( CtbSizeY == 128 ) reset_ibc_isDecoded(0, 0, 192, CtbSizeY, BufWidth, BufHeight) else reset_ibc_isDecoded(0, 0, 128*128/CtbSizeY, CtbSizeY, BufWidth, BufHeight) } CtbAddrInRs = CtbAddrBsToRs[ CtbAddrInBs ] …… reset_ibc_isDecoded(x0, y0, w, h, BufWidth, BufHeight) { Дескриптор if( x0 >= 0) for (x = x0 % BufWidth; x < x0 + w; x+=4) for (y = y0 % BufHeight; y < y0 + h; y+=4) isDecoded[ x >> 2 ][ y >> 2 ] = 0 }

Параметр BufWidth равен (CtbSizeY==128)?192:(128*128/CtbSizeY) и параметр BufHeight равен CtbSizeY.

5.17 Вариант #17

Изменения в некоторых примерах обозначены в настоящем документе жирным текстом с подчеркиванием.

7.3.7 Синтаксис среза данных

7.3.7.1 Общий синтаксис среза данных

slice_data( ) { Descriptor for( i = 0; i < NumBricksInCurrSlice; i++ ) { CtbAddrInBs = FirstCtbAddrBs[ SliceBrickIdx[ i ] ] for( j = 0; j < NumCtusInBrick[ SliceBrickIdx[ i ] ]; j++, CtbAddrInBs++ ) { if( ( j % BrickWidth[ SliceBrickIdx[ i ] ] ) = = 0 ) { NumHmvpCand = 0 NumHmvpIbcCand = 0 resetIbcBuf = 1 } CtbAddrInRs = CtbAddrBsToRs[ CtbAddrInBs ] coding_tree_unit( ) if( entropy_coding_sync_enabled_flag &&
( ( j + 1 ) % BrickWidth[ SliceBrickIdx[ i ] ] = = 0 ) ) {
end_of_subset_one_bit /* equal to 1 */ ae(v) if( j < NumCtusInBrick[ SliceBrickIdx[ i ] ] − 1 ) byte_alignment( ) } } if( !entropy_coding_sync_enabled_flag ) { end_of_brick_one_bit /* equal to 1 */ ae(v) if( i < NumBricksInCurrSlice − 1 ) byte_alignment( ) } } }

7.4.8.5 Семантика единицы кодирования

Когда все следующие условия являются истинными, основанный на предыстории список предикторов векторов движения для области совместно используемого списка объединяемых кандидатов обновляют путем установления параметра NumHmvpSmrIbcCand равным параметру NumHmvpIbcCand, и установления параметра HmvpSmrIbcCandList[ i ] равным параметру HmvpIbcCandList[ i ] для i = 0..NumHmvpIbcCand − 1:

- IsInSmr[ x0 ][ y0 ] равно «Истинно» (TRUE).

- SmrX[ x0 ][ y0 ] равно x0.

- SmrY[ x0 ][ y0 ] раввно y0.

Следующие назначения сделаны для x = x0..x0 + cbWidth − 1 и y = y0..y0 + cbHeight − 1:

CbPosX[ x ][ y ] = x0 (7-135)

CbPosY[ x ][ y ] = y0 (7-136)

CbWidth[ x ][ y ] = cbWidth (7-137)

CbHeight[ x ][ y ] = cbHeight (7-138)

Установление параметра vSize как min( ctbSize, 64 ) и параметра wIbcBuf как (128*128/ctbSize). Ширина и высота массива ibcBuf равны wIbcBuf и ctbSize соответственно.

Если параметр refreshIbcBuf равен 1, применяется следующее

- ibcBuf[ x % wIbcBuf ][ y % ctbSize ] = − 1, для x = x0..x0 + wIbcBuf − 1 и y = y0..y0 + ctbSize – 1

- resetIbcBuf = 0

Когда ( x0 % vSize ) равно 0 и ( y0 % vSize ) равно 0, для x = x0..x0 + vSize − 1 и y = y0..y0 + vSize – 1, применяется следующее

ibcBuf[ x % wIbcBuf ][ y % ctbSize ] = − 1

8.6.2 Процедура определения компонентов векторов движения для блоков в режиме с копированием IBC

8.6.2.1 Общие положения

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

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

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

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

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

- вектор mvL движения яркостной составляющей с точностью в 1/16 долю отсчета.

Этот вектор mvL движения яркостной составляющей получают следующим образом:

- Процедуру прогнозирования вектора движения яркостной составляющей в режиме с копированием IBC, как это специфицировано в статье 8.6.2.2, привлекают с использованием позиции яркостной составляющей ( xCb, yCb ), переменных cbWidth и cbHeight в качестве входных данных, а выходными данными является вектор mvL движения яркостной составляющей.

- Когда флаг general_merge_flag[ xCb ][ yCb ] равен 0, применяется следующее:

1. Переменную mvd определяют следующим образом:

mvd[ 0 ] = MvdL0[ xCb ][ yCb ][ 0 ] (8-883)

mvd[ 1 ] = MvdL0[ xCb ][ yCb ][ 1 ] (8-884)

2. Процедуру округления для векторов движения, как это специфицировано в статье 8.5.2.14, привлекают при mvX установленном равным mvL, rightShift установленном равным MvShift + 2, и leftShift установленном равным MvShift + 2 в качестве входных данных, и округленном векторе mvL в качестве выходных данных.

3. Вектор mvL движения яркостной составляющей модифицируют следующим образом:

u[ 0 ] = ( mvL[ 0 ] + mvd[ 0 ] + 218 ) % 218 (8-885)

mvL[ 0 ] = ( u[ 0 ] >= 217 ) ? ( u[ 0 ] − 218 ) : u[ 0 ] (8-886)

u[ 1 ] = ( mvL[ 1 ] + mvd[ 1 ] + 218 ) % 218 (8-887)

mvL[ 1 ] = ( u[ 1 ] >= 217 ) ? ( u[ 1 ] − 218 ) : u[ 1 ] (8-888)

ПРИМЕЧАНИЕ 1– Результирующие значения векторов mvL[ 0 ] и mvL[ 1 ], как это специфицировано выше, всегда будут в диапазоне от −217 до 217 − 1, включительно.

Процедуру обновления основанного на предыстории списка предикторов векторов движения, как это специфицировано в статье 8.6.2.6, привлекают для вектора mvL движения яркостной составляющей.

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

- ((yCb + ( mvL[ 1 ] >> 4 ) ) % wIbcBuf ) + cbHeight не больше ctbSize

- Для x = xCb..xCb + cbWidth − 1 и y = yCb..yCb + cbHeight – 1, ibcBuf[ ( x + (mvL[0]>>4) ) % wIbcBuf ][ ( y + (mvL[1]>>4)) % ctbSize ] не должно быть равно −1.

8.7.5 Процедура реконструкции изображения

8.7.5.1 Общие положения

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

- позиция ( xCurr, yCurr ), специфицирующая верхний-левый отсчет текущего блока относительно верхнего-левого отсчета составляющей текущего изображения,

- переменные nCurrSw и nCurrSh, специфицирующи ширину и высоту, соответственно, текущего блока,

- переменная cIdx, специфицирующая цветовую составляющую текущего блока,

- массив predSamples размером (nCurrSw) x (nCurrSh), специфицирующий прогнозируемые отсчеты текущего блока,

- массив resSamples размером (nCurrSw) x (nCurrSh), специфицирующий отсчеты остатка для текущего блока.

Выходными данными этой процедуры являются массив recSamples реконструированных отсчетов и массив ibcBuf в буфере режима с копированием IBC.

В зависимости от значения cIdx для цветовой составляющей, делают следующие назначения:

- Если параметр cIdx равен 0, массив recSamples соответствует массиву SL реконструированных отсчетов изображения и функция clipCidx1 соответствует Clip1Y.

- В противном случае, если параметр cIdx равен 1, параметр tuCbfChroma устанавливают равным tu_cbf_cb[ xCurr ][ yCurr ], массив recSamples соответствует массиву SCb реконструированных отсчетов цветностной составляющей и функция clipCidx1 соответствует Clip1C.

- В противном случае (параметр cIdx равен 2), параметр tuCbfChroma устанавливают равным tu_cbf_cr[ xCurr ][ yCurr ], массив recSamples соответствует массиву SCr реконструированных отсчетов цветностной составляющей и функция clipCidx1 соответствует Clip1C.

В зависимости от значения флага slice_lmcs_enabled_flag, применяется следующее

- Если флаг slice_lmcs_enabled_flag равен 0, блок recSamples реконструированных отсчетов размером (nCurrSw)x(nCurrSh) в позиции ( xCurr, yCurr ) определяют следующим образом

для i = 0..nCurrSw − 1, j = 0..nCurrSh − 1:

recSamples[ xCurr + i ][ yCurr + j ] = clipCidx1( predSamples[ i ][ j ] + resSamples[ i ][ j ] ) (8-992)

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

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

- Процедуру реконструкции изображения с отображением отсчетов яркостной составляющей, как это специфицировано в статье 8.7.5.2, привлекают в позиции ( xCurr, yCurr ) яркостной составляющей, входными данными являются ширина nCurrSw и высота nCurrSh блока, массив predSamples прогнозируемых отсчетов яркостной составляющей и массив resSamples отсчетов остатка яркостной составляющей, а выходными данными является массив resSamples реконструированных отсчетов яркостной составляющей.

- В противном случае (параметр cIdx больше 0), процедуру реконструкции изображения с процедурой зависящего от яркостной составляющей масштабирования остатка цветностной составляющей применительно к отсчетам цветностной составляющей, как это специфицировано в статье 8.7.5.3, привлекают в позиции ( xCurr, yCurr ) цветностной составляющей, входными данными являются ширина nCurrSw и высота nCurrSh блока преобразования, флаг кодированного блока для текущего блока tuCbfChroma преобразования цветностной составляющей, массив predSamples прогнозируемых отсчетов цветностной составляющей и массив resSamples отсчетов остатка цветностной составляющей, а выходными данными является массив recSamples реконструированных отсчетов цветностной составляющей.

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

ibcBuf[ ( xCurr + i ) % wIbcBuf ][ ( yCurr + j ) % ctbSize ] = recSamples[ xCurr + i ][ yCurr + j ]

для i = 0..nCurrSw − 1, j = 0..nCurrSh – 1.

5.18 Вариант #18

Изменения в некоторых примерах обозначены в настоящем документе жирным курсивом с подчеркиванием.

7.3.7 Синтаксис данных среза

7.3.7.1 Общий синтаксис данных среза

slice_data( ) { Descriptor for( i = 0; i < NumBricksInCurrSlice; i++ ) { CtbAddrInBs = FirstCtbAddrBs[ SliceBrickIdx[ i ] ] for( j = 0; j < NumCtusInBrick[ SliceBrickIdx[ i ] ]; j++, CtbAddrInBs++ ) { if( ( j % BrickWidth[ SliceBrickIdx[ i ] ] ) = = 0 ) { NumHmvpCand = 0 NumHmvpIbcCand = 0 resetIbcBuf = 1 } CtbAddrInRs = CtbAddrBsToRs[ CtbAddrInBs ] coding_tree_unit( ) if( entropy_coding_sync_enabled_flag &&
( ( j + 1 ) % BrickWidth[ SliceBrickIdx[ i ] ] = = 0 ) ) {
end_of_subset_one_bit /* equal to 1 */ ae(v) if( j < NumCtusInBrick[ SliceBrickIdx[ i ] ] − 1 ) byte_alignment( ) } } if( !entropy_coding_sync_enabled_flag ) { end_of_brick_one_bit /* equal to 1 */ ae(v) if( i < NumBricksInCurrSlice − 1 ) byte_alignment( ) } } }

7.4.8.5 Семантика единицы кодирования

Когда все следующие условия являются истинными, основанный на предыстории список предикторов векторов движения для области совместно используемого списка объединяемых кандидатов обновляют путем установления параметра NumHmvpSmrIbcCand равным параметру NumHmvpIbcCand, и установления параметра HmvpSmrIbcCandList[ i ] равным параметру HmvpIbcCandList[ i ] для i = 0..NumHmvpIbcCand − 1:

- IsInSmr[ x0 ][ y0 ] равно «Истинно» (TRUE).

- SmrX[ x0 ][ y0 ] равно x0.

- SmrY[ x0 ][ y0 ] равнол y0.

Следующие назначения делают для x = x0..x0 + cbWidth − 1 и y = y0..y0 + cbHeight − 1:

CbPosX[ x ][ y ] = x0 (7-135)

CbPosY[ x ][ y ] = y0 (7-136)

CbWidth[ x ][ y ] = cbWidth (7-137)

CbHeight[ x ][ y ] = cbHeight (7-138)

Установления параметра vSize как min( ctbSize, 64 ) и параметра wIbcBufY как (128*128/CtbSizeY).

ibcBufL представляет собой массив шириной wIbcBufY и высотой CtbSizeY.

ibcBufCb and ibcBufCr представляют собой массивы с шириной wIbcBufC =(wIbcBufY/SubWidthC) и высотой (CtbSizeY/SubHeightC), т.е. CtbSizeC.

Если параметр resetIbcBuf равен 1, применяется следующее

- ibcBufL[ x % wIbcBufY ][ y % CtbSizeY ] = − 1, для x = x0..x0 + wIbcBufY − 1 и y = y0..y0 + CtbSizeY – 1

- ibcBufCb[ x % wIbcBufC ][ y % CtbSizeC ] = − 1, для x = x0..x0 + wIbcBufC − 1 и y = y0..y0 + CtbSizeC – 1

- ibcBufCr[ x % wIbcBufC ][ y % CtbSizeC ] = − 1, для x = x0..x0 + wIbcBufC − 1 и y = y0..y0 + CtbSizeC – 1

- resetIbcBuf = 0

Когда ( x0 % vSizeY ) равно 0 и ( y0 % vSizeY ) равно 0, применяется следующее

- ibcBufL[ x % wIbcBufY ][ y % CtbSizeY ] = − 1, для x = x0..x0 + vSize − 1 и y = y0..y0 + vSize – 1

- ibcBufCb[ x % wIbcBufC ][ y % CtbSizeC ] = − 1, для x = x0/SubWidthC..x0/ SubWidthC + vSize/ SubWidthC − 1 и y = y0/SubHeightC..y0/SubHeightC + vSize/SubHeightC – 1

- ibcBufCr[ x % wIbcBufC ][ y % CtbSizeC ] = − 1, для x = x0/SubWidthC..x0/ SubWidthC + vSize/ SubWidthC − 1 и y = y0/SubHeightC..y0/SubHeightC + vSize/SubHeightC – 1

8.6.2 Процедура получения компонентов вектора движения для блоков в режиме с копированием IBC

8.6.2.1 Общие положения

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

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

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

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

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

- вектор mvL движения яркостной составляющей с точностью в 1/16 долю отсчета.

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

- Процедуру прогнозирования вектора движения яркостной составляющей в режиме с копированием IBC, как это специцировано в статье 8.6.2.2, привлекают с позиции ( xCb, yCb ) яркостной составляющей, входными данными для этого являются переменные cbWidth и cbHeight, а выходными данными является вектор mvL движения яркостной составляющей.

- Когда флаг general_merge_flag[ xCb ][ yCb ] равен 0, применяется следующее:

1. Переменную mvd определяют следующим образом:

mvd[ 0 ] = MvdL0[ xCb ][ yCb ][ 0 ] (8-883)

mvd[ 1 ] = MvdL0[ xCb ][ yCb ][ 1 ] (8-884)

2. Процедуру округления для векторов движения, как это специфицировано в статье 8.5.2.14, привлекают при mvX установленном равным mvL, rightShift установленном равным MvShift + 2, и leftShift установленном равным MvShift + 2 в качестве входных данных, и округленном векторе mvL в качестве выходных данных.

3. Вектор mvL движения яркостной составляющей модифицируют следующим образом:

u[ 0 ] = ( mvL[ 0 ] + mvd[ 0 ] + 218 ) % 218 (8-885)

mvL[ 0 ] = ( u[ 0 ] >= 217 ) ? ( u[ 0 ] − 218 ) : u[ 0 ] (8-886)

u[ 1 ] = ( mvL[ 1 ] + mvd[ 1 ] + 218 ) % 218 (8-887)

mvL[ 1 ] = ( u[ 1 ] >= 217 ) ? ( u[ 1 ] − 218 ) : u[ 1 ] (8-888)

ПРИМЕЧАНИЕ 1– Результирующие значения векторов mvL[ 0 ] и mvL[ 1 ], как это специфицировано выше, всегда будут в диапазоне от −217 до 217 − 1, включительно.

Процедуру обновления основанного на предыстории списка предикторов векторов движения, как это специфицировано в статье 8.6.2.6, привлекают для вектора mvL движения яркостной составляющей.

Статью 8.6.2.5 привлекают при векторе mvL в качестве входных данных и mvC в качестве выходных данных.

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

- ((yCb + ( mvL[ 1 ] >> 4 ) ) % CtbSizeY ) + cbHeight не меньше CtbSizeY

- Для x = xCb..xCb + cbWidth − 1 и y = yCb..yCb + cbHeight – 1, ibcBufL[ (x + (mvL[0]>>4)) % wIbcBufY ][ ( y +(mvL[1]>>4)) % CtbSizeY ] должно быть не равно −1.

- Если параметр treeType равен SINGLE_TREE, для x = xCb..xCb + cbWidth − 1 и y = yCb..yCb + cbHeight – 1, ibcBufCb[ (x + (mvC[0]>>5)) % wIbcBufC ][ ( y +(mvC[1]>>5)) % CtbSizeC] ] должно быть не равно −1.

8.6.3 Процедура декодирования для блоков, кодированных в режиме с копированием ibc

8.6.3.1 Общие положение

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

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

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

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

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

- индекс цветовой составляющей для текущего блока.

- вектор mv движения,

- массив ibcBufL размером (wIbcBufY)x(CtbSizeY), массив ibcBufCb размером (wIbcBufC)x(CtbSizeC), массив ibcBufCr размером (wIbcBufC)x(CtbSizeC).

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

- массив predSamples прогнозируемых отсчетов.

Для x = xCb.. xCb+ Width − 1 и y = yCb..yCb + Height − 1, применяется следующее

Если cIdx равно 0

predSamples[ x ][ y ] = ibcBufL[ ( x + mv[ 0 ] >> 4 )) % wIbcBufY ][ ( y + (mv[ 1 ] >> 4)) % CtbSizeY ]

если cIdx равно 1

predSamples[ x ][ y ] = ibcBufCb[ ( x + mv[ 0 ] >> 5 )) % wIbcBufC ][ ( y + (mv[ 1 ] >> 5)) % CtbSizeC ]

если cIdx равно2

predSamples[ x ][ y ] = ibcBufCr[ ( x + mv[ 0 ] >> 5 )) % wIbcBufC ][ ( y + (mv[ 1 ] >> 5)) % CtbSizeC ]

8.7.5 Процедура реконструкции изображения

8.7.5.1 Общие положения

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

- позиция ( xCurr, yCurr ), специфицирующая врехний-левый отсчет текущего блока относительно верхнего-левого отсчета компонента текущего изображения,

- переменные nCurrSw и nCurrSh, специфицирующие ширину и высоту, соответственно, текущего блока,

- переменная cIdx, специфицирующая цветовую составляющую текущего блока,

- массив predSamples размером (nCurrSw) x (nCurrSh), специфицирующий прогнозируемые отсчеты для текущего блока,

- массив resSamples размером (nCurrSw) x (nCurrSh), специфицирующий отсчеты остатка для для текущего блока.

Выходными данными этой процедуры являются массив recSamples реконструированных отсчетов и массивы ibcBufL, ibcBufCb, ibcBufCr в буфере режима с копированием IBC.

В зависимости от значения cIdx для цветовой составляющей, делают следующие назначения:

- Если параметр cIdx равен 0, массив recSamples соответствует массиву SL реконструированных отсчетов изображения и функция clipCidx1 соответствует Clip1Y.

- В противном случае, если параметр cIdx равен 1, параметр tuCbfChroma устанавливают равным tu_cbf_cb[ xCurr ][ yCurr ], массив recSamples соответствует массиву SCb реконструированных отсчетов цветностной составляющей и функция clipCidx1 соответствует Clip1C.

- В противном случае (параметр cIdx равен 2), параметр tuCbfChroma устанавливают равным tu_cbf_cr[ xCurr ][ yCurr ], массив recSamples соответствует массиву SCr реконструированных отсчетов цветностной составляющей и функция clipCidx1 соответствует Clip1C.

В зависимости от значения флага slice_lmcs_enabled_flag, применяется следующее:

- Если флаг slice_lmcs_enabled_flag равен 0, блок recSamples реконструированных отсчетов размером (nCurrSw)x(nCurrSh) в позиции ( xCurr, yCurr ) определяют следующим образом

для i = 0..nCurrSw − 1, j = 0..nCurrSh − 1:

recSamples[ xCurr + i ][ yCurr + j ] = clipCidx1( predSamples[ i ][ j ] + resSamples[ i ][ j ] ) (8-992)

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

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

- Процедуру реконструкции изображения с отображением отсчетов яркостной составляющей, как это специфицировано в статье 8.7.5.2, привлекают в позиции ( xCurr, yCurr ) яркостной составляющей, входными данными являются ширина nCurrSw и высота nCurrSh блока, массив predSamples прогнозируемых отсчетов яркостной составляющей и массив resSamples отсчетов остатка яркостной составляющей, а выходными данными является массив resSamples реконструированных отсчетов яркостной составляющей.

- В противном случае (параметр cIdx больше 0), процедуру реконструкции изображения с процедурой зависящего от яркостной составляющей масштабирования остатка цветностной составляющей применительно к отсчетам цветностной составляющей, как это специфицировано в статье 8.7.5.3, привлекают в позиции ( xCurr, yCurr ) цветностной составляющей, входными данными являются ширина nCurrSw и высота nCurrSh блока преобразования, флаг кодированного блока для текущего блока tuCbfChroma преобразования цветностной составляющей, массив predSamples прогнозируемых отсчетов цветностной составляющей и массив resSamples отсчетов остатка цветностной составляющей, а выходными данными является массив recSamples реконструированных отсчетов цветностной составляющей.

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

Если cIdx равно 0, и если treeType равно SINGLE_TREE или DUAL_TREE_LUMA, применяется следующее

ibcBufL[ ( xCurr + i ) % wIbcBufY ][ ( yCurr + j ) % CtbSizeY ] = recSamples[ xCurr + i ][ yCurr + j ]

для i = 0..nCurrSw − 1, j = 0..nCurrSh – 1.

Если cIdx равно 1, и если treeType равно SINGLE_TREE или DUAL_TREE_CHROMA, применяется следующее

ibcBufCb[ ( xCurr + i ) % wIbcBufC ][ ( yCurr + j ) % CtbSizeC ] = recSamples[ xCurr + i ][ yCurr + j ]

для i = 0..nCurrSw − 1, j = 0..nCurrSh – 1.

Если cIdx равно 2, и если treeType равно SINGLE_TREE или DUAL_TREE_CHROMA, применяется следующее

ibcBufCr[ ( xCurr + i ) % wIbcBufC ][ ( yCurr + j ) % CtbSizeC ] = recSamples[ xCurr + i ][ yCurr + j ]

для i = 0..nCurrSw − 1, j = 0..nCurrSh – 1.

5.19 Вариант #19

Изменения в некоторых примерах обозначены в настоящем документе жирным шрифтом с подчеркиванием.

7.3.7 Синтаксис данных среза

7.3.7.1 Общий синтаксис данных среза

slice_data( ) { Дескриптор for( i = 0; i < NumBricksInCurrSlice; i++ ) { CtbAddrInBs = FirstCtbAddrBs[ SliceBrickIdx[ i ] ] for( j = 0; j < NumCtusInBrick[ SliceBrickIdx[ i ] ]; j++, CtbAddrInBs++ ) { if( ( j % BrickWidth[ SliceBrickIdx[ i ] ] ) = = 0 ) { NumHmvpCand = 0 NumHmvpIbcCand = 0 resetIbcBuf = 1 } CtbAddrInRs = CtbAddrBsToRs[ CtbAddrInBs ] coding_tree_unit( ) if( entropy_coding_sync_enabled_flag &&
( ( j + 1 ) % BrickWidth[ SliceBrickIdx[ i ] ] = = 0 ) ) {
end_of_subset_one_bit /* equal to 1 */ ae(v) if( j < NumCtusInBrick[ SliceBrickIdx[ i ] ] − 1 ) byte_alignment( ) } } if( !entropy_coding_sync_enabled_flag ) { end_of_brick_one_bit /* equal to 1 */ ae(v) if( i < NumBricksInCurrSlice − 1 ) byte_alignment( ) } } }

7.4.8.5 Семантика единицы кодирования

Когда все следующие условия являются истинными, основанный на предыстории список предикторов векторов движения для области совместно используемого списка объединяемых кандидатов обновляют путем установления параметра NumHmvpSmrIbcCand равным параметру NumHmvpIbcCand, и установления параметра HmvpSmrIbcCandList[ i ] равным параметру HmvpIbcCandList[ i ] для i = 0..NumHmvpIbcCand − 1:

- IsInSmr[ x0 ][ y0 ] равно «Истинно» (TRUE).

- SmrX[ x0 ][ y0 ] равно x0.

- SmrY[ x0 ][ y0 ] равно y0.

Следующие назначения сделаны для x = x0..x0 + cbWidth − 1 и y = y0..y0 + cbHeight − 1:

CbPosX[ x ][ y ] = x0 (7-135)

CbPosY[ x ][ y ] = y0 (7-136)

CbWidth[ x ][ y ] = cbWidth (7-137)

CbHeight[ x ][ y ] = cbHeight (7-138)

Установление параметра vSize как min( ctbSize, 64 ) и параметра wIbcBufY как (128*128/CtbSizeY).

ibcBufL представляет собой массив с шириной wIbcBufY и высотой CtbSizeY.

ibcBufCb и ibcBufCr представляют собой массивы с шириной wIbcBufC =(wIbcBufY/SubWidthC) и высотой (CtbSizeY/SubHeightC), т.е. CtbSizeC.

Если параметр resetIbcBuf равен 1, применяется следующее

- ibcBufL[ x % wIbcBufY ][ y % CtbSizeY ] = − 1, для x = x0..x0 + wIbcBufY − 1 и y = y0..y0 + CtbSizeY – 1

- ibcBufCb[ x % wIbcBufC ][ y % CtbSizeC ] = − 1, для x = x0..x0 + wIbcBufC − 1 и y = y0..y0 + CtbSizeC – 1

- ibcBufCr[ x % wIbcBufC ][ y % CtbSizeC ] = − 1, для x = x0..x0 + wIbcBufC − 1 и y = y0..y0 + CtbSizeC – 1

- resetIbcBuf = 0

Когда ( x0 % vSizeY ) равно 0 и ( y0 % vSizeY ) равно 0, применяется следующее

- ibcBufL[ x % wIbcBufY ][ y % CtbSizeY ] = − 1, для x = x0..x0 + min(vSize, cbWidth) − 1 и y = y0..y0 + min(vSize, cbHeight)– 1

- ibcBufCb[ x % wIbcBufC ][ y % CtbSizeC ] = − 1, для x = x0/SubWidthC..x0/ SubWidthC + min(vSize/ SubWidthC, cbWidth) − 1 и y = y0/SubHeightC..y0/SubHeightC + min(vSize/SubHeightC, cbHeight) – 1

- ibcBufCr[ x % wIbcBufC ][ y % CtbSizeC ] = − 1, для x = x0/SubWidthC..x0/ SubWidthC + min(vSize/ SubWidthC, cbWidth) − 1 и y = y0/SubHeightC..y0/SubHeightC + min(vSize/SubHeightC, cbHeight) – 1

8.6.2 Процедура получения компонентов вектора движения для блоков в режиме с копированием IBC

8.6.2.1 Общие положения

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

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

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

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

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

- вектор mvL движения яркостной составляющей с точностью в 1/16 долю отсчета.

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

- Процедуру прогнозирования вектора движения яркостной составляющей в режиме с копированием IBC, как это специцировано в статье 8.6.2.2, привлекают с позиции ( xCb, yCb ) яркостной составляющей, входными данными для этого являются переменные cbWidth и cbHeight, а выходными данными является вектор mvL движения яркостной составляющей.

- Когда флаг general_merge_flag[ xCb ][ yCb ] равен 0, применяется следующее:

1. Переменную mvd определяют следующим образом:

mvd[ 0 ] = MvdL0[ xCb ][ yCb ][ 0 ] (8-883)

mvd[ 1 ] = MvdL0[ xCb ][ yCb ][ 1 ] (8-884)

2. Процедуру округления для векторов движения, как это специфицировано в статье 8.5.2.14, привлекают при mvX установленном равным mvL, rightShift установленном равным MvShift + 2, и leftShift установленном равным MvShift + 2 в качестве входных данных, и округленном векторе mvL в качестве выходных данных.

3. Вектор mvL движения яркостной составляющей модифицируют следующим образом:

u[ 0 ] = ( mvL[ 0 ] + mvd[ 0 ] + 218 ) % 218 (8-885)

mvL[ 0 ] = ( u[ 0 ] >= 217 ) ? ( u[ 0 ] − 218 ) : u[ 0 ] (8-886)

u[ 1 ] = ( mvL[ 1 ] + mvd[ 1 ] + 218 ) % 218 (8-887)

mvL[ 1 ] = ( u[ 1 ] >= 217 ) ? ( u[ 1 ] − 218 ) : u[ 1 ] (8-888)

ПРИМЕЧАНИЕ 1– Результирующие значения векторов mvL[ 0 ] и mvL[ 1 ], как это специфицировано выше, всегда будут в диапазоне от −217 до 217 − 1, включительно.

Процедуру обновления основанного на предыстории списка предикторов векторов движения, как это специфицировано в статье 8.6.2.6, привлекают для вектора mvL движения яркостной составляющей.

Статью 8.6.2.5 привлекают при векторе mvL в качестве входных данных и mvC в качестве выходных данных.

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

- ((yCb + ( mvL[ 1 ] >> 4 ) ) % CtbSizeY ) + cbHeight не больше CtbSizeY

- Для x = xCb..xCb + cbWidth − 1 и y = yCb..yCb + cbHeight – 1, ibcBufL[ (x + (mvL[0]>>4)) % wIbcBufY ][ ( y +(mvL[1]>>4)) % CtbSizeY ] должно быть не равно −1.

- Если параметр treeType равен SINGLE_TREE, для x = xCb..xCb + cbWidth − 1 и y = yCb..yCb + cbHeight – 1, ibcBufCb[ (x + (mvC[0]>>5)) % wIbcBufC ][ ( y +(mvC[1]>>5)) % CtbSizeC] ] должно быть не равно −1.

8.6.3 Процедура декодирования для блоков, кодированных в режиме с копированием ibc

8.6.3.1 Общие положения

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

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

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

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

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

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

- вектор mv движения,

- массив ibcBufL размером (wIbcBufY)x(CtbSizeY), массив ibcBufCb размером (wIbcBufC)x(CtbSizeC), массив ibcBufCr размером (wIbcBufC)x(CtbSizeC).

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

- массив predSamples прогнозируемых отсчетов.

Для x = xCb.. xCb+ Width − 1 и y = yCb..yCb + Height − 1, применяется следующее

если cIdx равно 0

predSamples[ x ][ y ] = ibcBufL[ ( x + mv[ 0 ] >> 4 )) % wIbcBufY ][ ( y + (mv[ 1 ] >> 4)) % CtbSizeY ]

если cIdx равно 1

predSamples[ x ][ y ] = ibcBufCb[ ( x + mv[ 0 ] >> 5 )) % wIbcBufC ][ ( y + (mv[ 1 ] >> 5)) % CtbSizeC ]

если cIdx равно 2

predSamples[ x ][ y ] = ibcBufCr[ ( x + mv[ 0 ] >> 5 )) % wIbcBufC ][ ( y + (mv[ 1 ] >> 5)) % CtbSizeC ]

8.7.5 Процедура реконструкции изображения

8.7.5.1 Общие положения

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

- позиция ( xCurr, yCurr ), специфицирующая врехний-левый отсчет текущего блока относительно верхнего-левого отсчета компонента текущего изображения,

- переменные nCurrSw и nCurrSh, специфицирующие ширину и высоту, соответственно, текущего блока,

- переменная cIdx, специфицирующая цветовую составляющую текущего блока,

- массив predSamples размером (nCurrSw) x (nCurrSh), специфицирующий прогнозируемые отсчеты для текущего блока,

- массив resSamples размером (nCurrSw) x (nCurrSh), специфицирующий отсчеты остатка для для текущего блока.

Выходными данными этой процедуры являются массив recSamples реконструированных отсчетов и массивы ibcBufL, ibcBufCb, ibcBufCr в буфере режима с копированием IBC.

В зависимости от значения cIdx для цветовой составляющей, делают следующие назначения:

- Если параметр cIdx равен 0, массив recSamples соответствует массиву SL реконструированных отсчетов изображения и функция clipCidx1 соответствует Clip1Y.

- В противном случае, если параметр cIdx равен 1, параметр tuCbfChroma устанавливают равным tu_cbf_cb[ xCurr ][ yCurr ], массив recSamples соответствует массиву SCb реконструированных отсчетов цветностной составляющей и функция clipCidx1 соответствует Clip1C.

- В противном случае (параметр cIdx равен 2), параметр tuCbfChroma устанавливают равным tu_cbf_cr[ xCurr ][ yCurr ], массив recSamples соответствует массиву SCr реконструированных отсчетов цветностной составляющей и функция clipCidx1 соответствует Clip1C.

В зависимости от значения флага slice_lmcs_enabled_flag, применяется следующее:

- Если флаг slice_lmcs_enabled_flag равен 0, блок recSamples реконструированных отсчетов размером (nCurrSw)x(nCurrSh) в позиции ( xCurr, yCurr ) определяют следующим образом

для i = 0..nCurrSw − 1, j = 0..nCurrSh − 1:

recSamples[ xCurr + i ][ yCurr + j ] = clipCidx1( predSamples[ i ][ j ] + resSamples[ i ][ j ] ) (8-992)

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

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

- Процедуру реконструкции изображения с отображением отсчетов яркостной составляющей, как это специфицировано в статье 8.7.5.2, привлекают в позиции ( xCurr, yCurr ) яркостной составляющей, входными данными являются ширина nCurrSw и высота nCurrSh блока, массив predSamples прогнозируемых отсчетов яркостной составляющей и массив resSamples отсчетов остатка яркостной составляющей, а выходными данными является массив resSamples реконструированных отсчетов яркостной составляющей.

- В противном случае (параметр cIdx больше 0), процедуру реконструкции изображения с процедурой зависящего от яркостной составляющей масштабирования остатка цветностной составляющей применительно к отсчетам цветностной составляющей, как это специфицировано в статье 8.7.5.3, привлекают в позиции ( xCurr, yCurr ) цветностной составляющей, входными данными являются ширина nCurrSw и высота nCurrSh блока преобразования, флаг кодированного блока для текущего блока tuCbfChroma преобразования цветностной составляющей, массив predSamples прогнозируемых отсчетов цветностной составляющей и массив resSamples отсчетов остатка цветностной составляющей, а выходными данными является массив recSamples реконструированных отсчетов цветностной составляющей.

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

Если cIdx равно 0, и если treeType равно SINGLE_TREE или DUAL_TREE_LUMA, применяется следующее

ibcBufL[ ( xCurr + i ) % wIbcBufY ][ ( yCurr + j ) % CtbSizeY ] = recSamples[ xCurr + i ][ yCurr + j ]

для i = 0..nCurrSw − 1, j = 0..nCurrSh – 1.

Если cIdx равно 1, и если treeType равно SINGLE_TREE или DUAL_TREE_CHROMA, применяется следующее

ibcBufCb[ ( xCurr + i ) % wIbcBufC ][ ( yCurr + j ) % CtbSizeC ] = recSamples[ xCurr + i ][ yCurr + j ]

для i = 0..nCurrSw − 1, j = 0..nCurrSh – 1.

Если cIdx равно 2, и если treeType равно SINGLE_TREE или DUAL_TREE_CHROMA, применяется следующее

ibcBufCr[ ( xCurr + i ) % wIbcBufC ][ ( yCurr + j ) % CtbSizeC ] = recSamples[ xCurr + i ][ yCurr + j ]

для i = 0..nCurrSw − 1, j = 0..nCurrSh – 1.

5.20 Вариант #20

Изменения в некоторых примерах обозначены в настоящем документе жирным курсивом с подчеркиванием.

7.3.7 Синтаксис данных среза

7.3.7.1 Общий синтаксис данных среза

slice_data( ) { Дескриптор for( i = 0; i < NumBricksInCurrSlice; i++ ) { CtbAddrInBs = FirstCtbAddrBs[ SliceBrickIdx[ i ] ] for( j = 0; j < NumCtusInBrick[ SliceBrickIdx[ i ] ]; j++, CtbAddrInBs++ ) { if( ( j % BrickWidth[ SliceBrickIdx[ i ] ] ) = = 0 ) { NumHmvpCand = 0 NumHmvpIbcCand = 0 resetIbcBuf = 1 } CtbAddrInRs = CtbAddrBsToRs[ CtbAddrInBs ] coding_tree_unit( ) if( entropy_coding_sync_enabled_flag &&
( ( j + 1 ) % BrickWidth[ SliceBrickIdx[ i ] ] = = 0 ) ) {
end_of_subset_one_bit /* equal to 1 */ ae(v) if( j < NumCtusInBrick[ SliceBrickIdx[ i ] ] − 1 ) byte_alignment( ) } } if( !entropy_coding_sync_enabled_flag ) { end_of_brick_one_bit /* equal to 1 */ ae(v) if( i < NumBricksInCurrSlice − 1 ) byte_alignment( ) } } }

7.4.8.5 Семантика единицы кодирования

Когда все следующие условия являются истинными, основанный на предыстории список предикторов векторов движения для области совместно используемого списка объединяемых кандидатов обновляют путем установления параметра NumHmvpSmrIbcCand равным параметру NumHmvpIbcCand, и установления параметра HmvpSmrIbcCandList[ i ] равным параметру HmvpIbcCandList[ i ] для i = 0..NumHmvpIbcCand − 1:

- IsInSmr[ x0 ][ y0 ] равно «Истинно» (TRUE).

- SmrX[ x0 ][ y0 ] равно x0.

- SmrY[ x0 ][ y0 ] равно y0.

Следующие назначения сделаны для x = x0..x0 + cbWidth − 1 и y = y0..y0 + cbHeight − 1:

CbPosX[ x ][ y ] = x0 (7-135)

CbPosY[ x ][ y ] = y0 (7-136)

CbWidth[ x ][ y ] = cbWidth (7-137)

CbHeight[ x ][ y ] = cbHeight (7-138)

Установление параметра vSize как min( ctbSize, 64 ) и параметра wIbcBufY как (128*128/CtbSizeY).

ibcBufL представляет собой массив с шириной wIbcBufY и высотой CtbSizeY.

ibcBufCb и ibcBufCr представляют собой массивы с шириной wIbcBufC =(wIbcBufY/SubWidthC) и высотой (CtbSizeY/SubHeightC), т.е. CtbSizeC.

Если resetIbcBuf равно 1, применяется следующее

- ibcBufL[ x % wIbcBufY ][ y % CtbSizeY ] = − 1, for x = x0..x0 + wIbcBufY − 1 and y = y0..y0 + CtbSizeY – 1

- ibcBufCb[ x % wIbcBufC ][ y % CtbSizeC ] = − 1, for x = x0..x0 + wIbcBufC − 1 and y = y0..y0 + CtbSizeC – 1

- ibcBufCr[ x % wIbcBufC ][ y % CtbSizeC ] = − 1, for x = x0..x0 + wIbcBufC − 1 and y = y0..y0 + CtbSizeC – 1

- resetIbcBuf = 0

Когда ( x0 % vSizeY ) равно 0 и ( y0 % vSizeY ) равно 0, применяется следующее

- ibcBufL[ x % wIbcBufY ][ y % CtbSizeY ] = − 1, для x = x0..x0 + max(vSize, cbWidth) − 1 и y = y0..y0 + max(vSize, cbHeight)– 1

- ibcBufCb[ x % wIbcBufC ][ y % CtbSizeC ] = − 1, для x = x0/SubWidthC..x0/ SubWidthC + max(vSize/ SubWidthC, cbWidth) − 1 и y = y0/SubHeightC..y0/SubHeightC + max(vSize/SubHeightC, cbHeight) – 1

- ibcBufCr[ x % wIbcBufC ][ y % CtbSizeC ] = − 1, для x = x0/SubWidthC..x0/ SubWidthC + max(vSize/ SubWidthC, cbWidth) − 1 и y = y0/SubHeightC..y0/SubHeightC + max(vSize/SubHeightC, cbHeight) – 1

8.6.2 Процедура получения компонентов вектора движения для блоков в режиме с копированием IBC

8.6.2.1 Общие положения

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

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

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

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

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

- вектор mvL движения яркостной составляющей с точностью в 1/16 долю отсчета.

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

- Процедуру прогнозирования вектора движения яркостной составляющей в режиме с копированием IBC, как это специцировано в статье 8.6.2.2, привлекают с позиции ( xCb, yCb ) яркостной составляющей, входными данными для этого являются переменные cbWidth и cbHeight, а выходными данными является вектор mvL движения яркостной составляющей.

- Когда флаг general_merge_flag[ xCb ][ yCb ] равен 0, применяется следующее:

1. Переменную mvd определяют следующим образом:

mvd[ 0 ] = MvdL0[ xCb ][ yCb ][ 0 ] (8-883)

mvd[ 1 ] = MvdL0[ xCb ][ yCb ][ 1 ] (8-884)

2. Процедуру округления для векторов движения, как это специфицировано в статье 8.5.2.14, привлекают при mvX, установленном равным mvL, rightShift, установленном равным MvShift + 2, и leftShift, установленном равным MvShift + 2 в качестве входных данных, и округленном векторе mvL в качестве выходных данных.

3. Вектор mvL движения яркостной составляющей модифицируют следующим образом:

u[ 0 ] = ( mvL[ 0 ] + mvd[ 0 ] + 218 ) % 218 (8-885)

mvL[ 0 ] = ( u[ 0 ] >= 217 ) ? ( u[ 0 ] − 218 ) : u[ 0 ] (8-886)

u[ 1 ] = ( mvL[ 1 ] + mvd[ 1 ] + 218 ) % 218 (8-887)

mvL[ 1 ] = ( u[ 1 ] >= 217 ) ? ( u[ 1 ] − 218 ) : u[ 1 ] (8-888)

ПРИМЕЧАНИЕ 1– Результирующие значения векторов mvL[ 0 ] и mvL[ 1 ], как это специфицировано выше, всегда будут в диапазоне от −217 до 217 − 1, включительно.

Процедуру обновления основанного на предыстории списка предикторов векторов движения, как это специфицировано в статье 8.6.2.6, привлекают для вектора mvL движения яркостной составляющей.

Статью 8.6.2.5 привлекают при векторе mvL в качестве входных данных и mvC в качестве выходных данных.

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

- ((yCb + ( mvL[ 1 ] >> 4 ) ) % CtbSizeY ) + cbHeight не больше CtbSizeY

- Для x = xCb..xCb + cbWidth − 1 и y = yCb..yCb + cbHeight – 1, ibcBufL[ (x + (mvL[0]>>4)) % wIbcBufY ][ ( y +(mvL[1]>>4)) % CtbSizeY ] не больше −1.

8.6.3 Процедура декодирования для блоков, кодированных в режиме с копированием ibc

8.6.3.1 Общие положения

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

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

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

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

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

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

- вектор mv движения,

- массив ibcBufL размером (wIbcBufY)x(CtbSizeY), массив ibcBufCb размером (wIbcBufC)x(CtbSizeC), массив ibcBufCr размером (wIbcBufC)x(CtbSizeC).

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

- массив predSamples прогнозируемых отсчетов.

Для x = xCb.. xCb+ Width − 1 и y = yCb..yCb + Height − 1, применяется следующее

Если cIdx равно 0

predSamples[ x ][ y ] = ibcBufL[ ( x + mv[ 0 ] >> 4 )) % wIbcBufY ][ ( y + (mv[ 1 ] >> 4)) % CtbSizeY ]

если cIdx равно 1

predSamples[ x ][ y ] = ibcBufCb[ ( x + mv[ 0 ] >> 5 )) % wIbcBufC ][ ( y + (mv[ 1 ] >> 5)) % CtbSizeC ]

если cIdx равно 2

predSamples[ x ][ y ] = ibcBufCr[ ( x + mv[ 0 ] >> 5 )) % wIbcBufC ][ ( y + (mv[ 1 ] >> 5)) % CtbSizeC ]

8.7.5 Процедура реконструкции изображения

8.7.5.1 Общие положения

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

- позиция ( xCurr, yCurr ), специфицирующая верхний-левый отсчет текущего блока относительно верхнего-левого отсчета компонента текущего изображения,

- переменные nCurrSw и nCurrSh, специфицирующие ширину и высоту, соответственно, текущего блока,

- переменная cIdx, специфицирующая цветовую составляющую текущего блока,

- массив predSamples размером (nCurrSw) x (nCurrSh), специфицирующий прогнозируемые отсчеты для текущего блока,

- массив resSamples размером (nCurrSw) x (nCurrSh), специфицирующий отсчеты остатка для для текущего блока.

Выходными данными этой процедуры являются массив recSamples реконструированных отсчетов и массивы ibcBufL, ibcBufCb, ibcBufCr в буфере режима с копированием IBC.

В зависимости от значения cIdx для цветовой составляющей, делают следующие назначения:

- Если параметр cIdx равен 0, массив recSamples соответствует массиву SL реконструированных отсчетов изображения и функция clipCidx1 соответствует Clip1Y.

- В противном случае, если параметр cIdx равен 1, параметр tuCbfChroma устанавливают равным tu_cbf_cb[ xCurr ][ yCurr ], массив recSamples соответствует массиву SCb реконструированных отсчетов цветностной составляющей и функция clipCidx1 соответствует Clip1C.

- В противном случае (параметр cIdx равен 2), параметр tuCbfChroma устанавливают равным tu_cbf_cr[ xCurr ][ yCurr ], массив recSamples соответствует массиву SCr реконструированных отсчетов цветностной составляющей и функция clipCidx1 соответствует Clip1C.

В зависимости от значения флага slice_lmcs_enabled_flag, применяется следующее:

- Если флаг slice_lmcs_enabled_flag равен 0, блок recSamples реконструированных отсчетов размером (nCurrSw)x(nCurrSh) в позиции ( xCurr, yCurr ) определяют следующим образом

для i = 0..nCurrSw − 1, j = 0..nCurrSh − 1:

recSamples[ xCurr + i ][ yCurr + j ] = clipCidx1( predSamples[ i ][ j ] + resSamples[ i ][ j ] ) (8-992)

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

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

- Процедуру реконструкции изображения с отображением отсчетов яркостной составляющей, как это специфицировано в статье 8.7.5.2, привлекают в позиции ( xCurr, yCurr ) яркостной составляющей, входными данными являются ширина nCurrSw и высота nCurrSh блока, массив predSamples прогнозируемых отсчетов яркостной составляющей и массив resSamples отсчетов остатка яркостной составляющей, а выходными данными является массив resSamples реконструированных отсчетов яркостной составляющей.

- В противном случае (параметр cIdx больше 0), процедуру реконструкции изображения с процедурой зависящего от яркостной составляющей масштабирования остатка цветностной составляющей применительно к отсчетам цветностной составляющей, как это специфицировано в статье 8.7.5.3, привлекают в позиции ( xCurr, yCurr ) цветностной составляющей, входными данными являются ширина nCurrSw и высота nCurrSh блока преобразования, флаг кодированного блока для текущего блока tuCbfChroma преобразования цветностной составляющей, массив predSamples прогнозируемых отсчетов цветностной составляющей и массив resSamples отсчетов остатка цветностной составляющей, а выходными данными является массив recSamples реконструированных отсчетов цветностной составляющей.

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

Если cIdx равно 0, и если treeType равно SINGLE_TREE или DUAL_TREE_LUMA, применяется следующее

ibcBufL[ ( xCurr + i ) % wIbcBufY ][ ( yCurr + j ) % CtbSizeY ] = recSamples[ xCurr + i ][ yCurr + j ]

для i = 0..nCurrSw − 1, j = 0..nCurrSh – 1.

Если cIdx равно 1, и если treeType равно SINGLE_TREE или DUAL_TREE_CHROMA, применяется следующее

ibcBufCb[ ( xCurr + i ) % wIbcBufC ][ ( yCurr + j ) % CtbSizeC ] = recSamples[ xCurr + i ][ yCurr + j ]

для i = 0..nCurrSw − 1, j = 0..nCurrSh – 1.

Если cIdx равно 2, и если treeType равно SINGLE_TREE или DUAL_TREE_CHROMA, применяется следующее

ibcBufCr[ ( xCurr + i ) % wIbcBufC ][ ( yCurr + j ) % CtbSizeC ] = recSamples[ xCurr + i ][ yCurr + j ]

для i = 0..nCurrSw − 1, j = 0..nCurrSh – 1.

На фиг. 6 представлена логическая схема примера способа 600 обработки сигналов визуальных медиаданных (видео или изображения). Способ 600 содержит определение (602), для преобразования между текущим видеоблоком и представлением этого текущего видеоблока в виде потока битов данных, размера буфера для сохранения опорных отсчетов для этого текущего видеоблока с использованием режима кодирования с внутрикадровым копированием блока, и осуществление (604) преобразования с использованием опорных отсчетов, сохраняемых в буфере.

Следующие статьи описывают некоторые примеры предпочтительных признаков, реализуемых вариантами способа 600 и другими способами. Дополнительные примеры приведены в Разделе 4 настоящего документа.

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

2. Способ по статье 1, отличающийся тем, что размер буфера имеет заданное постоянное значение.

3. Способ по какой-либо из статей 1 – 2, отличающийся тем, что указанный размер равен MxN, где M и N являются целыми числами.

4. Способ по статье 3, отличающийся тем, что MxN равно 64x64 или 128x128 или 64x128.

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

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

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

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

9. Способ по какой-либо из статей 1 – 8, отличающийся тем, что размер буфера различен для опорных отсчетов яркостной составляющей с одной стороны и опорных отсчетов цветностных составляющих с другой стороны.

10. Способ по какой-либо из статей 1 – 8, отличающийся тем, что размер буфера зависит от формата субдискретизации цветностной составляющей для текущего видеоблока.

11. Способ по какой-либо из статей 1 – 8, отличающийся тем, что опорные отсчеты сохраняют в формате RGB.

12. Способ по какой-либо из статей 1 – 11, отличающийся тем, что указанный буфер используется для сохранения реконструированных отсчетов прежде контурной фильтрации и после контурной фильтрации.

13. Способ по статье 12, отличающийся тем, что контурная фильтрация представляет собой деблокирующую фильтрацию или адаптивную контурную фильтрацию (ALF) или нелинейную фильтрацию с адаптивным смещением (SAO).

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

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

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

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

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

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

20. Способ по какой-либо из статей 14 – 19, отличающийся тем, что буфер имеет такой размер, как это указано в одной из статей 1 – 13.

21. Способ по какой-либо из статей 1 – 20, отличающийся тем, что к позициям пикселей в буфере адресуются с использованием чисел x и y.

22. Способ по какой-либо из статей 1 – 20, отличающийся тем, что к позициям пикселей в буфере адресуются с использованием одного числа, находящегося в интервале от 0 до M*N-1, где M и N обозначают выраженные в пикселях ширину и высоту буфера.

23. Способ по какой-либо из статей 1 – 20, отличающийся тем, что текущее представление в виде потока битов данных содержит блочный вектор для преобразования, где блочный вектор, обозначенный как (BVx,BVy), равен (x-x0,y-y0), где (x0, y0) соответствует верхней-левой позиции единицы дерева кодирования текущего видеоблока.

24. Способ по какой-либо из статей 1 – 20, отличающийся тем, что, текущее представление в виде потока битов данных содержит блочный вектор для преобразования, где этот блочный вектор, обозначенный как (BVx,BVy), равен (x-x0+Tx,y-y0+Ty), где (x0, y0) соответствует верхней-левой позиции единицы дерева кодирования текущего видеоблока, и где Tx и Ty являются значениями сдвига.

25. Способ по статье 24, отличающийся тем, что Tx и Ty являются предварительно заданными значениями сдвига.

26. Способ по какой-либо из статей 1 – 20, отличающийся тем, что в процессе преобразования, для пикселя, находящегося в позиции (x0, y0) и имеющего блочный вектор (BVx, BVy), соответствующая опора в буфере, располагается в опорной позиции (x0+BVx, y0+BVy).

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

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

29. Способ по какой-либо из статей 1 – 20, отличающийся тем, что в процессе преобразования, для пикселя, находящегося в позиции (x0, y0) и имеющего блочный вектор (BVx, BVy), соответствующая опора в буфере располагается в опорной позиции ((x0+BVx) mod M, (y0+BVy) mod N), где “mod” обозначает операцию взятия по модулю, и M и N являются целыми числами, представляющими размеры x и y буфера.

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

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

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

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

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

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

36. Способ по какой-либо из статей 1 – 35, отличающийся тем, что вертикальный порядок сканирования используется для считывания или сохранения отсчетов в буфере в процессе преобразования.

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

38. Способ по статье 37, отличающийся тем, что первая битовая глубина больше второй битовой глубины.

39. Способ по какой-либо из статей 37 – 38, отличающийся тем, что первая битовая глубина идентична битовой глубине буфера реконструированных данных, используемого в процессе преобразования.

40. Способ по какой-либо из статей 37 – 39, отличающийся тем, что первую битовую глубину сообщают в виде сигнализации в представлении в виде потока битов данных как некое значение или как разностное значение.

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

Дополнительные варианты и примеры статей 37 – 41 описаны в Пункте 7 в Разделе 4.

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

43. Способ по статье 43, отличающийся тем, что вычисления прогнозируемых данных содержат определение значения прогнозируемого отсчета на основе значения реконструированного отсчета с использованием функции clip{{p+[1<<(b-1)]}>>b,0,(1<<bitdepth)-1}<<b, где p – значение реконструированного отсчета, b – заданное значение сдвига битов, а bitdepth – точность прогнозируемого отсчета.

Дополнительные варианты и примеры статей 42 – 43 описаны в Пункте 28 в Разделе 4.

44. Способ обработки видео, содержащий: осуществление преобразования между текущим видеоблоком и представлением этого текущего видеоблока в виде потока битов данных с использованием режима внутрикадрового копирования, в котором опорная область размером nM x nM используется для единицы дерева кодирования размером MxM, где n и M обозначают целые числа, и где текущий видеоблок располагается в единице дерева кодирования, и где опорная область является ближайшей доступной единицей дерева кодирования размером nxn в строке единиц дерева кодирования, соответствующей текущему видеоблоку.

Дополнительные варианты и примеры статьи 4 описаны в Пункте 35 в Разделе 4.

45. Способ обработки видео, содержащий: осуществление преобразования между текущим видеоблоком и представлением этого текущего видеоблока в виде потока битов данных с использованием режима внутрикадрового копирования, в котором опорная область размером nM x nM используется для единицы дерева кодирования с размером, отличным от размера MxM, где n и M обозначают целые числа, и где текущий видеоблок располагается в единице дерева кодирования, и где опорная область является ближайшей доступной единицей дерева кодирования размером nxn-1 в строке единиц дерева кодирования, соответствующей текущему видеоблоку.

Дополнительные варианты и примеры статьи 4 описаны в Пункте 36 в Разделе 4. На фиг. 8 и 9 показаны дополнительные примеры вариантов.

46. Способ по п. 3, отличающийся тем, что M=mW и N=H, где W и H представляют ширину и высоту единицы дерева кодирования (CTU) текущего видеоблока, и m – положительное целое число.

47. Способ по п. 3, отличающийся тем, что M=W и N=nH, где W и H представляют ширину и высоту единицы дерева кодирования (CTU), и n – положительное целое число.

48. Способ по п. 3, отличающийся тем, что M=mW и N=nH, где W и H представляют ширину и высоту единицы дерева кодирования (CTU), m и n – положительные целые числа.

49. Способ по какому-либо из п. 46 – 48, отличающийся тем, что n и m зависят от CTU.

50. Способ обработки видео, содержащий: определение, для преобразования между текущим видеоблоком видеоролика и представлением этого текущего видеоблока в виде потока битов данных, действительности блочного вектора, соответствующего текущему видеоблоку составляющей c видео с использованием составляющей X этого видео, где составляющая X отличается от яркостной составляющей видео; и осуществление преобразования с использованием блочного вектора после определения, что блочный вектор является действительным для текущего видеоблока. Здесь блочный вектор, обозначенный как (BVx,BVy), равен (x-x0,y-y0), где (x0, y0) соответствует верхней-левой позиции в единице дерева кодирования текущего видеоблока.

51. Способ по статье 50, отличающийся тем, что составляющая c соответствует яркостной составляющей рассматриваемого видео.

52. Способ по статье 50, отличающийся тем, что текущий видеоблок является блоком цветностной составляющей, и видео имеет формат 4:4:4.

53. Способ по статье 50, отличающийся тем, что видео имеет формат 4:2:0 и тем, что текущий видеоблок является блоком цветностной составляющей, начиная с позиции (x, y), и тем, что процедура определения содержит определение, что блочный вектор является недействительным для случая, в котором isRec(c, ((x+BVx)>>5<<5)+64-(((y+BVy)>>5)&1)*32+(x%32), ((y+BVy)>>5<<5) +(y%32)) является истинной.

54. Способ по статье 50, отличающийся тем, что видео имеет формат 4:2:0, и что текущий видеоблок является блоком цветностной составляющей, начинающимся с позиции (x, y), и что процедура определения содержит определение, что блочный вектор является недействительным для случая, в котором isRec(c, x+BVx+Chroma_CTU_size, y) является истинной.

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

56. Способ по статье 55, отличающийся тем, что K1 = 1 и K2 = 2.

57. Способ по какой-либо из статей 55 – 56, отличающийся тем, что текущий видеоблок избирательно обрабатывают на основе размера видеообласти или размера текущей единицы VPDU.

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

59. Способ по статье 58, отличающийся тем, что в процессе преобразования используется буфер для режима внутрикадрового копирования блоков (IBC), где ширина и высота буфера для режима с копированием IBC равны Wbuf и Hbuf, размеры текущего видеоблока равны WxH и где блочный вектор представлен как (BVx, BVy), и где текущий видеоблок находится в текущем изображении, имеющем размеры Wpic и Hpic, и в единице дерева кодирования, имеющей Wctu и Hctu в качестве ширины и высоты, и где проверка действительности использует предварительно заданное правило.

60. Способ по какой-либо из статей 58 – 59, отличающийся тем, что текущий видеоблок представляет собой блок яркостной составляющей, блок цветностной составляющей, единицу кодирования (CU), единицу преобразования (TU), блок размером 4x4, блок размером 2x2 или субблок материнского блока, начиная от пикселя с координатами (X, Y).

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

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

Пункты 23 – 30 в предшествующем разделе предлагает дополнительные примеры и вариации приведенных выше статей 58 – 62.

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

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

65. Кодирующее устройство для видео, содержащее процессор, конфигурированный для реализации способа, приведенного в какую-либо одну или несколько статей 1 – 62.

66. Декодирующее устройство для видео, содержащее процессор, конфигурированный для реализации способа, приведенного в какой-либо одной или несколько статей 1 – 62.

67. Читаемый компьютером носитель, имеющий записанный на нем код, этот код содержит выполняемые компьютером команды для реализации способа, приведенного в какой-либо одной или несколько статей 1 – 62.

На фиг. 7 представлена блок-схема аппаратной платформы устройства 700 для обработки видео/изображения. Устройство 700 может быть использовано для реализации одного или нескольких описываемых здесь способов. Устройство 700 может быть встроено в смартфон, планшет, компьютер, приемник Интернета вещей (Internet of Things (IoT)) и т.д. Устройство 700 может содержать один или несколько процессоров 702, одно или несколько запоминающих устройств 704 и аппаратуру 706 для обработки видео. Процессор (ы) 702 может быть конфигурирован для осуществления одного или нескольких способов (включая, но не ограничиваясь, способ 600), описываемых в настоящем документе. Запоминающее устройство (а) 704 может быть использовано для хранения данных и кода, применяемых для реализации способов и технологий, описываемых здесь. Аппаратура 706 для обработки видео может быть использовано для осуществления, в схемном аппаратном варианте, некоторых способов, описываемых в настоящем документе.

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

Раздел A: Другие дополнительные примеры вариантов

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

Этот раздел анализирует ряд проблем в сегодняшней конфигурации буфера для опорных данных в режиме с копированием IBC и предлагает другой вариант конфигурации для решения этих проблем. Здесь предлагается независимый буфер для опорных данных в режиме с копированием IBC вместо «смешивания» такого буфера с запоминающим устройством для декодирования. По сравнению с сегодняшним базовым вариантом, предлагаемая схема дает показатели -0.99%/-0.71%/-0.79% AI/RA/LD-B яркостная составляющая BD-скорость для класса F и -2.57%/-1.81%/-1.36% для 4:2:0 TGM, при уменьшении объема памяти на 6.7%; или -1.31%/-1.01%/-0.81% для класса F и -3.23%/-2.33%/-1.71% для 4:2:0 TGM при увеличении объема памяти на 6.7%.

A1. Введение

Принят режим кодирования с внутрикадровым копированием блоков, т.е. режим IBC (или использование текущего изображения в качестве опоры, т.е. режим CPR ранее). Понятно, что опорные отсчеты для режима с копированием IBC следует сохранять в запоминающем устройстве на кристалле интегральной схемы, и что этот факт определяет лишь ограниченные размеры опорной области для одной единицы CTU. Для ограничения требований к дополнительному объему запоминающего устройства на кристалле сегодняшний вариант конфигурации повторно использует область памяти размером 64x64 для декодирования единиц VPDU, так что потребуются только 3 дополнительных области запоминающего устройства размером 64x64 для поддержки режима с копированием IBC. Когда размер единицы CTU равен 128x128, опорная область, используемая на сегодняшний момент, показана на фиг. 2.

В сегодняшнем проекте (стандарт VVC проект 4) площадь определяют следующим образом

– Следующие условия должны быть истинными: ( yCb + ( mvL[ 1 ] >> 4 ) ) >> CtbLog2SizeY = yCb >> CtbLog2SizeY (8-972) ( yCb + ( mvL[ 1 ] >> 4 ) + cbHeight – 1) >> CtbLog2SizeY = yCb >> CtbLog2SizeY (8-973) ( xCb + ( mvL[ 0 ] >> 4 ) ) >> CtbLog2SizeY >= ( xCb >> CtbLog2SizeY ) – 1 (8-974) ( xCb + ( mvL[ 0 ] >> 4 ) + cbWidth – 1) >> CtbLog2SizeY <= ( xCb >> CtbLog2SizeY ) (8-975) [Ред. (SL): условия (8-218) и (8-216) могли быть проверены по 6.4.X.] – Когда ( xCb + ( mvL[ 0 ] >> 4 ) ) >> CtbLog2SizeY равно ( xCb >> CtbLog2SizeY ) – 1, процедуру определения доступности блока, как это специфицировано в статье 6.4.X [Ред. (BB): Процедура проверки доступности соседних блоков еще должна быть сформулирована] привлекают, используя текущую позицию ( xCurr, yCurr ) яркостной составляющей, установленную равной ( xCb, yCb ), и соседнюю позицию яркостной составляющей ( ( ( xCb + ( mvL[ 0 ] >> 4 ) + CtbSizeY ) >> ( CtbLog2SizeY – 1 ) ) << ( CtbLog2SizeY – 1 ), ( ( yCb + ( mvL[ 1 ] >> 4 ) ) >> ( CtbLog2SizeY – 1 ) ) << ( CtbLog2SizeY – 1 ) ) в качестве входных данных, а результат на выходе должен быть равен «ложно» (FALSE).

Таким образом, общий объем опорных данных равен одной единице CTU.

A2. Потенциальные проблемы сегодняшней конфигурации

Сегодняшняя конфигурация предполагает повторное использование области запоминающего устройства объемом 64x64 для декодирования текущей единицы VPDU, и опорная область для режима с копированием IBC совмещена с областью повторного использования памяти единицей VPDU, соответственно. Такая конфигурация объединяет область памяти для декодирования единицы VPDU с буфером для режима с копированием IBC. Здесь могут быть ряд проблем:

1. Работа с единицами CTU меньшего размера может быть проблемой. Предположим, что размер единицы CTU равен 32x32, тогда не ясно, сможет ли сегодняшняя структура памяти размером 64x64 для декодирования текущей единицы VPDU эффективно поддерживать повторное использование памяти на уровне 32x32 в других архитектурах.

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

3. Такую конфигурацию нельзя хорошо масштабировать. Поскольку декодирование единицы VPDU смешивается с буфером для режима с копированием IBC, нелегко увеличить или уменьшить опорную область относительно сегодняшней конфигурации с одной единицей CTU с размером 128x128. Это может ограничить гибкость использования лучшего компромисса между эффективностью кодирования и объемом памяти на кристалле в более поздних разработках, например, с более низким или более высоким профилем.

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

A3. Четкая конфигурация буфера для режима с копированием IBC

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

Для единицы CTU размером 128x128 буфер определен в размере 128x128 из 8-битовых отсчетов, когда единица CU (x, y) размером wxh была декодирована, ее реконструированную версию прежде внутриконтурной фильтрации преобразуют к 8-битовому формату и записывают в области блока размером wxh, начинающейся от позиции (x%128, y%128). Здесь оператор % взятия по модулю дает в результате положительное число, т.е. для , например, -3%128=125.

Предположим, что пиксель по адресу (x,y) кодирован в режиме с копированием IBC с вектором BV=(BVx, BVy), прогнозируемый отсчет для этого пикселя в опорном буфере для режима с копированием IBC расположен по адресу ((x+BVx)%128, (y+BVy)%128), а значение этого пикселя будет преобразовано в 10-битовый формат перед прогнозированием.

Когда буфер считается имеющим размер (W, H), после декодирования единицы CTU или единицы CU, начиная от точки (x, y), реконструированные пиксели прежде контурной фильтрации будут сохранены в буфере, начиная с позиции (x%W, y%H). Таким образом, после декодирования единицы CTU, соответствующий буфер для опорных данных в режиме с копированием IBC будет обновлен соответственно. Такая настройка может произойти, когда размер единицы CTU не равен 128x128. Например, для единицы CTU размером 64x64, CTU, при текущем размере буфера, это может считаться как буфер размером 256x64. Для единицы CTU размером 64x64 фиг. 2 показывает статус буфера.

На фиг. 12 приведена иллюстрация статуса буфера опорных данных для режима копирования IBC, где блок обозначает единицу CTU размером 64x64.

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

Если битовая глубина буфера для режима с копированием IBC равна 8-бит, тогда по сравнению с текущей конфигурацией, где необходимы 3 дополнительных 10-битовых буфера размером 64x64, значение увеличения емкости запоминающего устройства на кристалле составляет (8*4)/(10*3)-100%=6,7%.

Если мы еще больше уменьшим битовую глубину, требования к объему памяти могут быть еще более снижены. Например, для 7-битового буфера, экономия емкости запоминающего устройства на кристалле составит 100%-(7*4)/(10*3)=6,7%.

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

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

A4. Экспериментальные результаты

В некоторых вариантах, описываемые способы могут быть реализованы с использованием программного обеспечения VTM-4.0.

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

Для 7-битовой реализации буфера результаты показаны в таблице I.

Для 8-битовой реализации буфера результаты показаны в таблице II.

Таблица I. Характеристики с 7-битовым буфером.

Базовым уровнем является результат способа VTM-4.0 с режимом с копированием IBC для всех последовательностей.

Все с внутрикадровым прогнозированием Согласно VTM-4.0 с включенным IBC Y U V Код.T Декод.T Класс A1 -0,01% -0,09% -0,10% 132% 101% Класс A2 0,05% 0,00% 0,06% 135% 100% Класс B 0,00% -0,02% 0,01% 135% 100% Класс C -0,02% 0,01% 0,03% 130% 98% Класс E -0,13% -0,16% -0,04% 135% 99% Всего -0,02% -0,05% 0,00% 133% 100% Класс D 0,04% 0,04% 0,12% 127% 107% Класс F -0,99% -1,14% -1,18% 115% 99% 4:2:0 TGM -2,57% -2,73% -2,67% 104% 102% Произвольный доступ Согласно VTM-4.0 с включенным IBC Y U V Код.T Декод.T Класс A1 0,02% -0,01% 0,01% 109% 100% Класс A2 0,00% -0,04% 0,03% 111% 100% Класс B -0,01% -0,10% -0,22% 113% 101% Класс C -0,01% 0,17% 0,12% 115% 100% Класс E         Всего 0,00% 0,00% -0,04% 112% 100% Класс D 0,05% 0,16% 0,20% 117% 101% Класс F -0,71% -0,77% -0,77% 109% 99% 4:2:0 TGM -1,81% -1,65% -1,64% 107% 101% Небольшая задержка B Согласно VTM-4.0 с включенным IBC Y U V Код.T Декод.T Класс A1           Класс A2         Класс B 0,01% 0,36% 0,30% 114% 95% Класс C -0,01% -0,12% -0,10% 120% 98% Класс E 0,10% 0,20% 0,18% 107% 99% Всего 0,03% 0,16% 0,13% 114% 97% Класс D -0,01% 1,07% 0,18% 123% 104% Класс F -0,79% -0,89% -1,01% 110% 100% 4:2:0 TGM -1,36% -1,30% -1,26% 109% 102%

Таблица II. Характеристики с 8-битовым буфером.

Базовым уровнем является результат способа VTM-4.0 с режимом с копированием IBC для всех последовательностей.

Все с внутрикадровым прогнозированием Согласно VTM-4.0 с включенным IBC Y U V Код.T Декод.T Класс A1 -0,01% 0,02% -0,10% 129% 102% Класс A2 0,02% -0,06% -0,02% 134% 102% Класс B -0,04% -0,02% -0,07% 135% 101% Класс C -0,03% 0,04% 0,00% 130% 98% Класс E -0,16% -0,14% -0,08% 134% 100% Всего -0,04% -0,03% -0,05% 133% 100% Класс D 0,00% 0,04% 0,02% 126% 101% Класс F -1,31% -1,27% -1,29% 114% 98% 4:2:0 TGM -3,23% -3,27% -3,24% 101% 100% Произвольный доступ Согласно VTM-4.0 с включенным IBC Y U V Код.T Декод.T Класс A1 -0,01% -0,08% 0,04% 107% 99% Класс A2 -0,03% -0,16% 0,06% 110% 99% Класс B -0,01% -0,14% -0,22% 111% 99% Класс C -0,01% 0,15% 0,09% 115% 100% Класс E         Всего -0,01% -0,05% -0,03% 111% 99% Класс D 0,01% 0,19% 0,22% 116% 101% Класс F -1,01% -0,99% -1,01% 108% 99% 4:2:0 TGM -2,33% -2,14% -2,19% 105% 100% Небольшая задержка B Согласно VTM-4.0 с включенным IBC Y U V Код.T Декод.T Класс A1           Класс A2         Класс B 0,00% 0,04% -0,14% 113% #NUM! Класс C -0,05% -0,28% -0,15% 119% 98% Класс E 0,04% -0,16% 0,43% 107% #NUM! Всего 0,00% -0,11% 0,00% 113% #NUM! Класс D -0,07% 1,14% 0,13% 122% 99% Класс F -0,81% -0,92% -0,96% 111% 99% 4:2:0 TGM -1,71% -1,67% -1,71% 106% 95%

На фиг. 17 представлена блок-схема, показывающая пример системы 1700 обработки видео, в которой могут быть реализованы различные описываемые здесь способы. Различные варианты реализации могут содержать некоторые или все компоненты системы 1700. Система 1700 может содержать вход 1702 для приема видео контента. Этот видео контент может быть принят в необработанном («сыром») или несжатом формате, например, 8 или 10-битовые многокомпонентные значения пикселей, либо может быть в сжатом или кодированном формате. Вход 1702 может представлять собой сетевой интерфейс, интерфейс периферийных шин или интерфейс запоминающих устройств. К примерам сетевого интерфейса относятся проводные интерфейсы, такие как Этернет, пассивная оптическая сеть (passive optical network (PON)) и т.п., и беспроводные интерфейсы, такие как Wi-Fi или сотовые интерфейсы.

Система 1700 может содержать кодирующий компонент 1704, который может реализовать различные способы кодирования, описываемые в настоящем документе. Кодирующий компонент 1704 может уменьшить среднюю частоту передачи битов данных видео при их прохождении от входа 1702 к выходу кодирующего компонента 1704 для создания кодированного представления этого видео. Поэтому технологии кодирования иногда называют технологиями сжатия видео или технологиями транскодирования видео. Выходные данные кодирующего компонента 1704 могут быть либо сохранены, либо переданы через присоединенные средства связи, представленные здесь компонентом 1706. Сохраняемое или передаваемое (или кодированное) представление видео в виде потока битов данных, принимаемое на вход 1702, может быть использовано компонентом 1708 для генерации значений пикселей или представляемого на дисплее видео, передаваемого интерфейсу 1710 дисплея. Процедура генерации просматриваемого пользователем видео из его представления в виде потока битов данных иногда называется декомпрессией (расширением) видео. Кроме того, хотя некоторые операции обработки видео называются операциями или инструментами «кодирования», следует понимать, что инструменты или операции кодирования используются в кодирующих устройствах и соответствующие инструменты или операции декодирования, которые обращают результаты кодирования, будут осуществляться декодирующим устройством.

Примеры интерфейса шины периферийных устройств или интерфейса дисплея могут представлять собой универсальную последовательную шину (universal serial bus (USB)) или мультимедийный интерфейс высокой четкости (high definition multimedia interface (HDMI)) или Displayport, и т.д. К примерам интерфейса запоминающих устройств относятся интерфейс усовершенствованного последовательного соединения (SATA (serial advanced technology attachment)), интерфейс периферийных устройств (PCI), интерфейс IDE и другие подобные интерфейсы. Способы, описываемые в настоящем документе, могут быть реализованы в разнообразных электронных устройствах, таких как мобильные телефоны, портативные компьютеры, смартфоны или другие устройства, способные осуществлять цифровую обработку данных и/или представлять видео на дисплее.

На фиг. 18 представлена логическая схема примера способа обработки визуальных данных. Этапы этой логической схемы обсуждаются в соединении с Примером 23, обсуждаемым в Разделе 4 указанного документа. На этапе 1802, способ определяет, для преобразования между текущим видеоблоком текущего изображения визуальных медиаданных и представлением этого текущего видеоблока в виде потока битов данных, блочный вектор (BVx,BVy), где действительность этого блочного вектора (BVx, BVy) не зависит от (1) позиции (P, Q) блока отсчетов, и/или (2) реконструирован ли отсчет, находящийся в позиции (P,Q), и/или (3) позиции текущего видеоблока, где, блочный вектор (BVx, BVy) представляет смещение пикселей между текущим видеоблоком и указанным блоком отсчетов. На этапе 1804, процедура осуществляет с использованием указанного блочного вектора, преобразование в режиме внутрикадрового копирования блоков на основе реконструированного блока, расположенного в той же самой видеообласти, где находится текущий видеоблок, содержащий опорные отсчеты, используемые для формирования прогнозируемого блока для текущего видеоблока, где, во время преобразования, прогнозируемый отсчет, находящийся в позиции (A, B), из совокупности опорных отсчетов, расположенных в буфере, определяют по меньшей мере в соответствии с размером буфера и/или блочным вектором (BVx, BVy).

На фиг. 19 представлена логическая схема примера способа обработки визуальных данных. Этапы этой логической схемы обсуждаются в соединении с Примером 23, обсуждаемым в Разделе 4 указанного документа. На этапе 1902, способ определяет, для преобразования между текущим видеоблоком текущего изображения визуальных медиаданных и представлением этих визуальных медиаданных в виде потока битов данных, является ли блочный вектор (BVx, BVy), соответствующий текущему видеоблоку, действительным, в соответствии с некоторым правилом, где этот блочный вектор (BVx, BVy) представляет смещение пикселей между текущим видеоблоком и блоком отсчетов. На этапе 1904, процедура осуществляет, с использованием указанного блочного вектора, преобразование на основе опорной области из текущего изображения, содержащей опорные отсчеты, используемые для формирования прогнозируемого блока для текущего видеоблока, где указанное правило, специфицирует, что блочный вектор (BVx, BVy) действителен в случае, когда (1) один или несколько отсчетов из рассматриваемого блока отсчетов находятся вне текущего изображения, и/или (2) один или несколько отсчетов из этого блока отсчетов находятся вне по меньшей мере одной единицы дерева кодирования (CTU), ассоциированной с текущим видеоблоком, и/или (3) один или несколько отсчетов из этого блока отсчетов реконструировать не удалось.

На фиг. 20 представлена логическая схема примера способа обработки визуальных данных. Этапы этой логической схемы обсуждаются в соединении с Примером 44, обсуждаемым в Разделе 4 указанного документа. На этапе 2002, способ осуществляет преобразование между текущим видеоблоком текущего изображения визуальных медиаданных и представлением этих визуальных медиаданных в виде потока битов данных, где это преобразование производится на основе опорной области из текущего изображения, содержащей опорные отсчеты, используемые для формирования прогнозируемого блока для текущего видеоблока, и где виртуальный буфер заданного размера используется для отслеживания доступности опорных отсчетов для формирования прогнозируемого блока.

На фиг. 21 представлена логическая схема примера способа обработки визуальных данных. Этапы этой логической схемы обсуждаются в соединении с Примером 51, обсуждаемым в Разделе 4 указанного документа. На этапе 2102, способ поддерживает, для преобразования между текущим видеоблоком текущего изображения визуальных медиаданных и представлением этих визуальных медиаданных в виде потока битов данных, буфер, содержащий опорные отсчеты из текущего изображения, для формирования прогнозируемого блока для текущего видеоблока, где один или несколько опорных отсчетов в буфере, которые маркированы как недоступные для формирования, имеют значения вне диапазона значений пикселей.

На фиг. 22 представлена логическая схема примера способа обработки визуальных данных. Этапы этой логической схемы обсуждаются в соединении с Примером 54, обсуждаемым в Разделе 4 указанного документа. На этапе 2202, способ осуществляет преобразование между текущим видеоблоком визуальных медиаданных и представлением этих визуальных медиаданных в виде потока битов данных с использованием буфера, содержащего опорные отсчеты из текущего изображения для формирования прогнозируемого блока для текущего видеоблока, где это преобразование производится в соответствии с правилом, специфицирующим, что для того, чтобы представление в виде потока битов данных соответствовало этому правилу, опорные отсчеты в буфере должны удовлетворять ограничению соответствия потока битов данных.

Некоторые варианты настоящего документа теперь будут представлены в формате статей.

L1. Способ обработки визуальных медиаданных, содержащий:

определение, для преобразования между текущим видеоблоком текущего изображения визуальных медиаданных и представлением этого текущего видеоблока в виде потока битов данных, блочного вектора (BVx,BVy), где действительность этого блочного вектора (BVx, BVy) не зависит от (1) позиции (P, Q) блока отсчетов, и/или (2) реконструирован ли отсчет, находящийся в позиции (P,Q), и/или (3) позиции текущего видеоблока, где указанный блочный вектор (BVx, BVy) представляет смещение пикселей между текущим видеоблоком и указанным блоком отсчетов; и

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

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

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

осуществление, с использованием указанного блочного вектора, указанного преобразования на основе опорной области из текущего изображения, содержащей опорные отсчеты, используемые для формирования прогнозируемого блока для текущего видеоблока, где указанное правило специфицирует, что блочный вектор (BVx, BVy) действителен в случае, когда (1) один или несколько отсчетов из рассматриваемого блока отсчетов находятся вне текущего изображения, и/или (2) один или несколько отсчетов из рассматриваемого блока отсчетов находятся вне по меньшей мере одной единицы дерева кодирования (CTU), ассоциированной с текущим видеоблоком, и/или (3) один или несколько отсчетов из рассматриваемого блока отсчетов не удалось реконструировать.

L3. Способ по статье L2, отличающийся тем, что, после идентификации, что блочный вектор (BVx, BVy) является действительным, прогнозируемый отсчет в позиции (A, B) из совокупности опорный отсчетов в буфере определяют по меньшей мере в соответствии с размером буфера и/или блочным вектором (BVx, BVy).

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

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

L6. Способ по какой-либо одной или нескольким из статей L1 – L5, отличающийся тем, что блочный вектор (BVx, BVy) определяют как действительный независимо от того, находится ли позиция (P, Q), вычисленная в соответствии с блочным вектором (BVx, BVy) и верхней левой позицией (x, y) текущего видеоблока, вне пределов границ изображения.

L7. Способ по статье L6, отличающийся тем, что блочный вектор (BVx, BVy) является действительным независимо от того, какое из неравенств является справедливым x+BVx<0 или x+BVx>0.

L8. Способ по статье L6, отличающийся тем, что блочный вектор (BVx, BVy) является действительным независимо от того, какое из неравенств является справедливым x+W+BVx > Wpic или x+W+BVx < Wpic , где W обозначает ширину текущего видеоблока и Wpic обозначает ширину изображения.

L9. Способ по статье L6, отличающийся тем, что блочный вектор (BVx, BVy) является действительным независимо от того, какое из неравенств является справедливым y+BVy<0 или y+BVy>0.

L10. Способ по статье L6, отличающийся тем, что блочный вектор (BVx, BVy) является действительным независимо от того, какое из неравенств является справедливым x+H+BVx > Hpic или x+H+BVx < Hpic , где H обозначает высоту текущего видеоблока и Hpic обозначает высоту изображения.

L11. Способ по какой-либо одной или нескольким из статей L1 – L5, отличающийся тем, что блочный вектор (BVx, BVy) является действительным независимо от того, находится ли позиция (P, Q), вычисленная в соответствии с блочным вектором (BVx, BVy) и верхней левой позицией (x, y) текущего видеоблока, вне единицы дерева кодирования, содержащей текущий видеоблок.

L12. Способ по статье L11, отличающийся тем, что блочный вектор (BVx, BVy) является действительным независимо от того, какое из неравенств является справедливым y+BVy<floor(y/Hctu)* Hctu или y+BVy>floor(y/Hctu)* Hctu, где Hctu обозначает высоту единицы дерева кодирования, и функция floor(a) равна наибольшему целому числу не больше a.

L13. Способ по статье L11, отличающийся тем, что блочный вектор (BVx, BVy) является действительным независимо от того, какое из неравенств является справедливым y+H+BVy<floor(y/Hctu)*Hctu или y+H+BVy>floor(y/Hctu)*Hctu, где H обозначает высоту текущего видеоблока, и Hctu обозначает высоту единицы дерева кодирования, и функция floor(a) равна наибольшему целому числу не больше a.

L14. Способ по какой-либо одной или нескольким из статей L1 – L5, отличающийся тем, что блочный вектор (BVx, BVy) является действительным независимо от того, находится ли позиция (P, Q), вычисленная в соответствии с блочным вектором (BVx, BVy) и верхней левой позицией (x, y) текущего видеоблока, вне единицы дерева кодирования, содержащей текущий видеоблок, и (n-1) единицами дерева кодирования в направлении влево.

L15. Способ по статье L14, отличающийся тем, что блочный вектор (BVx, BVy) является действительным независимо от того, какое из неравенств является справедливым x+BVx<floor(x/Wctu)*Wctu-(n-1)*Wctu или x+BVx>floor(X/Wctu)*Wctu-(n-1)*Wctu, где Wctu обозначает вес единицы дерева кодирования, и функция floor(a) равна наибольшему целому числу не больше a.

L16. Способ по статье L14, отличающийся тем, что блочный вектор (BVx, BVy) является действительным независимо от того, какое из неравенств является справедливым x+W+BVx>floor(X/Wctu)*Wctu+Wctu или x+W+BVx<floor(X/Wctu)*Wctu+Wctu, где W обозначает ширину текущего видеоблока, Wctu обозначает вес единицы дерева кодирования, и функция floor(a) равна наибольшему целому числу не больше a.

L17. Способ по какой-либо одной или нескольким из статей L1 – L5, отличающийся тем, что блочный вектор (BVx, BVy) является действительным независимо от того, находится ли позиция (P, Q), вычисленная в соответствии с блочным вектором (BVx, BVy) и верхней левой позицией (x, y) текущего видеоблока, за пределами текущей строки единиц CTU, включая текущую единицу дерева кодирования, содержащую текущий видеоблок.

L18. Способ по статье L17, отличающийся тем, что блочный вектор (BVx, BVy) является действительным независимо от того, какое из неравенств является справедливым Y+BVy<floor(Y/ Hctu)* Hctu или Y+H+BVy>=floor(Y/ Hctu)*Hctu+ Hctu, где, Wctu и Hctu обозначают ширину и высоту единицы CTU соответственно, и функция floor(a) равна наибольшему целому числу не больше a.

L19. Способ по какой-либо одной или нескольким из статей L1 – L5, отличающийся тем, что блочный вектор (BVx, BVy) определяют в качестве действительного независимо от того, удалось или нет реконструировать отсчет.

L20. Способ по статье L19, отличающийся тем, что блочный вектор (BVx, BVy) является действительным независимо от того, имеет ли функция isRec(x+BVx, y+ BVy) значение «ложно» (false), где функция isRec(x,y) имеет значение «истинно» (true), если пиксель в позиции (x,y) реконструируют в режиме внутрикадрового копирования блоков.

L21. Способ по статье L19, отличающийся тем, что блочный вектор (BVx, BVy) является действительным независимо от того, имеет ли функция isRec(x+BVx+W-1, y+BVy) значение «ложно», где isRec(x,y) имеет значение «истинно», если пиксель в позиции (x,y) реконструируют в режиме внутрикадрового копирования блоков, и W обозначает ширину текущего видеоблока.

L22. Способ по статье L19, отличающийся тем, что блочный вектор (BVx, BVy) является действительным независимо от того, имеет ли функция isRec(x+BVx, y+BVy+H-1) значение «ложно», где isRec(x,y) имеет значение «истинно», если пиксель в позиции (x,y) реконструируют в режиме внутрикадрового копирования блоков, и H обозначает высоту текущего видеоблока.

L23. Способ по статье L19, отличающийся тем, что блочный вектор (BVx, BVy) является действительным независимо от того, имеет ли функция isRec(x+BVx+W-1, y+BVy+H-1) значение «ложно», где isRec(x, y) имеет значение «истинно», если пиксель в позиции (x,y) реконструируют в режиме внутрикадрового копирования блоков, W обозначает ширину текущего видеоблока, и H обозначает высоту текущего видеоблока.

L24. Способ по какой-либо одной или нескольким из статей L1 – L5 отличающийся тем, что блочный вектор (BVx, BVy) определяют в качестве действительного независимо от того, входит ли текущий видеоблок в первую единицу дерева кодирования из строки единиц дерева кодирования.

L25. Способ по какой-либо одной или нескольким из статей L1 – L5, отличающийся тем, что блочный вектор (BVx, BVy) определяют в качестве действительного, когда удовлетворяются все следующие условия: (i) x + BVx >= 0, (ii) y + BVy >= floor(y / Hctu), и (iii) функция isRec(x + BVx + W - 1, y + BVy + H - 1) имеет значение «истинно», где функция isRec(x, y) имеет значение «истинно», если отсчет в точке (x, y) реконструируют в режиме внутрикадрового кодирования блоков, W обозначает ширину текущего видеоблока, H обозначает высоту текущего видеоблока, где функция floor(a) равна наибольшему целому числу не больше a.

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

L27. Способ по статье L3, отличающийся тем, что прогнозируемый отсчет, находящийся в позиции (A, B), определяют в соответствии с размером буфера, блочным вектором (BVx, BVy) и верхней левой позицией (x, y).

L28. Способ по статье L27, отличающийся тем, что прогнозируемый отсчет, находящийся в позиции (A, B), представляет собой прогнозируемый отсчет, находящийся в позиции, вычисленной в соответствии ((X+BVx)%Wbuf, (Y+BVy)%Hbuf), где Wbuf и Hbuf обозначают ширину буфера и высоту буфера, соответственно.

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

M1. Способ обработки визуальных медиаданных, содержащий:

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

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

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

M2. Способ по статье M1, отличающийся тем, что виртуальный буфер поддерживают с использованием единицы данных виртуального конвейера (VPDU), и отличающийся тем, что размер виртуального буфера равен m*WVPDU x n*HVPDU, где WVPDU и HVPDU обозначают ширину и высоту единицы VPDU.

M3. Способ по статье M2, отличающийся тем, что m=4 и n=2.

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

M5. Способ по статье M2, отличающийся тем, что m и/или n являются предварительно заданными значениями.

M6. Способ по статье M2, отличающийся тем, что m и/или n передают в виде сигнализации в форме полей в представлении в виде потока битов данных.

M7. Способ по статье M1, отличающийся тем, что отсчет в текущем видеоблоке отображают в точку (x%(m*WVPDU), y%(n*HVPDU)) в виртуальном буфере, где этот отсчет в текущем видеоблоке расположен в точке с координатами (x, y) относительно верхнего левого угла изображения; “x%y” определено как y = x – y*floor(x/y), где функция floor(a) равна наибольшему целому числу не больше a, и WVPDU и HVPDU обозначают ширину и высоту единицы VPDU.

M8. Способ по статье M1, дополнительно содержащий:

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

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

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

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

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

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

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

M15. Способ по статье M14, отличающийся тем, что, если yPrevVPDU%(n*HVPDU) равно 0, тогда подмножество отсчетов, расположенных в позициях (x, y), маркируют флагами в качестве недоступных, где x находится в первом заданном диапазоне и y находится во втором заданном диапазоне, где (xPrevVPDU, yPrevVPDU) обозначает верхний левый угол единицы дерева кодирования самой последней обработанной единицы VPDU, и WVPDU и HVPDU обозначают ширину и высоту единицы этой VPDU.

M16. Способ по статье M15, отличающийся тем, что первый диапазон выражен как [xPrevVPDU - 2WVPDU + 2mWVPDU)% mWVPDU, ((xPrevVPDU - 2*WVPDU + 2*m*WVPDU)% (m*WVPDU))-1+WVPDU], и второй диапазон выражен как [yPrevVPDU%(n*HVPDU), (yPrevVPDU%(n*HVPDU))-1+HVPDU].

M17. Способ по статье M15, отличающийся тем, что первый диапазон выражен как [xPrevVPDU - 2*WVPDU+ 2*m*WVPDU)% mWVPDU, ((xPrevVPDU - 2*WVPDU+ 2*m*WVPDU)% (m*WVPDU))-1+WVPDU], и второй диапазон выражен как [yPrevVPDU%(n*HVPDU), (yPrevVPDU%(n*HVPDU))-1+ HVPDU].

M18. Способ по статье M14, отличающийся тем, что, если yPrevVPDU%(n*HVPDU) не равно 0, тогда подмножество отсчетов, расположенных в позициях (x, y), отмечено флагами как недоступное, где x лежит в первом заданном диапазоне и y лежит во втором заданном диапазоне, где (xPrevVPDU, yPrevVPDU) обозначает верхний левый угол единицы дерева кодирования для самой последней обработанной единицы VPDU, и WVPDU и HVPDU обозначают ширину и высоту указанной единицы VPDU.

M19. Способ по статье M18, отличающийся тем, что первый диапазон выражен как [xPrevVPDU - WVPDU + 2*m*WVPDU)% (m*WVPDU), ((xPrevVPDU - WVPDU + 2*m*WVPDU)% (m*WVPDU))-1+WVPDU], и второй диапазон выражен как [yPrevVPDU%(n*HVPDU), (yPrevVPDU%(n*HVPDU))-1+ HVPDU].

M20. Способ по статье M18, отличающийся тем, что первый диапазон выражен как [xPrevVPDU - WVPDU + 2*m*WVPDU)% mWVPDU, ((xPrevVPDU - WVPDU + 2*m*WVPDU)% (m*WVPDU))-1+WVPDU], и второй диапазон выражен как [yPrevVPDU%(n*HVPDU), (yPrevVPDU%(n*HVPDU))-1+ HVPDU].

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

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

M23. Способ по какой-либо одной или нескольким из статей M1-M22, дополнительно содержащий:

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

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

N1. Способ обработки визуальных медиаданных, содержащий:

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

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

N2. Способ по статье N1, отличающийся тем, что указанный диапазон значений пикселей выражен как [0, 1<<(bit_depth) – 1], где bit_depth представляет собой положительное целое число.

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

N4. Способ по статье N1, отличающийся тем, что способ далее содержит:

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

N5. Способ по статье N4, отличающийся тем, что указанная заданное значение равна -1.

N6. Способ по какой-либо одной или нескольким из статей N4 – N5, отличающийся тем, что позиции указанного множества отсчетов и/или следует ли инициализировать это множество с заданным значением, основано на одном или нескольких из следующих факторов: позиции текущего видеоблока, размера текущего видеоблока, размера единицы VPDU, содержащей текущий видеоблок, и/или размера единицы дерева кодирования, содержащей текущей видеоблок.

N7. Способ по статье N6, отличающийся тем, что, если (xCb%vSize) равно 0 и (yCb%vSize) равно 0, указанное множество отсчетов маркируют как недоступные, где xCb, yCb обозначает позицию текущего видеоблока относительно указанного отсчета и vSize= min(ctbSize, 64), где ctbSize обозначает ширину или высоту единицы дерева кодирования.

N8. Способ по статье N1, отличающийся тем, что, если размер текущего блока меньше min(ctbSize, 64), указанное множество отсчетов в буфере маркируют как недоступные, где ctbSize обозначает ширину или высоту единицы дерева кодирования.

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

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

N11. Способ по статье N4, отличающийся тем, что указанное множество отсчетов в буфере имеют позиции, выраженные как (x%wIbcBuf, y%hIbcBuf), где x = xV, …,xV+ctbSize-1 и y=yV,…,yV+ctbSize-1, и xV, yV обозначают верхнюю левую позицию единицы VPDU относительно верхней левой позиции изображения, где ctbSize обозначает размер единицы дерева кодирования, и wIbcBuf и hIbcBuf обозначают ширину буфера и высоту буфера.

N12. Способ по статье N11, отличающийся тем, что указанное множество отсчетов в буфере инициализируют значением -1.

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

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

O1. Способ обработки визуальных медиаданных, содержащий:

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

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

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

O3. Способ по какой-либо одной или нескольким из статей O1 – O2, отличающийся тем, что указанное ограничение соответствия потока битов данных специфицирует, что представление в виде потока битов данных является несоответствующим, если рассматриваемый отсчет в буфере имеет значение вне диапазона пикселей.

O4. Способ по статье O3, отличающийся тем, что указанный диапазон имеет вид [K0, K1], где K0 установлено равным 0 и K1 устанавливают равным (1<<BitDepth-1), где BitDepth представляет уровень точности прогнозируемого отсчета.

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

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

O7. Способ по какой-либо одной или нескольким из статей O1 – O6, дополнительно содержащий:

маркировку информации о доступности отсчета в соответствии со значением этого отсчета в буфере.

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

O9. Способ по статье O8, отличающийся тем, что K0 устанавливают равным 0 и K1 устанавливают равным (1<<BitDepth-1), где BitDepth представляет уровень точности прогнозируемого отсчета.

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

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

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

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

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

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

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

XX. Декодирующее устройство для видео содержит процессор, конфигурированный для реализации способа в соответствии с какой-либо одной или нескольких статей L1 – XX.

XX. Читаемый компьютером носитель, имеющий записанный на нем код, где этот код содержит выполняемые процессором команды для реализации способа в соответствии с какой-либо одной или нескольких статей L1 – XX.

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

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

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

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

Процедуры и логические схемы, описываемые в настоящем документе, могут быть осуществлены одним или несколькими программируемыми процессорами, выполняющими одну или несколько компьютерных программ для реализации функций путем оперирования над входными данными и генерации выходных данных. Эти процедуры и логические схемы могут также быть осуществлены посредством, и аппаратура может также быть реализована в виде, логической схемы специального назначения, например, программируемой пользователем вентильной матрицы (FPGA (field programmable gate array)) или специализированной интегральной схемы (ASIC (application specific integrated circuit)).

К процессорам, подходящим для выполнения компьютерной программы, относятся, например, микропроцессоры общего и специального назначения и какие-либо один или несколько процессоров цифрового компьютера какого-либо типа. В общем случае, процессор будет принимать команды и данные из постоянного запоминающего устройства и/или из запоминающего устройства с произвольной выборкой. Основными элементами компьютера являются процессор для выполнения команд и одно или несколько запоминающих устройств для сохранения команд и данных. В общем случае, компьютер должен также содержать или быть оперативно связанным для приема данных и/или для передачи данных, с одним или несколькими запоминающими устройствами большой емкости для хранения данных, например, магнитными устройствами, магнитооптическими дисками или оптическими дисками. Однако компьютеру необязательно иметь такие устройства. К читаемым компьютером носителям для сохранения команд компьютерных программ и данных относятся все формы энергонезависимых запоминающих устройств и носителей информации, включая, например, полупроводниковые запоминающие устройства, например, стираемое, программируемое постоянное запоминающее устройство (СППЗУ (EPROM)), электрически стираемое программируемое запоминающее устройство (ЭСППЗУ (EEPROM)) и устройства флэш-памяти. Процессор и запоминающее устройство могут быть дополнены посредством или встроены в логическую схему специального назначения.

Настоящее описание вместе с прилагаемыми чертежами следует рассматривать только в качестве примеров. Как используется здесь, применение союза «или» должно также охватывать «и/или», если только контекст ясно не указывает иное.

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

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

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

Похожие патенты RU2811460C2

название год авторы номер документа
СПОСОБ УПРАВЛЕНИЯ БУФЕРОМ ДЛЯ РЕЖИМА ВНУТРИКАДРОВОГО КОПИРОВАНИЯ БЛОКОВ ПРИ КОДИРОВАНИИ ВИДЕО 2020
  • Сюй, Цзичжэн
  • Чжан, Ли
  • Чжан, Кай
  • Лю, Хунбинь
  • Ван, Юэ
RU2811022C2
ИДЕНТИФИКАЦИЯ ОТСЧЕТОВ ДЛЯ РЕЖИМА ВНУТРИКАДРОВОГО КОПИРОВАНИЯ БЛОКОВ ПРИ КОДИРОВАНИИ ВИДЕО 2020
  • Сюй, Цзичжэн
  • Чжан, Ли
  • Чжан, Кай
  • Лю, Хунбинь
  • Ван, Юэ
RU2811517C2
ОГРАНИЧЕНИЯ ПРИМЕНИМОСТИ КРОСС-КОМПОНЕНТНОГО РЕЖИМА 2020
  • Дэн, Чжипинь
  • Чжан, Ли
  • Лю, Хунбинь
  • Чжан, Кай
  • Сюй, Цзичжэн
RU2816350C2
СПОСОБ ОПРЕДЕЛЕНИЯ ПАРАМЕТРОВ В КРОСС-КОМПОНЕНТНОМ РЕЖИМЕ 2020
  • Дэн, Чжипинь
  • Чжан, Ли
  • Лю, Хунбинь
  • Чжан, Кай
  • Сюй, Цзичжэн
RU2817006C2
ОГРАНИЧЕНИЕ СОПОСТАВЛЕНИЯ ДЛЯ ВИРТУАЛЬНОГО БУФЕРА ВНУТРИБЛОЧНОГО КОПИРОВАНИЯ 2020
  • Сюй, Цзичжэн
  • Чжан, Ли
  • Чжан, Кай
  • Лю, Хунбинь
RU2818521C2
СПОСОБ КОНТЕКСТНО-ЗАВИСИМОГО КОДИРОВАНИЯ ДЛЯ РЕЖИМА С ПРОПУСКОМ ПРЕОБРАЗОВАНИЯ 2020
  • Чжу, Вэйцзя
  • Чжан, Ли
  • Сюй, Цзичжэн
RU2817139C2
ВЗАИМОДЕЙСТВИЕ МЕЖДУ ВНУТРИКОНТУРНЫМ ПЕРЕФОРМИРОВАНИЕМ И ИНСТРУМЕНТАМИ ДЛЯ МЕЖКАДРОВОГО КОДИРОВАНИЯ 2020
  • Чжан, Ли
  • Чжан, Кай
  • Лю, Хунбинь
  • Сюй, Цзичжэн
  • Ван, Юэ
RU2806282C2
ПЕРЕДАЧА СИГНАЛИЗАЦИИ С ИНФОРМАЦИЕЙ О ВНУТРИКОНТУРНОМ ПЕРЕФОРМИРОВАНИИ С ИСПОЛЬЗОВАНИЕМ НАБОРА ПАРАМЕТРОВ 2020
  • Чжан, Ли
  • Чжан, Кай
  • Лю, Хунбинь
  • Сюй, Цзичжэн
  • Ван, Юэ
RU2808682C2
СПОСОБ ОПРЕДЕЛЕНИЯ РЕЖИМА КОДИРОВАНИЯ НА ОСНОВЕ ЦВЕТОВОГО ФОРМАТА 2020
  • Сюй, Цзичжэн
  • Дэн, Чжипинь
  • Чжан, Ли
  • Лю, Хунбинь
  • Чжан, Кай
RU2816857C2
СПОСОБ ЗАПОЛНЕНИЯ ОТСЧЕТОВ ПРИ АДАПТИВНОЙ КОНТУРНОЙ ФИЛЬТРАЦИИ 2020
  • Чжан, Ли
  • Чжан, Кай
  • Лю, Хунбинь
  • Ван, Юэ
RU2815441C2

Иллюстрации к изобретению RU 2 811 460 C2

Реферат патента 2024 года ВИРТУАЛЬНЫЙ БУФЕР ДЛЯ ПРОГНОЗИРОВАНИЯ ПРИ КОДИРОВАНИИ ВИДЕО В РЕЖИМЕ ВНУТРИКАДРОВОГО КОПИРОВАНИЯ БЛОКОВ

Изобретение относится к кодированию и декодированию изображений. Технический результат заключается в повышении эффективности кодирования и декодирования изображений. Такой результат обеспечивается за счет того, что выполняют преобразование между текущим видеоблоком текущего изображения визуальных медиаданных и представлением визуальных медиаданных в виде потока битов данных. Преобразование основано на опорной области из текущего изображения, содержащей опорные отсчеты для формирования прогнозируемого блока для текущего видеоблока. Для отслеживания доступности опорных отсчетов для получения прогнозируемого блока используется виртуальный буфер заданного размера. 4 н. и 9 з.п. ф-лы, 22 ил., 2 табл.

Формула изобретения RU 2 811 460 C2

1. Способ обработки видеоданных, содержащий этапы, на которых:

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

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

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

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

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

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

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

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

2. Способ по п.1, в котором размер виртуального буфера составляет mхW х nхH, где W обозначает ширину виртуальной единицы, H обозначает высоту виртуальной единицы, и m и n являются целыми числами.

3. Способ по п.2, в котором значения m и n зависят от размера блока дерева кодирования.

4. Способ по п.3, в котором m=4 и n=2.

5. Способ по п.1, в котором поднабор опорных отсчетов расположен в позициях (x, y) в виртуальном буфере, причем x находится в первом заданном диапазоне в виртуальном буфере, определяемом на основе x0, а y находится во втором заданном диапазоне в виртуальном буфере, определяемом на основе y0, где (x0, y0) обозначает верхний левый угол виртуальной единицы.

6. Способ по п.5, в котором первый заданный диапазон и второй заданный диапазон дополнительно определяются на основе Vsize.

7. Способ по п.1, в котором виртуальный буфер сбрасывается перед кодированием изображения или слайса.

8. Способ по п.1, в котором на этапе преобразования кодируют текущий видеоблок в поток битов данных.

9. Способ по п.1, в котором на этапе преобразования декодируют текущий видеоблок из потока битов данных.

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

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

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

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

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

выполнения преобразования по меньшей мере на основе прогнозируемого блока,

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

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

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

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

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

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

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

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

выполнения преобразования по меньшей мере на основе прогнозируемого блока,

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

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

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

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

13. Способ сохранения потока битов данных видео, содержащий этапы, на которых:

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

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

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

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

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

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

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

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

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

Документы, цитированные в отчете о поиске Патент 2024 года RU2811460C2

US 20190191167 A1, 20.06.2019
WO 2008067734 A1, 12.06.2008
US 8295361 B2, 23.10.2012
US 20160227222 A1, 04.08.2016
US 20160330474 A1, 10.11.2016
WO 2019017694 A1, 24.01.2019
US 20180160122 A1, 07.06.2018
УПРАВЛЕНИЕ БУФЕРОМ ДЕКОДИРОВАННЫХ ИЗОБРАЖЕНИЙ 2012
  • Ван Е-Куй
  • Чэнь Ин
RU2587420C2

RU 2 811 460 C2

Авторы

Сюй, Цзичжэн

Чжан, Ли

Чжан, Кай

Лю, Хунбинь

Ван, Юэ

Даты

2024-01-11Публикация

2020-07-01Подача