КОДЕР, ДЕКОДЕР И СООТВЕТСТВУЮЩИЕ СПОСОБЫ, ИСПОЛЬЗУЮЩИЕ СПИСОК НА СЛИЯНИЕ ВНУТРИКАДРОВОГО КОПИРОВАНИЯ БЛОКОВ Российский патент 2023 года по МПК H04N19/52 H04N19/593 H04N19/513 

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

Область техники, к которой относится изобретение

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

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

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

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

Сущность изобретения

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

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

Первый вариант изобретения раскрывает способ построения списка на слияние кандидатов для режима внутрикадрового копирования блоков (Intra block copy, IBC), где упомянутый способ содержит этапы, на которых:

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

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

вставляют блочный вектор последнего кандидата в предикторе вектора движения, основанного на архивных данных, (history based motion vector predictor, HMVP) в начальный список на слияние, когда блочный вектор вышеупомянутого соседнего блока не является таким же, как блочный вектор последнего кандидата в HMVP и когда блочный вектор левого соседнего блока не является таким же, как блочный вектор последнего кандидата в HMVP.

Второй вариант изобретения раскрывает способ построения списка кандидатов на слияние для режима кандидата для режима внутрикадрового копирования блоков (Intra block copy, IBC), причем упомянутый способ содержит этапы, на которых:

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

вставляют блочный вектор последнего кандидата в предикторе вектора движения, основанного на архивных данных, (history based motion vector predictor, HMVP) в начальный список на слияние, когда блочный вектор соседнего блока не является таким же, как блочный вектор последнего кандидата в HMVP;

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

Третий вариант изобретения раскрывает способ построения списка возможных блоков на слияние для режима внутрикадрового копирования блоков предсказания (Intra block copy, IBC), где упомянутый способ содержит этапы, на которых:

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

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

вставляют блочный вектор последнего кандидата в основанном на архивных данных предикторе вектора движения (history based motion vector predictor, HMVP) в начальный список на слияние, когда блочный вектор вышеупомянутого соседнего блока не является таким же, как блочный вектор последнего кандидата в HMVP и когда блочный вектор левого соседнего блока не является таким же, как блочный вектор последнего кандидата в HMVP;

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

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

Четвертый вариант изобретения раскрывает способ построения списка кандидатов на слияние для режима внутрикадрового копирования блоков (Intra block copy, IBC), причем упомянутый способ содержит этапы, на которых:

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

вставляют блочный вектор кандидата в предикторе вектора движения, основанного на архивных данных, (history based motion vector predictor, HMVP) в начальный список на слияние, когда блочный вектор соседнего блока является не таким же, как блочный вектор последнего кандидата в HMVP;

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

Пятый вариант изобретения раскрывает способ построения списка кандидатов на слияние для режима внутрикадрового копирования блоков (Intra block copy, IBC), причем упомянутый способ содержит этапы, на которых:

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

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

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

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

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

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

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

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

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

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

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

Девятый вариант изобретения раскрывает декодер или кодер, содержащий:

один или несколько процессоров; и

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

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

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

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

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

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

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

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

фиг. 4 - блок-схема примера устройства кодирования или устройства декодирования;

фиг. 5 - блок-схема другого примера устройства кодирования или устройства декодирования;

фиг. 6 - блок-схема примера соседних блоков текущего блока;

фиг. 7 - пример варианта осуществления настоящей заявки;

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

фиг. 9 - блок-схема структуры примера оконечного устройства.

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

Подробное описание вариантов осуществления

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

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

Видеокодирование обычно относится к обработке последовательности изображений, которые формируют видео или видеопоследовательность. Вместо термина “изображение” (picture) в области видеокодирования в качестве синонима может использоваться термин “кадр” (frame) или “изображение” (image). Видеокодирование (или, в общем, кодирование) содержит две части: видеокодирование и видеодекодирование. Видеокодирование выполняется на стороне источника данных, обычно содержит обработку (например, сжатие) исходных видеоизображений для сокращения объема данных, требуемого для представления видеоизображений (для более эффективного хранения и/или передачи данных). Видеодекодирование выполняется на стороне места назначения и обычно содержит обратную обработку по сравнению с кодером для реконструирования видеоизображений. Варианты осуществления, относящиеся к “кодированию” видеоизображений (или изображений, в целом), должны пониматься как относящиеся к “кодированию” или “декодированию” видеоизображений или соответствующих видеопоследовательностей. Сочетание части кодирования и части декодирования также упоминается как CODEC (Coding and Decoding, кодирование и декодирование).

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

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

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

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

Как показано на фиг. 1A, система 10 кодирования содержит устройство 12 источника данных, выполненное с возможностью предоставления кодированных данных 21 изображения, например, устройству 14 назначения, для декодирования кодированных данных 13 изображения. Устройство 12 источника данных содержит кодер 20 и может дополнительно, т.е. необязательно, содержать источник 16 изображения, предпроцессор (или блок предварительной обработки) 18, например, предпроцессор 18 изображения, и интерфейс связи или блок 22 связи.

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

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

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

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

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

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

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

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

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

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

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

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

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

Дисплей 34 устройства 14 назначения выполнен с возможностью приема постобработанных данных 33 изображения для отображения изображения, например, пользователю или наблюдателю. Дисплей 34 может быть или содержать любого рода дисплей для представления реконструированного изображения, например, интегрированный или внешний дисплей или монитор. Дисплеи могут, например, содержать жидкокристаллические дисплеи (liquid crystal display, LCD), дисплеи органические светодиодные дисплеи (organic light emitting diode, OLED), плазменные дисплеи, проекторы, микросветодиодные дисплеи, кремниевые жидкокристаллические дисплеи (LCoS), цифровой оптический процессор (digital light processor, DLP) или дисплей любого другого рода.

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

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

Кодер 20 (например, видеокодер 20) или декодер 30 (например, видеодекодер 30) или кодер 20 и декодер 30 вместе могут быть реализованы схемой обработки, как показано на фиг. 1B, такой как один или более микропроцессоров, цифровые сигнальные процессоры (digital signal processor, DSP), специализированные интегральные схемы (application-specific integrated circuit, ASIC), программируемые логические интегральные схемы (field-programmable gate array, FPGA), дискретная логика, аппаратные средства, специализированные устройства видеокодирования или любые их сочетания. Кодер 20 может быть реализован схемой 45 обработки для реализации различных модулей, как обсуждалось в отношении кодера 20, показанного на фиг. 2, и/или любой другой системой или подсистемой кодера, описанных здесь. Декодер 30 может быть реализован схемой 46 обработки для реализации различных модулей, как обсуждалось в отношении декодера 30 на фиг. 3, и/или любой другой системой или подсистемой декодера, описанных здесь. Схема обработки может быть выполнена с возможностью реализации различных операций, как обсуждается позже. Как показано на фиг. 5, если технологии реализуются частично программным обеспечением, устройство может хранить команды программного обеспечения на сответствующем непереносном считываемом компьютером носителе и может исполнять команды на аппаратных средствах с помощью одного или нескольких процессоров для выполнения технологий этого раскрытия. Любой из видеокодера 20 или видеодекодера 30 может быть интегрирован как часть объединенного кодера/декодера (encoder/decoder, CODEC) в едином устройстве, например, как показано на фиг. 1B.

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

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

Для удобства описания варианты осуществления изобретения описываются здесь, например, со ссылкой на высокоэффективное видеокодирование (High-Efficiency Video Coding, HEVC) или на справочное программное обеспечение универсального видеокодирования (Versatile Video coding, VVC), стандарт видеокодирования следующего поколения, разработанный совместной группой экспертов по видеокодированию (Joint Collaboration Team on Video Coding, JCT-VC) экспертной группы по видеокодированию (Video Coding Experts Group, VCEG) ITU-T и экспертной группы по цифровой записи в кинематографии (Motion Picture Experts Group, MPEG) ISO/IEC. Каждый из специалистов в данной области техники должен понимать, что варианты осуществления изобретения не ограничиваются HEVC или VVC.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Квантование

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

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

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

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

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

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

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

Реконструкция

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

Фильтрация

Блок 220 контурного фильтра (или, сокращенно, “контурный фильтр” 220), выполнен с возможностью фильтрации реконструированного блока 215, чтобы получить отфильтрованный блок 221, или, в целом, фильтрации реконструированных выборок для получения отфильтрованных выборок. Блок контурного фильтра, например, выполнен с возможностью сглаживания переходов между пикселями или какого-либо иного улучшения видеокачества. Блок 220 контурного фильтра может содержать один или более контурных фильтров, таких как деблокирующий фильтр, фильтр смещения с адаптацией выборки (sample-adaptive offset, SAO) или один или несколько других фильтров, например, двунаправленный фильтр, адаптивный контурный фильтр (adaptive loop filter, ALF), фильтры увеличения резкости, сглаживания или совместные фильтры или любое их сочетание. Хотя блок 220 контурного фильтра показан на фиг. 2 как контурный фильтр, в других конфигурациях блок 220 контурного фильтра может быть реализован как постконтурный фильтр. Отфильтрованный блок 221 может также упоминаться как отфильтрованный реконструированный блок 221.

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

Буфер декодированного изображения

Буфер 230 декодированного изображения (decoded picture buffer, DPB) может быть памятью, которая хранит опорные изображения, или, в целом, данные эталонных изображений, для кодирования видеоданных видеокодером 20. DPB 230 может быть образован любым из множества запоминающих устройств, таким как динамическая оперативная память (dynamic random access memory, DRAM), в том числе, синхронная DRAM (synchronous DRAM, SDRAM), магниторезистивная RAM (magnetoresistive RAM, MRAM), резистивная RAM (resistive RAM, RRAM) или другие типы устройств памяти. Буфер декодированного изображения (DPB) 230 может быть выполнен с возможностью хранения одного или более отфильтрованных блоков 221. Буфер 230 декодированного изображения может дополнительно быть выполнен с возможностью хранения других ранее отфильтрованных блоков, например, ранее реконструированных и отфильтрованных блоков 221, того же самого текущего изображения или других изображений, например, ранее реконструированных изображений, и может обеспечить полные ранее реконструированные, т.е. декодированные изображения (и соответствующие опорные блоки и выборки) и/или частично реконструированное текущее изображение (и соответствующие опорные блоки и выборки), например, для межкадрового предсказания. Буфер 230 декодированного изображения (DPB) может быть также выполнен с возможностью хранения одного или более нефильтрованных реконструированных блоков 215 или, в целом, нефильтрованных реконструированных выборок, например, если реконструированный блок 215 не фильтруется блоком 220 контурного фильтра или не используется никакая другая дополнительная обработанная версия реконструированных блоков или выборок.

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

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

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

Варианты осуществления блока 260 выбора режима могут быть выполнены с возможностью выбора разделения и режима предсказания (например, из тех, которые поддерживаются или доступны для блока 260 выбора режима), который обеспечивает наилучшее соответствие, или, другими словами, минимальный остаток (минимальный остаток означает лучшее сжатие для передачи или хранения), или минимальную служебную сигнализацию (минимальная служебная сигнализация означает лучшее сжатие или хранение) или который учитывает или уравновешивает их обоих. Блок 260 выбора режима может быть выполнен с возможностью определения режима разделения и предсказания, основываясь на оптимизации скорости-искажения (rate distortion optimization, RDO), т.е. выбора режима предсказания, обеспечивающего минимальное искажение при данной скорости. Такие термины, как “наилучший”, “минимальный”, “оптимальный” и т.д., в этом контексте не обязательно относятся, вообще, к “наилучшему”, “минимальному”, “оптимальному” и т.д., а могут также относиться к выполнению критерия завершения или выбора, такому как значения, превышающее или падающее ниже порога, или к другим ограничениям, потенциально ведущим к “субоптимальному выбору”, снижающему сложность и время обработки.

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

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

Разделение

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

Как упомянуто прежде, термин “блок”, как он используется здесь, может быть частью, в частности, квадратной или прямоугольной частью изображения. Со ссылкой, например, на HEVC и VVC, блок может быть или соответствовать блоку дерева кодирования (coding tree unit, CTU), блоку кодирования (coding unit, CU), блоку предсказания (prediction unit, PU) и блоку преобразования (transform unit, TU) и/или соответствующим блокам, например, блоку дерева кодирования (coding tree block, CTB), блоку кодирования (coding block, CB), блоку преобразования (transform block, TB) или блоку предсказания (prediction block, PB).

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

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

В вариантах осуществления, например, соответствующих самому последнему стандарту видеокодирования, разрабатываемому в настоящее время, который упоминается как универсальное видеокодирование (Versatile Video Coding, VVC), для разделения блока кодирования используют, например, разделение объединенных квадродерева и двоичного дерева (combined Quad-tree and binary tree, QTBT). В структуре блоков QTBT CU может иметь квадратную или прямоугольную форму. Например, блок дерева кодирования (coding tree unit, CTU) сначала делится посредством структуры квадродерева. Концевые вершины квадродерева дополнительно делятся посредством структуры двоичного дерева или троичного (или тройного) дерева. Концевые вершины дерева разделения называют блоками кодирования (coding unit, CU) и такая сегментация используется для процесса предсказания и преобразования без какого-либо дополнительного разделения. Это означает, что в структуре блока кодирования QTBT блоки CU, PU и TU имеют один и тот же размер блока. Параллельно могут использоваться мультиразделение, например, разделение тройного дерева, используемое вместе со структурой блоков QTBT.

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

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

Внутрикадровое предсказание

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

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

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

Межкадровое предсказание

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

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

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

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

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

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

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

Блок 270 энтропийного кодирования выполнен с возможностью применения, например, алгоритма или схемы энтропийного кодирования (например, схемы кодирования переменной длины (variable length coding, VLC), схемы контекстного адаптивного VLC (context adaptive VLC, CAVLC), контекстного адаптивного двоичного арифметического кодирования (context adaptive binary arithmetic coding, CABAC), основанного на синтаксисе контекстного адаптивного двоичного арифметического кодирования (syntax-based context-adaptive binary arithmetic coding, SBAC), энтропийного кодирования с разделением интервала вероятности (probability interval partitioning entropy, PIPE) или другой методологии или технологии энтропийного кодирования) или обхода (без сжатия) квантованных коэффициентах 209, параметров межкадрового предсказания, параметров внутрикадрового предсказания, параметров контурного фильтра и/или других элементов синтаксиса для получения кодированных данных 21 изображения, которые могут быть выведены через выход 272, например, в форме кодированного битового потока 21, так чтобы, например, видеодекодер 30 мог принимать и использовать параметры для декодирования. Кодированный битовый поток 21 может передаваться видеодекодеру 30 или храниться в памяти для передачи в дальнейшем или извлечения видеодекодером 30.

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

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

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

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

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

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

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

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

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

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

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

