КОДИРОВАНИЕ ОСТАТКОВ И КОЭФФИЦИЕНТОВ ДЛЯ КОДИРОВАНИЯ ВИДЕО Российский патент 2024 года по МПК H04N19/70 H04N19/98 

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

Перекрестная ссылка на родственную заявку

[0001] Эта заявка основана на и испрашивает приоритет предварительной заявки № 63/145,964 поданной 4 февраля 2021, все содержание которой включено в настоящий документ посредством ссылки для всех целей.

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

[0002] Это раскрытие относится к кодированию и сжатию видео. Более конкретно, это раскрытие относится к усовершенствованиям и упрощениям кодирования остатков и коэффициентов для кодирования видео.

ПРЕДШЕСТВУЮЩИЙ УРОВЕНЬ ТЕХНИКИ

[0003] Для сжатия видеоданных могут использоваться различные методы кодирования видео. Кодирование видео выполняется в соответствии с одним или более стандартами кодирования видео. Например, стандарты кодирования видео включают Многоцелевое кодирование видео (VVC), Совместную исследовательскую тестовую модель (JEM), Высокоэффективное кодирование видео (H.265/HEVC), Усовершенствованное кодирование видео (H.264/AVC), кодирование Экспертной группы по движущимся изображениям (MPEG) или подобное. В кодировании видео обычно используются методы предсказания (например, интер-предсказание, интра-предсказание или тому подобное), которые используют преимущество избыточности, присутствующей в видеоизображениях или последовательностях. Важной целью методов кодирования видео является сжатие видеоданных в форму, использующую более низкую битовую скорость (битрейт), при этом избегая или сводя к минимуму ухудшение качества видео.

Краткое описание сущности изобретения

[0004] Примеры настоящего раскрытия предоставляют способы и устройство для кодирования видео.

[0005] В соответствии с первым аспектом настоящего раскрытия, предложен способ для кодирования видео. Способ может включать в себя: прием, декодером, флага расширения диапазона набора параметров последовательности (SPS), который указывает, присутствует ли синтаксическая структура, sps_range_extension, в синтаксических структурах полезной нагрузки последовательности необработанных байтов (RBSP) заголовка слайса (SH), на основе значения флага расширения диапазона SPS.

[0006] В соответствии со вторым аспектом настоящего раскрытия, предложен способ для кодирования видео. Способ может включать в себя: прием, декодером, флага включенного выравнивания набора параметров последовательности (SPS), который указывает, выровнен ли индекс, ivlCurrRange, перед обходным декодированием синтаксических элементов sb_coded_flag, abs_remainder, dec_abs_level и coeff_sign_flagn на основе значения флага включенного выравнивания SPS.

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

[0008] В соответствии с четвертым аспектом настоящего раскрытия, предложен способ для кодирования видео. Способ может включать в себя: прием, декодером, флага включенной постоянной адаптации Райса, который указывает, инициализирован ли вывод параметра Райса для бинаризации abs_remaining и dec_abs_level в начале каждого подблока, принимающего зависимую от режима статистику, накопленную из предыдущих подблоков, на основе значения флага включенной постоянной адаптации Райса.

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

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

[0010] Прилагаемые чертежи, которые включены в данную спецификацию и составляют ее часть, иллюстрируют примеры, соответствующие настоящему раскрытию, и вместе с описанием служат для объяснения принципов раскрытия.

[0011] Фиг. 1 представляет собой блок-схему кодера в соответствии с примером настоящего раскрытия.

[0012] Фиг. 2 представляет собой блок-схему декодера в соответствии с примером настоящего раскрытия.

[0013] Фиг. 3A представляет собой диаграмму, иллюстрирующую разбиения блоков в структуре многотипного дерева, в соответствии с примером настоящего раскрытия.

[0014] Фиг. 3B представляет собой диаграмму, иллюстрирующую разбиения блоков в структуре многотипного дерева, в соответствии с примером настоящего раскрытия.

[0015] Фиг. 3C представляет собой диаграмму, иллюстрирующую разбиения блоков в структуре многотипного дерева, в соответствии с примером настоящего раскрытия.

[0016] Фиг. 3D представляет собой диаграмму, иллюстрирующую разбиения блоков в структуре многотипного дерева, в соответствии с примером настоящего раскрытия.

[0017] Фиг. 3E представляет собой диаграмму, иллюстрирующую разбиения блоков в структуре многотипного дерева, в соответствии с примером настоящего раскрытия.

[0018] Фиг. 4 представляет собой диаграмму, иллюстрирующую картинку с 18 на 12 CTU яркости, в соответствии с примером настоящего раскрытия.

[0019] Фиг. 5 представляет собой иллюстрацию картинки с 18 на 12 CTU яркости, в соответствии с примером настоящего раскрытия.

[0020] Фиг. 6A представляет собой иллюстрацию примера запрещенного разбиения троичного дерева (TT) и двоичного дерева (BT) в VTM, в соответствии с примером настоящего раскрытия.

[0021] Фиг. 6B представляет собой иллюстрацию примера запрещенного разбиения TT и BT в VTM, в соответствии с примером настоящего раскрытия.

[0022] Фиг. 6C представляет собой иллюстрацию примера запрещенного разбиения TT и BT в VTM, в соответствии с примером настоящего раскрытия.

[0023] Фиг. 6D представляет собой иллюстрацию примера запрещенного разбиения TT и BT в VTM, в соответствии с примером настоящего раскрытия.

[0024] Фиг. 6E представляет собой иллюстрацию примера запрещенного разбиения TT и BT в VTM, в соответствии с примером настоящего раскрытия.

[0025] Фиг. 6F представляет собой иллюстрацию примера запрещенного разбиения TT и BT в VTM, в соответствии с примером настоящего раскрытия.

[0026] Фиг. 6G представляет собой иллюстрацию примера запрещенного разбиения TT и BT в VTM, в соответствии с примером настоящего раскрытия.

[0027] Фиг. 6H представляет собой иллюстрацию примера запрещенного разбиения TT и BT в VTM, в соответствии с примером настоящего раскрытия.

[0028] Фиг. 7 представляет собой иллюстрацию структуры остаточного кодирования для блоков преобразования, в соответствии с примером настоящего раскрытия.

[0029] Фиг. 8 представляет собой иллюстрацию структуры остаточного кодирования для блоков пропуска преобразования, в соответствии с примером настоящего раскрытия.

[0030] Фиг. 9 представляет собой иллюстрацию двух скалярных квантователей, в соответствии с примером настоящего раскрытия.

[0031] Фиг. 10A представляет собой иллюстрацию перехода состояния, в соответствии с примером настоящего раскрытия.

[0032] Фиг. 10B представляет собой иллюстрацию выбора квантователя, в соответствии с примером настоящего раскрытия.

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

[0034] Фиг. 12 представляет собой иллюстрацию примера блока, кодированного в режиме палитры, в соответствии с настоящим раскрытием.

[0035] Фиг. 13 представляет собой иллюстрацию использования предсказателя (предиктора) палитры для сигнализации записей палитры, в соответствии с настоящим раскрытием.

[0036] Фиг. 14A представляет собой иллюстрацию сканирования перемещением по горизонтали, в соответствии с настоящим раскрытием.

[0037] Фиг. 14B представляет собой иллюстрацию сканирования перемещением по вертикали, в соответствии с настоящим раскрытием.

[0038] Фиг. 15A представляет собой иллюстрацию сканирования индексной карты на основе подблоков для палитры, в соответствии с настоящим раскрытием.

[0039] Фиг. 15B представляет собой иллюстрацию сканирования индексной карты на основе подблоков для палитры, в соответствии с настоящим раскрытием.

[0040] Фиг. 16 представляет собой способ для кодирования видеосигнала, в соответствии с примером настоящего раскрытия.

[0041] Фиг. 17 представляет собой способ для кодирования видеосигнала, в соответствии с примером настоящего раскрытия.

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

[0043] Фиг. 19 иллюстрирует способ для кодирования видео, в соответствии с примером настоящего раскрытия.

[0044] Фиг. 20 иллюстрирует способ для кодирования видео, в соответствии с примером настоящего раскрытия.

[0045] Фиг. 21 иллюстрирует способ для кодирования видео, в соответствии с примером настоящего раскрытия.

[0046] Фиг. 22 иллюстрирует способ ля кодирования видео, в соответствии с примером настоящего раскрытия.

[0047] Фиг. 23 представляет собой блок-схему, иллюстрирующую примерную систему для кодирования и декодирования блоков видео, в соответствии с примером настоящего раскрытия.

[0048] Фиг. 24 представляет собой блок-схему, иллюстрирующую примерный кодер видео, в соответствии с примером настоящего раскрытия.

[0049] Фиг. 25 представляет собой блок-схему, иллюстрирующую примерный декодер видео, в соответствии с примером настоящего раскрытия.

ПОДРОБНОЕ ОПИСАНИЕ

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

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

[0052] Следует понимать, что, хотя термины “первый”, “второй”, “третий” и т.д. могут использоваться здесь для описания различной информации, информация не должна ограничиваться этими терминами. Эти термины используются только для различения одной категории информации от другой. Например, не выходя за рамки настоящего раскрытия, первая информация может быть названа второй информацией; и аналогично, вторая информация также может быть названа первой информацией. Используемый здесь термин “если” может пониматься как означающий “когда” или “после” или “в ответ на суждение” в зависимости от контекста.

[0053] В октябре 2013 года была завершена разработка первой версии стандарта HEVC, которая обеспечивает экономию битовой скорости (битрейта) примерно на 50% или эквивалентное качество восприятия по сравнению со стандартом кодирования видео предыдущего поколения H.264/MPEG AVC. Хотя стандарт HEVC обеспечивает значительные улучшения кодирования по сравнению со своим предшественником, есть свидетельства того, что более высокая эффективность кодирования может быть достигнута с помощью дополнительных инструментов кодирования по сравнению с HEVC. Исходя из этого, как VCEG, так и MPEG начали работу по изучению новых технологий кодирования для будущей стандартизации кодирования видео. В октябре 2015 года ITU-T VECG и ISO/IEC MPEG сформировали совместную группу по исследованию видео (JVET), чтобы начать основательное изучение передовых технологий, которые могли бы обеспечить существенное повышение эффективности кодирования. Одно опорное программное обеспечение под названием Joint exploration model (JEM, модель совместных исследований) поддерживалось JVET путем интеграции нескольких дополнительных инструментов кодирования поверх тестовой модели HEVC (HM).

[0054] В октябре 2017 года ITU-T и ISO/IEC выпустили совместный запрос предложений (CfP) по сжатию видео с возможностями, выходящими за рамки HEVC. В апреле 2018 года на 10-ом совещании JVET были получены и оценены 23 ответа CfP, которые продемонстрировали увеличение эффективности сжатия по сравнению с HEVC примерно на 40%. Основываясь на таких результатах оценки, JVET запустило новый проект по разработке стандарта кодирования видео нового поколения, который называется Universal Video Coding (VVC, многоцелевое кодирование видео). В том же месяце была создана одна опорная база программного кода, называемая VVC test model (VTM, тестовая модель VVC), для демонстрации опорной реализации стандарта VVC.

[0055] Как и HEVC, VVC построено на блочной гибридной структуре кодирования видео.

[0056] На фиг. 1 показана общая схема блочного видеокодера для VVC. В частности, на фиг. 1 показан типичный кодер 100. Кодер 100 имеет видеовход 110, компенсацию 112 движения, оценку 114 движения, решение 116 интра/интер-режима, блочный предиктор (предсказатель) 140, сумматор 128, преобразование 130, квантование 132, информацию 142, связанную с предсказанием, интра-предсказание 118, буфер 120 картинки, обратное квантование 134, обратное преобразование 136, сумматор 126, память 124, внутриконтурный фильтр 122, энтропийное кодирование 138 и битовый поток 144.

[0057] В кодере 100, видеокадр разбивается на множество блоков видео для обработки. Для каждого данного блока видео, предсказание формируется на основе либо подхода интер-предсказания, либо подхода интра-предсказания.

[0058] Остаток предсказания, представляющий разницу между текущим блоком видео, частью видеовхода 110, и его предиктором, частью блочного предиктора 140, отправляется на преобразование 130 из сумматора 128. Затем коэффициенты преобразования отправляются из преобразования 130 на квантование 132 для уменьшения энтропии. Затем квантованные коэффициенты подаются на энтропийное кодирование 138 для формирования сжатого битового потока видео. Как показано на фиг. 1, информация 142, относящаяся к предсказанию, из решения 116 интра/интер-режима, такая как информация о разбиении блока видео, векторы движения (MV), индекс опорной картинки и режим интра-предсказания, также подается через энтропийное кодирование 138 и сохраняется в сжатом битовом потоке 144. Сжатый битовый поток 144 включает в себя битовый поток видео.

[0059] В кодере 100 также требуются схемы, связанные с декодером, для восстановления пикселов с целью предсказания. Сначала восстанавливается остаток предсказания посредством обратного квантования 134 и обратного преобразования 136. Этот восстановленный остаток предсказания объединяется с блочным предиктором 140 для формирования нефильтрованных восстановленных пикселов для текущего блока видео.

[0060] Пространственное предсказание (или “интра-предсказание”) использует пикселы из выборок уже кодированных соседних блоков (которые называются опорными выборками) в том же видеокадре, что и текущий блок видео, для предсказания текущего блока видео.

[0061] Временное предсказание (также называемое “интер-предсказанием”) использует восстановленные пикселы из уже кодированных видео картинок для предсказания текущего блока видео. Временное предсказание уменьшает временную избыточность, присущую видеосигналу. Сигнал временного предсказания для данной единицы кодирования (CU) или блока кодирования обычно сигнализируется одним или более MV, которые указывают величину и направление движения между текущей CU и ее временной опорой. Кроме того, если поддерживается несколько опорных картинок, дополнительно отправляется один индекс опорной картинки, который используется для идентификации, из какой опорной картинки в хранилище опорных картинок приходит сигнал временного предсказания.

[0062] Оценка 114 движения принимает видеовход 110 и сигнал из буфера 120 картинок и выводит, на компенсацию 112 движения, сигнал оценки движения. Компенсация 112 движения принимает видеовход 110, сигнал из буфера 120 картинок и сигнал оценки движения из оценки 114 движения и выводит сигнал компенсации движения на решение 116 интра/интер-режима.

[0063] После того, как выполнено пространственное и/или временное предсказание, решение 116 интра/интер-режима в кодере 100 выбирает наилучший режим предсказания, например, на основе метода оптимизации по критерию скорости-искажения. Затем блочный предиктор 140 вычитается из текущего блока видео, и результирующий остаток предсказания декоррелируется с использованием преобразования 130 и квантования 132. Результирующие квантованные остаточные коэффициенты подвергаются обратному квантованию с помощью обратного квантования 134 и обратному преобразованию с помощью обратного преобразования 136 для формирования восстановленного остатка, который затем добавляется обратно в блок предсказания для формирования восстановленного сигнала CU. Дополнительная внутриконтурная фильтрация 122, такая как фильтрация устранения блочности, адаптивное смещение выборки (SAO) и/или адаптивная внутриконтурная фильтрация (ALF), может быть применена к восстановленной CU перед ее помещением в хранилище опорной картинки буфера 120 картинок и использованием для кодирования будущих блоков видео. Для формирования выходного битового потока видео 144, режим кодирования (интер или интра), информация режима предсказания, информация движения и квантованных остаточных коэффициентов отправляются в модуль 138 энтропийного кодирования для дальнейшего сжатия и упаковки, чтобы сформировать битовый поток.

[0064] На фиг. 1 приведена блок-схема типовой блочной гибридной системы кодирования видео. Входной видеосигнал обрабатывается блок за блоком (называются единицами кодирования (CU)). В VTM-1.0, размер CU может составлять до 128×128 пикселов. Однако, в отличие от HEVC, которое разбивает блоки только на основе квадродеревьев, в VVC, одна единица дерева кодирования (CTU) разбивается на CU для адаптации к различным локальным характеристикам на основе квадро-/двоичного/троичного дерева. По определению, блок дерева кодирования (CTB) представляет собой N×N блок выборок для некоторого значения N, так что разделение компонента на CTB является разбиением. CTU включает в себя CTB выборок яркости, два соответствующих CTB выборок цветности картинки, которая имеет три массива выборок, или CTB выборок монохромной картинки или картинки, которая кодируется с использованием трех отдельных цветовых плоскостей и синтаксических структур, используемых для кодирования выборок. Кроме того, концепция типа единицы множественного разбиения в HEVC удалена, т.е. разделение CU, единицы предсказания (PU) и единицы преобразования (TU) больше не существует в VVC; вместо этого каждая CU всегда используется в качестве базовой единицы как для предсказания, так и для преобразования без дальнейших разбиений. В структуре многотипного дерева, одна CTU сначала разбивается структурой квадродерева. Затем каждый листовой узел квадродерева может быть дополнительно разбит структурой двоичного и троичного дерева. Как показано на фиг. 3A, 3B, 3C, 3D и 3E существует пять типов разбиения: четвертичное разбиение, горизонтальное двоичное разбиение, вертикальное двоичное разбиение, горизонтальное троичное разбиение и вертикальное троичное разделение.

[0065] Фиг. 3A показывает диаграмму, иллюстрирующую четвертичное разбиение блока в структуре многотипного дерева, в соответствии с настоящим раскрытием.

[0066] Фиг. 3B показывает диаграмму, иллюстрирующую вертикальное двоичное разбиение блока в структуре многотипного дерева, в соответствии с настоящим раскрытием.

[0067] Фиг. 3C показывает диаграмму, иллюстрирующую горизонтальное двоичное разбиение блока в структуре многотипного дерева, в соответствии с настоящим раскрытием.

[0068] Фиг. 3D показывает диаграмму, иллюстрирующую вертикальное троичное разбиение блока в структуре многотипного дерева, в соответствии с настоящим раскрытием.

[0069] Фиг. 3E показывает диаграмму, иллюстрирующую горизонтальное троичное разбиение блока в структуре многотипного дерева, в соответствии с настоящим раскрытием.

[0070] На фиг. 1, может быть выполнено пространственное предсказание и/или временное предсказание. Пространственное предсказание (или “интра-предсказание”) использует пикселы из выборок уже кодированных соседних блоков (которые называются опорными выборками) в одной и той же видео картинке/слайсе для предсказания текущего блока видео. Пространственное предсказание уменьшает пространственную избыточность, присущую видеосигналу. Временное предсказание (также называемое “интер-предсказанием” или “предсказанием с компенсацией движения”) использует восстановленные пикселы из уже кодированных видео картинок для предсказания текущего блока видео. Временное предсказание уменьшает временную избыточность, присущую видеосигналу. Сигнал временного предсказания для данной CU обычно сигнализируется одним или более векторами движения (MV), которые указывают величину и направление движения между текущей CU и ее временной опорой. Кроме того, если поддерживается несколько опорных картинок, дополнительно отправляется один индекс опорной картинки, который используется для идентификации, из какой опорной картинки в хранилище опорных картинок приходит сигнал временного предсказания. После пространственного и/или временного предсказания, блок решения о режиме в кодере выбирает наилучший режим предсказания, например, на основе способа оптимизации по критерию скорости-искажения. Затем блок предсказания вычитается из текущего блока видео; и остаток предсказания декоррелируется с использованием преобразования и квантуется. Квантованные остаточные коэффициенты подвергаются обратному квантованию и обратному преобразованию для формирования восстановленного остатка, который затем добавляется обратно в блок предсказания для формирования восстановленного сигнала CU. Дополнительная внутриконтурная фильтрация, такая как фильтрация устранения блочности, адаптивное смещение выборки (SAO) и адаптивная внутриконтурная фильтрация (ALF), может быть применена к восстановленной CU, прежде чем она будет помещена в хранилище опорных картинок и использована для кодирования будущих блоков видео. Для формирования выходного битового потока видео, режим кодирования (интер или интра), информация режима предсказания, информация движения и квантованные остаточные коэффициенты отправляются на модуль энтропийного кодирования для дальнейшего сжатия и упаковки, чтобы сформировать битовый поток.

[0071] На фиг. 2 показана общая блок-схема видеодекодера для VVC. В частности, на фиг. 2 показана блок-схема типового декодера 200. Декодер 200 имеет битовый поток 210, энтропийное декодирование 212, обратное квантование 214, обратное преобразование 216, сумматор 218, селектор 220 интра/интер-режима, интра-предсказание 222, память 230, внутриконтурный фильтр 228, компенсацию движения 224, буфер 226 картинок, информацию 234, относящуюся к предсказанию, и видеовыход 232.

[0072] Декодер 200 аналогичен секции, связанной с восстановлением, находящейся в кодере 100 на фиг. 1. В декодере 200, входной битовый поток 210 видео сначала декодируется с помощью энтропийного декодирования 212 для получения квантованных уровней коэффициентов и информации, связанной с предсказанием. Затем квантованные уровни коэффициентов обрабатываются посредством обратного квантования 214 и обратного преобразования 216 для получения восстановленного остатка предсказания. Механизм блочного предсказания, реализованный в селекторе 220 интра/интер-режима, сконфигурирован для выполнения либо интра-предсказания 222, либо компенсации 224 движения на основе декодированной информации предсказания. Набор нефильтрованных восстановленных пикселов получается путем суммирования восстановленного остатка предсказания из обратного преобразования 216 и предиктивного выхода, сформированного механизмом блочного предиктора, с использованием сумматора 218.

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

[0074] На фиг. 2 приведена общая блок-схема блочного видеодекодера. Битовый поток видео сначала энтропийно декодируется в модуле энтропийного декодирования. Режим кодирования и информация предсказания отправляются либо в модуль пространственного предсказания (в случае интра-кодирования), либо в модуль временного предсказания (в случае интер-кодирования) для формирования блока предсказания. Остаточные коэффициенты преобразования отправляются в модуль обратного квантования и модуль обратного преобразования для восстановления остаточного блока. Затем блок предсказания и остаточный блок суммируются. Восстановленный блок может дополнительно проходить внутриконтурную фильтрацию, прежде чем он будет сохранен в хранилище опорных картинок. Восстановленное видео в хранилище опорных картинок затем отправляется для управления устройством отображения, а также используется для предсказания будущих блоков видео.

[0075] В общем, базовая схема интра-предсказания, применяемая в VVC, остается такой же, как и в HEVC, за исключением того, что несколько модулей дополнительно расширены и/или усовершенствованы, например, режим интра-кодирования с под-разбиением (ISP), расширенное интра-предсказание с направлениями интра-предсказания в широком угле, комбинация позиционно-зависимого интра-предсказания (PDPC) и 4-отводная интерполяция интра-предсказания.

[0076] Разбиение картинок, групп мозаичных элементов, мозаичных элементов и CTU в VVC

[0077] В VVC, мозаичный элемент (тайл, англ. tile) определяется как прямоугольная область CTU в пределах конкретного столбца мозаичных элементов и конкретной мозаичной строки в картинке. Группа мозаичных элементов - это группа из целого числа мозаичных элементов картинки, которые содержатся исключительно в одной единице NAL. В принципе, концепция группы мозаичных элементов та же, что и слайса (slice), как определено в HEVC. Например, картинки разделены на группы мозаичных элементов и мозаичные элементы. Мозаичный элемент представляет собой последовательность CTU, которые покрывают прямоугольную область картинки. Группа мозаичных элементов содержит несколько мозаичных элементов картинки. Поддерживаются два режима групп мозаичных элементов, а именно, режим группы мозаичных элементов с растровым сканированием и режим прямоугольной группы мозаичных элементов. В режиме группы мозаичных элементов с растровым сканированием, группа мозаичных элементов содержит последовательность мозаичных элементов в растровом скане картинки. В режиме прямоугольной группы мозаичных элементов, группа мозаичных элементов содержит несколько мозаичных элементов картинки, которые в совокупности образуют прямоугольную область картинки. Мозаичные элементы в прямоугольной группе мозаичных элементов расположены в порядке растрового сканирования мозаичных элементов группы мозаичных элементов.

[0078] На фиг. 4 показан пример разбиения картинки на группы мозаичных элементов растровой развертки, где картинка разделена на 12 мозаичных элементов и 3 группы мозаичных элементов растрового сканирования. Фиг. 4 включает мозаичные элементы 410, 412, 414, 416 и 418. Каждый мозаичный элемент имеет 18 CTU. Более конкретно, на фиг. 4 показана картинка с 18 на 12 CTU яркости, которая разбита на 12 мозаичных элементов и 3 группы мозаичных элементов (информативно). Три группы мозаичных элементов являются следующими (1) первая группа мозаичных элементов включает мозаичные элементы 410 и 412, (2) вторая группа мозаичных элементов включает мозаичные элементы 414, 416, 418, 420 и 422, и (3) третья группа мозаичных элементов включает мозаичные элементы 424, 426, 428, 430 и 432.

[0079] На фиг. 5 показан пример разбиения картинки на прямоугольные группы мозаичных элементов, где картинка разделено на 24 мозаичных элемента (6 столбцов мозаичных элементов и 4 строки мозаичных элементов) и 9 прямоугольных групп мозаичных элементов. На фиг. 5 представлены мозаичные элементы 510, 512, 514, 516, 518, 520, 522, 524, 526, 528, 530, 532, 534, 536, 538, 540, 542, 544, 546, 548, 550, 552, 554 и 556. Более конкретно, на фиг. 5 показана картинка с 18 на 12 CTU яркости, которая разбита на 24 мозаичных элемента и 9 групп мозаичных элементов (информативно). Группа мозаичных элементов содержит мозаичные элементы, а мозаичный элемент содержит CTU. 9 прямоугольных групп мозаичных элементов включают в себя (1) два мозаичных элемента 510 и 512, (2) два мозаичных элемента 514 и 516, (3) два мозаичных элемента 518 и 520, (4) четыре мозаичных элемента 522, 524, 534 и 536, (5) четыре группы мозаичных элементов 526, 528, 538 и 540, (6) четыре мозаичных элемента 530, 532, 542 и 544, (7) два мозаичных элемента 546 и 548, (8) два мозаичных элемента 550 и 552 и (9) два мозаичных элемента 554 и 556.

[0080] Преобразования крупноразмерного блока с высокочастотным обнулением в VVC

[0081] В VTM4 включены преобразования большого блока размером до 64×64, что, главным образом, полезно для видео с повышенным разрешением, например, последовательностей 1080p и 4K. Высокочастотные коэффициенты преобразования обнуляются для блоков преобразования с размером (ширина или высота, или как ширина, так и высота), равным 64, так что сохраняются только низкочастотные коэффициенты. Например, для блока преобразования M×N, где M - ширина блока и N - высота блока, когда M равно 64, сохраняются только левые 32 столбца коэффициентов преобразования. Аналогично, когда N равно 64, сохраняются только верхние 32 строки коэффициентов преобразования. Когда режим пропуска преобразования используется для большого блока, используется весь блок без обнуления каких-либо значений.

[0082] Единицы данных виртуального конвейера (VPDU) в VVC

[0083] Единицы данных виртуального конвейера (VPDU) определяются как неперекрывающиеся единицы в картинке. В аппаратных декодерах, последовательные VPDU обрабатываются несколькими стадиями конвейера одновременно. Размер VPDU примерно пропорционален размеру буфера на большинстве стадий конвейера, поэтому важно сохранять размер VPDU небольшим. В большинстве аппаратных декодеров, размер VPDU может быть установлен на максимальный размер блока преобразования (ТВ). Однако в VVC, разбиение троичного дерева (TT) и двоичного дерева (BT) может привести к увеличению размера VPDU.

[0084] Для сохранения размера VPDU как выборок яркости 64×64, в VTM5 применяются следующие нормативные ограничения на разбиение (с модификацией сигнализации синтаксиса):

[0085] Разделение TT не допускается для CU с шириной или высотой, либо как с шириной, так и высотой, равной 128.

[0086] Для CU размером 128×N с N≤64 (т.е. шириной, равной 128, и высотой, меньшей 128), горизонтальное BT не допускается.

[0087] Для CU размером N×128 с N≤64 (т.е. высотой, равной 128, и шириной, меньшей 128), вертикальное BT не допускается.

[0088] На фиг. 6A, 6B, 6C, 6D, 6E, 6F, 6G и 6H показаны примеры запрещенного разбиения TT и BT в VTM.

[0089] Кодирование коэффициентов преобразования в VVC

[0090] Кодирование коэффициентов преобразования в VVC аналогично HEVC в том смысле, что оба они используют неперекрывающиеся группы коэффициентов (также называемые CG или подблоками). Однако между ними также есть некоторые различия. В HEVC, каждая CG коэффициентов имеет фиксированный размер 4×4. В VVC Draft 6, размер CG становится зависимым от размера TB. Как следствие, в VVC доступны различные размеры CG (1×16, 2×8, 8×2, 2×4, 4×2 и 16×1). CG в блоке кодирования и коэффициенты преобразования в CG кодируются в соответствии с заранее заданными порядками сканирования.

[0091] Для ограничения максимального количества контекстно-кодированных бинов на пиксел, область TB и тип компонента видео (например, компонент яркости или компонент цветности) используются для получения максимального количества контекстно-кодированных бинов (CCB) для TB. Максимальное количество контекстно-кодированных бинов равно TB_zosize*1,75. Здесь TB_zosize указывает количество выборок в TB после обнуления коэффициентов. Отметим, что coded_sub_block_flag, который является флагом, указывающим, содержит ли CG ненулевой коэффициент или нет, не учитывается при подсчете CCB.

[0092] Обнуление коэффициентов - это операция, выполняемая над блоком преобразования для принудительного принятия коэффициентов, расположенных в определенной области блока преобразования, равными 0. Например, в текущем VVC, преобразование 64×64 имеет ассоциированную операцию обнуления. В результате, коэффициенты преобразования, расположенные за пределами верхней левой области 32×32 внутри блока преобразования 64×64, вынуждены принимать значение 0. Фактически, в текущем VVC, для любого блока преобразования с размером более 32 вдоль определенного измерения, выполняется операция обнуления коэффициентов вдоль этого измерения, чтобы заставить коэффициенты, расположенные за пределами верхней левой области 32×32, принимать значение 0.

[0093] При кодировании коэффициентов преобразования в VVC, переменная remBinsPass1 сначала устанавливается на максимальное допустимое количество контекстно-кодированных бинов (MCCB). В процессе кодирования, переменная уменьшается на единицу каждый раз, когда сигнализируется контекстно-кодированный бин. Пока remBinsPass1 больше или равно четырем, коэффициент сначала сигнализируется с помощью синтаксисов sig_coeff_flag, abs_level_gt1_flag, par_level_flag и abs_level_gt3_flag, все с использованием контекстно-кодированных бинов в первом проходе. Остальная часть информации об уровне коэффициента кодируется синтаксическим элементом abs_remainder с использованием кода Голомба-Райса и кодированных с обходом бинов во втором проходе. Когда значение remBinsPass1 становится меньше, чем 4, при кодировании первого прохода, текущий коэффициент не кодируется в первом проходе, а непосредственно кодируется во втором проходе синтаксическим элементом dec_abs_level с использованием кода Голомба-Райса и кодированных с обходом бинов. Процесс вывода параметра Райса для dec_abs_level[] выводится, как указано в Таблице 3. После всего вышеупомянутого кодирования уровня, знаки (sign_flag) для всех позиций сканирования с sig_coeff_flag, равным 1, окончательно кодируются как бины обхода. Такой процесс показан на фиг. 7. remBinsPass1 сбрасывается для каждого ТВ. Переход от использования контекстно-кодированных бинов для sig_coeff_flag, abs_level_gt1_flag, par_level_flag и abs_level_gt3_flag к использованию кодированных с обходом бинов для остальных коэффициентов происходит не чаще одного раза на ТВ. Для подблока коэффициентов, если значение remBinsPass1 меньше, чем 4, перед кодированием самого первого коэффициента, весь подблок коэффициентов кодируется с использованием кодированных с обходом бинов.

[0094] На фиг. 7 показана иллюстрация структуры остаточного кодирования для блоков преобразования.

[0095] Унифицированный (тот же самый) вывод параметра Райса (RicePara) используется для сигнализации синтаксиса abs_remainder и dec_abs_level. Единственное отличие заключается в том, что базовый уровень, baseLevel, установлен на 4 и 0 для кодирования abs_remainder и dec_abs_level, соответственно. Параметр Райса определяется на основе не только суммы абсолютных уровней соседних пяти коэффициентов преобразования в локальном шаблоне, но также соответствующего базового уровня следующим образом:

[0096] RicePara=RiceParTable[max(min(31, sumAbs - 5 * baseLevel), 0)]

[0097] Синтаксис и ассоциированная семантика остаточного кодирования в спецификации текущего проекта VVC проиллюстрированы в Таблице 1 и Таблице 2, соответственно. Как читать Таблицу 1, показано в разделе приложения к настоящему раскрытию, которое также можно найти в спецификации VVC.

Таблица 1. Синтаксис остаточного кодирования

