ОБЛАСТЬ ТЕХНИКИ
Варианты осуществления настоящей заявки (раскрытия) в целом относятся к области обработки изображений и, более конкретно, к сигнализации синтаксиса.
УРОВЕНЬ ТЕХНИКИ
Кодирование/декодирование видео (кодирование и декодирование видео) используется в широком спектре приложений для цифрового видео, например, для вещания цифрового телевидения, передачи видео через Интернет и мобильные сети, разговорных приложений в реальном времени, таких как видеочат, видеоконференции, дисков DVD и Blu-ray, систем сбора и редактирования видеоконтента, и видеокамер охранных приложений.
Объем видеоданных, необходимых для отображения даже относительно короткого видео, может быть значительным, что может привести к трудностям, когда эти данные должны передаваться потоком или иным образом передаваться по сети связи с ограниченной пропускной способностью. Таким образом, видеоданные обычно сжимаются перед передачей по современным телекоммуникационным сетям. Размер видео также может быть проблемой, когда видео сохраняется на запоминающем устройстве, поскольку ресурсы памяти могут быть ограничены. Устройства сжатия видео часто используют программное и/или аппаратное обеспечение в источнике для кодирования видеоданных перед их передачей или сохранением, тем самым уменьшая объем данных, необходимых для представления цифровых видеоизображений. Сжатые данные затем принимаются в месте назначения устройством декомпрессии видео, которое декодирует эти видеоданные. В условиях ограниченных сетевых ресурсов и постоянно растущих требований к более высокому качеству видео желательны улучшенные методы сжатия и декомпрессии, которые улучшают степень сжатия с незначительным ущербом для качества изображения или вовсе без него.
СУЩНОСТЬ ИЗОБРЕТЕНИЯ
Варианты осуществления настоящей заявки обеспечивают аппаратные компоненты и способы для кодирования и декодирования по независимым пунктам формулы изобретения.
Вышеупомянутые и другие цели достигаются объектом по независимым пунктам формулы изобретения. Дополнительные формы реализации очевидны из зависимых пунктов формулы изобретения, описания и фигур.
Конкретные варианты осуществления описаны в независимых пунктах приложенной формулы изобретения, а другие варианты осуществления - в ее зависимых пунктах.
Первый аспект настоящего изобретения обеспечивает способ кодирования/декодирования, реализуемый устройством декодирования, причем способ содержит: получение значения синтаксического элемента из битового потока, при этом значение синтаксического элемента связано с параметром управления деблокированием для компоненты цветности слайса кодируемого/декодируемого изображения; выделение синтаксическим анализом значения параметра управления деблокированием для компоненты цветности слайса из битового потока, когда значение синтаксического элемента равно предустановленному значению, при этом предустановленным значением является целочисленное значение. В примере предустановленное значение не равно 0. В примере предустановленное значение равно 1.
В одной реализации способ дополнительно содержит: выполнение процесса деблокирования в отношении блока в слайсе согласно значению параметра управления деблокированием.
Согласно вариантам осуществления настоящего изобретения раскрыта схема сигнализации параметра управления деблокированием, причем параметр управления деблокированием для компоненты цветности сигнализируется условно. Когда форматом цветности является (4:0:0 или (4:4:4 и используется режим кодирования/декодирования отдельной цветовой плоскости)), параметр управления деблокированием для компоненты цветности не сигнализируется в битовом потоке. Следовательно, эффективность декодирования и использование битового потока были улучшены.
В одной реализации значение синтаксического элемента получают из набора параметров изображения, PPS.
В одной реализации значение параметра управления деблокированием получают из PPS.
В одной реализации значение параметра управления деблокированием получают из заголовка изображения, PH.
В одной реализации значение параметра управления деблокированием получают из заголовка слайса, SH.
В одной реализации, когда в видеопоследовательности отсутствует цветовая компонента, значение синтаксического элемента равно 0.
В одной реализации параметр управления деблокированием сигнализируется (только) когда видеопоследовательность имеет цветовую компоненту.
В одной реализации значение синтаксического элемента используется для определения того, является ли параметр управления деблокированием для компоненты яркости слайса таким же, как параметр управления деблокированием для компоненты цветности слайса.
В одной реализации способ дополнительно содержит:
установку значения параметра управления деблокированием для компоненты цветности слайса равным значению параметра управления деблокированием для компоненты яркости слайса, когда значение синтаксического элемента не равно предустановленному значению.
В одной реализации значение параметра управления деблокированием представляет собой предустановленные смещения параметров деблокирования, которое применяется к совместной Cb-Cr-компоненте слайса.
Второй аспект настоящего изобретения обеспечивает аппаратный компонент декодирования видео, содержащий: модуль синтаксического анализа, который выполнен с возможностью получения значения синтаксического элемента из битового потока, при этом значение синтаксического элемента связано с параметром управления деблокированием для компоненты цветности слайса кодируемого/декодируемого изображения; причем модуль синтаксического анализа выполнен с возможностью получения значения параметра управления деблокированием для компоненты цветности слайса из битового потока, когда значение синтаксического элемента равно предустановленному значению, при этом предустановленным значением является целочисленное значение.
В одной реализации аппаратный компонент декодирования дополнительно содержит модуль приема, который выполнен с возможностью получения битового потока.
В одной реализации аппаратный компонент декодирования дополнительно содержит модуль деблокирования, который выполнен с возможностью выполнения процесса деблокирования в отношении блока в слайсе согласно значению параметра управления деблокированием.
Согласно вариантам осуществления настоящего изобретения раскрыта схема сигнализации параметра управления деблокированием, причем параметр управления деблокированием для компоненты цветности сигнализируется условно. Когда форматом цветности является (4:0:0 или (4:4:4 и используется режим кодирования/декодирования отдельной цветовой плоскости)), параметр управления деблокированием для компоненты цветности не сигнализируется в битовом потоке. Следовательно, эффективность декодирования и использование битового потока были улучшены.
В одной реализации значение синтаксического элемента получают из набора параметров изображения, PPS.
В одной реализации значение параметра управления деблокированием получают из PPS.
В одной реализации значение параметра управления деблокированием получают из заголовка изображения, PH.
В одной реализации значение параметра управления деблокированием получают из заголовка слайса, SH.
В одной реализации, когда в видеопоследовательности отсутствует цветовая компонента, значение синтаксического элемента равно 0.
В одной реализации параметр управления деблокированием сигнализируется (только) когда видеопоследовательность имеет цветовую компоненту.
В одной реализации значение синтаксического элемента используется для определения того, является ли параметр управления деблокированием для компоненты яркости слайса таким же, как параметр управления деблокированием для компоненты цветности слайса.
В одной реализации модуль синтаксического анализа дополнительно выполнен с возможностью:
установку значения параметра управления деблокированием для компоненты цветности слайса равным значению параметра управления деблокированием для компоненты яркости слайса, когда значение синтаксического элемента не равно предустановленному значению.
В одной реализации значение параметра управления деблокированием представляет собой предустановленные смещения параметров деблокирования, которое применяется к совместной Cb-Cr-компоненте слайса.
Третий аспект настоящего изобретения обеспечивает способ кодирования/декодирования, реализуемый устройством кодирования, причем способ содержит:
определение значения синтаксического элемента для слайса кодируемого/декодируемого изображения, при этом значение синтаксического элемента связано с параметром управления деблокированием для компоненты цветности слайса; кодирование значения параметра управления деблокированием для компоненты цветности блока кодирования/декодирования в битовый поток, когда определено, что значение синтаксического элемента равно предустановленному значению, причем предустановленное значение является целочисленным значением. В примере предустановленное значение не равно 0. В примере предустановленное значение равно 1.
Согласно вариантам осуществления настоящего изобретения раскрыта схема сигнализации параметра управления деблокированием, причем параметр управления деблокированием для компоненты цветности сигнализируется условно. Когда форматом цветности является (4:0:0 или (4:4:4 и используется режим кодирования/декодирования отдельной цветовой плоскости)), параметр управления деблокированием для компоненты цветности не сигнализируется в битовом потоке. Следовательно, эффективность декодирования и использование битового потока были улучшены.
В одной реализации значение синтаксического элемента сигнализируется в PPS.
В одной реализации значение параметра управления деблокированием сигнализируется в PPS.
В одной реализации значение параметра управления деблокированием сигнализируется в заголовке изображения, PH.
В одной реализации значение параметра управления деблокированием сигнализируют в заголовке слайса, SH.
В одной реализации, когда в видеопоследовательности отсутствует цветовая компонента, значение синтаксического элемента определяется равным 0.
В одной реализации параметр управления деблокированием сигнализируется (только) когда видеопоследовательность имеет цветовую компоненту.
В одной реализации значение синтаксического элемента используется для определения того, является ли параметр управления деблокированием для компоненты яркости слайса таким же, как параметр управления деблокированием для компоненты цветности слайса.
В одной реализации значение параметра управления деблокированием представляет собой предустановленные смещения параметров деблокирования, которое применяется к совместной Cb-Cr-компоненте слайса.
Четвертый аспект настоящего изобретения обеспечивает аппаратный компонент кодирования видео, содержащий: модуль определения, который выполнен с возможностью определения значения синтаксического элемента для слайса кодируемого/декодируемого изображения, при этом значение синтаксического элемента связано с параметром управления деблокированием для компоненты цветности слайса; модуль обработки, который выполнен с возможностью кодирования значения параметра управления деблокированием для компоненты цветности слайса в битовый поток, когда определено, что значение синтаксического элемента равно предустановленному значению, при этом предустановленным значением является целочисленное значение. В примере предустановленное значение не равно 0. В примере предустановленное значение равно 1.
Согласно вариантам осуществления настоящего изобретения раскрыта схема сигнализации параметра управления деблокированием, причем параметр управления деблокированием для компоненты цветности сигнализируется условно. Когда форматом цветности является (4:0:0 или (4:4:4 и используется режим кодирования/декодирования отдельной цветовой плоскости)), параметр управления деблокированием для компоненты цветности не сигнализируется в битовом потоке. Следовательно, эффективность декодирования и использование битового потока были улучшены.
В одной реализации значение синтаксического элемента сигнализируется в PPS.
В одной реализации значение параметра управления деблокированием сигнализируется в PPS.
В одной реализации значение параметра управления деблокированием сигнализируется в заголовке изображения, PH.
В одной реализации значение параметра управления деблокированием сигнализируют в заголовке слайса, SH.
В одной реализации, когда в видеопоследовательности отсутствует цветовая компонента, значение синтаксического элемента определяется равным 0.
В одной реализации параметр управления деблокированием сигнализируется (только) когда видеопоследовательность имеет цветовую компоненту.
В одной реализации значение синтаксического элемента используется для определения того, является ли параметр управления деблокированием для компоненты яркости слайса таким же, как параметр управления деблокированием для компоненты цветности слайса.
В одной реализации значение параметра управления деблокированием представляет собой предустановленные смещения параметров деблокирования, которое применяется к совместной Cb-Cr-компоненте слайса.
Пятый аспект настоящего изобретения обеспечивает декодер, содержащий схему обработки для осуществления способа согласно первому аспекту и любой реализации этого первого аспекта.
Шестой аспект настоящего изобретения обеспечивает компьютерный программный продукт, содержащий программный код для выполнения способа согласно первому аспекту, третьему аспекту и любой реализации первого аспекта, третьего аспекта при исполнении на компьютере или процессоре.
Седьмой аспект настоящего изобретения обеспечивает декодер, содержащий: один или несколько процессоров; и долговременный машиночитаемый запоминающий носитель, связанный с процессорами и хранящий программную часть для исполнения процессорами, при этом программная часть, когда исполняется процессорами, конфигурирует декодер для осуществления способа по любому из первого аспекта, третьего аспекта и любой реализации первого аспекта, третьего аспекта.
Восьмой аспект настоящего изобретения обеспечивает долговременный машиночитаемый носитель, несущий программный код, который при исполнении компьютерным устройством побуждает компьютерное устройство к выполнению способа по любому из первого аспекта, третьего аспекта и любой реализации первого аспекта, третьего аспекта.
Девятый аспект настоящего изобретения обеспечивает кодер, содержащий схему обработки для осуществления способа согласно третьему аспекту и любой реализации этого третьего аспекта.
Десятый аспект настоящего изобретения обеспечивает кодер, содержащий: один или несколько процессоров; и долговременный машиночитаемый запоминающий носитель, связанный с процессорами и хранящий программную часть для исполнения процессорами, при этом программная часть, когда исполняется процессорами, конфигурирует декодер для осуществления способа по любому из третьего аспекта и любой реализации третьего аспекта.
Одиннадцатый аспект настоящего изобретения обеспечивает долговременный запоминающий носитель, содержащий битовый поток, кодируемый/декодируемый способом по любому из вышеуказанных вариантов осуществления. Двенадцатый аспект настоящего изобретения обеспечивает кодируемый битовый поток для видеосигнала посредством включения множества синтаксических элементов, при этом множество синтаксических элементов содержит параметр управления деблокированием для компоненты цветности, который сигнализируется условно по меньшей мере на основе значения синтаксического элемента, при этом значение синтаксического элемента связано с параметром управления деблокированием для компоненты цветности слайса кодируемого/декодируемого изображения. Тринадцатый аспект настоящего изобретения обеспечивает долговременный запоминающий носитель, который включает в себя закодированный битовый поток, декодируемый устройством декодирования изображения, причем битовый поток генерируется путем деления кадра видеосигнала или сигнала изображения на множество блоков и включает в себя множество синтаксических элементов, при этом упомянутое множество синтаксических элементов содержит параметр управления деблокированием для компоненты цветности, который сигнализируется условно по меньшей мере на основе значения синтаксического элемента, при этом значение синтаксического элемента связано с параметром управления деблокированием для компоненты цветности слайса кодируемого/декодируемого изображения.
Способ согласно первому аспекту изобретения может быть выполнен аппаратным компонентом согласно второму аспекту изобретения. Дополнительные признаки и формы реализации способа согласно первому аспекту изобретения соответствуют признакам и формам реализации аппаратного компонента согласно второму аспекту изобретения.
Подробности одного или нескольких вариантов осуществления изложены на прилагаемых чертежах и в приведенном ниже описании. Другие особенности, объекты и преимущества будут очевидны из описания, чертежей и формулы изобретения.
КРАТКОЕ ОПИСАНИЕ ЧЕРТЕЖЕЙ
Ниже варианты осуществления изобретения описаны более подробно со ссылкой на прилагаемые фигуры и чертежи, на которых:
ФИГ. 1A представляет собой блок-схему, показывающую пример системы кодирования/декодирования видео, выполненной с возможностью реализации вариантов осуществления изобретения;
ФИГ. 1B представляет собой блок-схему, показывающую другой пример системы кодирования/декодирования видео, выполненной с возможностью реализации вариантов осуществления изобретения;
ФИГ. 2 представляет собой блок-схему, показывающую пример видеокодера, выполненного с возможностью реализации вариантов осуществления изобретения;
ФИГ. 3 представляет собой блок-схему, показывающую примерную структуру декодера видео, выполненного с возможностью реализации вариантов осуществления изобретения;
ФИГ. 4 представляет собой блок-схему, иллюстрирующую пример аппаратного компонента кодирования или аппаратного компонента декодирования;
ФИГ. 5 представляет собой блок-схему, иллюстрирующую другой пример аппаратного компонента кодирования или аппаратного компонента декодирования;
ФИГ. 6 представляет собой блок-схему, показывающую примерную структуру системы 3100 предоставления контента, которая реализует службу доставки контента;
ФИГ. 7 представляет собой блок-схему, показывающую структуру примера терминального устройства.
ФИГ. 8 представляет собой блок-схему, показывающую вариант осуществления способа согласно настоящему изобретению.
ФИГ. 9 представляет собой блок-схему, показывающую вариант осуществления аппаратного компонента согласно настоящему изобретению.
Приводимые ниже одинаковые ссылочные позиции указывают на одинаковые или по меньшей мере функционально эквивалентные признаки, если явно не указано иное.
ПОДРОБНОЕ ОПИСАНИЕ ВАРИАНТОВ ОСУЩЕСТВЛЕНИЯ
В нижеследующем описании делается ссылка на прилагаемые фигуры, которые являются частью данного раскрытия и которые наглядно показывают конкретные аспекты вариантов осуществления изобретения или конкретные аспекты, в которых эти варианты осуществления настоящего изобретения могут быть использованы. Понятно, что варианты осуществления изобретения могут быть использованы в других аспектах и содержать структурные или логические изменения, не показанные на фигурах. Следовательно, нижеследующее подробное описание не следует воспринимать в ограничивающем смысле, а объем настоящего изобретения определяется прилагаемой формулой изобретения.
Например, понятно, что раскрытие, связанное с описанным способом, также может быть справедливым для соответствующего устройства или системы, выполненных с возможностью осуществления этого способа, и наоборот. Например, если описан один или множество конкретных этапов способа, соответствующее устройство может включать в себя один или множество блоков, например функциональных блоков, для выполнения описанного одного или множества этапов способа (например, один блок, выполняющий один или множество этапов, или множество блоков, каждый из которых выполняет один или несколько из упомянутого множества этапов), даже если такие один или несколько блоков явно не описаны или не проиллюстрированы на фигурах. С другой стороны, например, если конкретный аппаратный компонент описан на основе одного или множества блоков, например функциональных блоков, соответствующий способ может включать в себя один этап для выполнения функциональных возможностей одного или множества блоков (например, один этап, выполняющий функциональные возможности одного или множества блоков, или множество этапов, каждый из которых выполняет функциональные возможности одного или нескольких из упомянутого множества блоков), даже если такой один или множество этапов явно не описаны или не проиллюстрированы на фигурах. Кроме того, понятно, что признаки различных примерных вариантов осуществления и/или аспектов, описанных в данном документе, могут объединяться друг с другом, если явно не указано иное.
Кодирование/декодирование видео обычно означает обработку последовательности изображений, которые формируют видео или видеопоследовательность. Вместо термина “изображение” в качестве синонимов в области кодирования/декодирования видео может использоваться термин “картинка” или “кадр”. Кодирование/декодирование (coding) видео (или кодирование/декодирование в целом) содержит две части: кодирование (encoding) видео и декодирование (decoding) видео. Кодирование видео выполняется на стороне источника, обычно содержит обработку (например, путем сжатия) исходных видеоизображений для уменьшения объема данных, необходимых для представления видеоизображений (для более эффективного хранения и/или передачи). Декодирование видео выполняется на стороне назначения и обычно содержит обратную по сравнению с кодером обработку для восстановления видеоизображений. Варианты осуществления, относящиеся к “кодированию/декодированию” (coding) видеоизображений (или изображений в целом), следует понимать как относящиеся к “кодированию” (encoding) или “декодированию” (decoding) видеоизображений или соответствующих видеопоследовательностей. Объединение части кодирования и части декодирования также называется КОДЕКОМ (кодирование и декодирование).
В случае кодирования видео без потерь исходные видеоизображения могут быть восстановлены, т.е. восстановленные видеоизображения имеют то же качество, что и исходные видеоизображения (при условии отсутствия потерь при передаче или других потерь данных во время хранения или передачи). В случае кодирования/декодирования видео с потерями выполняется дополнительное сжатие, например, путем квантования, для уменьшения объема данных, представляющих видеоизображения, которые не могут быть восстановлены в декодере полностью, т.е. качество восстановленных видеоизображений ниже или хуже по сравнению с качеством исходных видеоизображений.
Несколько стандартов кодирования/декодирования видео принадлежат к группе “гибридных видеокодеков с потерями” (т.е. объединяют пространственное и временное предсказание в области выборок и кодирование/декодирование с 2D-преобразованием для применения квантования в области преобразования). Каждое изображение видеопоследовательности обычно разделяется на набор неперекрывающихся блоков, и кодирование/декодирование обычно выполняется на уровне блоков. Другими словами, в кодере видео обычно обрабатывается, т.е. кодируется, на уровне блоков (видеоблоков), например путем использования пространственного (внутри изображения) предсказания и/или временного (между изображениями) предсказания для генерирования блока предсказания, вычитания блока предсказания из текущего блока (блока, обрабатываемого в настоящее время/подлежащего обработке) для получения остаточного блока, преобразования остаточного блока и квантования остаточного блока в области преобразования для уменьшения объема данных, подлежащих передаче (сжатию), тогда как в декодере обратная по сравнению с кодером обработка применяется к закодированному или сжатому блоку для восстановления текущего блока для представления. Кроме того, кодер дублирует цикл обработки декодера таким образом, чтобы они оба генерировали одинаковые предсказания (например, интра- и интер-предсказания) и/или реконструкции для обработки, т.е. кодирования, последующих блоков.
В следующих ниже вариантах осуществления системы 10 кодирования/декодирования видео видеокодер 20 и видеодекодер 30 описаны на основе Фиг. с 1 по 3.
Фиг. 1A представляет собой схематичное блочное представление, иллюстрирующее примерную систему 10 кодирования/декодирования, например систему 10 кодирования/декодирования видео (или, для краткости, систему 10 кодирования/декодирования), которая может использовать методы настоящей заявки. Видеокодер 20 (или, для краткости, кодер 20) и видеодекодер 30 (или, для краткости, декодер 30) системы 10 кодирования/декодирования видео представляют примеры устройств, которые могут быть выполнены с возможностью осуществления методов в соответствии с различным примерами, описанными в настоящей заявке.
Как показано на ФИГ. 1A, система 10 кодирования/декодирования содержит устройство-источник 12, выполненное с возможностью предоставления закодированных данных 21 изображения, например устройству-получателю 14, для декодирования закодированных данных 13 изображения.
Устройство-источник 12 содержит кодер 20 и может дополнительно, т.е. опционально, содержать источник 16 изображений, препроцессор (или блок предобработки) 18, например препроцессор 18 изображений, и интерфейс связи или блок 22 связи.
Источник 16 изображений может содержать или представлять собой устройство захвата изображений любого типа, например камеру для захвата изображения реального мира, и/или устройство генерирования изображений любого типа, например процессор компьютерной графики для генерирования компьютерного анимированного изображения, или любой тип другого устройства для получения и/или предоставления изображения реального мира, генерируемого компьютером изображения (например, контента экрана, изображения виртуальной реальности (VR)) и/или любой их комбинации (например, изображения дополненной реальности (AR)). Источником изображений может быть любой тип памяти или хранилища, где хранятся любые из вышеупомянутых изображений.
В отличие от препроцессора 18 и обработки, выполняемой блоком 18 предобработки, изображение или данные 17 изображения могут также называться необработанным изображением или необработанными данными 17 изображения.
Препроцессор 18 выполнен с возможностью приема (необработанных) данных 17 изображения и выполнения предобработки над этими данными 17 изображения для получения предобработанного изображения 19 или предобработанных данных 19 изображения. Предобработка, выполняемая препроцессором 18, может, например, содержать обрезку, преобразование цветового формата (например из RGB в YCbCr), цветокоррекцию или устранение шумов. Можно понять, что блок 18 предобработки может быть опциональным компонентом.
Видеокодер 20 выполнен с возможностью приема предобработанных данных 19 изображения и предоставления закодированных данных 21 изображения (дополнительные подробности будут описаны ниже, например на основе Фиг. 2).
Интерфейс 22 связи устройства-источника 12 может быть выполнен с возможностью приема закодированных данных 21 изображения и передачи закодированных данных 21 изображения (или любой их дополнительной обработанной версии) по каналу 13 связи другому устройству, например устройству-получателю 14 или любому другому устройству, для сохранения или непосредственного восстановления.
Устройство-получатель 14 содержит декодер 30 (например, видеодекодер 30) и может дополнительно, т.е. опционально, содержать интерфейс связи или блок 28 связи, постпроцессор 32 (или блок 32 постобработки) и устройство 34 отображения.
Интерфейс 28 связи устройства-получателя 14 выполнен с возможностью приема закодированных данных 21 изображения (или любой их дополнительно обработанной версии), например, непосредственно от устройства-источника 12 или от любого другого источника, например устройства хранения, например устройства хранения закодированных данных изображения, и предоставления закодированных данных 21 изображения на декодер 30.
Интерфейс 22 связи и интерфейс 28 связи могут быть выполнены с возможностью передачи или приема закодированных данных 21 изображения или закодированных данных 13 через прямую линию связи между устройством-источником 12 и устройством-получателем 14, например, прямое проводное или беспроводное соединение, или через любой тип сети, например проводную или беспроводную сеть, или любую их комбинацию, или любой тип частной и общедоступной сети, или любую их комбинацию.
Интерфейс 22 связи может быть, например, выполнен с возможностью упаковки закодированных данных 21 изображения в надлежащий формат, например пакеты, и/или обработки закодированных данных изображения с использованием любого типа кодирования или обработки передачи по линии связи или сети связи.
Интерфейс 28 связи, являющийся аналогом интерфейса 22 связи, может быть, например, выполнен с возможностью приема передаваемых данных и обработки данных передачи с использованием любого типа соответствующей обработки или декодирования передачи и/или распаковки для получения закодированных данных 21 изображения.
Как интерфейс 22 связи, так и интерфейс 28 связи могут быть выполнены с возможностью интерфейсов однонаправленной связи, что указано стрелкой для канала 13 связи на Фиг. 1A, указывающей от устройства-источника 12 к устройству-получателю 14, или интерфейсов двунаправленной связи, и они могут быть выполнены с возможностью, например, отправки и приема сообщений, например для установления соединения, для квитирования и обмена любой другой информацией, относящейся к линии связи и/или передаче данных, например передаче закодированных данных изображения.
Декодер 30 выполнен с возможностью приема закодированных данных 21 изображения и предоставления декодированных данных 31 изображения или декодированного изображения 31 (дополнительные подробности будут описаны ниже, например на основе Фиг. 3 или Фиг. 5).
Постпроцессор 32 устройства-получателя 14 выполнен с возможностью постобработки декодированных данных 31 изображения (также называемых восстановленными данными изображения), например декодированного изображения 31, для получения постобработанных данных 33 изображения, например постобработанного изображения 33. Постобработка, выполняемая блоком 32 постобработки, может содержать, например, преобразование цветового формата (например, из YCbCr в RGB), цветокоррекцию, обрезку или передискретизацию, или любую другую обработку, например для подготовки декодированных данных 31 изображения для отображения, например устройством 34 отображения.
Устройство 34 отображения устройства-получателя 14 выполнено с возможностью приема постобработанных данных 33 изображения для отображения изображения, например пользователю или зрителю. Устройство 34 отображения может представлять собой или содержать дисплей любого типа для представления восстановленного изображения, например встроенный или внешний дисплей или монитор. Дисплеи могут, например, содержать жидкокристаллические дисплеи (LCD), дисплеи на органических светодиодах (OLED), плазменные дисплеи, проекторы, дисплеи на микро-LED, жидкий кристалл на кремнии (LCoS), цифровой световой процессор (DLP) или другой дисплей любого типа.
Хотя Фиг. 1A иллюстрирует устройство-источник 12 и устройство-получатель 14 как отдельные устройства, варианты осуществления устройств также могут содержать оба или обе функциональные возможности, устройство-источник 12 или соответствующую функциональную возможность и устройство-получатель 14 или соответствующую функциональную возможность. В таких вариантах осуществления устройство-источник 12 или соответствующая функциональная возможность и устройство-получатель 14 или соответствующая функциональная возможность могут быть реализованы с использованием одного и того же аппаратного и/или программного обеспечения или с помощью отдельного аппаратного и/или программного обеспечения, или любой их комбинации.
Как будет очевидно для специалиста на основе описания, наличие и (точное) разделение функциональных возможностей различных блоков или функциональных возможностей в устройстве-источнике 12 и/или устройстве-получателе 14, как показано на Фиг. 1A, может меняться в зависимости от фактического устройства и применения.
Кодер 20 (например, видеокодер 20) или декодер 30 (например, видеодекодер 30) или и кодер 20, и декодер 30 могут быть реализованы через схему обработки как показано на Фиг. 1B, такую как один или несколько микропроцессоров, цифровые сигнальные процессоры (DSP), специализированные интегральные схемы (ASIC), программируемые вентильные матрицы (FPGA), дискретную логику, аппаратное обеспечение, выделенное кодирование/декодирование видео или любые их комбинации. Кодер 20 может быть реализован через схему 46 обработки для воплощения различных модулей, как обсуждалось в отношении кодера 20 на ФИГ. 2, и/или любой другой подсистемы или системы кодера, описанной в данном документе. Декодер 30 может быть реализован через схему 46 обработки для воплощения различных модулей, как обсуждалось в отношении декодера 30 на ФИГ. 3, и/или любой другой подсистемы или системы декодера, описанной в данном документе. Схема обработки может быть выполнена с возможностью выполнения различных операций, которые будут описаны ниже. Как показано на фиг. 5, если методики частично реализуются в программном обеспечении, устройство может хранить инструкции для программного обеспечения на подходящем, долговременном (non-transitory) машиночитаемом носителе и может исполнять эти инструкции в аппаратном обеспечении, используя один или несколько процессоров для выполнения упомянутых методик данного раскрытия. Любой из видеокодера 20 и видеодекодера 30 может быть интегрирован как часть объединенного кодера/декодера (КОДЕК) в одном устройстве, например как показано на Фиг. 1B.
Устройство-источник 12 и устройство-получатель 14 могут содержать любое из широкого диапазона устройств, в том числе любые виды портативных или стационарных устройств, например ноутбуки или портативные компьютеры, мобильные телефоны, смартфоны, планшеты или планшетные компьютеры, камеры, настольные компьютеры, телевизионные приставки, телевизоры, устройства отображения, цифровые мультимедийные плееры, видеоигровые консоли, устройства потоковой передачи видео (например, серверы служб контента или серверы доставки контента), широковещательное приемное устройство, широковещательное передающее устройство или подобное, и могут использовать операционную систему любого типа или обходиться без нее. В некоторых случаях устройство-источник 12 и устройство-получатель 14 могут быть оборудованы для беспроводной связи. Таким образом, устройство-источник 12 и устройство-получатель 14 могут быть устройствами беспроводной связи.
В некоторых случаях система 10 кодирования/декодирования видео, проиллюстрированная на Фиг. 1A, является лишь примером, и методики настоящей заявки могут применяться к настройкам кодирования/декодирования видео (таким как видеокодирование или видеодекодирование), которые не обязательно включают в себя какую-либо передачу данных между устройствами кодирования и декодирования. В других примерах данные извлекаются из локальной памяти, передаются потоковым образом по сети или подобное. Устройство видеокодирования может кодировать и сохранять данные в память, и/или устройство видеодекодирования может извлекать и декодировать данные из памяти. В некоторых примерах кодирование и декодирование выполняется устройствами, которые связь друг с другом не осуществляют, а просто кодируют данные в память и/или извлекают и декодируют данные из памяти.
Для удобства описания здесь описаны варианты осуществления данного изобретения, например со ссылкой на высокоэффективное кодирование/декодирование видео (HEVC) или на эталонное программное обеспечение универсального кодирования/декодирования видео (VVC), стандарт кодирования/декодирования видео следующего поколения, разрабатываемый объединенной группой сотрудничества по кодированию/декодированию видео (JCT-VC) экспертной группы по кодированию/декодированию видео ITU-T (VCEG) и экспертной группой по движущимся изображениям ISO/IEC (MPEG). Обычный специалист в данной области техники поймет, что варианты осуществления данного изобретения не ограничиваются HEVC или VVC.
Кодер и способ кодирования
Фиг. 2 показывает схематичное блочное представление примерного видеокодера 20, который выполнен с возможностью реализации методик настоящей заявки. В примере на Фиг. 2 видеокодер 20 содержит ввод 201 (или входной интерфейс 201), блок 204 вычисления остатка, блок 206 обработки преобразования, блок 208 квантования, блок 210 обратного квантования и блок 212 обработки обратного преобразования, блок 214 восстановления, блок 220 контурного фильтра, буфер 230 (DPB) декодированных изображений, блок 260 выбора режима, блок 270 энтропийного кодирования и вывод 272 (или выходной интерфейс 272). Блок 260 выбора режима может включать в себя блок 244 интер-предсказания, блок 254 интра-предсказания и блок 262 разделения. Блок 244 интер-предсказания может включать в себя блок оценки движения и блок компенсации движения (не показаны). Видеокодер 20, показанный на Фиг. 2, также может называться гибридным видеокодером или видеокодером согласно гибридному видеокодеку.
Блок 204 вычисления остатка, блок 206 обработки преобразования, блок 208 квантования, блок 260 выбора режима могут относится к формированию прямого пути прохождения сигнала кодера 20, тогда как блок 210 обратного квантования, блок 212 обработки обратного преобразования, блок 214 восстановления, буфер 216, контурный фильтр 220, буфер 230 (DPB) декодированных изображений, блок 244 интер-предсказания и блок 254 интра-предсказания могут относится к формированию обратного пути прохождения сигнала видеокодера 20, при этом обратный путь прохождения сигнала видеокодера 20 соответствует пути прохождения сигнала декодера (см. видеодекодер 30 на Фиг. 3). Блок 210 обратного квантования, блок 212 обработки обратного преобразования, блок 214 восстановления, контурный фильтр 220, буфер 230 (DPB) декодированных изображений, блок 244 интер-предсказания и блок 254 интра-предсказания также относятся к формированию «встроенного декодера» видеокодера 20.
Изображения и разделение изображений (изображения и блоки)
Кодер 20 может быть выполнен с возможностью приема, например, через ввод 201, изображения 17 (или данных 17 изображения), например изображения из последовательности изображений, образующих видео или видеопоследовательность. Принятое изображение или данные изображения также могут представлять собой предобработанное изображение 19 (или предобработанные данные 19 изображения). Для простоты нижеследующее описание ссылается на изображение 17. Изображение 17 также может именоваться текущим изображением или изображением, которое подлежит кодированию/декодированию (в частности, при кодировании/декодировании видео, чтобы отличать текущее изображение от других изображений, например, ранее кодированных и/или декодированных изображений той же видеопоследовательности, т.е. видеопоследовательности, которая также содержит текущее изображение).
(Цифровое) изображение является или может рассматриваться как двумерный массив или матрица выборок со значениями интенсивности. Выборка в массиве также может упоминаться как пиксель (сокращенное наименование для элемента изображения) или pel. Число выборок в горизонтальном и вертикальном направлении (или оси) массива или изображения определяет размер и/или разрешение изображения. Для представления цвета обычно используются три цветовые компоненты, т.е. изображение может быть представлено или включать в себя три массива выборок. В формате RBG или цветовом пространстве изображение содержит соответствующий массив красных, зеленых и синих выборок. Однако при кодировании/декодировании видео каждый пиксель обычно представляется в формате яркости и цветности или цветовом пространстве, например YCbCr, которое содержит компоненту яркости, обозначаемую Y (иногда вместо этого также используется L), и две компоненты цветности (цветоразностные компоненты), обозначаемые как Cb и Cr. Компонента Y яркости (luminance) (или сокращенно яркость (luma)) представляет яркость (brightness) или интенсивность уровня серого (например, как в полутоновом изображении), в то время как две компоненты Cb и Cr цветности (chrominance) (или сокращенно цветности (chroma)) представляют компоненты информации о цветности (chromaticity) или цвете. Соответственно, изображение в формате YCbCr содержит массив выборок яркости со значениями (Y) выборок яркости и два массива выборок цветности со значениями (Cb и Cr) цветности. Изображения в формате RGB могут быть конвертированы или преобразованы в формат YCbCr и наоборот, процесс также известен как цветовое преобразование или конвертация. Если изображение является монохромным, оно может содержать только массив выборок яркости. Соответственно, изображение может быть, например, массивом выборок яркости в монохромном формате или массивом выборок яркости и двумя соответствующими массивами выборок цветности в цветовом формате 4:2:0, 4:2:2 и 4:4:4.
Варианты осуществления видеокодера 20 могут содержать блок разделения изображения (не показан на Фиг. 2), выполненный с возможностью разделения изображения 17 на множество (обычно не перекрывающихся) блоков 203 изображения. Эти блоки также могут называться корневыми блоками, макроблоками (H.264/AVC), или блоками дерева кодирования/декодирования (CTB), или единицами дерева кодирования/декодирования (CTU) (H.265/HEVC и VVC). Блок разделения изображения может быть выполнен с возможностью использования одного и того же размера блока для всех изображений в видеопоследовательности и соответствующей сетки, определяющей размер блока, или изменения размера блока между изображениями или подмножествами, или группами изображений и разделения каждого изображения на соответствующие блоки.
В дополнительных вариантах осуществления видеокодер может быть выполнен с возможностью непосредственного приема блока 203 изображения 17, например одного, нескольких или всех блоков, формирующих изображение 17. Блок 203 изображения также может именоваться текущим блоком изображения или блоком изображения, подлежащим кодированию/декодированию.
Подобно изображению 17, блок 203 изображения снова является или может рассматриваться как двумерный массив или матрица выборок со значениями интенсивности (значениями выборок), хотя и меньшего размера, чем изображение 17. Другими словами, блок 203 может содержать, например, один массив выборок (например, массив яркости в случае монохромного изображения 17 или массив яркости или цветности в случае цветного изображения) или три массива выборок (например, яркость и два массива цветности в случае цветного изображения 17) или любое другое число и/или вид массивов в зависимости от применяемого цветового формата. Число выборок в горизонтальном и вертикальном направлении (или оси) блока 203 определяет размер блока 203. Соответственно, блок может, например, быть MxN (M-столбцов на N-строк) массивом выборок или MxN массивом коэффициентов преобразования.
Варианты осуществления видеокодера 20, показанные на Фиг. 2, могут быть выполнены с возможностью кодирования изображения 17 блок за блоком, например выполнения кодирования и предсказания для каждого блока 203.
Варианты осуществления видеокодера 20, как показано на Фиг. 2, могут быть дополнительно выполнены с возможностью разделения и/или кодирования изображения с использованием слайсов (также именуемых слайсами видео), при этом изображение может быть разделено на или кодировано с использованием одного или нескольких слайсов (обычно не перекрывающихся), и каждый слайс может содержать один или несколько блоков (например, CTU) или одну или несколько групп блоков (например, тайлов (H.265/HEVC и VVC) или кирпичиков (bricks) (VVC)).
Варианты осуществления видеокодера 20, показанные на Фиг. 2, могут быть дополнительно выполнены с возможностью разделения и/или кодирования изображения с использованием групп тайлов/слайсов (также называемых группами тайлов видео) и/или тайлов (также называемых тайлами видео), при этом изображение может быть разделено на или закодировано с использованием одной или нескольких групп тайлов/слайсов (обычно не перекрывающихся), и каждая группа тайлов/слайсов может содержать, например один или несколько блоков (например, CTU) или один или несколько тайлов, при этом каждый тайл, в качестве примера, может иметь прямоугольную форму и может содержать один или несколько блоков (например, CTU), например полных или частичных блоков.
Вычисление остатка
Блок 204 вычисления остатка может быть выполнен с возможностью вычисления остаточного блока 205 (также именуемого остатком 205) на основе блока 203 изображения и блока 265 предсказания (дополнительные подробности о блоке 265 предсказания приведены ниже), например путем вычитания значений выборок блока 265 предсказания из значений выборок блока 203 изображения, выборка за выборкой (пиксель за пикселем), чтобы получить остаточный блок 205 в области выборок.
Преобразование
Блок 206 обработки преобразования может быть выполнен с возможностью применения преобразования, например дискретного косинусного преобразования (DCT) или дискретного синусного преобразования (DST), к значениям выборок остаточного блока 205, чтобы получить коэффициенты 207 преобразования в области преобразования. Коэффициенты 207 преобразования могут также именоваться остаточными коэффициентами преобразования и представлять остаточный блок 205 в области преобразования.
Блок 206 обработки преобразования может быть выполнен с возможностью применения целочисленных аппроксимаций DCT/DST, таких как преобразования, специфицированные для H.265/HEVC. По сравнению с ортогональным преобразованием DCT такие целочисленные аппроксимации обычно масштабируются с некоторым коэффициентом. Чтобы сохранить норму остаточного блока, который обрабатывается прямым и обратным преобразованиями, дополнительные коэффициенты масштабирования применяются как часть процесса преобразования. Коэффициенты масштабирования обычно выбираются на основе определенных ограничений, таких как коэффициенты масштабирования, являющиеся степенью двойки для операций сдвига, битовая глубина коэффициентов преобразования, компромисс между точностью и затратами на реализацию и т. д. Конкретные коэффициенты масштабирования специфицируются, например, для обратного преобразования, например блоком 212 обработки обратного преобразования (и соответствующего обратного преобразования, например блоком 312 обработки обратного преобразования в видеодекодере 30), а соответствующие коэффициенты масштабирования для прямого преобразования, например блоком 206 обработки преобразования, могут быть специфицированы надлежащим образом в кодере 20.
Варианты осуществления видеокодера 20 (соответственно блока 206 обработки преобразования) могут быть выполнены с возможностью вывода параметров преобразования, например типа преобразования или преобразований, например, непосредственно или в кодированной или сжатой форме посредством блока 270 энтропийного кодирования, так, что, например, видеодекодер 30 может принимать и использовать параметры преобразования для декодирования.
Квантование
Блок 208 квантования может быть выполнен с возможностью квантования коэффициентов 207 преобразования для получения квантованных коэффициентов 209, например путем применения скалярного квантования или векторного квантования. Квантованные коэффициенты 209 также могут упоминаться как квантованные коэффициенты 209 преобразования или квантованные остаточные коэффициенты 209.
Процесс квантования может уменьшить битовую глубину, связанную с некоторыми или всеми коэффициентами 207 преобразования. Например, n-битовый коэффициент преобразования может быть округлен до m-битового коэффициента преобразования во время квантования, где n больше, чем m. Степень квантования может быть изменена путем регулировки параметра квантования (QP). Например, для скалярного квантования может применяться другое масштабирование для достижения более тонкого или более грубого квантования. Меньшие размеры шагов квантования соответствуют более тонкому квантованию, тогда как большие размеры шагов квантования соответствуют более грубому квантованию. Применимый размер шага квантования может быть указан параметром квантования (QP). Параметр квантования может, например, представлять собой индекс для предопределенного набора применимых размеров шагов квантования. Например, небольшие параметры квантования могут соответствовать тонкому квантованию (небольшим размерам шагов квантования), а большие параметры квантования могут соответствовать грубому квантованию (большим размерам шагов квантования) или наоборот. Квантование может включать в себя деление на размер шага квантования, а соответствующее и/или обратное деквантование, например блоком 210 обратного квантования, может включать в себя умножение на размер шага квантования. Варианты осуществления в соответствии с некоторыми стандартами, например HEVC, могут быть выполнены с возможностью использования параметра квантования для определения размера шага квантования. Как правило, размер шага квантования может быть вычислен на основе параметра квантования с использованием аппроксимации фиксированной точки уравнения, включающего в себя деление. Дополнительные коэффициенты масштабирования могут быть введены для квантования и деквантования, чтобы восстановить норму остаточного блока, которая могла быть изменена из-за масштабирования, используемого при аппроксимации фиксированной точки упомянутого уравнения для размера шага квантования и параметра квантования. В одной примерной реализации масштабирование обратного преобразования и деквантование могут быть объединены. В качестве альтернативы индивидуализированные таблицы квантования могут использоваться и сигнализироваться от кодера к декодеру, например в битовом потоке. Квантование является операцией с потерями, при которой потери возрастают с увеличением размеров шагов квантования.
Варианты осуществления видеокодера 20 (соответственно блока 208 квантования) могут быть выполнены с возможностью вывода параметров квантования (QP), например непосредственно или в кодированной форме посредством блока 270 энтропийного кодирования, так, что, например видеодекодер 30 может принимать и применять параметры квантования для декодирования.
Обратное квантование
Блок 210 обратного квантования выполнен с возможностью применения обратного квантования блока 208 квантования к квантованным коэффициентам для получения деквантованных коэффициентов 211, например путем применения обратной схемы квантования относительно таковой, применяемой блоком 208 квантования, на основе или с использованием того же размера шага квантования, что и блок 208 квантования. Деквантованные коэффициенты 211 также могут упоминаться как деквантованные остаточные коэффициенты 211 и соответствовать - хотя обычно они и не идентичны коэффициентам преобразования из-за потери при квантовании - коэффициентам 207 преобразования.
Обратное преобразование
Блок 212 обработки обратного преобразования выполнен с возможностью применения обратного преобразования относительно преобразования, применяемого блоком 206 обработки преобразования, например обратного дискретного косинусного преобразования (DCT) или обратного дискретного синусного преобразования (DST), или других обратных преобразований для получения восстановленного остаточного блока 213 (или соответствующих деквантованных коэффициентов 213) в области выборок. Восстановленный остаточный блок 213 также может именоваться блоком 213 преобразования.
Восстановление
Блок 214 восстановления (например, блок сложения или сумматор 214) выполнен с возможностью сложения блока 213 преобразования (т.е. восстановленного остаточного блока 213) с блоком 265 предсказания, чтобы получить восстановленный блок 215 в области выборок, например посредством сложения - выборка за выборкой - значений выборок восстановленного остаточного блока 213 и значений выборок блока 265 предсказания.
Фильтрация
Блок 220 контурного фильтра (или сокращенно «контурный фильтр» 220) выполнен с возможностью фильтрации восстановленного блока 215, чтобы получить отфильтрованный блок 221, или, в общем, для фильтрации восстановленных выборок для получения значений отфильтрованных выборок. Блок контурного фильтра выполнен с возможностью, например, сглаживания пиксельных переходов или иного улучшения качества видео. Блок 220 контурного фильтра может содержать один или несколько контурных фильтров, таких как деблокирующий фильтр, фильтр с адаптивным к выборке смещением (SAO), или один или несколько других фильтров, например адаптивный контурный фильтр (ALF), фильтр подавления шума (NSF), или любую их комбинацию. В примере блок 220 контурного фильтра может содержать деблокирующий фильтр, SAO-фильтр и ALF-фильтр. Порядком процесса фильтрации может быть: деблокирующий фильтр, SAO и ALF. В другом примере добавлен процесс, называемый отображением яркости с масштабированием цветности (LMCS) (а именно, адаптивный внутриконтурный переформирователь). Этот процесс выполняется перед деблокированием. В другом примере процесс деблокирующего фильтра может быть также применен к внутренним краям субблоков, например, к краям аффинных субблоков, краям ATMVP-субблоков, краям субблочного преобразования (SBT) и краям внутренних подразделов (ISP).
Чтобы эффективно удалять артефакты блочности, возникающие для больших “блоков”, VVC использует деблокирующий фильтр с более длинным отводом. Здесь термин “блоки” используется в очень общем смысле и может относиться к “блоку преобразования (TB), блоку предсказания (PB) или блоку-единице кодирования/декодирования (CU)”. Фильтр с более длинным отводом применяется как к компонентам яркости, так и к компонентам цветности. Фильтр с более длинным отводом для компонент яркости модифицирует максимум 7 выборок для каждого ряда выборок, перпендикулярного и прилегающего к краю, и он применяется для блоков, размер которых составляет >= 32 выборок в направлении деблокирования, т.е. для вертикальных краев ширина блока должна составлять >= 32 выборок, а для горизонтальных краев, высота блока должна составлять >= 32 выборок.
Фильтр с более длинным отводом для цветности применяется для блоков цветности, когда оба блока, прилегающие к определенному краю, имеют размер >=8 выборкам, и он модифицирует максимум три выборки по обе стороны от этого края. Следовательно, для вертикальных краев ширина блока у обоих блоков, прилегающих к краю, должна быть >=8 выборкам, а для горизонтальных краев высота блока у обоих блоков, прилегающих к краю, должна быть >=8 выборкам. Хотя блок 220 контурного фильтра показан на ФИГ. 2 как внутриконтурный (in loop) фильтр, в других конфигурациях блок 220 контурного фильтра может быть реализован как пост-контурный фильтр. Отфильтрованный блок 221 также может именоваться отфильтрованным восстановленным блоком 221.
Варианты осуществления видеокодера 20 (соответственно блока 220 контурного фильтра) могут быть выполнены с возможностью вывода параметров контурного фильтра (таких как параметры SAO-фильтра, или параметры ALF-фильтра, или параметры LMCS), например непосредственно или в кодированной форме посредством блока 270 энтропийного кодирования, так, что, например, декодер 30 может принимать и применять аналогичные параметры контурного фильтра или соответствующие контурные фильтры для декодирования.
Буфер декодированных изображений
Буфер 230 декодированных изображений (DPB) может быть памятью, в которой хранятся опорные изображения или, в общем, данные опорных изображений, для кодирования видеоданных посредством видеокодера 20. DPB 230 может быть сформирован любым из множества устройств памяти, например динамической оперативной памятью (DRAM), в том числе синхронной DRAM (SDRAM), магниторезистивной RAM (MRAM), резистивной RAM (RRAM), или устройствами памяти других типов. Буфер 230 (DPB) декодированных изображений может быть выполнен с возможностью сохранения одного или нескольких фильтрованных блоков 221. Буфер 230 декодированных изображений может быть дополнительно выполнен с возможностью сохранения других ранее отфильтрованных блоков, например ранее восстановленных и отфильтрованных блоков 221, того же самого текущего изображения или разных изображений, например ранее восстановленных изображений, и может предоставлять полные ранее восстановленные, т.е. декодированные, изображения (и соответствующие опорные блоки и выборки) и/или частично восстановленное текущее изображение (и соответствующие опорные блоки и выборки), например для интер-предсказания. Буфер 230 декодированных изображений (DPB) также может быть выполнен с возможностью сохранения одного или нескольких нефильтрованных восстановленных блоков 215 или, в общем, нефильтрованных восстановленных выборок, например если восстановленный блок 215 не фильтруется блоком 220 контурного фильтра, или любой другой дополнительно обработанной версии восстановленных блоков или выборок.
Выбор режима (разделение и предсказание)
Блок 260 выбора режима содержит блок 262 разделения, блок 244 интер-предсказания и блок 254 интра-предсказания и выполнен с возможностью приема или получения исходных данных изображения, например исходного блока 203 (текущего блока 203 текущего изображения 17), и восстановленных данных изображения, например отфильтрованных и/или нефильтрованных восстановленных выборок или блоков того же самого (текущего) изображения и/или из одного или множества ранее декодированных изображений, например из буфера 230 декодированных изображений или других буферов (например, буфера рядов (линейного буфера), не показан). Восстановленные данные изображения используются в качестве данных опорного изображения для предсказания, например интер-предсказания или интра-предсказания, чтобы получить блок 265 предсказания или предиктор 265.
Блок 260 выбора режима может быть выполнен с возможностью определения или выбора разделения для режима предсказания текущего блока (в том числе без разделения) и режима предсказания (например, режима интра- или интер-предсказания) и генерирования соответствующего блока 265 предсказания, который используется для вычисления остаточного блока 205 и для восстановления восстановленного блока 215.
Варианты осуществления блока 260 выбора режима могут быть выполнены с возможностью выбора разделения и режима предсказания (например, из тех, которые поддерживаются блоком 260 выбора режима или доступны для него), которые обеспечивают наилучшее совпадение или, иными словами, минимальный остаток (минимальный остаток означает лучшее сжатие для передачи или хранения), или минимальные непроизводительные затраты на сигнализацию (минимальные непроизводительные затраты на сигнализацию означают лучшее сжатие для передачи или хранения), или который учитывает или балансирует и то, и другое. Блок 260 выбора режима может быть выполнен с возможностью определения режима разделения и предсказания на основе оптимизации скорость/искажение (RDO), то есть выбора режима предсказания, который обеспечивает минимальное искажение при определенной скорости. Такие термины, как «лучший», «минимальный», «оптимальный» и т. д. в этом контексте не обязательно относятся к абсолютному «лучшему», «минимальному», «оптимальному» и т. д., но также могут относиться к выполнению критерия выбора или прекращения, например когда значение превышает или падает ниже порогового значения, или других ограничений, потенциально ведущих к «субоптимальному выбору», но уменьшающих сложность и время обработки.
Другими словами, блок 262 разделения может быть выполнен с возможностью разделения изображения из видеопоследовательности на последовательность единиц дерева кодирования/декодирования (CTU), а CTU 203 могут быть дополнительно разделены на более мелкие разделы блока или субблоки (которые снова образуют блоки), например итеративно с использованием разделения квадродерева (QT), двоичного разделения (BT), или разделения троичного дерева (TT), или любой их комбинации, и выполнения, например, предсказания для каждого из разделов блока или субблоков, при этом выбор режима содержит выбор древовидной структуры разделяемого блока 203, а режимы предсказания применяются к каждому из разделов блока или субблоков.
Далее более подробно поясняется разделение (например, посредством блока 260 разделения) и обработка предсказания (посредством блока 244 интер-предсказания и блока 254 интра-предсказания), выполняемая примерным видеокодером 20.
Разделение
Блок 262 разделения может быть выполнен с возможностью разделения изображения из видеопоследовательности на последовательность единиц дерева кодирования/декодирования (CTU), и блок 262 разделения может разделять (или разбивать) единицу дерева кодирования/декодирования (CTU) 203 на меньшие разделы, например, меньшие блоки квадратного или прямоугольного размера. Для изображения, которое имеет три массива выборок, CTU состоит из блока N×N выборок яркости вместе с двумя соответствующими блоками выборок цветности. Максимально допустимый размер блока яркости в CTU специфицирован как 128×128 в развивающемся универсальном видеокодировании (VVC), но в будущем он может быть специфицирован как значение, отличающееся от 128×128, например как 256×256. CTU изображения могут быть кластеризованы/сгруппированы в виде групп тайлов/слайсов, тайлов или кирпичиков. Тайл покрывает прямоугольную область изображения, и тайл может быть разделен на один или несколько кирпичиков. Кирпичик состоит из некоторого числа рядов CTU в пределах тайла. Тайл, который не разделяется на несколько кирпичиков, может называться кирпичиком. Однако кирпичик является истинным подмножеством тайла и не упоминается как тайл. В VVC поддерживаются два режима групп тайлов, а именно режим группы тайлов/слайсов растрового сканирования и режим прямоугольного слайса. В режиме группы тайлов растрового сканирования группа тайлов/слайсов содержит последовательность тайлов в растровом сканировании тайлов изображения. В режиме прямоугольного слайса слайс содержит некоторое число кирпичиков изображения, которые в совокупности образуют прямоугольную область изображения. Кирпичики в пределах прямоугольного слайса расположены в порядке растрового сканирования кирпичиков слайса. Эти меньшие блоки (которые также могут упоминаться как субблоки) могут быть дополнительно разделены на еще более меньшие разделы. Это также называется разделением по дереву или иерархическим разделением по дереву, при котором корневой блок, например на корневом уровне 0 дерева (уровне 0 иерархии, глубине 0), может быть рекурсивно разделен, например разделен на два или более блоков следующего, более низкого уровня дерева, например узлов на уровне 1 дерева (уровне 1 иерархии, глубине 1), при этом эти блоки могут быть снова разделены на два или более блоков следующего более низкого уровня, например уровня 2 дерева (уровня 2 иерархии, глубины 2), и т. д. до тех пор, пока разделение не будет завершено, например из-за выполнения критерия прекращения, например достижения максимальной глубины дерева или минимального размера блока. Блоки, которые дальше не разделяются, также упоминаются как листовые блоки или листовые узлы дерева. Дерево, использующее разделение на два раздела, называется двоичным деревом (BT), дерево, использующее разделение на три раздела, называется троичным деревом (TT), а дерево, использующее разделение на четыре раздела, называется квадродеревом (QT).
Например, единица дерева кодирования/декодирования (CTU) может быть или содержать CTB выборок яркости, два соответствующих CTB выборок цветности изображения, которое имеет три массива выборок, или CTB выборок монохромного изображения или изображения, которое кодируется/декодируется с использованием трех отдельных цветовых плоскостей и синтаксических структур, используемых для кодирования/декодирования выборок. Соответственно, блок дерева кодирования/декодирования (CTB) может быть N×N блоком выборок для некоторого значения N, так что деление компоненты на CTB является разделением. Единица кодирования/декодирования (CU) может представлять собой или содержать блок кодирования/декодирования выборок яркости, два соответствующих блока кодирования/декодирования выборок цветности изображения, которое имеет три массива выборок, или блок кодирования/декодирования выборок монохромного изображения или изображения, которое кодируется/декодируется с использованием трех отдельных цветовых плоскостей и синтаксических структур, используемых для кодирования/декодирования выборок. Соответственно, блок кодирования/декодирования (CB) может быть M×N блоком выборок для некоторых значений M и N, так что деление CTB на блоки кодирования/декодирования является разделением.
В вариантах осуществления, например, согласно HEVC, единица дерева кодирования/декодирования (CTU) может быть разбита на CU с использованием структуры квадродерева, обозначаемой в качества дерева кодирования/декодирования. Решение о том, следует ли кодировать/декодировать область изображения с использованием предсказания между изображениями (временного) или внутри изображения (пространственного), принимается на уровне листовой CU. Каждая листовая CU может быть дополнительно разбита на одну, две или четыре PU в соответствии с типом разбиения на PU. Внутри одной PU применяется один и тот же процесс предсказания, а релевантная информация передается в декодер на основе PU. После получения остаточного блока путем применения процесса предсказания на основе типа разбиения на PU, листовая CU может быть разделена на единицы (TU) преобразования в соответствии с другой структурой квадродерева, которая аналогична дереву кодирования/декодирования для CU.
В вариантах осуществления, например в соответствии с разрабатываемым в настоящее время наиболее новым стандартом кодирования/декодирования, который называется универсальное кодирование/декодирование видео (VVC), для разделения единицы дерева кодирования/декодирования используется, например, комбинированное вложенное многотипное дерево квадродерева, использующее структуру сегментации с двоичными и троичными разбиениями. В структуре дерева кодирования/декодирования в пределах единицы дерева кодирования/декодирования CU может иметь либо квадратную, либо прямоугольную форму. Например, единица дерева кодирования/декодирования (CTU) сначала разделяется на четвертичное дерево. Затем листовые узлы четвертичного дерева могут быть дополнительно разделены с помощью структуры многотипного дерева. В структуре многотипного дерева существует четыре типа разбиения: вертикальное двоичное разбиение (SPLIT_BT_VER), горизонтальное двоичное разбиение (SPLIT_BT_HOR), вертикальное троичное разбиение (SPLIT_TT_VER) и горизонтальное троичное разбиение (SPLIT_TT_HOR). Листовые узлы многотипного дерева именуются единицами кодирования/декодирования (CU), и если CU не слишком велика для максимальной длины преобразования, эта сегментация используется для предсказания и обработки преобразования без какого-либо дальнейшего разделения. Это означает, что в большинстве случаев CU, PU и TU имеют одинаковый размер блока в квадродереве со структурой блока кодирования/декодирования вложенного многотипного дерева. Исключение возникает тогда, когда максимальная поддерживаемая длина преобразования меньше ширины или высоты цветовой компоненты CU. VVC разрабатывает уникальный механизм сигнализации информации о разбиении на разделы в квадродереве со структурой блока кодирования/декодирования вложенного многотипного дерева. В этом механизме сигнализации единица дерева кодирования/декодирования (CTU) рассматривается как корень четвертичного дерева и сначала разбивается с помощью структуры четвертичного дерева. Каждый листовой узел четвертичного дерева (если он достаточно велик, чтобы это было возможно) затем дополнительно разделяется с помощью структуры многотипного дерева. В структуре многотипного дерева первый флаг (mtt_split_cu_flag) сигнализируется, чтобы указать, будет ли узел дополнительно разделяться; когда узел дополнительно разделяется, второй флаг (mtt_split_cu_vertical_flag) сигнализируется, чтобы указать направление разбиения, а затем третий флаг (mtt_split_cu_binary_flag) сигнализируется, чтобы указать, будет ли это разбиение двоичным разбиением или троичным разбиением. Основываясь на значениях mtt_split_cu_vertical_flag и mtt_split_cu_binary_flag, режим разбиения многотипного дерева (MttSplitMode) CU может быть выведен декодером на основе предопределенного правила или таблицы. Следует отметить, что для определенной конфигурации, например, конфигурации конвейерной обработки цветности 32×32 и блока яркости 64×64 в аппаратных VVC-декодерах, TT-разбиение запрещается, когда либо ширина, либо высота блока кодирования/декодирования яркости больше 64, как показано на Фигуре 6. TT-разбиение также запрещается, когда либо ширина, либо высота блока кодирования/декодирования цветности, больше 32. Конфигурация конвейерной обработки будет делить изображение на виртуальные единицы данных конвейерной обработки (VPDU), которые определяются как неперекрывающиеся единицы в изображении. В аппаратных декодерах последовательные VPDU обрабатываются несколькими стадиями конвейерной обработки одновременно. Размер VPDU примерно пропорционален размеру буфера на большинстве стадий конвейерной обработки, поэтому важно поддерживать размер VPDU небольшим. В большинстве аппаратных декодеров размер VPDU может быть установлен равным максимальному размеру блока преобразования (TB). Однако в VVC разделение по троичному дереву (TT) и двоичному дереву (BT) может приводить к увеличению размеров VPDU.
Кроме того, следует отметить, что, когда часть блока узлов дерева превышает нижнюю или правую границу изображения, блок узлов дерева принудительно разбивается до тех пор, пока все выборки каждой кодируемой/декодируемой CU не будут находится внутри границ изображения.
В качестве примера, инструмент внутренних подразделов (ISP) может делить интра-предсказываемые блоки яркости по вертикали или по горизонтали на 2 или 4 подраздела в зависимости от размера блока.
В одном примере блок 260 выбора режима видеокодера 20 может быть выполнен с возможностью выполнения любой комбинации методик разделения, описанных в данном документе.
Как описано выше, видеокодер 20 выполнен с возможностью определения или выбора наилучшего или оптимального режима предсказания из набора (например, предопределенных) режимов предсказания. Набор режимов предсказания может содержать, например, режимы интра-предсказания и/или режимы интер-предсказания.
Интра-предсказание
Набор режимов интра-предсказания может содержать 35 различных режимов интра-предсказания, например ненаправленные режимы, такие как режим DC (или средний) и планарный режим, или направленные режимы, например определенные в HEVC, или может содержать 67 различных режимов интра-предсказания, например ненаправленные режимы типа режима DC (или среднего) и планарного режима, или направленные режимы, например как определены для VVC. В качестве примера, несколько традиционных режимов углового интра-предсказания адаптивно заменяются режимами широкоугольного интра-предсказания для неквадратных блоков, например, как определено в VVC. В качестве другого примера, чтобы избежать операций деления для DC-предсказания, для вычисления среднего для неквадратных блоков используется только более длинная сторона. И результаты интра-предсказания планарного режима могут быть дополнительно модифицированы посредством способа позиционно-зависимой комбинации интра-предсказания (PDPC).
Блок 254 интра-предсказания выполнен с возможностью использования восстановленных выборок соседних блоков одного и того же текущего изображения для генерирования блока 265 интра-предсказания согласно режиму интра-предсказания из набора режимов интра-предсказания.
Блок 254 интра-предсказания (или в общем блок 260 выбора режима) дополнительно выполнен с возможностью вывода параметров интра-предсказания (или в общем информации, указывающей выбранный режим интра-предсказания для блока) в блок 270 энтропийного кодирования в форме синтаксических элементов 266 для включения в кодированные данные 21 изображения так, чтобы, например, видеодекодер 30 мог принимать и использовать эти параметры предсказания для декодирования.
Интер-предсказание
Набор (возможных) режимов интер-предсказания зависит от доступных опорных изображений (то есть предыдущих, по меньшей мере частично декодированных изображений, например сохраненных в DBP 230) и других параметров интер-предсказания, например, используется ли опорное изображение целиком или только часть, например область окна поиска вокруг области текущего блока, этого опорного изображения для поиска наилучшим образом соответствующего опорного блока и/или, например, применяется ли интерполяция пикселей, например полупиксельная (half/semi-pel), четвертьпиксельная (quarter-pel), и/или 1/16-пиксельная интерполяция, или нет.
В дополнение к вышеупомянутым режимам предсказания могут применяться режим пропуска, прямой режим, и/или другой режим интер-предсказания.
Например, расширенное предсказание со слиянием, список кандидатов на слияние для такого режима создается путем включения следующих пяти типов кандидатов по порядку: пространственный MVP из пространственно-соседних CU, временной MVP из совмещенных CU, основанный на истории MVP из FIFO-таблицы, парный средний MVP и нулевые MV. И для повышения точности MV режима слияния может быть применено основанное на двустороннем согласовании уточнение вектора на стороне декодера (DMVR). Режим слияния с MVD (MMVD), который происходит из режима слияния с разностями векторов движения. Флаг MMVD сигнализируется сразу после отправки флага пропуска и флага слияния, чтобы специфицировать то, используется ли режим MMVD для CU. И может быть применена схема адаптивного разрешения вектора движения на уровне CU (AMVR). AMVR позволяет кодировать/декодировать MVD CU с различной точностью. В зависимости от режима предсказания для текущей CU, MVD текущей CU могут быть выбраны адаптивно. Когда CU кодируется/декодируется в режиме слияния, к текущей CU может быть применен режим объединенного интер/интра-предсказания (CIIP). Взвешенное усреднение сигналов интер- и интра-предсказания выполняется для получения CIIP-предсказания. Предсказание с компенсацией аффинного движения, поле аффинного движения блока описывается информацией движения векторов движения трех контрольных точек (6-параметровой) или двух контрольных точек (4-параметровой). Временное предсказание вектора движения на основе субблока (SbTMVP), которое аналогично временному предсказанию вектора движения (TMVP) в HEVC, но предсказывает векторы движения суб-CU в текущей CU. Двунаправленный оптический поток (BDOF), ранее известный как BIO, представляет собой более простую версию, которая требует гораздо меньше вычислений, особенно с точки зрения количества умножений и размера множителя. Режим треугольного разделения, в таком режиме CU равномерно разбивается на два раздела треугольной формы, используя либо диагональное разбиение, либо антидиагональное разбиение. Кроме того, режим двойного (би-) предсказания расширяется за пределы простого усреднения, чтобы обеспечить возможность взвешенного усреднения двух сигналов предсказания.
Блок 244 интер-предсказания может включать в себя блок оценки движения (ME) и блок компенсации движения (MC) (оба на Фиг.2 не показаны). Блок оценки движения может быть выполнен с возможностью приема или получения блока 203 изображения (текущего блока 203 изображения текущего изображения 17) и декодированного изображения 231, или по меньшей мере одного или множества ранее восстановленных блоков, например восстановленных блоков одного или множества других/отличных ранее декодированных изображений 231, для оценки движения. Например, видеопоследовательность может содержать текущее изображение и ранее декодированные изображения 231 или, иными словами, текущее изображение и ранее декодированные изображения 231 могут быть частью или формировать последовательность изображений, образующих видеопоследовательность.
Кодер 20 может, например, быть выполнен с возможностью выбора опорного блока из множества опорных блоков одинаковых или разных изображений из множества других изображений и обеспечения опорного изображения (или индекса опорного изображения) и/или смещения (пространственного смещения) между позицией (x, y координатами) опорного блока и позицией текущего блока в качестве параметров интер-предсказания в блок оценки движения. Это смещение также называется вектором движения (MV).
Блок компенсации движения выполнен с возможностью получения, например, приема параметра интер-предсказания и выполнения интер-предсказания на основе или с использованием параметра интер-предсказания для получения блока 265 интер-предсказания. Компенсация движения, выполняемая блоком компенсации движения, может включать в себя получение или генерирование блока предсказания на основе вектора движения/блока, определенного посредством оценки движения, возможно с выполнением интерполяций до субпиксельной точности. Интерполяционная фильтрация может генерировать дополнительные пиксельные выборки из известных пиксельных выборок, таким образом потенциально увеличивая число блоков предсказания-кандидатов, которые могут использоваться для кодирования/декодирования блока изображения. После приема вектора движения для PU текущего блока изображения блок компенсации движения может определить местоположение блока предсказания, на который указывает вектор движения, в одном из списков опорных изображений.
Блок компенсации движения может также сгенерировать синтаксические элементы, связанные с блоками и слайсами видео, для использования видеодекодером 30 при декодировании блоков изображения слайса видео. В дополнение или в качестве альтернативы слайсам и соответствующим синтаксическим элементам могут генерироваться или использоваться группы тайлов и/или тайлы и соответствующие синтаксические элементы.
Энтропийное кодирование
Блок 270 энтропийного кодирования выполнен с возможностью применения, например, алгоритма или схемы энтропийного кодирования (например, схемы кодирования с переменной длиной (VLC), схемы контекстно-адаптивного VLC (CAVLC), схемы арифметического кодирования, бинаризации, контекстно-адаптивного двоичного арифметического кодирования (CABAC), основанного на синтаксисе контекстно-адаптивного двоичного арифметического кодирования (SBAC), энтропийного кодирования с разделением интервала вероятности (PIPE) или другого метода или методологии энтропийного кодирования) или обхода (без сжатия) в отношении квантованных коэффициентов 209, параметров интер-предсказания, параметров интра-предсказания, параметров контурного фильтра и/или других синтаксических элементов для получения кодированных данных 21 изображения, которые могут выводиться через вывод 272, например в форме кодированного битового потока 21, так что, например, видеодекодер 30 может принимать и использовать эти параметры для декодирования, . Кодированный битовый поток 21 может быть передан на видеодекодер 30 или сохранен в памяти для последующей передачи или извлечения видеодекодером 30.
Другие изменения в структуре видеокодера 20 могут использоваться для кодирования видеопотока. Например, не основанный на преобразовании кодер 20 может квантовать остаточный сигнал напрямую без блока 206 обработки преобразования для определенных блоков или кадров. В другой реализации кодер 20 может иметь блок 208 квантования и блок 210 обратного квантования, объединенные в единый блок.
Декодер и способ декодирования
Фиг. 3 показывает пример видеодекодера 30, который выполнен с возможностью реализации методик настоящей заявки. Видеодекодер 30 выполнен с возможностью приема кодированных данных 21 изображения (например, кодированного битового потока 21), например кодированных кодером 20, чтобы получить декодированное изображение 331. Кодированные данные изображения или битовый поток содержит информацию для декодирования кодированных данных изображения, например данные, которые представляют блоки изображения кодированного слайса видео (и/или тайлов или групп тайлов) и связанные синтаксические элементы.
В примере на Фиг. 3, декодер 30 содержит блок 304 энтропийного декодирования, блок 310 обратного квантования, блок 312 обработки обратного преобразования, блок 314 восстановления (например, сумматор 314), контурный фильтр 320, буфер 330 (DBP) декодированных изображений, блок 360 применения режима, блок 344 интер-предсказания и блок 354 интра-предсказания. Блок 344 интер-предсказания может представлять собой или включать в себя блок компенсации движения. Видеодекодер 30 может, в некоторых примерах, выполнять проход декодирования, в целом обратный проходу кодирования, описанному в отношении видеокодера 100 с ФИГ. 2.
Как описано в отношении кодера 20, блок 210 обратного квантования, блок 212 обработки обратного преобразования, блок 214 восстановления, контурный фильтр 220, буфер 230 (DPB) декодированных изображений, блок 344 интер-предсказания и блок 354 интра-предсказания также относятся к формированию «встроенного декодера» видеокодера 20. Соответственно, блок 310 обратного квантования может быть идентичен по функции блоку 110 обратного квантования, блок 312 обработки обратного преобразования может быть идентичен по функции блоку 212 обработки обратного преобразования, блок 314 восстановления может быть идентичен по функции блоку 214 восстановления, контурный фильтр 320 может быть идентичен по функции контурному фильтру 220, а буфер 330 декодированных изображений может быть идентичен по функции буферу 230 декодированных изображений. Следовательно, пояснения, предоставленные для соответствующих блоков и функций видеокодера 20, применимы соответственно и к соответствующим блокам и функциям видеодекодера 30.
Энтропийное декодирование
Блок 304 энтропийного декодирования выполнен с возможностью синтаксического анализа битового потока 21 (или в общем кодированных данных 21 изображения) и выполнения, например, энтропийного декодирования кодированных данных 21 изображения, чтобы получить, например, квантованные коэффициенты 309 и/или декодированные параметры кодирования/декодирования (не показаны на Фиг. 3), например, любые или все из параметров интер-предсказания (например, вектор движения и индекс опорного изображения), параметра интра-предсказания (например, индекс или режим интра-предсказания), параметров преобразования, параметров квантования, параметров контурного фильтра и/или других синтаксических элементов. Блок 304 энтропийного декодирования может быть выполнен с возможностью применения алгоритмов или схем декодирования, соответствующих схемам кодирования, как описаны в отношении блока 270 энтропийного кодирования кодера 20. Блок 304 энтропийного декодирования может быть дополнительно выполнен с возможностью предоставления параметров интер-предсказания, параметра интра-предсказания и/или других синтаксических элементов блоку 360 применения режима и других параметров другим блокам декодера 30. Видеодекодер 30 может принимать синтаксические элементы на уровне слайса видео и/или уровне блока видео. В дополнение или в качестве альтернативы слайсам и соответствующим синтаксическим элементам могут приниматься и/или использоваться группы тайлов и/или тайлы и соответствующие синтаксические элементы.
Обратное квантование
Блок 310 обратного квантования может быть выполнен с возможностью приема параметров квантования (QP) (или в общем информации, относящейся к обратному квантованию) и квантованных коэффициентов из кодированных данных 21 изображения (например, посредством синтаксического анализа и/или декодирования, например, посредством блока 304 энтропийного декодирования) и применения, на основе параметров квантования, обратного квантования в отношении декодированных квантованных коэффициентов 309 для получения деквантованных коэффициентов 311, которые также могут именоваться коэффициентами 311 преобразования. Процесс обратного квантования может включать в себя использование параметра квантования, определенного видеокодером 20 для каждого видеоблока в слайсе видео (или тайле или группе тайлов), для определения степени квантования и, аналогично, степени обратного квантования, которая должна быть применена.
Обратное преобразование
Блок 312 обработки обратного преобразования может быть выполнен с возможностью приема деквантованных коэффициентов 311, также именуемых коэффициентами 311 преобразования, и применения преобразования к деквантованным коэффициентам 311 для того, чтобы получить восстановленные остаточные блоки 213 в области выборок. Восстановленные остаточные блоки 213 также могут именоваться блоками 313 преобразования. Преобразование может быть обратным преобразованием, например, обратным DCT, обратным DST, обратным целочисленным преобразованием или концептуально аналогичным процессом обратного преобразования. Блок 312 обработки обратного преобразования может быть дополнительно выполнен с возможностью приема параметров преобразования или соответствующей информации из кодированных данных 21 изображения (например, путем синтаксического анализа и/или декодирования, например, посредством блока 304 энтропийного декодирования), чтобы определять преобразование, которое подлежит применению к деквантованным коэффициентам 311.
Восстановление
Блок 314 восстановления (например, блок сложения или сумматор 314) может быть выполнен с возможностью сложения восстановленного остаточного блока 313 с блоком 365 предсказания, чтобы получить восстановленный блок 315 в области выборок, например посредством сложения значений выборок восстановленного остаточного блока 313 и значений выборок блока 365 предсказания.
Фильтрация
Блок 320 контурного фильтра (либо в контуре кодирования/декодирования, либо после контура кодирования/декодирования) выполнен с возможностью фильтрации восстановленного блока 315 для получения отфильтрованного блока 321, например, для сглаживания переходов пикселей или иного улучшения качества видео. Блок 320 контурного фильтра может содержать один или несколько контурных фильтров, таких как деблокирующий фильтр, фильтр с адаптивным к выборке смещением (SAO), или один или несколько других фильтров, например адаптивный контурный фильтр (ALF), фильтр подавления шума (NSF), или любую их комбинацию. В примере блок 220 контурного фильтра может содержать деблокирующий фильтр, SAO-фильтр и ALF-фильтр. Порядком процесса фильтрации может быть: деблокирующий фильтр, SAO и ALF. В другом примере добавлен процесс, называемый отображением яркости с масштабированием цветности (LMCS) (а именно, адаптивный внутриконтурный переформирователь). Этот процесс выполняется перед деблокированием. В другом примере процесс деблокирующего фильтра может быть также применен к внутренним краям субблоков, например, к краям аффинных субблоков, краям ATMVP-субблоков, краям субблочного преобразования (SBT) и краям внутренних подразделов (ISP). Хотя блок 320 контурного фильтра показан на ФИГ. 3 как внутриконтурный (in loop) фильтр, в других конфигурациях блок 320 контурного фильтра может быть реализован как пост-контурный фильтр.
Буфер декодированных изображений
Декодированные видеоблоки 321 изображения затем сохраняются в буфере 330 декодированных изображений, который сохраняет декодированные изображения 331 в качестве опорных изображений для последующей компенсации движения для других изображений и/или для вывода, соответственно, отображения.
Декодер 30 выполнен с возможностью вывода декодированного изображения 311, например, через вывод 312 для представления или просмотра пользователем.
Предсказание
Блок 344 интер-предсказания может быть идентичен блоку 244 интер-предсказания (в частности, блоку компенсации движения), а блок 354 интра-предсказания может быть идентичен блоку 254 интер-предсказания по функции, и принимает решения по разбиению или разделению и выполняет предсказание на основе параметров разделения и/или предсказания или соответствующей информации, принимаемой из кодированных данных 21 изображения (например, путем синтаксического анализа и/или декодирования, например блоком 304 энтропийного декодирования). Блок 360 применения режима может быть выполнен с возможностью осуществления предсказания (интра- или интер-предсказания) для каждого блока на основе восстановленных изображений, блоков или соответствующих выборок (фильтрованных или нефильтрованных) для получения блока 365 предсказания.
Когда слайс видео кодируется/декодируется как интра-кодируемый/декодируемый (I) слайс, блок 354 интра-предсказания блока 360 применения режима выполнен с возможностью генерирования блока 365 предсказания для блока изображения текущего слайса видео на основе просигнализированного режима интра-предсказания и данных из ранее декодированных блоков текущего изображения. Когда видеоизображение кодируется/декодируется как интер-кодируемый/декодируемый (т.е. B или P) слайс, блок 344 интер-предсказания (например, блок компенсации движения) блока 360 применения режима выполнен с возможностью создания блоков 365 предсказания для видеоблока текущего слайса видео на основе векторов движения и других синтаксических элементов, принимаемых от блока 304 энтропийного декодирования. Для интер-предсказания блоки предсказания могут быть созданы из одного из опорных изображений в пределах одного из списков опорных изображений. Видеодекодер 30 может строить списки опорных кадров, Список 0 и Список 1, используя предустановленные методы построения на основе опорных изображений, хранящихся в DPB 330. То же самое или подобное может применяться для или посредством вариантов осуществления с использованием групп тайлов (например, групп тайлов видео) и/или тайлов (например, тайлов видео) в дополнение или альтернативно к слайсам (например, видеослайсам), например, видео может быть кодировано/декодировано с использованием групп I, P или B тайлов и/или тайлов.
Блок 360 применения режима выполнен с возможностью определения информации предсказания для видеоблока текущего слайса видео путем выделения синтаксическим анализом векторов движения или связанной информации и других синтаксических элементов, и использует информацию предсказания для создания блоков предсказания для текущего декодируемого видеоблока. Например, блок 360 применения режима использует некоторые из принятых синтаксических элементов для определения режима предсказания (например, интра- или интер-предсказание), используемого для кодирования/декодирования видеоблоков слайса видео, типа слайса интер-предсказания (например, B-слайс, P-слайс или GPB-слайс), информации построения для одного или нескольких списков опорных изображений для слайса, векторов движения для каждого интер-кодированного видеоблока слайса, статуса интер-предсказания для каждого интер-кодируемого/декодируемого видеоблока слайса, а также другой информации для декодирования видеоблоков в текущем слайсе видео. То же самое или подобное может применяться для или посредством вариантов осуществления с использованием групп тайлов (например, групп тайлов видео) и/или тайлов (например, тайлов видео) в дополнение или альтернативно к слайсам (например, слайсам видео), например, видео может быть кодировано/декодировано с использованием групп I, P или B тайлов и/или тайлов.
Варианты осуществления видеодекодера 30, как показано на Фиг. 3, могут быть выполнены с возможностью разделения и/или декодирования изображения с использованием слайсов (также именуемых слайсами видео), при этом изображение может быть разделено на или декодировано с использованием одного или нескольких слайсов (обычно не перекрывающихся), и каждый слайс может содержать один или несколько блоков (например, CTU) или одну или несколько групп блоков (например, тайлов (H.265/HEVC и VVC) или кирпичиков (bricks) (VVC)).
Варианты осуществления видеодекодера 30, показанные на Фиг. 3, могут быть выполнены с возможностью разделения и/или декодирования изображения с использованием групп тайлов/слайсов (также именуемых группами тайлов видео) и/или тайлов (также именуемых тайлами видео), при этом изображение может быть разделено на или декодировано с использованием одной или нескольких групп тайлов/слайсов (обычно не перекрывающихся), и каждая группа тайлов/слайсов может содержать, например один или несколько блоков (например, CTU) или один или несколько тайлов, при этом каждый тайл может иметь, например, прямоугольную форму и может содержать один или несколько блоков (например, CTU), например полных или частичных блоков.
Другие варианты видеодекодера 30 могут использоваться для декодирования кодированных данных 21 изображения. Например, декодер 30 может создавать выходной видеопоток без блока 320 контурной фильтрации. Например, не основанный на преобразовании декодер 30 может выполнять обратное квантование остаточного сигнала напрямую без блока 312 обработки обратного преобразования для определенных блоков или кадров. В другой реализации видеодекодер 30 может иметь блок 310 обратного квантования и блок 312 обработки обратного преобразования, объединенные в один блок.
Следует понимать, что в кодере 20 и декодере 30 результат обработки некоторого текущего этапа может быть обработан дополнительно, а затем выведен на следующий этап. Например, после интерполяционной фильтрации, выведения вектора движения или контурной фильтрации, дополнительная операция, такая как Clip (усечение) или смещение, может выполняться над результатом обработки интерполяционной фильтрации, выведения вектора движения или контурной фильтрации.
Следует отметить, что дополнительные операции могут применяться к выводимым векторам движения текущего блока (в том числе, но без ограничения, к векторам движения контрольной точки аффинного режима, векторам движения субблока в аффинном, планарном, ATMVP-режимах, временным векторам движения и подобному). Например, значение вектора движения ограничивается предопределенным диапазоном в соответствии с его представляющим битом. Если представляющим битом вектора движения является bitDepth (битовая глубина), тогда диапазон составляет -2^(bitDepth-1) ~ 2^(bitDepth-1)-1, где «^» означает возведение в степень. Например, если bitDepth установлена равной 16, диапазон составляет -32768 ~ 32767; если bitDepth установлена равной 18, диапазон составляет -131072~131071. Например, значение получаемого вектора движения (например, MV четырех субблоков 4×4 в одном блоке 8×8) ограничивается таким образом, чтобы максимальная разность между целыми частями MV четырех субблоков 4×4 не превышала N пикселей, например была не более 1 пикселя. Здесь представлены два способа ограничения вектора движения в соответствии с bitDepth.
ФИГ. 4 является схематичным представлением устройства 400 кодирования/декодирования видео согласно варианту осуществления настоящего раскрытия. Устройство 400 кодирования/декодирования видео подходит для реализации раскрытых вариантов осуществления, которые описаны в данном документе. В варианте осуществления устройство 400 кодирования/декодирования видео может быть декодером, таким как видеодекодер 30 по ФИГ. 1A, или кодером, таким как видеокодер 20 по ФИГ. 1A.
Устройство 400 кодирования/декодирования видео содержит входные порты 410 (или порты 410 ввода) и блоки 420 (Rx) приемника для приема данных; процессор, логический блок или центральный процессор (CPU) 430 для обработки данных; блоки 440 (Tx) передатчика и выходные порты 450 (или порты 450 вывода) для передачи данных; и память 460 для хранения данных. Устройство 400 кодирования/декодирования видео также может содержать компоненты преобразования оптических сигналов в электрические (OE) и компоненты преобразования электрических сигналов в оптические (EO), подключенные к входным портам 410, блокам 420 приемника, блокам 440 передатчика и выходным портам 450 для обеспечения входа или выхода оптических, или электрических сигналов.
Процессор 430 реализуется посредством аппаратного обеспечения и программного обеспечения. Процессор 430 может быть реализован в виде одного или нескольких CPU-чипов, ядер (например, в виде многоядерного процессора), FPGA, ASIC и DSP. Процессор 430 поддерживает связь с входными портами 410, блоками 420 приемника, блоками 440 передатчика, выходными портами 450 и памятью 460. Процессор 430 содержит модуль 470 кодирования/декодирования. Модуль 470 кодирования/декодирования реализует раскрытые варианты осуществления, описанные выше. Например, модуль 470 кодирования/декодирования реализует, обрабатывает, подготавливает или обеспечивает различные операции кодирования/декодирования. Следовательно, включение модуля 470 кодирования/декодирования обеспечивает существенное улучшение функциональных возможностей устройства 400 кодирования/декодирования видео и обеспечивает переход устройства 400 кодирования/декодирования видео в другое состояние. В качестве альтернативы модуль 470 кодирования/декодирования реализуется как инструкции, хранящиеся в памяти 460 и исполняемые процессором 430.
Память 460 может содержать один или несколько дисков, ленточных накопителей и твердотельных накопителей и может использоваться в качестве устройства хранения данных переполнения для хранения программ, когда такие программы выбраны для исполнения, и для хранения инструкций и данных, которые считываются во время исполнения программ. Память 460 может быть, например, энергозависимой и/или энергонезависимой и может быть постоянной памятью (ROM), оперативной памятью (RAM), троичной ассоциативной памятью (TCAM) и/или статической оперативной памятью (SRAM).
ФИГ. 5 является упрощенной блок-схемой аппаратного компонента 500, который может использоваться как одно или оба из устройства-источника 12 и устройства-получателя 14 с Фиг. 1, согласно примерному варианту осуществления.
Процессор 502 в аппаратном компоненте 500 может быть центральным процессором. В качестве альтернативы, процессор 502 может быть устройством любого другого типа или множеством устройств, способных манипулировать или обрабатывать информацию, которые существуют в настоящее время или будет разработаны в будущем. Хотя раскрытые реализации могут быть осуществлены на практике с одним процессором, как показано, например, с процессором 502, преимущества в скорости и эффективности могут быть достигнуты с использованием более одного процессора.
Память 504 в аппаратном компоненте 500 может быть устройством постоянной памяти (ROM) или устройством оперативной памяти (RAM) в реализации. В качестве памяти 504 может использоваться запоминающее устройство любого другого подходящего типа. Память 504 может включать в себя код и данные 506, доступ к которым осуществляется процессором 502 с использованием шины 512. Память 504 может дополнительно включать в себя операционную систему 508 и прикладные программы 510, причем прикладные программы 510 включают в себя по меньшей мере одну программу, которая позволяет процессору 502 выполнять описанные в данном документе способы. Например, прикладные программы 510 могут включать в себя приложения с 1 по N, которые дополнительно включают в себя приложение кодирования/декодирования видео, которое выполняет описанные в данном документе способы.
Аппаратный компонент 500 может также включать в себя одно или несколько устройств вывода, например дисплей 518. Дисплей 518 может быть, в одном примере, сенсорным дисплеем, который объединяет дисплей с сенсорным элементом, способным воспринимать сенсорные вводы (касанием). Дисплей 518 может быть соединен с процессором 502 через шину 512.
Хотя здесь изображена как одна шина, шина 512 аппаратного компонента 500 может состоять из многочисленных шин. Кроме того, вторичное хранилище 514 может быть напрямую связано с другими компонентами аппаратного компонента 500 или может быть доступно через сеть и может содержать один встраиваемый блок, такой как карта памяти, или множество блоков, таких как множество карт памяти. Таким образом, аппаратный компонент 500 может быть реализован в самых разнообразных конфигурациях.
Для процесса деблокирующего фильтра, раскрытого в HEVC, были введены два высокоуровневых параметра управления beta_offset_div2 и tc_offset_div2 для управления интенсивностью деблокирования. Эти параметры могут быть переданы на уровне набора параметров изображения (PPS) или могут быть перезаписаны на уровне заголовка слайса.
В примере, были введены отдельные параметры управления деблокирующим фильтром для Cb и Cr-компонент, чтобы обеспечить лучшую гибкость деблокирования. Эти параметры управления деблокированием могут быть сигнализированы в PPS или заголовке изображения (PH) или заголовке слайса (SH).
Синтаксис для параметров управления деблокированием выглядит следующим образом:
Синтаксис PPS:
Синтаксис PH:
Синтаксис заголовка слайса:
Семантика синтаксических элементов управления деблокированием выглядит следующим образом:
pps_chroma_tool_offsets_present_flag, равный 1, специфицирует, что в синтаксической PPS RBSP-структуре присутствуют связанные со смещениями инструмента цветности синтаксические элементы. pps_chroma_tool_offsets_present_flag, равный 0, специфицирует, что в синтаксической PPS RBSP-структуре не присутствуют связанные со смещениями инструмента цветности синтаксические элементы. Когда ChromaArrayType равен 0, значение pps_chroma_tool_offsets_present_flag должно быть равно 0.
pps_beta_offset_div2 и pps_tc_offset_div2 специфицируют смещения параметров деблокирования по умолчанию для β и tC (деленные на 2), которые применяются к компоненте яркости для слайсов, ссылающихся на PPS, если смещения параметров деблокирования по умолчанию не переопределяются смещениями параметров деблокирования, присутствующими в заголовках изображений или заголовках слайсов упомянутых слайсов, ссылающихся на PPS. Значения pps_beta_offset_div2 и pps_tc_offset_div2 должны оба находиться в диапазоне от -12 до 12 включительно. Когда не присутствуют, значения pps_beta_offset_div2 и pps_tc_offset_div2 предполагаются равными 0.
pps_cb_beta_offset_div2 и pps_cb_tc_offset_div2 специфицируют смещения параметров деблокирования по умолчанию для β и tC (деленные на 2), которые применяются к Cb-компоненте для слайсов, ссылающихся на PPS, если смещения параметров деблокирования по умолчанию не переопределяются смещениями параметров деблокирования, присутствующими в заголовках изображений или заголовках слайсов упомянутых слайсов, ссылающихся на PPS. Значения pps_cb_beta_offset_div2 и pps_cb_tc_offset_div2 должны оба находиться в диапазоне от -12 до 12 включительно. Когда не присутствуют, значения pps_cb_beta_offset_div2 и pps_cb_tc_offset_div2 предполагаются равными 0.
pps_cr_beta_offset_div2 и pps_cr_tc_offset_div2 специфицируют смещения параметров деблокирования по умолчанию для β и tC (деленные на 2), которые применяются к Cr-компоненте для слайсов, ссылающихся на PPS, если смещения параметров деблокирования по умолчанию не переопределяются смещениями параметров деблокирования, присутствующими в заголовках изображений или заголовках слайсов упомянутых слайсов, ссылающихся на PPS. Значения pps_cr_beta_offset_div2 и pps_cr_tc_offset_div2 должны оба находиться в диапазоне от -12 до 12 включительно. Когда не присутствуют, значения pps_cr_beta_offset_div2 и pps_cr_tc_offset_div2 предполагаются равными 0.
ph_beta_offset_div2 и ph_tc_offset_div2 специфицируют смещения параметров деблокирования для β и tC (деленные на 2), которые применяются к компоненте яркости для слайсов, связанных с PH. Значения ph_beta_offset_div2 и ph_tc_offset_div2 должны оба находиться в диапазоне от -12 до 12 включительно. Когда не присутствуют, значения ph_beta_offset_div2 и ph_tc_offset_div2 предполагаются равными pps_beta_offset_div2 и pps_tc_offset_div2, соответственно.
ph_cb_beta_offset_div2 и ph_cb_tc_offset_div2 специфицируют смещения параметров деблокирования для β и tC (деленные на 2), которые применяются к Cb-компоненте для слайсов, связанных с PH. Значения ph_cb_beta_offset_div2 и ph_cb_tc_offset_div2 должны оба находиться в диапазоне от -12 до 12 включительно. Когда не присутствуют, значения ph_cb_beta_offset_div2 и ph_cb_tc_offset_div2 предполагаются равными pps_cb_beta_offset_div2 и pps_cb_tc_offset_div2, соответственно.
ph_cr_beta_offset_div2 и ph_cr_tc_offset_div2 специфицируют смещения параметров деблокирования для β и tC (деленные на 2), которые применяются к Cr-компоненте для слайсов, связанных с PH. Значения ph_cr_beta_offset_div2 и ph_cr_tc_offset_div2 должны оба находиться в диапазоне от -12 до 12 включительно. Когда не присутствуют, значения ph_cr_beta_offset_div2 и ph_cr_tc_offset_div2 предполагаются равными pps_cr_beta_offset_div2 и pps_cr_tc_offset_div2, соответственно.
slice_beta_offset_div2 и slice_tc_offset_div2 специфицируют смещения параметров деблокирования для β и tC (деленные на 2), которые применяются к компоненте яркости для текущего слайса. Значения slice_beta_offset_div2 и slice_tc_offset_div2 должны оба находиться в диапазоне от -12 до 12 включительно. Когда не присутствуют, значения slice_beta_offset_div2 и slice_tc_offset_div2 предполагаются равными ph_beta_offset_div2 и ph_tc_offset_div2, соответственно.
slice_cb_beta_offset_div2 и slice_cb_tc_offset_div2 специфицируют смещения параметров деблокирования для β и tC (деленные на 2), которые применяются к Cb-компоненте для текущего слайса. Значения slice_cb_beta_offset_div2 и slice_cb_tc_offset_div2 должны оба находиться в диапазоне от -12 до 12 включительно. Когда не присутствуют, значения slice_cb_beta_offset_div2 и slice_cb_tc_offset_div2 предполагаются равными ph_cb_beta_offset_div2 и ph_cb_tc_offset_div2, соответственно.
slice_cb_beta_offset_div2 и slice_cb_tc_offset_div2 специфицируют смещения параметров деблокирования для β и tC (деленные на 2), которые применяются к Cr-компоненте для текущего слайса. Значения slice_cr_beta_offset_div2 и slice_cr_tc_offset_div2 должны оба находиться в диапазоне от -12 до 12 включительно. Когда не присутствуют, значения slice_cr_beta_offset_div2 и slice_cr_tc_offset_div2 предполагаются равными ph_cr_beta_offset_div2 и ph_cr_tc_offset_div2, соответственно.
Универсальное кодирование/декодирование видео (VVC) использует инструмент, называемый совместное кодирование/декодирование остаточной цветности (JCCR), который сигнализируется в битовом потоке с помощью синтаксиса "tu_joint_cbcr_residual_flag". Этот инструмент специфицирует, кодируются/декодируются ли остаточные выборки для обоих Cb- и Cr-компонент цветности как единый блок преобразования. Значение "tu_joint_cbcr_residual_flag", равное 1, специфицирует, что синтаксис единицы преобразования включает в себя уровни коэффициентов преобразования для единого блока преобразования, из которого выводятся остаточные выборки как для Cb, так и для Cr. Инструмент JCCR использует тот факт, что остатки как Cb, так и Cr в основном обратно коррелируют друг с другом.
В зависимости от tu_joint_cbcr_residual_flag, tu_cbf_cb и tu_cbf_cr переменная TuCResMode выводится следующим образом, где tu_cbf_cb специфицирует флаг кодируемого/декодируемого блока Cb-компоненты, tu_cbf_cr является флагом кодируемого/декодируемого блока Cr-компоненты. И TuCResMode указывает режим JCCR.
- Если значение tu_joint_cbcr_residual_flag равно 0, переменная TuCResMode устанавливается равной 0;
- В ином случае, если tu_cbf_cb равен 1, а tu_cbf_cr равен 0, переменная TuCResMode устанавливается равной 1;
- В ином случае, если tu_cbf_cb равен 0, переменная TuCResMode устанавливается равной 2;
- В ином случае переменная TuCResMode устанавливается равной 3.
Связь между “восстановлением Cb- и Cr-остатков” на основе переменных tu_cbf_cb и tu_cbf_cr, переменной TuCResMode, показана в нижеследующей таблице.
Переменная CSgin имеет значение знака (+1 или -1), и это указывается в заголовке слайса. resJointC[x][y] является фактически передаваемым остатком в битовом потоке.
resCb[ x ][ y ] указывает выводимые остаточные выборки для Cb-компоненты цветности;
resCb[ x ][ y ] указывает выводимые остаточные выборки для Cr-компоненты цветности;
Кроме того, VVC 6.0 может использовать отдельные таблицы отображения QP цветности для каждой из Cb- и Cr-компонент цветности и отдельную таблицу отображения для совместных Cb-Cr-остатков. Когда значение синтаксического элемента "same_qp_table_for_chroma" равно 1, это специфицирует, что сигнализируется только одна таблица QP цветности, и эта таблица применяется к Cb-, Cr- и совместным Cb-Cr-остаткам. Когда значение "same_qp_table_for_chroma" равно 0, это означает, что в SPS сигнализируются три таблицы отображения QP цветности.
Синтаксические элементы num_points_in_qp_table_minus1[ i ], delta_qp_in_val_minus1[ i ][ j ], delta_qp_out_val[ i ][ j ] дополнительно используются для выведения таблиц отображения QP цветности. Семантика этих синтаксических элементов и процедура выведения таблиц отображения QP цветности показаны ниже:
num_points_in_qp_table_minus1[ i ] плюс 1 специфицирует число точек, используемых для описания i-й таблицы отображения QP цветности. Значение num_points_in_qp_table_minus1[ i ] должно находиться в диапазоне от 0 до 63+QpBdOffsetC включительно. Когда num_points_in_qp_table_minus1[ 0 ] не присутствует в битовом потоке, значение num_points_in_qp_table_minus1[ 0 ] предполагается равным 0.
delta_qp_in_val_minus1[ i ][ j ] специфицирует дельта-значение, используемое для выведения входной координаты j-й точки поворота i-й таблицы отображения QP цветности. Когда delta_qp_in_val_minus1[ 0 ][ j ] не присутствует в битовом потоке, значение delta_qp_in_val_minus1[ 0 ][ j ] предполагается равным 0.
delta_qp_out_val[ i ][ j ] специфицирует дельта-значение, используемое для выведения выходной координаты j-й точки поворота i-й таблицы отображения QP цветности. Когда delta_qp_out_val[ 0 ][ j ] не присутствует в битовом потоке, значение delta_qp_out_val[ 0 ][ j ] предполагается равным 0.
i-я таблица отображения QP цветности ChromaQpTable[ i ] для i=0..same_qp_table_for_chroma ? 0 : 2 выводится следующим образом:
qpInVal[ i ][ 0 ] = -QpBdOffsetC + delta_qp_in_val_minus1[ i ][ 0 ]
qpOutVal[ i ][ 0 ] = -QpBdOffsetC + delta_qp_out_val[ i ][ 0 ]
for( j = 1; j <= num_points_in_qp_table_minus1[ i ]; j++ ) {
qpInVal[ i ][ j ] = qpInVal[ i ][ j - 1 ] + delta_qp_in_val_minus1[ i ][ j ] + 1
qpOutVal[ i ][ j ] = qpOutVal[ i ][ j - 1 ] + delta_qp_out_val[ i ][ j ]
}
ChromaQpTable[ i ][ qpInVal[ i ][ 0 ] ] = qpOutVal[ i ][ 0 ]
for( k = qpInVal[ i ][ 0 ] - 1; k >= -QpBdOffsetC; k - - )
ChromaQpTable[ i ][ k ] = Clip3( -QpBdOffsetC, 63, ChromaQpTable[ i ][ k + 1 ] - 1 )(7-31)
for( j = 0; j < num_points_in_qp_table_minus1[ i ]; j++ ) {sh = ( delta_qp_in_val_minus1[ i ][j + 1 ] + 2 ) >> 1
for( k = qpInVal[ i ][ j ] + 1, m = 1; k <= qpInval[ i ][ j + 1 ]; k++, m++ )
ChromaQpTable[ i ][ k ] = ChromaQpTable[ i ][ qpInVal[ i ][ j ] ] +
( delta_qp_out_val[ i ][j + 1] * m + sh ) / ( delta_qp_in_val_minus1[ i ][j + 1] + 1 )
}
for( k = qpInVal[ i ][ num_points_in_qp_table_minus1[ i ] ] + 1; k <= 63; k++ )
ChromaQpTable[ i ][ k ] = Clip3( -QpBdOffsetC, 63, ChromaQpTable[ i ][ k - 1 ] + 1 )
Когда same_qp_table_for_chroma равно 1, ChromaQpTable[ 1 ][ k ] и ChromaQpTable[ 2 ][ k ] устанавливаются равными ChromaQpTable[ 0 ][ k ] для k=-QpBdOffsetC..63.
Для совместимости битового потока требуется, чтобы значения qpInVal[ i ][ j ] и qpOutVal[ i ][ j ] находились в диапазоне от -QpBdOffsetC до 63 включительно для i=0..same_qp_table_for_chroma ? 0 : 2 и j=0..num_points_in_qp_table_minus1[ i ].
Пожалуйста, обратите внимание, что таблица ChormaQPmapping также может быть выражена с помощью простой формулы, которая принимает в качестве входных данных значение QP яркости (QPi) и значение цветовой компоненты (cIdx), а затем выводит соответствующее значение Qp цветности (QPc). Формула может отображать линейную зависимость между QP яркости и QP цветности. Например, формула может быть следующей:
QPc=QPi - x, где x является постоянной, зависящей от значения цветовой компоненты (cIdx), и x может принимать разные значения для индексов разных цветовых компонент, в том числе совместной Cb-Cr-компоненты.
8.8.3 Процесс деблокирующего фильтра
8.8.3.1 Общие положения
Входными данными для этого процесса являются восстановленное изображение перед деблокированием, т.е. массив recPictureL и, когда ChromaArrayType не равен 0, массивы recPictureCb и recPictureCr.
Выходными данными этого процесса являются модифицированное восстановленное изображение после деблокирования, т.е. массив recPictureL и, когда ChromaArrayType не равен 0, массивы recPictureCb и recPictureCr.
Сначала фильтруются вертикальные края в изображении. Затем горизонтальные края в изображении фильтруются с помощью выборок, модифицированных процессом фильтрации вертикальных краев, в качестве входных данных. Вертикальные и горизонтальные края в CTB каждого CTU обрабатываются отдельно на основе единиц кодирования/декодирования. Вертикальные края блоков кодирования/декодирования в единице кодирования/декодирования фильтруются, начиная с края на левой стороне блоков кодирования/декодирования, проходя через края к правой стороне блоков кодирования/декодирования в их геометрическом порядке. Горизонтальные края блоков кодирования/декодирования в единице кодирования/декодирования фильтруются, начиная с края сверху блоков кодирования/декодирования, проходя через края к низу блоков кодирования/декодирования в их геометрическом порядке.
ПРИМЕЧАНИЕ - Хотя процесс фильтрации в этом Описании специфицирован на основе изображений, процесс фильтрации может быть реализован на основе единиц кодирования/декодирования с эквивалентным результатом, при условии, что декодер должным образом учитывает порядок зависимостей обработки, чтобы получить аналогичные выходные значения.
Процесс деблокирующего фильтра применяется ко всем краям субблоков кодирования/декодирования и краям блоков преобразования изображения, за исключением следующих типов краев:
- Края, которые находятся на границе изображения,
- Края, которые совпадают с границами субизображения с индексом субизображения subpicIdx и loop_filter_across_subpic_enabled_flag[ subpicIdx ], равным 0,
- Края, которые совпадают с виртуальными границами изображения, когда VirtualBoundariesPresentFlag равен 1,
- Края, которые совпадают с границами тайлов, когда loop_filter_across_tiles_enabled_flag равен 0,
- Края, которые совпадают с границами слайсов, когда loop_filter_across_slices_enabled_flag равен 0,
- Края, которые совпадают с верхними или левыми границами слайсов с slice_deblocking_filter_disabled_flag, равным 1,
- Края в пределах слайсов с slice_deblocking_filter_disabled_flag, равным 1,
- Края, которые не соответствуют границам сетки выборок 4×4 компоненты яркости,
- Края, которые не соответствуют границам сетки выборок 8×8 компоненты цветности,
- Края в пределах компоненты яркости, для которых обе стороны края имеют intra_bdpcm_luma_flag, равный 1,
- Края в пределах компонент цветности, для которых обе стороны края имеют intra_bdpcm_chroma_flag, равный 1,
- Края субблоков цветности, которые не являются краями связанной единицы преобразования.
Тип края, вертикальный или горизонтальный, представляется переменной EdgeType, как специфицировано в Таблице 42.
Таблица 42 - Наименование связи с edgeType
Когда slice_deblocking_filter_disabled_flag текущего слайса равен 0, применяется следующее:
- Переменная treeType устанавливается равной DUAL_TREE_LUMA.
- Вертикальные края фильтруются путем вызова процесса деблокирующего фильтра для одного направления, как специфицируется в пункте 8.8.3.2, с переменной treeType, восстановленным изображением перед деблокированием, т.е. массивом recPictureL, и переменной edgeType, установленной равной EDGE_VER, в качестве входных данных, и модифицированным восстановленным изображением после деблокирования, т.е. массивом recPictureL, в качестве выходных данных.
- Горизонтальные края фильтруются путем вызова процесса деблокирующего фильтра для одного направления, как специфицируется в пункте 8.8.3.2, с переменной treeType, модифицированным восстановленным изображением после деблокирования, т.е. массивом recPictureL, и переменной edgeType, установленной равной EDGE_HOR, в качестве входных данных, и модифицированным восстановленным изображением после деблокирования, т.е. массивом recPictureL, в качестве выходных данных.
- Когда ChromaArrayType не равен 0, применяется следующее:
- Переменная treeType устанавливается равной DUAL_TREE_CHROMA
- Вертикальные края фильтруются путем вызова процесса деблокирующего фильтра для одного направления, как специфицируется в пункте 8.8.3.2, с переменной treeType, восстановленным изображением перед деблокированием, т.е. массивами recPictureCb и recPictureCr, и переменной edgeType, установленной равной EDGE_VER, в качестве входных данных, и модифицированным восстановленным изображением после деблокирования, т.е. массивами recPictureCb и recPictureCr, в качестве выходных данных.
- Горизонтальные края фильтруются путем вызова процесса деблокирующего фильтра для одного направления, как специфицируется в пункте 8.8.3.2, с переменной treeType, модифицированным восстановленным изображением после деблокирования, т.е. массивами recPictureCb и recPictureCr, и переменной edgeType, установленной равной EDGE_HOR, в качестве входных данных, и модифицированным восстановленным изображением после деблокирования, т.е. массивами recPictureCb и recPictureCr, в качестве выходных данных.
8.8.3.2 Процесс деблокирующего фильтра для одного направления
Входными данными для этого процесса являются:
- переменная treeType, специфицирующая, обрабатываются ли в данный момент компоненты цветности (DUAL_TREE_CHROMA) или яркости (DUAL_TREE_LUMA),
- когда treeType равен DUAL_TREE_LUMA, восстановленное изображение перед деблокированием, т.е. массив recPictureL,
- когда ChromaArrayType не равен 0, а treeType равен DUAL_TREE_CHROMA, массивы recPictureCb и recPictureCr,
- переменная edgeType, специфицирующая, фильтруется ли вертикальный (EDGE_VER) или горизонтальный (EDGE_HOR) край.
Выходными данными для этого процесса является модифицированное восстановленное изображение после деблокирования, т.е.:
- когда treeType равен DUAL_TREE_LUMA, массив recPictureL,
- когда ChromaArrayType не равен 0, а treeType равен DUAL_TREE_CHROMA, массивы recPictureCb и recPictureCr,
Переменные firstCompIdx и lastCompIdx выводятся следующим образом:
firstCompIdx=( treeType== DUAL_TREE_CHROMA ) ? 1 : 0 (1244)
lastCompIdx=( treeType== DUAL_TREE_LUMA | | ChromaArrayType== 0 ) ? 0 : 2 (1245)
Для каждой единицы кодирования/декодирования и каждого блока кодирования/декодирования на каждую цветовую компоненту единицы кодирования/декодирования, указанную индексом cIdx цветовой компоненты, находящимся в диапазоне от firstCompIdx до lastCompIdx включительно, с шириной nCbW блока кодирования/декодирования, высотой nCbH блока кодирования/декодирования и расположением верхней левой выборки блока кодирования ( xCb, yCb ), когда cIdx равен 0, или когда cIdx не равен 0, а edgeType равен EDGE_VER и xCb % 8 равно 0, или когда cIdx не равен 0, а edgeType равен EDGE_HOR и yCb % 8 равно 0, края фильтруются посредством следующих упорядоченных этапов:
Переменная filterEdgeFlag выводится следующим образом:
- Если edgeType равен EDGE_VER и выполняется одно или несколько из следующих условий, filterEdgeFlag устанавливается равным 0:
- Левая граница текущего блока кодирования/декодирования является левой границей изображения.
- Левая граница текущего блока кодирования/декодирования совпадает с левой границей текущего субизображения, и loop_filter_across_subpic_enabled_flag[ CurrSubpicIdx ] или loop_filter_across_subpic_enabled_flag[ subpicIdx ] равен 0, где subpicIdx является индексом субизображения собственно субизображения, для которого левая граница текущего блока кодирования/декодирования совпадает с правой границей субизображения этого субизображения.
- Левая граница текущего блока кодирования/декодирования является левой границей тайла, а loop_filter_across_tiles_enabled_flag равен 0.
- Левая граница текущего блока кодирования/декодирования является левой границей слайса, а loop_filter_across_slices_enabled_flag равен 0.
- Левая граница текущего блока кодирования/декодирования является одной из вертикальных виртуальных границ изображения, а VirtualBoundariesPresentFlag равен 1.
- В противном случае, если edgeType равен EDGE_HOR и выполняется одно или несколько из следующих условий, переменная filterEdgeFlag устанавливается равной 0:
- Верхняя граница текущего блока кодирования/декодирования яркости является верхней границей изображения.
- Верхняя граница текущего блока кодирования/декодирования совпадает с верхней границей текущего субизображения, и loop_filter_across_subpic_enabled_flag[ CurrSubpicIdx ] или loop_filter_across_subpic_enabled_flag[ subpicIdx ] равен 0, где subpicIdx является индексом субизображения собственно субизображения, для которого верхняя граница текущего блока кодирования/декодирования совпадает с нижней границей субизображения этого субизображения.
- Верхняя граница текущего блока кодирования/декодирования является верхней границей тайла, а loop_filter_across_tiles_enabled_flag равен 0.
- Верхняя граница текущего блока кодирования/декодирования является верхней границей слайса, а loop_filter_across_slices_enabled_flag равен 0.
- Верхняя граница текущего блока кодирования/декодирования является одной из горизонтальных виртуальных границ изображения, а VirtualBoundariesPresentFlag равен 1.
- В ином случае filterEdgeFlag устанавливается равным 1.
Все элементы двумерного (nCbW)x(nCbH) массива edgeFlags, maxFilterLengthQs и maxFilterlengthPs инициализируются равными нулю.
Процесс выведения границы блока преобразования, специфицируемый в пункте 8.8.3.3, вызывается с местоположением ( xCb, yCb ), шириной nCbW блока кодирования/декодирования, высотой nCbH блока кодирования/декодирования, переменной cIdx, переменной filterEdgeFlag, массивом edgeFlags, массивами максимальной длины фильтра maxFilterLengthPs и maxFilterLengthQs и переменной edgeType в качестве входных данных, и модифицированным массивом edgeFlags, модифицированными массивами максимальной длины фильтра maxFilterLengthPs и maxFilterLengthQs в качестве выходных данных.
Когда cIdx равен 0, процесс выведения границы субблока кодирования/декодирования, специфицируемый в пункте 8.8.3.4, вызывается с местоположением ( xCb, yCb ), шириной nCbW блока кодирования/декодирования, высотой nCbH блока кодирования/декодирования, массивом edgeFlags, массивами максимальной длины фильтра maxFilterLengthPs и maxFilterLengthQs и переменной edgeType в качестве входных данных, и модифицированным массивом edgeFlags, модифицированными массивами максимальной длины фильтра maxFilterLengthPs и maxFilterLengthQs в качестве выходных данных.
Массив recPicture выборок изображения выводится следующим образом:
- Если cIdx равен 0, recPicture устанавливается равным восстановленному массиву recPictureL выборок яркости изображения перед деблокированием.
- В ином случае, если cIdx равен 1, recPicture устанавливается равным восстановленному массиву recPictureCb выборок цветности изображения перед деблокированием.
- В ином случае (cIdx равен 2), recPicture устанавливается равным восстановленному массиву recPictureCr выборок цветности изображения перед деблокированием.
Процесс выведения интенсивности фильтрации границы, специфицируемый в пункте 8.8.3.5, вызывается с массивом recPicture выборок изображения, местоположением яркости ( xCb, yCb ), шириной nCbW блока кодирования/декодирования, высотой nCbH блока кодирования/декодирования, переменной edgeType, переменной cIdx и массивом edgeFlags в качестве входных данных, и (nCbW)x(nCbH) массивом bS в качестве выходных данных.
Процесс фильтрации краев для одного направления вызывается для блока кодирования/декодирования, как специфицируется в пункте 8.8.3.6, с переменной edgeType, переменной cIdx, восстановленным изображением recPicture перед деблокированием, местоположением ( xCb, yCb ), шириной nCbW блока кодирования/декодирования, высотой nCbH блока кодирования/декодирования и массивами bS, maxFilterLengthPs и maxFilterLengthQs в качестве входных данных, и модифицированным восстановленным изображением recPicture в качестве выходных данных.
8.8.3.3 Процесс вывода границы блока преобразования
Входными данными для этого процесса являются:
- местоположение ( xCb, yCb ), специфицирующее верхнюю левую выборку текущего блока кодирования/декодирования относительно верхней левой выборки текущего изображения,
- переменная nCbW, специфицирующая ширину текущего блока кодирования/декодирования,
- переменная nCbH, специфицирующая высоту текущего блока кодирования/декодирования,
- переменная cIdx, специфицирующая цветовую компоненту текущего блока кодирования/декодирования,
- переменная filterEdgeFlag,
- двумерный (nCbW)x(nCbH) массив edgeFlags,
- двумерные (nCbW)x(nCbH) массивы maxFilterLengthQs и maxFilterLengthPs,
- переменная edgeType, специфицирующая, фильтруется ли вертикальный (EDGE_VER) или горизонтальный (EDGE_HOR) край.
Выходными данными этого процесса являются:
- модифицированный двумерный (nCbW)x(nCbH) массив edgeFlags,
- модифицированные двумерные (nCbW)x(nCbH) массивы maxFilterLengthQs, maxFilterLengthPs.
В зависимости от edgeType массивы edgeFlags, maxFilterLengthPs и maxFilterLengthQs выводятся следующим образом:
- Переменная gridSize устанавливается следующим образом:
gridSize=cIdx== 0 ? 4 : 8 (1246)
- Если edgeType равен EDGE_VER, применяется следующее:
- Переменная numEdges устанавливается равной Max( 1, nCbW/gridSize ).
- Для xEdge=0..numEdges - 1 и y=0..nCbH - 1 применяется следующее:
- Горизонтальная позиция x внутри текущего блока кодирования/декодирования устанавливается равной xEdge * gridSize.
- Значение edgeFlags[ x ][ y ] выводится следующим образом:
- Если VirtualBoundariesPresentFlag равен 1 и ( xCb+x ) равно VirtualBoundariesPosX[ n ] для любого n=0..NumVerVirtualBoundaries - 1, edgeFlags[ x ][ y ] устанавливается равным 0.
- В ином случае, если x равно 0, edgeFlags[ x ][ y ] устанавливается равным filterEdgeFlag.
- В ином случае, если местоположение ( xCb+x , yCb+y ) находится на краю блока преобразования, edgeFlags[ x ][ y ] устанавливается равным 1.
- Когда edgeFlags[ x ][ y ] равно 1, применяется следующее:
- Если cIdx равен 0, применяется следующее:
- Значение maxFilterLengthQs[ x ][ y ] выводится следующим образом:
- Если ширина в выборках яркости блока преобразования в местоположении яркости ( xCb+x, yCb+y ) меньше или равна 4 или ширина в выборках яркости блока преобразования в местоположении яркости ( xCb+x - 1, yCb+y) меньше или равна 4, maxFilterLengthQs[ x ][ y ] устанавливается равной 1.
- В ином случае, если ширина в выборках яркости блока преобразования в местоположении яркости ( xCb+x, yCb+y ) больше или равна 32, maxFilterLengthQs[ x ][ y ] устанавливается равной 7.
- В ином случае maxFilterLengthQs[ x ][ y ] устанавливается равной 3.
- Значение maxFilterLengthPs[ x ][ y ] выводится следующим образом:
- Если ширина в выборках яркости блока преобразования в местоположении яркости ( xCb+x, yCb+y ) меньше или равна 4 или ширина в выборках яркости блока преобразования в местоположении яркости ( xCb+x - 1, yCb+y) меньше или равна 4, maxFilterLengthPs[ x ][ y ] устанавливается равной 1.
- В ином случае, если ширина в выборках яркости блока преобразования в местоположении яркости ( xCb+x - 1, yCb+y ) больше или равна 32, maxFilterLengthPs[ x ][ y ] устанавливается равной 7.
- В ином случае maxFilterLengthPs[ x ][ y ] устанавливается равной 3.
- В ином случае (cIdx не равен 0) значения maxFilterLengthPs[ x][ y ] и maxFilterLengthQs[ x ][ y ] выводятся следующим образом:
- Если ширина в выборках цветности блока преобразования в местоположении цветности ( xCb+x, yCb+y ) и ширина в местоположении цветности ( xCb+x - 1, yCb+y ) обе больше или равны 8, maxFilterLengthPs[ x ][ y ] и maxFilterLengthQs[ x ][ y ] устанавливаются равными 3.
- В ином случае maxFilterLengthPs[ x ][ y ] и maxFilterLengthQs[ x ][ y ] устанавливаются равными 1.
- В ином случае (edgeType равен EDGE_HOR), применяется следующее:
- Переменная numEdges устанавливается равной Max( 1, nCbH/gridSize ).
- Для yEdge=0..numEdges - 1 и x=0..nCbW - 1 применяется следующее:
- Вертикальная позиция y внутри текущего блока кодирования/декодирования устанавливается равной yEdge * gridSize.
- Значение edgeFlags[ x ][ y ] выводится следующим образом:
- Если VirtualBoundariesPresentFlag равен 1 и ( yCb+y ) равно VirtualBoundariesPosY[ n ] для любого n=0..NumHorVirtualBoundaries - 1, edgeFlags[ x ][ y ] устанавливается равным 0.
- В ином случае, если y равно 0, edgeFlags[ x ][ y ] устанавливается равным filterEdgeFlag.
- В ином случае, если местоположение ( xCb+x , yCb+y ) находится на краю блока преобразования, edgeFlags[ x ][ y ] устанавливается равным 1.
- Когда edgeFlags[ x ][ y ] равно 1, применяется следующее:
- Если cIdx равен 0, применяется следующее:
- Значение maxFilterLengthQs[ x ][ y ] выводится следующим образом:
- Если высота в выборках яркости блока преобразования в местоположении яркости ( xCb+x, yCb+y ) меньше или равна 4 или высота в выборках яркости блока преобразования в местоположении яркости ( xCb+x, yCb+y - 1 ) меньше или равна 4, maxFilterLengthQs[ x ][ y ] устанавливается равной 1.
- В ином случае, если высота в выборках яркости блока преобразования в местоположении яркости ( xCb+x, yCb+y ) больше или равна 32, maxFilterLengthQs[ x ][ y ] устанавливается равной 7.
- В ином случае maxFilterLengthQs[ x ][ y ] устанавливается равной 3.
- Значение maxFilterLengthPs[ x ][ y ] выводится следующим образом:
- Если высота в выборках яркости блока преобразования в местоположении яркости ( xCb+x, yCb+y ) меньше или равна 4 или высота в выборках яркости блока преобразования в местоположении яркости ( xCb+x, yCb+y - 1 ) меньше или равна 4, maxFilterLengthQs[ x ][ y ] устанавливается равной 1.
- В ином случае, если высота в выборках яркости блока преобразования в местоположении яркости ( xCb+x, yCb+y - 1 ) больше или равна 32, maxFilterLengthPs[ x ][ y ] устанавливается равной 7.
- В ином случае maxFilterLengthPs[ x ][ y ] устанавливается равной 3.
- В ином случае (cIdx не равен 0) значения maxFilterLengthPs[ x][ y ] и maxFilterLengthQs[ x ][ y ] выводятся следующим образом:
- Если высота в выборках цветности блока преобразования в местоположении цветности ( xCb+x, yCb+y ) и высота в выборках цветности блока преобразования в местоположении цветности ( xCb+x, yCb+y - 1 ) обе больше или равны 8, применяется следующее:
- Если ( yCb+y ) % CtbHeightC больше, чем 0, т.е. горизонтальный край не перекрывается с верхней границей CTB цветности, как maxFilterLengthPs[ x ][ y ], так и maxFilterLengthQs[ x ][ y ] устанавливаются равными 3
- В ином случае ( ( yCb+y ) % CtbHeightC равно 0, т.е. горизонтальный край перекрывается с верхней границей CTB цветности), maxFilterLengthPs[ x ][ y ] устанавливается равной 1, а maxFilterLengthQs[ x ][ y ] устанавливается равной 3.
- В ином случае maxFilterLengthPs[ x ][ y ] и maxFilterLengthQs[ x ][ y ] устанавливаются равными 1.
8.8.3.4 Процесс выведения границы субблока кодирования/декодирования
Входными данными для этого процесса являются:
- местоположение ( xCb, yCb ), специфицирующее верхнюю левую выборку текущего блока кодирования/декодирования относительно верхней левой выборки текущего изображения,
- переменная nCbW, специфицирующая ширину текущего блока кодирования/декодирования,
- переменная nCbH, специфицирующая высоту текущего блока кодирования/декодирования,
- двумерный (nCbW)x(nCbH) массив edgeFlags,
- двумерные (nCbW)x(nCbH) массивы maxFilterLengthQs и maxFilterLengthPs,
- переменная edgeType, специфицирующая, фильтруется ли вертикальный (EDGE_VER) или горизонтальный (EDGE_HOR) край.
Выходными данными этого процесса являются:
- модифицированный двумерный (nCbW)x(nCbH) массив edgeFlags,
- модифицированные двумерные (nCbW)x(nCbH) массивы maxFilterLengthQs и maxFilterLengthPs.
Число субблоков кодирования/декодирования в горизонтальном направлении numSbX и в вертикальном направлении numSbY выводятся следующим образом:
- Если inter_affine_flag[ xCb ][ yCb ] равен 1 или merge_subblock_flag[ xCb ][ yCb ] равен 1, numSbX и numSbY устанавливаются равными NumSbX[ xCb ][ yCb ] и NumSbY[ xCb ][ yCb ] соответственно.
- В ином случае numSbX и numSbY оба устанавливаются равными 1.
В зависимости от значения edgeType применяется следующее:
- Если edgeType равен EDGE_VER, применяется следующее:
- Переменная sbW устанавливается равной Max( 8, nCbW/numSbX ).
- Массив edgeTbFlags устанавливается равным edgeFlags.
- Для xEdge=0..min( ( nCbW/8 ) - 1, numSbX - 1), y=0..nCbH - 1:
- Горизонтальная позиция x внутри текущего блока кодирования/декодирования устанавливается равной xEdge *sbW.
- Значение edgeFlags[ x ][ y ] выводится следующим образом:
- Если VirtualBoundariesPresentFlag равен 1, а x равен VirtualBoundariesPosX[ n ] для любого n=0..NumVerVirtualBoundaries - 1, применяется следующее:
edgeFlags[ x ][ y ]=0 (1247)
- В ином случае применяется следующее:
edgeFlags[ x ][ y ]=2 (1248)
- Когда edgeFlags[ x ][ y ] равно 1 или 2, значения maxFilterLengthPs[ x ][ y ] и maxFilterLengthQs[ x ][ y ] модифицируются следующим образом:
- Если x равен 0, применяется следующее:
- Когда numSbX больше, чем 1, применяется следующее:
maxFilterLengthQs[ x ][ y ]=Min( 5, maxFilterLengthQs[ x ][ y ] ) (1249)
- Когда inter_affine_flag[ xCb - 1 ][ yCb+y ] равен 1 или merge_subblock_flag[ xCb - 1 ][ yCb+y ] равен 1, применяется следующее:
maxFilterLengthPs[ x ][ y ]=Min( 5, maxFilterLengthPs[ x ][ y ] ) (1250)
- В ином случае, если edgeTbFlags[ x ][ y ] равно 1, применяется следующее:
maxFilterLengthPs[ x ][ y ]=Min( 5, maxFilterLengthPs[ x ][ y ] ) (1251)
maxFilterLengthQs[ x ][ y ]=Min( 5, maxFilterLengthQs[ x ][ y ] ) (1252)
- В ином случае, если выполняется одно или несколько из следующих условий:
- ( x+4 ) больше или равно nCbW,
- edgeTbFlags[ x - 4 ][ y ] равно 1,
- edgeTbFlags[ x+4 ][ y ] равно 1,
применяется следующее:
maxFilterLengthPs[ x ][ y ]=1 (1253)
maxFilterLengthQs[ x ][ y ]=1 (1254)
- В ином случае, если выполняется одно или несколько из следующих условий:
- xEdge равен 1,
- xEdge равно ( nCbW/8 ) - 1,
- edgeTbFlags[ x - sbW ][ y ] равно 1,
- edgeTbFlags[ x+sbW ][ y ] равно 1,
применяется следующее:
maxFilterLengthPs[ x ][ y ]=2 (1255)
maxFilterLengthQs[ x ][ y ]=2 (1256)
- В ином случае применяется следующее:
maxFilterLengthPs[ x ][ y ]=3 (1257)
maxFilterLengthQs[ x ][ y ]=3 (1258)
- В ином случае, если edgeType равен EDGE_HOR, применяется следующее:
- Переменная sbH устанавливается равной Max( 8, nCbH/numSbY ).
- Массив edgeTbFlags устанавливается равным edgeFlags.
- Для yEdge=0..min( ( nCbH/8 ) - 1, numSbY - 1 ), x=0..nCbW - 1:
- Вертикальная позиция y внутри текущего блока кодирования/декодирования устанавливается равной yEdge *sbH.
- Значение edgeFlags[ x ][ y ] выводится следующим образом:
- Если VirtualBoundariesPresentFlag равен 1, а y равно VirtualBoundariesPosY[ n ] для любого n=0.. NumHorVirtualBoundaries - 1, применяется следующее:
edgeFlags[ x ][ y ]=0 (1259)
- В ином случае применяется следующее:
edgeFlags[ x ][ y ]=2 (1260)
- Когда edgeFlags[ x ][ y ] равно 1 или 2, значения maxFilterLengthPs[ x ][ y ] и maxFilterLengthQs[ x ][ y ] модифицируются следующим образом:
- Если y равен 0, применяется следующее:
- Когда numSbY больше, чем 1, применяется следующее:
maxFilterLengthQs[ x ][ y ]=Min( 5, maxFilterLengthQs[ x ][ y ] ) (1261)
- Когда inter_affine_flag[ xCb+x ][ yCb - 1 ] равен 1 или merge_subblock_flag[ xCb+x ][ yCb - 1 ] равен 1, применяется следующее:
maxFilterLengthPs[ x ][ y ]=Min( 5, maxFilterLengthPs[ x ][ y ] ) (1262)
- В ином случае, если edgeTbFlags[ x ][ y ] равно 1, применяется следующее:
maxFilterLengthPs[ x ][ y ]=Min( 5, maxFilterLengthPs[ x ][ y ] ) (1263)
maxFilterLengthQs[ x ][ y ]=Min( 5, maxFilterLengthQs[ x ][ y ] ) (1264)
- В ином случае, если выполняется одно или несколько из следующих условий:
- ( y+4 ) больше или равно nCbH,
- edgeTbFlags[ x ][ y - 4 ] равно 1,
- edgeTbFlags[ x ][ y+4 ] равно 1,
применяется следующее:
maxFilterLengthPs[ x ][ y ]=1 (1265)
maxFilterLengthQs[ x ][ y ]=1 (1266)
- В ином случае, если выполняется одно или несколько из следующих условий:
- yEdge равен 1,
- yEdge равен ( nCbH/8 ) - 1,
- edgeTbFlags[ x ][ y - sbH ] равно 1,
- edgeTbFlags[ x ][ y+sbH ] равно 1,
применяется следующее:
maxFilterLengthPs[ x ][ y ]=2 (1267)
maxFilterLengthQs[ x ][ y ]=2 (1268)
- В ином случае применяется следующее:
maxFilterLengthPs[ x ][ y ]=3 (1269)
maxFilterLengthQs[ x ][ y ]=3 (1270)
8.8.3.5 Процесс выведения интенсивности фильтрации границы
Входными данными для этого процесса являются:
- массив recPicture выборок изображения,
- местоположение ( xCb, yCb ), специфицирующее верхнюю левую выборку текущего блока кодирования/декодирования относительно верхней левой выборки текущего изображения,
- переменная nCbW, специфицирующая ширину текущего блока кодирования/декодирования,
- переменная nCbH, специфицирующая высоту текущего блока кодирования/декодирования,
- переменная edgeType, специфицирующая, фильтруется ли вертикальный (EDGE_VER) или горизонтальный (EDGE_HOR) край,
- переменная cIdx, специфицирующая цветовую компоненту текущего блока кодирования/декодирования,
- двумерный (nCbW)x(nCbH) массив edgeFlags.
Выходными данными этого процесса является двумерный (nCbW)x(nCbH) массив bS, специфицирующий интенсивность фильтрации границы.
Переменные xDi, yDj, xN и yN выводятся следующим образом:
- Переменная gridSize устанавливается следующим образом:
gridSize=cIdx== 0 ? 4 : 8 (1271)
- Если edgeType равен EDGE_VER,
xDi=( i * gridSize ) (1272)
yDj=cIdx== 0 ? ( j << 2 ) : ( j << 1 ) (1273)
xN устанавливается равной Max( 0, ( nCbW/gridSize ) - 1 ) (1274)
yN=cIdx== 0 ? ( nCbH/4 ) - 1 : ( nCbH/2 ) - 1 (1275)
- В ином случае (edgeType равен EDGE_HOR),
xDi=cIdx== 0 ? ( i << 2 ) : ( i << 1 ) (1276)
yDj=j * gridSize (1277)
xN=cIdx== 0 ? ( nCbW/4 ) - 1 : ( nCbW/2 ) - 1 (1278)
yN=Max( 0, ( nCbH/gridSize ) - 1 ) (1279)
Для xDi с i=0..xN и yDj с j=0..yN, применяется следующее:
- Если edgeFlags[ xDi ][ yDj ] равно 0, переменная bS[ xDi ][ yDj ] устанавливается равной 0.
- В ином случае применяется следующее:
- Значения p0 и q0 выборок выводятся следующим образом:
- Если edgeType равен EDGE_VER, p0 устанавливается равным recPicture[ xCb+xDi - 1 ][ yCb+yDj ], а q0 устанавливается равным recPicture[ xCb+xDi ][ yCb+yDj ].
- В ином случае (edgeType равен EDGE_HOR), p0 устанавливается равным recPicture[ xCb+xDi ][ yCb+yDj - 1 ], а q0 устанавливается равным recPicture[ xCb+xDi ][ yCb+yDj ].
- Переменная bS[ xDi ][ yDj ] выводится следующим образом:
- Если cIdx равен 0 и обе выборки p0 и q0 находятся в блоке кодирования/декодирования с intra_bdpcm_luma_flag, равным 1, bS[ xDi ][ yDj ] устанавливается равной 0.
- В ином случае, если cIdx больше, чем 0, и обе выборки p0 и q0 находятся в блоке кодирования/декодирования с intra_bdpcm_chroma_flag, равным 1, bS[ xDi ][ yDj ] устанавливается равной 0.
- В ином случае, если выборка p0 или q0 находится в блоке кодирования/декодирования единицы кодирования/декодирования, кодируемой/декодируемой с помощью режима интра-предсказания, bS[ xDi ][ yDj ] устанавливается равной 2.
- В ином случае, если край блока также является краем блока кодирования/декодирования, а выборка p0 или q0 находится в блоке кодирования/декодирования с ciip_flag, равным 1, bS[ xDi ][ yDj ] устанавливается равной 2.
- В ином случае, если край блока также является краем блока преобразования, а выборка p0 или q0 находится в блоке преобразования, который содержит один или несколько ненулевых уровней коэффициентов преобразования, bS[ xDi ][ yDj ] устанавливается равной 1.
- В ином случае, если режим предсказания субблока кодирования/декодирования, содержащего выборку p0, отличается от режима предсказания субблока кодирования/декодирования, содержащего выборку q0 (т.е. один из субблока кодирования/декодирования кодируется/декодируется в режиме IBC-предсказания, а другой кодируется/декодируется в режиме интер-предсказания), bS[ xDi ][ yDj ] устанавливается равной 1.
- В ином случае, если cIdx равен 0, edgeFlags[ xDi ][ yDj ] равно 2, и выполняется одно или несколько из следующих условий, bS[ xDi ][ yDj ] устанавливается равной 1:
- Субблок кодирования/декодирования, содержащий выборку p0, и субблок кодирования/декодирования, содержащий выборку q0, оба кодируются/декодируются в режиме IBC-предсказания, а абсолютная разность между горизонтальной или вертикальной компонентой векторов блоков, используемых при предсказании этих двух субблоков кодирования/декодирования, больше или равна 8 в единицах выборок 1/16 яркости.
- Для предсказания субблока кодирования/декодирования, содержащего выборку p0, используются другие опорные изображения или другое число векторов движения, чем таковые для предсказания субблока кодирования/декодирования, содержащего выборку q0.
ПРИМЕЧАНИЕ 1 - Определение того, являются ли опорные изображения, используемые для двух субблоков кодирования/декодирования, одинаковыми или разными, основано только на том, на какие изображения ссылаются, независимо от того, формируется ли предсказание с использованием индекса в список 0 опорных изображений или индекса в список 1 опорных изображений, а также независимо от того, является ли индексная позиция в списке опорных изображений другой.
ПРИМЕЧАНИЕ 2 - Число векторов движения, которые используются для предсказания субблока кодирования/декодирования с верхней левой выборкой, покрывающей ( xSb, ySb ), равно PredFlagL0[ xSb ][ ySb ] + PredFlagL1[ xSb ][ ySb ].
- Один вектор движения используется для предсказания субблока кодирования/декодирования, содержащего выборку p0, и один вектор движения используется для предсказания субблока кодирования/декодирования, содержащего выборку q0, и абсолютная разность между горизонтальной или вертикальной компонентой используемых векторов движения больше или равна 8 в единицах выборок 1/16 яркости.
- Два вектора движения и два разных опорных изображения используются для предсказания субблока кодирования/декодирования, содержащего выборку p0, два вектора движения для тех же двух опорных изображений используются для предсказания субблока кодирования/декодирования, содержащего выборку q0, а абсолютная разность между горизонтальной или вертикальной компонентой двух векторов движения, используемых при предсказании двух субблоков кодирования для одного и того же опорного изображения, больше или равна 8 в единицах выборок 1/16 яркости.
- Два вектора движения для одного и того же опорного изображения используются для предсказания субблока кодирования/декодирования, содержащего выборку p0, два вектора движения для одного и того же опорного изображения используются для предсказания субблока кодирования/декодирования, содержащего выборку q0, и выполняются оба следующих условия:
- Абсолютная разность между горизонтальной или вертикальной компонентой векторов движения списка 0, используемых при предсказании упомянутых двух субблоков кодирования/декодирования, больше или равна 8 в единицах выборок 1/16 яркости, или абсолютная разность между горизонтальной или вертикальной компонентой векторов движения списка 1, используемых при предсказании упомянутых двух субблоков кодирования/декодирования, больше или равна 8 в единицах выборок 1/16 яркости.
- Абсолютная разность между горизонтальной или вертикальной компонентой вектора движения списка 0, используемого при предсказании субблока кодирования/декодирования, содержащего выборку p0, и вектора движения списка 1, используемого при предсказании субблока кодирования/декодирования, содержащего выборку q0, больше или равна 8 в единицах выборок 1/16 яркости, или абсолютная разность между горизонтальной или вертикальной компонентой вектора движения списка 1, используемого при предсказании субблока кодирования/декодирования, содержащего выборку p0, и вектора движения списка 0, используемого при предсказании субблока кодирования/декодирования, содержащего выборку q0, больше или равна 8 в единицах выборок 1/16 яркости.
- В ином случае переменная bS[ xDi ][ yDj ] устанавливается равной 0.
8.8.3.6 Процесс фильтрации края для одного направления
Входными данными для этого процесса являются:
- переменная edgeType, специфицирующая, обрабатываются ли в данный момент вертикальные края (EDGE_VER) или горизонтальные края (EDGE_HOR),
- переменная cIdx, специфицирующая текущую цветовую компоненту,
- восстановленное изображение recPicture перед деблокированием,
- местоположение ( xCb, yCb ), специфицирующее верхнюю левую выборку текущего блока кодирования/декодирования относительно верхней левой выборки текущего изображения,
- переменная nCbW, специфицирующая ширину текущего блока кодирования/декодирования,
- переменная nCbH, специфицирующая высоту текущего блока кодирования/декодирования,
- массив bS, специфицирующий интенсивность границы,
- массивы maxFilterLengthPs и maxFilterLengthQs.
Выходными данными этого процесса является модифицированное восстановленное изображение recPicture после деблокирования.
Для процесса фильтрации края применяется следующее:
- Переменная gridSize устанавливается следующим образом:
gridSize=cIdx== 0 ? 4 : 8 (1280)
- Переменные subW, subH, xN, yN выводятся следующим образом:
subW=cIdx== 0 ? 1 : SubWidthC (1281)
subH=cIdx== 0 ? 1 : SubHeightC (1282)
xN=edgeType== EDGE_VER ? Max( 0, ( nCbW/gridSize ) - 1 ) : ( nCbW/4/subW ) - 1 (1283)
yN=edgeType== EDGE_VER ? ( nCbH/4/subH ) - 1 : Max( 0, ( nCbH/gridSize ) - 1 ) (1284)
- Переменные xDk с k=0..xN и yDm с m=0..yN выводятся следующим образом:
xDk=edgeType== EDGE_VER ? ( k *gridSize ) : ( k << ( 2/subW ) ) (1285)
yDm=edgeType== EDGE_VER ? ( m << ( 2/subH ) ) : ( m * gridSize ) (1286)
- Для xDk с k=0..xN и yDm с m=0..yN, применяется следующее:
- Когда bS[ xDk ][ yDm ] больше, чем 0, применяются следующие упорядоченные этапы:
- Если cIdx равен 0, процесс фильтрации для краев в блоке кодирования/декодирования яркости текущей единицы кодирования/декодирования состоит из следующих упорядоченных этапов:
1. Процесс принятия решения для краев блока яркости, как специфицируется в пункте 8.8.3.6.1, вызывается с массивом recPicture выборок яркости изображения, местоположением ( xCb, yCb ) блока кодирования/декодирования яркости, местоположением ( xBl, yBl ) яркости блока, установленным равным ( xDk, yDm ), направлением edgeType края, интенсивностью bS[ xDk ][ yDm ] фильтрации границы, максимальными длинами фильтров maxFilterLengthP, установленными равными maxFilterLengthPs[ xDk ][ yDm ], и maxFilterLengthQ, установленными равными maxFilterLengthQs[ xDk ][ yDm ], в качестве входных данных, и решениями dE, dEp и dEq, модифицированными максимальными длинами maxFilterLengthP и maxFilterLengthQ фильтров, а также переменной tC в качестве выходных данных.
2. Процесс фильтрации для краев блока, как специфицируется в пункте 8.8.3.6.2, вызывается с массивом recPicture выборок яркости изображения, местоположением ( xCb, yCb ) блока кодирования/декодирования яркости, местоположением ( xBl, yBl ) яркости блока, установленным равным ( xDk, yDm ), направлением edgeType края, решениями dE, dEp и dEq, максимальными длинами maxFilterLengthP и maxFilterLengthQ фильтров, а также переменной tC в качестве входных данных, и модифицированным массивом recPicture выборок яркости изображения в качестве выходных данных.
- В ином случае (cIdx не равен 0), процесс фильтрации для краев в блоке кодирования/декодирования цветности текущей единицы кодирования/декодирования, специфицированном посредством cIdx, состоит из следующих упорядоченных этапов:
1. Процесс принятия решения для краев блока цветности, как специфицируется в пункте 8.8.3.6.3, вызывается с массивом recPicture выборок цветности изображения, местоположением ( xCb, yCb ) блока кодирования/декодирования цветности, местоположением ( xBl, yBl ) цветности блока, установленным равным ( xDk, yDm ), направлением edgeType края, переменной cIdx, интенсивностью bS[ xDk ][ yDm ] фильтрации границы, максимальными длинами maxFilterLengthP фильтров, установленными равными maxFilterLengthPs[ xDk ][ yDm ], и максимальными длинами maxFilterLengthQ фильтров, установленными равными maxFilterLengthQs[ xDk ][ yDm ], в качестве входных данных, и модифицированными максимальными длинами maxFilterLengthP и maxFilterLengthQ фильтров, а также переменной tC в качестве выходных данных.
2. Когда maxFilterLengthQ больше, чем 0, процесс фильтрации для краев блока цветности, как специфицируется в пункте 8.8.3.6.4, вызывается с массивом recPicture выборок цветности изображения, местоположением ( xCb, yCb ) блока кодирования/декодирования цветности, местоположением ( xBl, yBl ) цветности блока, установленным равным ( xDk, yDm ), направлением edgeType края, переменной tC, максимальными длинами maxFilterLengthP и maxFilterLengthQ фильтров в качестве входных данных, и модифицированным массивом recPicture выборок цветности изображения в качестве выходных данных.
8.8.3.6.1 Процесс принятия решения для краев блока яркости
Входными данными для этого процесса являются:
- массив recPicture выборок изображения,
- местоположение ( xCb, yCb ), специфицирующее верхнюю левую выборку текущего блока кодирования/декодирования относительно верхней левой выборки текущего изображения,
- местоположение (xBl, yBl ), специфицирующее верхнюю левую выборку текущего блока относительно верхней левой выборки текущего блока кодирования/декодирования,
- переменная edgeType, специфицирующая, фильтруется ли вертикальный (EDGE_VER) или горизонтальный (EDGE_HOR) край,
- переменная bS, специфицирующая интенсивность фильтрации границы,
- переменная maxFilterLengthP, специфицирующая максимальную длину фильтра,
- переменная maxFilterLengthQ, специфицирующая максимальную длину фильтра.
Выходными данными этого процесса являются:
- переменные dE, dEp и dEq, содержащие решения,
- модифицированные переменные длин maxFilterLengthP и maxFilterLengthQ фильтров,
- переменная tC.
Значения pi,k и qj,k выборок с i=0..Max( 2, maxFilterLengthP ), j=0..Max( 2, maxFilterLengthQ ) и k=0 и 3 выводятся следующим образом:
- Если edgeType равен EDGE_VER, применяется следующее:
qj,k=recPicture[ xCb+xBl+j ][ yCb+yBl+k ] (1287)
pi,k=recPicture[ xCb+xBl - i - 1 ][ yCb+yBl+k ] (1288)
- В ином случае (edgeType равен EDGE_HOR), применяется следующее:
qj,k=recPicture[ xCb+xBl+k ][ yCb+yBl+j ] (1289)
pi,k=recPicture[ xCb+xBl+k ][ yCb+yBl - i - 1 ] (1290)
Переменная qpOffset выводится следующим образом:
- Если sps_ladf_enabled_flag равен 1, применяется следующее:
- Переменная lumaLevel восстановленного уровня яркости выводится следующим образом:
lumaLevel=( ( p0,0+p0,3+q0,0+q0,3 ) >> 2 ), (1291)
- Переменная qpOffset устанавливается равной sps_ladf_lowest_interval_qp_offset и модифицируется следующим образом:
for( i=0; i < sps_num_ladf_intervals_minus2+1; i++ ) {
if( lumaLevel > SpsLadfIntervalLowerBound[ i+1 ] )
qpOffset=sps_ladf_qp_offset[ i ] (1292)
else
break
}
- В ином случае qpOffset устанавливается равным 0.
Переменные QpQ и QpP устанавливаются равными значениям QpY единиц кодирования/декодирования, которые включают в себя блоки кодирования/декодирования, содержащие выборку q0,0 и p 0,0, соответственно.
Переменная qP выводится следующим образом:
qP=( ( QpQ+QpP+1 ) >> 1 ) + qpOffset (1293)
Значение переменной β' определяется, как специфицируется в Таблице 43, на основе параметра Q квантования, выводимого следующим образом:
Q=Clip3( 0, 63, qP + ( slice_beta_offset_div2 << 1 ) ) (1294)
где slice_beta_offset_div2 является значением синтаксического элемента slice_beta_offset_div2 для слайса, который содержит выборку q0,0.
Переменная β выводится следующим образом:
β=β' * ( 1 << ( BitDepth - 8 ) ) (1295)
Значение переменной tC' определяется, как специфицируется в Таблице 43, на основе параметра Q квантования, выводимого следующим образом:
Q=Clip3( 0, 65, qP+2 * ( bS - 1 ) + ( slice_tc_offset_div2 << 1 ) ) (1296)
где slice_tc_offset_div2 является значением синтаксического элемента slice_tc_offset_div2 для слайса, который содержит выборку q0,0.
Переменная tC выводится следующим образом:
tC=BitDepth < 10 ? ( tC' + 2 ) >> ( 10 - BitDepth ) :
tC' * ( 1 << ( BitDepth - 10 ) ) (1297)
Применяются следующие упорядоченные этапы:
Переменные dp0, dp3, dq0 и dq3 выводятся следующим образом:
dp0=Abs( p2,0 - 2 * p1,0+p0,0 ) (1298)
dp3=Abs( p2,3 - 2 * p1,3+p0,3 ) (1299)
dq0=Abs( q2,0 - 2 * q1,0+q0,0 ) (1300)
dq3=Abs( q2,3 - 2 * q1,3+q0,3 ) (1301)
Когда и maxFilterLengthP, и maxFilterLengthQ больше или равны 3, переменные sp0, sq0, spq0, sp3, sq3 и spq3 выводятся следующим образом:
sp0=Abs( p3,0 - p0,0 ) (1302)
sq0=Abs( q0,0 - q3,0 ) (1303)
spq0=Abs( p0,0 - q0,0 ) (1304)
sp3=Abs( p3,3 - p0,3 ) (1305)
sq3=Abs( q0,3 - q3,3 ) (1306)
spq3=Abs( p0,3 - q0,3 ) (1307)
1. Переменные sidePisLargeBlk и sideQisLargeBlk устанавливаются равными 0.
Когда maxFilterLengthP больше, чем 3, sidePisLargeBlk устанавливается равной 1.
Когда maxFilterLengthQ больше, чем 3, sideQisLargeBlk устанавливается равной 1.
Когда edgeType равен EDGE_HOR и (yCb+yBl ) % CtbSizeY равно 0, sidePisLargeBlk устанавливается равной 0.
Переменные dSam0 и dSam3 инициализируются в 0.
Когда sidePisLargeBlk или sideQisLargeBlk больше, чем 0, применяется следующее:
a. Переменные dp0L, dp3L выводятся и maxFilterLengthP модифицируется следующим образом:
- Если sidePisLargeBlk равна 1, применяется следующее:
dp0L=( dp0+Abs( p5,0 - 2 * p4,0+p3,0 ) + 1 ) >> 1 (1308)
dp3L=( dp3+Abs( p5,3 - 2 * p4,3+p3,3 ) + 1 ) >> 1 (1309)
- В ином случае применяется следующее:
dp0L=dp0 (1310)
dp3L=dp3 (1311)
maxFilterLengthP=3 (1312)
b. Переменные dq0L и dq3L выводятся следующим образом:
- Если sideQisLargeBlk равен 1, применяется следующее:
dq0L=( dq0+Abs( q5,0 - 2 * q4,0+q3,0 ) + 1 ) >> 1 (1313)
dq3L=( dq3+Abs( q5,3 - 2 * q4,3+q3,3 ) + 1 ) >> 1 (1314)
- В ином случае применяется следующее:
dq0L=dq0 (1315)
dq3L=dq3 (1316)
c. Переменные sp0L и sp3L выводятся следующим образом:
- Если maxFilterLengthP равна 7, применяется следующее:
sp0L=sp0+Abs( p7,0 - p6,0 - p5,0+p4,0) (1317)
sp3L=sp3+Abs( p7,3 - p6,3 - p5,3+p4,3) (1318)
- В ином случае применяется следующее:
sp0L=sp0 (1319)
sp3L=sp3 (1320)
d.Переменные sq0L и sq3L выводятся следующим образом:
- Если maxFilterLengthQ равна 7, применяется следующее:
sq0L=sq0+Abs( q4,0 - q5,0 - q6,0+q7,0 ) (1321)
sq3L=sq3+Abs( q4,3 - q5,3 - q6,3+q7,3 ) (1322)
- В ином случае применяется следующее:
sq0L=sq0 (1323)
sq3L=sq3 (1324)
e. Переменные dpq0L, dpq3L и dL выводятся следующим образом:
dpq0L=dp0L+dq0L (1325)
dpq3L=dp3L+dq3L (1326)
dL=dpq0L+dpq3L (1327)
f. Когда dL меньше, чем β, применяются следующие упорядоченные этапы:
i. Переменная dpq устанавливается равной 2 * dpq0L.
Переменная sp устанавливается равной sp0L, переменная sq устанавливается равной sq0L, а переменная spq устанавливается равной spq0.
Переменные p0 p3 qo и q3 сначала инициализируются в 0, а затем модифицируются согласно sidePisLargeBlk и sideQisLargeBlk следующим образом:
- Когда sidePisLargeBlk равна 1, применяется следующее:
p3=p3,0 (1328)
p0=pmaxFilterLengthP,0 (1329)
- Когда sideQisLargeBlk равна 1, применяется следующее:
q3=q3,0 (1330)
q0=qmaxFilterLengthQ,0 (1331)
Для местоположения ( xCb+xBl, yCb+yBl ) выборки вызывается процесс принятия решения для выборки яркости, как специфицируется в пункте 8.8.3.6.5, со значениями p0, p3, q0, q3 выборок, переменными dpq, sp, sq, spq, sidePisLargeBlk, sideQisLargeBlk, β и tC в качестве входных данных, а выходные данные присваиваются решению dSam0.
Переменная dpq устанавливается равной 2 * dpq3L.
Переменная sp устанавливается равной sp3L, переменная sq устанавливается равной sq3L, а переменная spq устанавливается равной spq3.
Переменные p0 p3 q0 и q3 сначала инициализируются в 0, а затем модифицируются согласно sidePisLargeBlk и sideQisLargeBlk следующим образом:
- Когда sidePisLargeBlk равна 1, применяется следующее:
p3=p3,3 (1332)
p0=pmaxFilterLengthP,3 (1333)
- Когда sideQisLargeBlk равна 1, применяется следующее:
q3=q3,3 (1334)
q0=qmaxFilterLengthQ,3 (1335)
Когда edgeType равен EDGE_VER для местоположения ( xCb+xBl, yCb+yBl+3 ) выборки или когда edgeType равен EDGE_HOR для местоположения ( xCb+xBl+3, yCb+yBl ) выборки, процесс принятия решения для выборки яркости, как специфицируется в пункте 8.8.3.6.5, вызывается со значениями p0, p3, q0, q3 выборок, переменными dpq, sp, sq, spq, sidePisLargeBlk, sideQisLargeBlk, β и tC в качестве входных данных, а выходные данные присваиваются решению dSam3.
2. Переменные dE, dEp и dEq выводятся следующим образом:
- Если dSam0 и dSam3 оба равны 1, переменная dE устанавливается равной 3, dEp устанавливается равной 1, а dEq устанавливается равной 1.
- В ином случае применяются следующие упорядоченные этапы:
Переменные dpq0, dpq3, dp, dq и d выводятся следующим образом:
dpq0=dp0+dq0 (1336)
dpq3=dp3+dq3 (1337)
dp=dp0+dp3 (1338)
dq=dq0+dq3 (1339)
d=dpq0+dpq3 (1340)
Переменные dE, dEp, dEq, sidePisLargeBlk и sideQisLargeBlk устанавливаются равными 0.
Когда d меньше, чем β, и обе maxFilterLengthP и maxFilterLengthQ больше, чем 2, применяются следующие упорядоченные этапы:
Переменная dpq устанавливается равной 2 * dpq0.
Переменная sp устанавливается равной sp0, переменная sq устанавливается равной sq0, а переменная spq устанавливается равной spq0.
Для местоположения ( xCb+xBl, yCb+yBl ) выборки вызывается процесс принятия решения для выборки яркости, как специфицируется в пункте 8.8.3.6.5, со всеми переменными p0, p3, q0, q3, установленными равными 0, переменными dpq, sp, sq, spq, sidePisLargeBlk, sideQisLargeBlk, β и tC в качестве входных данных, а выходные данные присваиваются решению dSam0.
Переменная dpq устанавливается равной 2 * dpq3.
Переменная sp устанавливается равной sp3, переменная sq устанавливается равной sq3, а переменная spq устанавливается равной spq3.
Когда edgeType равен EDGE_VER для местоположения ( xCb+xBl, yCb+yBl+3 ) выборки или когда edgeType равен EDGE_HOR для местоположения ( xCb+xBl+3, yCb+yBl ) выборки, процесс принятия решения для выборки, как специфицируется в пункте 8.8.3.6.5, вызывается со всеми переменными p0, p3, q0, q3 , установленными равными 0, переменными dpq, sp, sq, spq, sidePisLargeBlk, sideQisLargeBlk, β и tC в качестве входных данных, а выходные данные присваиваются решению dSam3.
Когда d меньше, чем β, применяются следующие упорядоченные этапы:
Переменная dE устанавливается равной 1.
Когда dSam0 равно 1 и dSam3 равно 1, переменная dE устанавливается равной 2 и обе maxFilterLengthP и maxFilterLengthQ устанавливаются равными 3.
Когда maxFilterLengthP больше 1 и maxFilterLengthQ больше, чем 1, а dp меньше, чем ( β + ( β >> 1 ) ) >> 3, переменная dEp устанавливается равной 1.
Когда maxFilterLengthP больше 1 и maxFilterLengthQ больше, чем 1, а dq меньше, чем ( β + ( β >> 1 ) ) >> 3, переменная dEq устанавливается равной 1.
Когда dE равна 1, maxFilterLengthP устанавливается равной 1+dEp, а maxFilterLengthQ устанавливается равной 1+dEq.
Таблица 43 - Выведение пороговых переменных β' и TC' из входного Q
8.8.3.6.2 Процесс фильтрации для краев блока яркости
Входными данными для этого процесса являются:
- массив recPicture выборок изображения,
- местоположение ( xCb, yCb ), специфицирующее верхнюю левую выборку текущего блока кодирования/декодирования относительно верхней левой выборки текущего изображения,
- местоположение (xBl, yBl ), специфицирующее верхнюю левую выборку текущего блока относительно верхней левой выборки текущего блока кодирования/декодирования,
- переменная edgeType, специфицирующая, фильтруется ли вертикальный (EDGE_VER) или горизонтальный (EDGE_HOR) край,
- переменные dE, dEp и dEq, содержащие решения,
- переменные maxFilterLengthP и maxFilterLengthQ, содержащие максимальные длины фильтров,
- переменная tC.
Выходными данными этого процесса является модифицированный массив recPicture выборок изображения.
В зависимости от значения edgeType применяется следующее:
- Если edgeType равен EDGE_VER, применяются следующие упорядоченные этапы:
Значения pi,k и qj,k выборок с i=0..maxFilterLengthP, j=0..maxFilterLengthQ и k=0..3 выводятся следующим образом:
qj,k=recPicture[ xCb+xBl+j ][ yCb+yBl+k ] (1341)
pi,k=recPicture[ xCb+xBl - i - 1 ][ yCb+yBl+k ] (1342)
Когда dE не равен 0 и dE не равен 3, для каждого местоположения ( xCb+xBl, yCb+yBl+k ) выборки, k=0..3, применяются следующие упорядоченные этапы:
Процесс фильтрации для выборки яркости с использованием коротких фильтров, как специфицируется в пункте 8.8.3.6.6, вызывается с переменными maxFilterLengthP, maxFilterLengthQ, значениями pi,k, qj,k выборок с i=0..maxFilterLengthP и j=0..maxFilterLengthQ, решением dE, переменными dEp и dEq и переменной tC в качестве входных данных, и числом отфильтрованных выборок nDp и nDq с каждой стороны границы блока и значениями pi' и qj' отфильтрованных выборок в качестве выходных данных.
Когда nDp больше, чем 0, значения pi' отфильтрованных выборок с i=0..nDp - 1 заменяют соответствующие выборки внутри массива recPicture выборок следующим образом:
recPicture[ xCb+xBl - i - 1 ][ yCb+yBl+k ]=pi' (1343)
Когда nDq больше, чем 0, значения qj' отфильтрованных выборок с j=0..nDq - 1 заменяют соответствующие выборки внутри массива recPicture выборок следующим образом:
recPicture[ xCb+xBl+j ][ yCb+yBl+k ]=qj' (1344)
Когда dE равен 3, для каждого местоположения ( xCb+xBl, yCb+yBl+k ) выборки, k=0..3, применяются следующие упорядоченные этапы:
Процесс фильтрации для выборки яркости с использованием длиных фильтров, как специфицируется в пункте 8.8.3.6.7, вызывается с переменными maxFilterLengthP, maxFilterLengthQ, значениями pi,k, qj,k выборок с i=0..maxFilterLengthP и j=0..maxFilterLengthQ и tC в качестве входных данных, и значениями pi' и qj' отфильтрованных выборок в качестве выходных данных.
Значения pi' отфильтрованных выборок с i=0..maxFilterLengthP - 1 заменяют соответствующие выборки внутри массива recPicture выборок следующим образом:
recPicture[ xCb+xBl - i - 1 ][ yCb+yBl+k ]=pi' (1345)
Значения qj' отфильтрованных выборок с j=0..maxFilterLengthQ - 1 заменяют соответствующие выборки внутри массива recPicture выборок следующим образом:
recPicture[ xCb+xBl+j ][ yCb+yBl+k ]=qj' (1346)
- В ином случае (edgeType равен EDGE_HOR), применяются следующие упорядоченные этапы:
1. Значения pi,k и qj,k выборок с i=0..maxFilterLengthP, j=0..maxFilterLengthQ и k=0..3 выводятся следующим образом:
qj,k =recPicture[ xCb+xBl+k ][ yCb+yBl+j ] (1347)
pi,k=recPicture[ xCb+xBl+k ][ yCb+yBl - i - 1 ] (1348)
2. Когда dE не равен 0 и dE не равен 3, для каждого местоположения ( xCb+xBl+k, yCb+yBl ) выборки, k=0..3, применяются следующие упорядоченные этапы:
Процесс фильтрации для выборки яркости с использованием коротких фильтров, как специфицируется в пункте 8.8.3.6.6, вызывается с переменными maxFilterLengthP, maxFilterLengthQ, значениями pi,k, qi,k выборок с i=0..maxFilterLengthP и j=0..maxFilterLengthQ, решением dE, переменными dEp и dEq, и переменной tC в качестве входных данных, и числом отфильтрованных выборок nDp и nDq с каждой стороны границы блока и значениями pi' и qj' отфильтрованных выборок в качестве выходных данных.
Когда nDp больше, чем 0, значения pi' отфильтрованных выборок с i=0..nDp - 1 заменяют соответствующие выборки внутри массива recPicture выборок следующим образом:
recPicture[ xCb+xBl+k ][ yCb+yBl - i - 1 ]=pi' (1349)
Когда nDq больше, чем 0, значения qj' отфильтрованных выборок с j=0..nDq - 1 заменяют соответствующие выборки внутри массива recPicture выборок следующим образом:
recPicture[ xCb+xBl+k ][ yCb+yBl+j ]=qj' (1350)
3. Когда dE равен 3, для каждого местоположения ( xCb+xBl+k, yCb+yBl ) выборки, k=0..3, применяются следующие упорядоченные этапы:
Процесс фильтрации для выборки яркости с использованием длиных фильтров, как специфицируется в пункте 8.8.3.6.7, вызывается с переменными maxFilterLengthP, maxFilterLengthQ, значениями pi,k, qj,k выборок с i=0..maxFilterLengthP и j=0..maxFilterLengthQ и переменной tC в качестве входных данных, и значениями pi' и qj' отфильтрованных выборок в качестве выходных данных.
Значения pi' отфильтрованных выборок с i=0..maxFilterLengthP - 1 заменяют соответствующие выборки внутри массива recPicture выборок следующим образом:
recPicture[ xCb+xBl+k ][ yCb+yBl - i - 1 ]=pi' (1351)
Значения qj' отфильтрованных выборок с j=0..maxFilterLengthQ - 1 заменяют соответствующие выборки внутри массива recPicture выборок следующим образом:
recPicture[ xCb+xBl+k ][ yCb+yBl+j ]=qj' (1352)
8.8.3.6.3 Процесс принятия решения для краев блока цветности
Этот процесс вызывается только тогда, когда ChromaArrayType не равен 0.
Входными данными для этого процесса являются:
- массив recPicture выборок цветности изображения,
- местоположение ( xCb, yCb ) цветности, специфицирующее верхнюю левую выборку текущего блока кодирования/декодирования цветности относительно верхней левой выборки цветности текущего изображения,
- местоположение (xBl, yBl ) цветности, специфицирующее верхнюю левую выборку текущего блока цветности относительно верхней левой выборки текущего блока кодирования/декодирования цветности,
- переменная edgeType, специфицирующая, фильтруется ли вертикальный (EDGE_VER) или горизонтальный (EDGE_HOR) край,
- переменная cIdx, специфицирующая индекс цветовой компоненты,
- переменная bS, специфицирующая интенсивность фильтрации границы,
- переменная maxFilterLengthP, специфицирующая максимальную длину фильтра,
- переменная maxFilterLengthQ, специфицирующая максимальную длину фильтра.
Выходными данными этого процесса являются
- модифицированные переменные длин maxFilterLengthP и maxFilterLengthQ фильтров,
- переменная tC.
Переменная maxK выводится следующим образом:
- Если edgeType равен EDGE_VER, применяется следующее:
maxK=( SubHeightC== 1 ) ? 3 : 1 (1353)
- В ином случае (edgeType равен EDGE_HOR), применяется следующее:
maxK=( SubWidthC== 1 ) ? 3 : 1 (1354)
Значения pi,k и qi, k с i=0..maxFilterLengthP, j=0..maxFilterLengthQ и k=0..maxK выводятся следующим образом:
- Если edgeType равен EDGE_VER, применяется следующее:
qj,k =recPicture[ xCb+xBl+j ][ yCb+yBl+k ] (1355)
pi,k =recPicture[ xCb+xBl - i - 1 ][ yCb+yBl+k ] (1356)
subSampleC=SubHeightC (1357)
- В ином случае (edgeType равен EDGE_HOR), применяется следующее:
qj,k =recPicture[ xCb+xBl+k ][ yCb+yBl+j ] (1358)
pi,k =recPicture[ xCb+xBl+k ][ yCb+yBl - i - 1 ] (1359)
subSampleC=SubWidthC (1360)
Переменная QpP выводится следующим образом:
- Местоположение ( xTbP, yTbP ) яркости устанавливается как позиция верхней левой выборки яркости блока преобразования, содержащего выборку p0,0, относительно верхней левой выборки яркости изображения.
- Если TuCResMode[ xTbP ][ yTbP ] равен 2, QpP устанавливается равным Qp'CbCr блока преобразования, содержащего выборку p0,0.
- В ином случае, если cIdx равен 1, QpP устанавливается равным Qp'Cb блока преобразования, содержащего выборку p0,0.
- В ином случае QpP устанавливается равным Qp'Cr блока преобразования, содержащего выборку p0,0.
Переменная QpQ выводится следующим образом:
- Местоположение ( xTbQ, yTbQ ) яркости устанавливается как позиция верхней левой выборки яркости блока преобразования, содержащего выборку q0,0, относительно верхней левой выборки яркости изображения.
- Если TuCResMode[ xTbQ ][ yTbQ ] равен 2, QpQ устанавливается равным Qp'CbCr блока преобразования, содержащего выборку q0,0.
- В ином случае, если cIdx равен 1, QpQ устанавливается равным Qp'Cb блока преобразования, содержащего выборку q0,0.
- В ином случае QpQ устанавливается равным Qp'Cr блока преобразования, содержащего выборку q0,0.
Переменная QpC выводится следующим образом:
QpC=( QpQ - QpBdOffset+QpP - QpBdOffset+1 ) >> 1 (1361)
Значение переменной β' определяется, как специфицируется в Таблице 43, на основе параметра Q квантования, выводимого следующим образом:
sliceBetaOffsetDiv2=( cIdx== 1 ? slice_cb_beta_offset_div2 :
slice_cr_beta_offset_div2 )
Q=Clip3( 0, 63, QpC + ( sliceBetaOffsetDiv2 << 1 ) ) (1362)
где slice_cb_beta_offset_div2 и slice_cr_beta_offset_div2 являются значениями синтаксических элементов slice_cb_beta_offset_div2 и slice_cr_beta_offset_div2, соответственно, для слайса, который содержит выборку q0,0.
Переменная β выводится следующим образом:
β=β' * ( 1 << ( BitDepth - 8 ) ) (1363)
Значение переменной tC' определяется, как специфицируется в Таблице 43, на основе параметра Q квантования цветности, выводимого следующим образом:
sliceTcOffsetDiv2=( cIdx== 1 ? slice_cb_tc_offset_div2 :
slice_cr_beta_offset_div2 )
Q=Clip3( 0, 65, QpC+2 * ( bS - 1 ) + ( sliceTcOffsetDiv2 << 1 ) ) (1364)
где slice_cb_tc_offset_div2 и slice_cr_beta_offset_div2 являются значениями синтаксических элементов slice_cb_tc_offset_div2 и slice_cr_beta_offset_div2, соответственно, для слайса, который содержит выборку q0,0.
Переменная tC выводится следующим образом:
tC=( BitDepth < 10 ) ? ( tC' + 2 ) >> ( 10 - BitDepth ) : tC' * ( 1 << ( BitDepth - 10 ) ) (1365)
Когда maxFilterLengthP и maxFilterLengthQ обе равны 1, а bS не равен 2, maxFilterLengthP и maxFilterLengthQ обе устанавливаются равными 0.
Когда maxFilterLengthQ равна 3, применяются следующие упорядоченные этапы:
1. Переменные n1 выводится следующим образом:
n1=subSampleC== 2 ? 1 : 3 (1366)
2. Когда maxFilterLengthP равна 1, выборки p3,0 и p2,0 обе устанавливаются равными p1,0, а выборки p3,n1, p2,n1 обе устанавливаются равными p1,n1.
3. Переменные dpq0, dpq1, dp, dq и d выводятся следующим образом:
dp0=Abs( p2,0 - 2 * p1,0+p0,0 ) (1367)
dp1=Abs( p2,n1 - 2 * p1,n1+p0,n1 ) (1368)
dq0=Abs( q2,0 - 2 * q1,0+q0,0 ) (1369)
dq1=Abs( q2,n1 - 2 * q1,n1+q0,n1 ) (1370)
dpq0=dp0+dq0 (1371)
dpq1=dp1+dq1 (1372)
dp=dp0+dp1 (1373)
dq=dq0+dq1 (1374)
d=dpq0+dpq1 (1375)
4. Переменные dSam0 и dSam1 обе устанавливаются равными 0.
5. Когда d меньше, чем β, применяются следующие упорядоченные этапы:
a. Переменная dpq устанавливается равной 2 * dpq0.
b. Переменная dSam0 выводится посредством вызова процесса принятия решения для выборки цветности, как специфицируется в пункте 8.8.3.6.8, для местоположения ( xCb+xBl, yCb+yBl ) выборки со значениями p0,0, p3,0, q0,0 и q3,0 выборок, переменными dpq, β и tC в качестве входных данных, а выходные данные присваиваются решению dSam0.
c. Переменная dpq устанавливается равной 2 * dpq1.
d. Переменная dSam1 модифицируется следующим образом:
- Если edgeType равен EDGE_VER, для местоположения ( xCb+xBl, yCb+yBl+n1 ) выборки, процесс принятия решения для выборки цветности, как специфицируется в пункте 8.8.3.6.8, вызывается со значениями p0,n1, p3,n1, q0,n1 и q3,n1 выборок, переменными dpq, β и tC в качестве входных данных, а выходные данные присваиваются решению dSam1.
- В ином случае (edgeType равен EDGE_HOR), для местоположения ( xCb+xBl+n1 , yCb+yBl ) выборки, процесс принятия решения для выборки цветности, как специфицируется в пункте 8.8.3.6.8, вызывается со значениями p0,n1, p3,n1, q0,n1 и q3,n1 выборок, переменными dpq, β и tC в качестве входных данных, а выходные данные присваиваются решению dSam1.
6. Когда dSam0 равно 0 или dSam1 равно 0, maxFilterLengthP и maxFilterLengthQ обе устанавливаются равными 1.
8.8.3.6.4 Процесс фильтрации для краев блока цветности
Этот процесс вызывается только тогда, когда ChromaArrayType не равен 0.
Входными данными для этого процесса являются:
- массив recPicture выборок цветности изображения,
- местоположение ( xCb, yCb ) цветности, специфицирующее верхнюю левую выборку текущего блока кодирования/декодирования цветности относительно верхней левой выборки цветности текущего изображения,
- местоположение (xBl, yBl ) цветности, специфицирующее верхнюю левую выборку текущего блока цветности относительно верхней левой выборки текущего блока кодирования/декодирования цветности,
- переменная edgeType, специфицирующая, фильтруется ли вертикальный (EDGE_VER) или горизонтальный (EDGE_HOR) край,
- переменная maxFilterLengthP, специфицирующая максимальную длину фильтра,
- переменная maxFilterLengthQ, специфицирующая максимальную длину фильтра,
- переменная tC.
Выходными данными этого процесса является модифицированный массив recPicture выборок цветности изображения.
Переменная maxK выводится следующим образом:
- Если edgeType равен EDGE_VER, применяется следующее:
maxK=( SubHeightC== 1 ) ? 3 : 1 (1376)
- В ином случае (edgeType равен EDGE_HOR), применяется следующее:
maxK=( SubWidthC== 1 ) ? 3 : 1 (1377)
Значения pi с i=0..maxFilterLengthP, qj с j=0..maxFilterLengthQ, и k=0..maxK выводятся следующим образом:
- Если edgeType равен EDGE_VER, применяется следующее:
qj,k =recPicture[ xCb+xBl+j ][ yCb+yBl+k ] (1378)
pi,k =recPicture[ xCb+xBl - i - 1 ][ yCb+yBl+k ] (1379)
- В ином случае (edgeType равен EDGE_HOR), применяется следующее:
qj,k =recPicture[ xCb+xBl+k ][ yCb+yBl+j ] (1380)
pi,k =recPicture[ xCb+xBl+k ][ yCb+yBl - i - 1 ] (1381)
В зависимости от значения edgeType применяется следующее:
- Если edgeType равен EDGE_VER, для каждого местоположения ( xCb+xBl, yCb+yBl+k ) выборки, k=0..maxK, применяются следующие упорядоченные этапы:
1. Процесс фильтрации для выборки цветности, как специфицируется в пункте 8.8.3.6.9, вызывается с переменными maxFilterLengthP и maxFilterLengthQ, значениями pi,k, qj,k выборок с i=0..maxFilterLengthP и j=0..maxFilterLengthQ и переменной tC в качестве входных данных, и значениями pi' и qj' отфильтрованных выборок с i=0..maxFilterLengthP - 1 и j=0..maxFilterLengthQ - 1 в качестве выходных данных.
2. Значения pi' и qj' отфильтрованных выборок с i=0..maxFilterLengthP - 1 и j=0..maxFilterLengthQ - 1 заменяют соответствующие выборки внутри массива recPicture выборок следующим образом:
recPicture[ xCb+xBl+j ][ yCb+yBl+k ]=qj' (1382)
recPicture[ xCb+xBl - i - 1 ][ yCb+yBl+k ]=pi' (1383)
- В ином случае (edgeType равен EDGE_HOR), для каждого местоположения ( xCb+xBl+k , yCb+yBl ) выборки, k=0..maxK, применяются следующие упорядоченные этапы:
1. Процесс фильтрации для выборки цветности, как специфицируется в пункте 8.8.3.6.9, вызывается с переменной maxFilterLengthP и maxFilterLengthQ, значениями pi,k, qj,k выборок с i=0..maxFilterLengthP и j=0..maxFilterLengthQ и переменной tC в качестве входных данных, и значениями pi' и qj' отфильтрованных выборок с i=0..maxFilterLengthP - 1 и j=0..maxFilterLengthQ - 1 в качестве выходных данных.
2. Значения pi' и qj' отфильтрованных выборок с i=0..maxFilterLengthP - 1 и j=0..maxFilterLengthQ - 1 заменяют соответствующие выборки внутри массива recPicture выборок следующим образом:
recPicture[ xCb+xBl+k ][ yCb+yBl+j ]=qj' (1384)
recPicture[ xCb+xBl+k ][ yCb+yBl - i - 1 ]=pi' (1385)
8.8.3.6.5 Процесс принятия решения для выборки яркости
Входными данными для этого процесса являются:
- значения p0, p3, q0 и q3 выборок,
- переменные dpq, sp, sq, spq, sidePisLargeBlk, sideQisLargeBlk, β и tC.
Выходными данными этого процесса является переменная dSam, содержащая решение.
Переменные sp и sq модифицируются следующим образом:
- Когда sidePisLargeBlk равна 1, применяется следующее:
sp=( sp+Abs( p3 - p0 ) + 1 ) >> 1 (1386)
- Когда sideQisLargeBlk равна 1, применяется следующее:
sq=( sq+Abs( q3 - q0 ) + 1 ) >> 1 (1387)
Переменные sThr1 и sThr2 выводятся следующим образом:
- Если sidePisLargeBlk равна 1 или sideQisLargeBlk равна 1, применяется следующее:
sThr1=3 * β >> 5 (1388)
sThr2=β >> 4 (1389)
- В ином случае применяется следующее:
sThr1=β >> 3 (1390)
sThr2=β >> 2 (1391)
Переменная dSam специфицируется следующим образом:
- Если все нижеследующие условия выполняются, dSam устанавливается равным 1:
- dpq меньше, чем sThr2,
- sp+sq меньше, чем sThr1,
- spq меньше, чем ( 5 * tC+1 ) >> 1.
- В ином случае dSam устанавливается равным 0.
8.8.3.6.6 Процесс фильтрации для выборки яркости с использованием коротких фильтров
Входными данными для этого процесса являются:
- переменные maxFilterLengthP и maxFilterLengthQ,
- значения pi и qj выборок с i=0..maxFilterLengthP и j=0..maxFilterLengthQ,
- переменная dE,
- переменные dEp и dEq, содержащие решения для фильтрации выборок p1 и q1, соответственно,
- переменная tC.
Выходными данными этого процесса являются:
- число отфильтрованных выборок nDp и nDq,
- значения pi' и qj' отфильтрованных выборок с i=0..nDp - 1, j=0..nDq - 1.
В зависимости от значения dE применяется следующее:
- Если переменная dE равна 2, nDp и nDq оба устанавливаются равными 3, и применяется следующая сильная фильтрация:
p0' =Clip3( p0 - 3 * tC, p0+3 * tC, ( p2+2 * p1+2 * p0+2 * q0+q1+4 ) >> 3 ) (1392)
p1'=Clip3( p1 - 2 * tC, p1+2 * tC, ( p2+p1+p0+q0+2 ) >> 2 ) (1993)
p2'=Clip3( p2 - 1 * tC, p2+1*tC, ( 2 * p3+3 * p2+p1+p0+q0+4 ) >> 3 ) (1394)
q0'=Clip3( q0 - 3 * tC, q0+3 * tC, ( p1+2 * p0+2 * q0+2 * q1+q2+4 ) >> 3 ) (1395)
q1'=Clip3( q1 - 2 * tC, q1+2 * tC, ( p0+q0+q1+q2+2 ) >> 2 ) (1396)
q2'= Clip3( q2 - 1 * tC, q2+1 * tC, ( p0+q0+q1+3 * q2+2 * q3+4 ) >> 3 ) (1397)
- В ином случае nDp и nDq оба устанавливаются равными 0, и применяется следующая слабая фильтрация:
- Применяется следующее:
Δ=( 9 * ( q0 - p0 ) - 3 * ( q1 - p1 ) + 8 ) >> 4 (1398)
- Когда Abs(Δ) меньше, чем tC * 10, применяются следующие упорядоченные этапы:
- Значения p0' и q0' отфильтрованных выборок специфицируются следующим образом:
Δ=Clip3( -tC, tC, Δ ) (1399)
p0'=Clip1( p0 + Δ ) (1400)
q0'=Clip1( q0 - Δ ) (1401)
- Когда dEp равна 1, значение p1' отфильтрованной выборки специфицируется следующим образом:
Δp=Clip3( -( tC >> 1 ), tC >> 1, ( ( ( p2+p0+1 ) >> 1 ) - p1 + Δ ) >> 1 ) (1402)
p1'=Clip1( p1 + Δp ) (1403)
- Когда dEq равна 1, значение q1' отфильтрованной выборки специфицируется следующим образом:
Δq=Clip3( -( tC >> 1 ), tC >> 1, ( ( ( q2+q0+1 ) >> 1 ) - q1 - Δ ) >> 1 ) (1404)
q1'=Clip1( q1 + Δq ) (1405)
- nDp устанавливается равным dEp+1, а nDq устанавливается равным dEq+1.
Когда nDp больше, чем 0, и pred_mode_plt_flag единицы кодирования/декодирования, которая включает в себя блок кодирования/декодирования, содержащий выборку p0, равен 1, nDp устанавливается равным 0
Когда nDq больше, чем 0, и pred_mode_plt_flag единицы кодирования/декодирования, которая включает в себя блок кодирования/декодирования, содержащий выборку q0, равен 1, nDq устанавливается равным 0:
8.8.3.6.7 Процесс фильтрации для выборки яркости с использованием длинных фильтров
Входными данными для этого процесса являются:
- переменные maxFilterLengthP и maxFilterLengthQ,
- значения pi и qj выборок с i=0..maxFilterLengthP и j=0..maxFilterLengthQ,
- переменная tC.
Выходными данными этого процесса являются:
- значения pi' и qj' отфильтрованных выборок с i=0..maxFilterLengthP - 1, j=0..maxFilterLenghtQ - 1.
Переменная refMiddle выводится следующим образом:
- Если maxFilterLengthP равна maxFilterLengthQ и maxFilterLengthP равна 5, применяется следующее:
refMiddle=( p4+p3+2* ( p2+p1+p0+q0+q1+q2 ) + q3+q4+8) >> 4 (1406)
- В ином случае, если maxFilterLengthP равна maxFilterLengthQ и maxFilterLengthP не равна 5, применяется следующее:
refMiddle=( p6+p5+p4+p3+p2+p1+2* ( p0+q0 ) + q1+q2+q3+q4+q5+q6+8 ) >> 4 (1407)
- В ином случае, если выполняется одно из следующих условий:
maxFilterLengthQ равна 7, а maxFilterLengthP равна 5,
maxFilterLengthQ равна 5, а maxFilterLengthP равна 7,
применяется следующее:
refMiddle =( p5+p4+p3+p2+2* ( p1+p0+q0+q1 ) + q2+q3+q4+q5+8 ) >> 4 (1408)
- В ином случае, если выполняется одно из следующих условий:
- maxFilterLengthQ равна 5, а maxFilterLengthP равна 3,
- maxFilterLengthQ равна 3, а maxFilterLengthP равна 5,
применяется следующее:
refMiddle=( p3+p2+p1+p0+q0+q1+q2+q3+4) >> 3 (1409)
- В ином случае, если maxFilterLengthQ равна 7 и maxFilterLengthP равна 3, применяется следующее:
refMiddle=( 2 * ( p2+p1+p0+q0 ) + p0+p1+q1+q2+q3+q4+q5+q6+8 ) >> 4 (1410)
- В ином случае применяется следующее:
refMiddle=( p6+p5+p4+p3+p2+p1+2*( q2+q1+q0+p0) + q0+q1+8 ) >> 4 (1411)
Переменные refP и refQ выводятся следующим образом:
refP=( pmaxFilterLengtP+pmaxFilterLengthP-1+1 ) >> 1 (1412)
refQ =( qmaxFilterLengtQ+qmaxFilterLengthQ-1+1 ) >> 1 (1413)
Переменные fi и tCPDi задаются следующим образом:
- Если maxFilterLengthP равна 7, применяется следующее:
f0..6={ 59, 50, 41, 32, 23, 14, 5 } (1414)
tCPD0..6={ 6, 5, 4, 3, 2, 1, 1 } (1415)
- В ином случае, если maxFilterLengthP равна 5, применяется следующее:
f0..4={ 58, 45, 32, 19, 6 } (1416)
tCPD0..4={ 6, 5, 4, 3, 2 } (1417)
- В ином случае применяется следующее:
f0..2={ 53, 32, 11 } (1418)
tCPD0..2={ 6, 4, 2} (1419)
Переменные gj и tCQDj задаются следующим образом:
- Если maxFilterLengthQ равна 7, применяется следующее:
g0..6={ 59, 50, 41, 32, 23, 14, 5 } (1420)
tCQD0..6={ 6, 5, 4, 3, 2, 1, 1 } (1421)
- В ином случае, если maxFilterLengthQ равна 5, применяется следующее:
g0..4={ 58, 45, 32, 19, 6 } (1422)
tCQD0..4={ 6, 5, 4, 3, 2 } (1423)
- В ином случае применяется следующее:
g0..2={ 53, 32, 11 } (1424)
tCQD0..2={ 6, 4, 2 } (1425)
Значения pi' и qj' отфильтрованных выборок с i=0..maxFilterLengthP - 1 и j=0..maxFilterLengthQ - 1 выводятся следующим образом:
pi'=Clip3( pi - ( tC*tCPDi ) >> 1, pi + ( tC*tCPDi ) >> 1, ( refMiddle*fi+refP*( 64 - fi ) + 32) >> 6 ) (1426)
qj'=Clip3( qj - ( tC*tCQDj ) >> 1, qj + ( tC*tCQDj ) >> 1, ( refMiddle*gj+refQ*(64 - gj ) + 32) >> 6 ) (1427)
Когда pred_mode_plt_flag единицы кодирования/декодирования, которая включает в себя блок кодирования/декодирования, содержащий выборку pi, равен 1, значение отфильтрованной выборки pi' замещается соответствующим входным значением выборки pi с i=0..maxFilterLengthP - 1.
Когда pred_mode_plt_flag единицы кодирования/декодирования, которая включает в себя блок кодирования/декодирования, содержащий выборку qi, равен 1, значение отфильтрованной выборки qi' замещается соответствующим входным значением выборки qj с j=0..maxFilterLengthQ - 1.
8.8.3.6.8 Процесс принятия решения для выборки цветности
Входными данными для этого процесса являются:
- значения p0, p3, q0 и q3 выборок,
- переменные dpq, β и tC.
Выходными данными этого процесса является переменная dSam, содержащая решение.
Переменная dSam специфицируется следующим образом:
- Если все нижеследующие условия выполняются, dSam устанавливается равным 1:
- dpq меньше, чем ( β >> 2 ),
- Abs( p3 - p0 ) + Abs( q0 - q3 ) меньше, чем ( β >> 3 ),
- Abs( p0 - q0 ) меньше, чем ( 5 * tC+1 ) >> 1.
- В ином случае dSam устанавливается равным 0.
8.8.3.6.9 Процесс фильтрации для выборки цветности
Этот процесс вызывается только тогда, когда ChromaArrayType не равен 0.
Входными данными для этого процесса являются:
- переменные maxFilterLengthP и maxFilterLengthQ,
- значения pi и qj выборок цветности с i=0..maxFilterLengthP - 1 и j=0..maxFilterLengthQ - 1,
- переменная tC.
Выходными данными этого процесса являются значения pi' и qj' с i=0..maxFilterLengthP - 1 и j=0..maxFilterLengthQ - 1,
Значения pi' и qj' отфильтрованных выборок с i=0..maxFilterLengthP - 1 и j=0..maxFilterLengthQ - 1 выводятся следующим образом:
- Если maxFilterLengthP и maxFilterLengthQ обе равны 3, применяется следующая сильная фильтрация:
p0'=Clip3( p0 - tC, p0+tC, ( p3+p2+p1+2 * p0+q0+q1+q2+4 ) >> 3 ) (1428)
p1'=Clip3( p1 - tC, p1+tC, ( 2 * p3+p2+2 * p1+p0+q0+q1+4 ) >> 3 ) (1429)
p2'=Clip3( p2 - tC, p2+tC, ( 3 * p3+2 * p2+p1+p0+q0+4 ) >> 3 ) (1430)
q0'=Clip3( q0 - tC, q0+tC, ( p2+p1+p0+2 * q0+q1+q2+q3+4 ) >> 3 ) (1431)
q1'=Clip3( q1 - tC, q1+tC, ( p1+p0+q0+2 * q1+q2+2 * q3+4 ) >> 3 ) (1432)
q2'= Clip3( q2 - tC, q2+tC, ( p0+q0+q1+2 * q2+3 * q3+4 ) >> 3 ) (1433)
- В ином случае, если переменная maxFilterLengthP равна 1, а maxFilterLengthQ равна 3, применяется следующая фильтрация:
p0'=Clip3( p0 - tC, p0+tC, ( 3 * p1+2 * p0+q0+q1+q2+4 ) >> 3 ) (1434)
q0'=Clip3( q0 - tC, q0+tC, ( 2 * p1+p0+2 * q0+q1+q2+q3+4 ) >> 3 ) (1435)
q1'=Clip3( q1 - tC, q1+tC, ( p1+p0+q0+2 * q1+q2+2 * q3+4 ) >> 3 ) (1436)
q2'= Clip3( q2 - tC, q2+tC, ( p0+q0+q1+2 * q2+3 * q3+4 ) >> 3 ) (1437)
- В ином случае применяется следующая слабая фильтрация:
Δ=Clip3( -tC, tC, ( ( ( ( q0 - p0 ) << 2 ) + p1 - q1+4 ) >> 3 ) ) (1438)
p0'=Clip1( p0 + Δ ) (1439)
q0'=Clip1( q0 - Δ ) (1440)
Когда pred_mode_plt_flag единицы кодирования/декодирования, которая включает в себя блок кодирования/декодирования, содержащий выборку pi, равен 1, значение отфильтрованной выборки pi' замещается соответствующим входным значением выборки pi с i=0..maxFilterLengthP - 1.
Когда pred_mode_plt_flag единицы кодирования/декодирования, которая включает в себя блок кодирования/декодирования, содержащий выборку qi, равен 1, значение отфильтрованной выборки qi' замещается соответствующим входным значением выборки qi с i=0..maxFilterLengthQ - 1.
В настоящее время сигнализация параметров управления деблокированием Cb и Cr выполняется, даже если цветовым форматом кодированной последовательности является 4:0:0, например, когда значение ChromaArrayType равно 0. Когда входная последовательность не содержит цветовой компоненты, для цветовых компонент выполнять деблокирование дополнительно не требуется.
В некоторых случаях параметры управления деблокированием могут быть одинаковыми для яркости и обоих компонент цветности в типичных случаях.
Для блоков, которые кодируются/декодируются с использованием совместного Cb-Cr-механизма, могут иметься разные характеристики ошибок квантования и, следовательно, можно извлечь выгоду из того, что сигнализируются отдельные параметры управления деблокированием (смещения Tc и Бета).
Вариант 1 осуществления
В этом варианте осуществления смещения Tc и бета для деблокирования Cb и Cr (для простоты далее мы их называем параметрами управления деблокированием в этой заявке) (только) сигнализируются, когда значение ChromaArrayType не равно 0.
Синтаксис для этого варианта осуществления показан следующим образом:
Синтаксис набора параметров изображения (PPS):
Или
Синтаксис заголовка изображения (PH):
Или
Синтаксис заголовка слайса:
В некоторых примерах значение ChromaArrayType может не получаться на уровне синтаксиса PPS, поскольку ChromaArrayType сигнализируется на уровне набора параметров последовательности (SPS). Условная сигнализация, основанная на ChromaArrayType в PPS, может создать зависимость синтаксического анализа между SPS и PPS. Поэтому одним альтернативным решением является перенос существующих параметров управления деблокированием из PPS на уровень SPS. Таким образом, избегается зависимость синтаксического анализа между SPS и PPS.
Альтернативно, параметры управления деблокированием могут быть условно сигнализированы на основе уже существующего синтаксического элемента, называемого pps_chroma_tool_offsets_present_flag.
Модифицированный синтаксис PPS показан ниже :
Синтаксис набора параметров изображения (PPS):
Преимущество вышеупомянутого решения состоит в том, что оно не создает какой-либо зависимости синтаксического анализа между SPS и PPS и сигнализирует параметры управления деблокированием для Cb- и Cr-компонент только когда значение ChromaArrayType не равно 0.
Другим альтернативным решением было бы не сигнализировать условно параметр управления деблокированием на уровне PPS (на основе ChromaArrayType), а сигнализировать их условно на уровне SH и PH (на основе ChromaArrayType).
В этом варианте осуществления определение этих синтаксисов в таблице может ссылаться на приведенные выше части описаниям.
Вариант 2 осуществления
В этом варианте осуществления сигнализируется новый синтаксический элемент. Этот синтаксис используется для указания того, являются ли параметры управления деблокированием цветности и яркости одинаковыми или нет. Когда значения параметров управления деблокированием цветности и яркости являются разными, дополнительно сигнализируются параметры управления деблокированием Cb и Cr. Этот вариант осуществления устраняет избыточную сигнализацию, когда параметры деблокирования одинаковы для компонент цветности и яркости.
Синтаксис и семантика для этого варианта осуществления показаны ниже:
Синтаксис набора параметров изображения (PPS):
Или синтаксис заголовка изображения (PH):
Или синтаксис заголовка слайса (SH):
Семантика новых вводимых синтаксических элементов является следующей:
slice_chroma_offset_same_as_luma, равный 0, специфицирует, что синтаксические элементы slice_cb_beta_offset_div2, slice_cb_tc_offset_div2, slice_cr_beta_offset_div2 и slice_cr_tc_offset_div2 дополнительно сигнализируются в заголовке слайса. slice_chroma_offset_same_as_luma, равный 1, специфицирует, что значения синтаксических элементов slice_cb_beta_offset_div2, slice_cb_tc_offset_div2, slice_cr_beta_offset_div2 и slice_cr_tc_offset_div2 дополнительно не сигнализируются и предполагаются такими же, как slice_beta_offset_div2 и slice_tc_offset_div2 соответственно.
ph_chroma_offsets_same_as_luma, равный 0, специфицирует, что синтаксические элементы ph_cb_beta_offset_div2, ph_cb_tc_offset_div2, ph_cr_beta_offset_div2 и ph_cr_tc_offset_div2 дополнительно сигнализируются в заголовке изображения. ph_chroma_offsets_same_as_luma, равный 1, специфицирует, что значения синтаксических элементов ph_cb_beta_offset_div2, ph_cb_tc_offset_div2, ph_cr_beta_offset_div2 и ph_cr_tc_offset_div2 не сигнализируются и дополнительно предполагаются такими же, как ph_beta_offset_div2 и ph_tc_offset_div2 соответственно.
pps_chroma_offsets_same_as_luma, равный 0, специфицирует, что синтаксические элементы pps_cb_beta_offset_div2, pps_cb_tc_offset_div2, pps_cr_beta_offset_div2 и pps_cr_tc_offset_div2 дополнительно сигнализируются в PPS. pps_chroma_offsets_same_as_luma, равный 1, специфицирует, что значения синтаксических элементов pps_cb_beta_offset_div2, pps_cb_tc_offset_div2, pps_cr_beta_offset_div2 и pps_cr_tc_offset_div2 не сигнализируются и дополнительно предполагаются такими же, как pps_beta_offset_div2 и pps_tc_offset_div2 соответственно.
Определение других синтаксисов в таблице может ссылаться на приведенные выше части описаниям.
Вариант 3 осуществления
В этом варианте осуществления вводятся отдельные параметры смещения tc и бета для кодируемых/декодируемых с совместными cb-cr блоков.
Синтаксис является следующим:
Синтаксис набора параметров изображения (PPS):
Синтаксис заголовка изображения (PH):
Синтаксис заголовка слайса (SH):
Семантика новых вводимых синтаксических элементов является следующей:
pps_cbcr_beta_offset_div2 и pps_cbcr_tc_offset_div2 специфицируют смещения параметров деблокирования по умолчанию для β и tC (деленные на 2), которые применяются к совместной Cb-Cr-компоненте для слайсов, ссылающихся на PPS, если смещения параметров деблокирования по умолчанию не переопределяются смещениями параметров деблокирования, присутствующими в заголовках изображений или заголовках слайсов упомянутых слайсов, ссылающихся на PPS. Значения обоих pps_cbcr_beta_offset_div2 и pps_cbcr_tc_offset_div2 должны находиться в диапазоне от -12 до 12 включительно. Когда не присутствуют, значения обоих pps_cbcr_beta_offset_div2 и pps_cbcr_tc_offset_div2 предполагаются равными 0.
ph_cbcr_beta_offset_div2 и ph_cbcr_tc_offset_div2 специфицируют смещения параметров деблокирования для β и tC (деленные на 2), которые применяются к совместной Cb-Cr-компоненте для слайсов, связанных с PH. Значения ph_cbcr_beta_offset_div2 и ph_cbcr_tc_offset_div2 должны находиться в диапазоне от -12 до 12 включительно. Когда не присутствуют, значения ph_cbcr_beta_offset_div2 и ph_cbcr_tc_offset_div2 предполагаются равными pps_cbcr_beta_offset_div2 и pps_cbcr_tc_offset_div2,
slice_cbcr_beta_offset_div2 и slice_cbcr_tc_offset_div2 специфицируют смещения параметров деблокирования для β и tC (деленные на 2), которые применяются к совместной Cb-Cr-компоненте для текущего слайса. Значения обоих slice_cbcr_beta_offset_div2 and slice_cbcr_tc_offset_div2 должны находиться в диапазоне от -12 до 12 включительно. Когда не присутствуют, значения slice_cbcr_beta_offset_div2 и slice_cbcr_tc_offset_div2 предполагаются равными ph_cbcr_beta_offset_div2 и ph_cbcr_tc_offset_div2, соответственно.
Необходимые изменения в выведении значения QP для деблокирования цветности заключаются в следующем:
Значение переменной β' определяется, как специфицируется в Таблице 43, на основе параметра Q квантования, выводимого следующим образом:
sliceBetaOffsetDiv2=((TuCResMode[ xTbQ ][ yTbQ ] == 2) || (TuCResMode[ xTbp ][ yTbp ]
== 2)? slice_cbcr_beta_offset_div2: (cIdx== 1 ? slice_cb_beta_offset_div2 :
slice_cr_beta_offset_div2 ))
Q=Clip3( 0, 63, QpC + ( sliceBetaOffsetDiv2 << 1 ) ) (1355)
где slice_cb_beta_offset_div2, slice_cr_beta_offset_div2 и slice_cbcr_beta_offset_div2 являются значениями синтаксических элементов slice_cb_beta_offset_div2, slice_cr_beta_offset_div2 и slice_cbcr_beta_offset_div2, соответственно, для слайса, который содержит выборку q0,0
Значение переменной tC' определяется, как специфицируется в Таблице 43, на основе параметра Q квантования цветности, выводимого следующим образом:
sliceTcOffsetDiv2=((TuCResMode[ xTbQ ][ yTbQ ] || TuCResMode[ xTbp ][ yTbp ] == 2) ?
slice_cbcr_tc_offset_div2: (cIdx== 1 ? slice_cb_tc_offset_div2 :
slice_cr_tc_offset_div2 ))
Q=Clip3( 0, 65, QpC+2 * ( bS - 1 ) + ( sliceTcOffsetDiv2 << 1 ) ) (1357)
где slice_cb_tc_offset_div2, slice_cr_beta_offset_div2 и slice_cr_tc_offset_div2 являются значениями синтаксических элементов slice_cb_tc_offset_div2, slice_cr_tc_offset_div2 и slice_cbcr_tc_offset_div2, соответственно, для слайса, который содержит выборку q0,0.
Определение других синтаксисов в таблице может ссылаться на приведенные выше части описаниям.
В реализации, показанной на Фиг. 8, раскрыт способ кодирования/декодирования, реализуемый устройством декодирования, причем способ содержит:
S801: получение битового потока.
Битовый поток может быть получен согласно беспроводной сети или проводной сети. Битовый поток может передаваться с веб-сайта, сервера или другого удаленного источника с использованием коаксиального кабеля, оптоволоконного кабеля, витой пары, цифровой абонентской линии (DSL) или беспроводных технологий, таких как инфракрасное, радио, микроволновое излучение, WIFI, Bluetooth, LTE или 5G.
В варианте осуществления битовый поток представляет собой последовательность битов в форме потока единиц уровня сетевой абстракции (NAL) или потока байтов, который формирует представление последовательности единиц доступа (AU), образующих одну или несколько кодируемых/декодируемых видеопоследовательностей (CVS).
В некоторых вариантах осуществления для процесса декодирования сторона декодера считывает битовый поток и выводит декодированные изображения из битового потока; для процесса кодирования сторона кодера создает битовый поток.
Обычно битовый поток будет содержать синтаксические элементы, которые формируются синтаксической структурой. синтаксический элемент: элемент данных, представленных в битовом потоке.
синтаксическая структура: ноль или более синтаксических элементов, присутствующих вместе в битовом потоке в определенном порядке.
В конкретном примере форматы битового потока специфицирует взаимосвязь между потоком единиц уровня сетевой абстракции (NAL) и потоком байтов, любой из которых называется битовым потоком.
Битовый поток может быть в одном из двух форматов: формате потока единиц NAL или формате потока байтов. Формат потока единиц NAL концептуально является более "базовым" типом. Формат потока единиц NAL содержит последовательность синтаксических структур, называемых единицами NAL. Эта последовательность упорядочена в порядке декодирования. Существуют ограничения, налагаемые на порядок декодирования (и содержимое) единиц NAL в потоке единиц NAL.
Формат потока байтов может быть построен из формата потока единиц NAL путем упорядочения единиц NAL в порядке декодирования и добавления к каждой единице NAL префикса начального кода и нуля или более байтов с нулевым значением для формирования потока байтов. Формат потока единиц NAL может быть извлечен из формата потока байтов путем нахождения местоположения в этом потоке байтов уникального шаблона префикса начального кода.
Этот пункт специфицирует взаимосвязь между исходными и декодируемыми изображениями, которая задается через битовый поток.
Видеоисточник, который представляется битовым потоком, представляет собой последовательность изображений в порядке декодирования.
Каждое из исходных и декодируемых изображений состоит из одного или нескольких массивов выборок:
- Только яркость (Y) (монохромный).
- Яркость и две цветности (YCbCr или YCgCo).
- Зеленый, синий и красный (GBR, также известный как RGB).
- Массивы, представляющие другие неспецифицированные монохромные или трехстимульные цветовые дискретизации (например YZX, также известная XYZ).
Переменные и члены, связанные с этими массивами, называются яркость (или L или Y) и цветность, причем два массива цветности называются Cb и Cr; независимо от фактического используемого способа представления цвета. Фактический используемый способ представления цвета может быть указан в синтаксисе, который специфицирован в VUI-параметрах, как специфицировано в ITU-T H.SEI | ISO/IEC 23002-7.
S802: получение значения синтаксического элемента из битового потока.
В реализации значение синтаксического элемента связано с параметром управления деблокированием для компоненты цветности слайса кодируемого/декодируемого изображения. Например, значение синтаксического элемента указывает, присутствуют ли в структуре полезных данных последовательности необработанных байтов, RBSP, набора параметров изображения, PPS, связанные со смещениями инструмента цветности синтаксические элементы.
В примере синтаксис представляется согласно pps_chroma_tool_offsets_present_flag. pps_chroma_tool_offsets_present_flag, равный 1, специфицирует, что в синтаксической PPS RBSP-структуре присутствуют связанные со смещениями инструмента цветности синтаксические элементы и синтаксические элементы смещения β и tc деблокирования цветности могут присутствовать в синтаксических PH-структурах или SH изображений, ссылающихся на PPS. pps_chroma_tool_offsets_present_flag, равный 0, специфицирует, что в синтаксической PPS RBSP-структуре не присутствуют связанные со смещениями инструмента цветности синтаксические элементы и синтаксические элементы смещения β и tc деблокирования цветности не присутствуют в синтаксических PH-структурах или SH изображений, ссылающихся на PPS. Когда sps_chroma_format_idc равен 0, значение pps_chroma_tool_offsets_present_flag должно быть равно 0.
В примере значение синтаксического элемента получается в PPS.
В примере, когда в видеопоследовательности отсутствует цветовая компонента, значение синтаксического элемента равно 0.
В примере значение синтаксиса используется для определения того, является ли параметр управления деблокированием для компоненты яркости блока кодирования/декодирования таким же, как параметр управления деблокированием для компоненты цветности этого блока.
S803: получение значения параметра управления деблокированием для компоненты цветности слайса из битового потока, когда значение синтаксического элемента равно предустановленному значению.
Предустановленное значение представляет собой целочисленное значение. В примере предустановленное значение не равно 0. В примере предустановленное значение равно 1.
В примере значение параметра управления деблокированием для компоненты цветности блока кодирования/декодирования получается в PPS.
В примере значение параметра управления деблокированием для компоненты цветности слайса получается в заголовке изображения, PH.
В примере значение параметра управления деблокированием для компоненты цветности слайса получается в заголовке слайса, SH.
В примере параметр управления деблокированием для компоненты цветности слайса сигнализируется, когда видеопоследовательность имеет цветовую компоненту.
В примере, на уровне PPS, параметр управления деблокированием для компоненты цветности слайса представляется согласно pps_cb_beta_offset_div2, pps_cb_tc_offset_div2, pps_cr_beta_offset_div2 или pps_cr_tc_offset_div2.
Можно понять, что в некоторых реализациях существует только один параметр управления деблокированием для компоненты цветности или любая комбинация этих параметров управления деблокированием. Например, все эти четыре параметра управления деблокированием сигнализируются условно согласно значению pps_chroma_tool_offsets_present_flag.
pps_cb_beta_offset_div2 и pps_cb_tc_offset_div2 специфицируют смещения параметров деблокирования по умолчанию для β и tC (деленные на 2), которые применяются к Cb-компоненте для слайсов, ссылающихся на PPS, если смещения параметров деблокирования по умолчанию не переопределяются смещениями параметров деблокирования, присутствующими в заголовках изображений или заголовках слайсов упомянутых слайсов, ссылающихся на PPS. Значения pps_cb_beta_offset_div2 и pps_cb_tc_offset_div2 должны оба находиться в диапазоне от -12 до 12 включительно. Когда не присутствуют, значения pps_cb_beta_offset_div2 и pps_cb_tc_offset_div2 предполагаются равными pps_luma_beta_offset_div2 и pps_luma_tc_offset_div2, соответственно.
pps_cr_beta_offset_div2 и pps_cr_tc_offset_div2 специфицируют смещения параметров деблокирования по умолчанию для β и tC (деленные на 2), которые применяются к Cr-компоненте для слайсов, ссылающихся на PPS, если смещения параметров деблокирования по умолчанию не переопределяются смещениями параметров деблокирования, присутствующими в заголовках изображений или заголовках слайсов упомянутых слайсов, ссылающихся на PPS. Значения pps_cr_beta_offset_div2 и pps_cr_tc_offset_div2 должны оба находиться в диапазоне от -12 до 12 включительно. Когда не присутствуют, значения pps_cr_beta_offset_div2 и pps_cr_tc_offset_div2 предполагаются равными pps_luma_beta_offset_div2 и pps_luma_tc_offset_div2, соответственно.
pps_luma_beta_offset_div2 и pps_luma_tc_offset_div2 специфицируют смещения параметров деблокирования по умолчанию для β и tC (деленные на 2), которые применяются к компоненте яркости для слайсов, ссылающихся на PPS, если смещения параметров деблокирования по умолчанию не переопределяются смещениями параметров деблокирования, присутствующими в заголовках изображений или заголовках слайсов упомянутых слайсов, ссылающихся на PPS. Значения обоих pps_luma_beta_offset_div2 and pps_luma_tc_offset_div2 должны находиться в диапазоне от -12 до 12 включительно. Когда не присутствуют, значения обоих pps_luma_beta_offset_div2 и pps_luma_tc_offset_div2 предполагаются равными 0.
В примере, на уровне PH, параметр управления деблокированием для компоненты цветности слайса представляется согласно ph_cb_beta_offset_div2, ph_cb_tc_offset_div2, ph_cr_beta_offset_div2 или ph_cr_tc_offset_div2. Можно понять, что в некоторых реализациях существует только один параметр управления деблокированием для компоненты цветности или любая комбинация этих параметров управления деблокированием. Например, все эти четыре параметра управления деблокированием сигнализируются условно согласно значению pps_chroma_tool_offsets_present_flag.
ph_cb_beta_offset_div2 и ph_cb_tc_offset_div2 специфицируют смещения параметров деблокирования для β и tC (деленные на 2), которые применяются к Cb-компоненте для слайсов в текущем изображении. Значения ph_cb_beta_offset_div2 и ph_cb_tc_offset_div2 должны оба находиться в диапазоне от -12 до 12 включительно.
Когда не присутствуют, значения ph_cb_beta_offset_div2 и ph_cb_tc_offset_div2 логически выводятся следующим образом:
Если pps_chroma_tool_offsets_present_flag равен 1, значения ph_cb_beta_offset_div2 и ph_cb_tc_offset_div2 предполагаются равными pps_cb_beta_offset_div2 и pps_cb_tc_offset_div2, соответственно.
В ином случае (pps_chroma_tool_offsets_present_flag равен 0), значения ph_cb_beta_offset_div2 и ph_cb_tc_offset_div2 предполагаются равными ph_luma_beta_offset_div2 и ph_luma_tc_offset_div2, соответственно.
ph_cr_beta_offset_div2 и ph_cr_tc_offset_div2 специфицируют смещения параметров деблокирования для β и tC (деленные на 2), которые применяются к Cr-компоненте для слайсов в текущем изображении. Значения ph_cr_beta_offset_div2 и ph_cr_tc_offset_div2 должны оба находиться в диапазоне от -12 до 12 включительно.
Когда не присутствуют, значения ph_cr_beta_offset_div2 и ph_cr_tc_offset_div2 логически выводятся следующим образом:
Если pps_chroma_tool_offsets_present_flag равен 1, значения ph_cr_beta_offset_div2 и ph_cr_tc_offset_div2 предполагаются равными pps_cr_beta_offset_div2 и pps_cr_tc_offset_div2, соответственно.
В ином случае (pps_chroma_tool_offsets_present_flag равен 0), значения ph_cr_beta_offset_div2 и ph_cr_tc_offset_div2 предполагаются равными ph_luma_beta_offset_div2 и ph_luma_tc_offset_div2, соответственно.
ph_luma_beta_offset_div2 и ph_luma_tc_offset_div2 специфицируют смещения параметров деблокирования для β и tC (деленные на 2), которые применяются к компоненте яркости для слайсов в текущем изображении. Значения обоих ph_luma_beta_offset_div2 и ph_luma_tc_offset_div2 должны находиться в диапазоне от -12 до 12 включительно. Когда не присутствуют, значения ph_luma_beta_offset_div2 и ph_luma_tc_offset_div2 предполагаются равными pps_luma_beta_offset_div2 и pps_luma_tc_offset_div2, соответственно.
В примере, на уровне заголовка слайса, параметр управления деблокированием для компоненты цветности слайса представляется согласно sh_cb_beta_offset_div2, sh_cb_tc_offset_div2, sh_cr_beta_offset_div2 или sh_cr_tc_offset_div2.
Можно понять, что в некоторых реализациях существует только один параметр управления деблокированием для компоненты цветности или любая комбинация этих параметров управления деблокированием. Например, все эти четыре параметра управления деблокированием сигнализируются условно согласно значению pps_chroma_tool_offsets_present_flag.
sh_cb_beta_offset_div2 и sh_cb_tc_offset_div2 специфицируют смещения параметров деблокирования для β и tC (деленные на 2), которые применяются к Cb-компоненте для текущего слайса. Значения обоих sh_cb_beta_offset_div2 и sh_cb_tc_offset_div2 должны находиться в диапазоне от -12 до 12 включительно.
Когда не присутствуют, значения sh_cb_beta_offset_div2 и sh_cb_tc_offset_div2 логически выводятся следующим образом:
Если pps_chroma_tool_offsets_present_flag равен 1, значения sh_cb_beta_offset_div2 и sh_cb_tc_offset_div2 предполагаются равными ph_cb_beta_offset_div2 и ph_cb_tc_offset_div2, соответственно.
В ином случае (pps_chroma_tool_offsets_present_flag равен 0), значения sh_cb_beta_offset_div2 и sh_cb_tc_offset_div2 предполагаются равными sh_luma_beta_offset_div2 и sh_luma_tc_offset_div2, соответственно.
sh_cr_beta_offset_div2 и sh_cr_tc_offset_div2 специфицируют смещения параметров деблокирования для β и tC (деленные на 2), которые применяются к Cr-компоненте для текущего слайса. Значения обоих sh_cr_beta_offset_div2 и sh_cr_tc_offset_div2 должны находиться в диапазоне от -12 до 12 включительно.
Когда не присутствуют, значения sh_cr_beta_offset_div2 и sh_cr_tc_offset_div2 логически выводятся следующим образом:
Если pps_chroma_tool_offsets_present_flag равен 1, значения sh_cr_beta_offset_div2 и sh_cr_tc_offset_div2 предполагаются равными ph_cr_beta_offset_div2 и ph_cr_tc_offset_div2, соответственно.
В ином случае (pps_chroma_tool_offsets_present_flag равен 0), значения sh_cr_beta_offset_div2 и sh_cr_tc_offset_div2 предполагаются равными sh_luma_beta_offset_div2 и sh_luma_tc_offset_div2, соответственно.
sh_luma_beta_offset_div2 и sh_luma_tc_offset_div2 специфицируют смещения параметров деблокирования для β и tC (деленные на 2), которые применяются к компоненте яркости для текущего слайса. Значения обоих sh_luma_beta_offset_div2 и sh_luma_tc_offset_div2 должны находиться в диапазоне от -12 до 12 включительно. Когда не присутствуют, значения sh_luma_beta_offset_div2 и sh_luma_tc_offset_div2 предполагаются равными ph_luma_beta_offset_div2 и ph_luma_tc_offset_div2, соответственно.
В реализации способ дополнительно содержит: установку значения параметра управления деблокированием для компоненты цветности слайса равным значению параметра управления деблокированием для компоненты яркости слайса, когда значение синтаксического элемента не равно предустановленному значению.
S804: выполнение процесса деблокирования в отношении блока в слайсе согласно значению параметра управления деблокированием.
В общем, для процесса деблокирующего фильтра входными данными для этого процесса деблокирующего фильтра являются восстановленное изображение перед деблокированием, т.е. массив recPictureL и, когда sps_chroma_format_idc не равен 0, массивы recPictureCb и recPictureCr.
Выходными данными этого процесса являются модифицированное восстановленное изображение после деблокирования, т.е. массив recPictureL и, когда sps_chroma_format_idc не равен 0, массивы recPictureCb и recPictureCr.
Сначала фильтруются вертикальные края в изображении. Затем горизонтальные края в изображении фильтруются с помощью выборок, модифицированных процессом фильтрации вертикальных краев, в качестве входных данных. Вертикальные и горизонтальные края в CTB каждого CTU обрабатываются отдельно на основе единиц кодирования/декодирования. Вертикальные края блоков кодирования/декодирования в единице кодирования/декодирования фильтруются, начиная с края на левой стороне блоков кодирования/декодирования, проходя через края к правой стороне блоков кодирования/декодирования в их геометрическом порядке. Горизонтальные края блоков кодирования/декодирования в единице кодирования/декодирования фильтруются, начиная с края сверху блоков кодирования/декодирования, проходя через края к низу блоков кодирования/декодирования в их геометрическом порядке.
За подробной информацией о процессе деблокирования можно обратиться к приведенным выше частям описания.
В реализации, показанной на Фиг. 11, раскрыт аппаратный компонент 900 декодирования, причем аппаратный компонент 900 содержит:
модуль 901 приема, который выполнен с возможностью получения битового потока;
модуль 902 синтаксического анализа, выполненный с возможностью получения значения синтаксического элемента из битового потока, при этом значение синтаксического элемента связано с параметром управления деблокированием для компоненты цветности слайса кодируемого/декодируемого изображения (например, значение синтаксического элемента указывает, присутствуют ли в структуре полезных данных последовательности необработанных байтов, RBSP, набора параметров изображения, PPS, связанные со смещениями инструмента цветности синтаксические элементы); причем модуль 902 синтаксического анализа выполнен с возможностью получения значения параметра управления деблокированием для компоненты цветности слайса из битового потока, когда значение синтаксического элемента равно предустановленному значению, причем предустановленное значение является целочисленным значением.
Битовый поток может быть получен согласно беспроводной сети или проводной сети. Битовый поток может передаваться с веб-сайта, сервера или другого удаленного источника с использованием коаксиального кабеля, оптоволоконного кабеля, витой пары, цифровой абонентской линии (DSL) или беспроводных технологий, таких как инфракрасное, радио, микроволновое излучение, WIFI, Bluetooth, LTE или 5G.
В варианте осуществления битовый поток представляет собой последовательность битов в форме потока единиц уровня сетевой абстракции (NAL) или потока байтов, который формирует представление последовательности единиц доступа (AU), образующих одну или несколько кодируемых/декодируемых видеопоследовательностей (CVS).
В некоторых вариантах осуществления для процесса декодирования сторона декодера считывает битовый поток и выводит декодированные изображения из битового потока; для процесса кодирования сторона кодера создает битовый поток.
Обычно битовый поток будет содержать синтаксические элементы, которые формируются синтаксической структурой. синтаксический элемент: элемент данных, представленных в битовом потоке.
синтаксическая структура: ноль или более синтаксических элементов, присутствующих вместе в битовом потоке в определенном порядке.
В конкретном примере форматы битового потока специфицирует взаимосвязь между потоком единиц уровня сетевой абстракции (NAL) и потоком байтов, любой из которых называется битовым потоком.
Битовый поток может быть в одном из двух форматов: формате потока единиц NAL или формате потока байтов. Формат потока единиц NAL концептуально является более "базовым" типом. Формат потока единиц NAL содержит последовательность синтаксических структур, называемых единицами NAL. Эта последовательность упорядочена в порядке декодирования. Существуют ограничения, налагаемые на порядок декодирования (и содержимое) единиц NAL в потоке единиц NAL.
Формат потока байтов может быть построен из формата потока единиц NAL путем упорядочения единиц NAL в порядке декодирования и добавления к каждой единице NAL префикса начального кода и нуля или более байтов с нулевым значением для формирования потока байтов. Формат потока единиц NAL может быть извлечен из формата потока байтов путем нахождения местоположения в этом потоке байтов уникального шаблона префикса начального кода.
Этот пункт специфицирует взаимосвязь между исходными и декодируемыми изображениями, которая задается через битовый поток.
Видеоисточник, который представляется битовым потоком, представляет собой последовательность изображений в порядке декодирования.
Каждое из исходных и декодируемых изображений состоит из одного или нескольких массивов выборок:
- Только яркость (Y) (монохромный).
- Яркость и две цветности (YCbCr или YCgCo).
- Зеленый, синий и красный (GBR, также известный как RGB).
- Массивы, представляющие другие неспецифицированные монохромные или трехстимульные цветовые дискретизации (например YZX, также известная XYZ).
Переменные и члены, связанные с этими массивами, называются яркость (или L или Y) и цветность, причем два массива цветности называются Cb и Cr; независимо от фактического используемого способа представления цвета. Фактический используемый способ представления цвета может быть указан в синтаксисе, который специфицирован в VUI-параметрах, как специфицировано в ITU-T H.SEI | ISO/IEC 23002-7.
За дополнительными подробностями о модуле 901 приема и модуле 902 синтаксического анализа можно обратиться к приведенным выше реализациям и примерам способов.
Пример 1. Способ кодирования/декодирования, реализуемый устройством декодирования, причем способ содержит:
получение битового потока для блока кодирования/декодирования;
получение значения синтаксиса из битового потока;
получение значения параметра управления деблокированием из битового потока, когда значение синтаксиса равно предустановленному значению (в примере предустановленное значение не равно 0).
Пример 2. Способ по примеру 1, в котором значение синтаксиса получают на уровне набора параметров последовательности.
Пример 3. Способ по примеру 1, в котором значение синтаксиса получают согласно набору параметров изображения.
Пример 4. Способ по примеру 1, в котором значение синтаксиса получают согласно набору параметров изображения.
Пример 5. Способ по примеру 1, в котором значение синтаксиса получают согласно заголовку слайса.
Пример 6. Способ по любому из примеров с 1 по 5, в котором значение параметра управления деблокированием получают согласно набору параметров изображения.
Пример 7. Способ по любому из примеров с 1 по 5, в котором значение параметра управления деблокированием получают согласно заголовку изображения.
Пример 8. Способ по любому из примеров с 1 по 5, в котором значение параметра управления деблокированием получают согласно заголовку слайса.
Пример 9. Способ по любому из примеров с 1 по 5, в котором значение параметра управления деблокированием получают на уровне набора параметров последовательности.
Пример 10. Способ по любому из примеров с 1 по 9, в котором значение синтаксиса используется для указания отсутствия цветовой компоненты в видеопоследовательности.
Пример 11. Способ по любому из примеров с 1 по 10, в котором параметр управления деблокированием сигнализируется только когда видеопоследовательность имеет цветовую компоненту.
Пример 12. Способ по любому из примеров с 1 по 9, в котором значение синтаксиса используется для определения того, является ли параметр управления деблокированием для компоненты яркости блока таким же, как параметр управления деблокированием для компоненты цветности этого блока.
Пример 13. Способ по любому из примеров с 1 по 12, в котором значение параметра управления деблокированием представляет собой предустановленные смещения параметров деблокирования, которое применяется к совместной Cb-Cr-компоненте блока.
Пример 14. Декодер (30), содержащий схему обработки для осуществления способа по любому из примеров с 1 по 13.
Пример 15. Компьютерный программный продукт, содержащий программный код для выполнения способа по любому из предшествующих пунктов при исполнении на компьютере или процессоре.
Пример 16. Декодер, содержащий:
один или несколько процессоров; и
долговременный машиночитаемый запоминающий носитель, связанный с процессорами и хранящий программную часть для исполнения процессорами, при этом программная часть, когда исполняется процессорами, конфигурирует декодер для осуществления способа по любому из предшествующих примеров.
Пример 17. Долговременный машиночитаемый носитель, несущий программный код, который при исполнении компьютерным устройством побуждает компьютерное устройство к выполнению способа по любому из предшествующих примеров.
Ниже приводится объяснение применений способа кодирования, а также способа декодирования, показанных в вышеупомянутых вариантах осуществления, и использующей их системы.
ФИГ. 6 представляет собой блок-схему, показывающую систему 3100 предоставления контента для реализации службы распространения контента. Данная система 3100 предоставления контента включает в себя устройство 3102 захвата, терминальное устройство 3106 и опционально включает в себя дисплей 3126. Устройство 3102 захвата осуществляет связь с терминальным устройством 3106 по линии 3104 связи. Линия связи может включать в себя канал 13 связи, описанный выше. Линия 3104 связи включает в себя, но без ограничения упомянутым, WIFI, Ethernet, кабель, беспроводную связь (3G/4G/5G), USB или любую их комбинацию, или подобное.
Устройство 3102 захвата генерирует данные и может кодировать данные способом кодирования, показанным в вышеуказанных вариантах осуществления. В качестве альтернативы устройство 3102 захвата может распространять данные на сервер потоковой передачи (не показан на Фигурах), а сервер кодирует эти данные и передает закодированные данные на терминальное устройство 3106. Устройство 3102 захвата включает в себя, но без ограничения упомянутым, камеру, смартфон или планшет, компьютер или ноутбук, систему видеоконференцсвязи, КПК, устанавливаемое на транспортное средство устройство, или комбинацию любых из них, или подобное. Например, устройство 3102 захвата может включать в себя устройство-источник 12, описанное выше. Когда данные включают в себя видео, видеокодер 20, включенный в устройство 3102 захвата, может фактически выполнять обработку видеокодирования. Когда данные включают в себя аудио (т.е. речь), аудиокодер, включенный в устройство 3102 захвата, может фактически выполнять обработку аудиокодирования. Для некоторых практических сценариев устройство 3102 захвата распространяет закодированные видео- и аудиоданные путем их совместного мультиплексирования. Для других практических сценариев, например, в системе видеоконференцсвязи, кодированные аудиоданные и кодированные видеоданные не мультиплексируются. Устройство 3102 захвата распространяет закодированные аудиоданные и закодированные видеоданные на терминальное устройство 3106 по отдельности.
В системе 3100 предоставления контента терминальное устройство 310 принимает и воспроизводит закодированные данные. Терминальное устройство 3106 может быть устройством с возможностью приема и извлечения данных, таким как смартфон или планшет 3108, компьютер или ноутбук 3110, сетевой видеорегистратор (NVR) / цифровой видеорегистратор (DVR) 3112, телевизор 3114, телеприставка (STB) 3116, система 3118 видеоконференцсвязи, система 3120 видеонаблюдения, карманный персональный компьютер (КПК) 3122, устанавливаемое на транспортное средство устройство 3124, или их комбинация, или подобное, способное декодировать вышеупомянутые закодированные данные. Например, терминальное устройство 3106 может включать в себя устройство-получатель 14, описанное выше. Когда закодированные данные включают в себя видео, видеодекодеру 30, включенному в терминальное устройство, отдается приоритет для выполнения видеодекодирования. Когда закодированные данные включают в себя аудио, аудиодекодеру, включенному в терминальное устройство, отдается приоритет для выполнения обработки аудиодекодирования.
Для терминального устройства со своим дисплеем, например смартфона или планшета 3108, компьютера или ноутбука 3110, сетевого видеорегистратора (NVR) / цифрового видеорегистратора (DVR) 3112, телевизора 3114, карманного персонального компьютера (КПК) 3122 или устанавливаемого на транспортное средство устройства 3124, терминальное устройство может передавать декодированные данные на свой дисплей. Для терминального устройства, не оборудованного дисплеем, такого как STB 3116, система 3118 видеоконференцсвязи или система 3120 видеонаблюдения, контакт в нем устанавливается с внешним дисплеем 3126 для приема и показа декодированных данных.
Когда каждое устройство в этой системе выполняет кодирование или декодирование, может использоваться устройство кодирования изображений или устройство декодирования изображений, как показано в вышеупомянутых вариантах осуществления.
ФИГ. 7 является схемой, показывающей структуру примера терминального устройства 3106. После того, как терминальное устройство 3106 принимает поток от устройства 3102 захвата, блок 3202 обработки протокола анализирует протокол передачи упомянутого потока. Протокол включает в себя, но без ограничения упомянутым, протокол потоковой передачи в реальном времени (RTSP), протокол передачи гипертекста (HTTP), протокол потоковой передачи HTTP Live (HLS), MPEG-DASH, транспортный протокол реального времени (RTP), протокол обмена сообщениями в реальном времени (RTMP) или любую их комбинацию, или подобное.
После того, как блок 3202 обработки протокола обработает поток, генерируется файл потока. Файл выводится в блок 3204 демультиплексирования. Блок 3204 демультиплексирования может разделять мультиплексированные данные на закодированные аудиоданные и закодированные видеоданные. Как описано выше, в других практических сценариях, например, в системе видеоконференцсвязи, закодированные аудиоданные и закодированные видеоданные не мультиплексируются. В этой ситуации кодированные данные передаются на видеодекодер 3206 и аудиодекодер 3208 не через блок 3204 демультиплексирования.
Посредством обработки демультиплексирования генерируются элементарный поток (ES) видео, ES аудио и, опционально, субтитры. Видеодекодер 3206, который включает в себя видеодекодер 30, описанный в вышеупомянутых вариантах осуществления, декодирует ES видео с помощью способа декодирования, как показано в вышеупомянутых вариантах осуществления, для генерирования видеокадра, и подает эти данные в блок 3212 синхронизации. Аудиодекодер 3208 декодирует ES аудио для генерирования аудиокадра и подает эти данные в блок 3212 синхронизации. В качестве альтернативы видеокадр может сохраняться в буфере (не показан на ФИГ. 7) перед его подачей в блок 3212 синхронизации. Точно так же аудиокадр может сохраняться в буфере (не показан на ФИГ. 7) перед его подачей в блок 3212 синхронизации.
Блок 3212 синхронизации синхронизирует видеокадр и аудиокадр и предоставляет видео/аудио в видео/аудио дисплей 3214. Например, блок 3212 синхронизации синхронизирует представление видео и аудио информации. Информация может кодироваться/декодироваться в синтаксисе с использованием временных меток, касающихся представления кодируемых/декодируемых аудио- и видеоданных, а также временных меток, касающихся доставки самого потока данных.
Если субтитр включен в поток, декодер 3210 субтитров декодирует субтитр и синхронизирует его с видеокадром и аудиокадром, а также передает видео/аудио/субтитр на средство 3216 воспроизведения видео/аудио/субтитров.
Настоящее изобретение не ограничивается вышеупомянутой системой, и либо устройство кодирования изображений, либо устройство декодирования изображений из вышеупомянутых вариантов осуществления может быть включено в другую систему, например, автомобильную систему.
Математические операторы
Математические операторы, используемые в этой заявке, аналогичны тем, которые используются в языке программирования C. Однако результаты операций целочисленного деления и арифметического сдвига определяются более точно, а также определяются дополнительные операции, такие как возведение в степень и вещественнозначное деление. Соглашения о нумерации и подсчете определяют начало с 0, например, «первый» эквивалентен 0-му, «второй» эквивалентен 1-му и т. д.
Арифметические операторы
Следующие арифметические операторы определяются следующим образом:
Логические операторы
Следующие логические операторы определяются следующим образом:
x && y Булево логическое "и" для x и y
x | | y Булево логическое "или" для x и y
! Булево логическое "не"
x ? y : z Если значением x является ИСТИНА или оно не равно 0, определяется в значение y; в ином случае определяется в значение z.
Операторы сравнения
Следующие операторы сравнения определяются следующим образом:
> Больше, чем
>= Больше или равно
< Меньше, чем
<= Меньше или равно
==Равно
!= Не равно
Когда оператор сравнения применяется к синтаксическому элементу или переменной, которым присвоено значение "na" (неприменимо), значение "na" обрабатывается как отдельное значение для синтаксического элемента или переменной. Считается, что значение "na" не равно какому-либо другому значению.
Побитовые операторы
Следующие побитовые операторы определяются следующим образом:
& Побитовое "и". При работе над целочисленными аргументами оперирует над представлением дополнения до двух целочисленного значения. При работе над двоичным аргументом, который содержит меньше битов, чем другой аргумент, более короткий аргумент расширяется путем добавления более значащих битов, равных 0.
| Побитовое "или". При работе над целочисленными аргументами оперирует над представлением дополнения до двух целочисленного значения. При работе над двоичным аргументом, который содержит меньше битов, чем другой аргумент, более короткий аргумент расширяется путем добавления более значащих битов, равных 0.
^ Побитовое "исключающее или". При работе над целочисленными аргументами оперирует над представлением дополнения до двух целочисленного значения. При работе над двоичным аргументом, который содержит меньше битов, чем другой аргумент, более короткий аргумент расширяется путем добавления более значащих битов, равных 0.
x >> y Арифметический сдвиг вправо целочисленного представления дополнения до двух x на y двоичных разрядов. Эта функция определена только для неотрицательных целочисленных значений y. Биты, сдвинутые в наиболее значимые биты (MSB) в результате сдвига вправо, имеют значение, равное MSB для x до этой операции сдвига.
x << y Арифметический сдвиг влево целочисленного представления дополнения до двух x на y двоичных разрядов. Эта функция определена только для неотрицательных целочисленных значений y. Биты, сдвинутые в менее значимые биты (LSB) в результате сдвига влево, имеют значение, равное 0.
Операторы присваивания
Следующие арифметические операторы определяются следующим образом:
= Оператор присваивания
+ + Приращение, т.е. x+ + эквивалентно x=x+1; при использовании в индексе массива определяется в значение переменной до этой операции приращения.
- - Уменьшение, т.е. x- - эквивалентно x=x - 1; при использовании в индексе массива определяется в значение переменной до этой операции уменьшения.
+= Приращение на указанную величину, т.е. x += 3 эквивалентно x=x+3, а x += (-3) эквивалентно x=x + (-3).
-= Уменьшение на указанную величину, т.е. x -= 3 эквивалентно x=x - 3, а x -= (-3) эквивалентно x=x - (-3).
Запись диапазона
Следующая запись используется для задания диапазона значений:
x=y..z x принимает целочисленные значения от y до z включительно, причем x, y и z являются целыми числами, а z больше y.
Математические функции
Определены следующие математические функции:
Abs( x )=
Asin( x ) тригонометрическая функция арксинуса, работающая с аргументом x, который находится в диапазоне от -1,0 до 1,0 включительно, с выходным значением в диапазоне от -π÷2 до π÷2 включительно в единицах радиан
Atan( x ) тригонометрическая функция арктангенса, работающая с аргументом x, с выходным значением в диапазоне от -π÷2 до π÷2 включительно в единицах радиан
Atan2( y, x )=
Ceil( x ) наименьшее целое число, большее или равное x.
Clip1Y( x )=Clip3( 0, ( 1 << BitDepthY ) - 1, x )
Clip1C( x )=Clip3( 0, ( 1 << BitDepthC ) - 1, x )
Clip3( x, y, z )=
Cos( x ) тригонометрическая функция косинуса, работающая с аргументом x в единицах радиан.
Floor( x ) наибольшее целое число, меньшее или равное x.
GetCurrMsb( a, b, c, d )=
Ln( x ) натуральный логарифм x (логарифм по основанию e, где e - постоянная основания натурального логарифма 2,718 281 828…).
Log2( x ) логарифм x по основанию 2.
Log10( x ) логарифм x по основанию 10.
Min( x, y )=
Max( x, y )=
Round( x )=Sign( x ) * Floor( Abs( x ) + 0,5 )
Sign( x )=
Sin( x ) тригонометрическая функция синуса, работающая с аргументом x в единицах радиан
Sqrt( x )=
Swap( x, y )=( y, x )
Tan( x ) тригонометрическая функция тангенса, работающая с аргументом x в единицах радиан
Порядок приоритетности операций
Когда порядок приоритетности в выражении явно не указан с помощью круглых скобок, применяются следующие правила:
- Операции с более высоким приоритетом выполняются перед любой операцией с более низким приоритетом.
- Операции с одинаковым приоритетом выполняются последовательно слева направо.
В таблице ниже указана приоритетность операций от наивысшей к низшей; более высокая позиция в таблице указывает более высокий приоритет.
Для тех операторов, которые также используются в языке программирования C, порядок приоритетности, используемый в этом описании, является таким же, что и в языке программирования C.
Таблица: Приоритетность операций от наивысшей (в верхней части таблицы) до низшей (в нижней части таблицы)
Текстовое описание логических операций
В тексте определение логических операций, которое математически бы описывалось в следующей форме:
если( условие 0 )
определение 0
еще одно если ( условие 1 )
определение 1
…
иначе /* информативный комментарий по оставшемуся условию */
определение n
может быть описано следующим образом:
… следующим образом / … применяется следующее:
- Если условие 0, определение 0
- В ином случае, если условие 1, определение 1
- …
- В ином случае (информативный комментарий по оставшемуся условию), определение n
Каждое определение "Если … В ином случае, если … В ином случае, …" в тексте вводится с помощью "… следующим образом" или "… применяется следующее" сразу после "Если … ". Последнее условие "Если … В ином случае, если … В ином случае, …" всегда является "В ином случае, …". Чередование определений "Если … В ином случае, если … В ином случае …" могут быть идентифицированы путем сопоставления "… следующим образом" или "… применяется следующее " с завершающим "В ином случае, …".
В тексте определение логических операций, которое математически бы описывалось в следующей форме:
если( условие 0a && условие 0b )
определение 0
еще одно если( условие 1a | | условие 1b )
определение 1
…
иначе
определение n
может быть описано следующим образом:
… следующим образом / … применяется следующее:
- Если все следующие условия верны, определение 0:
- условие 0a
- условие 0b
- В ином случае, если одно или несколько из следующих условий верно(ы), определение 1:
- условие 1a
- условие 1b
- …
- В ином случае определение n
В тексте определение логических операций, которое математически бы описывалось в следующей форме:
если( условие 0 )
определение 0
если( условие 1 )
определение 1
может быть описано следующим образом:
Когда условие 0, определение 0
Когда условие 1, определение 1.
Хотя варианты осуществления изобретения были главным образом описаны на основе кодирования/декодирования видео, следует отметить, что варианты осуществления системы 10 кодирования/декодирования, кодера 20 и декодера 30 (и соответственно системы 10) и другие варианты осуществления, описанные в данном документе, также могут быть выполнены с возможностью обработки или кодирования/декодирования, т.е. обработки или кодирования/декодирования отдельного изображения, независимого от любого предшествующего или последующего изображения как при кодировании/декодировании видео. В общем, только блоки 244 (в кодере) и 344 (в декодере) интер-предсказания могут не быть доступны в случае, если обработка кодирования/декодирования изображения ограничивается одним изображением 17. Все другие функциональные возможности (также именуемые инструментами или технологиями) видеокодера 20 и видеодекодера 30 могут в равной степени использоваться для обработки неподвижного изображения, например, вычисления остатка 204/304, преобразования 206, квантования 208, обратного квантования 210/310, (обратного) преобразования 212/312, разделения 262/362, интра-предсказания 254/354 и/или контурной фильтрации 220, 320 и энтропийного кодирования 270 и энтропийного декодирования 304.
Варианты осуществления, например кодера 20 и декодера 30, а также описанные в данном документе функции, например применительно к кодеру 20 и декодеру 30 могут быть реализованы аппаратным обеспечением, программным обеспечением, микропрограммным обеспечением или любой их комбинацией. Если реализованы в программном обеспечении, функции могут храниться на машиночитаемом носителе или передаваться через среду связи в виде одной или нескольких инструкций или кода и исполняться аппаратным блоком обработки. Машиночитаемые носители могут включать в себя машиночитаемые носители, которые соответствуют материальному носителю, например носителю данных, или среде связи, в том числе любой среде, которая обеспечивает передачу компьютерной программы из одного места в другое, например, согласно протоколу связи. Таким образом, машиночитаемые носители обычно могут соответствовать (1) материальным машиночитаемым запоминающим носителям, которые являются непереходными, или (2) среде связи, такой как сигнал или несущая волна. Носители данных могут быть любыми доступными носителями, к которым может быть осуществлен доступ одним или несколькими компьютерами или одним или несколькими процессорами для извлечения инструкций, кода и/или структур данных для реализации методик, описанных в этом раскрытии. Компьютерный программный продукт может включать в себя машиночитаемый носитель.
В качестве примера, а не ограничения, такие машиночитаемые носители могут содержать RAM, ROM, EEPROM, CD-ROM или другое хранилище на оптическом диске, хранилище на магнитном диске или другие магнитные запоминающие устройства, флэш-память или любой другой носитель, который может использоваться для хранения желаемого программного кода в форме инструкций или структур данных и может быть доступен для компьютера. Кроме того, любое соединение правильно называть машиночитаемой средой. Например, если инструкции передаются с веб-сайта, сервера или другого удаленного источника с использованием коаксиального кабеля, оптоволоконного кабеля, витой пары, цифровой абонентской линии (DSL) или беспроводных технологий, таких как инфракрасная-, радио- и микроволновая- связь, тогда коаксиальный кабель, оптоволоконный кабель, витая пара, DSL или беспроводные технологии, такие как инфракрасная-, радио- и микроволновая- связь, включаются в определение носителя. Однако следует понимать, что машиночитаемые носители и носители хранения данных не включают в себя соединения, несущие волны, сигналы или другие кратковременные носители, а вместо этого направлены на долговременные, материальные запоминающие носители. Диск (disk) и диск (disc), используемые в данном документе, включают в себя компакт-диск (CD), лазерный диск, оптический диск, цифровой универсальный диск (DVD), дискету и диск Blu-ray, где диски (disks) обычно воспроизводят данные магнитным образом, а диски (discs) воспроизводят данные оптически с помощью лазеров. Комбинации вышеперечисленного также должны быть включены в объем машиночитаемых носителей.
Инструкции могут исполняться одним или несколькими процессорами, такими как один или несколько цифровых сигнальных процессоров (DSP), микропроцессоров общего назначения, интегральных схем специального назначения (ASIC), программируемых вентильных матриц (FPGA) или других эквивалентных интегральных или дискретных логических схем. Соответственно, термин «процессор», используемый в данном документе, может относиться к любой из вышеупомянутой структуры или любой другой структуре, подходящей для реализации методик, описанных в данном документе. Кроме того, в некоторых аспектах функциональные возможности, описанные в данном документе, могут быть предоставлены в рамках специализированных аппаратных и/или программных модулей, сконфигурированных для кодирования и декодирования, или включены в комбинированный кодек. Кроме того, методики могут быть полностью реализованы в одной или более схемах или логических элементах.
Методики этого раскрытия могут быть реализованы в большом количестве устройств или аппаратных компонентов, в том числе беспроводной телефон, интегральная схема (ИС) или набор ИС (например, набор микросхем). В этом раскрытии описаны различные компоненты, модули или блоки, чтобы подчеркнуть функциональные аспекты устройств, выполненных с возможностью выполнения раскрытых технологий, но не обязательно требующих реализации различными аппаратными блоками. Скорее, как описано выше, различные блоки могут быть объединены в аппаратный блок кодека или предоставлены совокупностью взаимодействующих аппаратных блоков, в том числе один или более процессоров, как описано выше, вместе с подходящим программным обеспечением и/или микропрограммным обеспечением.
название | год | авторы | номер документа |
---|---|---|---|
КОДЕР, ДЕКОДЕР И СООТВЕТСТВУЮЩИЕ СПОСОБЫ ВЫПОЛНЕНИЯ УСТРАНЕНИЯ БЛОЧНОСТИ ЦВЕТНОСТИ ДЛЯ БЛОКОВ, ИСПОЛЬЗУЮЩИХ КОДИРОВАНИЕ ОБЪЕДИНЕННОЙ ЦВЕТНОСТИ | 2020 |
|
RU2816918C2 |
СИСТЕМЫ И СПОСОБЫ ПРИМЕНЕНИЯ ФИЛЬТРОВ ДЕБЛОКИРОВАНИЯ К ВОССТАНОВЛЕННЫМ ВИДЕОДАННЫМ | 2019 |
|
RU2770650C1 |
СПОСОБ И АППАРАТНЫЙ КОМПОНЕНТ СИГНАЛИЗАЦИИ ЧИСЛА КАНДИДАТОВ ДЛЯ РЕЖИМА СЛИЯНИЯ | 2021 |
|
RU2823267C1 |
ФЛАГИ ФИЛЬТРА ДЛЯ УСТРАНЕНИЯ БЛОЧНОСТИ СУБКАРТИНОК | 2020 |
|
RU2825099C2 |
ФЛАГИ ФИЛЬТРА ДЛЯ УСТРАНЕНИЯ БЛОЧНОСТИ СУБКАРТИНОК | 2020 |
|
RU2825100C2 |
СПОСОБ И УСТРОЙСТВО СОГЛАСОВАНИЯ ВЗВЕШЕННОГО ПРЕДСКАЗАНИЯ С НЕПРЯМОУГОЛЬНЫМИ РЕЖИМАМИ СЛИЯНИЯ | 2021 |
|
RU2821011C1 |
ПАРАМЕТР КВАНТОВАНИЯ ДЛЯ ДЕБЛОКИРУЮЩЕЙ ФИЛЬТРАЦИИ ЦВЕТНОСТИ | 2020 |
|
RU2822510C1 |
КОДЕР, ДЕКОДЕР И СООТВЕТСТВУЮЩИЕ СПОСОБЫ ПОЛУЧЕНИЯ ВНУТРИКАДРОВОГО РЕЖИМА ЦВЕТНОСТИ | 2020 |
|
RU2817389C2 |
КОДЕР, ДЕКОДЕР И СООТВЕТСТВУЮЩИЕ СПОСОБЫ ДЛЯ ВНУТРЕННЕГО ПРЕДСКАЗАНИЯ | 2020 |
|
RU2800681C2 |
ФЛАГИ ФИЛЬТРА ДЛЯ УСТРАНЕНИЯ БЛОЧНОСТИ СУБКАРТИНОК | 2020 |
|
RU2825023C1 |
Изобретение относится к области обработки изображений и кодирования, в частности к сигнализации синтаксиса. Технический результат заключается в повышении эффективности степени сжатия с незначительным ущербом для качества изображения или вовсе без него. Предложен способ декодирования, реализуемый устройством декодирования, причем способ содержит получение битового потока для блока декодирования; получение значения синтаксиса из битового потока; получение значения параметра управления деблокированием из битового потока, когда значение синтаксиса равно предустановленному значению. 4 н. и 8 з.п. ф-лы, 10 ил.
1. Способ декодирования, реализуемый устройством декодирования, причем способ содержит:
получение значения синтаксического элемента из битового потока, при этом значение синтаксического элемента связано с параметром управления деблокированием для компоненты цветности слайса кодируемого/декодируемого изображения, и упомянутый синтаксический элемент используется для указания, имеется ли цветовая компонента в видеопоследовательности;
выделение синтаксическим анализом значения параметра управления деблокированием для компоненты цветности слайса из битового потока, когда значение синтаксического элемента равно предустановленному значению, при этом предустановленным значением является целочисленное значение;
выполнение процесса деблокирования в отношении блока в слайсе согласно значению параметра управления деблокированием для компоненты цветности.
2. Способ по п. 1, в котором значение синтаксического элемента получают из набора параметров изображения, PPS.
3. Способ по п. 1 или 2, в котором значение параметра управления деблокированием для упомянутой компоненты цветности слайса получают из набора параметров изображения, PPS.
4. Способ по п. 1 или 2, в котором значение параметра управления деблокированием для упомянутой компоненты цветности слайса получают из заголовка изображения, PH.
5. Способ по п. 1 или 2, в котором значение параметра управления деблокированием для упомянутой компоненты цветности слайса получают из заголовка слайса, SH.
6. Способ по любому из пп. 1-5, в котором параметр управления деблокированием для упомянутой компоненты цветности слайса сигнализируется, когда видеопоследовательность имеет цветовую компоненту.
7. Способ по любому из пп. 1-6, в котором значение синтаксического элемента используется для определения того, является ли параметр управления деблокированием для компоненты яркости слайса таким же, как параметр управления деблокированием для упомянутой компоненты цветности слайса.
8. Способ по любому из пп. 1-7, при этом способ дополнительно содержит:
установку значения параметра управления деблокированием для упомянутой компоненты цветности слайса равным значению параметра управления деблокированием для компоненты яркости слайса, когда значение синтаксического элемента не равно предустановленному значению.
9. Способ по любому из пп. 1-8, в котором значение параметра управления деблокированием для упомянутой компоненты цветности представляет собой предустановленное смещение параметра деблокирования, которое применяется к совместной Cb-Cr-компоненте слайса.
10. Декодер, содержащий:
один или несколько процессоров; и
долговременный машиночитаемый запоминающий носитель, связанный с процессорами и хранящий программную часть для исполнения процессорами, при этом программная часть, когда исполняется процессорами, конфигурирует декодер для осуществления способа по любому из пп. 1-9.
11. Долговременный машиночитаемый носитель, несущий программный код, который при исполнении компьютерным устройством побуждает компьютерное устройство к выполнению способа по любому из пп. 1-9.
12. Устройство декодирования, содержащее:
память, выполненную с возможностью хранения битового потока, при этом битовый поток включает в себя синтаксический элемент, при этом значение синтаксического элемента связано с параметром управления деблокированием для компоненты цветности слайса кодируемого/декодируемого изображения; значение упомянутого параметра управления деблокированием для компоненты цветности слайса;
декодер, выполненный с возможностью выполнения способа по любому из пп. 1-9.
W-S KIM et al., AhG5: Deblocking Filter in 4:4:4 Chroma Format, Joint Collaborative Team on Video Coding (JCT-VC) of ITU-T SG 16 WP 3 and ISO/IEC JTC 1/SC 29/WG 11, JCTVC-O0089, 15th Meeting: Geneva, 23 Oct | |||
Печь для непрерывного получения сернистого натрия | 1921 |
|
SU1A1 |
Многоступенчатая активно-реактивная турбина | 1924 |
|
SU2013A1 |
XU J | |||
et al., AHG9: On deblocking control parameters, JVET-Q0121, m51710, 17 | |||
JVET Meeting, 2020.01.07 - 2020.01.17, |
Авторы
Даты
2024-09-12—Публикация
2021-01-15—Подача