Реконструкция

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

Фильтрация

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

Буфер декодированного изображения

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

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

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

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

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

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

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

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

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

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

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

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

ux = (mvx+2bitDepth) % 2bitDepth (1) mvx = (ux> = 2bitDepth-1) ? (ux − 2bitDepth): ux (2) uy = (mvy+2bitDepth) % 2bitDepth (3) mvy = (uy> = 2bitDepth-1) ? (uy − 2bitDepth): uy (4),

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

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

ux = (mvpx + mvdx +2bitDepth) % 2bitDepth (5) mvx = (ux> = 2bitDepth-1)? (ux − 2bitDepth): ux (6) uy = (mvpy + mvdy +2bitDepth) % 2bitDepth (7) mvy = (uy> = 2bitDepth-1)? (uy − 2bitDepth): uy (8)

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

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

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

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

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

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

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

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

Память 460 может содержать один или более дисков, ленточных накопителей и твердотельных дисков и может использоваться в качестве устройства хранения данных при переполнении для хранения программ, когда такие программы выбираются для исполнения, и хранения команд и данных, которые считываются во время исполнения программы. Память 460 может быть, например, энергозависимой и/или энергонезависимой и может быть постоянной памятью (read-only memory, ROM), оперативной памятью (random access memory, RAM), троичной контентно адресуемой памятью (ternary content-addressable memory, TCAM) и/или статической оперативной памятью (static random-access memory, SRAM).

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

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

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

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

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

Блок 244 межкадрового предсказания может содержать блок оценки движения (motion estimation, ME) и блок компенсации движения (motion compensation, MC) (не показаны на фиг. 2). Блок оценки движения выполнен с возможностью приема или получения блока 203 изображения (блока 203 текущего изображения из текущего изображения 201) и декодированного изображения 331, или по меньшей мере одного или более из ранее реконструированных блоков, например, реконструированных блоков одного или множества других/различных ранее декодированных изображений 331, для оценки движения. Например, видеопоследовательность может содержать текущее изображение и ранее декодированные изображения 331 или, другими словами, текущее изображение и ранее декодированные изображения 331 могут быть частью или формировать последовательность изображений, образующих видеопоследовательность. Кодер 200 может, например, быть выполнен с возможностью выбора опорного блока из множества опорных блоков одного и того же или различных изображений из множества других изображений и предоставления блоку оценки движения опорного изображения (или индекса опорного изображения, …) и/или смещения (пространственного смещения) между положением (координаты x, y) опорного блока и положением текущего блока в качестве параметров межкадрового предсказания (не показано на фиг. 2). Это смещение также называют вектором движения (motion vector, MV). Слияние является важным инструментом оценки движения, используемым в HEVC и передаваемым VVC.

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

a. до четырех пространственных кандидатов на слияние, которые получают из пяти пространственных соседних блоков;

b. один временный кандидат на слияние, полученный из двух временных, совмещенных блоков;

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

Первые кандидаты в списке кандидатов на слияние являются пространственными соседями. До четырех кандидатов вводятся в список на слияние путем последовательной проверки A1, B1, B0, A0 и B2, в таком порядке, в соответствии с правой частью фиг. 6.

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

В данном примере N является количеством пространственных кандидатов на слияние, полная проверка избыточности может содержать (N • (N-1))/2 сравнений данных движения. В случае пяти потенциальных пространственных кандидатов на слияние, необходимо десять сравнений данных о движении, чтобы гарантировать, что все кандидаты в списке на слияние имеют различные данные о движении. Во время разработки HEVC проверки на избыточные данные о движении были сокращены до субнабора способом, который сохраняет эффективность кодирования, в то время как логика сравнения значительно сокращается. В итоге выполняют не более двух сравнений на каждого кандидата, что приводит к пяти общим сравнениям. Учитывая порядок {A1, B1, B0, A0, B2}, B0 проверяет только B1, A0 проверяет только A1, и B2 проверяет только A1 и B1. В примере проверки на избыточность разделения нижний PU разделения 2N×N сливается с верхним PU посредством выбора кандидата B1. Это может привести к одному CU с двумя PU, имеющими одни и те же данные о движении, которые могут одинаково сообщаться как CU 2N×2N. В целом, эта проверка применяется для всех вторых PU прямоугольных и асимметричных частей 2N×N, 2N×nU, 2N×nD, N×2N, nR×2N и nL×2N. Заметим, что для пространственных кандидатов на слияние, выполняются только проверки на избыточность и данные о движении копируются из блоков возможных кандидатов. Следовательно, никакое масштабирование векторов движения здесь не требуется.

Получение векторов движения для временного кандидата на слияние совпадает с временным вектором предсказания движения (Temporal Motion Vector Prediction, TMVP). Поскольку кандидат на слияние содержит все данные о движении, а TMVP является только одним вектором движения (это означает, что при регулярном слиянии разрешается максимально только один кандидат TMVP), получение данных о движении зависит от типа сегмента. Для сегментов с двунаправленным предсказанием TMVP получают для каждого списка опорных изображений. В зависимости от доступности TMVP для каждого списка тип предсказания устанавливается как двунаправленное предсказание или как список, для которого доступен TMVP. Все связанные индексы опорных изображений устанавливаются равными нулю. Для сегментов с однонаправленным предсказанием TMVP для списка 0 получают вместе с индексом опорного изображения, равным нулю.

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

Для синтаксического анализа причин устойчивости фиксируется количество кандидатов в списке кандидатов на слияние. После того, как пространственные и временные кандидаты на слияние добавлены, список может быть неполным (количество кандидатов в списке кандидатов на слияние меньше фиксированного числа). Для компенсации потери эффективности кодирования, которая возникает при сигнализации индекса неполного адаптивного списка, формируются дополнительные кандидаты. В зависимости от типа сегмента используют до двух типов кандидатов, чтобы полностью заполнить список: a. Объединенные кандидаты с двунаправленным предсказанием; b. Кандидаты с нулевым вектором движения.

В сегментах с двунаправленным предсказанием дополнительные кандидаты могут формироваться на основе существующих, объединяя данные о движении списка 0 опорных изображений одного кандидата с данными о движении списка 1 другого кандидата. Это делается путем копирования Δx0, Δy0, Δt0 от одного кандидата, например, первого кандидата, и Δx1, Δy1, Δt1 от другого, например, второго кандидата. Определяются различные комбинации, которые приводятся в таблице 1.

Таблица 1

Порядок комбинации 0 1 2 3 4 5 6 7 8 9 10 11 Δx0, Δy0, Δt0 от кандидата 0 1 0 2 1 2 0 3 1 3 2 3 Δx0, Δy0, Δt0 от кандидата 1 0 2 0 2 1 3 0 3 1 3 2

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

Для каждого PU, кодированного в режиме межкадрового предсказания, флаг слияния merge_flag используют, чтобы указать, используется ли блок слияния для получения данных о движении. merge_idx используют для определения кандидата в список слияния, который обеспечивает данные о движении, необходимые для предсказания компенсированного движения (motion compensated prediction, MCP). Помимо сигнализации PU-уровня, количество кандидатов в список слияния сообщается в заголовке сегмента. В данном примере значение по умолчанию равняется пяти, оно представлено как разность до пяти (five_minus_max_num_merge_cand). Что касается процесса построения списка кандидатов на слияние,то весь процесс остается таким же, хотя он завершается после того, как в список включено максимальное количество кандидатов на слияние. При начальном построении максимальное значение кодирования индекса слияния задавалось количеством доступных пространственных и временных кандидатов в список. Когда доступны только два кандидата, индекс может эффективно кодироваться как флаг. Чтобы синтаксически проанализировать индекс слияния, должен быть построен весь список кандидатов на слияние, чтобы знать фактическое количество кандидатов.

Применение слияния блоков в HEVC объединяется с режимом пропуска. Режим пропуска используется для блока, чтобы указать, что в итоге данные о движении для блока получены, вместо того, чтобы их явно сообщать в битовом потоке, и что остаток предсказания для блока является нулевым, т.е. никакие коэффициенты преобразования не передаются. В HEVC в начале каждого CU в сегменте межкадрового изображения сообщают skip_flag, который подразумевает следующее: a. CU содержит только один PU (тип разделения 2N×2N); b. Режим слияния используется для получения данных о движении (merge_flag равен 1); c. В битовом потоке не присутствуют никакие остаточные данные.

Другой инструмент оценки движения, представленный в HEVC и присущий VVC, называют усовершенствованным предсказанием вектора движения (Advanced Motion Vector Prediction, AMVP). В режиме AMVP векторы движения кодируются с точки зрения горизонтальной (x) и вертикальной (y) составляющих как разности, получая в результате так называемый предиктор движения (motion predictor, MVP). Вычисление компонент разности векторов движения (motion vector difference, MVD) представляется как MVDx = MVx – MVPx, MVDy = MVy – MVPy.

Векторы движения текущего блока обычно коррелируются с векторами движения соседних блоков в текущем изображении или в ранее кодированных изображениях. Поскольку соседние блоки, вероятно, должны соответствовать одному и тому же движущемуся объекту с аналогичным движением, маловероятно, что движение объекта будет резко изменяться во времени. Следовательно, использование векторов движения в соседних блоках в качестве предикторов уменьшает размер сообщаемой разности векторов движения. MVP обычно получают из декодированных векторов движения от пространственных соседних блоков или от временно соседних блоков в совмещенном изображении. В HEVC используемый для получения вектора движения подход неявного извлечения MVP был заменен технологией, известной как конкуренция векторов движения, которая явно сообщает MVP из списка MVP. Переменная блочная структура квадродерева кодирования в HEVC может привести в результате к одному блоку, имеющему несколько соседних блоков с векторами движения в качестве потенциальных кандидатов MVP. Принимая левого соседа в качестве примера, в случае, когда блок предсказания яркости 64x64 может иметь слева 16 блоков предсказания яркости 8x4, когда блок дерева кодирования яркости 64x64 далее не делится, оставшийся блок делится на максимальную глубину. Усовершенствованное предсказание вектора движения (Advanced Motion Vector Prediction, AMVP) было введено для модификации конкуренции векторов движения, чтобы учесть такую гибкую блочную структуру. Во время разработки HEVC начальное построение AMVP было значительно упрощено, чтобы обеспечить хороший компромисс между эффективностью кодирования и построением удобной реализации.

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

до двух пространственных кандидатов MVP, которые получают из пяти пространственных соседних блоков;

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

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

При описании пространственных кандидатов технологический маршрут получения для двух пространственных кандидатов A и B показан на фиг. 13. Для кандидата A данные движения из этих двух блоков A0 и A1 в левом нижнем угле учитываются при подходе с двумя проходами. При первом проходе проверяют, содержит ли какой-либо из блоков кандидата опорный индекс, равный опорному индексу текущего блока. Первый найденный вектор движения будет принят в качестве кандидата A. Когда все опорные индексы от A0 и A1 указывают на опорное изображение, отличное от опорного индекса текущего блока, соответствующий вектор движения не может использоваться таким, как есть. Поэтому, при втором проходе векторы движения должны масштабироваться в соответствии с временными расстояниями между опорным изображением кандидата и текущим опорным изображением. Временное расстояние выражается в терминах разности между значениями подсчета порядка изображения (picture order count, POC), причем значения POC используются для определения порядка отображения изображений.

Для кандидата B, кандидаты B0-B2 проверяются последовательно таким же образом, что и A0 и A1. Второй проход, однако, выполняется, когда блоки A0 и A1 не содержат никакой информации о движении, т.е. недоступны или кодированы, используя внутрикадровое предсказание. Затем кандидат A устанавливают равным немасштабированному кандидату B, если он найден, и кандидат B устанавливают равным второму немасштабированному или масштабированному варианту кандидата B. Второй проход может быть закончен, когда все еще могут иметься потенциальные немасштабированные кандидаты, причем второй проход ищет немасштабированные, а также масштабированные MV, полученные от кандидатов B0-B2. В целом, такое построение позволяет обрабатывать A0 и A1 независимо от B0, B1 и B2. При получении B должно быть известно о доступности как A0, так и A1 для поиска масштабированного или дополнительного немасштабированного MV, полученного от B0-B2. Эта зависимость значительно сокращает сложные операции масштабирования вектора движения для кандидата B. Уменьшение количества масштабирований вектора движения представляет значительное снижение сложности процесса получения предиктора вектора движения.

В процессе выбора временного кандидата. Как можно видеть из фиг. 6, векторы движения от пространственных соседних блоков слева и выше текущего блока рассматривают как пространственные кандидаты MVP. Это может быть объяснено тем, что блоки справа и ниже текущего блока еще не декодированы и, следовательно, их данные о движении отсутствуют. Так как совмещенное изображение является опорным изображением, которое уже декодировано, можно также рассмотреть данные о движении от блока в том же самом положении, от блоков справа от совмещенного блока или от нижних блоков. В HEVC блок внизу справа и в центре текущего блока был определен как полностью пригодный для обеспечения хорошего предиктора временного вектора движения (temporal motion vector predictor, TMVP). Эти кандидаты показаны на фиг. 6, где C0 представляет нижнего правого соседа, а C1 представляет центральный блок. Данные о движении C0 считают первыми, если данные о движении C0 недоступны, данные о движении совмещенного блока кандидата в центре используются для получения кандидата C временного MVP. Данные о движении C0 также рассматривают как являющиеся недоступными, когда сопутствующий PU принадлежит CTU за пределами текущей строки CTU. Это минимизирует требования к пропускной способности памяти, чтобы хранить совмещенные данные о движении. В отличие от пространственных кандидатов MVP, где векторы движения могут обращаться к одному и тому же опорному изображению, масштабирование вектора движения является обязательным для TMVP.