residual_coding( x0, y0, log2TbWidth, log2TbHeight, cIdx ) { Descriptor if( sps_mts_enabled_flag && cu_sbt_flag && cIdx  = =  0 &&
log2TbWidth  = =  5 && log2TbHeight < 6 )
log2ZoTbWidth = 4 else log2ZoTbWidth = Min( log2TbWidth, 5 ) if( sps_mts_enabled_flag && cu_sbt_flag && cIdx  = =  0 &&
log2TbWidth < 6 && log2TbHeight  = =  5 )
log2ZoTbHeight = 4 else log2ZoTbHeight = Min( log2TbHeight, 5 ) if( log2TbWidth > 0 ) last_sig_coeff_x_prefix ae(v) if( log2TbHeight > 0 ) last_sig_coeff_y_prefix ae(v) if( last_sig_coeff_x_prefix > 3 ) last_sig_coeff_x_suffix ae(v) if( last_sig_coeff_y_prefix > 3 ) last_sig_coeff_y_suffix ae(v) log2TbWidth = log2ZoTbWidth log2TbHeight = log2ZoTbHeight remBinsPass1 = ( ( 1 << ( log2TbWidth + log2TbHeight ) ) * 7 ) >> 2 log2SbW = ( Min( log2TbWidth, log2TbHeight ) < 2 ? 1 : 2 ) log2SbH = log2SbW if( log2TbWidth + log2TbHeight > 3 ) if( log2TbWidth < 2 ) { log2SbW = log2TbWidth log2SbH = 4 − log2SbW } else if( log2TbHeight < 2 ) { log2SbH = log2TbHeight log2SbW = 4 − log2SbH } numSbCoeff = 1 << ( log2SbW + log2SbH ) lastScanPos = numSbCoeff lastSubBlock = ( 1  <<  ( log2TbWidth + log2TbHeight − ( log2SbW + log2SbH ) ) ) − 1 do { if( lastScanPos = = 0 ) { lastScanPos = numSbCoeff lastSubBlock− − } lastScanPos− − xS = DiagScanOrder[ log2TbWidth − log2SbW ][ log2TbHeight − log2SbH ]
[ lastSubBlock ][ 0 ]
yS = DiagScanOrder[ log2TbWidth − log2SbW ][ log2TbHeight − log2SbH ]
[ lastSubBlock ][ 1 ]
xC = ( xS << log2SbW ) + DiagScanOrder[ log2SbW ][ log2SbH ][ lastScanPos ][ 0 ] yC = ( yS << log2SbH ) + DiagScanOrder[ log2SbW ][ log2SbH ][ lastScanPos ][ 1 ] } while( ( xC != LastSignificantCoeffX ) | | ( yC != LastSignificantCoeffY ) ) if( lastSubBlock = = 0 && log2TbWidth >= 2 && log2TbHeight >= 2 &&
!transform_skip_flag[ x0 ][ y0 ][ cIdx ] && lastScanPos > 0 )
LfnstDcOnly = 0 if( ( lastSubBlock > 0 && log2TbWidth >= 2 && log2TbHeight >= 2 ) | |
( lastScanPos > 7 && ( log2TbWidth = = 2 | | log2TbWidth = = 3 ) &&
log2TbWidth = = log2TbHeight ) )
LfnstZeroOutSigCoeffFlag = 0 if( ( lastSubBlock > 0 | | lastScanPos > 0 ) && cIdx = = 0 ) MtsDcOnly = 0 QState = 0 for( i = lastSubBlock; i >= 0; i− − ) { startQStateSb = QState xS = DiagScanOrder[ log2TbWidth − log2SbW ][ log2TbHeight − log2SbH ]
[ i ][ 0 ]
yS = DiagScanOrder[ log2TbWidth − log2SbW ][ log2TbHeight − log2SbH ]
[ i ][ 1 ]
inferSbDcSigCoeffFlag = 0 if( i < lastSubBlock && i > 0 ) { sb_coded_flag[ xS ][ yS ] ae(v) inferSbDcSigCoeffFlag = 1 } if( sb_coded_flag[ xS ][ yS ] && ( xS > 3 | | yS > 3 ) && cIdx = = 0 ) MtsZeroOutSigCoeffFlag = 0 firstSigScanPosSb = numSbCoeff lastSigScanPosSb = −1 firstPosMode0 = ( i = = lastSubBlock ? lastScanPos : numSbCoeff − 1 ) firstPosMode1 = firstPosMode0 for( n = firstPosMode0; n >= 0 && remBinsPass1 >= 4; n− − ) { xC = ( xS << log2SbW ) + DiagScanOrder[ log2SbW ][ log2SbH ][ n ][ 0 ] yC = ( yS << log2SbH ) + DiagScanOrder[ log2SbW ][ log2SbH ][ n ][ 1 ] if( sb_coded_flag[ xS ][ yS ] && ( n > 0 | | !inferSbDcSigCoeffFlag ) &&
( xC != LastSignificantCoeffX | | yC != Last SignificantCoeffY ) ) {
sig_coeff_flag[ xC ][ yC ] ae(v) remBinsPass1− − if( sig_coeff_flag[ xC ][ yC ] ) inferSbDcSigCoeffFlag = 0 } if( sig_coeff_flag[ xC ][ yC ] ) { abs_level_gtx_flag[ n ][ 0 ] ae(v) remBinsPass1− − if( abs_level_gtx_flag[ n ][ 0 ] ) { par_level_flag[ n ] ae(v) remBinsPass1− − abs_level_gtx_flag[ n ][ 1 ] ae(v) remBinsPass1− − } if( lastSigScanPosSb = = −1 ) lastSigScanPosSb = n firstSigScanPosSb = n } AbsLevelPass1[ xC ][ yC ] = sig_coeff_flag[ xC ][ yC ] + par_level_flag[ n ] +
abs_level_gtx_flag[ n ][ 0 ] + 2 * abs_level_gtx_flag[ n ][ 1 ]
if( sh_dep_quant_used_flag ) QState = QStateTransTable[ QState ][ AbsLevelPass1[ xC ][ yC ] & 1 ] firstPosMode1 = n − 1 } for( n = firstPosMode0; n > firstPosMode1; n− − ) { xC = ( xS << log2SbW ) + DiagScanOrder[ log2SbW ][ log2SbH ][ n ][ 0 ] yC = ( yS << log2SbH ) + DiagScanOrder[ log2SbW ][ log2SbH ][ n ][ 1 ] if( abs_level_gtx_flag[ n ][ 1 ] ) abs_remainder[ n ] ae(v) AbsLevel[ xC ][ yC ] = AbsLevelPass1[ xC ][ yC ] +2 * abs_remainder[ n ] } for( n = firstPosMode1; n >= 0; n− − ) { xC = ( xS << log2SbW ) + DiagScanOrder[ log2SbW ][ log2SbH ][ n ][ 0 ] yC = ( yS << log2SbH ) + DiagScanOrder[ log2SbW ][ log2SbH ][ n ][ 1 ] if( sb_coded_flag[ xS ][ yS ] ) dec_abs_level[ n ] ae(v) if( AbsLevel[ xC ][ yC ] > 0 ) { if( lastSigScanPosSb = = −1 ) lastSigScanPosSb = n firstSigScanPosSb = n } if( sh_dep_quant_used_flag ) QState = QStateTransTable[ QState ][ AbsLevel[ xC ][ yC ] & 1 ] } signHiddenFlag = sh_sign_data_hiding_used_flag &&
( lastSigScanPosSb − firstSigScanPosSb > 3 ? 1 : 0 )
for( n = numSbCoeff − 1; n >= 0; n− − ) { xC = ( xS << log2SbW ) + DiagScanOrder[ log2SbW ][ log2SbH ][ n ][ 0 ] yC = ( yS << log2SbH ) + DiagScanOrder[ log2SbW ][ log2SbH ][ n ][ 1 ] if( ( AbsLevel[ xC ][ yC ] > 0 ) &&
( !signHiddenFlag | | ( n != firstSigScanPosSb ) ) )
coeff_sign_flag[ n ] ae(v) } if( sh_dep_quant_used_flag ) { QState = startQStateSb for( n = numSbCoeff − 1; n >= 0; n− − ) { xC = ( xS << log2SbW ) + DiagScanOrder[ log2SbW ][ log2SbH ][ n ][ 0 ] yC = ( yS << log2SbH ) + DiagScanOrder[ log2SbW ][ log2SbH ][ n ][ 1 ] if( AbsLevel[ xC ][ yC ] > 0 ) TransCoeffLevel[ x0 ][ y0 ][ cIdx ][ xC ][ yC ] =
( 2 * AbsLevel[ xC ][ yC ] − ( QState > 1 ? 1 : 0 ) ) *
( 1 − 2 * coeff_sign_flag[ n ] )
QState = QStateTransTable[ QState ][ AbsLevel[ xC ][ yC ] & 1 ] } else { sumAbsLevel = 0 for( n = numSbCoeff − 1; n >= 0; n− − ) { xC = ( xS << log2SbW ) + DiagScanOrder[ log2SbW ][ log2SbH ][ n ][ 0 ] yC = ( yS << log2SbH ) + DiagScanOrder[ log2SbW ][ log2SbH ][ n ][ 1 ] if( AbsLevel[ xC ][ yC ] > 0 ) { TransCoeffLevel[ x0 ][ y0 ][ cIdx ][ xC ][ yC ] =
AbsLevel[ xC ][ yC ] * ( 1 − 2 * coeff_sign_flag[ n ] )
if( signHiddenFlag ) { sumAbsLevel += AbsLevel[ xC ][ yC ] if( ( n = = firstSigScanPosSb ) && ( sumAbsLevel % 2 ) = = 1 ) ) TransCoeffLevel[ x0 ][ y0 ][ cIdx ][ xC ][ yC ] =
−TransCoeffLevel[ x0 ][ y0 ][ cIdx ][ xC ][ yC ]
} } } } } }

Таблица 2. Семантика остаточного кодирования

Массив AbsLevel[ xC ][ yC ] представляет массив абсолютных значений уровней коэффициентов преобразования для текущего блока преобразования , и массив AbsLevelPass1[ xC ][ yC ] представляет массив частично восстановленных абсолютных значений уровней коэффициентов преобразования для текущего блока преобразования. Индексы xC и yC массива положение ( xC, yC ) коэффициентов преобразования в пределах текущего блока преобразования. Если значение AbsLevel[ xC ][ yC ] не специфицировано в подпункте 7.3.11.11, оно принимается равным 0. Когда значение AbsLevelPass1[ xC ][ yC ] не специфицировано в подпункте 7.3.11.11, оно принимается равным 0.
Переменные CoeffMin и CoeffMax, специфицирующие минимальные и максимальные значения коэффициентов преобразования, выводятся следующим образом:
CoeffMin=−( 1 << 15 ) (189)
CoeffMax=( 1 << 15 ) − 1 (190)
Массив QStateTransTable[ ][ ] специфицирован следующим образом:
QStateTransTable[ ][ ]={ { 0, 2 }, { 2, 0 }, { 1, 3 }, { 3, 1 } } (191)
last_sig_coeff_x_prefix специфицирует префикс положения столбца последнего значимого коэффициента в порядке сканирования внутри блока преобразования. Значения last_sig_coeff_x_prefix должны быть в диапазоне от 0 до ( log2ZoTbWidth << 1 ) − 1, включительно.
Когда last_sig_coeff_x_prefix не присутствует, он принимается равным 0.
last_sig_coeff_y_prefix специфицирует префикс положения строки последнего значимого коэффициента в порядке сканирования внутри блока преобразования. Значения last_sig_coeff_y_prefix должны быть в диапазоне от 0 до ( log2ZoTbHeight << 1 ) − 1, включительно.
Когда last_sig_coeff_y_prefix не присутствует, он принимается равным 0.
last_sig_coeff_x_suffix специфицирует суффикс положения столбца последнего значимого коэффициента в порядке сканирования внутри блока преобразования. Значения last_sig_coeff_x_suffix должны быть в диапазоне от 0 до ( 1 << ( ( last_sig_coeff_x_prefix >> 1 ) − 1 ) ) − 1, включительно.
Положение столбца последнего значимого коэффициента в порядке сканирования внутри блока преобразования LastSignificantCoeffX выводится следующим образом:
Если last_sig_coeff_x_suffix не присутствует, то применяется следующее:
LastSignificantCoeffX=last_sig_coeff_x_prefix (192)
Иначе (last_sig_coeff_x_suffix присутствует), применяется следующее:
LastSignificantCoeffX=( 1 << ( (last_sig_coeff_x_prefix >> 1 ) − 1 ) ) * (193) ( 2 + (last_sig_coeff_x_prefix & 1 ) ) + last_sig_coeff_x_suffix
last_sig_coeff_y_suffix специфицирует суффикс положения строки последнего значимого коэффициента в порядке сканирования внутри блока преобразования. Значения last_sig_coeff_y_suffix должны быть в диапазоне от 0 до ( 1 << ( ( last_sig_coeff_y_prefix >> 1 ) − 1 ) ) − 1, включительно.
Положение строки последнего значимого коэффициента в порядке сканирования внутри блока преобразования LastSignificantCoeffY выводится следующим образом:
Если last_sig_coeff_y_suffix не присутствует, то применяется следующее:
LastSignificantCoeffY=last_sig_coeff_y_prefix (194)
Иначе (last_sig_coeff_y_suffix присутствует), применяется следующее:
LastSignificantCoeffY=( 1 << ( ( last_sig_coeff_y_prefix >> 1 ) − 1 ) ) * (195) ( 2 + ( last_sig_coeff_y_prefix & 1 ) ) + last_sig_coeff_y_suffix
sb_coded_flag[ xS ][ yS ] специфицирует следующее для подблока в положении ( xS, yS ) внутри текущего блока преобразования , где подблок является массивом уровней коэффициентов преобразования:
Когда sb_coded_flag[ xS ][ yS ] равно 0, все уровни коэффициентов преобразования подблока в положении ( xS, yS ) принимаются равными 0.
Когда sb_coded_flag[ xS ][ yS ] не присутствует, он принимается равным 1.
sig_coeff_flag[ xC ][ yC ] специфицирует для положения ( xC, yC ) коэффициентов преобразования внутри текущего блока преобразования, является ли соответствующий уровень коэффициентов преобразования в положении ( xC, yC ) ненулевым, следующим образом:
Если sig_coeff_flag[ xC ][ yC ] равно 0, уровень коэффициентов преобразования в положении ( xC, yC ) установлен равным 0.
Иначе (sig_coeff_flag[ xC ][ yC ] равно 1), уровень коэффициентов преобразования в положении ( xC, yC ) имеет ненулевое значение.
Когда sig_coeff_flag[ xC ][ yC ] не присутствует, он выводится следующим образом:
Если transform_skip_flag[ x0 ][ y0 ][ cIdx ] равно 0 или sh_ts_residual_coding_disabled_flag равно 1, то применяется следующее:
Если ( xC, yC ) является последним значимым положением ( LastSignificantCoeffX, LastSignificantCoeffY ) в порядке сканирования или все из следующих условий верны, то sig_coeff_flag[ xC ][ yC ] принимается равным 1:
( xC & ( (1 << log2SbW ) − 1 ), yC & ( (1 << log2SbH ) − 1 ) ) равно ( 0, 0 ).
inferSbDcSigCoeffFlag равно 1.
sb_coded_flag[ xS ][ yS ] равно 1.
Иначе, sig_coeff_flag[ xC ][ yC ] принимается равным 0.
Иначе (transform_skip_flag[ x0 ][ y0 ][ cIdx ] равно 1 и sh_ts_residual_coding_disabled_flag равно 0), то применяется следующее:
Если все из следующих условий верны, sig_coeff_flag[ xC ][ yC ] принимается равным 1:
( xC & ( (1 << log2SbW ) − 1 ), yC & ( (1 << log2SbH ) − 1 ) ) равно ( (1 << log2SbW ) − 1, (1 << log2SbH ) − 1 ).
inferSbSigCoeffFlag равно 1.
sb_coded_flag[ xS ][ yS ] равно 1.
Иначе, sig_coeff_flag[ xC ][ yC ] принимается равным 0.
abs_level_gtx_flag[ n ][ j ] специфицирует, является ли абсолютное значение уровня коэффициентов преобразования (в положении n сканирования) большим, чем ( j << 1 ) + 1. Когда abs_level_gtx_flag[ n ][ j ] не присутствует, он принимается равным 0.
par_level_flag[ n ] специфицирует четность уровня коэффициентов преобразования в положении n сканирования. Когда par_level_flag[ n ] не присутствует, он принимается равным 0.
abs_remainder[ n ] является оставшимся абсолютным значением уровня коэффициентов преобразования, которое кодировано кодом Голомба-Райса в положении n сканирования. Когда abs_remainder[ n ] не присутствует, оно принимается равным 0.
Требованием соответствия битового потока является то, что значение abs_remainder[ n ] должно быть ограничено так, что соответствующее значение TransCoeffLevel[ x0 ][ y0 ][ cIdx ][ xC ][ yC ] находится в диапазоне от CoeffMin до CoeffMax, включительно.
dec_abs_level[ n ] является промежуточным значением, которое кодируется кодом Голомба-Райса в положении n сканирования. При заданном ZeroPos[ n ], которое выводится в Таблице 3 во время синтаксического анализа dec_abs_level[ n ], абсолютное значение уровня коэффициентов преобразования в положении ( xC, yC ) AbsLevel[ xC ][ yC ] выводится следующим образом:
Если dec_abs_level[ n ] не присутствует или равно ZeroPos[ n ], AbsLevel[ xC ][ yC ] устанавливается равным 0.
Иначе, если dec_abs_level[ n ] меньше, чем ZeroPos[ n ], AbsLevel[ xC ][ yC ] устанавливается равным dec_abs_level[ n ] + 1;
Иначе (dec_abs_level[ n ] больше, чем ZeroPos[ n ]), AbsLevel[ xC ][ yC ] устанавливается равным dec_abs_level[ n ].
Требованием соответствия битового потока яваляется то, что значение dec_abs_level[ n ] должно быть ограничено так, что соответствующее значение TransCoeffLevel[ x0 ][ y0 ][ cIdx ][ xC ][ yC ] находится в диапазоне от CoeffMin до CoeffMax, включительно.
coeff_sign_flag[ n ] специфицирует знак уровня коэффициентов преобразования для положения n сканирования следующим образом:
Если coeff_sign_flag[ n ] равно 0, то соответствующий уровень коэффициентов преобразования имеет положительное значение.
Иначе (coeff_sign_flag[ n ] равно 1), то соответствующий уровень коэффициентов преобразования имеет отрицательное значение.
Если coeff_sign_flag[ n ] не присутствует, он принимается равным 0.
Значение CoeffSignLevel[ xC ][ yC ] специфицирует знак уровня коэффициентов преобразования в положении ( xC, yC ) следующим образом:
Если CoeffSignLevel[ xC ][ yC ] равно 0, то соответствующий уровень коэффициентов преобразования равен нулю
Иначе, если CoeffSignLevel[ xC ][ yC ] равно 1, то соответствующий уровень коэффициентов преобразования имеет положительное значение.
Иначе (CoeffSignLevel[ xC ][ yC ] равно −1), то соответствующий уровень коэффициентов преобразования имеет отрицательное значение.

Таблица 3. Процесс вывода параметра Райса для abs_remainder[] и dec_abs_level[]

Входами в этот процесс являются базовый уровень baseLevel, индекс цветового компонента cIdx, положение яркости ( x0, y0 ), специфицирующее верхнюю-левую выборку текущего блока преобразования относительно верхней-левой выборки текущей картинки, текущее положение ( xC, yC ) сканирования коэффициентов, двоичный логарифм ширины блока преобразования log2TbWidth и двоичный логарифм высоты блока преобразования log2TbHeight.
Выходом этого процесса является параметр Райса cRiceParam.
При заданном массиве AbsLevel[ x ][ y ] для блока преобразования с индексом компонента cIdx и верхним-левым положением ( x0, y0 ) яркости, переменная locSumAbs выводится, как специфицировано следующим псевдокодом:
locSumAbs = 0
if( xC < (1 << log2TbWidth) − 1 ) {
locSumAbs += AbsLevel[ xC + 1 ][ yC ]
if( xC < (1 << log2TbWidth) − 2 )
locSumAbs += AbsLevel[ xC + 2 ][ yC ]
if( yC < (1 << log2TbHeight) − 1 )
locSumAbs += AbsLevel[ xC + 1 ][ yC + 1 ] (1494)
}
if( yC < (1 << log2TbHeight) − 1 ) {
locSumAbs += AbsLevel[ xC ][ yC + 1 ]
if( yC < (1 << log2TbHeight) − 2 )
locSumAbs += AbsLevel[ xC ][ yC + 2 ]
}
locSumAbs = Clip3( 0, 31, locSumAbs − baseLevel * 5 )
При заданной переменной locSumAbs, параметр Райса cRiceParam выводится, как специфицировано в Таблице 4 ниже.
Если baseLevel равно 0, то переменная ZeroPos[ n ] выводится следующим образом:
ZeroPos[ n ]=( QState < 2 ? 1 : 2 ) << cRiceParam

Таблица 4. Спецификация cRiceParam на основе locSumAbs

locSumAbs 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 cRiceParam 0 0 0 0 0 0 0 1 1 1 1 1 1 1 2 2 locSumAbs 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 cRiceParam 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3

[0098] Остаточное кодирование для режима пропуска преобразования в VVC

[0099] В отличие от HEVC, где одна схема остаточного кодирования предназначена для кодирования как коэффициентов преобразования, так и коэффициентов пропуска преобразования, в VVC используются две отдельные схемы остаточного кодирования для коэффициентов преобразования и коэффициентов пропуска преобразования (т.е. остатка) соответственно.

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

[00101] нет сигнализации последнего положения x/y;

[00102] coded_sub_block_flag, кодируемый для каждого подблока, за исключением DC подблока, когда все предыдущие флаги равны 0;

[00103] контекстное моделирование sig_coeff_flag с двумя соседними коэффициентами;

[00104] par_level_flag, использующий только одну контекстную модель;

[00105] дополнительные флаги, большие, чем 5, 7, 9;

[00106] вывод модифицированного параметра Райса для бинаризации остатка;

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

[00108] Как показано на фиг. 8, синтаксические элементы sig_coeff_flag, coeff_sign_flag, abs_level_gt1_flag, par_level_flag кодируются чередующимся образом остаточная выборка за остаточной выборкой в первом проходе, за которыми следуют битовые плоскости abs_level_gtX_flag во втором проходе и кодирование abs_remainder в третьем проходе.

[00109] Проход 1: sig_coeff_flag, coeff_sign_flag, abs_level_gt1_flag, par_level_flag

[00110] Проход 2: abs_level_gt3_flag, abs_level_gt5_flag, abs_level_gt7_flag, abs_level_gt9_flag

[00111] Проход 3: abs_remainder

[00112] На фиг. 8 показана иллюстрация структуры остаточного кодирования для блоков пропуска преобразования.

[00113] Синтаксис и ассоциированная семантика остаточного кодирования для режима пропуска преобразования в спецификации текущего проекта VVC проиллюстрированы в Таблице 5 и Таблице 2, соответственно. Как читать таблицу 5, проиллюстрировано в разделе приложения к настоящему раскрытию, которое также можно найти в спецификации VVC.

Таблица 5. Синтаксис остаточного кодирования для режима пропуска преобразования

residual_ts_coding( x0, y0, log2TbWidth, log2TbHeight, cIdx ) { Descriptor log2SbW = ( Min( log2TbWidth, log2TbHeight ) < 2 ? 1 : 2 ) log2SbH = log2SbW if( log2TbWidth + log2TbHeight > 3 ) if( log2TbWidth < 2 ) { log2SbW = log2TbWidth log2SbH = 4 − log2SbW } else if( log2TbHeight < 2 ) { log2SbH = log2TbHeight log2SbW = 4 − log2SbH } numSbCoeff = 1 << ( log2SbW + log2SbH ) lastSubBlock = ( 1  <<  ( log2TbWidth + log2TbHeight − ( log2SbW + log2SbH ) ) ) − 1 inferSbCbf = 1 RemCcbs = ( ( 1 << ( log2TbWidth + log2TbHeight ) ) * 7 ) >> 2 for( i =0; i <= lastSubBlock; i++ ) { xS = DiagScanOrder[ log2TbWidth − log2SbW ][ log2TbHeight − log2SbH ][ i ][ 0 ] yS = DiagScanOrder[ log2TbWidth − log2SbW ][ log2TbHeight − log2SbH ][ i ][ 1 ] if( i != lastSubBlock | | !inferSbCbf ) sb_coded_flag[ xS ][ yS ] ae(v) if( sb_coded_flag[ xS ][ yS ] && i < lastSubBlock ) inferSbCbf = 0 /* First scan pass */ inferSbSigCoeffFlag = 1 lastScanPosPass1 = −1 for( n = 0; n <= numSbCoeff − 1 && RemCcbs >= 4; n++ ) { xC = ( xS << log2SbW ) + DiagScanOrder[ log2SbW ][ log2SbH ][ n ][ 0 ] yC = ( yS << log2SbH ) + DiagScanOrder[ log2SbW ][ log2SbH ][ n ][ 1 ] lastScanPosPass1 = n if( sb_coded_flag[ xS ][ yS ] &&
( n != numSbCoeff − 1 | | !inferSbSigCoeffFlag ) ) {
sig_coeff_flag[ xC ][ yC ] ae(v) RemCcbs− − if( sig_coeff_flag[ xC ][ yC ] ) inferSbSigCoeffFlag = 0 } CoeffSignLevel[ xC ][ yC ] = 0 if( sig_coeff_flag[ xC ][ yC ] ) { coeff_sign_flag[ n ] ae(v) RemCcbs− − CoeffSignLevel[ xC ][ yC ] = ( coeff_sign_flag[ n ] > 0 ? −1 : 1 ) abs_level_gtx_flag[ n ][ 0 ] ae(v) RemCcbs− − if( abs_level_gtx_flag[ n ][ 0 ] ) { par_level_flag[ n ] ae(v) RemCcbs− − } } AbsLevelPass1[ xC ][ yC ] =
sig_coeff_flag[ xC ][ yC ] + par_level_flag[ n ] + abs_level_gtx_flag[ n ][ 0 ]
} /* Greater than X scan pass (numGtXFlags=5) */ lastScanPosPass2 = −1 for( n = 0; n <= numSbCoeff − 1 && RemCcbs >= 4; n++ ) { xC = ( xS << log2SbW ) + DiagScanOrder[ log2SbW ][ log2SbH ][ n ][ 0 ] yC = ( yS << log2SbH ) + DiagScanOrder[ log2SbW ][ log2SbH ][ n ][ 1 ] AbsLevelPass2[ xC ][ yC ] = AbsLevelPass1[ xC ][ yC ] for( j = 1; j < 5; j++ ) { if( abs_level_gtx_flag[ n ][ j − 1 ] ) { abs_level_gtx_flag[ n ][ j ] ae(v) RemCcbs− − } AbsLevelPass2[ xC ][ yC ]  +=  2 * abs_level_gtx_flag[ n ][ j ] } lastScanPosPass2 = n } /* remainder scan pass */ for( n = 0; n <= numSbCoeff − 1; n++ ) { xC = ( xS << log2SbW ) + DiagScanOrder[ log2SbW ][ log2SbH ][ n ][ 0 ] yC = ( yS << log2SbH ) + DiagScanOrder[ log2SbW ][ log2SbH ][ n ][ 1 ] if( ( n <= lastScanPosPass2 && AbsLevelPass2[ xC ][ yC ] >= 10 ) | |
( n > lastScanPosPass2 && n <= lastScanPosPass1 &&
AbsLevelPass1[ xC ][ yC ] >= 2 ) | |
( n > lastScanPosPass1 && sb_coded_flag[ xS ][ yS ] ) )
abs_remainder[ n ] ae(v) if( n <= lastScanPosPass2 ) AbsLevel[ xC ][ yC ] = AbsLevelPass2[ xC ][ yC ] + 2 * abs_remainder[ n ] else if(n <= lastScanPosPass1 ) AbsLevel[ xC ][ yC ] = AbsLevelPass1[ xC ][ yC ] + 2 * abs_remainder[ n ] else { /* bypass */ AbsLevel[ xC ][ yC ] = abs_remainder[ n ] if( abs_remainder[ n ] ) coeff_sign_flag[ n ] ae(v) } if( BdpcmFlag[ x0 ][ y0 ][ cIdx ] = = 0 && n <= lastScanPosPass1 ) { absLeftCoeff = xC > 0 ? AbsLevel[ xC − 1 ][ yC ] ) : 0 absAboveCoeff = yC > 0 ? AbsLevel[ xC ][ yC − 1 ] ) : 0 predCoeff = Max( absLeftCoeff, absAboveCoeff ) if( AbsLevel[ xC ][ yC ] = = 1 && predCoeff > 0 ) AbsLevel[ xC ][ yC ] = predCoeff else if( AbsLevel[ xC ][ yC ] > 0 && AbsLevel[ xC ][ yC ] <= predCoeff ) AbsLevel[ xC ][ yC ]− − } TransCoeffLevel[ x0 ][ y0 ][ cIdx ][ xC ][ yC ] = ( 1 − 2 * coeff_sign_flag[ n ] ) *
AbsLevel[ xC ][ yC ]
} } }

[00114] Квантование

[00115] В текущем VVC, максимальное значение QP было увеличено с 51 до 63, и сигнализация начального QP была изменена соответствующим образом. Начальное значение SliceQpY может быть изменено на уровне сегмента слайса, когда кодируется ненулевое значение slice_qp_delta. Для блока пропуска преобразования минимально допустимый параметр квантования (QP) определяется как 4, поскольку размер шага квантования становится 1, когда QP равен 4.

[00116] Кроме того, то же самое скалярное квантование HEVC используется с новой концепцией, называемой зависимым скалярным квантованием. Зависимое скалярное квантование относится к подходу, при котором набор допустимых значений восстановления для коэффициента преобразования зависит от значений уровней коэффициентов преобразования, которые предшествуют текущему уровню коэффициентов преобразования в порядке восстановления. Основной эффект этого подхода заключается в том, что по сравнению с обычным независимым скалярным квантованием, используемым в HEVC, допустимые векторы восстановления более плотно упакованы в N-мерном векторном пространстве (N представляет количество коэффициентов преобразования в блоке преобразования). Это означает, что при заданном среднем количестве допустимых векторов восстановления на объем N-мерной единицы, среднее искажение между входным вектором и ближайшим вектором восстановления уменьшается. Подход зависимого скалярного квантования реализуется путем: (а) определения двух скалярных квантователей с различными уровнями восстановления и (b) определения процесса переключения между двумя скалярными квантователями.

[00117] Два используемых скалярных квантователя, обозначенных Q0 и Q1, проиллюстрированы на фиг. 9. Местоположение доступных уровней восстановления однозначно специфицируется размером Δ шага квантования. Используемый скалярный квантователь (Q0 или Q1) явно не сигнализируется в битовом потоке. Вместо этого, квантователь, используемый для текущего коэффициента преобразования, определяется соотношениями уровней коэффициента преобразования, которые предшествуют текущему коэффициенту преобразования в порядке кодирования/восстановления.

[00118] На фиг. 9 показана иллюстрация двух скалярных квантователей, используемых в предлагаемом подходе зависимого квантования.

[00119] Как показано на фиг. 10A и 10B, переключение между двумя скалярными квантователями (Q0 и Q1) осуществляется посредством конечного автомата с четырьмя состояниями квантователя (QState). QState может принимать четыре различных значения: 0, 1, 2, 3. Оно однозначно определяется соотношениями уровней коэффициентов преобразования, предшествующих текущему коэффициенту преобразования в порядке кодирования/ восстановления. В начале обратного квантования для блока преобразования, состояние устанавливается равным 0. Коэффициенты преобразования восстанавливаются в порядке сканирования (т.е. в том же порядке, в каком они энтропийно декодируются). После восстановления текущего коэффициента преобразования, состояние обновляется, как показано на фиг. 10, где k обозначает значение уровня коэффициента преобразования.

[00120] На фиг. 10A показана диаграмма перехода, иллюстрирующая переход состояния для предлагаемого зависимого квантования.

[00121] На фиг. 10B показана таблица, иллюстрирующая выбор квантователя для предлагаемого зависимого квантования.

[00122] Также поддерживается сигнализация матриц масштабирования по умолчанию и определяемых пользователем. Все матрицы масштабирования в режиме по умолчанию являются плоскими, с элементами, равными 16 для всех размеров ТВ. Режимы IBC и интра-кодирования используют одни и те же матрицы масштабирования. Таким образом, для случая матриц USER_DEFINED, число MatrixType и MatrixType_DC обновляются следующим образом:

[00123] MatrixType: 30=2 (2 для интра&IBC/интер) × 3 (компоненты Y/Cb/Cr) × 5 (размер квадратного ТВ: от 4×4 до 64×64 для яркости, от 2×2 до 32×32 для цветности).

[00124] MatrixType_DC: 14=2 (2 для интра&IBC/интер × 1 для компонента Y) × 3 (размер ТВ: 16×16, 32×32, 64×64) + 4 (2 для интра&IBC/интер × 2 для компонентов Cb/Cr) × 2 (размер ТВ: 16×16, 32×32).

[00125] DC значения отдельно кодируются для следующих матриц масштабирования: 16×16, 32×32 и 64×64. Для TB размером менее 8×8, сигнализируются все элементы в одной матрице масштабирования. Если TB имеют размер, больший или равный 8×8, только 64 элемента в одной матрице масштабирования 8×8 сигнализируются как базовая матрица масштабирования. Для получения квадратных матриц размером более 8×8, базовая матрица масштабирования размером 8×8 подвергается повышающей дискретизации (путем дублирования элементов) до соответствующего квадратного размера (т.е. 16×16, 32×32, 64×64). Когда применяется обнуление высокочастотных коэффициентов для 64-точечного преобразования, соответствующие высокие частоты матриц масштабирования также обнуляются. То есть, если ширина или высота TB больше или равна 32, сохраняется только левая или верхняя половина коэффициентов, а остальным коэффициентам присваивается значение нуля. Более того, количество элементов, сигнализируемых для матрицы масштабирования 64×64, также уменьшается с 8×8 до трех подматриц 4×4, поскольку нижние правые 4×4 элемента никогда не используются.

[00126] Контекстное моделирование для кодирования коэффициентов преобразования

[00127] Выбор вероятностных моделей для синтаксических элементов, связанных с абсолютными значениями уровней коэффициентов преобразования, зависит от значений абсолютных уровней или частично восстановленных абсолютных уровней в локальной окрестности. Используемый шаблон проиллюстрирован на фиг. 11.

[00128] На фиг. 11 показана иллюстрация шаблона, используемого для выбора вероятностных моделей. Черный квадрат указывает текущую позицию сканирования, а квадраты с “x” представляют используемую локальную окрестность.

[00129] Выбранные вероятностные модели зависят от суммы абсолютных уровней (или частично восстановленных абсолютных уровней) в локальной окрестности и количества абсолютных уровней, превышающих 0 (задаваемых количеством sig_coeff_flags, равных 1) в локальной окрестности. Моделирование контекста и бинаризация зависят от следующих показателей для локальной окрестности:

[00130] numSig: количество ненулевых уровней в локальной окрестности;

[00131] sumAbs1: сумма частично восстановленных абсолютных уровней (absLevel1) после первого прохода в локальной окрестности;

[00132] sumAbs: сумма восстановленных абсолютных уровней в локальной окрестности;

[00133] диагональное положение (d): сумма горизонтальных и вертикальных координат текущего положения сканирования внутри блока преобразования.

[00134] На основе значений numSig, sumAbs1 и d выбираются вероятностные модели для кодирования sig_coeff_flag, abs_level_gt1_flag, par_level_flag и abs_level_gt3_flag. Параметр Райса для бинаризации abs_remainder и dec_abs_level выбирается на основе значений sumAbs и numSig.

[00135] В текущем VVC, сокращенное 32-точечное MTS (также называемое RMTS32) основано на пропуске высокочастотных коэффициентов и используется для уменьшения вычислительной сложности 32-точечного DST-7/DCT-8. И оно сопровождает изменения кодирования коэффициентов, включая все типы обнуления (т.е. RMTS32 и существующее обнуление для высокочастотных компонентов в DCT2). В частности, бинаризация кодирования положения последнего ненулевого коэффициента кодируется на основе уменьшенного размера TU, а выбор контекстной модели для кодирования последнего ненулевого коэффициента определяется размером исходной TU. Кроме того, 60 контекстных моделей используются для кодирования sig_coeff_flag коэффициентов преобразования. Выбор индекса контекстной модели основан на сумме максимум пяти ранее частично восстановленных абсолютных уровней, называемых locSumAbsPass1, и состоянии зависимого квантования QState следующим образом:

[00136] Если cIdx равно 0, ctxInc выводится следующим образом:

ctxInc=12 * Max( 0, QState - 1 ) +

Min( ( locSumAbsPass1+1 ) >> 1, 3 ) +

( d < 2 ? 8 : ( d < 5 ? 4 : 0 ) )

[00137] Иначе (cIdx больше, чем 0), ctxInc выводится следующим образом:

ctxInc=36+8 * Max( 0, QState − 1) +

Min( ( locSumAbsPass1+1 ) >> 1, 3 ) + ( d < 2 ? 4 : 0 )