Построение одновременно списка слияния и списка AMVP, предиктор вектора движения, основанного на архивных данных (history based motion vector predictor, HMVP), должен слиться или войти в список слияния AMVP. Кандидаты на слияние MVP, основанные на архивных данных, (history-based MVP, HMVP) добавляются в список на слияние/AMVP после пространственного MVP и TMVP. При этом способе информация о движении ранее кодированного блока сохраняется в таблице и используется в качестве MVP для текущего CU. Таблица с многочисленными кандидатами HMVP поддерживается во время процесса кодирования/декодирования. Таблица устанавливается в исходное состояние (опустошается), когда вставляется новая строка CTU. Каждый раз, когда существует несубблочный межкадрово кодированный CU, сопутствующая информация о движении добавляется к последней записи в таблице в качестве нового кандидата HMVP.

В VTM4 размер S таблицы HMVP устанавливается равным 6, что указывает, что к таблице может быть добавлено до 6 кандидатов HMVP. При вставке нового кандидата движения в таблицу используется ограниченное правило "первым пришел - первым вышел" (first-in-first-out, FIFO), в котором проверка избыточности сначала применяется для определения, имеется ли в таблице идентичный HMVP. Если идентичный HMVP в таблице существует, идентичный HMVP удаляется из таблицы и все кандидаты HMVP далее продвигаются вперед.

Кандидаты HMVP могут использоваться в списке кандидатов на слияние/процессе построения списка AMVP. Самые последние несколько кандидатов HMVP в таблице проверяются по порядку и вносятся в список кандидатов после кандидата TMVP. Проверка избыточности применяется на кандидатах HMVP для пространственного или временного кандидата на слияние.

Для сокращения количества операций по проверке избыточности вводятся следующие упрощения:

Количество кандидатов HMPV, используемых для формирования списка слияния, устанавливается как (N <= 4)? M: (8 – N), где N указывает количество существующих кандидатов в списке слияния и M указывает количество доступных кандидатов HMVP в таблице.

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

В проект VVC Draft, подобный режиму Inter, вводится режим IBC.

Копия блока с внутрикадровым предсказанием (Intra block copy, IBC) является инструментом, принятым в расширениях HEVC на SCC. Он значительно повышает эффективность кодирования материалов контента экрана. Так как режим IBC реализуется как режим кодирования на блочном уровне, совпадение блоков (block matching, BM) выполняется в кодере, чтобы найти оптимальный вектор блока (или вектор движения) для каждого CU. Здесь вектор движения используется для указания смещения от текущего блока к опорному блоку, который уже реконструирован внутри текущего изображения. Вектор движения яркости блока CU, кодированного с использованием IBC, обладает целочисленной точностью. Вектор движения цветности также отсекается с целочисленной точностью. При объединении с AMVR режим IBC может переключаться между 1-элементной точностью и 4-х элементной точностью вектора движения. CU, кодированный с использованием IBC, рассматривается как третий режим предсказания, отличный от внутрикадрового или межкадрового режимов.

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

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

В поиске, основанном на хеше, совпадение хеш-ключа (32-разрядный CRC) между текущим блоком и опорным блоком распространяется на все разрешенные размеры блоков. Вычисление хеш-ключа для каждого положения в текущем изображении основывается на субблоках 4x4. Для текущего блока большего размера хеш-ключ определяется так, чтобы он совпадал с хеш-ключом опорного блока, когда все хеш-ключи всех субблоков 4×4 совпадают с хеш-ключами в соответствующих опорных местоположениях. Если определено, что хеш-ключи множества ссылочных блоков совпадают с текущим блоком, вычисляют затраты векторных блоков для каждого из совпадающих опорных блоков и выбирают блок с минимальными затратами.

При поиске совпадения блоков диапазон поиска устанавливают равным N выборкам влево и вверх от текущего блока внутри текущего CTU. В начале CTU значение N инициализируют равным 128, если нет никакого временного опорного изображения, или инициализируют равным 64, если существует по меньшей мере одно временное опорное изображение. Показатель совпадений хеша определяют как процент выборок в CTU, для которых обнаружено совпадение при использовании поиска, основанного на хеше. При кодировании текущего CTU, если показатель совпадений хеша ниже 5%, N уменьшают наполовину.

На уровне CU режим IBC сообщают с помощью флага и он может сообщаться как режим IBC AMVP или режим пропуска/слияния IBC следующим образом:

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

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

Поскольку IBC ввел режим слияния/пропуска IBC и режим IBC AMVP, существует дополнительный список на слияние IBC и список AMVP, который будет создан в VVC Draft 4.0.

Поскольку только пространственные кандидаты (левый соседний блок A1, верхний соседний блок B1, левый нижний соседний блок A0, правый верхний соседний блок B0 и левый верхний соседний блок B2, показанные на фиг. 6), кандидаты HMVP (H1 … Hk, где k равен максимальному размеру списка HMVP) и попарные кандидаты используются при построении списка слияния IBC в VVC Draft 4.0, возможны следующие сокращения, выполняемые во время построения списка слияния IBC:

Сокращение между A1 и B1

Сокращение между A0 и A1

Сокращение между B0 и B1

Сокращение между B2 и A1

Сокращение между B2 и B1

Сокращение между последним кандидатом Hk HMVP и A1

Сокращение между последним кандидатом Hk HMVP и B1

Сокращение между предпоследним кандидатом Hk-1 HMVP и A1

Сокращение между предпоследним кандидатом Hk-1 HMVP и B1

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

В итоге, для построения списка слияния IBC текущего блока максимально необходимо 9 сокращений.

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

Решение 1

Далее, левый (A1) и верхний (В1) пространственные соседние блоки важны для предсказания текущего блока, используя режим IBC. В решении 1 сокращение пространственных соседних блоков между A1 и B1 сохраняется, остальное сокращение пространственных соседних блоков удаляется. Сокращение кандидатов HMVP сохраняется. В варианте осуществления возможны следующие сокращения, выполняемые во время построения списка слияния IBC:

Сокращение между A1 и B1

Сокращение между последним кандидатом Hk HMVP и A1

Сокращение между последним кандидатом Hk HMVP и B1

Сокращение между предпоследним кандидатом Hk-1 HMVP и A1

Сокращение между предпоследним кандидатом Hk-1 HMVP и B1.

В этом случае, максимальное количество сокращений для построения списка кандидатов на слияние IBC уменьшается с 9 до 5. Решение значительно снижает сложность построения списка слияния IBC как для кодера, так и для декодера.

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

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

Если соседний блок B1 доступен и использует режим IBC, сокращают (или определяют), является ли блочный вектор B1 тем же самым, что и A1. Если блочный вектор B1 не является таким же, как блочный вектор A1, блочный вектор блока B1 вставляют в список кандидатов на слияние IBC текущего блока. В противном случае (блочный вектор B1 является таким же, как блочный вектор A1, или B1 недоступен или B1 не использует режим IBC), блочный вектор блока B1 не вставляют в список кандидатов на слияние IBC текущего блока (сокращение А1 и B1).

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

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

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

Если последний кандидат Hk HMVP доступен и использует режим IBC и текущий размер списка кандидатов на слияние IBC меньше значения, равного максимальному количеству кандидатов на слияние IBC минус один; и блочный вектор Hk не такой же, как A1 и B1, вставляют блочный вектор Hk в список кандидатов на слияние IBC текущего блока. В противном случае (Hk недоступен или Hk не использует режим IBC, или текущий размер списка кандидатов на слияние IBC не меньше максимального количества кандидатов на слияние IBC минус один, или блочный вектор Hk является таким же, как блочный вектор A1, или блочный вектор Hk является таким же, как блочный вектор B1), не вставляют блочный вектор Hk в список кандидатов на слияние IBC текущего блока (сокращение Hk и A1, Hk и B1).

Если предпоследний кандидат Hk-1 HMVP доступен и использует режим IBC и текущий размер списка на слияние IBC меньше, чем значение, равное максимальному количеству кандидатов на слияние IBC минус один и блочный вектор Hk-1 является не таким же, как A1 и B1, вставляют блочный вектор Hk-1 в список кандидатов на слияние IBC текущего блока. В противном случае (Hk-1 недоступен или Hk-1 не использует режим IBC, или текущий размер списка кандидатов на слияние IBC не меньше, чем максимальное количество кандидатов на слияние IBC минус один, или блочный вектор Hk-1 является таким же, как блочный вектор A1, или блочный вектор Hk-1 является таким же, как блочный вектор B1), не вставляют блочный вектор блока Hk-1 в список кандидатов на слияние IBC текущего блока (сокращение Hk-1 и A1, Hk-1 и B1).

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

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

Решение 2

Далее, левый (A1) и верхний пространственные соседние блоки (B1) важны для предсказания текущего блока, используя режим IBC. В решении 2 пространственный соседний блок A1 и B1 сохраняют для введения в список кандидатов на слияние IBC, остальные кандидаты пространственного соседнего блока удаляются. Сокращение кандидатов HMVP сохраняют таким, как есть. В варианте осуществления последующее сокращение может выполняться во время построения списка слияния IBC:

Сокращение между A1 и B1

Сокращение между последним кандидатом Hk кандидата HMVP и A1

Сокращение между последним кандидатом Hk HMVP и B1

Сокращение между предпоследним кандидатом Hk-1 HMVP и A1

Сокращение между предпоследним кандидатом Hk-1 HMVP и B1

В этом случае максимальное количество сокращения для построения списка кандидатов на слияние IBC текущего блока уменьшается с 9 до 5. Решение значительно снижает сложность построения списка слияния IBC как для кодера, так и для декодера.

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

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

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

Если последний кандидат Hk HMVP доступен и использует режим IBC и размер текущего списка кандидатов на слияние IBC меньше, чем значение, равное максимальному количеству кандидатов на слияние IBC минус один, и блочный вектор Hk является не таким же, как A1 и B1, вставляют блочный вектор Hk в список кандидатов на слияние IBC текущего блока. В противном случае, (Hk недоступен или Hk не использует режим IBC, или текущий размер списка кандидатов на слияние IBC не меньше, чем максимальное количество кандидатов на слияние IBC минус один, или блочный вектор Hk является таким же, что и блочный вектор A1, или блочный вектор Hk является таким же как блочный вектор B1), не вставляют блочный вектор Hk в список кандидатов на слияние IBC текущего блока (сокращенно, Hk и A1, Hk и B1).

Если предпоследний кандидат Hk-1 HMVP доступен и использует режим IBC, и текущий размер списка кандидатов на слияние IBC меньше, чем значение, равное максимальному количеству кандидатов на слияние IBC минус один, и блочный вектор Hk-1 не такой же, как A1 и B1, вставляют блочный вектор Hk-1 в список кандидатов на слияние IBC текущего блока. В противном случае (Hk-1 недоступен или Hk-1 не использует режим IBC или текущий размер списка кандидатов на слияние IBC не меньше, чем максимальное количество кандидатов на слияние IBC минус один, или блочный вектор Hk-1 является таким же, как блочный вектор A1, или блочный вектор Hk-1 является таким же, как блочный вектор B1), не вставляют блочный вектор Hk-1 в список кандидатов на слияние IBC текущего блока (сокращение Hk-1 и A1, Hk-1 и B1).

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

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

Решение 3

В соответствии с решением 3, сокращение векторов блока пространственного соседнего блока остается таким же. Для сокращения кандидатов HMVP блочный вектор последнего кандидата Hk HMVP сокращается с помощью пространственного соседнего блока A1 и B1 векторного блока. Сокращение остальных кандидатов HMVP удаляют. В варианте осуществления возможно нижеследующее сокращение, выполняемое во время построения списка слияния IBC:

Сокращение между A1 и B1

Сокращение между A0 и A1

Сокращение между B0 и B1

Сокращение между B2 и A1

Сокращение между B2 и B1

Сокращение между последним кандидатом Hk HMVP и A1

Сокращение между последним кандидатом Hk HMVP и B1.

В этом случае максимальное количество сокращения для построения списка кандидатов на слияние IBC уменьшается с 9 до 7. Решение значительно снижает сложность построения списка слияния IBC как для кодера, так и для декодера.

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

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

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

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

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

Если соседний блок B2 доступен и использует режим IBC и текущий размер списка слияния IBC меньше 4, сокращают (или определяют), является ли блочный вектор B2 таким же, как A1, и является ли блочный вектор B2, таким же, как B1. Если блочный вектор B2 не такой же, как блочный вектор A1, и блочный вектор B2 не такой же как B1, вставляют блочный вектор блока B2 в список кандидатов на слияние IBC текущего блока. В противном случае (блочный вектор B2 такой же, как блочный вектор A1 или B1 или B0 недоступен или B0 не использует режим IBC), не вставляют блочный вектор блока B0 в список кандидатов на слияние IBC текущего блока (сокращение B2 и A1 и сокращение B2 B1).

Если последний кандидат Hk HMVP доступен и использует режим IBC и текущий размер списка размер списка кандидатов IBC меньше, чем значение, равное максимальному количеству кандидатов на слияние IBC минус один, и блочный вектор Hk не такой же как A1 и B1, вставляют блочный вектор Hk в список кандидатов на слияние IBC текущего блока. В противном случае (Hk недоступен или Hk не использует режим IBC или текущий размер списка кандидатов на слияние IBC не меньше, чем максимальное количество кандидатов на слияние IBC минус один, или блочный вектор Hk является таким же, как блочный вектор A1, или блочный вектор Hk является таким же, как блочный вектор B1), не вставляют блочный вектор Hk в список кандидатов на слияние IBC текущего блока (сокращение Hk и A1, Hk и B1).

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

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

Решение 4

В соответствии с решением 4, сокращение векторного блока для пространственного соседнего блока остается тем же самым. Для сокращения кандидатов HMVP блочный вектор последнего кандидата Hk HMVP и предпоследний кандидат Hk-1 HMVP сокращают с помощью пространственного соседнего блока A1 векторного блока. Остальные сокращения кандидатов HMVP удаляются. В варианте осуществления возможно нижеследующее сокращение, выполняемое во время построения списка слияния IBC:

Сокращение между А1 и В1

Сокращение между А0 и А1

Сокращение между В0 и В1

Сокращение между В2 и А1

Сокращение между В2 и В1

Сокращение между последним кандидатом Hk HMVP и A1

Сокращение между последним кандидатом Hk-1 HMVP и A1

В этом случае максимальное количество сокращений для построения списка кандидатов на слияние IBC уменьшается с 9 до 7. Решение значительно снижает сложность построения списка слияния IBC как для кодера, так и для декодера.

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

Если соседний блок A1 доступен и использует режим IBC, вставляют блочный вектор блока A1 в список кандидатов на слияние IBC текущего блока. В противном случае (A1 недоступен или А1 не использует режим IBC), не вставляют блочный вектор блока A1 в список кандидатов на слияние IBC текущего блока (первый кандидат, без сокращения).

Если соседний блок B1 доступен и использует режим IBC, сокращают (или определяют), является ли векторный блок В1 таким же, как А1. Если блочный вектор B1 не такой же, как блочный вектор A1, вставляют блочный вектор B1 в список кандидатов на слияние IBC текущего блока. В противном случае (блочный вектор B1 не такой же, как блочный вектор A1, или B1 недоступен или B1 не использует режим IBC), не вставляют блочный вектор блока A1 в список кандидатов на слияние IBC текущего блока (сокращение A1 и B1).

Если соседний блок B0 доступен и использует режим IBC, сокращают (или определяют), является ли векторный блок В0 таким же, как B1. Если блочный вектор B0 не такой же, как блочный вектор B1, вставляют блочный вектор блока B0 в список кандидатов на слияние IBC текущего блока. В противном случае (блочный вектор B0 такой же, как блочный вектор B1, или B0 недоступен или B0 не использует режим IBC), не вставляют блочный вектор блока B0 в список кандидатов на слияние IBC текущего блока (сокращение B0 и B1).

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

Если соседний блок B2 доступен и использует режим IBC и текущий размер списка слияния IBC меньше 4, сокращают (или определяют), является ли векторный блок В2 таким же, как А1, и является ли блочный вектор B2 таким же, как B1. Если блочный вектор B2 не такой же, как блочный вектор A1, и блочный вектор B2 не такой же, как B1, вставляют блочный вектор B2 в список кандидатов на слияние IBC текущего блока. В противном случае, (блочный вектор B2 такой же, как блочный вектор A1 или B1, или B0 недоступен или B0 не использует режим IBC), не вставляют блочный вектор блока B0 в список кандидатов на слияние IBC текущего блока (сокращение B2 и A1 и сокращение B2 и B1).

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

Если последний кандидат Hk-1 HMVP доступен и использует режим IBC и текущий размер списка кандидатов на слияние IBC меньше значения, равного максимальному количеству кандидатов на слияние IBC минус один, и блочный вектор Hk-1 не такой же, как A1, вставляют блочный вектор Hk-1 в список кандидатов на слияние IBC текущего блока. В противном случае (Hk-1 недоступен или Hk-1 не использует режим IBC или текущий размер списка кандидатов на слияние IBC не меньше значения, равного максимальному количеству кандидатов на слияние IBC минус один, или блочный вектор Hk-1 такой же, как блочный вектор A1), не вставляют блочный вектор Hk-1 в список кандидатов на слияние IBC текущего блока (сокращение Hk-1 и B1).

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

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

Решение 5

В соответствии с решением 5, сокращение векторного блока для пространственного соседнего блока остается тем же самым. Для сокращения кандидатов HMVP блочный вектор последнего кандидата Hk HMVP и предпоследний кандидат Hk-1 HMVP сокращают с помощью пространственного соседнего блока B1 векторного блока. Остальные сокращения кандидатов HMVP удаляют. В варианте осуществления возможно нижеследующее сокращение, выполняемое во время построения списка слияния IBC:

Сокращение между А1 и В1

Сокращение между А0 и А1

Сокращение между В0 и В1

Сокращение между В2 и А1

Сокращение между В2 и В1

Сокращение между последним кандидатом Hk HMVP и B1

Сокращение между последним кандидатом Hk-1 HMVP и B1

В этом случае максимальное количество сокращений для построения списка кандидатов на слияние IBC уменьшается с 9 до 7. Решение значительно снижает сложность построения списка слияния IBC как для кодера, так и для декодера.

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

Если соседний блок A1 доступен и использует режим IBC, вставляют блочный вектор блока A1 в список кандидатов на слияние IBC текущего блока. В противном случае (A1 недоступен или А1 не использует режим IBC), не вставляют блочный вектор блока A1 в список кандидатов на слияние IBC текущего блока (первый кандидат, без сокращения).

Если соседний блок B1 доступен и использует режим IBC, сокращают (или определяют), является ли векторный блок В1 таким же, как А1. Если блочный вектор B1 не такой же, как блочный вектор A1, вставляют блочный вектор B1 в список кандидатов на слияние IBC текущего блока. В противном случае, (блочный вектор B1 не такой же, как блочный вектор A1, или B1 недоступен или B1 не использует режим IBC), не вставляют блочный вектор блока A1 в список кандидатов на слияние IBC текущего блока (сокращение A1 и B1).

Если соседний блок B0 доступен и использует режим IBC, сокращают (или определяют), является ли векторный блок В0 таким же, как B1. Если блочный вектор B0 не такой же, как блочный вектор B1, вставляют блочный вектор блока B0 в список кандидатов на слияние IBC текущего блока. В противном случае, (блочный вектор B0 такой же, как блочный вектор B1, или B0 недоступен или B0 не использует режим IBC), не вставляют блочный вектор блока B0 в список кандидатов на слияние IBC текущего блока (сокращение B0 и B1).

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

Если соседний блок B2 доступен и использует режим IBC и текущий размер списка слияния IBC меньше 4, сокращают (или определяют), является ли блочный вектор B2 таким же, как A1, и является ли блочный вектор B2 таким же, как B1. Если блочный вектор B2 не является таким же, как блочный вектор A1, и блочный вектор B2 не является таким же, как B1, вставляют блочный вектор блока B2 в список кандидатов на слияние IBC текущего блока. В противном случае (блочный вектор B2 является таким же, как блочный вектор A1 или B1, или B0 недоступен или B0 не использует режим IBC), не вставляют блочный вектор блока B0 в список кандидатов на слияние IBC текущего блока (сокращение B2 и A1 и сокращение B2 B1).

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

Если предпоследний кандидат Hk-1 HMVP доступен и использует режим IBC и текущий размер списка кандидатов на слияние IBC меньше значения, равного максимальному количеству кандидатов на слияние IBC минус один, и блочный вектор Hk-1 не является таким же, как A1, вставляют блочный вектор Hk-1 в список кандидатов на слияние IBC текущего блока. В противном случае (Hk-1 недоступен или Hk-1 не использует режим IBC или текущий размер списка кандидатов на слияние IBC не меньше максимального количества кандидатов на слияние IBC минус один, или блочный вектор Hk-1 является таким же, как блочный вектор B1), не вставляют блочный вектор Hk-1 в список кандидатов на слияние IBC текущего блока (сокращение Hk-1 и B1).

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

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

Решение 6

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

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

Если соседний блок A1 доступен и использует режим IBC, вставляют блочный вектор блока A1 в список кандидатов на слияние IBC текущего блока. В противном случае (A1 недоступен или А1 не использует режим IBC), не вставляют блочный вектор блока A1 в список кандидатов на слияние IBC текущего блока (первый кандидат, без сокращения).

Если соседний блок B1 доступен и использует режим IBC, сокращают (или определяют), является ли блочный вектор В1 таким же, как А1. Если блочный вектор B1 не является таким же, как блочный вектор A1, вставляют блочный вектор блока B1 в список кандидатов на слияние IBC текущего блока. В противном случае (блочный вектор B1 является таким же, как блочный вектор A1, или B1 недоступен или B0 не использует режим IBC), не вставляют блочный вектор блока A1 в список кандидатов на слияние IBC текущего блока (сокращение A1 и B1).

Если соседний блок B0 доступен и использует режим IBC, сокращают (или определяют), является ли блочный вектор В0 таким же, как В1. Если блочный вектор B0 не является таким же, как блочный вектор B1, вставляют блочный вектор блока B0 в список кандидатов на слияние IBC текущего блока. В противном случае (блочный вектор B0 является таким же, как блочный вектор B1, или B0 недоступен или B0 не использует режим IBC), не вставляют блочный вектор блока B0 в список кандидатов на слияние IBC текущего блока (сокращение B0 и B1).

Если соседний блок A0 доступен и использует режим IBC, сокращают (или определяют), является ли блочный вектор A0 таким же, как А1. Если блочный вектор A0 не является таким же, как блочный вектор A1, вставляют блочный вектор блока A0 в список кандидатов на слияние IBC текущего блока. В противном случае (блочный вектор A0 является таким же, как блочный вектор A1, или A0 недоступен или A0 не использует режим IBC), не вставляют блочный вектор блока A0 в список кандидатов на слияние IBC текущего блока (сокращение A0 и A1).

Если соседний блок B2 доступен и использует режим IBC и текущий размер списка слияния IBC меньше 4, сокращают (или определяют), является ли блочный вектор B2 таким же, как A1, и является ли блочный вектор B2 таким же, как B1. Если блочный вектор B2 не является таким же, как блочный вектор A1, и блочный вектор B2 не является таким же, как B1, вставляют блочный вектор блока B2 в список кандидатов на слияние IBC текущего блока. В противном случае (блочный вектор B2 является таким же, как блочный вектор A1 или B1, или B0 недоступен или B0 не использует режим IBC), не вставляют блочный вектор блока B0 в список кандидатов на слияние IBC текущего блока (сокращение B2 и A1 и сокращение B2 и B1).

Если последний кандидат Hk HMVP доступен и использует режим IBC и текущий размер списка кандидатов на слияние IBC меньше максимального количества кандидатов на слияние IBC минус один, и блочный вектор Hk является не таким же, как A1 и B1, вставляют блочный вектор Hk в список кандидатов на слияние IBC текущего блока. В противном случае (Hk недоступен или Hk не использует режим IBC или текущий размер списка кандидатов на слияние IBC не меньше максимального количества кандидатов на слияние IBC, или блочный вектор Hk является таким же, как блочный вектор A1, или блочный вектор Hk является таким же, как блочный вектор B1), не вставляют блочный вектор Hk в список кандидатов на слияние IBC текущего блока (сокращение Hk и A1, Hk и B1).

Если предпоследний кандидат Hk-1 HMVP доступен и использует режим IBC и текущий размер списка кандидатов на слияние IBC меньше максимального количества кандидатов на слияние IBC, и блочный вектор Hk-1 является не таким же, как A1 и B1, вставляют блочный вектор Hk-1 в список кандидатов на слияние IBC текущего блока. В противном случае (Hk-1 недоступен или Hk-1 не использует режим IBC или текущий размер списка кандидатов на слияние IBC не меньше максимального количества кандидатов на слияние IBC, или блочный вектор Hk-1 является таким же, как блочный вектор A1, или блочный вектор Hk-1 является таким же, как блочный вектор B1), не вставляют блочный вектор Hk-1 в список кандидатов на слияние IBC текущего блока (сокращение Hk-1 и A1, Hk-1 и B1).

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

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

Решение 7

В соответствии с решением 7, сокращение блочных векторов пространственного соседнего блока сохраняется таким же. Для сокращения кандидатов HMVP блочный вектор последнего кандидата Hk HMVP и предпоследнего кандидата Hk-1 HMVP сокращается с помощью блочного вектора первого пространственного соседнего блока A1 и B1. Если ни один из блоков A1 или B1 уже не присутствует в списке слияния IBC, то никакой кандидат HMVP не сокращается с помощью пространственного кандидата.

Сокращения остальных кандидатов HMVP удаляются. В варианте осуществления во время создания списка слияния IBC в процессе сокращения в наихудшем случае возможны нижеследующие сокращения

Сокращение между A1 и B1

Сокращение между A0 и A1

Сокращение между B0 и B1

Сокращение между B2 и A1

Сокращение между B2 и B1

Сокращение между последним кандидатом Hk HMVP и A1 или Hk и B1

Сокращение между предпоследним кандидатом Hk-1 HMVP и A1 или Hk-1 и B1

В этом случае максимальное количество сокращений для создания списка кандидатов на слияние IBC текущего блока уменьшается с 9 до 7. Решение значительно снижает сложность создания списка слияния IBC как для кодера, так и для декодера.

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

Если соседний блок A1 доступен и использует режим IBC, вставляют блочный вектор блока A1 в список кандидатов на слияние IBC текущего блока. В противном случае (A1 недоступен или А1 не использует режим IBC), не вставляют блочный вектор блока A1 в список кандидатов на слияние IBC текущего блока (первый кандидат, без сокращения).

Если соседний блок B1 доступен и использует режим IBC, сокращают (или определяют), является ли блочный вектор В1 таким же, как А1. Если блочный вектор B1 не является таким же, как блочный вектор A1, вставляют блочный вектор блока B1 в список кандидатов на слияние IBC текущего блока. В противном случае (блочный вектор B1 является таким же, как блочный вектор A1, или B1 недоступен или B0 не использует режим IBC), не вставляют блочный вектор блока A1 в список кандидатов на слияние IBC текущего блока (сокращение A1 и B1).

Если соседний блок B0 доступен и использует режим IBC, сокращают (или определяют), является ли блочный вектор В0 таким же, как В1. Если блочный вектор B0 не является таким же, как блочный вектор B1, вставляют блочный вектор блока B0 в список кандидатов на слияние IBC текущего блока. В противном случае (блочный вектор B0 является таким же, как блочный вектор B1, или B0 недоступен или B0 не использует режим IBC), не вставляют блочный вектор блока B0 в список кандидатов на слияние IBC текущего блока (сокращение B0 и B1).

Если соседний блок A0 доступен и использует режим IBC, сокращают (или определяют), является ли блочный вектор A0 таким же, как А1. Если блочный вектор A0 не является таким же, как блочный вектор A1, вставляют блочный вектор блока A0 в список кандидатов на слияние IBC текущего блока. В противном случае (блочный вектор A0 является таким же, как блочный вектор A1, или A0 недоступен или A0 не использует режим IBC), не вставляют блочный вектор блока A0 в список кандидатов на слияние IBC текущего блока (сокращение A0 и A1).