[00138] Режим палитры

[00139] Основная идея режима палитры заключается в том, что выборки в CU представлены небольшим набором репрезентативных значений цвета. Этот набор называется палитрой. Также возможно указать значение цвета, которое исключено из палитры, сигнализируя его как цвет перехода (escape-цвет), для которого значения трех цветовых компонентов непосредственно сигнализируются в битовом потоке. Это проиллюстрировано на фиг. 12.

[00140] На фиг. 12 показан пример блока, закодированного в режиме палитры. На фиг. 12 показан блок 1210, закодированный в режиме палитры, и палитра 1220.

[00141] На фиг. 12 размер палитры равен 4. Первые 3 выборки, для восстановления, используют элементы палитры 2, 0 и 3 соответственно. Синяя выборка представляет собой символ перехода (escape-символ). Флаг уровня CU, palette_escape_val_present_flag, указывает, присутствуют ли какие-либо escape-символы в CU. Если присутствуют escape-символы, размер палитры увеличивается на единицу, и последний индекс используется для обозначения escape-символа. Таким образом, на фиг. 12, escape-символу присвоен индекс 4.

[00142] Для декодирования блока, закодированного палитрой, декодер должен иметь следующую информацию:

[00143] Таблица палитры;

[00144] Индексы палитры.

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

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

[00147] Для получения палитры для кодирования с потерями, используется модифицированный алгоритм кластеризации k-средних. В палитру добавляется первая выборка блока. Затем для каждой последующей выборки из блока, вычисляется сумма абсолютной разницы (SAD) между выборкой и каждым из текущих цветов палитры. Если искажение для каждого из компонентов меньше порогового значения для элемента (записи) палитры, соответствующего минимальной SAD, выборка добавляется в кластер, принадлежащий записи палитры. В противном случае, выборка добавляется как новая запись палитры. Когда количество выборок, отображенных на кластер, превышает порог, центроид для этого кластера обновляется и становится записью палитры этого кластера.

[00148] На следующем шаге, кластеры сортируются в порядке убывания использования. Затем запись палитры, соответствующая каждой записи, обновляется. Обычно, в качестве записи палитры используется центроид кластера. Но анализ по критерию скорости-искажения выполняется для анализа того, может ли какая-либо запись из предиктора палитры быть более подходящей для использования в качестве обновленной записи палитры вместо центроида, когда учитывается стоимость кодирования записей палитры. Этот процесс продолжается до тех пор, пока не будут обработаны все кластеры, или пока не будет достигнут максимальный размер палитры. Наконец, если кластер содержит только одну выборку, и соответствующей записи палитры нет в предикторе палитры, выборка преобразуется в escape-символ. Кроме того, повторяющиеся записи палитры удаляются, а их кластеры объединяются.

[00149] После создания палитры, каждой выборке в блоке присваивается индекс ближайшей (по SAD) записи палитры. Затем выборкам присваивается режим 'INDEX' или 'COPY_ABOVE', для каждой выборки, для которой возможен режим 'INDEX' или 'COPY_ABOVE'. Затем вычисляется стоимость кодирования режима. Выбирается режим, для которого стоимость ниже.

[00150] Для кодирования записей палитры поддерживается предиктор палитры. Максимальный размер палитры, а также предиктор палитры сигнализируются в SPS. Предиктор палитры инициализируется в начале каждой строки CTU, каждого слайса и каждого мозаичного элемента.

[00151] Для каждой записи в предикторе палитры сигнализируется флаг повторного использования, указывающий, является ли она частью текущей палитры. Это проиллюстрировано на фиг. 13.

[00152] На фиг. 13 показано использование предиктора палитры для сигнализации записей палитры. На фиг. 13 представлены предыдущая палитра 1310 и текущая палитра 1320.

[00153] Флаги повторного использования отправляются с использованием кодирования нулей по длине цикла. После этого, количество новых записей палитры сигнализируется с использованием экспоненциального кода Голомба порядка 0. Наконец, сигнализируются значения компонентов для новых записей палитры.

[00154] Индексы палитры кодируются с использованием сканирований перемещением по горизонтали и по вертикали, как показано на фиг. 14A и 14B. Порядок сканирования явно сигнализируется в битовом потоке с использованием palette_transpose_flag.

[00155] На фиг. 14A показано сканирование перемещением по горизонтали.

[00156] На фиг. 14B показано сканирование перемещением по вертикали.

[00157] Для кодирования индексов палитры, используется режим палитры на основе линейной группы коэффициентов (CG), который разделил CU на множество сегментов с 16 выборками на основе режима поперечного сканирования, как показано на фиг. 15A и 15B, где циклы индексации, значения индекса палитры и квантованные цвета для escape-режима кодируются/синтаксически анализируются последовательно для каждой CG.

[00158] Фиг. 15A показывает сканирование индексной карты на основе подблоков для палитры.

[00159] Фиг. 15B показывает сканирование индексной карты на основе подблоков для палитры.

[00160] Индексы палитры кодируются с использованием двух основных режимов выборки палитры: 'INDEX' и 'COPY_ABOVE'. Как объяснялось ранее, escape-символу присваивается индекс, равный максимальному размеру палитры. В режиме 'COPY_ABOVE', копируется индекс палитры выборки в строке выше. В режиме 'INDEX', индекс палитры сигнализируется явно. Порядок кодирования для кодирования прохода палитры в каждом сегменте следующий:

[00161] Для каждого пиксела, сигнализируется 1 контекстно-закодированный бин run_copy_flag=0, указывающий, относится ли пиксел к тому же режиму, что и предыдущий пиксел, т.е. относятся ли предыдущий просканированный пиксел и текущий пиксел оба к типу прохода 'COPY_ABOVE', или относятся ли предыдущий просканированный пиксел и текущий пиксел оба к типу прохода 'INDEX' и имеют одинаковое значение индекса. В противном случае, сигнализируется run_copy_flag=1.

[00162] Если пиксел и предыдущий пиксел относятся к разному режиму, сигнализируется один контекстно-кодированный бин copy_above_palette_indices_flag, указывающий тип прохода, то есть 'INDEX' или 'COPY_ABOVE', пиксела. Декодеру не нужно синтаксически анализировать тип прохода, если выборка находится в первой строке (сканирование перемещением по горизонтали) или в первом столбце (сканирование проходом по вертикали), поскольку режим INDEX используется по умолчанию. Кроме того, декодеру не нужно синтаксически анализировать тип прохода, если предыдущим синтаксически проанализированным типом прохода является COPY_ABOVE.

После кодирования прохода палитры пикселов в одном сегменте, значения индекса для режима INDEX (palette_idx_idc) и квантованные escape-цвета (palette_escape_val) кодируются с обходом.

[00163] Усовершенствования в кодировании остатков и коэффициентов

[00164] В VVC, при кодировании коэффициентов преобразования используется унифицированный (тот же самый) вывод параметра Райса (RicePara) для сигнализации синтаксиса abs_remainder и dec_abs_level. Единственное отличие заключается в том, что базовый уровень, baseLevel, установлен на 4 и 0 для кодирования abs_remainder и dec_abs_level, соответственно. Параметр Райса определяется на основе не только суммы абсолютных уровней соседних пяти коэффициентов преобразования в локальном шаблоне, но также соответствующего базового уровня следующим образом:

[00165] RicePara=RiceParTable[ max(min( 31, sumAbs - 5 * baseLevel), 0) ]

[00166] Другими словами, двоичные кодовые слова для синтаксических элементов abs_remainder и dec_abs_level определяются адаптивно в соответствии с информацией уровня соседних коэффициентов. Поскольку определение этого кодового слова выполняется для каждой выборки, требуется дополнительная логика для обработки адаптации этого кодового слова для кодирования коэффициентов.

[00167] Аналогично, при кодировании остаточного блока в режиме пропуска преобразования, двоичные кодовые слова для остатка синтаксических элементов abs_remainder определяются адаптивно в соответствии с информацией уровня соседних остаточных выборок.

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

[00169] В текущей разработке, бинаризация escape-выборок выводится путем вызова процесса бинаризации экспоненциального кода (Exp-кода) Голомба третьего порядка. Есть возможности для дальнейшего усовершенствования его производительности.

[00170] В текущем VVC, доступны две разные схемы отображения уровней, которые применяются соответственно к обычному преобразованию и пропуску преобразования. Каждая схема отображения уровней ассоциирована с различными условиями, функцией отображения и положением отображения. Для блоков, в которых применяется обычное преобразование, схема отображения уровней используется после того, как количество контекстно-кодированных бинов (CCB) превысит предел. Положение отображения, обозначаемое как ZeroPos[n], и результат отображения, обозначаемый как AbsLevel[xC][yC], выводятся, как указано в Таблице 2. Для блоков, где применяется пропуск преобразования, используется другая схема отображения уровней, прежде чем количество контекстно-кодированных бинов (CCB) превысит предел. Позиция отображения, обозначаемая как predCoeff, и результат отображения, обозначаемый как AbsLevel[xC][yC], выводятся, как указано в Таблице 5. Такая неунифицированная разработка может быть неоптимальной с точки зрения стандартизации.

[00171] Для профилей, превышающих 10 бит в HEVC, extended_precision_processing_flag, равный 1, специфицирует, что расширенный динамический диапазон используется для синтаксического анализа коэффициентов и обработки обратного преобразования. В текущем VVC, остаточное кодирование коэффициентов преобразования или кодирование с пропуском преобразования выше 10 бит отмечается как причина значительного снижения производительности. Есть возможности для дальнейшего улучшения его производительности.

[00172] Предлагаемые способы

[00173] В этом раскрытии предлагается несколько способов для решения проблем, упомянутых в разделе "Усовершенствования в кодировании остатков и коэффициентов". Отмечается, что следующие способы могут применяться независимо или совместно.

[00174] В соответствии с первым аспектом раскрытия, предлагается использовать фиксированный набор двоичных кодовых слов для кодирования определенных синтаксических элементов, например, abs_remainder, при остаточном кодировании. Двоичные кодовые слова могут быть сформированы с использованием различных методов. Ниже перечислены некоторые примерные методы.

[00175] Во-первых, используется та же процедура определения кодового слова для abs_remainder, как используется в текущем VVC, но всегда с выбранным фиксированным параметром Райса (например, 1, 2 или 3).

[00176] Во-вторых, бинаризация с фиксированной длиной.

[00177] В-третьих, усеченная бинаризация Райса.

[00178] В-четвертых, процесс усеченной двоичной бинаризации (TB).

[00179] В пятых, процесс бинаризации Exp-кода Голомба k-го порядка (EGk).

[00180] В-шестых, ограниченная бинаризация Exp-кода Голомба k-го порядка.

[00181] В соответствии со вторым аспектом раскрытия, предлагается использовать фиксированный набор кодовых слов для кодирования определенных синтаксических элементов, например, abs_remainder и dec_abs_level, при кодировании коэффициента преобразования. Двоичные кодовые слова могут быть сформированы с использованием различных методов. Ниже перечислены некоторые примерные методы.

[00182] Во-первых, используется та же самая процедура определения кодовых слов для abs_remainder и dec_abs_level, как используется в текущем VVC, но с фиксированным параметром Райса, например, 1, 2 или 3. Значение базового уровня все еще может отличаться для abs_remainder и dec_abs_level, как используется в текущем VVC (например, baseLevel устанавливается равным 4 и 0 для кодирования abs_remainder и dec_abs_level, соответственно).

[00183] Во-вторых, используется та же самая процедура определения кодовых слов для abs_remainder и dec_abs_level, что и в текущем VVC, но с фиксированным параметром Райса, например, 1, 2 или 3. Значения baseLevels для abs_remainder и dec_abs_level выбираются одинаковыми, например, оба используют 0 или оба используют 4.

[00184] В-третьих, бинаризация с фиксированной длиной.

[00185] В-четвертых, усеченная бинаризация Райса.

[00186] В-пятых, процесс усеченной двоичной бинаризации (TB).

[00187] В-шестых, процесс бинаризации Exp-кода Голомба k-го порядка (EGk).

[00188] В-седьмых, ограниченная бинаризация Exp-кода Голомба k-го порядка.

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

[00190] В соответствии с четвертым аспектом раскрытия, предлагается использовать варьируемые наборы двоичных кодовых слов для кодирования определенных синтаксических элементов, например abs_remainder, в остаточном кодировании, и выбор набора двоичных кодовых слов определяется в соответствии с определенной кодированной информацией текущего блока, например параметром квантования (QP), ассоциированным с TB/CB и/или слайсом, режимами предсказания CU (например, режимом IBC или интра или интер) и/или типом слайса (например, I-слайс, P-слайс или B-слайс). Для вывода варьируемых наборов двоичных кодовых слов могут использоваться различные методы, некоторые примерные методы перечислены ниже.

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

[00192] Во-вторых, процесс бинаризации Exp-кода Голомба k-го порядка (EGk).

[00193] В-третьих, ограниченная бинаризация Exp-кода Голомба k-го порядка.

Таблица 6. Определение параметра Райса на основе значения QP

if(QPCU <TH1)
{
rice parameter=K0
}
else if(QPCU <TH2)
{
rice parameter=K1
}
else if(QPCU <TH3)
{
rice parameter=K2
}
else if(QPCU <TH4)
{
rice parameter=K3
}
else
{
rice parameter=K4
}

[00194] Те же методы, объясненные в четвертом аспекте, также применимы к кодированию коэффициентов преобразования. В соответствии с пятым аспектом раскрытия, предлагается использовать варьируемые наборы двоичных кодовых слов для кодирования определенных синтаксических элементов, например abs_remainder и dec_abs_level, при кодировании коэффициентов преобразования, и выбор набора двоичных кодовых слов определяется в соответствии с некоторой кодированной информацией текущего блока, например параметром квантования (QP), ассоциированным с TB/CB и/или слайсом, режимами предсказания CU (например, режим IBC или интра или интер) и/или типом слайса (например, I-слайс, P-слайс или Б-слайс). Вновь, для получения варьируемых наборов двоичных кодовых слов, могут использоваться различные способы, при этом некоторые примерные способы перечислены ниже.

[00195] Во-первых, используется та же процедура определения кодового слова для abs_remainder, как используется в текущем VVC, но с другими параметрами Райса.

[00196] Во-вторых, процесс бинаризации Exp-кода Голомба k-го порядка (EGk).

[00197] В-третьих, ограниченная бинаризация Exp-кода Голомба k-го порядка.

[00198] В указанных выше способах, различные параметры Райса могут использоваться для вывода различного набора двоичных кодовых слов. Для данного блока остаточных выборок, используемые параметры Райса определяются в соответствии с QP CU, обозначаемым как QPCU, вместо информации о соседнем уровне. Один конкретный пример проиллюстрирован, как показано в Таблице 6, где TH1-TH4 являются заранее заданными порогами, удовлетворяющими (TH1<TH2<TH3<TH4), и K0-K4 являются заранее заданными параметрами Райса. Стоит отметить, что одна и та же логика может быть реализована по-разному на практике. Например, определенные уравнения, или справочная таблица, также могут использоваться для вывода тех же параметров Райса, как показано в Таблице 6, из значения QP текущего CU.

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

[00200] Следует отметить, что набор параметров и/или порогов может быть полным набором или поднабором всех параметров и порогов, ассоциированных с определением кодовых слов для синтаксических элементов. Набор параметров и/или порогов может сигнализироваться на разных уровнях в битовом потоке видео. Например, они могут сигнализироваться на уровне последовательности (например, набора параметров последовательности), уровне картинки (например, набора параметров изображения и/или заголовка картинки), уровне слайса (например, заголовка слайса), на уровне единицы дерева кодирования (CTU) или на уровне единицы кодирования (CU).

[00201] В одном примере, параметр Райса, используемый для определения кодовых слов для кодирования синтаксиса abs_remainder при остаточном кодировании пропуска преобразования, сигнализируется в заголовке слайса, заголовке картинки, PPS и/или SPS. Сигнализируемый параметр Райса используется для определения кодового слова для кодирования синтаксиса abs_remainder, когда CU кодируется как режим пропуска преобразования, и CU ассоциирована с вышеупомянутым заголовком слайса, заголовком картинки, PPS и/или SPS и т.д.

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

[00203] В одном примере, кодовое слово для abs_remainder, ассоциированного с кодированием остатка преобразования, как используется в текущем VVC, используется как для блоков яркости, так и для блоков цветности, но различные фиксированные параметры Райса используются блоком яркости и блоком цветности, соответственно (например, K1 для блока яркости, K2 для блока цветности, где K1 и K2 представляют собой целые числа).

[00204] Согласно седьмому аспекту раскрытия, набор параметров и/или порогов, ассоциированных с определением кодовых слов для синтаксических элементов кодирования коэффициентов преобразования и/или кодирования остатков с пропуском преобразования, сигнализируются в битовом потоке. И различные наборы могут сигнализироваться для блоков яркости и цветности. Определенные кодовые слова используются в качестве кодовых слов бинаризации при кодировании синтаксических элементов энтропийным кодером, например, арифметическом кодировании.

[00205] Те же самые способы, поясненные в вышеуказанных аспектах, также применимы к кодированию escape-значения в режиме палитры, например, palette_escape_val.

[00206] В соответствии с восьмым аспектом раскрытия, различные k-ые порядки бинаризации Exp-кода Голомба могут быть использованы для вывода отличающегося набора двоичных кодовых слов для кодирования escape-значений в режиме палитры. В одном примере, для данного блока escape-выборок, используемый параметр Exp-кода Голомба, т.е. значение k, определяется в соответствии со значением QP блока, обозначаемым как QPCU. Тот же пример, как иллюстрируется в Таблице 6, может быть использован для получения значения параметра k на основе заданного значения QP блока. Хотя в этом примере перечислены четыре разных пороговых значения (от TH1 до TH4), и пять разных значений k (от K0 до K4) могут быть выведены на основе этих пороговых значений и QPCU, стоит упомянуть, что количество пороговых значений приведено только для иллюстрации. На практике, различное количество пороговых значений может использоваться для разделения всего диапазона значений QP на различное количество сегментов значений QP, и, для каждого сегмента значений QP, различное значение k может использоваться для вывода соответствующих двоичных кодовых слов для кодирования escape-значений блока, который кодируется в режиме палитры. Также стоит отметить, что одна и та же логика может быть реализована по-разному на практике. Например, определенные уравнения или справочную таблицу можно использовать для вывода тех же параметров Райса.

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

[00208] Следует отметить, что набор параметров и/или порогов может быть полным набором или поднабором всех параметров и порогов, ассоциированных с определением кодовых слов для синтаксических элементов. Набор параметров и/или порогов может сигнализироваться на разных уровнях в битовом потоке видео. Например, они могут сигнализироваться на уровне последовательности (например, набора параметров последовательности), уровне картинки (например, набора параметров картинки и/или заголовка картинки), уровне слайса (например, заголовка слайса), на уровне единицы дерева кодирования (CTU) или на уровне единицы кодирования (CU).

[00209] В одном примере в соответствии с аспектом, k-ый порядок бинаризации Exp-кода Голомба используется для определения кодовых слов для кодирования синтаксиса palette_escape_val в режиме палитры, и значение k сигнализируется в битовом потоке декодеру. Значение k может сигнализироваться на разных уровнях, например, оно может сигнализироваться в заголовке слайса, заголовке картинки, PPS и/или SPS и т.д. Сигнализируемый параметр Exp-кода Голомба используется для определения кодового слова для кодирования синтаксиса palette_escape_val, когда CU кодируется как режим палитры, и CU ассоциирована с вышеупомянутым заголовком слайса, заголовком картинки, PPS и/или SPS и т.д.

[00210] Гармонизация отображения уровней для режима пропуска преобразования и режима обычного преобразования

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

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

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

[00214] Упрощение вывода параметра Райса при остаточном кодировании

[00215] В соответствии с тринадцатым аспектом раскрытия, предлагается использовать простую логику, такую как операция сдвига или деления, вместо таблицы поиска для вывода параметра Райса при кодировании синтаксического элемента уровня abs_remainder/dec_abs_level с использованием кода Голомба-Райса. В соответствии с настоящим раскрытием, таблица поиска, как специфицировано в Таблице 4, может быть удалена. В одном примере параметр Райса cRiceParam выводится как: cRiceParam=(locSumAbs >> n), где n - положительное число, например, 3. Стоит отметить, что на практике для достижения тех же результатов могут использоваться другие различные логики, например, операция деления на значение, равное 2 в степени n. Пример соответствующего процесса декодирования на основе проекта VVC проиллюстрирован, как показано ниже, с изменениями, выделенными жирным шрифтом и курсивом, и удаленным содержимым, показанным курсивом.

Таблица 7. Процесс вывода параметра Райса

Входами в этот процесс являются базовый уровень baseLevel, индекс цветового компонента cIdx, положение яркости ( x0, y0 ), специфицирующее верхнюю-левую выборку текущего блока преобразования относительно верхней-левой выборки текущей картинки, текущее положение сканирования ( xC, yC ) коэффициентов, двоичный логарифм ширины блолка преобразования log2TbWidth и двоичный логарифм высоты блока преобразования log2TbHeight.
Выходом этого процесса является параметр Райса cRiceParam.
При заданном массиве AbsLevel[ x ][ y ] для блока преобразования с индексом компонента cIdx и верхним-левым положением яркости ( x0, y0 ), переменная locSumAbs выводится, как специфицировано следующим псевдокодом:
locSumAbs = 0
if( xC < (1 << log2TbWidth) − 1 ) {
locSumAbs += AbsLevel[ xC + 1 ][ yC ]
if( xC < (1 << log2TbWidth) − 2 )
locSumAbs += AbsLevel[ xC + 2 ][ yC ]
if( yC < (1 << log2TbHeight) − 1 )
locSumAbs += AbsLevel[ xC + 1 ][ yC + 1 ] (1494)
}
if( yC < (1 << log2TbHeight) − 1 ) {
locSumAbs += AbsLevel[ xC ][ yC + 1 ]
if( yC < (1 << log2TbHeight) − 2 )
locSumAbs += AbsLevel[ xC ][ yC + 2 ]
}
locSumAbs = Clip3( 0, 31, locSumAbs − baseLevel * 5 )
При заданной переменной locSumAbs, параметр Райса cRiceParam выводится следующим образом:специфицировано в Таблице 4.
cRiceParam=(locSumAbs >> 3)
Кода baseLevel равно 0, переменная ZeroPos[ n ] выводится следующим образом:
ZeroPos[ n ]=( QState < 2 ? 1 : 2 ) << cRiceParam

[00216] В соответствии с четырнадцатым аспектом раскрытия предлагается использовать меньше соседних позиций для вывода параметра Райса при кодировании синтаксического элемента abs_remainder/dec_abs_level с использованием кода Голомба-Райса. В одном примере, предлагается использовать только 2 соседние позиции для вывода параметра Райса при кодировании синтаксического элемента abs_remainder/dec_abs_level. Соответствующий процесс декодирования, основанный на проекте VVC, проиллюстрирован, как показано ниже, с изменениями, выделенными жирным шрифтом и курсивом, и удаленным содержимым, показанным курсивом.

Таблица 8. Процесс вывода параметра Райса

Входами в этот процесс являются базовый уровень baseLevel, индекс цветового компонента cIdx, положение яркости ( x0, y0 ), специфицирующее верхнюю-левую выборку текущего блока преобразования относительно верхней-левой выборки текущей картинки, текущее положение сканирования ( xC, yC ) коэффициентов, двоичный логарифм ширины блока преобразования log2TbWidth и двоичный логарифм высоты блока преобразования log2TbHeight.
Выходом этого процесса является параметр Райса cRiceParam.
При заданном массиве AbsLevel[ x ][ y ] для блока преобразования с индексом компонента cIdx и верхнем-левом положении яркости ( x0, y0 ), переменная locSumAbs выводится, как специфицировано следующим псевдокодом:
locSumAbs = 0
if( xC < (1 << log2TbWidth) − 1 ) {
locSumAbs += AbsLevel[ xC + 1 ][ yC ]
if(xC<(1<<log2TbWidth)-2)
locSumAbs+=AbsLevel[xC+2][yC]
if(yC<(1<<log2TbHeight)-1)
locSumAbs+=AbsLevel[xC+1][yC+1]


}
if( yC < (1 << log2TbHeight) − 1 ) {
locSumAbs += AbsLevel[ xC ][ yC + 1 ]
if(yC<(1<<log2TbHeight)-2)
locSumAbs+=AbsLevel[xC][yC+2]
}
locSumAbs = Clip3( 0, 31, locSumAbs − baseLevel * 52 )
При заданной переменной locSumAbs, параметр Райса cRiceParam выводится, как специфицировано в Таблице 4.
Когда baseLevel равно 0, переменная ZeroPos[ n ] выводится следующим образом:
ZeroPos[ n ]=( QState < 2 ? 1 : 2 ) << cRiceParam

[00217] В другом примере, предлагается использовать только одну соседнюю позицию для вывода параметра Райса при кодировании синтаксического элемента abs_remainder/dec_abs_level. Соответствующий процесс декодирования, основанный на проекте VVC, проиллюстрирован, как показано ниже, с изменениями, выделенными жирным шрифтом и курсивом, и удаленным содержимым, показанным курсивом.

Таблица 9. Процесс вывода параметра Райса

Входами в этот процесс являются базовый уровень baseLevel, индекс цветового компонента cIdx, положение яркости ( x0, y0 ), специфицирующее верхнюю-левую выборку текущего блока преобразования относительно верхней-левой выборки текущей картинки, текущее положение сканирования ( xC, yC ) коэффициентов, двоичный логарифм ширины блока преобразования log2TbWidth и двоичный логарифм высоты блока преобразования log2TbHeight.
Выходом этого процесса является параметр Райса cRiceParam.
При заданном массиве AbsLevel[ x ][ y ] для блока преобразования с индексом компонента cIdx и верхнем-левом положении яркости ( x0, y0 ), переменная locSumAbs выводится, как специфицировано следующим псевдокодом:
locSumAbs = 0
if( xC < (1 << log2TbWidth) − 1 ) {
locSumAbs += AbsLevel[ xC + 1 ][ yC ]
if( xC < (1 << log2TbWidth) − 2 )
locSumAbs+=AbsLevel[xC+2][yC]
if(yC<(1<<log2TbHeight)-1)
locSumAbs+=AbsLevel[xC+1][yC+1]
}
if( yC < (1 << log2TbHeight) − 1 ) {
locSumAbs += AbsLevel[ xC ][ yC + 1 ]
if(yC<(1<<log2TbHeight)-2)
locSumAbs+=AbsLevel[xC][yC+2]
}
locSumAbs = Clip3( 0, 31, locSumAbs − baseLevel *5)
locSumAbs = Clip3( 0, 31, locSumAbs − baseLevel *5)
При заданной переменной locSumAbs, параметр Райса cRiceParam выводится как специфицировано в Таблице 4.
Когда baseLevel равно 0, переменная ZeroPos[ n ] выводится следующим образом:
ZeroPos[ n ]=( QState < 2 ? 1 : 2 ) << cRiceParam

[00218] В соответствии с пятнадцатым аспектом раскрытия, предлагается использовать различные логики для корректировки значения locSumAbs на основе значения baseLevel для вывода параметра Райса при кодировании синтаксического элемента abs_remainder/dec_abs_level с использованием кода Голомба-Райса. В одном примере, дополнительные операции масштабирования и смещения применяются в форме “(locSumAbs − baseLevel * 5) *alpha+beta”. Когда alpha принимает значение 1,5, а beta - значение 1, соответствующий процесс декодирования на основе проекта VVC представлен ниже, с изменениями, выделенными жирным шрифтом и курсивом, и удаленным содержимым, показанным курсивом.

Таблица 10. Процесс вывода параметра Райса

Входами в этот процесс являются базовый уровень baseLevel, индекс цветового компонента cIdx, положение яркости ( x0, y0 ), специфицирующее верхнюю-левую выборку текущего блока преобразования относительно верхней-левой выборки текущей картинки, текущее положение сканирования ( xC, yC ) коэффициентов, двоичный логарифм ширины блока преобразования log2TbWidth и двоичный логарифм высоты блока преобразования log2TbHeight.
Выходом этого процесса является параметр Райса cRiceParam.
При заданном массиве AbsLevel[ x ][ y ] для блока преобразования с индексом компонента cIdx и верхнем-левом положении яркости ( x0, y0 ), переменная locSumAbs выводится, как специфицировано следующим псевдокодом:
locSumAbs = 0
if( xC < (1 << log2TbWidth) − 1 ) {
locSumAbs += AbsLevel[ xC + 1 ][ yC ]
if( xC < (1 << log2TbWidth) − 2 )
locSumAbs += AbsLevel[ xC + 2 ][ yC ]
if( yC < (1 << log2TbHeight) − 1 )
locSumAbs += AbsLevel[ xC + 1 ][ yC + 1 ] (1494)
}
if( yC < (1 << log2TbHeight) − 1 ) {
locSumAbs += AbsLevel[ xC ][ yC + 1 ]
if( yC < (1 << log2TbHeight) − 2 )
locSumAbs += AbsLevel[ xC ][ yC + 2 ]
}
locSumAbs = Clip3( 0, 31, (locSumAbs − baseLevel * 5) *1.5 +1 )
При заданной переменной locSumAbs, параметр Райса cRiceParam выводится, как специфицировано в Таблице 4.
Когда baseLevel равно 0, переменная ZeroPos[ n ] выводится следующим образом:
ZeroPos[ n ]=( QState < 2 ? 1 : 2 ) << cRiceParam

[00219] В соответствии с шестнадцатым аспектом раскрытия, предлагается удалить операции обрезки для вывода параметра Райса в синтаксическом элементе abs_remainder/dec_abs_level с использованием кода Голомба-Райса. Согласно настоящему раскрытию, пример процесса декодирования в проекте VVC проиллюстрирован, как показано ниже, с изменениями, выделенными жирным шрифтом и курсивом, и удаленным содержимым, показанным курсивом.

Таблица 11. Процесс вывода параметра Райса

Входами в этот процесс являются базовый уровень baseLevel, индекс цветового компонента cIdx, положение яркости ( x0, y0 ) специфицирующее верхнюю-левую выборку текущего блока преобразования относительно верхней-левой выборки текущей картинки, текущее положение сканирования ( xC, yC ) коэффициентов, двоичный логарифм ширины блока преобразования log2TbWidth и двоичный логарифм высоты блока преобразования log2TbHeight.
Выходом этого процесса является параметр Райса cRiceParam.
При заданном массиве AbsLevel[ x ][ y ] для блока преобразования с индексом компонента cIdx и верхнем-левом положении яркости ( x0, y0 ), переменная locSumAbs выводится, как специфицировано следующим псевдокодом:
locSumAbs = 0
if( xC < (1 << log2TbWidth) − 1 ) {
locSumAbs += AbsLevel[ xC + 1 ][ yC ]
if( xC < (1 << log2TbWidth) − 2 )
locSumAbs += AbsLevel[ xC + 2 ][ yC ]
if( yC < (1 << log2TbHeight) − 1 )
locSumAbs += AbsLevel[ xC + 1 ][ yC + 1 ] (1494)
}
if( yC < (1 << log2TbHeight) − 1 ) {
locSumAbs += AbsLevel[ xC ][ yC + 1 ]
if( yC < (1 << log2TbHeight) − 2 )
locSumAbs += AbsLevel[ xC ][ yC + 2 ]
}
locSumAbs = Clip3(0, 31, locSumAbs − baseLevel * 5)
При заданной переменной locSumAbs, параметр Райса cRiceParam выводится следующим образом:специфицировано в Таблице 4.
cRiceParam = (locSumAbs >> 3)
Когда baseLevel равно 0, переменная ZeroPos[ n ] выводится следующим образом:
ZeroPos[ n ]=( QState < 2 ? 1 : 2 ) << cRiceParam

[00220] В соответствии с настоящим раскрытием, пример процесса декодирования в проекте VVC проиллюстрирован, как представлено ниже, с изменениями, выделенными жирным шрифтом и курсивом, и удаленным содержимым, показанным курсивом.

Таблица 12. Процесс вывода параметра Райса

Входами в этот процесс являются базовый уровень baseLevel, индекс цветового компонента cIdx, положение яркости ( x0, y0 ) специфицирующее верхнюю-левую выборку текущего блока преобразования относительно верхней-левой выборки текущей картинки, текущее положение сканирования ( xC, yC ) коэффициентов, двоичный логарифм ширины блока преобразования log2TbWidth и двоичный логарифм высоты блока преобразования log2TbHeight.
Выходом этого процесса является параметр Райса cRiceParam.
При заданном массиве AbsLevel[ x ][ y ] для блока преобразования с индексом компонента cIdx и верхнем-левом положении яркости ( x0, y0 ), переменная locSumAbs выводится, как специфицировано следующим псевдокодом:
locSumAbs = 0
if( xC < (1 << log2TbWidth) − 1 ) {
locSumAbs += AbsLevel[ xC + 1 ][ yC ]
if( xC < (1 << log2TbWidth) − 2 )
locSumAbs += AbsLevel[ xC + 2 ][ yC ]
if( yC < (1 << log2TbHeight) − 1 )
locSumAbs += AbsLevel[ xC + 1 ][ yC + 1 ] (1494)
}
if( yC < (1 << log2TbHeight) − 1 ) {
locSumAbs += AbsLevel[ xC ][ yC + 1 ]
if( yC < (1 << log2TbHeight) − 2 )
locSumAbs += AbsLevel[ xC ][ yC + 2 ]
}
locSumAbs = Clip3Min(0, 31,  locSumAbs − baseLevel * 5 )
При заданной переменной locSumAbs, параметр Райса cRiceParam выводится, как специфицировано в Таблице 4.
Когда baseLevel равно 0, переменная ZeroPos[ n ] выводится следующим образом:
ZeroPos[ n ]=( QState < 2 ? 1 : 2 ) << cRiceParam

[00221] В соответствии с семнадцатым аспектом раскрытия, предлагается изменить начальное значение locSumAbs с 0 на ненулевое целое число для вывода параметра Райса при кодировании синтаксического элемента abs_remainder/dec_abs_level с использованием кода Голомба-Райса. В одном примере, locSumAbs присвоено начальное значение 1, и соответствующий процесс декодирования на основе проекта VVC проиллюстрирован, как представлено ниже, с изменениями, выделенными жирным шрифтом и курсивом, и удаленным содержимым, показанным курсивом.

Таблица 13. Процесс вывода параметра Райса