Если соседний блок B2 доступен и использует режим IBC и текущий размер списка слияния IBC меньше 4, сокращают (или определяют), является ли блочный вектор B2 ким же, как A1, и является ли блочный вектор B2 таким же, как B1. Если блочный вектор B2 не является таким же, как блочный вектор A1, и блочный вектор B2 не является таким же, как B1, вставляют блочный вектор блока B2 в список кандидатов на слияние IBC текущего блока. В противном случае (блочный вектор B2 является таким же, как блочный вектор A1 или B1, или B0 недоступен или B0 не использует режим IBC), не вставляют блочный вектор блока B0 в список кандидатов на слияние IBC текущего блока (сокращение B2 и A1 и сокращение B2 B1).

Если блок A1 уже присутствует в списке на слияние IBC, то тогда

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

Если предпоследний кандидат Hk-1 HMVP доступен и использует режим IBC и текущий размер списка кандидатов на слияние IBC меньше максимального количества кандидатов на слияние IBC минус один, и блочный вектор Hk-1 не является таким же, как A1, вставляют блочный вектор Hk-1 в список кандидатов на слияние IBC текущего блока. В противном случае (Hk-1 недоступен или Hk-1 не использует режим IBC или текущий размер списка кандидатов на слияние IBC не меньше максимального количества кандидатов на слияние IBC минус один, или блочный вектор Hk-1 является таким же, как блочный вектор A1), не вставляют блочный вектор Hk-1 в список кандидатов на слияние IBC текущего блока (сокращение Hk-1 и A1).

В противном случае, если A1 отсутствует в списке на слияние IBC и B1 уже присутствует в списке на слияние IBC, то тогда:

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

Если предпоследний кандидат Hk-1 HMVP доступен и использует режим IBC и текущий размер списка кандидатов на слияние IBC меньше значения, равного максимальному количеству кандидатов на слияние IBC минус один, и блочный вектор Hk-1 не является таким же, как A1, вставляют блочный вектор Hk-1 в список кандидатов на слияние IBC текущего блока. В противном случае (Hk-1 недоступен или Hk-1 не использует режим IBC или текущий размер списка кандидатов на слияние IBC не меньше максимального количества кандидатов на слияние IBC минус один, или блочный вектор Hk-1 является таким же, как блочный вектор B1), не вставляют блочный вектор Hk-1 в список кандидатов на слияние IBC текущего блока (сокращение Hk-1 и B1).

В противном случае, если A1 и B1 уже присутствуют в списке на слияние IBC, то тогда:

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

Если предпоследний кандидат Hk-1 HMVP доступен и использует режим IBC и текущий размер списка кандидатов на слияние IBC меньше максимального количества кандидатов на слияние IBC минус один, вставляют блочный вектор Hk-1 в список кандидатов на слияние IBC текущего блока. В противном случае (Hk-1 недоступен или Hk-1 не использует режим IBC или текущий размер списка кандидатов на слияние IBC не меньше максимального количества кандидатов на слияние IBC минус один), не вставляют блочный вектор Hk-1 в список кандидатов на слияние IBC текущего блока (без сокращения).

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

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

Решение 8

В соответствии с решением 8, сокращение блочных векторов пространственного соседнего блока сохраняется таким же. Для сокращения кандидатов HMVP:

блочный вектор последнего кандидата Hk HMVP и предпоследнего кандидата Hk-1 HMVP сокращаются с помощью блочного вектора пространственного соседнего блока A1, когда A1 уже присутствует в списке на слияние IBC и B1 не присутствует в списке на слияние IBC;

блочный вектор последнего кандидата Hk HMVP и предпоследнего кандидата Hk-1 HMVP сокращаются с помощью блочного вектора пространственного соседнего блока B1, когда B1 уже присутствует в списке на слияние IBC и A1 не присутствует в списке на слияние IBC;

блочный вектор последнего кандидата Hk HMVP сокращается с помощью блочного вектора пространственного соседнего блока B1, когда оба блока, A1 и B1, уже присутствует в списке на слияние IBC.

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

В этом случае максимальное количество сокращений для создания списка кандидатов на слияние IBC текущего блока уменьшается с 9 до 7.

Решение значительно снижает сложность создания списка слияния IBC как для кодера, так и для декодера.

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

Если соседний блок A1 доступен и использует режим IBC, вставляют блочный вектор блока A1 в список кандидатов на слияние IBC текущего блока. В противном случае (A1 недоступен или А1 не использует режим IBC), не вставляют блочный вектор блока A1 в список кандидатов на слияние IBC текущего блока (первый кандидат, без сокращения).

Если соседний блок B1 доступен и использует режим IBC, сокращают (или определяют), является ли блочный вектор В1 таким же, как А1. Если блочный вектор B1 не является таким же, как блочный вектор A1, вставляют блочный вектор блока B1 в список кандидатов на слияние IBC текущего блока. В противном случае (блочный вектор B1 является таким же, как блочный вектор A1, или B1 недоступен или B0 не использует режим IBC), не вставляют блочный вектор блока A1 в список кандидатов на слияние IBC текущего блока (сокращение A1 и B1).

Если соседний блок B0 доступен и использует режим IBC, сокращают (или определяют), является ли блочный вектор В0 таким же, как В1. Если блочный вектор B0 не является таким же, как блочный вектор B1, вставляют блочный вектор блока B0 в список кандидатов на слияние IBC текущего блока. В противном случае (блочный вектор B0 является таким же, как блочный вектор B1, или B0 недоступен или B0 не использует режим IBC), не вставляют блочный вектор блока B0 в список кандидатов на слияние IBC текущего блока (сокращение B0 и B1).

Если соседний блок A0 доступен и использует режим IBC, сокращают (или определяют), является ли блочный вектор A0 таким же, как А1. Если блочный вектор A0 не является таким же, как блочный вектор A1, вставляют блочный вектор блока A0 в список кандидатов на слияние IBC текущего блока. В противном случае (блочный вектор A0 является таким же, как блочный вектор A1, или A0 недоступен или A0 не использует режим IBC), не вставляют блочный вектор блока A0 в список кандидатов на слияние IBC текущего блока (сокращение A0 и A1).

Если соседний блок B2 доступен и использует режим IBC и текущий размер списка слияния IBC меньше 4, сокращают (или определяют), является ли блочный вектор B2 ким же, как A1, и является ли блочный вектор B2 таким же, как B1. Если блочный вектор B2 не является таким же, как блочный вектор A1, и блочный вектор B2 не является таким же, как B1, вставляют блочный вектор блока B2 в список кандидатов на слияние IBC текущего блока. В противном случае (блочный вектор B2 является таким же, как блочный вектор A1 или B1, или B0 недоступен или B0 не использует режим IBC), не вставляют блочный вектор блока B0 в список кандидатов на слияние IBC текущего блока (сокращение B2 и A1 и сокращение B2 B1).

Если A1 уже присутствует в списке на слияние IBC и B1 не присутствует в списке, то тогда:

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

если предпоследний кандидат Hk-1 HMVP доступен и использует режим IBC и текущий размер списка кандидатов на слияние IBC меньше максимального количества кандидатов на слияние IBC минус один, и блочный вектор Hk-1 не является таким же, как A1, вставляют блочный вектор Hk-1 в список кандидатов на слияние IBC текущего блока. В противном случае (Hk-1 недоступен или Hk-1 не использует режим IBC или текущий размер списка кандидатов на слияние IBC не меньше максимального количества кандидатов на слияние IBC минус один, или блочный вектор Hk-1 является таким же, как блочный вектор A1), не вставляют блочный вектор Hk-1 в список кандидатов на слияние IBC текущего блока (сокращение Hk-1 и A1).

В противном случае, если A1 отсутствует в списке на слияние IBC и B1 уже присутствует в списке на слияние IBC, то тогда:

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

если предпоследний кандидат Hk-1 HMVP доступен и использует режим IBC и текущий размер списка кандидатов на слияние IBC меньше значения, равного максимальному количеству кандидатов на слияние IBC минус один, и блочный вектор Hk-1 не является таким же, как A1, вставляют блочный вектор Hk-1 в список кандидатов на слияние IBC текущего блока. В противном случае (Hk-1 недоступен или Hk-1 не использует режим IBC или текущий размер списка кандидатов на слияние IBC не меньше максимального количества кандидатов на слияние IBC минус один, или блочный вектор Hk-1 является таким же, как блочный вектор B1), не вставляют блочный вектор Hk-1 в список кандидатов на слияние IBC текущего блока (сокращение Hk-1 и B1).

В противном случае, если A1 и B1 уже присутствуют в списке на слияние IBC, то тогда:

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

В противном случае, если A1 и B1 уже присутствуют в списке на слияние IBC, то тогда

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

Если предпоследний кандидат Hk-1 HMVP доступен и использует режим IBC и текущий размер списка кандидатов на слияние IBC меньше максимального количества кандидатов на слияние IBC минус один, вставляют блочный вектор Hk-1 в список кандидатов на слияние IBC текущего блока. В противном случае (Hk-1 недоступен или Hk-1 не использует режим IBC или текущий размер списка кандидатов на слияние IBC не меньше максимального количества кандидатов на слияние IBC минус один), не вставляют блочный вектор Hk-1 в список кандидатов на слияние IBC текущего блока (без сокращения).

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

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

Решение 9

В соответствии с решением 9, сверх решения 1, пространственный соседний блок B0, основываясь на доступности B0 и B1; пространственный соседний блок A0, основываясь на доступности A0 и A1; пространственный соседний блок B2, основываясь на доступности B2, B1 и A1,

В данном примере,

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

Если соседний блок A0 доступен и использует режим IBC, а А1 недоступен, блочный вектор блока A1 вставляют в список кандидатов на слияние IBC текущего блока. В противном случае (A0 недоступен или А0 не использует режим IBC или А1 доступен), блочный вектор блока A0 не вставляют в список кандидатов на слияние IBC текущего блока (без сокращения).

Если соседний блок B2 доступен и использует режим IBC, а А1 и B1 недоступны, и текущий размер списка кандидатов на слияние IBC меньше 4, блочный вектор B2 вставляют в список кандидатов на слияние IBC текущего блока. В противном случае (B2 недоступен или B2 не использует режим IBC или текущий размер списка кандидатов на слияние IBC меньше 4 или А1 доступен и B1 доступен), блочный вектор B2 не вставляют в список кандидатов на слияние IBC текущего блока (без сокращения).

В этом решении никакое дополнительное сокращение не добавляется, но по сравнению с решением 1 достигается более высокая эффективность кодирования.

Решение 10

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

В примере, приведенном для решения 10, объединяются решение 2 и решение 3. Для предсказания текущего блока, используя режим IBC, важны как левый (A1), так и верхний (B1) пространственные соседние блоки. В этом примере сохраняется сокращение пространственных соседних блоков между A1 и B, блочные векторы остальных пространственных соседних блоков не вставляют в список на слияние IBC.Для сокращения количества кандидатов HMVP блочный вектор последнего кандидата Hk HMVP сокращают с помощью пространственного соседнего блока A1 и B1 векторного блока. В варианте осуществления возможно нижеследующее сокращение, выполняемое во время построения списка слияния IBC:

Сокращение между последним кандидатом Hk HMVP и A1

Сокращение между последним кандидатом Hk HMVP и B1

В этом случае максимальное количество сокращений для создания списка кандидатов на слияние IBC текущего блока уменьшается с 9 до 3. Решение значительно снижает сложность создания списка слияния IBC как для кодера, так и для декодера.

В этом примере последнего кандидата из списка кандидатов на слияние IBC разрешают, используя режим HMVP.

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

Если соседний блок A1 доступен и использует режим IBC, вставляют блочный вектор блока A1 в список кандидатов на слияние IBC текущего блока. В противном случае (A1 недоступен или А1 не использует режим IBC), не вставляют блочный вектор блока A1 в список кандидатов на слияние IBC текущего блока (первый кандидат, без сокращения).

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

Если последний кандидат Hk HMVP доступен и использует режим IBC и текущий размер списка кандидатов на слияние IBC меньше значения, равного максимальному количеству кандидатов на слияние IBC минус один, и блочный вектор Hk не такой же, как A1 и B1, вставляют блочный вектор Hk в список кандидатов на слияние IBC текущего блока. В противном случае (Hk недоступен или Hk не использует режим IBC или текущий размер списка кандидатов на слияние IBC не меньше максимального количества кандидатов на слияние IBC минус один, или блочный вектор Hk является таким же, как блочный вектор A1, или блочный вектор Hk является таким же, как блочный вектор B1), не вставляют блочный вектор Hk в список кандидатов на слияние IBC текущего блока (сокращение Hk и A1, Hk и B1).

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

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

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

8.6.1 Общее описание процесса декодирования для блоков кодирования, кодированных в режиме предсказания IBC

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

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

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

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

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

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

Процесс получения параметров квантования инициируется с помощью местоположения яркости (xCb, yCb), ширины текущего блока кодирования в выборках яркости cbWidth, высоты текущего блока кодирования в выборках яркости cbHeight и переменной treeType в качестве входных данных.

Переменную IsGt4by4 получают следующим образом:

IsGt4by4 = (cbWidth * cbHeight) > 16 (1111)

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

1. Компоненты блочного вектора текущего блока кодирования получают следующим образом:

Процесс получения компонент блочного вектора инициируется с помощью местоположения блока кодирования яркости (xCb, yCb), ширины блока кодирования яркости cbWidth, высоты блока кодирования cbHeight и блочного вектора яркости bvL в качестве выходных данных.

Когда treeType равен SINGLE_TREE, процесс получения блока цветности инициируется блочным вектором яркости bvL в качестве входных данных и блочным вектором цветности bvC в качестве выходных данных.

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

Процесс декодирования для блоков IBC, как указано в пункте 8.6.3.1, иницуиируют с помощью местоположения блока кодирования яркости (xCb, yCb), ширины cbWidth блока кодирования яркости и высоты cbHeight блока кодирования яркости, блочного вектора яркости bvL, переменной cIdx, установленной равной 0 в качестве входных данных, и выборок предсказания IBC (predSamples), которые являются матрицей predSamplesL (cbWidth)x(cbHeight) предсказания выборок яркости в качестве выходных данных.

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

- Процесс декодирования блоков IBC, как указано в пункте 8.6.3.1, инициируют с помощью местоположения блока кодирования яркости (xCb, yCb), ширины блока кодирования яркости cbWidth и высоты блока кодирования яркости cbHeight, блочного вектора цветности bvC и переменной cIdx, установленной равной 1, в качестве входных данных, и выборок предсказания IBC (predSamples), которые являются матрицей predSamplesCb (cbWidth/SubWidthC)x(cbHeight/SubHeightC) предсказания выборок цветности для компонент Cb цветности в качестве выходных данных.