Входами в этот процесс являются базовый уровень baseLevel, индекс цветового компонента cIdx, положение яркости ( x0, y0 ) специфицирующее верхнюю-левую выборку текущего блока преобразования относительно верхней-левой выборки текущей картинки, текущее положение сканирования ( xC, yC ) коэффициентов, двоичный логарифм ширины блока преобразования log2TbWidth и двоичный логарифм высоты блока преобразования log2TbHeight.
Выходом этого процесса является параметр Райса cRiceParam.
При заданном массиве AbsLevel[ x ][ y ] для блока преобразования с индексом компонента cIdx и верхнем-левом положении яркости ( x0, y0 ), переменная locSumAbs выводится, как специфицировано следующим псевдокодом:
locSumAbs = 1
if( xC < (1 << log2TbWidth) − 1 ) {
locSumAbs += AbsLevel[ xC + 1 ][ yC ]
if( xC < (1 << log2TbWidth) − 2 )
locSumAbs += AbsLevel[ xC + 2 ][ yC ]
if( yC < (1 << log2TbHeight) − 1 )
locSumAbs += AbsLevel[ xC + 1 ][ yC + 1 ] (1494)
}
if( yC < (1 << log2TbHeight) − 1 ) {
locSumAbs += AbsLevel[ xC ][ yC + 1 ]
if( yC < (1 << log2TbHeight) − 2 )
locSumAbs += AbsLevel[ xC ][ yC + 2 ]
}
locSumAbs = Clip3( 0, 31,  locSumAbs − baseLevel * 5 )
При заданной переменной locSumAbs, параметр Райса cRiceParam выводится, как специфицировано в Таблице 4.
Когда baseLevel равно 0, переменная ZeroPos[ n ] выводится следующим образом:
ZeroPos[ n ]=( QState < 2 ? 1 : 2 ) << cRiceParam

[00222] В соответствии с восемнадцатым аспектом раскрытия, предлагается использовать максимальное значение значений уровня соседнего положения вместо их суммарного значения для вывода параметра Райса при кодировании синтаксического элемента abs_remainder/dec_abs_level с использованием кода Голомба-Райса. Пример соответствующего процесса декодирования на основе проекта VVC проиллюстрирован, как представлено ниже, с изменениями, выделенными жирным шрифтом и курсивом, и удаленным содержимым, показанным курсивом.

Таблица 14. Процесс вывода параметра Райса

Входами в этот процесс являются базовый уровень baseLevel, индекс цветового компонента cIdx, положение яркости ( x0, y0 ) специфицирующее верхнюю-левую выборку текущего блока преобразования относительно верхней-левой выборки текущей картинки, текущее положение сканирования ( xC, yC ) коэффициентов, двоичный логарифм ширины блока преобразования log2TbWidth и двоичный логарифм высоты блока преобразования log2TbHeight.
Выходом этого процесса является параметр Райса cRiceParam.
При заданном массиве AbsLevel[ x ][ y ] для блока преобразования с индексом компонента cIdx и верхнем-левом положении яркости ( x0, y0 ), переменная locSumAbs выводится, как специфицировано следующим псевдокодом:
locSumAbs = 0
if( xC < (1 << log2TbWidth) − 1 ) {
locSumAbs += Max( AbsLevel[ xC + 1 ][ yC ], locSumAbs )
if( xC < (1 << log2TbWidth) − 2 )
locSumAbs += Max( AbsLevel[ xC + 2 ][ yC ], locSumAbs )
if( yC < (1 << log2TbHeight) − 1 )
locSumAbs += Max( AbsLevel[ xC + 1 ][ yC + 1 ], locSumAbs ) (1494)
}
if( yC < (1 << log2TbHeight) − 1 ) {
locSumAbs += Max( AbsLevel[ xC ][ yC + 1 ], locSumAbs )
if( yC < (1 << log2TbHeight) − 2 )
locSumAbs += Max( AbsLevel[ xC ][ yC + 2 ], locSumAbs )
}
locSumAbs = Clip3( 0, 31,  locSumAbs − baseLevel * 5 )
При заданной переменной locSumAbs, параметр Райса cRiceParam выводится, как специфицировано в Таблице 4.
Когда baseLevel равно 0, переменная ZeroPos[ n ] выводится следующим образом:
ZeroPos[ n ]=( QState < 2 ? 1 : 2 ) << cRiceParam

[00223] В соответствии с девятнадцатым аспектом раскрытия, предлагается выводить параметр Райса на основе относительной амплитуды каждого значения AbsLevel в соседних позициях и значения базового уровня при кодировании синтаксического элемента abs_remainder/dec_abs_level с использованием кода Голомба-Райса. В одном примере, параметр Райса выводится на основе того, сколько из значений AbsLevel в соседних позициях больше, чем базовый уровень. Пример соответствующего процесса декодирования на основе проекта VVC проиллюстрирован, как представлено ниже, с изменениями, выделенными жирным шрифтом и курсивом, и удаленным содержимым, показанным курсивом.

Таблица 15. Процесс вывода параметра Райса

Входами в этот процесс являются базовый уровень baseLevel, индекс цветового компонента cIdx, положение яркости ( x0, y0 ) специфицирующее верхнюю-левую выборку текущего блока преобразования относительно верхней-левой выборки текущей картинки, текущее положение сканирования ( xC, yC ) коэффициентов, двоичный логарифм ширины блока преобразования log2TbWidth и двоичный логарифм высоты блока преобразования log2TbHeight.
Выходом этого процесса является параметр Райса cRiceParam.
При заданном массиве AbsLevel[ x ][ y ] для блока преобразования с индексом компонента cIdx и верхнем-левом положении яркости ( x0, y0 ), переменная locSumAbs выводится, как специфицировано следующим псевдокодом:
locSumAbs = 0
if( xC < (1 << log2TbWidth) − 1 ) {
locSumAbs += (AbsLevel[ xC + 1 ][ yC ] > baseLevel? 1:0)
if( xC < (1 << log2TbWidth) − 2 )
locSumAbs += (AbsLevel[ xC + 2 ][ yC ] > baseLevel? 1:0)
if( yC < (1 << log2TbHeight) − 1 )
locSumAbs += (AbsLevel[ xC + 1 ][ yC + 1 ] > baseLevel? 1:0)(1494)
}
if( yC < (1 << log2TbHeight) − 1 ) {
locSumAbs += (AbsLevel[ xC ][ yC + 1 ] > baseLevel? 1:0)
if( yC < (1 << log2TbHeight) − 2 )
locSumAbs += (AbsLevel[ xC ][ yC + 2 ] > baseLevel? 1:0)
}
locSumAbs = Clip3( 0, 31,  locSumAbs − baseLevel * 5 )
При заданной переменной locSumAbs, параметр Райса cRiceParam выводится следующим образом:специфицировано в Таблице 4.
cRiceParam=locSumAbs
Когда baseLevel равно 0, переменная ZeroPos[ n ] выводится следующим образом:
ZeroPos[ n ]=( QState < 2 ? 1 : 2 ) << cRiceParam

[00224] В другом примере, параметр Райса выводится на основе суммы значений (AbsLevel - baseLevel) для тех соседних позиций, значения AbsLevel которых больше, чем базовый уровень. Пример соответствующего процесса декодирования на основе проекта VVC проиллюстрирован, как представлено ниже, с изменениями, выделенными жирным шрифтом и курсивом, и удаленным содержимым, показанным курсивом.

Таблица 16. Процесс вывода параметра Райса

Входами в этот процесс являются базовый уровень baseLevel, индекс цветового компонента cIdx, положение яркости ( x0, y0 ) специфицирующее верхнюю-левую выборку текущего блока преобразования относительно верхней-левой выборки текущей картинки, текущее положение сканирования ( xC, yC ) коэффициентов, двоичный логарифм ширины блока преобразования log2TbWidth и двоичный логарифм высоты блока преобразования log2TbHeight.
Выходом этого процесса является параметр Райса cRiceParam.
При заданном массиве AbsLevel[ x ][ y ] для блока преобразования с индексом компонента cIdx и верхнем-левом положении яркости ( x0, y0 ), переменная locSumAbs выводится, как специфицировано следующим псевдокодом:
locSumAbs = 0
if( xC < (1 << log2TbWidth) − 1 ) {
locSumAbs += Max( 0 , AbsLevel[ xC + 1 ][ yC ] - baseLevel)
if( xC < (1 << log2TbWidth) − 2 )
locSumAbs += Max( 0 , AbsLevel[ xC + 2 ][ yC ] - baseLevel)
if( yC < (1 << log2TbHeight) − 1 )
locSumAbs += Max( 0 , AbsLevel[ xC + 1 ][ yC + 1 ] - baseLevel) (1494)
}
if( yC < (1 << log2TbHeight) − 1 ) {
locSumAbs += Max( 0 , AbsLevel[ xC ][ yC + 1 ] - baseLevel)
if( yC < (1 << log2TbHeight) − 2 )
locSumAbs += Max( 0 , AbsLevel[ xC ][ yC + 2 ] - baseLevel)
}
locSumAbs = Clip3Min(0,  31,  locSumAbs –baseLevel*5)
При заданной переменной locSumAbs, параметр Райса cRiceParam выводится, как специфицировано в Таблице 4.
Когда baseLevel равно 0, переменная ZeroPos[ n ] выводится следующим образом:
ZeroPos[ n ]=( QState < 2 ? 1 : 2 ) << cRiceParam

[00225] Согласно настоящему раскрытию, один пример процесса декодирования в проекте VVC проиллюстрирован, как представлено ниже, с изменениями, выделенными жирным шрифтом и курсивом, и удаленным содержимым, показанным курсивом.

Таблица 17. Процесс вывода параметра Райса

Входами в этот процесс являются базовый уровень baseLevel, индекс цветового компонента cIdx, положение яркости ( x0, y0 ) специфицирующее верхнюю-левую выборку текущего блока преобразования относительно верхней-левой выборки текущей картинки, текущее положение сканирования ( xC, yC ) коэффициентов, двоичный логарифм ширины блока преобразования log2TbWidth и двоичный логарифм высоты блока преобразования log2TbHeight.
Выходом этого процесса является параметр Райса cRiceParam.
При заданном массиве AbsLevel[ x ][ y ] для блока преобразования с индексом компонента cIdx и верхнем-левом положении яркости ( x0, y0 ), переменная locSumAbs выводится, как специфицировано следующим псевдокодом:
locSumAbs = 0
if( xC < (1 << log2TbWidth) − 1 ) {
locSumAbs += AbsLevel[ xC + 1 ][ yC ] - baseLevel
if( xC < (1 << log2TbWidth) − 2 )
locSumAbs += AbsLevel[ xC + 2 ][ yC ] - baseLevel
if( yC < (1 << log2TbHeight) − 1 )
locSumAbs += AbsLevel[ xC + 1 ][ yC + 1 ] – baseLevel (1494)
}
if( yC < (1 << log2TbHeight) − 1 ) {
locSumAbs += AbsLevel[ xC ][ yC + 1 ] - baseLevel
if( yC < (1 << log2TbHeight) − 2 )
locSumAbs += AbsLevel[ xC ][ yC + 2 ] - baseLevel
}
locSumAbs = Clip3( 0, 31,  locSumAbs–baseLevel*5)
При заданной переменной locSumAbs, параметр Райса cRiceParam выводится, как специфицировано в Таблице 4.
Когда baseLevel равно 0, переменная ZeroPos[ n ] выводится следующим образом:
ZeroPos[ n ]=( QState < 2 ? 1 : 2 ) << cRiceParam

[00226] Упрощение вывода положения отображения уровня в остаточном кодировании

[00227] В соответствии с двадцатым аспектом раскрытия, предлагается удалить QState из вывода ZeroPos[n], так что ZeroPos[n] выводится исключительно из cRiceParam. Пример соответствующего процесса декодирования на основе проекта VVC проиллюстрирован, как представлено ниже, с изменениями, выделенными жирным шрифтом и курсивом, и удаленным содержимым, показанным курсивом.

Таблица 18. Процесс вывода параметра Райса

Входами в этот процесс являются базовый уровень baseLevel, индекс цветового компонента cIdx, положение яркости ( x0, y0 ) специфицирующее верхнюю-левую выборку текущего блока преобразования относительно верхней-левой выборки текущей картинки, текущее положение сканирования ( xC, yC ) коэффициентов, двоичный логарифм ширины блока преобразования log2TbWidth и двоичный логарифм высоты блока преобразования log2TbHeight.
Выходом этого процесса является параметр Райса cRiceParam.
При заданном массиве AbsLevel[ x ][ y ] для блока преобразования с индексом компонента cIdx и верхнем-левом положении яркости ( x0, y0 ), переменная locSumAbs выводится, как специфицировано следующим псевдокодом:
locSumAbs = 0
if( xC < (1 << log2TbWidth) − 1 ) {
locSumAbs += AbsLevel[ xC + 1 ][ yC ]
if( xC < (1 << log2TbWidth) − 2 )
locSumAbs += AbsLevel[ xC + 2 ][ yC ]
if( yC < (1 << log2TbHeight) − 1 )
locSumAbs += AbsLevel[ xC + 1 ][ yC + 1 ] (1494)
}
if( yC < (1 << log2TbHeight) − 1 ) {
locSumAbs += AbsLevel[ xC ][ yC + 1 ]
if( yC < (1 << log2TbHeight) − 2 )
locSumAbs += AbsLevel[ xC ][ yC + 2 ]
}
locSumAbs = Clip3( 0, 31, locSumAbs − baseLevel * 5 )
При заданной переменной locSumAbs, параметр Райса cRiceParam выводится, как специфицировано в Таблице 4.
Когда baseLevel равно 0, переменная ZeroPos[ n ] выводится следующим образом:
ZeroPos[ n ] =2(QState<2?1:2)  <<  cRiceParam

[00228] В соответствии с двадцать первым аспектом раскрытия, предлагается выводить ZeroPos[n] на основе значения locSumAbs. Пример соответствующего процесса декодирования на основе проекта VVC проиллюстрирован, как представлено ниже, с изменениями, выделенными жирным шрифтом и курсивом, и удаленным содержимым, показанным курсивом.

Таблица 19. Процесс вывода параметра Райса

Входами в этот процесс являются базовый уровень baseLevel, индекс цветового компонента cIdx, положение яркости ( x0, y0 ) специфицирующее верхнюю-левую выборку текущего блока преобразования относительно верхней-левой выборки текущей картинки, текущее положение сканирования ( xC, yC ) коэффициентов, двоичный логарифм ширины блока преобразования log2TbWidth и двоичный логарифм высоты блока преобразования log2TbHeight.
Выходом этого процесса является параметр Райса cRiceParam.
При заданном массиве AbsLevel[ x ][ y ] для блока преобразования с индексом компонента cIdx и верхнем-левом положении яркости ( x0, y0 ), переменная locSumAbs выводится, как специфицировано следующим псевдокодом:
locSumAbs = 0
if( xC < (1 << log2TbWidth) − 1 ) {
locSumAbs += AbsLevel[ xC + 1 ][ yC ]
if( xC < (1 << log2TbWidth) − 2 )
locSumAbs += AbsLevel[ xC + 2 ][ yC ]
if( yC < (1 << log2TbHeight) − 1 )
locSumAbs += AbsLevel[ xC + 1 ][ yC + 1 ] (1494)
}
if( yC < (1 << log2TbHeight) − 1 ) {
locSumAbs += AbsLevel[ xC ][ yC + 1 ]
if( yC < (1 << log2TbHeight) − 2 )
locSumAbs += AbsLevel[ xC ][ yC + 2 ]
}
locSumAbs = Clip3( 0, 31, locSumAbs − baseLevel * 5 )
При заданной переменной locSumAbs, параметр Райса cRiceParam выводится, как специфицировано в Таблице 4.
Когда baseLevel равно 0, переменная ZeroPos[ n ] выводится следующим образом:
ZeroPos[ n ] = locSumAbs (QState<2?1:2)  <<  cRiceParam

[00229] В соответствии с двадцать вторым аспектом раскрытия, предлагается выводить ZeroPos[n] на основе значения AbsLevel соседних позиций. В одном примере, ZeroPos[n] выводится на основе максимального значения среди AbsLevel[xC+1][yC] и AbsLevel[xC][yC+1]. Пример соответствующего процесса декодирования на основе проекта VVC проиллюстрирован, как представлено ниже, с изменениями, выделенными жирным шрифтом и курсивом, и удаленным содержимым, показанным курсивом.

Таблица 20. Процесс вывода параметра Райса

Входами в этот процесс являются базовый уровень baseLevel, индекс цветового компонента cIdx, положение яркости ( x0, y0 ) специфицирующее верхнюю-левую выборку текущего блока преобразования относительно верхней-левой выборки текущей картинки, текущее положение сканирования ( xC, yC ) коэффициентов, двоичный логарифм ширины блока преобразования log2TbWidth и двоичный логарифм высоты блока преобразования log2TbHeight.
Выходом этого процесса является параметр Райса cRiceParam.
При заданном массиве AbsLevel[ x ][ y ] для блока преобразования с индексом компонента cIdx и верхнем-левом положении яркости ( x0, y0 ), переменная locSumAbs выводится, как специфицировано следующим псевдокодом:
locSumAbs = 0
ZeroPos[ n ] = 1
if( xC < (1 << log2TbWidth) − 1 ) {
locSumAbs += AbsLevel[ xC + 1 ][ yC ]
ZeroPos[ n ] = Max(AbsLevel[ xC + 1 ][ yC ], ZeroPos[ n ])
if( xC < (1 << log2TbWidth) − 2 )
locSumAbs += AbsLevel[ xC + 2 ][ yC ]
if( yC < (1 << log2TbHeight) − 1 )
locSumAbs += AbsLevel[ xC + 1 ][ yC + 1 ] (1494)
}
if( yC < (1 << log2TbHeight) − 1 ) {
locSumAbs += AbsLevel[ xC ][ yC + 1 ]
ZeroPos[ n ] = Max( AbsLevel[ xC ][ yC + 1 ], ZeroPos[ n ])
if( yC < (1 << log2TbHeight) − 2 )
locSumAbs += AbsLevel[ xC ][ yC + 2 ]
}
locSumAbs = Clip3( 0, 31, locSumAbs − baseLevel * 5 )
При заданной переменной locSumAbs, параметр Райса cRiceParam выводится, как специфицировано в Таблице 4.
Когда baseLevel равно 0, переменная ZeroPos[ n ] выводится следующим образом:
ZeroPos[ n ]=ZeroPos[ n ]*1.25+1
ZeroPos[ n ] = (QState<2?1:2)  <<  cRiceParam

[00230] В соответствии с двадцать третьим аспектом раскрытия, предлагается выводить как cRiceParam, так и ZeroPosf[n] на основе максимального значения всех значений AbsLevel соседних позиций. Пример соответствующего процесса декодирования на основе проекта VVC проиллюстрирован, как представлено ниже, с изменениями, выделенными жирным шрифтом и курсивом, и удаленным содержимым, показанным курсивом.

Таблица 21. Процесс вывода параметра Райса

Входами в этот процесс являются базовый уровень baseLevel, индекс цветового компонента cIdx, положение яркости ( x0, y0 ) специфицирующее верхнюю-левую выборку текущего блока преобразования относительно верхней-левой выборки текущей картинки, текущее положение сканирования ( xC, yC ) коэффициентов, двоичный логарифм ширины блока преобразования log2TbWidth и двоичный логарифм высоты блока преобразования log2TbHeight.
Выходом этого процесса является параметр Райса cRiceParam.
При заданном массиве AbsLevel[ x ][ y ] для блока преобразования с индексом компонента cIdx и верхнем-левом положении яркости ( x0, y0 ), переменная locSumAbs выводится, как специфицировано следующим псевдокодом:
locSumAbs = 0
if( xC < (1 << log2TbWidth) − 1 ) {
locSumAbs = Max( AbsLevel[ xC + 1 ][ yC ], locSumAbs )
if( xC < (1 << log2TbWidth) − 2 )
locSumAbs = Max( AbsLevel[ xC + 2 ][ yC ], locSumAbs )
if( yC < (1 << log2TbHeight) − 1 )
locSumAbs = Max( AbsLevel[ xC + 1 ][ yC + 1 ], locSumAbs ) (1494)
}
if( yC < (1 << log2TbHeight) − 1 ) {
locSumAbs = Max( AbsLevel[ xC ][ yC + 1 ], locSumAbs )
if( yC < (1 << log2TbHeight) − 2 )
locSumAbs = Max( AbsLevel[ xC ][ yC + 2 ], locSumAbs )
}
locSumAbs = Clip3Max ( 0,  31, locSumAbs − baseLevel*5 )
При заданной переменной locSumAbs, параметр Райса cRiceParam выводится следующим образом: специфицировано в таблице 4.
cRiceParam=Min( (locSumAbs >> 2) , 3 )
Когда baseLevel равно 0, переменная ZeroPos[ n ] выводится следующим образом:
ZeroPos[ n ] = locSumAbs(QState<2?1:2)  <<  cRiceParam

[00231] Те же способы, объясненные в вышеуказанных аспектах, также применимы к выводу predCoeff в остаточном кодировании для режима пропуска преобразования. В одном примере, переменная predCoeff выводится следующим образом:

[00232] predCoeff=Max(absLeftCoeff, absAboveCoeff) + 1

[00233] Остаточное кодирование для коэффициентов преобразования

[00234] В этом раскрытии, для решения проблем, указанных в разделе “усовершенствования кодирования остатков и коэффициентов”, предоставлены способы упрощения и/или дальнейшего усовершенствования существующей схемы остаточного кодирования. В общем, основные характеристики предлагаемых технологий в этом раскрытии суммируются следующим образом.

[00235] Во-первых, настроить вывод параметра Райса, используемый при обычном остаточном кодировании, на основе существующей схемы.

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

[00237] В-третьих, изменить вывод параметра Райса, используемый при обычном остаточном кодировании.

[00238] Вывод параметров Райса в остаточном кодировании на основе существующей схемы

[00239] В соответствии с двадцать четвертым аспектом раскрытия, предлагается использовать варьируемые способы вывода параметров Райса для кодирования некоторых синтаксических элементов, например, abs_remainder/dec_abs_level, в остаточном кодировании, и выбор определяется в соответствии с некоторой кодированной информацией текущего блока, например параметром квантования или битовой глубиной кодирования, ассоциированной с TB/CB и/или слайсом/профилем, и/или в соответствии с новым флагом, ассоциированным с уровнем TB/CB/слайса/картинки/ последовательности, например extended_precision_processing_flag. Для вывода параметра Райса могут использоваться различные способы, некоторые примерные способы перечислены ниже.

[00240] Во-первых, cRiceParam=(cRiceParam << a) + (cRiceParam >> b) + c, где a, b и c являются положительными числами, например {a, b, c}={1, 1, 0}. Стоит отметить, что на практике для достижения тех же результатов могут использоваться другие различные логические схемы, например, операция умножения на значение, равное 2 в степени n.

[00241] Во-вторых, cRiceParam=(cRiceParam << a) + b, где a и b - положительные числа, например {a, b}={1, 1}. Стоит отметить, что на практике для достижения тех же результатов могут использоваться другие различные логические схемы, например, операция умножения на значение, равное 2 в степени n.

[00242] В-третьих, cRiceParam=(cRiceParam*a) + b, где a и b - положительные числа, например {a, b}={1,5, 0}. Стоит отметить, что на практике для достижения тех же результатов могут использоваться другие различные логические схемы, например, операция умножения на значение, равное 2 в степени n.

[00243] Пример соответствующего процесса декодирования на основе проекта VVC проиллюстрирован ниже, с изменениями, выделенными жирным шрифтом и курсивом, и удаленным содержимым, показанным курсивом. Изменения в проекте VVC показаны в Таблице 22 жирным шрифтом и курсивом. Стоит отметить, что одна и та же логика может быть реализована по-разному на практике. Например, некоторые уравнения или справочную таблицу также можно использовать для вывода тех же параметров Райса из значения BitDepth текущей CU/последовательности.

Таблица 22. Процесс вывода параметра Райса

Входами в этот процесс являются базовый уровень baseLevel, индекс цветового компонента cIdx, положение яркости ( x0, y0 ) специфицирующее верхнюю-левую выборку текущего блока преобразования относительно верхней-левой выборки текущей картинки, текущее положение сканирования ( xC, yC ) коэффициентов, двоичный логарифм ширины блока преобразования log2TbWidth и двоичный логарифм высоты блока преобразования log2TbHeight.
Выходом этого процесса является параметр Райса cRiceParam.
При заданном массиве AbsLevel[ x ][ y ] для блока преобразования с индексом компонента cIdx и верхнем-левом положении яркости ( x0, y0 ), переменная locSumAbs выводится, как специфицировано следующим псевдокодом:
locSumAbs = 0
if( xC < (1 << log2TbWidth) − 1 ) {
locSumAbs += AbsLevel[ xC + 1 ][ yC ]
if( xC < (1 << log2TbWidth) − 2 )
locSumAbs += AbsLevel[ xC + 2 ][ yC ]
if( yC < (1 << log2TbHeight) − 1 )
locSumAbs += AbsLevel[ xC + 1 ][ yC + 1 ] (1494)
}
if( yC < (1 << log2TbHeight) − 1 ) {
locSumAbs += AbsLevel[ xC ][ yC + 1 ]
if( yC < (1 << log2TbHeight) − 2 )
locSumAbs += AbsLevel[ xC ][ yC + 2 ]
}
locSumAbs = Clip3( 0, 31, locSumAbs − baseLevel * 5 )
При заданной переменной locSumAbs, параметр Райса cRiceParam выводится специфицировано в Таблице 4.
Если extended_precision_processing_flag равен 1, параметр Райса cRiceParam специфицируется, как представлено ниже.
if(BitDepth <11)
{
cRiceParam=cRiceParam
}
else if(BitDepth <13)
{
cRiceParam=cRiceParam + (cRiceParam >> 1)
}
else if(BitDepth <15)
{
cRiceParam=cRiceParam << 1
}
else
{
cRiceParam=cRiceParam << 1+ (cRiceParam >> 1)
}
Когда baseLevel равно 0, переменная ZeroPos[ n ] выводится следующим образом:
ZeroPos[ n ]=( QState < 2 ? 1 : 2 ) << cRiceParam

[00244] В другом примере, когда BitDepth больше или равно заранее заданному порогу (например, 10, 11, 12, 13, 14, 15 или 16), параметр Райса cRiceParam выводится следующим образом: cRiceParam=(cRiceParam << a)+ (cRiceParam >> b) + c, где a, b и c - положительное число, например, 1. Соответствующий процесс декодирования на основе проекта VVC проиллюстрирован, как представлено ниже, с изменениями, выделенными жирным шрифтом и курсивом, и удаленным содержимым, показанным курсивом. Изменения в проекте VVC показаны в Таблице 23 жирным шрифтом и курсивом. Стоит отметить, что одна и та же логика может быть реализована по-разному на практике. Например, некоторые уравнения или справочную таблицу также можно использовать для получения тех же параметров Райса из значения BitDepth текущей CU/последовательности.

Таблица 23. Процесс вывода параметра Райса

Входами в этот процесс являются базовый уровень baseLevel, индекс цветового компонента cIdx, положение яркости ( x0, y0 ) специфицирующее верхнюю-левую выборку текущего блока преобразования относительно верхней-левой выборки текущей картинки, текущее положение сканирования ( xC, yC ) коэффициентов, двоичный логарифм ширины блока преобразования log2TbWidth и двоичный логарифм высоты блока преобразования log2TbHeight.
Выходом этого процесса является параметр Райса cRiceParam.
При заданном массиве AbsLevel[ x ][ y ] для блока преобразования с индексом компонента cIdx и верхнем-левом положении яркости ( x0, y0 ), переменная locSumAbs выводится, как специфицировано следующим псевдокодом:
locSumAbs = 0
if( xC < (1 << log2TbWidth) − 1 ) {
locSumAbs += AbsLevel[ xC + 1 ][ yC ]
if( xC < (1 << log2TbWidth) − 2 )
locSumAbs += AbsLevel[ xC + 2 ][ yC ]
if( yC < (1 << log2TbHeight) − 1 )
locSumAbs += AbsLevel[ xC + 1 ][ yC + 1 ] (1494)
}
if( yC < (1 << log2TbHeight) − 1 ) {
locSumAbs += AbsLevel[ xC ][ yC + 1 ]
if( yC < (1 << log2TbHeight) − 2 )
locSumAbs += AbsLevel[ xC ][ yC + 2 ]
}
locSumAbs = Clip3( 0, 31, locSumAbs − baseLevel * 5 )
При заданной переменной locSumAbs, параметр Райса cRiceParam выводится специфицировано в Таблице 4.
Параметр Райса cRiceParam специфицируется, как представлено ниже.
if(BitDepth <11)
{
cRiceParam=cRiceParam
}
else if(BitDepth <13)
{
cRiceParam=cRiceParam + (cRiceParam >> 1)
}
else if(BitDepth <15)
{
cRiceParam=cRiceParam << 1
}
else
{
cRiceParam=cRiceParam << 1+ (cRiceParam >> 1)
}
Когда baseLevel равно 0, переменная ZeroPos[ n ] выводится следующим образом:
ZeroPos[ n ]=( QState < 2 ? 1 : 2 ) << cRiceParam

[00245] Двоичные методы в остаточном кодировании для профилей, превышающих 10 бит

[00246] В соответствии с двадцать пятым аспектом раскрытия, предлагается использовать варьируемые наборы двоичных кодовых слов для кодирования некоторых синтаксических элементов, например, abs_remainder/dec_abs_level, в остаточном кодировании, и выбор определяется в соответствии с некоторой кодированной информацией текущего блока, например параметром квантования или битовой глубиной кодирования, ассоциированной с TB/CB и/или слайсом/профилем, и/или в соответствии с новым флагом, ассоциированным с уровнем TB/CB/слайса/картинки/ последовательности, например extended_precision_processing_flag. Для вывода варьируемых наборов двоичных кодовых слов могут использоваться различные способы, некоторые примерные способы перечислены ниже.

[00247] Во-первых, используется та же процедура для определения кодового слова для abs_remainder, как используется в текущем VVC, но всегда с выбранным фиксированным параметром Райса (например, 2, 3, 4, 5, 6, 7 или 8). Фиксированное значение может отличаться в разных условиях в соответствии с некоторой кодированной информацией текущего блока, например, параметром квантования или битовой глубиной кодирования, ассоциированной с TB/CB и/или слайсом/профилем, и/или в соответствии с синтаксическим элементом, ассоциированным с уровнем TB/CB/слайса/картинки/последовательности, например, rice_parameter_value. Один конкретный пример проиллюстрирован, как показано в таблице 24, где TH1-TH4 являются заранее заданными порогами, удовлетворяющими (TH1<TH2<TH3<TH4), а K0-K4 являются заранее заданными параметрами Райса. Стоит отметить, что одна и та же логика может быть реализована по-разному на практике. Например, некоторые уравнения или справочную таблицу также можно использовать для вывода тех же параметров Райса, как показано в Таблице 24, из значения BitDepth текущей CU/последовательности.

[00248] Во-вторых, бинаризация с фиксированной длиной.

[00249] В-третьих, усеченная бинаризация Райса.

[00250] В-четвертых, процесс усеченной двоичной бинаризации (TB).

[00251] В-пятых, процесс бинаризации Exp-кода Голомба k-го порядка (EGk).

[00252] В-шестых, ограниченная бинаризация Exp-кода Голомба k-го порядка.

Таблица 24. Определение параметра Райса на основе битовой глубины

if(BitDepth <TH1)
{
rice parameter=K0
}
else if(BitDepth <TH2)
{
rice parameter=K1
}
else if(BitDepth <TH3)
{
rice parameter=K2
}
else if(BitDepth <TH4)
{
rice parameter=K3
}
else
{
rice parameter=K4
}

[00253] В одном примере, когда новый флаг, например, extended_precision_processing_flag, равен 1, параметр Райса cRiceParam фиксируется как n, где n - положительное число (например, 2, 3, 4, 5, 6, 7 или 8). Фиксированное значение может отличаться в разных условиях. Пример соответствующего процесса декодирования на основе проекта VVC проиллюстрирован, как представлено ниже, с изменениями, выделенными жирным шрифтом и курсивом, и удаленным содержимым, показанным курсивом. Изменения в проекте VVC показаны в Таблице 25 жирным шрифтом и курсивом.

Таблица 25. Процесс вывода параметра Райса

Параметр Райса cRiceParam выводится следующим образом:
Если transform_skip_flag[ x0 ][ y0 ][ cIdx ] равно 1 и sh_ts_residual_coding_disabled_flag равно 0, параметр Райса cRiceParam устанавливается равным 1.
Если extended_precision_processing_flag равно 1, параметр Райса cRiceParam устанавливается равным 6.
Иначе, параметр Райса cRiceParam выводится путем вызова процесса вывода параметра Райса для abs_remainder[], как специфицировано в Таблице 3 с переменной baseLevel, установленной равной l - 4, индексом цветового компонента cIdx, положением яркости ( x0, y0 ), текущим положением сканирования ( xC, yC ) коэффициентов, двоичным логарифмом ширины блока преобразования log2TbWidth и двоичным логарифмом высоты блока преобразования log2TbHeight в качестве входов.

[00254] В другом примере, предлагается использовать только одно фиксированное значение для параметра Райса при кодировании синтаксического элемента abs_remainder/dec_abs_level, когда новый флаг, например, extended_precision_processing_flag, равен 1. Соответствующий процесс декодирования на основе проекта VVC проиллюстрирован, как представлено ниже, с изменениями, выделенными жирным шрифтом и курсивом, и удаленным содержимым, показанным курсивом. Изменения в черновике VVC показаны в Таблице 26 жирным шрифтом и курсивом.

Таблица 26. Процесс вывода параметра Райса

Параметр Райса cRiceParam выводится следующим образом:
Если extended_precision_processing_flag равно 1, параметр Райса cRiceParam устанавливается равным 7.
Если transform_skip_flag[ x0 ][ y0 ][ cIdx ] равно 1 и sh_ts_residual_coding_disabled_flag равно 0, параметр Райса cRiceParam устанавливается равным 1.
Иначе, параметр Райса cRiceParam выводится путем вызова процесса вывода параметра Райса для abs_remainder[], как специфицировано в Таблице 3 с переменной baseLevel, установленной равной 4, индексом цветового компонента cIdx, положением яркости ( x0, y0 ), текущим положением сканирования ( xC, yC ) коэффициентов, двоичным логарифмом ширины блока преобразования log2TbWidth и двоичным логарифмом высоты блока преобразования log2TbHeight в качестве входов.

[00255] В еще одном примере, когда битовая глубина больше или равна заранее заданному порогу (например, 10, 11, 12, 13, 14, 15 или 16), параметр Райса cRiceParam фиксируется как n, где n - положительное число, например, 4, 5, 6, 7 или 8. Фиксированное значение может отличаться в разных условиях. Пример соответствующего процесса декодирования на основе проекта VVC проиллюстрирован, как представлено ниже, где TH представляет собой заранее заданный порог (например, 10, 11, 12, 13, 14, 15 или 16). Изменения в проекте VVC показаны в Таблице 27 жирным шрифтом и курсивом, а удаленное содержимое показаны курсивом.

Таблица 27. Процесс вывода параметра Райса

Параметр Райса cRiceParam выводится следующим образом:
Если transform_skip_flag[ x0 ][ y0 ][ cIdx ] равно 1 и sh_ts_residual_coding_disabled_flag равно 0, параметр Райса cRiceParam устанавливается равным 1.
Если BitDepth больше, чем TH, параметр Райса cRiceParam устанавливается равным 6.
Иначе, параметр Райса cRiceParam выводится путем вызова процесса вывода параметра Райса для abs_remainder[], как специфицировано в Таблице 3 с переменной baseLevel, установленной равной 4, индексом цветового компонента cIdx, положением яркости ( x0, y0 ), текущим положением сканирования коэффициентов ( xC, yC ), двоичным логарифмом ширины блока преобразования log2TbWidth и двоичным логарифмом высоты блока преобразования log2TbHeight в качестве входов.

[00256] В еще одном примере, предлагается использовать только одно фиксированное значение для параметра Райса при кодировании синтаксического элемента abs_remainder/ dec_abs_level, когда BitDepth больше заранее заданного порога (например, 10, 11, 12, 13, 14, 15 или 16). Соответствующий процесс декодирования, основанный на проекте VVC, проиллюстрирован, как представлено ниже, где TH заранее заданный порог (например, 10, 11, 12, 13, 14, 15 или 16), и с изменениями, выделенными жирным шрифтом и курсивом, и удаленным содержимым, показанным курсивом. Изменения в проекте VVC показаны в Таблице 28 жирным шрифтом и курсивом.

Таблица 28. Процесс вывода параметра Райса

Параметр Райса cRiceParam выводится следующим образом:
Если BitDepth больше, чем TH, параметр Райса cRiceParam устанавливается равным 7.
если transform_skip_flag[ x0 ][ y0 ][ cIdx ] равно 1 и sh_ts_residual_coding_disabled_flag равно 0, параметр Райса cRiceParam устанавливается равным 1.
Иначе, параметр Райса cRiceParam выводится путем вызова процесса вывода параметра Райса для abs_remainder[], как специфицировано в Таблице 3 с переменной baseLevel, установленной равной 4, индексом цветового компонента cIdx, положением яркости ( x0, y0 ), текущим положением сканирования ( xC, yC ) коэффициентов, двоичным логарифмом ширины блока преобразования log2TbWidth и двоичным логарифмом высоты блока преобразования log2TbHeight в качестве входов.

[00257] Вывод параметров Райса в остаточном кодировании

[00258] В соответствии с двадцать шестым аспектом раскрытия, предлагается использовать переменные способы вывода параметров Райса для кодирования некоторых синтаксических элементов, например, abs_remainder/dec_abs_level, в остаточном кодировании, и выбор определяется в соответствии с некоторой кодированной информацией текущего блока, например параметром квантования или битовой глубиной кодирования, ассоциированной с TB/CB и/или слайсом/профилем, и/или в соответствии с новым флагом, ассоциированным с уровнем TB/CB/слайса/картинки/ последовательности, например extended_precision_processing_flag. Для вывода параметра Райса могут использоваться различные способы, некоторые примерные способы перечислены ниже.

[00259] Сначала предлагается использовать счетчики для вывода параметра Райса. Счетчики определяются в соответствии со значением кодированного коэффициента и некоторой кодированной информацией текущего блока, например, идентификатором компонента. Один конкретный пример, riceParameter=counter/a, где a - положительное число, например, 4, и он поддерживает 2 счетчика (разделенных на яркость/цветность). Эти счетчики сбрасываются на 0 в начале каждого слайса. После кодирования, счетчик обновляется, если это первый коэффициент, закодированный в под-TU следующим образом:

if (coeffValue >= (3 << rice)) counter++

if (((coeffValue << 1) < (1 << riceParameter)) && (counter > 0)) counter--;

[00260] Во-вторых, предлагается добавить операцию сдвига при выводе параметра Райса в VVC. Сдвиг определяется в соответствии со значением кодированного коэффициента. Пример соответствующего процесса декодирования на основе проекта VVC проиллюстрирован, как представлено ниже, сдвиг определяется в соответствии со счетчиками способа 1 и с изменениями, выделенными жирным шрифтом и курсивом, и удаленным содержимым, выделенным курсивом. Изменения в проекте VVC показаны в Таблице 29 жирным шрифтом и курсивом.

Таблица 29. Процесс вывода параметра Райса

Входами в этот процесс являются базовый уровень baseLevel, индекс цветового компонента cIdx, положение яркости ( x0, y0 ) специфицирующее верхнюю-левую выборку текущего блока преобразования относительно верхней-левой выборки текущей картинки, текущее положение сканирования ( xC, yC ) коэффициентов, двоичный логарифм ширины блока преобразования log2TbWidth и двоичный логарифм высоты блока преобразования log2TbHeight.
Выходом этого процесса является параметр Райса cRiceParam.
При заданном массиве AbsLevel[ x ][ y ] для блока преобразования с индексом компонента cIdx и верхнем-левом положении яркости ( x0, y0 ), переменная locSumAbs выводится, как специфицировано следующим псевдокодом:
Shift= max(0, counter/4-2)
locSumAbs = 0
if( xC < (1 << log2TbWidth) − 1 ) {
locSumAbs += AbsLevel[ xC + 1 ][ yC ]
if( xC < (1 << log2TbWidth) − 2 )
locSumAbs += AbsLevel[ xC + 2 ][ yC ]
if( yC < (1 << log2TbHeight) − 1 )
locSumAbs += AbsLevel[ xC + 1 ][ yC + 1 ] (1494)
}
if( yC < (1 << log2TbHeight) − 1 ) {
locSumAbs += AbsLevel[ xC ][ yC + 1 ]
if( yC < (1 << log2TbHeight) − 2 )
locSumAbs += AbsLevel[ xC ][ yC + 2 ]
}
locSumAbs = Clip3( 0, 31, (locSumAbs − baseLevel * 5)>>Shift )
При заданной переменной locSumAbs, параметр Райса cRiceParam выводится , как специфицировано в Таблице 4.
cRiceParam=cRiceParam+Shift
Когда baseLevel равно 0, переменная ZeroPos[ n ] выводится следующим образом:
ZeroPos[ n ]=( QState < 2 ? 1 : 2 ) << cRiceParam

[00261] Во-первых, предлагается добавить операцию сдвига при выводе параметра Райса в VVC. Сдвиг определяется в соответствии с некоторой кодированной информацией текущего блока, например, битовой глубиной кодирования, связанной с TB/CB и/или профилем слайса (например, 14-битовым профилем или 16-битовым профилем). Пример соответствующего процесса декодирования на основе проекта VVC проиллюстрирован, как представлено ниже, сдвиг определяется в соответствии со счетчиками способа 1, и с изменениями, выделенными жирным шрифтом и курсивом, и удаленным содержимым, показанным курсивом. Изменения в проекте VVC показаны в Таблице 30 жирным шрифтом и курсивом.

Таблица 30. Процесс вывода параметра Райса

Входами в этот процесс являются базовый уровень baseLevel, индекс цветового компонента cIdx, положение яркости ( x0, y0 ), специфицирующее верхнюю-левую выборку текущего блока преобразования относительно верхней-левой выборки текущей картинки, текущее положение сканирования ( xC, yC ) коэффициентов, двоичный логарифм ширины блока преобразования log2TbWidth и двоичный логарифм высоты блока преобразования log2TbHeight.
Выходом этого процесса является параметр Райса cRiceParam.
При заданном массиве AbsLevel[ x ][ y ] для блока преобразования с индексом компонента cIdx и верхнем-левом положении яркости ( x0, y0 ), переменная locSumAbs выводится, как специфицировано следующим псевдокодом:
Shift= max(0, (BitDepth - 8)/2)
locSumAbs = 0
if( xC < (1 << log2TbWidth) − 1 ) {
locSumAbs += AbsLevel[ xC + 1 ][ yC ]
if( xC < (1 << log2TbWidth) − 2 )
locSumAbs += AbsLevel[ xC + 2 ][ yC ]
if( yC < (1 << log2TbHeight) − 1 )
locSumAbs += AbsLevel[ xC + 1 ][ yC + 1 ] (1494)
}
if( yC < (1 << log2TbHeight) − 1 ) {
locSumAbs += AbsLevel[ xC ][ yC + 1 ]
if( yC < (1 << log2TbHeight) − 2 )
locSumAbs += AbsLevel[ xC ][ yC + 2 ]
}
locSumAbs = Clip3( 0, 31, (locSumAbs − baseLevel * 5)>>Shift )
При заданной переменной locSumAbs, параметр Райса cRiceParam выводится, как специфицировано в Таблице 4.
cRiceParam=cRiceParam+Shift
Когда baseLevel равно 0, переменная ZeroPos[ n ] выводится следующим образом:
ZeroPos[ n ]=( QState < 2 ? 1 : 2 ) << cRiceParam

[00262] Остаточное кодирование для пропуска преобразования

[00263] В соответствии с двадцать седьмым аспектом раскрытия, предлагается использовать варьируемые наборы двоичных кодовых слов для кодирования некоторых синтаксических элементов, например abs_remainder, при кодировании остатка с пропуском преобразования, и выбор определяется в соответствии с некоторой кодированной информацией текущего блока, например параметром квантования или битовой глубиной кодирования, ассоциированной с TB/CB и/или слайсом/профилем, и/или в соответствии с новым флагом, ассоциированным с уровнем TB/CB/слайса/картинки/ последовательности, например extended_precision_processing_flag. Для вывода варьируемых наборов двоичных кодовых слов могут использоваться различные способы, некоторые примерные способы перечислены ниже.

[00264] Во-первых, используется та же процедура определения кодового слова для abs_remainder, как используется в текущем VVC, но всегда с выбранным фиксированным параметром Райса (например, 2, 3, 4, 5, 6, 7 или 8). Фиксированное значение может отличаться в разных условиях в соответствии с некоторой кодированной информацией текущего блока, например, параметром квантования, типом кадра (например, I, P или B), ID компонента (например, яркостью или цветностью), цветовым форматом (например, 420, 422 или 444) или битовой глубиной кодирования, ассоциированной с TB/CB и/или слайсом/профилем, и/или в соответствии с синтаксическим элементом, ассоциированным с уровнем TB/CB/слайса/картинки/последовательности, например, rice_parameter_value. Один конкретный пример проиллюстрирован, как показано в таблице 7, где TH1-TH4 являются заранее заданными порогами, удовлетворяющими (TH1<TH2<TH3<TH4), а K0-K4 являются заранее заданными параметрами Райса. Стоит отметить, что одна и та же логика может быть реализована по-разному на практике. Например, некоторые уравнения или справочную таблицу также можно использовать для получения тех же параметров Райса, как показано в Таблице 7, из значения битовой глубины текущей CU/последовательности.

[00265] Во-вторых, бинаризация с фиксированной длиной.

[00266] В-третьих, усеченная бинаризация Райса.

[00267] В-четвертых, процесс усеченной двоичной (ТВ) бинаризации.

[00268] В-пятых, процесс бинаризации Exp-кода Голомба k-го порядка (EGk).

[00269] В-шестых, ограниченная бинаризация Exp-кода Голомба k-го порядка.

[00270] Пример соответствующего процесса декодирования на основе проекта VVC проиллюстрирован, как представлено ниже, изменения в проекте VVC показаны в Таблице 31 жирным шрифтом и курсивом, а удаленное содержимое показано курсивом. Стоит отметить, что одна и та же логика может быть реализована на практике по-разному. Например, некоторые уравнения или справочная таблица также могут быть использованы для вывода одних и тех же параметров Райса.

Таблица 31. Процесс вывода параметра Райса

Параметр Райса cRiceParam выводится следующим образом:
Если transform_skip_flag[ x0 ][ y0 ][ cIdx ] равно 1 и sh_ts_residual_coding_disabled_flag равно 0, процесс вывода для параметра Райса cRiceParam специфицируется, как показано ниже.
if(BitDepth <11)
{
rice parameter=1
}
else if(BitDepth <13)
{
rice parameter=4
}
else if(BitDepth <15)
{
rice parameter=6
}
else
{
rice parameter=8
}
Если transform_skip_flag[x0][y0][cIdx] равно 1, а sh_ts_residual_coding_disabled_flag равно 0, параметр Rice cRiceParam устанавливается равным 1.
Иначе, параметр Райса cRiceParam выводится путем вызова процесса вывода параметра Райса для abs_remainder[], как специфицировано в Таблице 3 с переменной baseLevel, установленной равной 4, индексом цветового компонента cIdx, положением яркости ( x0, y0 ), текущим положением сканирования ( xC, yC ) коэффициентов, двоичным логарифмом ширины блока преобразования log2TbWidth и двоичным логарифмом высоты блока преобразования log2TbHeight в качестве входов.

[00271] В другом примере, предлагается использовать только одно фиксированное значение для параметра Райса при кодировании синтаксического элемента abs_remainder, когда новый флаг, например, extended_precision_processing_flag, равен 1. Соответствующий процесс декодирования на основе проекта VVC проиллюстрирован, как представлено ниже, с изменениями, выделенными жирным шрифтом и курсивом, и удаленным содержимым, показанным курсивом. Изменения в проекте VVC показаны в Таблице 32 жирным шрифтом и курсивом.

Таблица 32. Процесс вывода параметра Райса

Параметр Райса cRiceParam выводится следующим образом:
Если extended_precision_processing_flag равно 1, transform_skip_flag[ x0 ][ y0 ][ cIdx ] равно 1 и sh_ts_residual_coding_disabled_flag равно 0, процесс вывода для параметра Райса cRiceParam специфицируется следующим образом.
if(BitDepth <11)
{
rice parameter=1
}
else if(BitDepth <13)
{
rice parameter=4
}
else if(BitDepth <15)
{
rice parameter=6
}
else
{
rice parameter=8
}
Если transform_skip_flag[ x0 ][ y0 ][ cIdx ] равно 1 и sh_ts_residual_coding_disabled_flag равно 0, параметр Райса cRiceParam устанавливается равным 1.
Иначе, параметр Райса cRiceParam выводится путем вызова процесса вывода параметра Райса для abs_remainder[], как специфицировано в Таблице 3 с переменной baseLevel, установленной равной 4, индексом цветового компонента cIdx, положением яркости ( x0, y0 ), текущим положением сканирования ( xC, yC ) коэффициентов, двоичным логарифмом ширины блока преобразования log2TbWidth и двоичным логарифмом высоты блока преобразования log2TbHeight в качестве входов.

[00272] В еще одном примере, когда новый флаг, например, extended_precision_processing_flag, равен 1, параметр Райса cRiceParam фиксируется как n, где n - положительное число (например, 2, 3, 4, 5, 6, 7 или 8). Фиксированное значение может отличаться в разных условиях. Пример соответствующего процесса декодирования на основе проекта VVC проиллюстрирован, как представлено ниже, с изменениями, выделенными жирным шрифтом и курсивом, и удаленным содержимым, показанным курсивом. Изменения в проекте VVC показаны в Таблице 33 жирным шрифтом и курсивом.

Таблица 33. Процесс вывода параметра Райса

Параметр Райса cRiceParam выводится следующим образом:
Если extended_precision_processing_flag равно 1, transform_skip_flag[ x0 ][ y0 ][ cIdx ] равно 1 и sh_ts_residual_coding_disabled_flag равно 0, параметр Райса cRiceParam устанавливается равным 7.
Если transform_skip_flag[ x0 ][ y0 ][ cIdx ] равно 1 и sh_ts_residual_coding_disabled_flag равно 0, параметр Райса cRiceParam устанавливается равным 1.
Иначе, параметр Райса cRiceParam выводится путем вызова процесса вывода параметра Райса для abs_remainder[], как специфицировано в Таблице 3 с переменной baseLevel, установленной равной 4, индексом цветового компонента cIdx, положением яркости ( x0, y0 ), текущим положением сканирования ( xC, yC ) коэффициентов, двоичным логарифмом ширины блока преобразования log2TbWidth и двоичным логарифмом высоты блока преобразования log2TbHeight в качестве входов.

[00273] В еще одном примере, когда битовая глубина больше или равна заранее заданному пороговому значению (например, 10, 11, 12, 13, 14, 15 или 16), параметр Райса cRiceParam фиксируется как n, где n - положительное число, например, 4, 5, 6, 7 или 8. Фиксированное значение может отличаться в разных условиях. Пример соответствующего процесса декодирования на основе проекта VVC проиллюстрирован, как представлено ниже, где TH представляет собой заранее заданный порог (например, 10, 11, 12, 13, 14, 15 или 16), и с изменениями, выделенными жирным шрифтом и курсивом, и удаленным содержимым, показанным курсивом. Изменения в проекте VVC показаны в Таблице 34 жирным шрифтом и курсивом.

Таблица 34. Процесс вывода параметра Райса

Параметр Райса cRiceParam выводится следующим образом:
Если BitDepth больше, чем TH, transform_skip_flag[ x0 ][ y0 ][ cIdx ] равно 1 и sh_ts_residual_coding_disabled_flag равно 0, параметр Райса cRiceParam устанавливается равным 7.
Если transform_skip_flag[ x0 ][ y0 ][ cIdx ] равно 1 и sh_ts_residual_coding_disabled_flag равно 0, параметр Райса cRiceParam устанавливается равным 1.
Иначе, параметр Райса cRiceParam выводится путем вызова процесса вывода параметра Райса для abs_remainder[], как специфицировано в Таблице 3 с переменной baseLevel, установленной равной 4, индексом цветового компонента cIdx, положением яркости ( x0, y0 ), текущим положением сканирования ( xC, yC ) коэффициентов, двоичным логарифмом ширины блока преобразования log2TbWidth и двоичным логарифмом высоты блока преобразования log2TbHeight в качестве входов.

[00274] В еще одном примере, в заголовке слайса сигнализируется один флаг управления, чтобы указать, включена или отключена сигнализация параметра Райса для блоков пропуска преобразования. Когда флаг управления сигнализируется как включенный, дополнительно сигнализируется один синтаксический элемент для каждого слайса пропуска преобразования, чтобы указать параметр Райса этого слайса. Когда флаг управления сигнализируется как отключенный (например, устанавливается равным “0”), никакой другой синтаксический элемент не сигнализируется на более низком уровне для указания параметра Райса для слайса пропуска преобразования, и параметр Райса по умолчанию (например, 1) используется для всего слайса пропуска преобразования. Пример соответствующего процесса декодирования на основе проекта VVC проиллюстрирован, как представлено ниже, где TH - заранее заданное значение (например, 0, 1, 2), и с изменениями, выделенными жирным шрифтом и курсивом, и удаленным содержимым, показанным курсивом. Изменения в проекте VVC показаны в Таблице 35 жирным шрифтом и курсивом. Стоит отметить, что sh_ts_residual_coding_rice_index может кодироваться различными способами и/или может иметь максимальное значение. Например, u(n), целое число без знака, использующее n битов, или f(n), битовая строка с фиксированным шаблоном, использующая n битов, записанных (слева направо) с первым левым битом, также может использоваться для кодирования/декодирования того же синтаксического элемента.

[00275] Синтаксис заголовка слайса

Таблица 35. Синтаксис остаточного кодирования