- Процесс декодирования блоков IBC инициируют согласно пункту 8.6.3.1 с помощью местоположения блока кодирования яркости (xCb, yCb), ширины блока кодирования яркости cbWidth и высоты блока кодирования яркости cbHeight, блочного вектора цветности bvC и переменной cIdx, установленной равной 2, в качестве входных данных, и выборок предсказания IBC (predSamples), которые являются матрицей predSamplesCb (cbWidth/SubWidthC)x(cbHeight/SubHeightC) предсказания выборок цветности для компонент Cb цветности в качестве выходных данных.

3. Остаточные выборки текущего блока кодирования получают следующим образом:

- Процесс декодирования остаточного сигнала блоков кодирования, кодированных в режиме межкадрового предсказания, инициируют с помощью местоположения (xTb0, yTb0), установленного равным местоположению блока кодирования яркости (xCb, yCb), ширине nTbW, установленной равной ширине блока кодирования яркости cbWidth, высоте nTbH, установленной равной высоте блока кодирования яркости cbHeight, и переменной cIdx, установленной равной 0, в качестве входных данных, и матрицы resSamplesL в качестве выходных данных.

- Процесс декодирования остаточного сигнала блоков кодирования, кодированных в режиме межкадрового предсказания, инициируют с помощью местоположения (xTb0, yTb0), установленного равным местоположению блока кодирования яркости (xCb, yCb), ширине nTbW, установленной равной ширине блока кодирования яркости cbWidth, высоте nTbH, установленной равной высоте блока кодирования яркости cbHeight, и переменной cIdx, установленной равной 1, в качестве входных данных, и матрицы resSamplesL в качестве выходных данных.

- Процесс декодирования остаточного сигнала блоков кодирования, кодированных в режиме межкадрового предсказания, инициируют с помощью местоположения (xTb0, yTb0), установленного равным местоположению блока кодирования яркости (xCb, yCb), ширине nTbW, установленной равной ширине блока кодирования яркости cbWidth, высоте nTbH, установленной равной высоте блока кодирования яркости cbHeight, и переменной cIdx, установленной равной 2, в качестве входных данных, и матрицы resSamplesL в качестве выходных данных.

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

- Процесс реконструкции изображения для цветового компонента инициируют с помощью расположения блока (xCurr, yCurr ), установленного равным ( xCb, yCb ), ширины блока nCurrSw, установленной равной cbWidth, высоты блока nCurrSh, установленной равной cbHeight, переменной cIdx, установленной равной 0, матрицы predSamples (cbWidth)x(cbHeight), установленной равной predSamplesL, и матрицы resSamples (cbWidth)x(cbHeight), установленной равной resSamplesL, в качестве входных данных, а выходным результатом является модифицированное реконструированное изображение, предшествующее внутриконтурной фильтрации.

- Когда treeType равен SINGLE_TREE, процесс реконструкции изображения цветового компонента инициируют с помощью расположения блока (xCurr, yCurr ), установленного равным ( xCb/SubWidthC, yCb/SubHeightC ), ширины блока nCurrSw, установленной равной cbWidth/SubWidthC, высоты блока nCurrSh, установленной равной cbHeight/SubHeightC, переменной cIdx, установленной равной 1, матрицы predSamples (cbWidth)x(cbHeight), установленной равной predSamplesL, и матрицы resSamples (cbWidth/SubWidthC)x(cbHeight/SubHeightC), установленной равной predSamplesCb, и матрицы resSamples (cbWidth/SubWidthC)x(cbHeight/SubHeightC), установленной равной resSamplesCb в качестве входных данных, а выходным результатом является модифицированное реконструированное изображение, предшествующее внутриконтурной фильтрации.

- Когда treeType равна SINGLE_TREE, процесс реконструкции изображения для цветового компонента инициируют с помощью расположения блока (xCurr, yCurr ), установленного равным ( xCb/SubWidthC, yCb/SubHeightC ), ширины блока nCurrSw, установленной равной cbWidth/SubWidthC, высоты блока nCurrSh, установленной равной cbHeight/SubHeightC, переменной cIdx, установленной равной 2, матрицы predSamples (cbWidth/SubWidthC)x(cbHeight/SubHeightC), установленной равной predSamplesCr, и матрицы resSamples (cbWidth/SubWidthC)x(cbHeight/SubHeightC), установленной равной predSamplesCb, и матрицы resSamples (cbWidth/SubWidthC)x(cbHeight/SubHeightC), установленной равной resSamplesCr в качестве входных данных, а выходным результатом является модифицированное реконструированное изображение, предшествующее внутриконтурной фильтрации.

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

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

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

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

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

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

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

блочный вектор яркости bvL с точностью 1/16 доли выборки.

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

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

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

Переменную bvd получают следующим образом:

bvd[ 0 ] = MvdL0[ xCb ][ yCb ][ 0 ] (1112) bvd[ 1 ] = MvdL0[ xCb ][ yCb ][ 1 ] (1113)

2. Инициируют процесс округления для векторов движения с помощью mvX, установленного равным bvL, rightShift, установленного равным AmvrShift, и leftShift, установленного равным AmvrShift, в качестве входных данных, и выходные данные получают как округленный bvL.

3. Блочный вектор bvL яркости модифицируют следующим образом:

u[ 0 ] = ( bvL[ 0 ] + bvd[ 0 ] + 218 ) % 218 (1114) bvL[ 0 ] = ( u[ 0 ] >= 217 ) ? ( u[ 0 ] − 218 ) : u[ 0 ] (1115) u[ 1 ] = ( bvL[ 1 ] + bvd[ 1 ] + 218 ) % 218 (1116) bvL[ 1 ] = ( u[ 1 ] >= 217 ) ? ( u[ 1 ] − 218 ) : u[ 1 ] (1117)

Примечание 1. Результирующие значения bvL[ 0 ] и bvL[ 1 ], указанные выше, всегда будут находиться в диапазоне от −217 до 217 − 1, включительно.

Когда IsGt4by4 равно TRUE, процесс обновления списка предикторов блочных векторов, основанных на архивных данных, как указано в пункте 8.6.2.6, инициируют с помощью блочного вектора bvL яркости.

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

CtbSizeY больше или равно (( yCb + ( bvL[ 1 ] >> 4 ) ) & ( CtbSizeY − 1 ) ) + cbHeight.

IbcVirBuf[ 0 ][ ( x + (bvL[ 0 ] >> 4 ) ) & ( IbcBufWidthY − 1 ) ][ ( y + (bvL[1] >> 4 ) ) & ( CtbSizeY − 1) ] не должно быть равно −1 для x = xCb..xCb + cbWidth − 1 и y = yCb..yCb + cbHeight − 1.

8.6.2.2 Процесс получения предсказания блочного вектора яркости IBC

Процесс инициируют, только когда CuPredMode[ 0 ][ xCb ][ yCb ] равно MODE_IBC, где ( xCb, yCb ) указывает верхнюю-левую выборку текущего блока кодирования яркости относительно левой верхней выборки яркости текущего изображения.

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

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

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

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

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

блочный вектор яркости bvL с точностью 1/16 доли выборки.

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

1. Когда IsGt4by4 равно TRUE (истинно), процесс получения кандидатов пространственных блочных векторов из соседних блоков кодирования, как описано в пункте 8.6.2.3, инициируют с помощью местоположения (xCb, yCb) блока кодирования яркости, ширины блока кодирования яркости cbWidth и высоты cbHeight в качестве входных данных, и выходные данные являются флагами доступности availableFlagA1, availableFlagB1 и блочными векторами bvA1 и bvB1.

2. Когда IsGt4by4 равно TRUE (истинно), список кандидатов блочных векторов, bvCandList, строится следующим образом:

i = 0
if ( availableFlagA1 )
bvCandList [ i++ ] = bvA1 i = 0
if ( availableFlagB1 )
bvCandList [ i++ ] = bvB1

3. Переменную numCurrCand получают следующим образом:

Когда IsGt4by4 равно TRUE (истинно), numCurrCand устанавливают равным количеству кандидатов на слияние в списке bvCandList.

В противном случае, (IsGt4by4 равно FALSE (ложно)), numCurrCand устанавливают равным 0.

4. Когда numCurrCand меньше, чем MaxNumIbcMergeCand, и NumHmvpIbcCand больше 0, процесс получения кандидатов блочных векторов IBC, основанных на архивных данных, согласно пункту 8.6.2.4, инициируют с помощью bvCandList и numCurrCand в качестве входных данных, и модифицированные bvCandList и numCurrCand получают в качестве выходного результата.

5. Когда numCurrCand меньше, чем MaxNumIbcMergeCand, нижеследующее применяют до тех пор, пока numCurrCand не станет равно MaxNumIbcMergeCand:

bvCandList[ numCurrCand ][ 0 ] устанавливают равным 0.

bvCandList[ numCurrCand ][ 1 ] устанавливают равным 0.

numCurrCand дают приращение на 1.

6. Переменную bvIdx получают следующим образом:

bvIdx = general_merge_flag[ xCb ][ yCb ] ? merge_idx[ xCb ][ yCb ] : mvp_l0_flag[ xCb ][ yCb ] (1119)

7. Делаются нижеследующие назначения:

bvL[ 0 ] = bvCandList[ mvIdx ][ 0 ] (1120) bvL[ 1 ] = bvCandList[ mvIdx ][ 1 ] (1121)

8.6.2.3 Процесс получения кандидатов пространственных блочных векторов IBC

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

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

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

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

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

флаги доступности availableFlagA1 и availableFlagB1 соседних блоков кодирования,

блочные векторы bvA1 и bvB1 с точностью в 1/16 доли выборки соседних блоков кодирования.

Для получения availableFlagA1 и mvA1 применяют нижеследующее:

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

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

Переменные availableFlagA1 и bvA1 получают следующим образом:

Если availableA1 равно FALSE (ложно), availableFlagA1 устанавливают равным 0 и оба компонента bvA1 устанавливают равными 0.

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

bvA1 = MvL0[ xNbA1 ][ yNbA1 ] (1122)

Для получения availableFlagB1 и bvB1 применяют нижеследующее:

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

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

Переменные availableFlagB1 и bvB1 получают следующим образом:

Если одно или более из нижеследующих условий являются действительными, availableB1 устанавливают равным 0 и оба компонента bvB1 устанавливают равными 0:

availableB1 равняется FALSE (ложно).

availableA1 равняется TRUE (истинно) и местоположения блоков кодирования яркости (xNbA1, yNbA1) и (xNbB1, yNbB1) имеют одинаковые блочные векторы.

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

bvB1 = MvL0[ xNbB1 ][ yNbB1 ] (1123).

8.6.2.4 Процесс получения кандидатов блочных векторов IBC, основанных на архивных данных

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

список кандидатов блочных векторов bvCandList,

количество доступных кандидатов блочных векторов в списке numCurrCand.

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

модифицированный список кандидатов блочных векторов bvCandList,

модифицированное количество доступных кандидатов блочных векторов в списке numCurrCand.

Переменные isPrunedA1 и isPrunedB1 обе устанавливают равными FALSE (ложно).

Для каждого кандидата в HmvpIbcCandList[ hMvpIdx ] с индексом hMvpIdx = 1..NumHmvpIbcCand, нижеследующие последовательные этапы повторяются до тех пор, пока numCurrCand не станет равно MaxNumIbcMergeCand:

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

Если все нижеследующие условия действительны для любого кандидата N блочного вектора, где N - A1 или B1, sameMotion и isPrunedN оба устанавливают как TRUE (истинно):

IsGt4by4 равно TRUE (истинно).

hMvpIdx равно 1.

Кандидат HmvpIbcCandList[NumHmvpIbcCand − hMvpIdx] равен кандидату N блочного вектора .

isPrunedN равно FALSE (ложно).

В противном случае, sameMotion устанавливают равным FALSE (ложно).

2. Когда same Motion равно FALSE, кандидата HmvpIbcCandList [NumHmvpIbcCand − hMvpIdx] добавляют к списку кандидатов блочных векторов следующим образом:

bvCandList[ numCurrCand++ ]= HmvpIbcCandList[ NumHmvpIbcCand − hMvpIdx ] (1124).

8.6.2.5 Процесс получения блочных векторов цветности

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

блочный вектор яркости bvL с точностью 1/16 доли выборки.

Результатом этого процесса является блочный вектор цветности bvC с точностью 1/32 доли выборки.

Блочный вектор цветности получают из соответствующего блочного вектора яркости.

Блочный вектор bvC цветности получают следующим образом:

bvC[ 0 ] = ( ( bvL[ 0 ] >> ( 3 + SubWidthC ) ) * 32 (1125) bvC[ 1 ] = ( ( bvL[ 1 ] >> ( 3 + SubHeightC ) ) * 32 (1126)

8.6.2.6 Процесс обновления списка кандидатов в предикторы блочных векторов, основанных на архивных данных

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

блочный вектор яркости bvL с точностью 1/16 доли выборки.

Список кандидатов HmvpIbcCandList модифицируется на последующих выполняемых по порядку этапах:

1. Переменная identicalCandExist устанавливается равной FALSE (ложно) и переменная removeIdx устанавливается равной 0.

2. Когда NumHmvpIbcCand больше 0, для каждого индекса hMvpIdx с hMvpIdx = 0..NumHmvpIbcCand − 1, последующие этапы применяют до тех пор, пока identicalCandExist не станет равно TRUE (истинно):

Когда bvL равен HmvpIbcCandList[ hMvpIdx ], identicalCandExist устанавливают равным TRUE (истинно) и removeIdx устанавливают равным hMvpIdx.

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

Если identicalCandExist равно TRUE (истинно) или NumHmvpIbcCand равно 5, the применяют следующее:

Для каждого индекса i с i = ( removeIdx + 1 )..( NumHmvpIbcCand − 1 ), HmvpIbcCandList[ i − 1] устанавливают равным HmvpIbcCandList [ i ].

HmvpIbcCandList[ NumHmvpIbcCand − 1 ] устанавливают равным bvL.

В противном случае (identicalCandExist равно FALSE (ложно) и NumHmvpIbcCand меньше 5), применяют следующее:

HmvpIbcCandList[ NumHmvpIbcCand ++ ] устанавливают равным bvL.

8.6.3 Процесс декодирования для блоков IBC

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

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

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

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

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

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

блочный вектор bv,

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

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

матрица predSamples выборок предсказания.

Когда cIdx равно 0, для x = xCb..xCb + cbWidth − 1 и y = yCb..yCb + cbHeight − 1, применяют следующее:

xVb = ( x + ( bv[ 0 ] >> 4 ) ) & ( IbcBufWidthY − 1 ) (1127) yVb = ( y + ( bv[ 1 ] >> 4 ) ) & ( CtbSizeY − 1 ) (1128) predSamples[ x ][ y ] = ibcVirBuf[ 0 ][ xVb ][ yVb ] (1129)

Когда cIdx не равно 0, для x = xCb/subWidthC..xCb/subWidthC + cbWidth/subWidthC − 1 и y = yCb/subHeightC..yCb/subHeightC + cbHeight/subHeightC − 1, применяют следующее:

xVb = ( x + ( bv[ 0 ] >> 5 ) ) & ( IbcBufWidthC − 1 ) (1130) yVb = ( y + ( bv[ 1 ] >> 5 ) ) & ( ( CtbSizeY/subHeightC ) − 1 ) (1131) predSamples[ x ][ y ] = ibcVirBuf[ cIdx ][ xVb ][ yVb ] (1132)

Когда cIdx равно 0, для x = 0..cbWidth − 1 and y = 0..cbHeight − 1 делают следующие назначения:

MvL0[ xCb + x ][ yCb + y ] = bv (1133) MvL1[ xCb + x ][ yCb + y ] = 0 (1134) RefIdxL0[ xCb + x ][ yCb + y ] = −1 (1135) RefIdxL1[ xCb + x ][ yCb + y ] = −1 (1136) PredFlagL0[ xCb + x ][ yCb + y ] = 0 (1137) PredFlagL1[ xCb + x ][ yCb + y ] = 0 (1138) BcwIdx[ xCb + x ][ yCb + y ] = 0 (1139).

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

На фиг. 8 представлена блок-схема системы 3100 предоставления контента для реализации услуги распределения контента. Эта система 3100 предоставления контента содержит устройство 3102 получения изображения, оконечное устройство 3106 и, как вариант, содержит дисплей 3126.

Устройство 3102 получения изображения осуществляет связь с оконечным устройством 3106 через линию 3104 связи.

Линия связи может содержать описанный выше канал 13 связи. Линия 3104 связи содержит, но не ограничивается WI-FI, Ethernet, кабельную линию, беспроводную линию связи (3G/4G/5G), USB или их сочетание любого вида и т.п.

Устройство 3102 получения изображения формирует данные и может кодировать данные по способу кодирования, как представлено в приведенных выше вариантах осуществления. Альтернативно, устройство 3102 получения изображения может распределять данные потоковому серверу (не показан на чертежах) и сервер кодирует данные и передает кодированные данные оконечному устройству 3106.

Устройство 3102 получения изображения содержит, не ограничиваясь только этим, камеру, смартфон или планшет, компьютер или переносной компьютер, система видеоконференций, PDA, устройство, монтируемое на транспортном средстве, или сочетание любых из них и т.п. Например, устройство 3102 получения изображения может содержать устройство 12 источника, как описано выше. Когда данные содержат в себе видеоданные, причем видеокодер 20, содержащийся в устройстве 3102 получения изображения, реально может выполнять процесс видеокодирования. Когда данные содержат в себе аудиоданные (например, голосовые), аудиокодер, содержащийся в устройстве 3102 получения изображения, реально может выполнять процесс аудиокодирования. Для некоторых практических сценариев устройство 3102 получения изображения распределяет кодированные видеоданные и аудиоданные посредством мультиплексирования их вместе. Для других практических сценариев, например, в системе видеоконференций, кодированные аудиоданные и кодированные видеоданные не мультиплексируются. Устройство 3102 получения изображения раздельно распределяет кодированные аудиоданные и кодированные видеоданные оконечному устройству 3106.

В системе 3100 предоставления контента оконечное устройство 3106 принимает и воспроизводит кодированные данные. Оконечное устройство 3106 может быть устройством с возможностями приема и восстановления данных, таким как смартфон или планшет 3108, компьютером или переносным компьютером 3110, сетевым видеорекордером (NVR)/ цифровым видеорекордером (digital video recorder, DVR) 3112, телевизионным приемником 3114, телевизионной приставкой (set top box, STB) 3116, системой 3118 видеоконференций, системой 3120 видеонаблюдения, персональным цифровым помощником (personal digital assistant, PDA) 3122, устройством 3124, монтируемым на транспортном средстве, или сочетанием любых из них и т.п., способным декодировать вышеупомянутые кодированные данные. Например, оконечное устройство 3106 может содержать устройство 14 назначения, как описано выше. Когда кодированные данные содержат в себе видеоданные, видеокодер 30, содержащийся в оконечном устройстве, имеет приоритет выполнения видеодекодирования. Когда кодированные данные содержат в себе аудиоданные, аудиодекодер 30, содержащийся в оконечном устройстве, имеет приоритет выполнения аудиодекодирования.

Для оконечного устройства, имеющего дисплей, например, смартфон или планшет 3108, компьютер или переносной компьютер 3110, сетевой видеорекордер (NVR)/ цифровой видеорекордер (DVR) 3112, телевизионный приемник 3114, персональный цифровой помощник (PDA) 3122, или устройство 3124, монтируемое на транспортном средстве, оконечное устройство может подавать декодированные данные на его дисплей. Для оконечного устройства, не имеющего дисплея, например, STB 3116, система 3118 видеоконференций или система 3120 видеонаблюдения, внешний дисплей 3116 осуществляет с ними связь и показывает декодированные данные.

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

На фиг. 9 представлена диаграмма структуры примерного оконечного устройства 3106.

После того, как оконечное устройство 3106 принимает поток от устройства 3102 получения изображения, блок 3202 обработки протокола анализирует протокол передачи потока. Протокол содержит, не ограничиваясь только этим, протокол потоковой передачи в реальном времени (Real Time Streaming Protocol, RTSP), протокол передачи гипертекста (Hyper Text Transfer Protocol, HTTP), протокол живой потоковой передачи HTTP (HTTP Live streaming protocol, HLS), MPEG-DASH, транспортный протокол передачи в реальном времени (Real-time Transport protocol, RTP), протокол передачи сообщений в реальном времени (Real Time Messaging Protocol, RTMP) или их комбинацию любого вида и т.п.

После того, как блок 3202 обработки протокола обработает поток, формируют потоковый файл. Файл выводят на блок 3204 демультиплексирования. Блок 3204 демультиплексирования может разделять мультиплексированные данные на кодированные аудиоданные и кодированные видеоданные. Как описано выше, для некоторых практических сценариев, например, в системе видеоконференций, кодированные аудиоданные и кодированные видеоданные не мультиплексируются. В этой ситуации кодированные данные передаются на видеодекодер 3206 и аудиодекодер 3208, не проходя через блок 3204 демультиплексирования.

Посредством процесса демультиплексирования формируются элементарный видеопоток (elementary stream, ES), аудио ES и, как вариант, субтитры. Видеодекодер 3206, который содержит видеодекодер 30, как объяснялось в вышеупомянутых вариантах осуществления, декодирует видео ES способом декодирования, показанным в вышеупомянутых вариантах осуществления, чтобы сформировать видеокадр, и подает эти данные на блок 3212 синхронизации.

Аудиодекодер 3208 декодирует аудио ES, чтобы сформировать аудиокадр, и подает эти данные на блок 3212 синхронизации.

Альтернативно, видеокадр может быть сохранен в буфере (не показан на фиг. 9) перед его подачей на блок 3212 синхронизации.

Аналогично, аудиокадр может быть сохранен в буфере (не показан на фиг. 9) перед его подачей на блок 3212 синхронизации.

Блок 3212 синхронизации синхронизирует видеокадр и аудиокадр и подает видео/аудиоданные на дисплей 3214 видео/аудио.

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

Если в поток включаются субтитры, декодер 3210 субтитров декодирует субтитры и синхронизирует их видеокадром и аудиокадром и подает данные видео/аудио/субтитров на дисплей 3216 видео/аудио/субтитров..

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

Пример 1. Способ построения списка кандидатов на слияние для режима внутрикадрового копирования блоков (Intra block copy, IBC), причем упомянутый способ содержит этапы, на которых:

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

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

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

Пример 2. Способ, соответствующий примеру 1, в котором способ дополнительно содержит этап, на котором:

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

Пример 3. Способ, соответствующий примеру 1 или 2, в котором способ дополнительно содержит этап, на котором:

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

Пример 4. Кодер (20), содержащий схему обработки для выполнения способа, соответствующего любому из примеров 1-3.

Пример 5. Декодер (30), содержащий схему обработки для выполнения способа, соответствующего любому из примеров 1-3.

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

Пример 7. Декодер или кодер, содержащий:

один или более процессоров; и

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

Математические операторы

Математические операторы, используемые в настоящей заявке, подобны тем, которые используются в языке программирования "С". Однако, результаты операций целочисленного деления и арифметических сдвигов определяются более точно и определяются дополнительные операции, такие как возведение в степень и деление действительных значений. Правила нумерации и подсчета обычно начинаются с 0, например, "первый" эквивалентно 0-ому, "второй" эквивалентно 1-ому и т.д.

Арифметические операторы

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

+ Сложение

- Вычитание (как двухаргументный оператор) или отрицание (как унарный оператор префикса)

* Умножение, в том числе, матричное умножение

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

/Целочисленное деление с усечением результата в направлении нуля. Например, 7/4 и -7/-4 усекаются до 1, а -7/4 и 7/-4 усекаются до -1.

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

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

i=x y f(i) Суммирование f( i ), где i принимает любые целочисленные значения от x до и включая y.

x%y Модуль. Остаток от x, деленного на y, определяется только для целых чисел x и y, где x >= 0 и y > 0

Логические операторы

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

x && y Булево логическое "И" x и y

x | | y Булево логическое "ИЛИ" x и y

! Булево логическое "НЕ"

x ? y : z Если x TRUE (истинно) или не равно 0, оценивают значение y; в противном случае, оценивают значение z.

Операторы соотношений

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

> Больше

>= Больше или равно

< Меньше

<= Меньше или равно

= = Равно

!= Не равно

Когда оператор соотношения применяют к элементу синтаксиса или переменной, которой было присвоено значение "na" (not applicable, не применяется), значение "na" для элемента синтаксиса или переменной рассматривается как отдельное значение. Значение "na" рассматривается как неравное никакому другому значению.

Поразрядные операторы

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

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

| Побитовое "ИЛИ". При работе с целочисленными аргументами, действует комплементарное представление до 2 для целочисленного значения. При работе с двоичным аргументом, содержащим меньше битов, чем другой аргумент, более короткий аргумент расширяют, добавляя более старшие биты, равные 0.

^ Побитовое "исключающее ИЛИ" При работе с целочисленными аргументами, действует комплементарное представление до 2 для целочисленного значения. При работе с двоичным аргументом, содержащим меньше битов, чем другой аргумент, более короткий аргумент расширяют, добавляя более старшие биты, равные 0.

x >> y Арифметический сдвиг вправо комплементарного целочисленного представления до 2 для двоичных цифр х * у. Эта функция определяется только для неотрицательных целочисленных значений у. Биты, смещенные в старшие значащие разряды (most significant bit, MSB) как результат сдвига вправо, имеют значение, равное MSB для х, предшествующего операции сдвига

x << y Арифметический сдвиг влево комплементарного целочисленного представления до 2 для двоичных цифр х * у. Эта функция определяется только для неотрицательных целочисленных значений у. Биты, смещенные в младшие значащие разряды (least significant bit, LSB) как результат сдвига влево, имеют значение, равное 0.

Операторы присвоения

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

= Оператор присвоения

+ + Приращение вверх, то есть, x+ + эквивалентно x = x + 1; когда используется в матричном индексе, оценивает значение переменной перед операцией приращения вверх.

− − Приращение вниз, то есть, x− − эквивалентно x = x - 1; когда используется в матричном индексе, оценивает значение переменной перед операцией приращения вниз.

+= Приращение вверх на указанную величину, то есть, x += 3 эквивалентно x = x + 3, и x += (−3) экивалентно x = x + (−3).

−= Приращение вниз на указанную величину, то есть, x −= 3 эквивалентно x = x − 3, и x −= (−3) экивалентно x = x − (−3).

Обозначение диапазона

Нижеследующее обозначение используется для указания диапазона значений.

x = y..z x х принимает целочисленные значения, начиная с у до z, включительно, где x, y и z – целые числа и z больше, чем y.

Математические функции

Определяются нижеследующие математические функции:

Asin( x ) тригонометрическая обратная синусная функция, действующая на аргументе х, который находится в диапазоне от −1,0 до 1,0, включительно, с выходным значением в диапазоне от −рч2 до рч2, включительно, в единицах радиан.

Atan( x ) тригонометрическая обратная тангенсная функция, действующая на аргументе х, с выходным значением в диапазоне от −рч2 до рч2, включительно, в единицах радиан.

Ceil( x ) наименьшее целое числе, большее или равное х.

b, d = Clip1((F + 0) >> 1)

Clip1C( x ) = Clip3( 0, ( 1 << BitDepthC ) − 1, x )

Cos( x ) - тригонометрическая косинусная функция, действующая на аргументе х в единицах радиан.

Floor( x ) наибольшее целое числе, меньшее или равное х.

Ln( x ) натуральный логарифм x (логарифм по основанию e, где e – базовая постоянная натурального логарифма 2.718 281 828...).

Log2( x ) логарифм х по основанию 2.

Log10( x ) – логарифм x по основанию 10.

Round( x ) = Sign( x ) * Floor( Abs( x ) + 0.5 )

Sin( x ) - тригонометрическая синусная функция, действующая на аргументе х в единицах радиан.

Sqrt( x ) =

Swap( x, y ) = ( y, x )

Tan( x ) - тригонометрическая тангенсная функция, действующая на аргументе х в единицах радиан.

Порядок очередности выполнения операций

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

– Операции с более высоким приоритетом вычисляют перед любой операцией более низкого приоритета.

– Операции равного приоритета вычисляются последовательно слева направо.

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

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

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

операции (с операндами x, y и z) "x++", "x− −" "!x", "−x" (в качестве унарного оператора префикса) xy "x * y", "x/y", "x ч y", "", "x % y" "x + y", "x − y" (в качестве двухаргументного оператора), "" "x << y", "x >> y" "x < y", "x <= y", "x > y", "x >= y" "x = = y", "x != y" "x & y" "x | y" "x && y" "x | | y" "x ? y : z" "x..y" "x = y", "x += y", "x −= y"

Текстовое описание логических операций

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

if( condition 0)

statement 0

else if( condition 1 )

statement 1

...
else /* informative remark on remaining condition */

statement n

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

... as follows/... the following applies...:

– If condition 0, statement 0

– Otherwise, if condition 1, statement 1

– ...

– Otherwise (informative remark on remaining condition), statement n

Каждый оператор "If ... Otherwise, if ... Otherwise, ..." в тексте вводится с помощью "... as follows" or "... the following applies", непосредственно сопровождаясь "If ... ". Последним условием "If ... Otherwise, if ... Otherwise, ..." всегда являются операторы "Otherwise, ...". Interleaved "If ... Otherwise, if ... Otherwise, ...", которые могут идентифицироваться совпадением "... as follows" или "... the following applies" с окончанием "Otherwise, ...".

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

if( condition 0a && condition 0b )

statement 0

else if( condition 1a | | condition 1b )

statement 1

...
else
statement n

может быть описано следующим способом:

... as follows/... the following applies:

– If all of the following conditions are true, statement 0:

– condition 0a

– condition 0b

– Otherwise, if one or more of the following conditions are true, statement 1:

– condition 1a

– condition 1b

– ...

– Otherwise, statement n

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

if( condition 0 )

statement 0

if( condition 1 )

statement 1

может быть описано следующим способом:

When condition 0, statement 0

When condition 1, statement 1.

Хотя варианты осуществления изобретения были описаны, в первую очередь, основываясь на видеокодировании, следует заметить, что варианты осуществления системы 10 кодирования, кодер 20 и декодер 30 (и, соответственно, система 10) и другие варианты осуществления, описанные здесь, могут также быть выполнены с возможностью применения при обработке фотографий или при кодировании, то есть, при обработке или кодировании индивидуального изображения, независимо от любого предыдущего или последующего изображения, как при видеокодировании. В целом, только блоки 244 (кодер) и 344 (декодер) межкадрового предсказания могут быть недоступны в случае, когда кодирование при обработке изображения ограничивается одиночным изображением 17.

Все другие функциональные возможности (также упоминаемые как инструменты или технологии) видеокодера 20 и видеодекодера 30 могут, в равной степени, использоваться для обработки фотографий, например, вычисление 204/304 остатка, преобразование 206, квантование 208, обратное квантование 210/310, (обратное) преобразование 212/312, деление на части 262/362, внутрикадровое предсказание 254/354, и/или контурная фильтрация 220, 320, энтропийное кодирование 270 и энтропийное декодирование 304.

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

Для примера, но не для ограничения, такой считываемый компьютером носитель запоминающего устройства может содержать оперативную память (RAM), постоянную память (ROM), электрически стираемую программируемую постоянную память (EEPROM), компакт-диск (CD-ROM) или другое запоминающее устройство на оптических дисках, запоминающее устройство на магнитных дисках или другие магнитные запоминающие устройства, флэш-память или любой другой носитель, который может использоваться для хранения желаемой управляющей программы в форме команд или структур данных и может быть доступен компьютеру. Кроме того, любое соединение соответственно называется считываемым компьютером носителем. Например, если команды передаются с веб-сайта, сервера или от другого удаленного источника, используя коаксиальный кабель, оптический кабель, витую пару, цифровую абонентскую линию (digital subscriber line, DSL) или беспроводные технологии, такие как инфракрасная, радиоволновая или микроволновая, то тогда коаксиальный кабель, оптический кабель, витая пара, DSL или беспроводные технологии, такие как инфракрасная, радиоволновая или микроволновая, содержатся в определении носителя. Однако, следует понимать, что считываемый компьютером носитель запоминающего устройства для хранения данных и носитель запоминающего устройства данных могут не содержать соединения, несущие, сигналы или другие переносные носители, но являться непереносными физическими носителями для хранения данных. Диски содержат компакт-диски (CD)ерные диски, оптические диски, универсальные цифровые диски (DVD), дискеты и диски Blu-ray, где одни диски обычно воспроизводят данные магнитным способом, тогда как другие диски воспроизводят данные оптически с помощью лазеров. Сочетания вышеперечисленного также могут содержаться в рамках объема считываемых компьютером носителей.

Команды могут исполняться одним или более процессорами, такими как один или более цифровых сигнальных процессоров (digital signal processor, DSP), универсальные микропроцессоры, специализированные интегральные схемы (application-specific integrated circuit, ASIC), программируемые логические интегральные схемы (field programmable gate array, FPGA) или другие эквивалентные интегральные или дискретные логические схемы. Соответственно, термин "процессор", как он используется здесь, может относиться к любой из вышеперечисленных структур или к любой другой структуре, пригодной для реализации описанных здесь технологий. Кроме того, в некоторых вариантах функциональные возможности, представленные в настоящем описании, могут быть обеспечены в рамках специализированных аппаратных средств и/или в модулях программного обеспечения, выполненных с возможностью кодирования и декодирования, или могут содержаться объединенном кодеке. Кроме того, технологии могут быть полностью реализованы в одной или нескольких схемах или логических элементах.

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

Похожие патенты RU2797574C2

название год авторы номер документа
ВЕДЕНИЕ ТАБЛИЦ ДЛЯ ХРАНЕНИЯ КАНДИДАТОВ ПРЕДСКАЗАНИЯ ВЕКТОРА ДВИЖЕНИЯ НА ОСНОВЕ ИСТОРИИ 2019
  • Чжан, Ли
  • Чжан, Кай
  • Лю, Хунбинь
  • Ван, Юэ
RU2808631C2
СПОСОБЫ И УСТРОЙСТВА КОДИРОВАНИЯ ВИДЕО С ИСПОЛЬЗОВАНИЕМ ПРОГНОЗИРОВАНИЯ ВЕКТОРА ДВИЖЕНИЯ НА ОСНОВЕ ИСТОРИИ 2019
  • Ван, Сянлинь
  • Чэнь, И-Вэнь
RU2752644C1
КОДЕР, ДЕКОДЕР И СООТВЕТСТВУЮЩИЕ СПОСОБЫ ИСПОЛЬЗОВАНИЯ ДЛЯ СПИСКА ОБЪЕДИНЕНИЯ IBC 2020
  • Чэнь, Хуаньбан
  • Гао, Хань
  • Ян, Хайтао
RU2817030C2
ВЗАИМОДЕЙСТВИЕ МЕЖДУ ТАБЛИЦЕЙ ПОИСКА (LUT) И УСОВЕРШЕНСТВОВАННЫМ ПРЕДСКАЗАНИЕМ ВЕКТОРА ДВИЖЕНИЯ (AMVP) 2019
  • Чжан, Ли
  • Чжан, Кай
  • Лю, Хунбинь
  • Ван, Юэ
RU2807504C2
СПОСОБЫ И УСТРОЙСТВА ДЛЯ КОДИРОВАНИЯ ВИДЕО С ИСПОЛЬЗОВАНИЕМ ВЕКТОРА ДВИЖЕНИЯ ВРЕМЕННОГО ПРЕДСКАЗАНИЯ НА ОСНОВЕ СУББЛОКОВ 2019
  • Чэнь, И-Вэнь
  • Ван, Сянлинь
RU2757209C1
Способ и устройство для передачи информации о размере списка кандидатов предсказателя 2020
  • Сюй Сяочжун
  • Ли Сян
  • Лю Шань
RU2779931C1
СПОСОБ И АППАРАТУРА ВНЕШНЕГО ПРЕДСКАЗАНИЯ 2019
  • Чэнь, Сюй
  • Чжэн, Цзяньхуа
RU2798316C2
УСТРОЙСТВО ДЛЯ КОДИРОВАНИЯ ВИДЕО, СПОСОБ КОДИРОВАНИЯ ВИДЕО, ПРОГРАММА КОДИРОВАНИЯ ВИДЕО, УСТРОЙСТВО ДЛЯ ДЕКОДИРОВАНИЯ ВИДЕО, СПОСОБ ДЕКОДИРОВАНИЯ ВИДЕО И ПРОГРАММА ДЕКОДИРОВАНИЯ ВИДЕО 2020
  • Такэхара, Хидэки
  • Накамура, Хироя
  • Сакадзумэ, Сатору
  • Фукусима, Сигэру
  • Кумакура, Тору
  • Курасигэ, Хироюки
RU2779635C1
СПОСОБ И УСТРОЙСТВО ДЛЯ ОБРАБОТКИ ВИДЕОСИГНАЛА НА ОСНОВАНИИ ОСНОВАННОГО НА ИСТОРИИ ПРЕДСКАЗАНИЯ ВЕКТОРА ДВИЖЕНИЯ 2019
  • Чжао, Джейн
  • Ким, Сеунгхван
RU2773431C1
ОГРАНИЧЕНИЕ ПРЕДСТАВЛЕНИЯ ДИФФЕРЕНЦИАЛЬНОЙ ИМПУЛЬСНО-КОДОВОЙ МОДУЛЯЦИИ КВАНТОВОГО ОСТАТКА КОДИРОВАННОГО ВИДЕО 2020
  • Чжу, Вэйцзя
  • Чжан, Ли
  • Сюй, Цзичжэн
  • Чуан, Хсяо Чиан
RU2807214C2

Иллюстрации к изобретению RU 2 797 574 C2

Реферат патента 2023 года КОДЕР, ДЕКОДЕР И СООТВЕТСТВУЮЩИЕ СПОСОБЫ, ИСПОЛЬЗУЮЩИЕ СПИСОК НА СЛИЯНИЕ ВНУТРИКАДРОВОГО КОПИРОВАНИЯ БЛОКОВ

Изобретение относится к области обработки изображений и, более конкретно, к совместно используемому списку для предсказания при кодировании и декодировании видео. Технический результат заключается в повышении степени сжатия при небольшой потере или отсутствии потери качества изображения. Предложены способы и устройства построения списка кандидатов на слияние для режима внутрикадрового копирования блоков (IBC), причем они содержат этапы: вставляют блочный вектор левого соседнего блока текущего блока в начальный список на слияние текущего блока, когда левый соседний блок доступен и левый соседний блок использует режим IBC; вставляют блочный вектор вышеупомянутого соседнего блока текущего блока в начальный список на слияние, когда вышеупомянутый соседний блок доступен, вышеупомянутый соседний блок использует режим IBC и блочный вектор вышеупомянутого соседнего блока не является таким же, как блочный вектор левого соседнего блока; вставляют блочный вектор последнего кандидата в предикторе вектора движения, основанного на архивных данных (HMVP), в начальный список на слияние, когда блочный вектор вышеупомянутого соседнего блока не является таким же, как блочный вектор последнего кандидата в HMVP, и когда блочный вектор левого соседнего блока не является таким же, как блочный вектор последнего кандидата в HMVP; получают блочный вектор текущего блока, соответствующий начальному списку на слияние после вышеупомянутых процессов вставки, и индекс кандидата на слияние для текущего блока. 10 н. и 6 з.п. ф-лы, 10 ил., 2 табл.

Формула изобретения RU 2 797 574 C2

1. Способ для построения списка кандидатов на слияние для режима внутрикадрового копирования блоков (Intra block copy, IBC), причем упомянутый способ содержит этапы, на которых:

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

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

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

2. Способ по п. 1, в котором способ дополнительно содержит этап, на котором:

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

3. Способ для построения списка кандидатов на слияние для режима внутрикадрового копирования блоков (Intra block copy, IBC), причем упомянутый способ содержит этапы, на которых:

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

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

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

4. Способ по п. 3, в котором способ дополнительно содержит этап, на котором:

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

5. Способ для построения списка кандидатов на слияние для режима внутрикадрового копирования блоков (Intra block copy, IBC), причем упомянутый способ содержит этапы, на которых:

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

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

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

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

6. Способ по п. 5, в котором способ дополнительно содержит этап, на котором:

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

7. Способ по п. 5 или 6, в котором начальный список на слияние перед первым процессом вставки является пустым списком.

8. Способ по любому из пп. 5-7, в котором вышеупомянутые процессы вставки выполняют по порядку.

9. Способ для построения списка кандидатов на слияние для режима внутрикадрового копирования блоков (Intra block copy, IBC), причем упомянутый способ содержит этапы, на которых:

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

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

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

10. Способ по п. 9, в котором способ дополнительно содержит этап, на котором:

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

11. Способ для построения списка кандидатов на слияние для режима внутрикадрового копирования блоков (Intra block copy, IBC), причем упомянутый способ содержит этапы, на которых:

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

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

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

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

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

12. Кодер (20), содержащий схему обработки для выполнения способа, соответствующего любому из пп. 1-11.

13. Декодер (30), содержащий схему обработки для выполнения способа, соответствующего любому из пп. 1-11.

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

15. Декодер, содержащий:

один или более процессоров; и

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

16. Устройство декодирования видеоданных, содержащее:

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

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

Документы, цитированные в отчете о поиске Патент 2023 года RU2797574C2

LI ZHANG et al., CE4-related: Restrictions on History-based Motion Vector Prediction, Joint Video Experts Team (JVET) of ITU-T SG 16 WP 3 and ISO/IEC JTC 1/SC 29/WG 11, JVET-M0272, 13th Meeting: Marrakech, 9-18 Jan
Станок для придания концам круглых радиаторных трубок шестигранного сечения 1924
  • Гаркин В.А.
SU2019A1
BENJAMIN BROSS et al., Versatile Video Coding (Draft 4), Joint Video Experts Team (JVET) of ITU-T SG 16 WP 3 and ISO/IEC JTC

RU 2 797 574 C2

Авторы

Гао, Хань

Есенлик, Семих

Ван, Бяо

Котра, Ананд Мехер

Чэнь, Цзяньлэ

Даты

2023-06-07Публикация

2020-02-10Подача