slice_header( ) { Descriptor if( sps_transform_skip_enabled_flag && !sh_dep_quant_used_flag &&
!sh_sign_data_hiding_used_flag )
sh_ts_residual_coding_disabled_flag u(1) if(!sh_ts_residual_coding_disabled_flag ) { sh_ts_residual_coding_rice_flag u(1) if(sh_ts_residual_coding_rice_flag ) sh_ts_residual_coding_rice_index ue(v) }

[00276] sh_ts_residual_coding_rice_flag, равный 1, специфицирует, что sh_ts_residual_coding_rice_index может присутствовать в текущем слайсе. sh_ts_residual_coding_rice_flag, равный 0, специфицирует, что sh_ts_residual_coding_rice_index отсутствует в текущем слайсе. Когда sh_ts_residual_coding_rice_flag отсутствует, значение sh_ts_residual_coding_rice_flag принимается равным 0.

sh_ts_residual_coding_rice_ index специфицирует параметр Райса, используемый для синтаксической структуры residual_ts_coding().

Таблица 36. Процесс вывода параметра Райса

Параметр Райса cRiceParam выводится следующим образом:
Если sh_ts_residual_coding_rice_flag равно 1, transform_skip_flag[ x0 ][ y0 ][ cIdx ] равно 1 и sh_ts_residual_coding_disabled_flag равно 0, параметр Райса cRiceParam устанавливается равным (sh_ts_residual_coding_rice_ index+TH).
Если transform_skip_flag[ x0 ][ y0 ][ cIdx ] равно 1 и sh_ts_residual_coding_disabled_flag равно 0, параметр Райса cRiceParam устанавливается равным 1.
Иначе, параметр Райса cRiceParam выводится путем вызова процесса вывода параметра Райса для abs_remainder[], как специфицировано в Таблице 3 с переменной baseLevel, установленной равной 4, индексом цветового компонента cIdx, положением яркости ( x0, y0 ), текущим положением сканирования ( xC, yC ) коэффициентов, двоичным логарифмом ширины блока преобразования log2TbWidth и двоичным логарифмом высоты блока преобразования log2TbHeight в качестве входов.

[00277] В еще одном примере, один флаг управления сигнализируется в наборе параметров последовательности (или в синтаксисе расширений диапазона набора параметров последовательности), чтобы указать, включена или отключена сигнализация параметра Райса для блоков пропуска преобразования. Когда флаг управления сигнализируется как включенный, дополнительно сигнализируется один синтаксический элемент для каждого слайса пропуска преобразования, чтобы указать параметр Райса этого слайса. Когда флаг управления сигнализируется как отключенный (например, устанавливается равным “0”), никакой другой синтаксический элемент не сигнализируется на более низком уровне для указания параметра Райса для слайса пропуска преобразования, и параметр Райса по умолчанию (например, 1) используется для всего слайса пропуска преобразования. Пример соответствующего процесса декодирования на основе проекта VVC проиллюстрирован, как представлено ниже, где TH представляет собой заранее заданное значение (например, 0, 1, 2). Изменения в проекте VVC показаны в Таблице 37 жирным шрифтом и курсивом, а удаленное содержимое показано курсивом. Стоит отметить, что sh_ts_residual_coding_rice_idx может кодироваться различными способами и/или может иметь максимальное значение. Например, u(n), целое число без знака, использующее n битов, или f(n), битовая строка с фиксированным шаблоном, использующая n битов, записанных (слева направо) с первым левым битом, также может использоваться для кодирования/декодирования того же синтаксического элемента.

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

Таблица 37. Синтаксис остаточного кодирования

seq_parameter_set_rbsp( ) { Descriptor sps_sign_data_hiding_enabled_flag u(1) sps_ts_residual_coding_rice_present_in_sh_flag u(1) sps_virtual_boundaries_enabled_flag u(1) }

[00279] sps_ts_residual_coding_rice_present_in_sh_flag, равный 1, специфицирует, что sh_ts_residual_coding_rice_idx может присутствовать в синтаксических структурах SH, ссылающихся на SPS. sps_ts_residual_coding_rice_present_in_sh_flag, равный 0, специфицирует, что sh_ts_residual_coding_rice_idx отсутствует в синтаксических структурах SH, ссылающихся на SPS. Когда sps_ts_residual_coding_rice_present_in_sh_flag отсутствует, значение sps_ts_residual_coding_rice_present_in_sh_flag принимается равным 0.

[00280] Синтаксис заголовка слайса

Таблица 38. Синтаксис остаточного кодирования

slice_header( ) { Descriptor if( sps_transform_skip_enabled_flag && !sh_dep_quant_used_flag &&
!sh_sign_data_hiding_used_flag )
sh_ts_residual_coding_disabled_flag u(1) if((!sh_ts_residual_coding_disabled_flag) && sps_ts_residual_coding_rice_enabled _flag ) sh_ts_residual_coding_rice_idx ue(v) }

[00281] sh_ts_residual_coding_rice_idx специфицирует параметр Райса, используемый для синтаксической структуры residual_ts_coding().

Таблица 39. Процесс вывода параметра Райса

Параметр Райса cRiceParam выводится следующим образом:
Если sps_ts_residual_coding_rice_flag равно 1, transform_skip_flag[ x0 ][ y0 ][ cIdx ] равно 1 и sh_ts_residual_coding_disabled_flag равно 0, параметр Райса cRiceParam устанавливается равным (sh_ts_residual_coding_rice_ idx+TH).
Если transform_skip_flag[ x0 ][ y0 ][ cIdx ] равно 1 и sh_ts_residual_coding_disabled_flag равно 0, параметр Райса cRiceParam устанавливается равным 1.
Иначе, параметр Райса cRiceParam выводится путем вызова процесса вывода параметра Райса для abs_remainder[], как специфицировано в Таблице 3 с переменной baseLevel, установленной равной 4, индексом цветового компонента cIdx, положением яркости ( x0, y0 ), текущим положением сканирования ( xC, yC ) коэффициентов, двоичным логарифмом ширины блока преобразования log2TbWidth и двоичным логарифмом высоты блока преобразования log2TbHeight в качестве входов.

[00282] В еще одном примере, для каждого слайса пропуска преобразования сигнализируется один синтаксический элемент, чтобы указать параметр Райса этого слайса. Пример соответствующего процесса декодирования на основе проекта VVC иллюстрируется, как представлено ниже. Изменения в проекте VVC показаны в Таблице 40 жирным шрифтом и курсивом. Стоит отметить, что остаточное кодирование sh_ts_residual_coding_rice_idx может кодироваться различными способами и/или может иметь максимальное значение. Например, u(n), целое число без знака, использующее n битов, или f(n), битовая строка с фиксированным шаблоном, использующая n битов, записанных (слева направо) с первым левым битом, также может использоваться для кодирования/ декодирования того же самого синтаксического элемента.

[00283] Синтаксис заголовка слайса

Таблица 40. Синтаксис остаточного кодирования

slice_header( ) { Descriptor if( sps_transform_skip_enabled_flag && !sh_dep_quant_used_flag &&
!sh_sign_data_hiding_used_flag )
sh_ts_residual_coding_disabled_flag u(1) if(!sh_ts_residual_coding_disabled_flag) sh_ts_residual_coding_rice_idx ue(v) }

[00284] sh_ts_residual_coding_rice_idx специфицирует параметр Райса, используемый для синтаксической структуры residual_ts_coding(). Когда sh_ts_residual_coding_rice_idx отсутствует, значение sh_ts_residual_coding_rice_idx принимается равным 0.

Таблица 41. Процесс вывода параметра Райса

Параметр Райса cRiceParam выводится следующим образом:
Если transform_skip_flag[ x0 ][ y0 ][ cIdx ] равно 1 и sh_ts_residual_coding_disabled_flag равно 0, параметр Райса cRiceParam устанавливается равным sh_ts_residual_coding_rice_idx+1.
Иначе, параметр Райса cRiceParam выводится путем вызова процесса вывода параметра Райса для abs_remainder[], как специфицировано в Таблице 3 с переменной baseLevel, установленной равной 4, индексом цветового компонента cIdx, положением яркости ( x0, y0 ), текущим положением сканирования ( xC, yC ) коэффициентов, двоичным логарифмом ширины блока преобразования log2TbWidth и двоичным логарифмом высоты блока преобразования log2TbHeight в качестве входов .

[00285] В еще одном примере, один флаг управления сигнализируется в синтаксисе расширений диапазона набора параметров картинки, чтобы указать, включена или отключена сигнализация параметра Райса для блоков пропуска преобразования. Когда флаг управления сигнализируется как включенный, дополнительно сигнализируется один синтаксический элемент для указания параметра Райса этой картинки. Когда флаг управления сигнализируется как отключенный (например, устанавливается равным “0”), никакой другой синтаксический элемент не сигнализируется на более низком уровне для указания параметра Райса для слайса пропуска преобразования, и параметр Райса по умолчанию (например, 1) используется для всего слайса пропуска преобразования. Пример соответствующего процесса декодирования на основе проекта VVC иллюстрируется, как представлено ниже, где TH представляет собой заранее заданное значение (например, 0, 1, 2). Изменения в проекте VVC показаны в Таблице 42 жирным шрифтом и курсивом. Стоит отметить, что pps_ts_residual_coding_rice_idx может кодироваться различными способами и/или может иметь максимальное значение. Например, u(n), целое число без знака, использующее n битов, или f(n), битовая строка с фиксированным шаблоном, использующая n битов, записанных (слева направо) с первым левым битом, также может использоваться для кодирования/ декодирования того же самого синтаксического элемента.

[00286] Синтаксис расширений диапазона набора параметров картинки

Таблица 42. Синтаксис остаточного кодирования

pps_range_extensions( ) { Descriptor pps_ts_residual_coding_rice_flag u(1) if(pps_ts_residual_coding_rice_flag ) pps_ts_residual_coding_rice_idx ue(v) }

[00287] pps_ts_residual_coding_rice_flag, равный 1, специфицирует, что pps_ts_residual_coding_rice_index может присутствовать в текущей картинке. pps_ts_residual_coding_rice_flag, равный 0, специфицирует, что pps_ts_residual_coding_rice_idx отсутствует в текущей картинке. Когда pps_ts_residual_coding_rice_flag отсутствует, значение pps_ts_residual_coding_rice_flag принимается равным 0.

[00288] pps_ts_residual_coding_rice_idx специфицирует параметр Райса, используемый для синтаксической структуры residual_ts_coding().

Таблица 43. Процесс вывода параметра Райса

Параметр Райса cRiceParam выводится следующим образом:
Если pps_ts_residual_coding_rice_flag равно 1, transform_skip_flag[ x0 ][ y0 ][ cIdx ] равно 1 и sh_ts_residual_coding_disabled_flag равено 0, параметр Райса cRiceParam устанавливается равным (pps_ts_residual_coding_rice_ idx+TH).
Если transform_skip_flag[ x0 ][ y0 ][ cIdx ] равно 1 и sh_ts_residual_coding_disabled_flag равно 0, параметр Райса cRiceParam устанавливается равным 1.
Иначе, параметр Райса cRiceParam выводится путем вызова процесса вывода параметра Райса для abs_remainder[], как специфицировано в Таблице 3 с переменной baseLevel, установленной равной 4, индексом цветового компонента cIdx, положением яркости ( x0, y0 ), текущим положением сканирования ( xC, yC ) коэффициентов, двоичным логарифмом ширины блока преобразования log2TbWidth и двоичным логарифмом высоты блока преобразования log2TbHeight в качестве входов.

[00289] В еще одном примере, предлагается использовать только изменяющийся параметр Райса для кодирования остатка синтаксического элемента abs_remainder. Значение применяемого параметра Райса может быть определено в соответствии с некоторой кодированной информацией текущего блока, например, размером блока, параметром квантования, битовой глубиной, типами преобразования и так далее. В одном конкретном варианте осуществления, предлагается регулировать параметр Райса на основе битовой глубины кодирования и параметра квантования, который применяется к одной CU. Соответствующий процесс декодирования на основе проекта VVC проиллюстрирован, как представлено ниже, изменения в проекте VVC показаны в Таблице 44 жирным шрифтом и курсивом, а удаленное содержимое показано курсивом. Стоит отметить, что одна и та же логика может быть реализована на практике по-разному. Например, некоторые уравнения или справочная таблица также могут быть использованы для вывода тех же самых параметров Райса.

Таблица 44. Процесс вывода параметра Райса

Параметр Райса cRiceParam выводится следующим образом:
Если transform_skip_flag[ x0 ][ y0 ][ cIdx ] равно 1 и sh_ts_residual_coding_disabled_flag равно 0, процесс вывода для параметра Райса cRiceParam специфицируется следующим образом.
if(BitDepth <11)
{
rice parameter=1
}
else if(BitDepth <13)
{
if(QPCU <-15)
{
rice parameter=6
}
else if(QPCU <-10)
{
rice parameter=5
}
else if(QPCU <0)
{
rice parameter=4
}
else if(QPCU <10)
{
rice parameter=3
}
else
{
rice parameter=2
}
}
else if(BitDepth <15)
{
if(QPCU <-25)
{
rice parameter=7
}
else if(QPCU <-15)
{
rice parameter=6
}
else if(QPCU <-10)
{
rice parameter=5
}
else
{
rice parameter=4
}
}
else
{
if(QPCU <-30)
{
rice parameter=8
}
else if(QPCU <-25)
{
rice parameter=7
}
else if(QPCU <-15)
{
rice parameter=6
}
else if(QPCU <-10)
{
rice parameter=5
}
else
{
rice parameter=4
}
}
Если transform_skip_flag[ x0 ][ y0 ][ cIdx ] равно 1, а sh_ts_residual_coding_disabled_flag равно 0, параметр Rice cRiceParam устанавливается равным 1.
Иначе, параметр Райса cRiceParam выводится путем вызова процесса вывода параметра Райса для abs_remainder[], как специфицировано в Таблице 3 с переменной baseLevel, установленной равной 4, индексом цветового компонента cIdx, положением яркости ( x0, y0 ), текущим положением сканирования ( xC, yC ) коэффициентов, двоичным логарифм ширины блока преобразования log2TbWidth и двоичным логарифмом высоты блока преобразования log2TbHeight в качестве входов .

[00290] В еще одном примере, соответствующий процесс декодирования на основе проекта VVC проиллюстрирован, как представлено ниже, где TH представляет собой заранее заданный порог (например, 33 или 34). Изменения в проекте VVC показаны в Таблице 45 жирным шрифтом и курсивом, а удаленное содержимое показано курсивом. Стоит отметить, что одна и та же логика может быть реализована по-разному на практике. Например, некоторые уравнения или справочная таблица также могут быть использованы для вывода тех же самых параметров Райса.

Таблица 45. Процесс вывода параметров Риса

Параметр Райса cRiceParam выводится следующим образом:
Если transform_skip_flag[ x0 ][ y0 ][ cIdx ] равно 1 и sh_ts_residual_coding_disabled_flag равно 0, процесс вывода для параметра Райса cRiceParam специфицируется следующим образом.
rice parameter=Clip3( 1, 8, Floor( (TH - BitDepth -QPCU)/6 ) )
Если transform_skip_flag[ x0 ][ y0 ][ cIdx ] равно 1, а sh_ts_residual_coding_disabled_flag равно 0, параметр Rice cRiceParam устанавливается равным 1.
Иначе, параметр Райса cRiceParam выводится путем вызова процесса вывода параметра Райса для abs_remainder[], как специфицировано в Таблице 3 с переменной baseLevel, установленной равной 4, индексом цветового компонента cIdx, положением яркости ( x0, y0 ), текущим положением сканирования ( xC, yC ) коэффициентов, двоичным логарифмом ширины блока преобразования log2TbWidth и двоичным логарифмом высоты блока преобразования log2TbHeight в качестве входов .

[00291] В еще одном примере, соответствующий процесс декодирования на основе проекта VVC проиллюстрирован, как представлено ниже, где THA и THB являются заранее заданными порогами (например, THA=8, THB=33 или 34). Изменения в проекте VVC показаны в Таблице 46 жирным шрифтом и курсивом, а удаленное содержимое показано курсивом. Стоит отметить, что одна и та же логика может быть реализована по-разному на практике. Например, некоторые уравнения или справочная таблица также могут быть использованы для вывода тех же самых параметров Райса.

Таблица 46. Процесс вывода параметра Райса

Параметр Райса cRiceParam выводится следующим образом:
Если transform_skip_flag[ x0 ][ y0 ][ cIdx ] равно 1 и sh_ts_residual_coding_disabled_flag равно 0, процесс вывода для параметра Райса cRiceParam специфицируется следующим образом.
rice parameter=Clip3( 1, BitDepth - THA, Floor( (THB - BitDepth -QPCU)/6 ) )
Если transform_skip_flag[ x0 ][ y0 ][ cIdx ] равно 1, а sh_ts_residual_coding_disabled_flag равно 0, параметр Rice cRiceParam устанавливается равным 1.
Иначе, параметр Райса cRiceParam выводится путем вызова процесса вывода параметра Райса для abs_remainder[], как специфицировано в Таблице 3 с переменной baseLevel, установленной равной 4, индексом цветового компонента cIdx, положением яркости ( x0, y0 ), текущим положением сканирования ( xC, yC ) коэффициентов, двоичным логарифмом ширины блока преобразования log2TbWidth и двоичным логарифмом высоты блока преобразования log2TbHeight в качестве входов.

[00292] В еще одном примере, предлагается использовать изменяющийся параметр Райса только для кодирования синтаксического элемента abs_remainder, когда новый флаг, например, extended_precision_processing_flag, равен 1. Изменяющееся значение может быть определено в соответствии с некоторой кодированной информацией текущего блока, например размером блока, параметром квантования, битовой глубиной, типами преобразования и так далее. В одном конкретном варианте осуществления, предлагается регулировать параметр Райса на основе битовой глубины кодирования и параметра квантования, который применяется к одной CU. Соответствующий процесс декодирования на основе проекта VVC иллюстрируется, как представлено ниже. Изменения в проекте VVC показаны в Таблице 47 жирным шрифтом и курсивом. Стоит отметить, что одна и та же логика может быть реализована по-разному на практике. Например, некоторые уравнения или справочная таблица также могут быть использованы для вывода тех же самых параметров Райса.

Таблица 47. Процесс вывода параметра Райса

Параметр Райса cRiceParam выводится следующим образом:
Если extended_precision_processing_flag равно 1, transform_skip_flag[ x0 ][ y0 ][ cIdx ] равно 1 и sh_ts_residual_coding_disabled_flag равно 0, процесс вывода для параметра Райса cRiceParam специфицируется следующим образом.
if(QPCU <-30)
{
rice parameter=8
}
else if(QPCU <-25)
{
rice parameter=7
}
else if(QPCU <-15)
{
rice parameter=6
}
else if(QPCU <-10)
{
rice parameter=5
}
else if(QPCU <0)
{
rice parameter=4
}
else if(QPCU <10)
{
rice parameter=3
}
else if(QPCU <15)
{
rice parameter=2
}
else
{
rice parameter=1
}
Если transform_skip_flag[ x0 ][ y0 ][ cIdx ] равно 1 и sh_ts_residual_coding_disabled_flag равно 0, параметр Райса cRiceParam устанавливается равным 1.
Иначе, параметр Райса cRiceParam выводится путем вызова процесса вывода параметра Райса для abs_remainder[], как специфицировано в Таблице 3 с переменной baseLevel, установленной равной 4, индексом цветового компонента cIdx, положением яркости ( x0, y0 ), текущим положением сканирования ( xC, yC ) коэффициентов, двоичным логарифмом ширины блока преобразования log2TbWidth и двоичным логарифмом высоты блока преобразования log2TbHeight в качестве входов .

[00293] В еще одном примере, соответствующий процесс декодирования на основе проекта VVC проиллюстрирован, как представлено ниже, где TH представляет собой предварительно определенный порог (например, 18, 19). Изменения в проекте VVC показаны в Таблице 48 жирным шрифтом и курсивом. Стоит отметить, что одна и та же логика может быть реализована по-разному на практике. Например, некоторые уравнения или справочная таблица также могут быть использованы для вывода тех же самых параметров Райса.

Таблица 48. Процесс вывода параметра Райса

Параметр Райса cRiceParam выводится следующим образом:
Если extended_precision_processing_flag равно 1, transform_skip_flag[ x0 ][ y0 ][ cIdx ] равно 1 и sh_ts_residual_coding_disabled_flag равен 0, процесс вывода для параметра Райса cRiceParam специфицируется следующим образом.
rice parameter=Clip3( 1, 8, (TH - QP)/6)
Если transform_skip_flag[ x0 ][ y0 ][ cIdx ] равно 1 и sh_ts_residual_coding_disabled_flag равно 0, параметр Райса cRiceParam устанавливается равным 1.
Иначе, параметр Райса cRiceParam выводится путем вызова процесса вывода параметра Райса для abs_remainder[], как специфицировано в Таблице 3 с переменной baseLevel, установленной равной 4, индексом цветового компонента cIdx, положением яркости ( x0, y0 ), текущим положением сканирования ( xC, yC ) коэффициентов, двоичным логарифмом ширины блока преобразования log2TbWidth и двоичным логарифмом высоты блока преобразования log2TbHeight в качестве входов.

[00294] В еще одном примере, соответствующий процесс декодирования, основанный на проекте VVC, иллюстрируется, как представлено ниже, где THA и THB являются заранее заданными порогами (например, THA=8, THB=18 или 19). Изменения в проекте VVC показаны в Таблице 49 жирным шрифтом и курсивом. Стоит отметить, что одна и та же логика может быть реализована по-разному на практике. Например, некоторые уравнения или справочная таблица также могут быть использованы для вывода тех же самых параметров Райса.

Таблица 49. Процесс вывода параметра Райса

Параметр Райса cRiceParam выводится следующим образом:
Если extended_precision_processing_flag равно 1, transform_skip_flag[ x0 ][ y0 ][ cIdx ] равно 1 и sh_ts_residual_coding_disabled_flag равен 0, процесс вывода для параметра Райса cRiceParam специфицируется следующим образом.
rice parameter=Clip3( 1, BitDepth - THA, (THB - QP)/6 )
Если transform_skip_flag[ x0 ][ y0 ][ cIdx ] равно 1 и sh_ts_residual_coding_disabled_flag равно 0, параметр Райса cRiceParam устанавливается равным 1.
Иначе, параметр Райса cRiceParam выводится путем вызова процесса вывода параметра Райса для abs_remainder[], как специфицировано в Таблице 3 с переменной baseLevel, установленной равной 4, индексом цветового компонента cIdx, положением яркости ( x0, y0 ), текущим положением сканирования ( xC, yC ) коэффициентов, двоичным логарифмом ширины блока преобразования log2TbWidth и двоичным логарифмом высоты блока преобразования log2TbHeight в качестве входов .

[00295] На фиг. 16 показан способ кодирования видео. Способ может быть применен, например, к кодеру. На этапе 1610, кодер может принимать видеовход. Видеовход может представлять собой, например, прямую трансляцию. На этапе 1612, кодер может получить параметр квантования на основе видеовхода. Параметр квантования, например, может быть вычислен модулем квантования в кодере. На этапе 1614, кодер может выводить параметр Райса на основе по меньшей мере одного заранее заданного порога, битовой глубины кодирования и параметра квантования. Параметр Райса, например, используется для сигнализации синтаксиса abs_remainder и dec_abs_level. На этапе 1616, кодер может энтропийно кодировать битовый поток видео на основе параметра Райса. Битовый поток видео может быть, например, энтропийно кодированным для формирования сжатого битового потока видео.

[00296] В еще одном примере, предлагается использовать только фиксированное значение (например, 2, 3, 4, 5, 6, 7 или 8) для параметра Райса при кодировании синтаксического элемента abs_remainder, когда BitDepth больше, чем 10. Фиксированное значение может отличаться в разных условиях в соответствии с некоторой кодированной информацией текущего блока, например, параметром квантования. Соответствующий процесс декодирования на основе проекта VVC иллюстрируется, как представлено ниже, где TH - заранее заданный порог (например, 18, 19). Изменения в проекте VVC показаны в Таблице 50 жирным шрифтом и курсивом. Стоит отметить, что одна и та же логика может быть реализована на практике по-разному. Например, некоторые уравнения или справочная таблица также могут быть использованы для вывода одних и тех же параметров Райса.

Таблица 50. Процесс вывода параметра Райса

Параметр Райса cRiceParam выводится следующим образом:
Если BitDepth больше, чем 10, transform_skip_flag[ x0 ][ y0 ][ cIdx ] равно 1 и sh_ts_residual_coding_disabled_flag равно 0, процесс вывода для параметра Райса cRiceParam специфицируется следующим образом.
rice parameter=Clip3( 1, 8, (TH - QP)/6 )
Если transform_skip_flag[ x0 ][ y0 ][ cIdx ] равно 1 и sh_ts_residual_coding_disabled_flag равно 0, параметр Райса cRiceParam устанавливается равным 1.
Иначе, параметр Райса cRiceParam выводится путем вызова процесса вывода параметра Райса для abs_remainder[], как специфицировано в Таблице 3 с переменной baseLevel, установленной равной 4, индексом цветового компонента cIdx, положением яркости ( x0, y0 ), текущим положением сканирования ( xC, yC ) коэффициентов, двоичным логарифмом ширины блока преобразования log2TbWidth и двоичным логарифмом высоты блока преобразования log2TbHeight в качестве входов.

[00297] В еще одном примере, соответствующий процесс декодирования на основе проекта VVC проиллюстрирован, как представлено ниже, где THA и THB являются заранее заданными порогами (например, THA=8, THB=18 или 19). Изменения в проекте VVC показаны в Таблице 51 жирным шрифтом и курсивом. Стоит отметить, что одна и та же логика может быть реализована по-разному на практике. Например, некоторые уравнения или справочная таблица также могут быть использованы для вывода тех же параметров Райса.

Таблица 51. Процесс вывода параметра Райса

Параметр Райса cRiceParam выводится следующим образом:
Если BitDepth больше, чем 10, transform_skip_flag[ x0 ][ y0 ][ cIdx ] равно 1 и sh_ts_residual_coding_disabled_flag равно 0, процесс вывода для параметра Райса cRiceParam специфицируется следующим образом.
rice parameter=Clip3( 1, BitDepth - THA, (THB - QP)/6 )
Если transform_skip_flag[ x0 ][ y0 ][ cIdx ] равно 1 и sh_ts_residual_coding_disabled_flag равно 0, параметр Райса cRiceParam устанавливается равным 1.
Иначе, параметр Райса cRiceParam выводится путем вызова процесса вывода параметра Райса для abs_remainder[], как специфицировано в Таблице 3 с переменной baseLevel, установленной равной 4, индексом цветового компонента cIdx, положением яркости ( x0, y0 ), текущим положением сканирования ( xC, yC ) коэффициентов, двоичным логарифмом ширины блока преобразования log2TbWidth и двоичным логарифмом высоты блока преобразования log2TbHeight в качестве входов .

[00298] В еще одном примере, соответствующий процесс декодирования на основе проекта VVC проиллюстрирован, как представлено ниже, где TH представляет собой заранее заданный порог (например, 33 или 34). Изменения в проекте VVC показаны в Таблице 52 жирным шрифтом и курсивом. Стоит отметить, что одна и та же логика может быть реализована по-разному на практике. Например, некоторые уравнения или справочная таблица также могут быть использованы для вывода тех же самых параметров Райса.

Таблица 52. Процесс вывода параметра Райса

Параметр Райса cRiceParam выводится следующим образом:
Если BitDepth больше, чем 10, transform_skip_flag[ x0 ][ y0 ][ cIdx ] равно 1 и sh_ts_residual_coding_disabled_flag равно 0, процесс вывода для параметра Райса cRiceParam специфицируется следующим образом.
rice parameter=Clip3( 1, 8, (TH - BitDepth -QPCU)/6 )
Если transform_skip_flag[ x0 ][ y0 ][ cIdx ] равно 1 и sh_ts_residual_coding_disabled_flag равно 0, параметр Райса cRiceParam устанавливается равным 1.
Иначе, параметр Райса cRiceParam выводится путем вызова процесса вывода параметра Райса для abs_remainder[], как специфицировано в Таблице 3 с переменной baseLevel, установленной равной 4, индексом цветового компонента cIdx, положением яркости ( x0, y0 ), текущим положением сканирования ( xC, yC ) коэффициентов, двоичным логарифмом ширины блока преобразования log2TbWidth и двоичным логарифмом высоты блока преобразования log2TbHeight в качестве входов.

[00299] В еще одном примере, соответствующий процесс декодирования, основанный на проекте VVC, проиллюстрирован, как представлено ниже, где THA и THB являются заранее заданными порогами (например, THA=8, THB=33 или 34). Изменения в проекте VVC показаны в Таблице 53 жирным шрифтом и курсивом. Стоит отметить, что одна и та же логика может быть реализована по-разному на практике. Например, некоторые уравнения или справочная таблица также могут быть использованы для вывода тех же самых параметров Райса.

Таблица 53. Процесс вывода параметра Райса

Параметр Райса cRiceParam выводится следующим образом:
Если BitDepth больше, чем 10, transform_skip_flag[ x0 ][ y0 ][ cIdx ] равно 1 и sh_ts_residual_coding_disabled_flag равно 0, процесс вывода для параметра Райса cRiceParam специфицируется следующим образом.
rice parameter=Clip3( 1, BitDepth - THA, (THB - BitDepth -QPCU)/6 )
Если transform_skip_flag[ x0 ][ y0 ][ cIdx ] равно 1 и sh_ts_residual_coding_disabled_flag равно 0, параметр Райса cRiceParam устанавливается равным 1.
Иначе, параметр Райса cRiceParam выводится путем вызова процесса вывода параметра Райса для abs_remainder[], как специфицировано в Таблице 3 с переменной baseLevel, установленной равной 4, индексом цветового компонента cIdx, положением яркости ( x0, y0 ), текущим положением сканирования ( xC, yC ) коэффициентов, двоичным логарифмом ширины блока преобразования log2TbWidth и двоичным логарифмом высоты блока преобразования log2TbHeight в качестве входов.

[00300] Следует отметить, что, в приведенных выше иллюстрациях, уравнения, используемые для вычисления конкретных параметров Райса, используются только в качестве примеров для иллюстрации предложенных идей. Для специалиста в современных технологиях кодирования видео, другие функции отображения (или, что эквивалентно, уравнения отображения) уже применимы к предложенной идее (т.е. определению параметра Райса режима пропуска преобразования на основе бита кодирования и применяемого параметра квантования). Между тем, следует также упомянуть, что, в текущем проекте VVC, значение применяемого параметра квантования разрешено изменять на уровне группы блоков кодирования. Поэтому, предлагаемая схема настройки параметров Райса может обеспечивать гибкую адаптацию параметров Райса режима пропуска преобразования на уровне группы блоков кодирования.

[00301] Информация сигнализации для обычного остаточного кодирования и остаточного кодирования с пропуском преобразования

[00302] В соответствии с двадцать восьмым аспектом раскрытия, предлагается сигнализировать параметр Райса из двоичных кодовых слов для кодирования определенных синтаксических элементов, например, abs_remainder в остаточном кодировании пропуска преобразования, параметры сдвига и смещения для вывода параметра Райса, используемого для abs_remainder/dec_abs_level в обычном остаточном кодировании, и определять, следует ли сигнализировать в соответствии с некоторой кодированной информацией текущего блока, например параметром квантования или битовой глубиной кодирования, ассоциированной с TB/CB и/или слайсом/профилем, и/или в соответствии с новым флагом, ассоциированным с уровнем TB/CB/слайса/картинки/последовательности, например, sps_residual_coding_info_present_in_sh_flag.

[00303] В одном примере, в заголовке слайса сигнализируется один флаг управления, чтобы указать, включена или отключена сигнализация параметра Райса для блоков пропуска преобразования и сигнализация параметров сдвига и/или смещения для вывода параметра Райса в блоках преобразования. Когда флаг управления сигнализируется как включенный, один синтаксический элемент дополнительно сигнализируется для каждого слайса пропуска преобразования, чтобы указать параметр Райса этого слайса, и два синтаксических элемента дополнительно сигнализируются для каждого слайса преобразования, чтобы указать параметры сдвига и/или смещения для вывода параметра Райса этого слайса. Когда флаг управления сигнализируется как отключенный (например, устанавливается равным “0”), никакой дополнительный синтаксический элемент не сигнализируется на более низком уровне для указания параметра Райса для слайса пропуска преобразования, и параметр Райса по умолчанию (например, 1) используется для всего слайса пропуска преобразования, и никакой дополнительный синтаксический элемент не сигнализируется на более низком уровне для указания параметров сдвига и смещения для вывода параметра Райса для слайса преобразования, и параметры сдвига и/или смещения по умолчанию (например, 0) используются для всего слайса преобразования. Пример соответствующего процесса декодирования на основе проекта VVC иллюстрируется, как представлено ниже, где TH представляет собой заранее заданное значение (например, 0, 1, 2). Изменения в проекте VVC показаны в Таблице 54 жирным шрифтом и курсивом. Стоит отметить, что sh_residual_coding_rice_shift, sh_residual_coding_rice_offset и sh_ts_residual_coding_rice_index могут кодироваться различными способами и/или могут иметь максимальное значение. Например, u(n), целое число без знака, использующее n битов, или f(n), битовая строка с фиксированным шаблоном, использующая n битов, записанных (слева направо) с первым левым битом, также может использоваться для кодирования/декодирования того же самого синтаксического элемента.

[00304] На фиг. 17 показан способ декодирования видео. Способ может применяться, например, к кодеру. На этапе 1710, кодер может принимать видеовход. На этапе 1712, кодер может передавать параметр Райса в виде двоичных кодовых слов для кодирования синтаксических элементов. Синтаксические элементы кодирования могут включать в себя abs_remainder в остаточном кодировании с пропуском преобразования. На этапе 1714, кодер может энтропийно кодировать битовый поток видео на основе параметра Райса и видеовхода.

[00305] Синтаксис заголовка слайса

Таблица 54. Синтаксис остаточного кодирования

slice_header( ) { Descriptor if( sps_transform_skip_enabled_flag && !sh_dep_quant_used_flag &&
!sh_sign_data_hiding_used_flag )
sh_ts_residual_coding_disabled_flag u(1) sh_residual_coding_rice_flag u(1) if(sh_ts_residual_coding_rice_flag) { h_residual_coding_rice_shift ue(v) sh_residual_coding_rice_offset ue(v) if(!sh_ts_residual_coding_disabled_flag) sh_ts_residual_coding_rice_index ue(v) }

[00306] sh_residual_coding_rice_flag, равный 1, специфицирует, что sh_residual_coding_rice_shift, sh_residual_coding_rice_offset и sh_residual_coding_rice_index могут присутствовать в текущем слайсе, sh_residual_coding_rice_flag, равный 0, специфицирует, что sh_residual_coding_rice_shift, sh_residual_coding_rice_offset и sh_residual_coding_rice_index отсутствуют в текущем слайсе.

[00307] sh_residual_coding_rice_shift специфицирует параметр сдвига, используемый для процесса вывода параметра Райса для abs_remainder[] и dec_abs_level[]. Когда sh_residual_coding_rice_shift отсутствует, значение sh_residual_coding_rice_shift принимается равным 0.

[00308] sh_residual_coding_rice_offset специфицирует параметр смещения, используемый для процесса вывода параметра Райса для of abs_remainder[] и dec_abs_level[]. Когда sh_residual_coding_rice_offset отсутствует, значение sh_residual_coding_rice_offset принимается равным 0.

[00309] sh_ts_residual_coding_rice_index специфицирует параметр Райса, используемый для синтаксической структуры residual_ts_coding(). Когда sh_ts_residual_coding_rice_index отсутствует, значение sh_ts_residual_coding_rice_index принимается равным 0.

Таблица 55. Процесс вывода параметра Райса

Процесс бинаризации для abs_remainder[ ]

Параметр Райса cRiceParam выводится следующим образом:
Если sh_residual_coding_rice_flag равно 1, transform_skip_flag[ x0 ][ y0 ][ cIdx ] равно 1 и sh_ts_residual_coding_disabled_flag равно 0, параметр Райса cRiceParam устанавливается равным (sh_ts_residual_coding_rice_index+TH).
Если transform_skip_flag[ x0 ][ y0 ][ cIdx ] равно 1 и sh_ts_residual_coding_disabled_flag равно 0, параметр Райса cRiceParam устанавливается равным 1.
Иначе, параметр Райса cRiceParam выводится путем вызова процесса вывода параметра Райса для abs_remainder[], как специфицировано в Таблице 3 с переменной baseLevel, установленной равной 4, индексом цветового компонента cIdx, положением яркости ( x0, y0 ), текущим положением сканирования ( xC, yC ) коэффициентов, двоичным логарифмом ширины блока преобразования log2TbWidth и двоичным логарифмом высоты блока преобразования log2TbHeight в качестве входов.

Таблица 56. Процесс вывода параметра Райса

Процесс вывода параметра Райса для abs_remainder[ ] и dec_abs_level[ ]
Входами в этот процесс являются базовый уровень baseLevel, индекс цветового компонента cIdx, положение яркости ( x0, y0 ) специфицирующее верхнюю-левую выборку текущего блока преобразования относительно верхней-левой выборки текущей картинки, текущее положение сканирования ( xC, yC ) коэффициентов, двоичный логарифм ширины блока преобразования log2TbWidth, двоичный логарифм высоты блока преобразования log2TbHeight, sh_residual_coding_rice_shift и sh_residual_coding_rice_offset.
Выходом этого процесса является параметр Райса cRiceParam.
При заданном массиве AbsLevel[ x ][ y ] для блока преобразования с индексом компонента cIdx и верхнем-левом положении яркости ( x0, y0 ), переменная locSumAbs выводится, как специфицировано следующим псевдокодом:
locSumAbs = 0
if( xC < (1 << log2TbWidth) − 1 ) {
locSumAbs += AbsLevel[ xC + 1 ][ yC ]
if( xC < (1 << log2TbWidth) − 2 )
locSumAbs += AbsLevel[ xC + 2 ][ yC ]
if( yC < (1 << log2TbHeight) − 1 )
locSumAbs += AbsLevel[ xC + 1 ][ yC + 1 ] (1494)
}
if( yC < (1 << log2TbHeight) − 1 ) {
locSumAbs += AbsLevel[ xC ][ yC + 1 ]
if( yC < (1 << log2TbHeight) − 2 )
locSumAbs += AbsLevel[ xC ][ yC + 2 ]
}
locSumAbs = Clip3( 0, 31, ( (locSumAbs+ sh_residual_coding_rice_offset)>> sh_residual_coding_rice_shift) − baseLevel * 5 )
При заданной переменной locSumAbs, параметр Райса cRiceParam выводится, как специфицировано в Таблице 4.
cRiceParam=cRiceParam+ sh_residual_coding_rice_shift
Когда baseLevel равно 0, переменная ZeroPos[ n ] выводится следующим образом:
ZeroPos[ n ]=( QState < 2 ? 1 : 2 ) << cRiceParam

[00310] В другом примере, один флаг управления сигнализируется в наборе параметров последовательности (или в синтаксисе расширений диапазона набора параметров последовательности), чтобы указать, включена или отключена сигнализация параметра Райса для блоков пропуска преобразования и сигнализация параметров сдвига и/или смещения для вывода параметра Райса в блоках преобразования. Когда флаг управления сигнализируется как включенный, один синтаксический элемент дополнительно сигнализируется для каждого слайса пропуска преобразования, чтобы указать параметр Райса этого слайса, и два синтаксических элемента дополнительно сигнализируются для каждого слайса преобразования, чтобы указать параметры сдвига и/или смещения для вывода параметра Райса этого слайса. Когда флаг управления сигнализируется как отключенный (например, устанавливается равным “0”), никакой дополнительный синтаксический элемент не сигнализируется на более низком уровне для указания параметра Райса для слайса пропуска преобразования, и параметр Райса по умолчанию (например, 1) используется для всего слайса пропуска преобразования, и никакой дополнительный синтаксический элемент не сигнализируется на более низком уровне для указания параметров сдвига и/или смещения для вывода параметра Райса для слайса преобразования, и параметры сдвига и/или смещения по умолчанию (например, 0) используются для всего слайса преобразования. Пример соответствующего процесса декодирования на основе проекта VVC проиллюстрирован, как представлено ниже, где TH представляет собой заранее заданное значение (например, 0, 1, 2). Изменения в проекте VVC показаны в Таблице 57 жирным шрифтом и курсивом. Стоит отметить, что sh_residual_coding_rice_shift, sh_residual_coding_rice_offset и sh_ts_residual_coding_rice_idx могут кодироваться различными способами и/или могут иметь максимальное значение. Например, u(n), целое число без знака, использующее n битов, или f(n), битовая строка с фиксированным шаблоном, использующая n битов, записанных (слева направо) с первым левым битом, также может использоваться для кодирования/ декодирования того же самого синтаксического элемента.

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

Таблица 57. Синтаксис остаточного кодирования

seq_parameter_set_rbsp( ) { Descriptor sps_sign_data_hiding_enabled_flag u(1) sps_residual_coding_info_present_in_sh_flag u(1) sps_virtual_boundaries_enabled_flag u(1) }

[00312] sps_residual_coding_info_present_in_sh_flag, равный 1, специфицирует, что sh_residual_coding_rice_shift, sh_residual_coding_rice_offset и sh_ts_residual_coding_rice_idx могут присутствовать в синтаксических структурах SH, ссылающихся на SPS. sps_residual_coding_info_present_in_sh_flag, равный 0, специфицирует, что sh_residual_coding_rice_shift, sh_residual_coding_rice_offset и sh_ts_residual_coding_rice_idx не присутствует в синтаксических структурах SH, ссылающихся на SPS. Когда sps_residual_coding_info_present_in_sh_flag отсутствует, предполагается, что значение sps_residual_coding_info_present_in_sh_flag равно 0.

[00313] Синтаксис заголовка слайса

Таблица 58. Синтаксис остаточного кодирования

slice_header( ) { Descriptor if( sps_transform_skip_enabled_flag && !sh_dep_quant_used_flag &&
!sh_sign_data_hiding_used_flag )
sh_ts_residual_coding_disabled_flag u(1) if(sps_ts_residual_coding_rice_enabled _flag ) { sh_residual_coding_rice_shift ue(v) sh_residual_coding_rice_offset ue(v) if(!sh_ts_residual_coding_disabled_flag) sh_ts_residual_coding_rice_index ue(v) } }

[00314] sh_residual_coding_rice_shift специфицирует параметр сдвига, используемый для процесса вывода параметра Райса для abs_remainder[] и dec_abs_level[]. Когда sh_residual_coding_rice_shift отсутствует, значение sh_residual_coding_rice_shift принимается равным 0.

[00315] sh_residual_coding_rice_offset специфицирует параметр смещения, используемый для процесса вывода параметра Райса для abs_remainder[] и dec_abs_level[]. Когда sh_residual_coding_rice_offset отсутствует, значение sh_residual_coding_rice_offset принимается равным 0.

[00316] sh_ts_residual_coding_rice_idx специфицирует параметр Райса, используемый для синтаксической структуры residual_ts_coding(). Когда sh_ts_residual_coding_rice_index отсутствует, значение sh_ts_residual_coding_rice_index принимается равным 0.

Таблица 59. Процесс вывода параметра Райса

Процесс бинаризации для abs_remainder[ ]

Параметр Райса cRiceParam выводится следующим образом:
Если sps_ts_residual_coding_info_flag равно 1, transform_skip_flag[ x0 ][ y0 ][ cIdx ] равно 1 и sh_ts_residual_coding_disabled_flag равно 0, параметр Райса cRiceParam устанавливается равным (sh_ts_residual_coding_rice_idx+TH).
Если transform_skip_flag[ x0 ][ y0 ][ cIdx ] равно 1 и sh_ts_residual_coding_disabled_flag равно 0, параметр Райса cRiceParam устанавливается равным 1.
Иначе, параметр Райса cRiceParam выводится путем вызова процесса вывода параметра Райса для abs_remainder[], как специфицировано в Таблице 3 с переменной baseLevel, установленной равной 4, индексом цветового компонента cIdx, положением яркости ( x0, y0 ), текущим положением сканирования ( xC, yC ) коэффициентов, двоичным логарифмом ширины блока преобразования log2TbWidth и двоичным логарифмом высоты блока преобразования log2TbHeight в качестве входов.

Таблица 60. Процесс вывода параметров

Процесс вывода параметра Райса для abs_remainder[ ] и dec_abs_level[ ]
Входами в этот процесс являются базовый уровень baseLevel, индекс цветового компонента cIdx, положение яркости ( x0, y0 ), специфицирующее верхнюю-левую выборку текущего блока преобразования относительно верхней-левой выборки текущей картинки, текущее положение сканирования ( xC, yC ) коэффициентов, двоичный логарифм ширины блока преобразования log2TbWidth, двоичный логарифм высоты блока преобразования log2TbHeight, sh_residual_coding_rice_shift и sh_residual_coding_rice_offset.
Выходом этого процесса является параметр Райса cRiceParam.
При заданном массиве AbsLevel[ x ][ y ] для блока преобразования с индексом компонента cIdx и верхнем-левом положении яркости ( x0, y0 ), переменная locSumAbs выводится, как специфицировано следующим псевдокодом:
locSumAbs = 0
if( xC < (1 << log2TbWidth) − 1 ) {
locSumAbs += AbsLevel[ xC + 1 ][ yC ]
if( xC < (1 << log2TbWidth) − 2 )
locSumAbs += AbsLevel[ xC + 2 ][ yC ]
if( yC < (1 << log2TbHeight) − 1 )
locSumAbs += AbsLevel[ xC + 1 ][ yC + 1 ] (1494)
}
if( yC < (1 << log2TbHeight) − 1 ) {
locSumAbs += AbsLevel[ xC ][ yC + 1 ]
if( yC < (1 << log2TbHeight) − 2 )
locSumAbs += AbsLevel[ xC ][ yC + 2 ]
}
locSumAbs = Clip3( 0, 31, ( (locSumAbs+ sh_residual_coding_rice_offset)>> sh_residual_coding_rice_shift) − baseLevel * 5 )
При заданной переменной locSumAbs, параметр Райса cRiceParam выводится, как специфицировано в Таблице 4.
cRiceParam=cRiceParam+ sh_residual_coding_rice_shift
Когда baseLevel равно 0, переменная ZeroPos[ n ] выводится следующим образом:
ZeroPos[ n ]=( QState < 2 ? 1 : 2 ) << cRiceParam

[00317] В еще одном примере, один синтаксический элемент сигнализируется для каждого слайса пропуска преобразования, чтобы указать параметр Райса этого слайса, и два синтаксических элемента сигнализируются для каждого слайса преобразования, чтобы указать параметры сдвига и/или смещения для вывода параметра Райса этого слайса. Пример соответствующего процесса декодирования на основе проекта VVC проиллюстрирован, как представлено ниже. Изменения в проекте VVC показаны в Таблице 61 жирным шрифтом и курсивом. Стоит отметить, что sh_residual_coding_rice_shift, sh_residual_coding_rice_offset и sh_ts_residual_coding_rice_idx могут кодироваться различными способами и/или могут иметь максимальное значение. Например, u(n), целое число без знака, использующее n битов, или f(n), битовая строка с фиксированным шаблоном, использующая n битов, записанных (слева направо) с первым левым битом, также может использоваться для кодирования/декодирования того же синтаксического элемента.

[00318] Синтаксис заголовка слайса

Таблица 61. Синтаксис остаточного кодирования

slice_header( ) { Descriptor if( sps_transform_skip_enabled_flag && !sh_dep_quant_used_flag &&
!sh_sign_data_hiding_used_flag )
sh_ts_residual_coding_disabled_flag u(1) if(!sh_ts_residual_coding_disabled_flag) sh_ts_residual_coding_rice_idx ue(v) sh_residual_coding_rice_shift ue(v) sh_residual_coding_rice_offset ue(v) }

[00319] sh_ts_residual_coding_rice_idx специфицирует параметр Райса, используемый для синтаксической структуры residual_ts_coding(). Когда sh_ts_residual_coding_rice_idx отсутствует, значение sh_ts_residual_coding_rice_idx принимается равным 0.

[00320] sh_residual_coding_rice_offset специфицирует параметр смещения, используемый в процессе вывода параметра Райса для abs_remainder[] и dec_abs_level[]. Когда sh_residual_coding_rice_offset отсутствует, значение sh_residual_coding_rice_offset принимается равным 0.

[00321] sh_ts_residual_coding_rice_idx специфицирует параметр Райса, используемый для синтаксической структуры residual_ts_coding(). Когда sh_ts_residual_coding_rice_index отсутствует, значение sh_ts_residual_coding_rice_index принимается равным 0.

Таблица 62. Процесс вывода параметра Райса

Процесс бинаризации для abs_remainder[ ]

Параметр Райса cRiceParam выводится следующим образом:
Если transform_skip_flag[ x0 ][ y0 ][ cIdx ] равно 1 и sh_ts_residual_coding_disabled_flag равно 0, параметр Райса cRiceParam устанавливается равным sh_ts_residual_coding_rice_idx+1.
Иначе, параметр Райса cRiceParam выводится путем вызова процесса вывода параметра Райса для abs_remainder[], как специфицировано в Таблице 3 с переменной baseLevel, установленной равной 4, индексом цветового компонента cIdx, положением яркости ( x0, y0 ), текущим положением сканирования ( xC, yC ) коэффициентов, двоичным логарифмом ширины блока преобразования log2TbWidth и двоичным логарифмом высоты блока преобразования log2TbHeight в качестве входов.

Таблица 63. Процесс вывода параметра Райса

Процесс вывода параметра Райса для abs_remainder[ ] и dec_abs_level[ ]
Входами в этот процесс являются базовый уровень baseLevel, индекс цветового компонента cIdx, положение яркости ( x0, y0 ), специфицирующее верхнюю-левую выборку текущего блока преобразования относительно верхней-левой выборки текущей картинки, текущее положение сканирования ( xC, yC ) коэффициентов, двоичный логарифм ширины блока преобразования log2TbWidth, двоичный логарифм высоты блока преобразования log2TbHeight, sh_residual_coding_rice_shift и sh_residual_coding_rice_offset.
Выходом этого процесса является параметр Райса cRiceParam.
При заданном массиве AbsLevel[ x ][ y ] для блока преобразования с индексом компонента cIdx и верхнем-левом положении яркости ( x0, y0 ), переменная locSumAbs выводится, как специфицировано следующим псевдокодом:
locSumAbs = 0
if( xC < (1 << log2TbWidth) − 1 ) {
locSumAbs += AbsLevel[ xC + 1 ][ yC ]
if( xC < (1 << log2TbWidth) − 2 )
locSumAbs += AbsLevel[ xC + 2 ][ yC ]
if( yC < (1 << log2TbHeight) − 1 )
locSumAbs += AbsLevel[ xC + 1 ][ yC + 1 ] (1494)
}
if( yC < (1 << log2TbHeight) − 1 ) {
locSumAbs += AbsLevel[ xC ][ yC + 1 ]
if( yC < (1 << log2TbHeight) − 2 )
locSumAbs += AbsLevel[ xC ][ yC + 2 ]
}
locSumAbs = Clip3( 0, 31, ( (locSumAbs+ sh_residual_coding_rice_offset)>> sh_residual_coding_rice_shift) − baseLevel * 5 )
При заданной переменной locSumAbs, параметр Райса cRiceParam выводится, как специфицировано в Таблице 4.
cRiceParam=cRiceParam+ sh_residual_coding_rice_shift
Когда baseLevel равно 0, переменная ZeroPos[ n ] выводится следующим образом:
ZeroPos[ n ]=( QState < 2 ? 1 : 2 ) << cRiceParam

[00322] В еще одном примере, один флаг управления сигнализируется в синтаксисе расширений диапазона набора параметров картинки, чтобы указать, включена или отключена сигнализация параметра Райса для блоков пропуска преобразования и сигнализация параметров сдвига и/или смещения для вывода параметра Райса в блоках преобразования. Когда флаг управления сигнализируется как разрешенный, один синтаксический элемент дополнительно сигнализируется для указания параметра Райса для остаточного кодирования с пропуском преобразования для этой картинки, и два синтаксических элемента дополнительно сигнализируются для обычного остаточного кодирования, чтобы указывать параметры сдвига и/или смещения для вывода параметра Райса этой картинки. Когда флаг управления сигнализируется как отключенный (например, установлен равным “0”), никакой дополнительный синтаксический элемент не сигнализируется на более низком уровне для указания параметра Райса для остаточного кодирования с пропуском преобразования, и параметр Райса по умолчанию (например, 1) используется для всего остаточного кодирования с пропуском преобразования, и никакой дополнительный синтаксический элемент не сигнализируется на более низком уровне для указания параметров сдвига и/или смещения для вывода параметра Райса для обычного остаточного кодирования, и параметры сдвига и/или смещения по умолчанию (например, 0) используются для всего обычного остаточного кодирования. Пример соответствующего процесса декодирования на основе проекта VVC проиллюстрирован, как представлено ниже, где TH - заранее заданное значение (например, 0, 1, 2). Изменения в проекте VVC показаны в Таблице 64 жирным шрифтом и курсивом. Стоит отметить, что pps_residual_coding_rice_shift, pps_residual_coding_rice_offset и pps_ts_residual_coding_rice_idx могут кодироваться различными способами и/или могут иметь максимальное значение. Например, u(n), целое число без знака, использующее n битов, или f(n), битовая строка с фиксированным шаблоном, использующая n битов, записанных (слева направо) с первым левым битом, также может использоваться для кодирования/декодирования того же синтаксического элемента.

[00323] Синтаксис расширений диапазона набора параметров картинки

Таблица 64. Синтаксис остаточного кодирования

pps_range_extensions( ) { Descriptor pps_residual_coding_info_flag u(1) if(pps_ts_residual_coding_rice_flag ) pps_residual_coding_rice_shift ue(v) pps_residual_coding_rice_offset ue(v) pps_ts_residual_coding_rice_idx ue(v) }

[00324] pps_residual_coding_info_flag, равный 1, специфицирует, что pps_residual_coding_rice_shift, pps_residual_coding_rice_offset и pps_ts_residual_coding_rice_index могут присутствовать в текущей картинке. pps_residual_coding_info_flag, равный 0, специфицирует, что pps_residual_coding_rice_shift, pps_residual_coding_rice_offset и pps_ts_residual_coding_rice_idx отсутствуют в текущей картинке. Когда pps_residual_coding_info_flag отсутствует, значение pps_residual_coding_info_flag принимается равным 0.

[00325] pps_residual_coding_rice_shift специфицирует параметр сдвига, используемый в процессе вывода параметра Райса для abs_remainder[] и dec_abs_level[]. Когда pps_residual_coding_rice_shift отсутствует, значение pps_residual_coding_rice_shift принимается равным 0.

[00326] pps_residual_coding_rice_offset специфицирует параметр смещения, используемый в процессе вывода параметра Райса для abs_remainder[] и dec_abs_level[]. Когда pps_residual_coding_rice_offset отсутствует, значение pps_residual_coding_rice_offset принимается равным 0.

[00327] pps_ts_residual_coding_rice_idx специфицирует параметр Райса, используемый для синтаксической структуры residual_ts_coding(). Когда pps_ts_residual_coding_rice_idx отсутствует, значение pps_ts_residual_coding_rice_idx принимается равным 0.

Таблица 65. Процесс вывода параметра Райса

Процесс бинаризации для abs_remainder[ ]

Параметр Райса cRiceParam выводится следующим образом:
Если pps_ts_residual_coding_rice_flag равно 1, transform_skip_flag[ x0 ][ y0 ][ cIdx ] равно 1 и sh_ts_residual_coding_disabled_flag равно 0, параметр Райса cRiceParam устанавливается равным (pps_ts_residual_coding_rice_ idx+TH).
Если transform_skip_flag[ x0 ][ y0 ][ cIdx ] равно 1 и sh_ts_residual_coding_disabled_flag равно 0, параметр Райса cRiceParam устанавливается равным 1.
Иначе, параметр Райса cRiceParam выводится путем вызова процесса вывода параметра Райса для abs_remainder[], как специфицировано в Таблице 3 с переменной baseLevel установленной равной 4, индексом цветового компонента cIdx, положением яркости ( x0, y0 ), текущим положением сканирования ( xC, yC ) коэффициентов, двоичным логарифмом ширины блока преобразования log2TbWidth и двоичным логарифмом высоты блока преобразования log2TbHeight в качестве входов.

Таблица 66. Процесс вывода параметра Райса

Процесс вывода параметра Райса для abs_remainder[ ] и dec_abs_level[ ]
Входами в этот процесс являются базовый уровень baseLevel, индекс цветового компонента cIdx, положение яркости ( x0, y0 ), специфицирующее верхнюю-левую выборку текущего блока преобразования относительно верхней-левой выборки текущей картинки, текущее положение сканирования ( xC, yC ) коэффициентов, двоичный логарифм ширины блока преобразования log2TbWidth, двоичный логарифм высоты блока преобразования log2TbHeight, pps_residual_coding_rice_shift и pps_residual_coding_rice_offset.
Выходом этого процесса является параметр Райса cRiceParam.
При заданном массиве AbsLevel[ x ][ y ] для блока преобразования с индексом компонента cIdx и верхнем-левом положении яркости ( x0, y0 ), переменная locSumAbs выводится, как специфицировано следующим псевдокодом:
locSumAbs = 0
if( xC < (1 << log2TbWidth) − 1 ) {
locSumAbs += AbsLevel[ xC + 1 ][ yC ]
if( xC < (1 << log2TbWidth) − 2 )
locSumAbs += AbsLevel[ xC + 2 ][ yC ]
if( yC < (1 << log2TbHeight) − 1 )
locSumAbs += AbsLevel[ xC + 1 ][ yC + 1 ] (1494)
}
if( yC < (1 << log2TbHeight) − 1 ) {
locSumAbs += AbsLevel[ xC ][ yC + 1 ]
if( yC < (1 << log2TbHeight) − 2 )
locSumAbs += AbsLevel[ xC ][ yC + 2 ]
}
locSumAbs = Clip3( 0, 31, ( (locSumAbs+ pps_residual_coding_rice_offset)>> pps_residual_coding_rice_shift) − baseLevel * 5 )
При заданной переменной locSumAbs, параметр Райса cRiceParam выводится, как специфицировано в Таблице 4.
cRiceParam=cRiceParam+ pps_residual_coding_rice_shift
Когда baseLevel равно 0, переменная ZeroPos[ n ] выводится следующим образом:
ZeroPos[ n ]=( QState < 2 ? 1 : 2 ) << cRiceParam

[00328] В соответствии с двадцать девятым аспектом раскрытия, предлагается использовать различные параметры Райса для кодирования определенных синтаксических элементов, например, abs_remainder при остаточном кодировании с пропуском преобразования, параметры сдвига и смещения для вывода параметра Райса, используемого для abs_remainder/dec_abs_level при обычном остаточном кодировании, и определять, какой из них использовать в соответствии с некоторой кодированной информацией текущего блока, например параметром квантования или битовой глубиной кодирования, ассоциированной с TB/CB и/или слайсом/профилем, и/или в соответствии с новым флагом, ассоциированным с уровнем TB/CB/слайса/картинки/последовательности, например, sps_residual_coding_info_present_in_sh_flag.

[00329] В одном примере, один флаг управления сигнализируется в заголовке слайса, чтобы указывать, включены ли или отключены процесс вывода параметра Райса для блоков пропуска преобразования и процесс вывода параметров сдвига и/или смещения для параметра Райса в блоках преобразования. Когда флаг управления сигнализируется как включенный, параметр Райса может отличаться в разных условиях в соответствии с некоторой кодированной информацией текущего блока, например, параметром квантования и битовой глубиной. И параметры сдвига и/или смещения для вывода параметра Райса при обычном остаточном кодировании могут отличаться в разных условиях в соответствии с некоторой кодированной информацией текущего блока, например, параметром квантования и битовой глубиной. Когда флаг управления сигнализируется как отключенный (например, установлен равным “0”), параметр Райса по умолчанию (например, 1) используется для всего слайса пропуска преобразования, и параметры сдвига и/или смещения по умолчанию (например, 0) используются для всего слайса преобразования. Пример соответствующего процесса декодирования на основе проекта VVC проиллюстрирован, как представлено ниже, где THA и THB являются заранее заданными пороговыми значениями (например, THA=8, THB=18 или 19). Изменения в проекте VVC показаны в Таблице 67 жирным шрифтом и курсивом. Стоит отметить, что одна и та же логика может быть реализована по-разному на практике. Например, некоторые уравнения или справочная таблица также могут быть использованы для вывода тех же самых параметров Райса.

[00330] Синтаксис заголовка слайса

Таблица 67. Синтаксис остаточного кодирования

slice_header( ) { Descriptor if( sps_transform_skip_enabled_flag && !sh_dep_quant_used_flag &&
!sh_sign_data_hiding_used_flag )
sh_ts_residual_coding_disabled_flag u(1) sh_residual_coding_rice_flag u(1)

[00331] sh_residual_coding_rice_flag, равный 1, специфицирует, что в текущем слайсе используется процесс вывода параметра Райса, зависящий от битовой глубины. sh_residual_coding_rice_flag, равный 0, специфицирует, что процесс вывода параметра Райса, зависящий от битовой глубины, не используется в текущем слайсе.

Таблица 68. Процесс вывода параметра Райса

Процесс бинаризации для abs_remainder[ ]

Параметр Райса cRiceParam выводится следующим образом:
Если sh_residual_coding_rice_flag равно 1, transform_skip_flag[ x0 ][ y0 ][ cIdx ] равно 1 и sh_ts_residual_coding_disabled_flag равно 0, параметр Райса cRiceParam устанавливается равным Clip3( 1, BitDepth - THA, (THB - QP)/6 ).
Если transform_skip_flag[ x0 ][ y0 ][ cIdx ] равно 1 и sh_ts_residual_coding_disabled_flag равно 0, параметр Райса cRiceParam устанавливается равным 1.
Иначе, параметр Райса cRiceParam выводится путем вызова процесса вывода параметра Райса для abs_remainder[], как специфицировано в Таблице 3 с переменной baseLevel, установленной равной 4, индексом цветового компонента cIdx, положением яркости ( x0, y0 ), текущим положением сканирования ( xC, yC ) коэффициентов, двоичным логарифмом ширины блока преобразования log2TbWidth и двоичным логарифмом высоты блока преобразования log2TbHeight в качестве входов .

Таблица 69. Процесс вывода параметра Райса

Процесс вывода параметра Райса для abs_remainder[ ] и dec_abs_level[ ]
Входами в этот процесс являются базовый уровень baseLevel, индекс цветового компонента cIdx, положение яркости ( x0, y0 ), специфицирующее верхнюю-левую выборку текущего блока преобразования относительно верхней-левой выборки текущей картинки, текущее положение сканирования ( xC, yC ) коэффициентов, двоичный логарифм ширины блока преобразования log2TbWidth, двоичный логарифм высоты блока преобразования log2TbHeight, sh_residual_coding_rice_flag.
Выходом этого процесса является параметр Райса cRiceParam.
При заданном массиве AbsLevel[ x ][ y ] для блока преобразования с индексом компонента cIdx и верхнем-левом положении яркости ( x0, y0 ), переменная locSumAbs выводится, как специфицировано следующим псевдокодом:
ShiftRice = sh_residual_coding_rice_flag ? (BitDepth > 10) ? Floor(Log2(4 *(Bitdepth – 10))) : 0 : 0
OffsetRice = sh_residual_coding_rice_flag ? (ShiftRice > 0) ? (1 << (ShiftRice - 1)) : 0 : 0
locSumAbs = 0
if( xC < (1 << log2TbWidth) − 1 ) {
locSumAbs += AbsLevel[ xC + 1 ][ yC ]
if( xC < (1 << log2TbWidth) − 2 )
locSumAbs += AbsLevel[ xC + 2 ][ yC ]
if( yC < (1 << log2TbHeight) − 1 )
locSumAbs += AbsLevel[ xC + 1 ][ yC + 1 ] (1494)
}
if( yC < (1 << log2TbHeight) − 1 ) {
locSumAbs += AbsLevel[ xC ][ yC + 1 ]
if( yC < (1 << log2TbHeight) − 2 )
locSumAbs += AbsLevel[ xC ][ yC + 2 ]
}
locSumAbs = Clip3( 0, 31, ( ( locSumAbs + OffsetRice) >> ShiftRice) − baseLevel * 5 )
При заданной переменной locSumAbs, параметр Райса cRiceParam выводится, как специфицировано в Таблице 4.
cRiceParam=cRiceParam+ ShiftRice
Когда baseLevel равно 0, переменная ZeroPos[ n ] выводится следующим образом:
ZeroPos[ n ]=( QState < 2 ? 1 : 2 ) << cRiceParam

[00332] В еще одном примере, соответствующий процесс декодирования, основанный в проекте VVC, проиллюстрирован, как представлено ниже, где TH представляет собой предварительно определенный порог (например, 18, 19). Изменения в проекте VVC показаны в Таблице 70 жирным шрифтом и курсивом. Стоит отметить, что одна и та же логика может быть реализована по-разному на практике. Например, некоторые уравнения или справочная таблица также могут быть использованы для вывода тех же самых параметров Райса.

Таблица 70. Процесс вывода параметров Райса

Процесс бинаризации для abs_remainder[ ]

Параметр Райса cRiceParam выводится следующим образом:
Если BitDepth больше, чем 10, transform_skip_flag[ x0 ][ y0 ][ cIdx ] равно 1 и sh_ts_residual_coding_disabled_flag равно 0, процесс вывода для параметра Райса cRiceParam специфицируется следующим образом.
rice parameter=Clip3( 1, 8, (TH - QP)/6 )
Если transform_skip_flag[ x0 ][ y0 ][ cIdx ] равно 1 и sh_ts_residual_coding_disabled_flag равно 0, параметр Райса cRiceParam устанавливается равным 1.
Иначе, параметр Райса cRiceParam выводится путем вызова процесса вывода параметра Райса для abs_remainder[], как специфицировано в Таблице 3 с переменной baseLevel, установленной равной 4, индексом цветового компонента cIdx, положением яркости ( x0, y0 ), текущим положением сканирования ( xC, yC ) коэффициентов, двоичным логарифмом ширины блока преобразования log2TbWidth и двоичным логарифмом высоты блока преобразования log2TbHeight в качестве входов .
Процесс вывода параметра Райса для abs_remainder[ ] и dec_abs_level[ ]
Входами в этот процесс являются базовый уровень baseLevel, индекс цветового компонента cIdx, положение яркости ( x0, y0 ) специфицирующее верхнюю-левую выборку текущего блока преобразования относительно верхней-левой выборки текущей картинки, текущее положение сканирования ( xC, yC ) коэффициентов, двоичный логарифм ширины блока преобразования log2TbWidth, двоичный логарифм высоты блока преобразования log2TbHeight.
Выходом этого процесса является параметр Райса cRiceParam.
При заданном массиве AbsLevel[ x ][ y ] для блока преобразования с индексом компонента cIdx и верхнем-левом положении яркости ( x0, y0 ), переменная locSumAbs выводится, как специфицировано следующим псевдокодом:
ShiftRice = (BitDepth > 10) ? Floor(Log2(4 *(Bitdepth – 10))) : 0
OffsetRice = (BitDepth > 10) ? (ShiftRice > 0) ? (1 << (ShiftRice - 1)) : 0 : 0
locSumAbs = 0
if( xC < (1 << log2TbWidth) − 1 ) {
locSumAbs += AbsLevel[ xC + 1 ][ yC ]
if( xC < (1 << log2TbWidth) − 2 )
locSumAbs += AbsLevel[ xC + 2 ][ yC ]
if( yC < (1 << log2TbHeight) − 1 )
locSumAbs += AbsLevel[ xC + 1 ][ yC + 1 ] (1494)
}
if( yC < (1 << log2TbHeight) − 1 ) {
locSumAbs += AbsLevel[ xC ][ yC + 1 ]
if( yC < (1 << log2TbHeight) − 2 )
locSumAbs += AbsLevel[ xC ][ yC + 2 ]
}
locSumAbs = Clip3( 0, 31, ( ( locSumAbs + OffsetRice) >> ShiftRice) − baseLevel * 5 )
При заданной переменной locSumAbs, параметр Райса cRiceParam выводится, как специфицировано в Таблице 4.
cRiceParam=cRiceParam+ ShiftRice
Когда baseLevel равно 0, переменная ZeroPos[ n ] выводится следующим образом:
ZeroPos[ n ]=( QState < 2 ? 1 : 2 ) << cRiceParam

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

[00334] Например, sps_ts_residual_coding_rice_present_in_sh_flag, равный 1, специфицирует, что sh_ts_residual_coding_rice_idx может присутствовать в синтаксических структурах SH, ссылающихся на SPS. sps_ts_residual_coding_rice_present_in_sh_flag, равный 0, специфицирует, что sh_ts_residual_coding_rice_idx отсутствует в синтаксических структурах SH, ссылающихся на SPS. Согласно раскрытию, предлагается добавить синтаксический элемент, gci_no_ts_residual_coding_rice_constraint_flag, в синтаксис информации об общих ограничениях, чтобы обеспечить те же элементы управления общими ограничениями, что и другие флаги. Пример процесса декодирования по проекту VVC проиллюстрирован ниже. Изменения в проекте VVC выделены. Добавленные части выделены курсивом.

general_constraint_info( ) { Descriptor gci_no_ts_residual_coding_rice_constraint_flag u(1) } gci_no_ts_residual_coding_rice_constraint_flag, равный 1, специфицирует, что sps_ts_residual_coding_rice_present_in_sh_flag должен быть равен 0. gci_no_ts_residual_coding_rice_constraint_flag, равный 0, не накладывает такого ограничения.

[00335] В другом примере, pps_ts_residual_coding_rice_flag, равный 1, специфицирует, что pps_ts_residual_coding_rice_index может присутствовать в текущей картинке, pps_ts_residual_coding_rice_flag, равный 0, специфицирует, что pps_ts_residual_coding_rice_idx отсутствует в текущей картинке. Согласно раскрытию, предлагается добавить синтаксический элемент, gci_no_ts_residual_coding_rice_constraint_flag, в синтаксис информации об общих ограничениях, чтобы обеспечить те же элементы управления общими ограничениями, что и другие флаги. Пример процесса декодирования по проекту VVC проиллюстрирован ниже. Изменения в проекте VVC выделены. Добавленные части выделены курсивом.

general_constraint_info( ) { Descriptor gci_no_ts_residual_coding_rice_constraint_flag u(1) } gci_no_ts_residual_coding_rice_constraint_flag, равный 1, специфицирует, что pps_ts_residual_coding_rice_flag должен быть равен 0. gci_no_ts_residual_coding_rice_constraint_flag, равный 0, не накладывает такого ограничения.

[00336] В еще одном примере, sps_rice_adaptation_enabled_flag, равный 1, специфицирует, что параметр Райса для бинаризации abs_remaining[] и dec_abs_level могут быть получены по формуле.

[00337] Формула может включать в себя: RiceParam=RiceParam+shiftVal и shiftVal=( localSumAbs < Tx[ 0 ] ) ? Rx[ 0 ] : ( ( localSumAbs < Tx[ 1 ] ) ? Rx[ 1 ] : ( ( localSumAbs < Tx[ 2 ] ) ? Rx[ 2 ] : ( ( localSumAbs < Tx[ 3 ] ) ? Rx[ 3 ] : Rx[4] ) ) ), где списки Tx[ ] и Rx[ ] специфицированы следующим образом: Tx[ ]={ 32, 128, 512, 2048 }> >(1523) Rx[ ]={ 0, 2, 4, 6, 8 }

[00338] Согласно раскрытию, предлагается добавить синтаксический элемент, gci_no_rice_adaptation_constraint_flag, в синтаксис информации об общих ограничениях, чтобы обеспечить те же элементы управления общими ограничениями, что и другие флаги. Пример процесса декодирования по проекту VVC проиллюстрирован ниже. Изменения в проекте VVC выделены. Добавленные части выделены курсивом.

general_constraint_info( ) { Descriptor gci_no_rice_adaptation_constraint_flag u(1) } gci_no_rice_adaptation_constraint_flag, равный 1, специфицирует, что sps_rice_adaptation_enabled_flag должен быть равен 0. gci_no_rice_adaptation_constraint_flag, равный 0, не накладывает такого ограничения.

[00339] Поскольку предложенная схема адаптации параметра Райса используется только для остаточного кодирования с пропуском преобразования (TSRC), предлагаемый способ может становиться действующим только тогда, когда включено TSRC. Соответственно, в одном или более вариантах осуществления раскрытия, предлагается добавить одно ограничение битового потока, которое требует, чтобы значение gci_no_rice_adaptation_constraint_flag было равно единице, когда режим пропуска преобразования отключен из уровня информации об общих ограничениях, например, когда значение gci_no_transform_skip_constraint_flag установлено равным единице.

[00340] В еще одном примере, sps_range_extension_flag, равный 1, специфицирует, что синтаксическая структура sps_range_extension() присутствует в синтаксической структуре SPS RBSP. sps_range_extension_flag, равный 0, специфицирует, что эта синтаксическая структура отсутствует. Согласно раскрытию, предлагается добавить синтаксический элемент, gci_no_range_extension_constraint_flag, в синтаксис информации об общих ограничениях, чтобы обеспечить те же элементы управления общими ограничениями, что и другие флаги. Пример процесса декодирования по проекту VVC проиллюстрирован ниже. Изменения в проекте VVC выделены. Добавленные части выделены курсивом.

general_constraint_info( ) { Descriptor gci_no_range_extension_constraint_flag u(1) } gci_no_range_extension_constraint_flag, равный 1, специфицирует, что sps_range_extension_flag должен быть равен 0. gci_no_range_extension_constraint_flag, равный 0, не накладывает такого ограничения.

[00341] На фиг. 19 показан способ кодирования видео в соответствии с одним примером настоящего раскрытия. Способ может быть применен, например, к декодеру. На этапе 1902, декодер может принимать флаг расширения диапазона набора параметров последовательности (SPS), который указывает, присутствует ли синтаксическая структура, sps_range_extension, в синтаксических структурах полезной нагрузки последовательности необработанных байтов (RBSP) заголовка слайса (SH), на основе значения флага расширения диапазона SPS.

[00342] На этапе 1904, в ответ на определение, что значение флага расширения диапазона SPS равно 1, декодер может определить, что sps_range_extension присутствует в синтаксических структурах SH RBSP.

[00343] На этапе 1906, в ответ на определение, что значение флага расширения диапазона равно 0, декодер может определить, что sps_range_extension отсутствует в синтаксических структурах SH RBSP.

[00344] В еще одном примере, sps_cabac_bypass_alignment_enabled_flag, равный 1, специфицирует, что значение ivlCurrRange может быть выровнено перед обходным декодированием синтаксических элементов sb_coded_flag[][], abs_remainder[], dec_abs_level[n] и coeff_sign_flag[]. sps_cabac_bypass_alignment_enabled_flag, равный 0, специфицирует, что значение ivlCurrRange не выровнено перед обходным декодированием. Согласно раскрытию, предлагается добавить синтаксический элемент, gci_no_cabac_bypass_alignment_constraint_flag, в синтаксис информации об общих ограничениях, чтобы обеспечить те же элементы управления общими ограничениями, что и другие флаги. Пример процесса декодирования по проекту VVC проиллюстрирован ниже. Изменения в проекте VVC выделены. Добавленные части выделены курсивом.

general_constraint_info( ) { Descriptor gci_no_cabac_bypass_alignment_constraint_flag u(1) } gci_no_cabac_bypass_alignment_constraint_flag, равный 1, специфицирует, что sps_cabac_bypass_alignment_enabled_flag должен быть равен 0. gci_no_cabac_bypass_alignment_constraint_flag, равный 0, не накладывает такого ограничения.

[00345] На фиг. 20 показан способ кодирования видео в соответствии с одним примером настоящего раскрытия. Способ может быть применен, например, к декодеру. На этапе 2002, декодер может принимать флаг включенного выравнивания набора параметров последовательности (SPS), который указывает, выровнен ли индекс, ivlCurrRange, перед обходным декодированием синтаксических элементов sb_coded_flag, abs_remainder, dec_abs_level и coeff_sign_flagn, на основе значения включенного выравнивания SPS.

[00346] На этапе 2004, в ответ на определение, что значение флага включенного выравнивания SPS равно 1, декодер может определить, что ivlCurrRange выровнен перед обходным декодированием.

[00347] На этапе 2006, в ответ на определение, что значение флага включенного выравнивания SPS равно 0, декодер может определить, что ivlCurrRange не выровнен перед обходным декодированием.

[00348] В еще одном примере, extended_precision_processing_flag, равный 1, специфицирует, что расширенный динамический диапазон может использоваться для коэффициентов преобразования и обработки преобразования. extended_precision_processing_flag, равный 0, специфицирует, что расширенный динамический диапазон не используется. Согласно раскрытию, предлагается добавить синтаксический элемент, gci_no_extended_precision_processing_constraint_flag, в синтаксис информации об общих ограничениях, чтобы обеспечить те же элементы управления общими ограничениями, что и другие флаги. Пример процесса декодирования по проекту VVC проиллюстрирован ниже. Изменения в проекте VVC выделены. Добавленные части выделены курсивом.

general_constraint_info( ) { Descriptor gci_no_extended_precision_processing_constraint_
flag
u(1)
} gci_no_extended_precision_processing_constraint_flag, равный 1, специфицирует, что extended_precision_processing_flag должен быть равен 0. gci_no_extended_precision_processing_constraint_flag, равный 0, не накладывает такого ограничения.

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

[00350] На этапе 2104, в ответ на определение, что значение флага обработки расширенной точности равно 1, декодер может определить, что расширенный динамический диапазон принят для коэффициентов преобразования и во время обработки преобразования.

[00351] На этапе 2106, в ответ на определение, что значение флага обработки расширенной точности равно 0, декодер может определить, что расширенный динамический диапазон не принят для коэффициентов преобразования или во время обработки преобразования.

[00352] В еще одном примере, persistent_rice_adaptation_enabled_flag, равный 1, специфицирует, что вывод параметра Райса для бинаризации abs_remaining[] и dec_abs_level может быть инициализирован в начале каждого подблока с использованием зависимой от режима статистики, накопленной из предыдущих подблоков. persistent_rice_adaptation_enabled_flag, равный 0, специфицирует, что ни одно предыдущее состояние подблока не используется при выводе параметра Райса. Согласно раскрытию, предлагается добавить синтаксический элемент, gci_no_persistent_rice_adaptation_constraint_flag, в синтаксис информации об общих ограничениях, чтобы обеспечить те же элементы управления общими ограничениями, что и другие флаги. Пример процесса декодирования по проекту VVC проиллюстрирован ниже. Изменения в проекте VVC выделены. Добавленные части выделены курсивом.

general_constraint_info( ) { Descriptor gci_no_persistent_rice_adaptation_constraint_flag u(1) } gci_no_persistent_rice_adaptation_constraint_flag, равный 1, специфицирует, что persistent_rice_adaptation_enabled_flag должен быть равен 0. gci_no_persistent_rice_adaptation_constraint_flag, равный 0, не накладывает такого ограничения.

[00353] На фиг. 22 показан способ кодирования видео в соответствии с одним примером настоящего раскрытия. Способ может быть применен, например, к декодеру. На этапе 2202, декодер может принимать флаг включенной постоянной адаптации Райса, который указывает, инициализирован ли вывод параметра Райса для бинаризации abs_remaining и dec_abs_level в начале каждого подблока, принимающего зависимую от режима статистику, накопленную из предыдущих подблоков, на основе значения флага включенной постоянной адаптации Райса.

[00354] На этапе 2204, в ответ на определение, что значение флага включенной постоянной адаптации Райса равно 1, декодер может определить, что вывод параметра Райса для бинаризации инициализируется в начале каждого подблока, принимающего зависимую от режима статистику, накопленную из предыдущих подблоков.

[00355] На этапе 2206, в ответ на определение, что значение флага включенной постоянной адаптации Райса равно 0, декодер может определить, что никакое предыдущее состояние подблока не принято при выводе параметра Райса.

[00356] Вышеуказанные способы могут быть реализованы с использованием устройства, которое включает в себя одну или более схем, которые включают в себя специализированные интегральные схемы (ASIC), процессоры цифровых сигналов (DSP), устройства цифровой обработки сигналов (DSPD), программируемые логические устройства (PLD), программируемые вентильные матрицы (FPGA), контроллеры, микроконтроллеры, микропроцессоры или другие электронные компоненты. Устройство может использовать схемы в сочетании с другими аппаратными или программными компонентами для выполнения вышеописанных способов. Каждый модуль, подмодуль, блок или подблок, раскрытый выше, может быть реализован по меньшей мере частично с использованием одной или более схем.

[00357] На фиг. 18 показана вычислительная среда 1810, связанная с пользовательским интерфейсом 1860. Вычислительная среда 1810 может быть частью сервера обработки данных. Вычислительная среда 1810 включает в себя процессор 1820, память 1840 и интерфейс I/O 1850.

[00358] Процессор 1820 обычно управляет общими операциями вычислительной среды 1810, такими как операции, ассоциированные с отображением, сбором данных, передачей данных и обработкой изображения. Процессор 1820 может включать в себя один или более процессоров для исполнения инструкций, чтобы выполнять все или некоторые из этапов в вышеописанных способах. Более того, процессор 1820 может включать в себя один или более модулей, которые облегчают взаимодействие между процессором 1820 и другими компонентами. Процессор может быть центральным процессором (CPU), микропроцессором, однокристальным устройством, GPU или тому подобным.

[00359] Память 1840 сконфигурирована для хранения различных типов данных для поддержки работы вычислительной среды 1810. Память 1840 может включать в себя заранее заданное программное обеспечение 1842. Примеры таких данных включают инструкции для любых приложений или способов, работающих в вычислительной среде 1810, наборы видеоданных, данные изображения и т.д. Память 1840 может быть реализована с использованием любого типа энергозависимых или энергонезависимых устройств памяти или их комбинации, таких как статическая память с произвольным доступом (SRAM), электрически стираемая программируемая постоянная память (EEPROM), стираемая программируемая постоянная память (EPROM), программируемая постоянная память (PROM), постоянная память (ROM), магнитная память, флэш-память, магнитный или оптический диск.

[00360] Интерфейс I/O 1850 обеспечивает интерфейс между процессором 1820 и периферийными интерфейсными модулями, такими как клавиатура, колесико-кнопка мыши и тому подобное. Кнопки могут включать в себя, но без ограничения, кнопку “Домой”, кнопку “Начать сканирование” и кнопку “Остановить сканирование”. Интерфейс I/O 1850 может быть соединен с кодером и декодером.

[00361] В некоторых вариантах осуществления, также предусмотрен не-кратковременный считываемый компьютером носитель данных, содержащий множество программ, таких как содержащиеся в памяти 1840, исполняемые процессором 1820 в вычислительной среде 1810, для выполнения вышеописанных способов. Например, не-кратковременный считываемый компьютером носитель данных может представлять собой ROM, RAM, CD-ROM, магнитную ленту, гибкий диск, оптическое устройство хранения данных или тому подобное.

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

[00363] В некоторых вариантах осуществления, вычислительная среда 1810 может быть реализована с одной или более специализированными интегральными схемами (ASIC), процессорами цифровых сигналов (DSP), устройствами цифровой обработки сигналов (DSPD), программируемыми логическими устройствами (PLD), программируемыми вентильными матрицами (FPGA), графическими процессорами (GPU), контроллерами, микроконтроллерами, микропроцессорами или другими электронными компонентами для выполнения вышеописанных способов.

[00364] Фиг. 23 представляет собой блок-схему, иллюстрирующую примерную систему 10 для параллельного кодирования и декодирования блоков видео в соответствии с некоторыми реализациями настоящего раскрытия. Как показано на фиг. 23, система 10 включает в себя устройство-источник 12, которое формирует и кодирует видеоданные для последующего декодирования устройством-получателем 14. Устройство-источник 12 и устройство-получатель 14 могут содержать любое из широкого спектра электронных устройств, включая настольные компьютеры или ноутбуки, планшетные компьютеры, смартфоны, телевизионные приставки, цифровые телевизоры, камеры, устройства отображения, цифровые медиаплееры, игровые консоли, устройство стриминга видео или тому подобное. В некоторых реализациях, устройство-источник 12 и устройство-получатель 14 оснащены возможностями беспроводной связи.

[00365] В некоторых реализациях, устройство-получатель 14 может принимать кодированные видеоданные, подлежащие декодированию, по линии связи 16. Линия 16 связи может содержать любой тип среды или устройства связи, способный передавать закодированные видеоданные от устройства-источника 12 на устройство-получатель 14. В одном примере, линия 16 связи может содержать среду связи, позволяющую устройству-источнику 12 передавать закодированные видеоданные непосредственно на устройство-получатель 14 в режиме реального времени. Закодированные видеоданные могут быть модулированы в соответствии со стандартом связи, таким как протокол беспроводной связи, и переданы на устройство-получатель 14. Среда связи может содержать любую беспроводную или проводную среду связи, такую как радиочастотный (RF) спектр или одна или более физических линий передачи. Среда связи может формировать часть пакетной сети, такой как локальная сеть, сеть широкого охвата или глобальная сеть, такая как Интернет. Среда связи может включать в себя маршрутизаторы, коммутаторы, базовые станции или любое другое оборудование, которое может быть полезным для облегчения связи от устройства-источника 12 к устройству-получателю 14.

[00366] В некоторых других реализациях, закодированные видеоданные могут передаваться с выходного интерфейса 22 на устройство хранения 32. Затем, к закодированным видеоданным в устройстве хранения 32 может быть получен доступ устройством-получателем 14 через входной интерфейс 28. Устройство хранения 32 может включать в себя любой из множества носителей данных с распределенным или локальным доступом, таких как жесткий диск, Blu-ray диски, цифровые универсальные диски (DVD), постоянная память на компакт-дисках (CD-ROM), флэш-память, энергозависимая или энергонезависимая память или любые другие подходящие цифровые носители данных для хранения закодированных видеоданных. В другом примере, устройство 32 хранения может соответствовать файловому серверу или другому промежуточному устройству хранения, которое может содержать закодированные видеоданные, сформированные устройством-источником 12. Устройство-источник 14 может осуществлять доступ к сохраненным видеоданным из устройства хранения 32 посредством потоковой передачи или загрузки. Файловый сервер может представлять собой компьютер любого типа, способный хранить закодированные видеоданные и передавать закодированные видеоданные на устройство-получатель 14. Примерные файловые серверы включают в себя веб-сервер (например, для веб-сайта), сервер протокола передачи файлов (FTP), устройства сетевого хранилища (NAS) или локальный дисковод. Устройство-получатель 14 может осуществлять доступ к закодированным видеоданным через любое стандартное соединение для передачи данных, включая беспроводной канал (например, соединение Wi-Fi), проводное соединение (например, цифровая абонентская линия (DSL), кабельный модем и т.д.) или их комбинацию, которая подходит для доступа к закодированным видеоданным, хранящимся на файловом сервере. Передача закодированных видеоданных с устройства хранения 32 может быть потоковой передачей, передачей загрузки или их комбинацией.

[00367] Как показано на фиг. 23, устройство-источник 12 включает в себя источник 18 видео, видеокодер 20 и выходной интерфейс 22. Источник 18 видео может включать в себя источник, такой как устройство захвата видео, например, видеокамера, видеоархив, содержащий ранее захваченное видео, интерфейс подачи видео для приема видео от поставщика видеоконтента и/или систему компьютерной графики для формирования данных компьютерной графики в качестве исходного видео или комбинацию таких источников. В качестве одного примера, если источником 18 видео является видеокамера системы охранного наблюдения, устройство-источник 12 и устройство-получатель 14 могут быть камерафонами или видеотелефонами. Однако реализации, описанные в настоящей заявке, могут быть применимы к кодированию видео в целом и могут применяться в беспроводных и/или проводных приложениях.

[00368] Захваченное, предварительно захваченное или сформированное компьютером видео может быть закодировано видеокодером 20. Закодированные видеоданные могут передаваться непосредственно на устройство-получатель 14 через выходной интерфейс 22 устройства-источника 12. Закодированные видеоданные также (или альтернативно) могут быть сохранены в устройстве хранения 32 для последующего доступа устройством-получателем 14 или другими устройствами для декодирования и/или воспроизведения. Выходной интерфейс 22 может дополнительно включать в себя модем и/или передатчик.

[00369] Устройство-получатель 14 включает в себя входной интерфейс 28, видеодекодер 30 и устройство отображения 34. Входной интерфейс 28 может включать в себя приемник и/или модем и принимать закодированные видеоданные по линии связи 16. Закодированные видеоданные, передаваемые по линии связи 16 или предоставляемые на устройстве хранения 32, могут включать в себя множество синтаксических элементов, формируемых видеокодером 20, для использования видеодекодером 30 при декодировании видеоданных. Такие синтаксические элементы могут быть включены в закодированные видеоданные, передаваемые по среде связи, сохраненные на носителе данных или сохраненные на файловом сервере.

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

[00371] Видеокодер 20 и видеодекодер 30 могут работать в соответствии с проприетарными или промышленными стандартами, такими как VVC, HEVC, MPEG-4, Part 10, AVC или расширения таких стандартов. Следует понимать, что настоящая заявка не ограничена конкретным стандартом кодирования/декодирования видео и может применяться к другим стандартам кодирования/декодирования видео. Обычно предполагается, что видеокодер 20 устройства-источника 12 может быть сконфигурирован для кодирования видеоданных в соответствии с любым из этих текущих или будущих стандартов. Аналогичным образом, также обычно предполагается, что видеодекодер 30 устройства-получателя 14 может быть сконфигурирован для декодирования видеоданных в соответствии с любым из этих текущих или будущих стандартов.

[00372] Видеокодер 20 и видеодекодер 30, каждый, могут быть реализованы в виде любой из множества подходящих схем кодера и/или декодера, таких как один или более микропроцессоров, процессоров цифровых сигналов (DSP), специализированных интегральных схем (ASIC), программируемых вентильных матриц (FPGA), дискретной логики, программного обеспечения, аппаратных средств, встроенного программного обеспечения или любых их комбинаций. При реализации частично в программном обеспечении, электронное устройство может хранить инструкции для программного обеспечения на подходящем не-кратковременном считываемом компьютером носителе и исполнять инструкции в аппаратных средствах, используя один или более процессоров для выполнения операций кодирования/декодирования видео, описанных в настоящем раскрытии. Каждый из видеокодера 20 и видеодекодера 30 может быть включен в один или более кодеров или декодеров, любой из которых может быть интегрирован как часть комбинированного кодера/декодера (кодека) в соответствующем устройстве.

[00373] Фиг. 24 представляет собой блок-схему, иллюстрирующую примерный видеокодер 20 в соответствии с некоторыми реализациями, описанными в настоящей заявке. Видеокодер 20 может выполнять кодирование с интра- и интер-предсказанием блоков видео в видеокадрах. Кодирование с интра-предсказанием основано на пространственном предсказании для уменьшения или устранения пространственной избыточности в видеоданных в пределах данного видеокадра или картинки. Кодирование с интер-предсказанием основано на временном предсказании для уменьшения или устранения временной избыточности в видеоданных в смежных видеокадрах или картинках видеопоследовательности. Следует отметить, что термин “кадр” может использоваться как синоним термина “изображение” или “картинка” в области кодирования видео.

[00374] Как показано на фиг. 24, видеокодер 20 включает в себя память 40 видеоданных, модуль 41 обработки предсказания, буфер 64 декодированных картинок (DPB), сумматор 50, модуль 52 обработки преобразования, модуль 54 квантования и модуль 56 энтропийного кодирования. Модуль 41 обработки предсказания дополнительно включает в себя модуль 42 оценки движения, модуль 44 компенсации движения, модуль 45 разбиения, модуль 46 обработки интра-предсказания и модуль 48 внутриблочного копирования (Block Copy, BC). В некоторых реализациях, видеокодер 20 также включает в себя модуль 58 обратного квантования, модуль 60 обработки обратного преобразования и сумматор 62 для восстановления блока видео. Внутриконтурный фильтр 63, такой как фильтр устранения блочности, может находиться между сумматором 62 и DPB 64 для фильтрации границ блоков для удаления артефактов блочности из восстановленного видео. Другой внутриконтурный фильтр, такой как фильтр адаптивного смещения выборки (SAO) и/или адаптивный внутриконтурный фильтр (ALF), также может использоваться в дополнение к фильтру устранения блочности для фильтрации выхода сумматора 62. В некоторых примерах, внутриконтурные фильтры могут быть опущены, и декодированный блок видео может быть напрямую предоставлен сумматором 62 в DPB 64. Видеокодер 20 может принимать форму фиксированного или программируемого аппаратного модуля или может быть разделен между одним или более из показанных фиксированных или программируемых аппаратных модулей.

[00375] Память 40 видеоданных может хранить видеоданные, подлежащие кодированию компонентами видеокодера 20. Видеоданные в памяти 40 видеоданных могут быть получены, например, из источника 18 видео, как показано на фиг. 23. DPB 64 представляет собой буфер, который хранит опорные видеоданные (например, опорные кадры или картинки) для использования при кодировании видеоданных видеокодером 20 (например, в режимах интра- или интер-кодирования с предсказанием). Память 40 видеоданных и DPB 64 могут быть образованы любым из множества устройств памяти. В различных примерах, память 40 видеоданных может быть однокристальной с другими компонентами видеокодера 20 или внекристальной по отношению к этим компонентам.

[00376] Как показано на фиг. 24, после приема видеоданных, модуль 45 разбиения в модуле 41 обработки предсказания разбивает видеоданные на блоки видео. Это разбиение может также включать в себя разбиение видеокадра на слайсы, мозаичные элементы (например, наборы блоков видео) или другие более крупные единицы кодирования (CU) в соответствии с заранее заданными структурами разделения, такими как структура квадродерева (QT), ассоциированная с видеоданными. Видеокадр может рассматриваться как двумерный массив или матрица выборок со значениями выборок. Выборка в массиве также может упоминаться как пиксел или пел. Количество выборок в горизонтальном и вертикальном направлениях (или по осям) массива или картинки определяет размер и/или разрешение видеокадра. Видеокадр может быть разделен на множество блоков видео, например, с использованием разбиения QT. Блок видео также может рассматриваться как двумерный массив или матрица выборок со значениями выборок, хотя и меньшего размера, чем видеокадр. Количество выборок в горизонтальном и вертикальном направлениях (или по осям) блока видео определяет размер блока видео. Блок видео дополнительно может быть разделен на одно или более разбиений блока или подблоки (которые могут вновь образовывать блоки) путем, например, итеративного использования QT-разбиения, разбиения двоичного дерева (BT) или разбиения троичного дерева (TT) или любой их комбинации. Следует отметить, что термин “блок” или “блок видео”, используемый здесь, может представлять собой часть, в частности прямоугольную (квадратную или неквадратную) часть кадра или картинки. Со ссылкой, например, на HEVC и VVC, блок или блок видео может представлять собой или соответствовать единице дерева кодирования (CTU), CU, единице предсказания (PU) или единице преобразования (TU) и/или может представлять собой или соответствовать соответствующему блоку, например, блоку дерева кодирования (CTB), блоку кодирования (CB), блоку предсказания (PB) или блоку преобразования (TB) и/или подблоку.

[00377] Модуль 41 обработки предсказания может выбирать один из множества возможных режимов кодирования с предсказанием, такой как один из множества режимов кодирования с интра-предсказанием или один из множества режимов кодирования с интер-предсказанием, для текущего блока видео на основе результирующих ошибок (например, скорости кодирования и уровня искажений). Модуль 41 обработки предсказания может предоставлять результирующий кодированный блок с интра- или интер-предсказанием на сумматор 50 для формирования остаточного блока и на сумматор 62 для восстановления закодированного блока для последующего использования в качестве части опорного кадра. Модуль 41 обработки предсказания также предоставляет синтаксические элементы, такие как векторы движения, указатели интра-режима, информация разбиения, и другую подобную синтаксическую информацию, в модуль 56 энтропийного кодирования.

[00378] Чтобы выбрать подходящий режим кодирования с интра-предсказанием для текущего блока видео, модуль 46 обработки с интра-предсказанием в модуле 41 обработки предсказания может выполнять кодирование с интра-предсказанием текущего блока видео относительно одного или более соседних блоков в том же кадре, что и текущий блок, подлежащий кодированию, для обеспечения пространственного предсказания. Модуль 42 оценки движения и модуль 44 компенсации движения в модуле 41 обработки предсказания выполняют кодирование с интер-предсказанием текущего блока видео относительно одного или более блоков предсказания в одном или более опорных кадрах для обеспечения временного предсказания. Видеокодер 20 может выполнять множество проходов кодирования, например, для выбора соответствующего режима кодирования для каждого блока видеоданных.

[00379] В некоторых реализациях, модуль 42 оценки движения определяет режим интер-предсказания для текущего видеокадра путем формирования вектора движения, который указывает смещение блока видео в текущем видеокадре относительно блока предсказания в опорном видеокадре, в соответствии с заранее заданным шаблоном в последовательности видеокадров. Оценка движения, выполняемая модулем 42 оценки движения, представляет собой процесс формирования векторов движения, которые оценивают движение для блоков видео. Вектор движения, например, может указывать смещение блока видео в пределах текущего видеокадра или картинки относительно блока предсказания в опорном кадре относительно текущего блока, кодируемого в текущем кадре. Заранее заданный шаблон может обозначать видеокадры в последовательности как P-кадры или B-кадры. Модуль 48 внутриблочного копирования (BC) может определять векторы, например, блочные векторы, для кодирования способом внутриблочного копирования аналогично определению векторов движения модулем 42 оценки движения для интер-предсказания, или может использовать модуль 42 оценки движения для определения блочного вектора.

[00380] Блок предсказания для блока видео может представлять собой или может соответствовать блоку или опорному блоку опорного кадра, который считается точно соответствующим блоку видео, подлежащему кодированию, в терминах пиксельной разности, которая может определяться суммой абсолютных разностей (SAD), суммой квадратов разностей (SSD) или другими разностными метриками. В некоторых реализациях, видеокодер 20 может вычислять значения для суб-целочисленных положений пикселов опорных кадров, сохраненных в DPB 64. Например, видеокодер 20 может интерполировать значения положений в одну четверть пиксела, положений в одну восьмую пиксела или других дробных пиксельных положений опорного кадра. Следовательно, модуль 42 оценки движения может выполнять поиск движения относительно полно-пиксельных положений и дробно-пиксельных положений и выводить вектор движения с дробно-пиксельной точностью.

[00381] Модуль 42 оценки движения вычисляет вектор движения для блока видео в кодированном кадре с интер-предсказанием путем сравнения положения блока видео с положением блока предсказания опорного кадра, выбранного из первого списка опорных кадров (список 0) или второго списка опорных кадров (список 1), каждый из которых идентифицирует один или более опорных кадров, сохраненных в DPB 64. Модуль 42 оценки движения отправляет вычисленный вектор движения в модуль 44 компенсации движения, а затем в модуль 56 энтропийного кодирования.

[00382] Компенсация движения, выполняемая модулем 44 компенсации движения, может включать в себя выборку или формирование блока предсказания на основе вектора движения, определенного модулем 42 оценки движения. После приема вектора движения для текущего блока видео, модуль 44 компенсации движения может локализовать блок предсказания, на который указывает вектор движения, в одном из списков опорных кадров, извлечь блок предсказания из DPB 64 и переслать блок предсказания в сумматор 50. Затем сумматор 50 формирует остаточный блок видео из значений пиксельной разности путем вычитания значений пикселов блока предсказания, предоставленного модулем 44 компенсации движения, из значений пикселов текущего кодируемого блока видео. Значения пиксельной разности, формирующие остаточный блок видео, могут включать в себя разностные компоненты яркости или цветности или и то, и другое. Модуль 44 компенсации движения может также формировать синтаксические элементы, ассоциированные с блоками видео видеокадра для использования видеодекодером 30 при декодировании блоков видео видеокадра. Синтаксические элементы могут включать в себя, например, синтаксические элементы, определяющие вектор движения, используемый для идентификации блока предсказания, любые флаги, указывающие режим предсказания, или любую другую синтаксическую информацию, описанную здесь. Отметим, что модуль 42 оценки движения и модуль 44 компенсации движения могут быть в высокой степени интегрированными, но проиллюстрированы отдельно для концептуальных целей.

[00383] В некоторых реализациях, модуль 48 внутриблочного копирования может формировать векторы и извлекать блоки предсказания способом, аналогичным описанному выше в связи с модулем 42 оценки движения и модулем 44 компенсации движения, но при этом блоки предсказания находятся в том же кадре, что и кодируемый текущий блок, и при этом векторы называются векторами блоков в отличие от векторов движения. В частности, модуль 48 внутриблочного копирования может определять режим интра- предсказания для использования, чтобы кодировать текущий блок. В некоторых примерах, модуль 48 внутриблочного копирования может кодировать текущий блок, используя различные режимы интра- предсказания, например, во время отдельных проходов кодирования, и тестировать их производительность посредством анализа скорости-искажения. Затем модуль 48 внутриблочного копирования может выбрать, среди различных протестированных режимов интра-предсказания, подходящий режим интра-предсказания для использования и соответственно сформировать указатель интра- режима. Например, модуль 48 внутриблочного копирования может вычислять значения скорости-искажения, используя анализ скорости-искажения для различных протестированных режимов интра-предсказания, и выбирать режим интра-предсказания, имеющий наилучшие характеристики скорости-искажения среди протестированных режимов, в качестве подходящего режима интра-предсказания для использования. Анализ скорости-искажения обычно определяет величину искажения (или ошибки) между закодированным блоком и исходным, незакодированным блоком, который был закодирован для вывода закодированного блока, а также битрейт (т.е. количество бит), используемый для формирования закодированного блока. Модуль 48 внутриблочного копирования может вычислять отношения из искажений и скоростей для различных закодированных блоков, чтобы определить, какой режим интра-предсказания демонстрирует наилучшее значение скорости-искажения для блока.

[00384] В других примерах, модуль 48 внутриблочного копирования может использовать модуль 42 оценки движения и модуль 44 компенсации движения, полностью или частично, для выполнения таких функций для предсказания с внутриблочным копированием в соответствии с реализациями, описанными здесь. В любом случае, для внутриблочного копирования, блок предсказания может представлять собой блок, который считается точно соответствующим блоку, подлежащему кодированию, в терминах пиксельной разности, что может быть определено с помощью SAD, SSD или других разностных метрик, и идентификация блока предсказания может включать в себя вычисление значений для суб-целочисленных пиксельных положений.

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

[00386] Модуль 46 обработки интра-предсказания может выполнять интра-предсказание текущего блока видео, в качестве альтернативы интер-предсказанию, выполняемому модулем 42 оценки движения и модулем 44 компенсации движения, или внутриблочному копированию, выполняемому модулем 48 внутриблочного копирования, как описано выше. В частности, модуль 46 обработки интра-предсказания может определять режим интра-предсказания для использования, чтобы кодировать текущий блок. Для этого модуль 46 обработки интра-предсказания может кодировать текущий блок, используя различные режимы интра-предсказания, например, во время отдельных проходов кодирования, и модуль 46 обработки интра-предсказания (или модуль выбора режима, в некоторых примерах) может выбирать подходящий режим интра-предсказания для использования из протестированных режимов интра-предсказания. Модуль 46 обработки интра-предсказания может предоставлять информацию, указывающую выбранный режим интра-предсказания для блока, на модуль 56 энтропийного кодирования. Модуль 56 энтропийного кодирования может кодировать информацию, указывающую выбранный режим интра-предсказания, в битовом потоке.

[00387] После того, как модуль 41 обработки предсказания определяет блок предсказания для текущего блока видео посредством либо интер-предсказания, либо интра-предсказания, сумматор 50 формирует остаточный блок видео путем вычитания блока предсказания из текущего блока видео. Остаточные видеоданные в остаточном блоке могут быть включены в одну или более TU и предоставлены на модуль 52 обработки преобразования. Модуль 52 обработки преобразования преобразует остаточные видеоданные в остаточные коэффициенты преобразования, используя преобразование, такое как дискретное косинусоидальное преобразование (DCT) или концептуально аналогичное преобразование.

[00388] Модуль 52 обработки преобразования может отправлять результирующие коэффициенты преобразования в модуль 54 квантования. Модуль 54 квантования выполняет квантование коэффициентов преобразования для дальнейшего снижения битрейта. Процесс квантования может также уменьшить битовую глубину, ассоциированную с некоторыми или всеми коэффициентами. Степень квантования может быть изменена путем настройки параметра квантования. В некоторых примерах, модуль 54 квантования может затем выполнять сканирование матрицы, включающей квантованные коэффициенты преобразования. Альтернативно, модуль 56 энтропийного кодирования может выполнять сканирование.

[00389] После квантования, модуль 56 энтропийного кодирования энтропийно кодирует квантованные коэффициенты преобразования в битовый поток видео, используя, например, контекстно-адаптивное кодирование переменной длины (CAVLC), контекстно-адаптивное двоичное арифметическое кодирование (CABAC), контекстно-адаптивное двоичное арифметическое кодирование на основе синтаксиса (SBAC), энтропийное кодирование с разбиением интервала вероятности (PIPE) или другую методологию или метод энтропийного кодирования. Затем закодированный битовый поток может быть передан в видеодекодер 30, как показано на фиг. 23, или заархивирован в устройстве хранения 32, как показано на фиг. 23, для последующей передачи на видеодекодер 30 или извлечения из него. Модуль 56 энтропийного кодирования может также энтропийно кодировать векторы движения и другие синтаксические элементы для текущего кодируемого видеокадра.

[00390] Модуль 58 обратного квантования и модуль 60 обработки обратного преобразования применяют обратное квантование и обратное преобразование, соответственно, для восстановления остаточного блока видео в пиксельной области для формирования опорного блока для предсказания других блоков видео. Как отмечено выше, модуль 44 компенсации движения может формировать блок предсказания с компенсацией движения из одного или более опорных блоков из кадров, сохраненных в DPB 64. Модуль 44 компенсации движения может также применять один или более интерполяционных фильтров к блоку предсказания для вычисления суб-целочисленных пиксельных значений для использования при оценке движения.

[00391] Сумматор 62 добавляет восстановленный остаточный блок к блоку предсказания с компенсацией движения, созданному модулем 44 компенсации движения, чтобы сформировать опорный блок для сохранения в DPB 64. Затем опорный блок может быть использован модулем 48 внутриблочного копирования, модулем 42 оценки движения и модулем 44 компенсации движения в качестве блока предсказания для интер-предсказания другого блока видео в последующем видеокадре.

[00392] Фиг. 25 представляет собой блок-схему, иллюстрирующую примерный видеодекодер 30 в соответствии с некоторыми реализациями настоящей заявки. Видеодекодер 30 включает в себя память 79 видеоданных, модуль 80 энтропийного декодирования, модуль 81 обработки предсказания, модуль 86 обратного квантования, модуль 88 обработки обратного преобразования, сумматор 90 и DPB 92. Модуль 81 обработки предсказания дополнительно включает в себя модуль 82 компенсации движения, модуль 84 интра-предсказания и модуль 85 внутриблочного копирования. Видеодекодер 30 может выполнять процесс декодирования, в целом обратный процессу кодирования, описанному выше в отношении видеокодера 20 в связи с фиг. 24. Например, модуль 82 компенсации движения может формировать данные предсказания на основе векторов движения, принятых от модуля 80 энтропийного декодирования, в то время как модуль 84 интра-предсказания может формировать данные предсказания на основе указателей режима интра-предсказания, принятых от модуля 80 энтропийного декодирования.

[00393] В некоторых примерах, модуль видеодекодера 30 может иметь задачу выполнения реализации настоящей заявки. Также, в некоторых примерах, реализации настоящего раскрытия могут быть разделены между одним или более модулями видеодекодера 30. Например, модуль 85 внутриблочного копирования может выполнять реализации настоящей заявки самостоятельно или в комбинации с другими модулями видеодекодера 30, такими как модуль 82 компенсации движения, модуль 84 интра-предсказания и модуль 80 энтропийного декодирования. В некоторых примерах, видеодекодер 30 может не включать в себя модуль 85 внутриблочного копирования, и функциональность модуля 85 внутриблочного копирования может выполняться другими компонентами модуля 81 обработки предсказания, такими как модуль 82 компенсации движения.

[00394] Память 79 видеоданных может хранить видеоданные, такие как закодированный битовый поток видео, для декодирования другими компонентами видеодекодера 30. Видеоданные, сохраненные в памяти 79 видеоданных, могут быть получены, например, из устройства хранения 32, из локального источника видео, такого как камера, посредством проводной или беспроводной сетевой передачи видеоданных или путем доступа к физическим носителям данных (например, флэш-накопителю или жесткому диску). Память 79 видеоданных может включать в себя буфер кодированных картинок (CPB), который хранит закодированные видеоданные из закодированного битового потока видео. DPB 92 видеодекодера 30 хранит опорные видеоданные для использования при декодировании видеоданных видеодекодером 30 (например, в режимах кодирования с интра- или интер-предсказанием). Память 79 видеоданных и DPB 92 могут быть образованы любым из множества устройств памяти, таких как динамическая память с произвольным доступом (DRAM), включая синхронную DRAM (SDRAM), магниторезистивную (MRAM), резистивную RAM (RRAM) или другие типы устройств памяти. Для иллюстрации, память 79 видеоданных и DPB 92 изображены как два отдельных компонента видеодекодера 30 на фиг. 25. Но специалисту в данной области техники будет очевидно, что память 79 видеоданных и DPB 92 могут быть обеспечены одним и тем же устройством памяти или отдельными устройствами памяти. В некоторых примерах, память 79 видеоданных может быть однокристальной с другими компонентами видеодекодера 30 или внекристальной по отношению к этим компонентам.

[00395] Во время процесса декодирования, видеодекодер 30 принимает закодированный битовый поток видео, который представляет блоки видео закодированного видеокадра и ассоциированные синтаксические элементы. Видеодекодер 30 может принимать синтаксические элементы на уровне видеокадра и/или блока видео. Модуль 80 энтропийного декодирования видеодекодера 30 энтропийно декодирует битовый поток для формирования квантованных коэффициентов, векторов движения или указателей режима интра-предсказания и других синтаксических элементов. Затем модуль 80 энтропийного декодирования пересылает векторы движения или указатели режима интра-предсказания и другие синтаксические элементы на модуль 81 обработки предсказания.

[00396] Когда видеокадр кодируется как кодируемый с интра-предсказанием (I) кадр или для блоков с интра-предсказанием в других типах кадров, модуль 84 интра-предсказания модуля 81 обработки предсказания может формировать данные предсказания для блока видео текущего видеокадра на основе сигнализированного режима интра-предсказания и опорных данных из ранее декодированных блоков текущего кадра.

[00397] Когда видеокадр кодируется как кодируемый с интер- предсказанием (т.е. B или P) кадр, модуль 82 компенсации движения модуля 81 обработки предсказания создает один или более блоков предсказания для блока видео текущего видеокадра на основе векторов движения и других синтаксических элементов, принятых от модуля 80 энтропийного декодирования. Каждый из блоков предсказания может быть создан из опорного кадра в одном из списков опорных кадров. Видеодекодер 30 может создавать списки опорных кадров, список 0 и список 1, используя методы построения по умолчанию на основе опорных кадров, сохраненных в DPB 92.

[00398] В некоторых примерах, когда блок видео кодируется в соответствии с описанным здесь режимом внутриблочного копирования, модуль 85 внутриблочного копирования модуля 81 обработки предсказания создает блоки предсказания для текущего блока видео на основе векторов блоков и других синтаксических элементов, принятых от модуля 80 энтропийного декодирования. Блоки предсказания могут находиться в пределах восстановленной области той же картинки, что и текущий блок видео, определенный видеокодером 20.

[00399] Модуль 82 компенсации движения и/или модуль 85 внутриблочного копирования определяет информацию предсказания для блока видео текущего видеокадра путем синтаксического анализа векторов движения и других синтаксических элементов, а затем использует информацию предсказания для создания блоков предсказания для текущего декодируемого блока видео. Например, модуль 82 компенсации движения использует некоторые из принятых синтаксических элементов для определения режима предсказания (например, интра- или интер-предсказания), используемого для кодирования блоков видео видеокадра, типа кадра интер-предсказания (например, B или P), информации о построении для одного или более списков опорных кадров для кадра, векторов движения для каждого закодированного с интер-предсказанием блока видео в кадре, состояния интер-предсказания для каждого закодированного с интер-предсказанием блока видео в кадре и другой информации для декодирования блоков видео в текущем видеокадре.

[00400] Аналогично, модуль 85 внутриблочного копирования может использовать некоторые из принятых синтаксических элементов, например, флаг, для определения, что текущий блок видео был предсказан с использованием режима внутриблочного копирования, структурной информации о том, какие блоки видео из кадра находятся в пределах восстановленной области и должны быть сохранены в DPB 92, векторов блоков для каждого предсказанного с внутриблочным копированием блока видео в кадре, статуса предсказания с внутриблочным копированием для каждого предсказанного с внутриблочным копированием блока видео в кадре и другой информации для декодирования блоков видео в текущем видеокадре.

[00401] Модуль 82 компенсации движения может также выполнять интерполяцию с использованием интерполяционных фильтров, как используется видеокодером 20 во время кодирования блоков видео, для вычисления интерполированных значений для суб-целочисленных пикселов опорных блоков. В этом случае, модуль 82 компенсации движения может определять интерполяционные фильтры, используемые видеокодером 20, из принятых синтаксических элементов и использовать интерполяционные фильтры для создания блоков предсказания.

[00402] Модуль 86 обратного квантования выполняет обратное квантование квантованных коэффициентов преобразования, предоставленных в битовом потоке, и энтропийно декодированных модулем 80 энтропийного декодирования, с использованием того же параметра квантования, вычисленного видеокодером 20 для каждого блока видео в видеокадре, чтобы определить степень квантования. Модуль 88 обработки обратного преобразования применяет обратное преобразование, например, обратное DCT, обратное целочисленное преобразование или концептуально аналогичный процесс обратного преобразования, к коэффициентам преобразования, чтобы восстановить остаточные блоки в пиксельной области.

[00403] После того, как модуль 82 компенсации движения или модуль 85 внутриблочного копирования формирует блок предсказания для текущего блока видео на основе векторов и других синтаксических элементов, сумматор 90 восстанавливает декодированный блок видео для текущего блока видео путем суммирования остаточного блока из модуля 88 обработки обратного преобразования и соответствующего блока предсказания, сформированного модулем 82 компенсации движения и модулем 85 внутриблочного копирования. Внутриконтурный фильтр 91, такой как фильтр устранения блочности, фильтр SAO и/или ALF, может находиться между сумматором 90 и DPB 92 для дальнейшей обработки декодированного блока видео. В некоторых примерах, внутриконтурный фильтр 91 может быть опущен, и декодированный блок видео может быть напрямую предоставлен сумматором 90 в DPB 92. Декодированные блоки видео в данном кадре затем сохраняются в DPB 92, который хранит опорные кадры, используемые для последующей компенсации движения следующих блоков видео. DPB 92 или устройство памяти, отдельное от DPB 92, может также сохранять декодированное видео для последующего представления на устройстве отображения, таком как устройство отображения 34 на фиг. 23.

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

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

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

название год авторы номер документа
КОДИРОВАНИЕ КОЭФФИЦИЕНТОВ И ОСТАТКА ДЛЯ КОДИРОВАНИЯ ВИДЕО 2022
  • Цзху, Хун-Цзхен
  • Сю, Сяоюй
  • Чэнь, И-Вэнь
  • Чэнь, Вэй
  • Ко, Чэ-Вэй
  • Ван, Сянлинь
  • Юй, Бин
RU2820669C1
СПОСОБ КОДИРОВАНИЯ ИЗОБРАЖЕНИЯ НА ОСНОВЕ ПРЕОБРАЗОВАНИЯ И УСТРОЙСТВО ДЛЯ ЕГО ОСУЩЕСТВЛЕНИЯ 2020
  • Коо, Моонмо
  • Лим, Дзаехиун
  • Ким, Сеунгхван
  • Салехифар, Мехди
RU2806283C2
СПОСОБ КОДИРОВАНИЯ ИЗОБРАЖЕНИЯ НА ОСНОВЕ ПРЕОБРАЗОВАНИЯ И УСТРОЙСТВО ДЛЯ ЕГО ОСУЩЕСТВЛЕНИЯ 2020
  • Коо, Моонмо
  • Лим, Дзаехиун
  • Ким, Сеунгхван
  • Салехифар, Мехди
RU2793775C1
СПОСОБ КОДИРОВАНИЯ/ДЕКОДИРОВАНИЯ ВИДЕОСИГНАЛОВ И УСТРОЙСТВО ДЛЯ ЭТОГО 2019
  • Коо, Моонмо
  • Ким, Сеунгхван
  • Салехифар, Мехди
  • Лим, Дзаехиун
RU2792219C2
СПОСОБ КОДИРОВАНИЯ/ДЕКОДИРОВАНИЯ ВИДЕОСИГНАЛОВ И УСТРОЙСТВО ДЛЯ ЭТОГО 2019
  • Коо, Моонмо
  • Ким, Сеунгхван
  • Салехифар, Мехди
  • Лим, Дзаехиун
RU2766571C1
СПОСОБ КОДИРОВАНИЯ ИЗОБРАЖЕНИЯ НА ОСНОВЕ ПРЕОБРАЗОВАНИЯ И УСТРОЙСТВО ДЛЯ ЕГО ОСУЩЕСТВЛЕНИЯ 2020
  • Коо, Моонмо
  • Лим, Дзаехиун
  • Ким, Сеунгхван
  • Салехифар, Мехди
RU2803457C2
СПОСОБ КОДИРОВАНИЯ ИЗОБРАЖЕНИЯ НА ОСНОВЕ ПРЕОБРАЗОВАНИЯ И УСТРОЙСТВО ДЛЯ ЕГО ОСУЩЕСТВЛЕНИЯ 2020
  • Коо, Моонмо
  • Лим, Дзаехиун
  • Ким, Сеунгхван
  • Салехифар, Мехди
RU2795932C1
СПОСОБ И АППАРАТНЫЙ КОМПОНЕНТ СИГНАЛИЗАЦИИ ЧИСЛА КАНДИДАТОВ ДЛЯ РЕЖИМА СЛИЯНИЯ 2021
  • Филиппов, Алексей Константинович
  • Руфицкий, Василий Алексеевич
  • Алшина, Елена Александровна
RU2823267C1
КОДИРОВАНИЕ ИЗОБРАЖЕНИЯ ИЛИ ВИДЕО НА ОСНОВЕ РЕЖИМА ПАЛИТРЫ 2020
  • Чжао, Цзе
  • Палури, Сеетхал
  • Ким, Сеунгхван
RU2814221C2
КОДИРОВАНИЕ ИЗОБРАЖЕНИЯ ИЛИ ВИДЕО НА ОСНОВЕ РЕЖИМА ПАЛИТРЫ 2020
  • Чжао, Цзе
  • Палури, Сеетхал
  • Ким, Сеунгхван
RU2793826C1

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

Реферат патента 2024 года КОДИРОВАНИЕ ОСТАТКОВ И КОЭФФИЦИЕНТОВ ДЛЯ КОДИРОВАНИЯ ВИДЕО

Изобретение относится к области кодирования и сжатия видео, в частности к усовершенствованиям и упрощениям кодирования остатков и коэффициентов для кодирования видео. Технический результат заключается в повышении эффективности степени сжатия видеоданных сводя к минимуму ухудшения качества видео. Предложены способы, устройства и не-кратковременные считываемые компьютером носители данных для кодирования видео. Способ кодирования видео включает: прием декодером флага расширения диапазона набора параметров последовательности (SPS), который указывает, присутствует ли синтаксическая структура, sps_range_extension, в синтаксических структурах полезной нагрузки последовательности необработанных байтов (RBSP) заголовка слайса (SH), на основе значения флага расширения диапазона SPS. 3 н. и 2 з.п. ф-лы, 39 ил., 70 табл.

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

1. Способ для декодирования видео, содержащий:

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

при этом способ дополнительно содержит:

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

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

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

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

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

3. Способ для декодирования видео по п. 1, дополнительно содержащий:

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

4. Устройство для декодирования видео, содержащее:

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

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

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

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

ВENJAMIN BROSS et al
Печь-кухня, могущая работать, как самостоятельно, так и в комбинации с разного рода нагревательными приборами 1921
  • Богач В.И.
SU10A1
Способ восстановления спиралей из вольфрамовой проволоки для электрических ламп накаливания, наполненных газом 1924
  • Вейнрейх А.С.
  • Гладков К.К.
SU2020A1
ZHOU T
et al
Топка с несколькими решетками для твердого топлива 1918
  • Арбатский И.В.
SU8A1

RU 2 824 946 C2

Авторы

Цзху, Хун-Цзхэн

Сю, Сяоюй

Чэнь, И-Вэнь

Чэнь, Вэй

Ко, Чэ-Вэй

Ван, Сянлинь

Юй, Бин

Даты

2024-08-16Публикация

2022-01-25Подача