ПЕРЕДАЧА В СЛУЖЕБНЫХ СИГНАЛАХ ИНФОРМАЦИИ ЗНАЧЕНИЙ ПАРАМЕТРОВ В НАБОРЕ ПАРАМЕТРОВ, ЧТОБЫ УМЕНЬШАТЬ ОБЪЕМ ДАННЫХ, СОДЕРЖАЩИХСЯ В КОДИРОВАННОМ ПОТОКЕ БИТОВ ВИДЕО
TRANSMISSION OF PARAMETER VALUES IN PARAMETER SET IN SERVICE SIGNALS TO REDUCE AMOUNT OF DATA CONTAINED IN ENCODED VIDEO BIT STREAM

Область техники, к которой относится изобретение
[0001] Данное раскрытие сущности относится к кодированию и декодированию видео.
Уровень техники
1.1. HEVC и VVC
[0002]
[0003] Стандарт высокоэффективного кодирования видео (HEVC) представляет собой видеокодек на основе блоков, стандартизированный посредством ITU-T и MPEG. HEVC-видеокодек использует временное и пространственное предсказание. Пространственное предсказание достигается с использованием внутреннего (I) предсказания из текущей картинки. Временное предсказание достигается с использованием однонаправленного (P) или двунаправленного (B) взаимного предсказания на уровне блока из ранее декодированных опорных картинок. В кодере разность между исходными пиксельными данными и предсказанными пиксельными данными, называемая "остатком", преобразуется в частотную область, квантуется и затем энтропийно кодируется до передачи вместе с необходимыми параметрами предсказания, такими как, например, режим предсказания и векторы движения, которые также энтропийно кодируются. Декодер выполняет энтропийное декодирование, обратное квантование и обратное преобразование для того, чтобы получать остаток, и затем суммирует остаток с внутренним или взаимным предсказанием для того, чтобы восстанавливать картинку.
[0004] MPEG и ITU-T работают над продолжением HEVC в рамках объединенной экспертной группы по видеостандартам (JVET). Название этого разрабатываемого видеокодека представляет собой "универсальное кодирование видео (VVC)". Текущий проект VVC-спецификации содержится в документе JVET-N1001-v7.
1.2. Компоненты
[0005]
[0006] Видеопоследовательность состоит из последовательности картинок, при этом каждая картинка состоит из одного или более компонентов. Каждый компонент может описываться как двумерный прямоугольный массив выборочных значений. Обычная практика заключается в том, что картинка в видеопоследовательности состоит из трех компонентов: одного компонента Y сигнала яркости, в котором выборочные значения являются значениями сигнала яркости, и двух компонентов Cb и Cr сигнала цветности, в которых выборочные значения являются значениями сигнала цветности. Также обычная практика заключается в том, что размерности компонентов сигнала цветности меньше компонентов сигнала яркости на коэффициент два в каждой размерности, чтобы сохранять биты при сжатии. Например, размер компонента сигнала яркости HD-картинки составляет 1920×1080, и компоненты сигнала цветности имеют размерность 960×540. Компоненты иногда называются "цветовыми компонентами".
1.3. Блоки и единицы
[0007]
[0008] Блок представляет собой один двумерный массив выборочных значений (или "выборок" для краткости). При кодировании видео каждый компонент разбивается на блоки, и кодированный поток битов видео состоит из последовательности кодированных блоков. При кодировании видео обычная практика заключается в том, что картинка разбивается на единицы, которые покрывают конкретную зону картинки. Каждая единица состоит из всех блоков из всех компонентов, которые составляют эту конкретную зону, и каждый блок принадлежит полностью одной единице. Макроблок в H.264 и единица кодирования (CU) в HEVC представляют собой примеры единиц.
[0009] Блок альтернативно может задаваться как двумерный массив, к которому применяется преобразование, используемое при кодировании. Эти блоки известны как "блоки преобразования". Альтернативно, блок может задаваться как двумерный массив, к которому применяется один режим предсказания. Эти блоки называются "блоками предсказания". В этом раскрытии сущности, слово "блок" не связано ни с одним из этих определений, но описания в данном документе могут применяться к любому определению.
1.4. NAL-единицы
[0010]
[0011] Как HEVC, так и VVC задают уровень сетевой абстракции (NAL). Все данные (т.е. данные уровня кодирования видео (VCL) или не-VCL-данные) в HEVC и VVC инкапсулируются в NAL-единицах. VCL NAL-единица содержит данные, которые представляют выборочные значения, т.е. VCL NAL-единица содержит "выборочные данные". Не-VCL NAL-единица содержит ассоциированные данные, такие как наборы параметров и сообщения с дополнительной улучшающей информацией (SEI). NAL-единица в HEVC и VVC начинается с заголовка NAL-единицы, который указывает тип NAL-единицы для NAL-единицы, идентификатор (ID) уровня для уровня, которому принадлежит NAL-единица, и временной идентификатор подуровня, которому принадлежит NAL-единица. Тип NAL-единицы идентифицирует тип данных, которые переносятся в NAL-единице.
[0012] В HEVC, forbidden_zero_bit передается в служебных сигналах, чтобы не допускать эмуляции начального кода пакетизированного элементарного потока (PES) уровня MPEG-2-потоков, и тип NAL-единицы передается в синтаксическом элементе nal_unit_type в заголовке NAL-единицы. Синтаксические элементы для заголовка NAL-единицы в HEVC показаны в таблице 1, и синтаксические элементы для заголовка NAL-единицы в текущей версии проекта VVC-спецификации, JVET-N1001-v7, показаны в таблице 2.
Таблица 1. Синтаксис заголовков HEVC NAL-единиц
nal_unit_header(){
Дескриптор
forbidden_zero_bit
f(1)
nal_unit_type
u(6)
nuh_layer_id
u(6)
nuh_temporal_id_plus1
u(3)
}
Табл. 2. Синтаксис заголовков NAL-единиц для текущей версии проекта VVC-спецификации
nal_unit_header(){
Дескриптор
zero_tid_required_flag
u(1)
nuh_temporal_id_plus1
u(3)
nal_unit_type_lsb
u(4)
nuh_layer_id
u(7)
nuh_reserved_zero_bit
u(1)
}
[0013] В текущей версии VVC, zero_tid_required_flag передается в служебных сигналах в качестве первого бита заголовка NAL-единицы. Когда этот флаг равен 1, nuh_temporal_id_plus1 должен быть равен 1. zero_tid_required_flag затем может использоваться вместе с nal_unit_type_lsb для того, чтобы извлекать тип NAL-единицы согласно: NalUnitType=(zero_tid_required_flag<<4)+nal_unit_type_lsb.
[0014] Декодер или синтаксический анализатор потоков битов может определять то, как NAL-единица должна обрабатываться, например, синтаксически анализироваться и декодироваться, после рассмотрения заголовка NAL-единицы. Остальная часть байтов NAL-единицы представляет собой рабочие данные типа, указываемого посредством типа NAL-единицы. VVC-поток битов (а также HEVC-поток битов) состоит из последовательности NAL-единиц. Поток битов может передаваться по сети посредством передающего устройства или сохраняться в модуле хранения данных. Соответственно, декодер может получать поток битов посредством приема из передающего устройства либо его извлечения из модуля хранения данных.
[0015] Тип NAL-единицы указывает и задает то, как NAL-единица должна синтаксически анализироваться и декодироваться. VCL NAL-единица предоставляет информацию относительно типа картинки для текущего картинки. Типы NAL-единиц текущей версии проекта VVC-спецификации показаны в таблице 3.
[0016] Порядок декодирования представляет собой порядок, в котором должны декодироваться NAL-единицы, который является таким же как порядок NAL-единиц в потоке битов. Порядок декодирования может отличаться от порядка вывода, который представляет собой порядок, в котором должны выводиться декодированные картинки, к примеру, для отображения, посредством декодера.
Таблица 3. Типы NAL-единиц в текущей версии проекта VVC-спецификации
NalUnitType
Название NalUnitType
Контент NAL-единицы и синтаксическая RBSP-структура
Класс типов NAL-единиц
0
PPS_NUT
Набор параметров картинкиpic_parameter_set_rbsp()
не-VCL
1
AUD_NUT
Разделитель единиц доступаaccess_unit_delimiter_rbsp()
не-VCL
23
PREFIX_SEI_NUTSUFFIX_SEI_NUT
Дополнительная улучшающая информацияsei_rbsp()
не-VCL
4
APS_NUT
Набор параметров адаптацииadaptation_parameter_set_rbsp()
не-VCL
5…7
RSV_NVCL5…RSV_NVCL7
Зарезервировано
не-VCL
8
TRAIL_NUT
Кодированный слайс запаздывающей не-STSA-картинкиslice_layer_rbsp()
VCL
9
STSA_NUT
Кодированный слайс STSA-картинкиslice_layer_rbsp()
VCL
10
RADL_NUT
Кодированный слайс RADL-картинкиslice_layer_rbsp()
VCL
11
RASL_NUT
Кодированный слайс RASL-картинкиslice_layer_rbsp()
VCL
12…15
RSV_VCL_12…RSV_VCL_15
Зарезервированные типы не-IRAP VCL NAL-единиц
VCL
16
DPS_NUT
Набор параметров декодированияdecoding_parameter_set_rbsp()
не-VCL
17
SPS_NUT
Набор параметров последовательностиseq_parameter_set_rbsp()
не-VCL
18
EOS_NUT
Конец последовательностиend_of_seq_rbsp()
не-VCL
19
EOB_NUT
Конец потока битовend_of_bitstream_rbsp()
не-VCL
20
VPS_NUT
Набор параметров видеоvideo_parameter_set_rbsp()
не-VCL
21…23
RSV_NVCL21…RSV_NVCL23
Зарезервировано
не-VCL
2425
IDR_W_RADLIDR_N_LP
Кодированный слайс IDR-картинкиslice_layer_rbsp()
VCL
26
CRA_NUT
Кодированный слайс CRA-картинкиslice_layer_rbsp()
VCL
27
GRA_NUT
Кодированный слайс постепенного произвольного доступаpicture_slice_layer_rbsp()
VCL
28…31
UNSPEC28…UNSPEC31
Не установлено
не-VCL
1.5. Картинки на основе внутренней точки произвольного доступа (IRAP) и кодированная видеопоследовательность (CVS)
[0018] Для одноуровнего кодирования в HEVC и текущем проекте VVC-спецификации, единица доступа (AU) представляет собой кодированное представление одной картинки. AU может состоять из нескольких NAL-единиц уровня кодирования видео (VCL), а также не-VCL NAL-единиц. AU необязательно может начинаться с разделителя единиц доступа (AUD), который указывает начало AU и тип слайсов, разрешенных в картинке, т.е. I, I-P или I-P-B.
[0019] Картинка на основе внутренней точки произвольного доступа (IRAP) в HEVC представляет собой картинку, которая не ссылается на картинки, за исключением себя, для предсказания в своем процессе декодирования. Первая картинка в потоке битов в порядке декодирования в HEVC должна представлять собой IRAP-картинку, но IRAP-картинка дополнительно также может появляться позднее в потоке битов. HEVC указывает три типа IRAP-картинок, картинка на основе доступа с разорванной связью (BLA), картинка на основе мгновенного обновления декодера (IDR) и картинка на основе чистого произвольного доступа (CRA).
[0020] Кодированная видеопоследовательность (CVS) в HEVC представляет собой последовательность AU, начинающихся в IRAP AU вплоть до, но не включающих в себя следующую IRAP AU в порядке декодирования.
[0021] IDR-картинки всегда начинают новую CVS. IDR-картинка может иметь ассоциированные опережающие декодируемые картинки с произвольным доступом (RADL). IDR-картинка не имеет ассоциированных RASL-картинок.
[0022] BLA-картинки в HEVC также начинают новую CVS и имеют такое же влияние на процесс декодирования, как IDR-картинки. Однако, BLA-картинка в HEVC может содержать синтаксические элементы, которые указывают непустой набор опорных картинок. BLA-картинка может иметь ассоциированные RASL-картинки, которые не выводятся посредством декодера и могут не быть декодируемыми, поскольку они могут содержать ссылки на картинки, которые могут не присутствовать в потоке битов. BLA-картинка также может иметь ассоциированные RADL-картинки, которые декодируются. BLA-картинки не задаются в текущей версии VVC.
[0023] CRA-картинка может иметь ассоциированные RADL- или RASL-картинки. Аналогично BLA-картинке, CRA-картинка может содержать синтаксические элементы, которые указывают непустой набор опорных картинок. Для CRA-картинок, флаг может задаваться таким образом, что он указывает то, что ассоциированные RASL-картинки не выводятся посредством декодера, поскольку они могут не быть декодируемыми, поскольку они могут содержать ссылки на картинки, которые не присутствуют в потоке битов. CRA может начинать CVS.
[0024] В текущей версии проекта VVC-спецификации, CVS начинается в начальной CVS-единице (CVSS) доступа, которая может содержать IRAP-картинка, т.е. IDR- или CRA-картинка, либо картинка на основе постепенного произвольного доступа (GRA).
[0025] GRA-картинки по существу используются для произвольного доступа в потоках битов, кодированных для кодирования с низкой задержкой, при котором полная IRAP-картинка приводила бы к слишком большой задержке. GRA-картинка может использовать постепенное внутреннее обновление, которое обновляет видео в расчете на каждую картинку, при этом каждая картинка только частично внутренне кодируется. Когда видео полностью обновляется и готово к выводу, это передается в служебных сигналах с помощью GRA-картинки, при условии, что поток битов настроен в GRA-картинке. GRA может начинать CVS.
1.6. Наборы параметров
[0026]
[0027] HEVC и VVC указывают три типа наборов параметров: 1) набор параметров картинки (PPS), 2) набор параметров последовательности (SPS) и 3) набор параметров видео (VPS). PPS содержит данные, которые являются общими для одной или более картинок, SPS содержит данные, которые являются общими для кодированной видеопоследовательности (CVS), и VPS содержит данные, которые являются общими для нескольких CVS.
[0028] Текущая версия VVC также указывает два дополнительных набора параметров: набор параметров адаптации (APS) и набор параметров декодера (DPS). APS переносит параметры, необходимые для инструментального средства адаптивной контурной фильтрации (ALF) и инструментального средства преобразования сигнала яркости и масштабирования сигнала цветности (LMCS). DPS указывает информацию, которая может не изменяться во время сеанса декодирования и может быть хорошей для декодера, чтобы знать, например, максимальное число разрешенных подуровней. Информация в DPS не требуется для операции процесса декодирования.
1.7. Плитки и модули
[0029]
[0030] Проект VVC-стандарта кодирования видео включает в себя инструментальное средство, называемое "плитками" (tiles), которое разделяет картинку на прямоугольные пространственно независимые области. Плитки в проекте VVC-стандарта кодирования являются аналогичными плиткам, используемым в HEVC, но с механизмом двухэтапной сегментации. С использованием плиток, картинка в VVC может сегментироваться на строки и столбцы выборок, при этом плитка представляет собой пересечение строки и столбца. Например, картинка может разделяться на строки из 4 плиток и столбцы из 5 плиток, приводящие в сумме к 20 плиткам для картинок.
[0031] Плиточная структура передается в служебных сигналах в PPS посредством указания толщин (т.е. высот) строк и ширин столбцов. Отдельные строки и столбцы могут иметь различные размеры, но сегментация всегда охватывает всю картинку, слева направо и сверху вниз, соответственно.
[0032] Отсутствует зависимость при декодировании между плитками одной и той же картинки. Это включает в себя внутреннее предсказание, выбор контекста для энтропийного кодирования и предсказание векторов движения. Одно исключение заключается в том, что зависимости от внутриконтурной фильтрации, в общем, разрешаются между плитками.
[0033] Двухэтапная сегментация на плитки в VVC начинается посредством сегментации картинки на плитки, аналогично HEVC. Затем каждая плитка необязательно может сегментироваться на модули (bricks) посредством горизонтальных границ. В текущем проекте VVC-спецификации, слово "модуль" используется также для плиток, которые дополнительно не сегментируются на модули.
1.8. Слайсы
[0034]
[0035] Понятие слайсов в HEVC разделяет картинку на один или более независимо кодированных слайсов, при этом декодирование одного слайса в картинке является независимым от других слайсов в одной и той же картинке. Различные типы кодирования могут использоваться для слайсов одной и той же картинки, т.е. слайс может представлять собой I-слайс, P-слайс или B-слайс. Основная цель слайсов состоит в том, чтобы обеспечивать повторную синхронизацию в случае потерь данных.
[0036] В текущей версии VVC, слайс состоит либо из некоторого числа полных плиток, либо только из жесткой последовательности полных модулей одной плитки. Каждый слайс имеет заголовок слайса, содержащий параметры, которые могут задаваться для отдельных слайсов, и данные слайсов. Некоторые параметры ограничены таким образом, что они являются одинаковыми для всех слайсов в картинке. Каждый слайс в CVS переносится в отдельной VCL NAL-единице. В предыдущей версии проекта VVC-спецификации, слайсы называются "группами плиток".
Сущность изобретения
[0037] Существуют некоторые сложности. Например, в текущей версии проекта VVC-спецификации, один или более конкретных параметров, передаваемых в служебных сигналах в заголовке слайса, могут оставаться постоянными для всего потока битов. Соответственно, передача в служебных сигналах одинакового значения для такого параметра во всех заголовках слайсов приводит к ненужной потере по эффективности сжатия.
[0038] Эта неэффективность может уменьшаться, например, посредством 1) определения по меньшей мере одного параметра, значение которого должно иногда оставаться постоянным для каждого сегмента, включенного в набор сегментов (например, для каждого слайса, включенного в конкретную CVS), и иногда не оставаться постоянным, и 2) включения информации, например, в конкретный набор параметров (например, в набор параметров, включенный в конкретную CVS), причем информация указывает то, что: i) каждый сегмент, включенный в набор сегментов, содержит значение параметра, соответствующее параметру (например, каждый сегмент содержит кодовое слово (например, синтаксический элемент), из которого может извлекаться значение параметра), ii) набор параметров содержит значение параметра, соответствующее параметру, и причем это значение параметра может использоваться для того, чтобы декодировать данные сегмента для каждого сегмента, включенного в набор сегментов, iii) значение параметра по умолчанию, соответствующее параметру, может использоваться для того, чтобы декодировать данные сегмента для каждого сегмента, включенного в набор сегментов, или iv) значение параметра, соответствующее параметру, может извлекаться из одного или более других значений параметров, включенных в поток битов, и причем извлеченное значение параметра может использоваться для того, чтобы декодировать данные сегмента для каждого сегмента, включенного в набор сегментов. Таким образом, число битов может сокращаться посредством передачи в служебных сигналах в наборе параметров значения параметра, которое может использоваться для всех сегментов в конкретном наборе сегментов, вместо передачи в служебных сигналах значения параметра в каждом сегменте, включенном в набор сегментов.
[0039] Соответственно, в одном аспекте предусмотрен способ декодирования, осуществляемый посредством декодера для декодирования потока битов, причем поток битов содержит набор параметров картинки (PPS) и первый набор слайсов. Способ включает в себя получение, посредством декодера, набора параметров картинки. Способ также включает в себя декодирование, посредством декодера, первого синтаксического элемента, включенного в набор параметров картинки, чтобы получать значение индикатора. Декодер имеет такую конфигурацию, что если значение индикатора задается равным первому значению, то определяется то, что заголовок картинки, включенный в поток битов, содержит значение параметра, соответствующее конкретному параметру, иначе определяется то, что каждый слайс, включенный в первый набор слайсов, содержит значение параметра, соответствующее конкретному параметру. Если заголовок картинки содержит значение параметра, соответствующее конкретному параметру, то значение параметра используется для того, чтобы декодировать данные слайсов для каждого слайса, включенного в первый набор слайсов.
[0040] В другом аспекте, предусмотрен способ кодирования, осуществляемый посредством кодера. Способ включает в себя формирование, посредством кодера, первого набора слайсов. Способ также включает в себя формирование, посредством кодера, набора параметров картинки, при этом набор параметров картинки включает в себя первое кодовое слово, которое задается равным первому значению или второму значению. Когда первое кодовое слово задается равным первому значению, то первое кодовое слово указывает то, что заголовок картинки, сформированный посредством кодера, содержит значение параметра, соответствующее конкретному параметру, который использован для того, чтобы кодировать данные слайсов для каждого слайса, включенного в первый набор слайсов, и когда первое кодовое слово задается равным второму значению, то первое кодовое слово указывает то, что каждый слайс, включенный в первый набор слайсов, содержит значение параметра, соответствующее конкретному параметру.
[0041] В другом аспекте, предусмотрена компьютерная программа, содержащая инструкции, которые, при выполнении посредством схемы обработки, инструктируют схеме обработки осуществлять любой из способов, раскрытых в данном документе. В другом аспекте, предусмотрен носитель, содержащий компьютерную программу, при этом носитель представляет собой одно из электронного сигнала, оптического сигнала, радиосигнала и машиночитаемого носителя хранения данных.
[0042] В другом аспекте, предусмотрен декодер для осуществления вышеописанного способа декодирования. В одном варианте осуществления, декодер содержит машиночитаемый носитель хранения данных и схему обработки, соединенную с носителем хранения данных, при этом декодер выполнен с возможностью осуществлять способ декодирования.
[0043] В другом аспекте, предусмотрен кодер для осуществления вышеописанного способа кодирования. В одном варианте осуществления, кодер содержит машиночитаемый носитель хранения данных и схему обработки, соединенную с носителем хранения данных, при этом кодер выполнен с возможностью осуществлять способ кодирования.
[0044] Преимущество вариантов осуществления, раскрытых в данном документе, состоит в том, что для каждого параметра, который остается постоянным, по меньшей мере, в части потока битов (например, в CVS), нет необходимости передавать в служебных сигналах значение параметра для параметра на уровне сегмента (например, слайса), что сокращает число битов и повышает общую эффективность сжатия.
Краткое описание чертежей
[0045] Фиг. 1 является принципиальной блок-схемой видеокодера согласно одному варианту осуществления.
[0046] Фиг. 2 является принципиальной блок-схемой видеодекодера согласно одному варианту осуществления.
[0047] Фиг. 3 иллюстрирует кодированный поток битов видео согласно варианту осуществления.
[0048] Фиг. 4 является блок-схемой последовательности операций способа, иллюстрирующей процесс декодирования согласно варианту осуществления.
[0049] Фиг. 5 является блок-схемой последовательности операций способа, иллюстрирующей процесс кодирования согласно варианту осуществления.
[0050] Фиг. 6 является блок-схемой оборудования согласно варианту осуществления.
[0051] Фиг. 7A является блок-схемой оборудования декодирования видео согласно варианту осуществления.
[0052] Фиг. 7B является блок-схемой оборудования кодирования видео согласно варианту осуществления
Подробное описание изобретения
[0053] Варианты осуществления, описанные в данном документе, могут использоваться в видеокодере или видеодекодере.
[0054] Фиг. 1 является принципиальной блок-схемой видеокодера 140 согласно одному варианту осуществления. Текущий блок пикселов предсказывается посредством выполнения оценки движения с использованием модуля 150 оценки движения из уже предоставленного блока пикселов в том же кадре или в предыдущем кадре. Результат оценки движения представляет собой вектор движения или смещения, ассоциированный с опорным блоком, в случае взаимного предсказания. Вектор движения может использоваться посредством модуля 150 компенсации движения для того, чтобы выводить взаимное предсказание блока пикселов. Модуль 149 внутреннего предсказания вычисляет внутреннее предсказание текущего блока пикселов. Выводы из модуля 150 оценки/компенсации движения и модуля 149 внутреннего предсказания вводятся в модуль 151 выбора, который выбирает либо внутреннее предсказание, либо взаимное предсказание для текущего блока пикселов. Вывод из модуля 151 выбора вводится в модуль вычисления ошибок в форме сумматора 141, который также принимает пиксельные значения текущего блока пикселов. Сумматор 141 вычисляет и выводит остаточную ошибку в качестве разности в пиксельных значениях между блоком пикселов и его предсказанием. Ошибка преобразуется в преобразователе 142, к примеру, посредством дискретного косинусного преобразования и квантуется посредством квантователя 143, после чего выполняется кодирование в кодере 144, к примеру, посредством энтропийного кодера. При взаимном кодировании, также оцененный вектор движения передается в кодер 144, чтобы формировать кодированное представление текущего блока пикселов. Преобразованная и квантованная остаточная ошибка для текущего блока пикселов также предоставляется в обратный квантователь 145 и обратный преобразователь 146, чтобы извлекать исходную остаточную ошибку. Эта ошибка суммируется посредством сумматора 147 с блочным предсказанием, выводимым из модуля 150 компенсации движения или модуля 149 внутреннего предсказания, чтобы создавать опорный блок пикселов, который может использоваться при предсказании и кодировании следующего блока пикселов. Этот новый опорный блок сначала обрабатывается посредством фильтра 100 удаления блочности. Обработанный новый опорный блок затем временно сохраняется в буфере 148 кадров, в котором он является доступным для модуля 149 внутреннего предсказания и модуля 150 оценки/компенсации движения.
[0055] Фиг. 2 является блок-схемой видеодекодера 260 согласно некоторым вариантам осуществления. Декодер 260 включает в себя декодер 261, такой как энтропийный декодер для того, чтобы декодировать кодированное представление блока пикселов, чтобы получать набор квантованных и преобразованных остаточных ошибок. Эти остаточные ошибки деквантуются посредством обратного квантователя 262 и обратно преобразуются посредством обратного преобразователя 263, чтобы предоставлять набор остаточных ошибок. Эти остаточные ошибки суммируются посредством сумматора 264 с пиксельными значениями опорного блока пикселов. Опорный блок определяется посредством модуля 267 оценки/компенсации движения или модуля 266 внутреннего предсказания в зависимости от того, выполняется взаимное или внутреннее предсказание. Модуль 268 выбора в силу этого взаимно соединяется с сумматором 264 и модулем 267 оценки/компенсации движения и модулем 266 внутреннего предсказания. Результирующий декодированный блок пикселов, выводимых из сумматора 264, вводится в фильтр 200 удаления блочности. Фильтрованный блок пикселов выводится из декодера 260 и, кроме того, может временно предоставляться в буфер 265 кадров для использования в качестве опорного блока пикселов для последующего блока пикселов, который должен декодироваться. Буфер 265 кадров тем самым соединяется с модулем 267 оценки/компенсации движения для того, чтобы обеспечивать доступность сохраненных блоков пикселов для модуля 267 оценки/компенсации движения. Вывод из сумматора 264 также может вводиться в модуль 266 внутреннего предсказания для использования в качестве нефильтрованного опорного блока пикселов.
[0056] Как отмечено выше, в текущей версии проекта VVC-спецификации, один или более конкретных параметров, передаваемых в служебных сигналах в слайсе, могут оставаться постоянными для всего потока битов (или для некоторой части потока битов, такой как CVS). Соответственно, передача в служебных сигналах одинакового значения для такого параметра во всех таких слайсах приводит к ненужной потере по эффективности сжатия.
[0057] При разработке VVC, опорное программное обеспечение под названием VTM и набор общих тестовых условий (CTC) задаются для того, чтобы легко верифицировать улучшения кодека и обеспечивать то, что кодек разрабатывается с надлежащей областью применения. VVC CTC содержит четыре различных набора условий кодирования: 1) полностью внутренний (AI), при котором все картинки кодируются только внутренне, 2) произвольный доступ (RA) с IRAP-картинками, кодированными в периодическом интервале, 3) с низкой задержкой с B-картинками (LDB) и 4) с низкой задержкой с P-картинками (LDP). Каждый набор условий кодирования содержит конфигурационную настройку, которую следует вводить в VVC-кодер, и набор тестовых последовательностей, которые следует использовать для тестирования VVC-кодека.
[0058] В нижеприведенной таблице 4, показывается то, какие параметры заголовка слайса (т.е. синтаксические элементы заголовков слайсов) остаются постоянными для всех тестовых последовательностей для каждого из четырех наборов тестовых условий AI, RA, LDB и LDP в текущей версии CTC с использованием VTM 5.0.
Табл. 4
Название параметра слайса
Постоянный в:
AI
RA
LDB
LDP
no_output_of_prior_pics_flag
x
slice_sao_luma_flag
x
slice_sao_chroma_flag
x
tile_group_alf_enabled_flag
x
dep_quant_enabled_flag
x
x
x
x
partition_constrainst_override_flag
x
slice_loop_filter_across_slices_enabled_flag
x
x
x
x
short_term_ref_pic_set_sps_flag
x
x
x
inter_ref_pic_set_prediction_flag
x
slice_temporal_mvp_enabled_flag
x
x
mvd_l1_zero_flag
x
collocated_from_l0_flag
x
num_negative_pics
x
num_positive_pics
x
reshaper_model_delta_max_bin_idx
x
slice_reshaper_ChromaAdj
x
x
six_minus_max_num_merge_cand
x
x
x
x
five_minus_max_num_affine_merge_cand
x
x
x
max_num_merge_cand_minus_max_num_triangle_cand
x
x
collocated_ref_idx
x
x
x
slice_type
x
[0059] Вышеописанная неэффективность может уменьшаться, например, посредством 1) определения, по меньшей мере, одного параметра, значение которого должно иногда оставаться постоянным для каждого сегмента, включенного в набор сегментов (например, для каждого слайса, включенного в конкретную CVS), и иногда не оставаться постоянным, и 2) включения информации, например, в конкретный набор параметров (например, в набор параметров, включенный в конкретную CVS), причем информация указывает то, что: i) каждый сегмент, включенный в набор сегментов, содержит значение параметра, соответствующее параметру (например, каждый сегмент, включенный в набор сегментов, содержит кодовое слово, из которого может извлекаться значение параметра), ii) набор параметров содержит значение параметра, соответствующее параметру, и причем это значение параметра может использоваться для того, чтобы декодировать данные сегмента для каждого сегмента, включенного в набор сегментов, iii) значение параметра по умолчанию, соответствующее параметру, может использоваться для того, чтобы декодировать данные сегмента для каждого сегмента, включенного в набор сегментов, или iv) значение параметра, соответствующее параметру, может извлекаться из одного или более других значений параметров, включенных в поток битов, и причем извлеченное значение параметра может использоваться для того, чтобы декодировать данные сегмента для каждого сегмента, включенного в набор сегментов. Таким образом, число битов может сокращаться посредством передачи в служебных сигналах в наборе параметров значения параметра, которое может использоваться для всех сегментов в конкретном наборе сегментов, вместо передачи в служебных сигналах значения параметра в каждом сегменте, включенном в набор сегментов.
[0060] Соответственно, в одном варианте осуществления, значение параметра, которое всегда остается постоянным в CVS, предпочтительно передается в служебных сигналах только однократно в CVS, типично в наборе параметров последовательности (SPS). Примеры параметров, которые всегда остаются постоянными в CVS, представляют собой ширину и высоту видео: например, pic_width_in_luma_samples и pic_height_in_luma_samples в текущей версии VVC. Значение параметра, которое всегда изменяется в CVS с несколькими сегментами, должно передаваться в служебных сигналах для каждого сегмента. Примерный параметр, который всегда изменяется в расчете на каждую картинку в CVS, представляет собой младшие биты значения номера в последовательности картинок, slice_pic_order_cnt_lsb, в текущей версии VVC (когда предусмотрено несколько сегментов в расчете на картинку, slice_pic_order_cnt_lsb должен быть одинаковым для всех сегментов картинки). Помимо всегда постоянных и всегда изменяющихся значений параметров, предусмотрены некоторые значения параметров, которые иногда изменяются между сегментами и иногда остаются постоянными для целой CVS.
[0061] Соответственно, в одном варианте осуществления, для набора параметров, который может оставаться постоянным для всех сегментов в CVS, в наборе параметров, например, в SPS, указывается то, значение каждого параметра передается в наборе в служебных сигналах в наборе параметров, или значение параметра передается в служебных сигналах в каждом заголовке сегмента, например, в заголовке слайса. Если значение конкретного параметра в наборе остается постоянным в CVS, число битов может сокращаться посредством передачи в служебных сигналах значения параметра в наборе параметров. Если значение параметра не является постоянным для всех сегментов в CVS, то значение передается в служебных сигналах в каждом заголовке сегмента CVS.
[0062] Фиг. 3 иллюстрирует примерный поток 300 видеобитов. Поток 300 битов включает в себя CVS 301, которая содержит набор 310 параметров (PS) (например, не-VCL NAL-единицу, которая содержит набор параметров), и число сегментов (например, число VCL NAL-единиц, которые содержат слайс). Показаны сегменты 312a и 312b. Сегмент представляет собой единицу данных, которая содержит данные сегмента (SD), которые содержат выборочные данные. Сегмент может иметь заголовок сегмента (SH) в дополнение к данным сегмента (SD). VVC-слайс представляет собой пример сегмента. Сегмент также может представлять собой картинка, группу плиток или некоторый другой объект, который содержит полный картинка или часть картинки. В этом примере, каждый сегмент включает в себя заголовок сегмента в дополнение к данным сегмента.
Значение параметра в наборе параметров или сегменте
[0063]
[0064] В одном варианте осуществления, значение конкретного параметра (обозначается как "P") либо может быть постоянным для всех сегментов в CVS, либо может изменяться между сегментами в зависимости от сценария. Например, параметр P может оставаться постоянным для некоторых конфигураций (например, в приложении для проведения видеоконференций с низкой задержкой), но не должен оставаться постоянным в широковещательном сценарии. Кодер типично должен быть сконфигурирован с возможностью знать заранее то, должен или нет параметр P оставаться постоянным для CVS.
[0065] В этом варианте осуществления значение индикатора передается в служебных сигналах в наборе параметров, при этом значение индикатора указывает то, значение для параметра P передается в служебных сигналах в наборе параметров или передается в служебных сигналах для каждого сегмента в CVS. В одном варианте осуществления, значение индикатора может извлекаться из кодового слова (т.е. конкретного набора битов), включенного в набор параметров.
[0066] Если значение индикатора указывает то, что значение параметра передается в служебных сигналах в наборе параметров, то значение параметра передается в служебных сигналах только в наборе параметров, и это значение затем может использоваться для всех сегментов в CVS.
[0067] Если значение индикатора указывает то, что значение параметра передается в служебных сигналах для каждого сегмента, то для одной версии этого варианта осуществления, значение параметра, которое следует использовать для каждого сегмента, передается в служебных сигналах в каждом сегменте, а не в наборе параметров.
[0068] В другой версии этого варианта осуществления, значение параметра сначала задается в наборе параметров, и затем для каждого сегмента определяется то, должно значение параметра перезаписываться или нет.
[0069] В одной версии этого варианта осуществления, индикатор того, передается значение параметра в служебных сигналах в наборе параметров или в каждом заголовке сегмента, передается в служебных сигналах отдельно от значения параметра в наборе параметров (например, значение индикатора и значение параметра передаются в служебных сигналах с двумя различными кодовыми словами, каждое из которых соответствует различному синтаксическому элементу). Это проиллюстрировано в нижеприведенных синтаксических таблицах и семантических описаниях наборов параметров последовательности (SPS) и заголовков сегментов, в которых param_X, param_Y и param_Z являются параметрами уровня сегментов, которые могут передаваться в служебных сигналах в SPS.
Таблица 5. Примерный SPS-синтаксис
seq_parameter_set_rbsp() {
Дескриптор
…
sps_signal_common_slice_params_in_sps_flag
u(1)
if(sps_signal_common_slice_params_in_sps_flag){
sps_param_X_flag
u(1)
sps_param_Y_flag
u(1)
sps_param_Z_flag
u(1)
…
if(sps_param_X_flag)
param_X
u(1)
if(sps_param_Y_flag)
param_Y
u(v)
if(sps_param_Z_flag)
param_Z
ue(v)
…
}
…
}
Таблица 6. Примерный синтаксис заголовков сегментов
segment_header() {
Дескриптор
…
…
if(!sps_param_X_flag)
param_X
u(1)
if(!sps_param_Y_flag)
param_Y
u(v)
if(!sps_param_Z_flag)
param_Z
ue(v)
…
…
}
Таблица 7. Семантика
sps_signal_common_slice_params_in_sps_flag:Когда равен 1, указывает то, что param_X, param_Y и param_Z могут указываться в SPS или в заголовках слайсов.Когда равен 0, указывает то, что param_X, param_Y и param_Z указываются в заголовках слайсов, и то, что sps_param_X_flag, sps_param_Y_flag, sps_param_Z_flag логически выводятся равными 0.sps_param_X_flag:Когда равен 1, указывает то, что param_X присутствует в SPS.Когда равен 0, указывает то, что param_X присутствует в заголовках слайсов.sps_param_Y_flag:Когда равен 1, указывает то, что param_Y присутствует в SPS.Когда равен 0, указывает то, что param_Y присутствует в заголовках слайсов.sps_param_Z_flag:Когда равен 1, указывает то, что param_Z присутствует в SPS.Когда равен 0, указывает то, что param_Z присутствует в заголовках слайсов.
[0070] В одной версии этого варианта осуществления, значение индикатора, которое указывает то, передается неотрицательное целочисленное значение параметра в служебных сигналах в наборе параметров или в каждом заголовке сегмента, передается в служебных сигналах в кодовом слове (обозначается как "cw1"), таком же как кодовое слово для неотрицательного целочисленного значения параметра в наборе параметров, если значение индикатора указывает то, что неотрицательное целочисленное значение параметра передается в служебных сигналах в наборе параметров. Например, кодовое слово cw1 может принимать любые неотрицательные целочисленные значения со следующей интерпретацией:
если cw1=0, то значение параметра передается в служебных сигналах в заголовках слайсов;
иначе, значение параметра равно cw1-1.
[0071] В одной реализации этого варианта осуществления, значение indicator_flag индикатора и неотрицательное целочисленное значение param_p_value параметра извлекаются из первого кодового слова cw1 в наборе параметров согласно следующему псевдокоду:
indicator_flag=cw1>0
if(indicator_flag){
param_p_value=cw1-1
}
[0072] Следующий псевдокод показывает то, как значение параметра извлекается из второго кодового слова cw2 в заголовке сегмента, если значение индикатора указывает то, что значение параметра передается в служебных сигналах для каждого сегмента:
if (!indicator_flag) {
param_p_value=cw2
}
[0073] В еще одной компактной реализации этой версии варианта осуществления, первое кодовое слово cw1 передается в служебных сигналах в наборе параметров, и значение param_p_value параметра извлекается из cw1 согласно следующему псевдокоду, причем cw1, равный 0, указывает то, что param_p_value передается в служебных сигналах в каждом сегменте с кодовым словом cw2, и cw1, больший 0, указывает то, что param_p_value передается в служебных сигналах в наборе параметров и имеет значение cw1-1:
if(!cw1){
param_p_value=cw2
}
else {
param_p_value=cw1-1
}.
[0074] Следует отметить, что вышеприведенный оператор "!cw1" эквивалентно может выражаться как "cw1>0".
[0075] В другой версии этого варианта осуществления, значение индикатора передается в служебных сигналах в первом наборе параметров, например, в SPS. Если значение индикатора указывает то, что значение параметра не передается в служебных сигналах для каждого сегмента, то значение параметра передается в служебных сигналах во втором наборе параметров, например, в PPS.
[0076] Параметр P может представлять собой любой параметр сегмента, который может оставаться постоянным для CVS, например, любой из следующих параметров текущей VTM-версии 5.0:
no_output_of_prior_pics_flag,
slice_sao_luma_flag,
slice_sao_chroma_flag,
tile_group_alf_enabled_flag,
dep_quant_enabled_flag,
partition_constrainst_override_flag,
slice_loop_filter_across_slices_enabled_flag,
short_term_ref_pic_set_sps_flag,
inter_ref_pic_set_prediction_flag,
slice_temporal_mvp_enabled_flag,
mvd_l1_zero_flag,
collocated_from_l0_flag,
num_negative_pics,
num_positive_pics,
reshaper_model_delta_max_bin_idx,
slice_reshaper_ChromaAdj,
six_minus_max_num_merge_cand,
five_minus_max_num_affine_merge_cand,
max_num_merge_cand_minus_max_num_triangle_cand,
collocated_ref_idx,
slice_type,
log2_diff_min_qt_min_cb,
max_mtt_hierarchy_depth,
log2_diff_max_bt_min_qt, или
log2_diff_max_tt_min_qt.
[0077] Хотя выше пояснен один параметр P, может быть предусмотрено более одного параметра за раз, которые иногда остаются постоянными в CVS. Эти параметры называются "параметрами p1, p2, …, pN" в нижеприведенном примерном синтаксисе.
Таблица 8. Примерный SPS-синтаксис
seq_parameter_set_rbsp() {
Дескриптор
…
…
sps_param_p1
ue(v)
sps_param_p2
ue(v)
…
…
sps_param_pN
ue(v)
…
…
}
sps_param_p1, равный 0, указывает то, что param_p1 присутствует в заголовках слайсов. sps_param_p1, больший 0, указывает то, что значение param_p1 задается равным sps_param_p1 минус 1.
sps_param_p2, равный 0, указывает то, что param_p1 присутствует в заголовках слайсов. sps_param_p2, больший 0, указывает то, что значение param_p2 задается равным sps_param_p2 минус 1.
sps_param_pN, равный 0, указывает то, что param_pN присутствует в заголовках слайсов. sps_param_pN, больший 0, указывает то, что значение param_pN задается равным sps_param_pN минус 1.
Таблица 9. Примерный синтаксис заголовков слайсов
slice_header() {
Дескриптор
…
…
if(!sps_param_p1)
param_p1
ue(v)
if(!sps_param_p2)
param_p2
ue(v)
…
…
if(!sps_param_pN)
param_pN
ue(v)
…
…
}
[0078] В одном варианте осуществления, флаг группировки используется таким образом, что если флаг группировки задается равным 1, все параметры в группе параметров могут передаваться в служебных сигналах либо в наборе параметров, либо в заголовке сегмента. Если флаг группировки задается равным 0, параметры в группе параметров всегда передаются в служебных сигналах в заголовке слайса. Это примерно иллюстрируется в синтаксисе и семантике ниже.
Таблица 10. Примерный SPS-синтаксис, иллюстрирующий флаг группировки
seq_parameter_set_rbsp() {
Дескриптор
…
…
grouping_flag
u(1)
if(grouping_flag){
sps_param_p1
ue(v)
sps_param_p2
ue(v)
…
…
sps_param_pN
ue(v)
}
…
…
}
grouping_flag, равный 1, указывает то, что param_p1, param_p2, …, param_pN могут указываться в SPS или в заголовках слайсов. grouping_flag, равный 0, указывает то, что param_p1, param_p2, …, param_pN указываются в заголовках слайсов.
sps_param_p1, равный 0, указывает то, что param_p1 присутствует в заголовках слайсов. sps_param_p1, больший 0, указывает то, что значение param_p1 задается равным sps_param_p1 минус 1.
sps_param_p2, равный 0, указывает то, что param_p2 присутствует в заголовках слайсов. sps_param_p2, больший 0, указывает то, что значение param_p2 задается равным sps_param_p2 минус 1.
sps_param_pN, равный 0, указывает то, что param_pN присутствует в заголовках слайсов. sps_param_pN, больший 0, указывает то, что значение param_pN задается равным sps_param_pN минус 1.
Таблица 11. Примерный заголовок сегмента, иллюстрирующий флаг группировки
segment_header() {
Дескриптор
…
…
if(grouping_flag){
if(!sps_param_p1)
param_p1
ue(v)
if(!sps_param_p2)
param_p2
ue(v)
…
…
if(!sps_param_pN)
param_pN
ue(v)
} else {
param_p1
ue(v)
param_p2
ue(v)
…
param_pN
ue(v)
}
…
}
[0079] В одном варианте осуществления, флаг группировки, равный 1, указывает то, что параметры в группе параметров используют свои значения по умолчанию, и флаг группировки, равный 0, указывает то, что параметры в группе параметров передаются в служебных сигналах в заголовке сегмента. Таким образом, в этой версии варианта осуществления, параметры никогда не передаются в служебных сигналах в наборе параметров, поскольку вместо этого используются значения по умолчанию.
[0080] В одном варианте осуществления, флаг группировки извлекается из значений параметров в потоке битов. Например, выбор передачи в служебных сигналах значений параметров в наборе параметров или в заголовке сегмента может быть доступным только для не-IRAP-картинок.
[0081] В одном варианте осуществления, кодер может выполнять поднабор или все следующие этапы для того, чтобы кодировать один или более картинок в кодированный видеопоток (CVS), причем CVS должен содержать, по меньшей мере, первый набор параметров и набор из двух или более сегментов. Первый набор параметров, например, может представлять собой SPS, PPS, DPS, VPS или набор параметров заголовка картинки (PHPS).
[0082] Этап 1: Определение, для параметра P, того, должно или нет значение параметра P оставаться постоянным для всех сегментов в CVS.
[0083] Этап 2: Конструирование первого набора параметров таким образом, что набор параметров предоставляет информацию, которая указывает то, передается или нет значение параметра P в служебных сигналах в наборе параметров (например, в первом наборе параметров или в другом наборе параметров). Например, если определяется то, что значение параметра P должно оставаться постоянным для всех сегментов в CVS, то информация должна указывать то, что значение параметра P передается в служебных сигналах в наборе параметров, иначе информация должна указывать то, что значение параметра P передается в служебных сигналах для каждого сегмента в CVS. Если значение параметра P передается в служебных сигналах в наборе параметров, значение параметра P может кодироваться в кодовом слове, которое также предоставляет информацию в отношении того, передается или нет значение параметра P в служебных сигналах в наборе параметров.
[0084] Этап 3: Для каждого сегмента в CVS, если определяется то, что значение параметра P должно оставаться постоянным для всех сегментов в CVS, то включение значения параметра P в сегмент. Значение предпочтительно включается в заголовок сегмента (например, кодируется в кодовом слове в заголовке сегмента).
[0085] Этап 4: Для каждого сегмента, если значение параметра для параметра P включается в сегмент, то кодирование данных сегмента для сегмента с использованием значения параметра P, которое включается в сегмент, иначе кодирование данных сегмента для сегмента с использованием значения параметра P, которое передается в служебных сигналах посредством набора параметров.
[0086] В одном варианте осуществления, декодер может выполнять поднабор или все следующие этапы для того, чтобы декодировать один или более картинок из кодированного видеопотока (CVS), причем CVS содержит, по меньшей мере, первый набор параметров и два или более сегментов.
[0087] Этап 1: Декодирование значения индикатора из первого кодового слова в первом наборе параметров в CVS. Значение индикатора может составлять 1-битовое значение (например, кодовое слово может состоять из одного бита).
[0088] Этап 2: Определение из значения индикатора того, указывается значение параметра P в наборе параметров или указывается посредством второго кодового слова в каждом сегменте. Присутствие второго кодового слова в сегментах может преобразовываться и согласовываться в отношении значения индикатора.
[0089] Этап 3: Если определяется то, что значение параметра P указывается в наборе параметров, то декодирование значения параметра P из набора параметров. Значение параметра P, например, может извлекаться из первого кодового слова или декодироваться из третьего кодового слова в наборе параметров.
[0090] Этап 4: Для каждого сегмента, выполнение этапов 4A и 4B.
[0091] Этап 4A: Если определяется то, что значение параметра P указывается в каждом сегменте, то декодирование значения параметра P из второго кодового слова в сегменте. Второе кодовое слово предпочтительно декодируется из заголовка сегмента.
[0092] Этап 4B: Декодирование данных сегмента для сегмента с использованием значения параметра P.
[0093] В разновидности этого варианта осуществления, значение индикатора указывает то, что значение параметра P задается равным значению по умолчанию, известному декодеру, или значение параметра P передается в служебных сигналах для каждого сегмента в CVS.
Случаи, в которых значение параметра составляет 1-битовое значение
[0094]
[0095] В некоторых вариантах использования, значение параметра для параметра P представляет собой булево значение, вместо общего значения или неотрицательного целочисленного значения. Для таких вариантов использования, параметр P называется "флагом F".
[0096] В варианте осуществления, индикатор в отношении того, передается флаг F в служебных сигналах в наборе параметров или в каждом заголовке сегмента, передается в служебных сигналах отдельно от значения флага F в наборе параметров, например, значение индикатора и значение параметра передаются в служебных сигналах с двумя различными кодовыми словами.
[0097] В альтернативном варианте осуществления, если значение индикатора указывает то, что значение флага F передается в служебных сигналах в наборе параметров, то значение индикатора передается в служебных сигналах в кодовом слове, таком же как кодовое слово для значения флага F.
[0098] Например, кодовое слово может представлять собой 2-битовое кодовое слово (обозначается как "cw"), которое может принимать, по меньшей мере, три различных значения, 0, 1 и 2, со следующей интерпретацией:
cw=0: значение флага F передается в служебных сигналах в заголовках сегментов;
cw=1: значение флага F равно 0; и
cw>1 (например, cw=2): значение флага F равно 1.
[0099] В альтернативном варианте осуществления, значения cw имеют следующую интерпретацию:
cw=0: значение флага F равно 0;
cw=1: значение флага F равно 1; и
cw>1 (например, cw=2): значение флага F передается в служебных сигналах в заголовках сегментов.
[0100] В одном варианте осуществления, первое кодовое слово cw1 (например, 2-битовое длинное кодовое слово) передается в служебных сигналах в наборе параметров, и значение флага F (обозначается как "flag_f_value") извлекается из cw1, причем значение cw1, равное 0, указывает то, что flag_f_value передается в служебных сигналах в кодовом слове (обозначается как "cw2") в каждом сегменте, и значение cw1, равное 1 или 2, указывает то, что flag_f_value=значение (cw1-1). Это проиллюстрировано в следующем псевдокоде:
if(cw1==0){
flag_f_value=cw2
} else {
flag_f_value=cw1-1
}.
[0101] В другом варианте осуществления, значение индикатора, indicator_flag, и значение флага F, flag_f_value, извлекаются из первого кодового слова cw1 в наборе параметров согласно следующему псевдокоду:
if cw1==0, then indicator_flag=0, otherwise indicator_flag=1;
if(indicator_flag){
flag_f_value=cw1-1
}.
[0102] Следующий псевдокод показывает то, как значение флага F извлекается из второго кодового слова cw2 (или флага) в заголовке сегмента, если значение индикатора указывает то, что значение флага F передается в служебных сигналах для каждого сегмента:
if(!indicator_flag){
flag_f_value=cw2
}.
[0103] В одном варианте осуществления, значение indicator_flag индикатора и значение flag_f_value флага F могут извлекаться из трех значений первого кодового слова cw1, например, согласно:
Таблица 12. Indicator_flag и flag_f_value, извлекаемые из трех значений кодового слова cw1
cw1
indicator_flag
flag_f_value
0
0
Значение указывается в каждом заголовке сегмента
10
1
flag_f_value=0
11
1
flag_f_value=1
[0104] Кодовое слово cw1 может передаваться в служебных сигналах с фиксированным дескриптором кодирования, таким как u(2), что означает то, что 2 бита всегда передаются в служебных сигналах. Кодовое слово cw1 также может передаваться в служебных сигналах с дескриптором усеченного унарного преобразования в двоичную форму с максимальным значением (maxVal), заданным равным 2, которое может передавать в служебных сигналах только три значения, например, (0, 10 или 11). Дескриптор усеченного унарного преобразования в двоичную форму, аналогично проекту VVC-спецификации, может указываться с tu(v) в синтаксической таблице:
Таблица 13. Пример дескриптора тринарного кодирования
seq_parameter_set_rbsp() {
Дескриптор
…
…
sps_or_slice_f1_flag
tu(v)
…
…
}
[0105] Преимущество кодирования cw1 с 0, 10 или 11 по сравнению с использованием двух фиксированных битов заключается в том, что каждый раз, когда flag_f_value должен указываться в заголовке сегмента, только один бит должен передаваться в служебных сигналах.
[0106] Также могут рассматриваться другие значения кодового слова либо комбинации трех значений (0, 10, 11), например, (1, 01, 00) или (10, 11, 0).
[0107] Нижеприведенный примерный синтаксис и семантика иллюстрируют то, как флаги f1, f2, …, fN могут указываться.
Табл. 14
seq_parameter_set_rbsp() {
Дескриптор
…
…
sps_flag_f1
tu(v)
sps_flag_f2
tu(v)
…
…
sps_flag_fN
tu(v)
…
…
}
sps_flag_f1, равный 0, указывает то, что flag_f1 присутствует в заголовках слайсов. sps_flag_f1, больший 0, указывает то, что значение flag_f1 задается равным sps_flag_f1 минус 1. Максимальное значение maxVal усеченного унарного преобразования tu(v) в двоичную форму задается равным 2.
sps_flag_f2, равный 0, указывает то, что flag_f2 присутствует в заголовках слайсов. sps_flag_f2, больший 0, указывает то, что значение flag_f2 задается равным sps_flag_f2 минус 1. Максимальное значение maxVal усеченного унарного преобразования tu(v) в двоичную форму задается равным 2.
sps_flag_fN, равный 0, указывает то, что flag_fN присутствует в заголовках слайсов. sps_flag_fN, больший 0, указывает то, что значение flag_fN задается равным sps_flag_fN минус 1. Максимальное значение maxVal усеченного унарного преобразования tu(v) в двоичную форму задается равным 2.
Табл. 15
slice_header() {
Дескриптор
…
…
if(!sps_flag_f1)
flag_f1
u(1)
if(!sps_flag_f2)
flag_f2
u(1)
…
…
if(!sps_flag_fN)
flag_fN
u(1)
…
…
}
[0108] В одном варианте осуществления, кодер может выполнять поднабор или все следующие этапы для того, чтобы кодировать один или более картинок в кодированный видеопоток (CVS), причем CVS должен содержать, по меньшей мере, набор параметров и два или более сегментов.
[0109] Этап 1: Определение, для флага F, того, должно или нет значение флага F оставаться постоянным для всех сегментов в CVS.
[0110] Этап 2: Передача в служебных сигналах значения индикатора в первом кодовом слове в наборе параметров, причем, если определяется то, что значение флага F должно оставаться постоянным для всех сегментов в CVS, то значение индикатора указывает то, что значение флага F передается в служебных сигналах в наборе параметров (или в другом наборе параметров), иначе значение индикатора указывает то, что значение флага F передается в служебных сигналах для каждого сегмента в CVS.
[0111] Если значение индикатора указывает то, что значение флага F передается в служебных сигналах в наборе параметров, то выполняется этап 3A, иначе выполняется этап 3B.
[0112] Этап 3A: a) передача в служебных сигналах значения флага F в наборе параметров (значение флага F, например, может передаваться в служебных сигналах в первом кодовом слове вместе со значением индикатора или в третьем кодовом слове в наборе параметров), и b) для каждого сегмента, кодирование данных сегмента для сегмента с использованием значения флага F.
[0113] Этап 3B: Для каждого сегмента, a) передача в служебных сигналах значения флага F во втором кодовом слове в сегменте (второе кодовое слово предпочтительно передается в служебных сигналах в заголовке сегмента), и b) кодирование данных сегмента для сегмента с использованием значения флага F для сегмента.
[0114] Декодер может выполнять поднабор или все следующие этапы для этого варианта осуществления для того, чтобы декодировать один или более картинок из кодированного видеопотока (CVS), причем CVS содержит, по меньшей мере, один набор параметров и два или более сегментов.
[0115] Этап 1: Декодирование значения индикатора из первого кодового слова в наборе параметров в CVS. Набор параметров, например, может представлять собой SPS, PPS, DPS, VPS или PHPS. Значение индикатора может составлять 1-битовое значение.
[0116] Этап 2: Определение из значения индикатора то, указывается значение флага F в наборе параметров или указывается посредством второго кодового слова в каждом кодированном сегменте.
[0117] Этап 3: Если определяется то, что значение флага F указывается в наборе параметров, то декодирование значения флага F из набора параметров. Значение флага F, например, может извлекаться из первого кодового слова или декодироваться из отдельного третьего кодового слова в наборе параметров.
[0118] Этап 4: Для каждого сегмента, выполнение этапов 4A и 4B.
[0119] Этап 4A: Если определяется то, что значение флага F указывается в каждом сегменте, то декодирование значения флага F из второго кодового слова в сегменте (второе кодовое слово может составлять часть заголовка сегмента).
[0120] Этап 4B: Декодирование данных сегмента для сегмента с использованием значения флага F, которое определяется либо из второго кодового слова, либо из набора параметров.
Извлечение значения параметра
[0121]
[0122] В одном варианте осуществления, значение параметра P для каждого сегмента в CVS может извлекаться из других одного или более значений параметров в заголовке и/или в наборе параметров в CVS, и передается в служебных сигналах (например, в наборе параметров в CVS) значение индикатора, которое указывает то, должно или нет значение параметра P извлекаться из других одного или более значений параметров.
[0123] В другом варианте осуществления, значение параметра P для каждого сегмента в CVS может: i) извлекаться из других одного или более значений параметров в заголовке и/или в наборе параметров в CVS, или ii) передаваться в служебных сигналах для каждого сегмента, и передается в служебных сигналах (например, в наборе параметров в CVS) значение индикатора, которое указывает одно из следующего: i) то, что значение параметра P должно извлекаться, или ii) то, что значение параметра P передается в служебных сигналах в каждом сегменте.
[0124] В другом варианте осуществления, значение параметра P для каждого сегмента в CVS может: i) извлекаться из других одного или более значений параметров в заголовке и/или в наборе параметров в CVS, ii) передаваться в служебных сигналах для каждого сегмента, или iii) включаться в набор параметров в CVS, и передается в служебных сигналах (например, в наборе параметров в CVS) значение индикатора, которое указывает одно из следующего: i) то, что значение параметра P должно извлекаться, ii) то, что значение параметра P передается в служебных сигналах в каждом сегменте, или iii) то, что значение параметра P включается в набор параметров в CVS.
[0125] В другом варианте осуществления, значение параметра P для каждого сегмента в CVS может: i) извлекаться из других одного или более значений параметров в заголовке и/или в наборе параметров в CVS, или ii) включаться в набор параметров в CVS, и передается в служебных сигналах (например, в наборе параметров в CVS) значение индикатора, которое указывает одно из следующего: i) то, что значение параметра P должно извлекаться, или ii) то, что значение параметра P включается в набор параметров в CVS.
[0126] В другом варианте осуществления, набор параметров (например, SPS) предоставляет информацию, указывающую одно из следующего: i) то, что значение параметра P для каждого сегмента должно извлекаться из другого параметра для каждого сегмента, ii) то, что значение параметра P является фиксированным для всех сегментов (например, фиксированно равным значению по умолчанию или передаваемому в служебных сигналах значению), или iii) то, что значение параметра P передается в служебных сигналах для каждого сегмента.
[0127] Например, в сценарии полностью внутреннего кодирования или в сценарии видеоконференц-связи с низкой задержкой, параметр slice_type может извлекаться из типа картинки. Соответственно, значение для параметра slice_type не должно передаваться в служебных сигналах для каждого слайса (т.е. каждый слайс не должен содержать значение для параметра slice_type, поскольку декодер, для каждого слайса, может извлекать корректное значение параметра slice_type).
[0128] В одном варианте осуществления, кодер может выполнять поднабор или все следующие этапы для того, чтобы кодировать один или более картинок в кодированный видеопоток (CVS), причем CVS должен содержать, по меньшей мере, один набор параметров и два или более сегментов.
[0129] Этап 1: Для параметра P, определение того: i) может или нет, для всех сегментов в CVS, значение параметра P извлекаться на основе другого параметра Q (например, извлекаться из Q и нуля или более других параметров), ii) должно или нет значение параметра P должно оставаться постоянным для всех сегментов в CVS, или iii) не должно либо должно значение параметра P оставаться постоянным для всех сегментов в CVS, и не может либо может, для всех сегментов в CVS, извлекаться из одного или более других параметров.
[0130] Этап 2: Включение первого кодового слова (cw1) в набор параметров, причем значение cw1 (иначе, "значение индикатора") зависит от того, что определяется на этапе 1. Таким образом, i) если определяется то, что для всех сегментов в CVS значение параметра P может извлекаться на основе другого параметра Q, то cw1 указывает то, что для всех сегментов в CVS значение параметра P может извлекаться на основе параметра Q; ii) иначе, если определяется то, что значение параметра P должно оставаться постоянным для всех сегментов в CVS, то cw1 указывает то, что это значение параметра P передается в служебных сигналах в наборе параметров; iii) иначе cw1 указывает то, что значение параметра P передается в служебных сигналах для каждого сегмента в CVS.
[0131] Этап 3: Если cw1 указывает то, что значение параметра P передается в служебных сигналах в наборе параметров, то передача в служебных сигналах значения параметра P в наборе параметров. Значение параметра P, например, может передаваться в служебных сигналах в первом кодовом слове вместе со значением индикатора или в третьем кодовом слове в наборе параметров.
[0132] Этап 4: Для каждого сегмента, выполнение этапов 4A и 4B.
[0133] Этап 4A: Если cw1 указывает то, что значение параметра P передается в служебных сигналах в каждом сегменте, то передача в служебных сигналах значения параметра P во втором кодовом слове в сегменте. Второе кодовое слово предпочтительно передается в служебных сигналах в заголовке сегмента.
[0134] Этап 4B: Кодирование данных сегмента для сегмента с использованием значения параметра P.
[0135] Декодер может выполнять поднабор или все следующие этапы для того, чтобы декодировать один или более картинок из кодированного видеопотока (CVS), причем CVS содержит, по меньшей мере, один набор параметров и два или более сегментов.
[0136] Этап 1: Декодирование значения индикатора из первого кодового слова в наборе параметров в CVS. Набор параметров, например, может представлять собой SPS, PPS, DPS, VPS или PHPS.
[0137] Этап 2: Определение из значения индикатора того: i) должно или нет значение параметра P извлекаться на основе параметра Q, ii) указывается или нет значение параметра P в наборе параметров, или iii) указывается или нет значение параметра P посредством второго кодового слова в каждом сегменте CVS.
[0138] Этап 3: Если определяется то, что значение параметра P указывается в наборе параметров, то декодирование значения параметра P из набора параметров. Значение параметра P, например, может извлекаться из первого кодового слова или декодироваться из третьего кодового слова в наборе параметров.
[0139] Этап 4: Если определяется то, что значение параметра P должно извлекаться на основе параметра Q, то определение значения параметра для параметра Q и затем извлечение значения параметра P на основе значения параметра для параметра Q. Например, Pv=f(Qv…), где Pv является значением параметра для параметра P, f является функцией, и Qv является значением параметра для параметра Q. Таким образом, Pv может представлять собой функцию, по меньшей мере, от Qv.
[0140] Этап 5: Для каждого сегмента, выполнение этапов 5A и 5B.
[0141] Этап 5A: Если определяется то, что значение параметра P указывается в каждом сегменте, то декодирование значения параметра P из второго кодового слова в сегменте.
[0142] Этап 5B: Декодирование данных сегмента для сегмента с использованием значения параметра P.
Примеры
[0143]
[0144] Ниже приведены конкретный примерный синтаксис и семантика для SPS и заголовка слайса поверх текущего проекта VVC-спецификации. Следует отметить, что не все параметры, которые выявлены как статические в текущей версии программного обеспечения VTM (5.0), присутствуют в текущей версии проекта VVC-спецификации (JVET-N1001-v7). Некоторые параметры также имеют различные названия в программном обеспечении и спецификации, хотя их интерпретации являются эквивалентными. Например, five_minus_max_num_affine_merge_cand в программном обеспечении VTM 5.0 является эквивалентным five_minus_max_num_subblock_merge_cand в текущем проекте VVC-спецификации. Это предположительно должно совмещаться, после того как VVC-спецификация окончательно оформлена.
Табл. 16
seq_parameter_set_rbsp() {
Дескриптор
sps_decoding_parameter_set_id
u(4)
…
sps_or_slice_flag
u(1)
if(sps_or_slice_flag){
sps_or_slice_dep_quant_enabled_flag
tu(v)
For (i=0, i<2;i++)
sps_or_slice_ref_pic_list_sps_flag[i]
tu(v)
sps_or_slice_temporal_mvp_enabled_flag
tu(v)
sps_or_slice_mvd_l1_zero_flag
tu(v)
sps_or_slice_collocated_from_l0_flag
tu(v)
sps_or_slice_chroma_residual_scale_flag
tu(v)
sps_or_slice_six_minus_max_num_merge_cand
ue(v)
sps_or_slice_five_minus_max_num_subblock_merge_cand
ue(v)
sps_or_slice_max_num_merge_cand_minus_max_num_triangle_cand
ue(v)
}
…
}
[0145] SPS-семантика:
[0146] sps_or_slice_flag, равный 0, указывает то, что значения sps_or_slice_dep_quant_enabled_flag, sps_or_slice_ref_pic_list_sps_flag, sps_or_slice_temporal_mvp_enabled_flag, sps_or_slice_mvd_l1_zero_flag, sps_or_slice_collocated_from_l0_flag, sps_or_slice_six_minus_max_num_merge_cand, sps_or_slice_five_minus_max_num_subblock_merge_cand и sps_or_slice_max_num_merge_cand_minus_max_num_triangle_cand логически выводятся равными 0. sps_or_slice_flag, равный 1, указывает то, что синтаксические элементы sps_or_slice_dep_quant_enabled_flag, sps_or_slice_ref_pic_list_sps_flag, sps_or_slice_temporal_mvp_enabled_flag, sps_or_slice_mvd_l1_zero_flag, sps_or_slice_collocated_from_l0_flag, sps_or_slice_six_minus_max_num_merge_cand, sps_or_slice_five_minus_max_num_subblock_merge_cand и sps_or_slice_max_num_merge_cand_minus_max_num_triangle_cand присутствуют в SPS.
[0147] sps_or_slice_dep_quant_enabled_flag, равный 0, указывает то, что dep_quant_enabled_flag присутствует в заголовках слайсов. sps_or_slice_dep_quant_enabled_flag, больший 0, указывает то, что dep_quant_enabled_flag логически выводится равным sps_or_slice_dep_quant_enabled_flag минус 1. Максимальное значение maxVal усеченного унарного преобразования tu(v) в двоичную форму задается равным 2.
[0148] sps_or_slice_ref_pic_list_sps_flag[i], равный 0, указывает то, что ref_pic_list_sps[i] присутствует в заголовках слайсов. sps_or_slice_ref_pic_list_sps_flag[i], больший 0, указывает то, что ref_pic_list_sps[i] логически выводится равным sps_or_slice_ref_pic_list_sps_flag[i] минус 1. Максимальное значение maxVal усеченного унарного преобразования tu(v) в двоичную форму задается равным 2. (Примечание: общий параметр для всех ref_pic_list_sps[i] также должен быть возможным).
[0149] sps_or_slice_temporal_mvp_enabled_flag, равный 0, указывает то, что slice_temporal_mvp_enabled_flag присутствует в заголовках слайсов для слайсов с slice_type, не равным I в CVS. sps_or_slice_temporal_mvp_enabled_flag, больший 0, указывает то, что slice_temporal_mvp_enabled_flag логически выводится равным sps_or_slice_temporal_mvp_enabled_flag минус 1. Максимальное значение maxVal усеченного унарного преобразования tu(v) в двоичную форму задается равным 2.
[0150] sps_or_slice_mvd_l1_zero_flag, равный 0, указывает то, что mvd_l1_zero_flag присутствует в заголовках слайсов. sps_or_slice_mvd_l1_zero_flag, больший 0, указывает то, что mvd_l1_zero_flag логически выводится равным sps_or_slice_mvd_l1_zero_flag минус 1. Максимальное значение maxVal усеченного унарного преобразования tu(v) в двоичную форму задается равным 2.
[0151] sps_or_slice_collocated_from_l0_flag, равный 0, указывает то, что collocated_from_l0_flag присутствует в заголовках слайсов. sps_or_slice_collocated_from_l0_flag, больший 0, указывает то, что collocated_from_l0_flag логически выводится равным sps_or_slice_collocated_from_l0_flag минус 1. Максимальное значение maxVal усеченного унарного преобразования tu(v) в двоичную форму задается равным 2.
[0152] sps_or_slice_chroma_residual_scale_flag, равный 0, указывает то, что slice_chroma_residual_scale_flag присутствует в заголовках слайсов. sps_or_slice_chroma_residual_scale_flag, больший 0, указывает то, что slice_chroma_residual_scale_flag логически выводится равным sps_or_slice_chroma_residual_scale_flag минус 1. Максимальное значение maxVal усеченного унарного преобразования tu(v) в двоичную форму задается равным 2.
[0153] sps_or_slice_six_minus_max_num_merge_cand, равный 0, указывает то, что six_minus_max_num_merge_cand присутствует в заголовках слайсов. sps_or_slice_six_minus_max_num_merge_cand, больший 0, указывает то, что six_minus_max_num_merge_cand логически выводится равным sps_or_slice_six_minus_max_num_merge_cand минус 1.
[0154] sps_or_slice_five_minus_max_num_subblock_merge_cand, равный 0, указывает то, что five_minus_max_num_subblock_merge_cand присутствует в заголовках слайсов. sps_or_slice_five_minus_max_num_subblock_merge_cand, больший 0, указывает то, что five_minus_max_num_subblock_merge_cand логически выводится равным sps_or_slice_five_minus_max_num_subblock_merge_cand минус 1.
[0155] sps_or_slice_max_num_merge_cand_minus_max_num_triangle_cand, равный 0, указывает то, что max_num_merge_cand_minus_max_num_triangle_cand присутствует в заголовках слайсов. sps_or_slice_max_num_merge_cand_minus_max_num_triangle_cand, больший 0, указывает то, что max_num_merge_cand_minus_max_num_triangle_cand логически выводится равным sps_or_slice_max_num_merge_cand_minus_max_num_triangle_cand минус.
Табл. 17
slice_header() {
Дескриптор
slice_pic_parameter_set_id
ue(v)
if(rect_slice_flag | | NumBricksInPic>1)
slice_address
u(v)
if(!rect_slice_flag andand!single_brick_per_slice_flag)
num_bricks_in_slice_minus1
ue(v)
slice_type
ue(v)
if(NalUnitType==GRA_NUT)
recovery_poc_cnt
se(v)
slice_pic_order_cnt_lsb
u(v)
if(NalUnitType==IDR_W_RADL | | NalUnitType==IDR_N_LP | | NalUnitType==CRA_NUT)
no_output_of_prior_pics_flag
u(1)
if(output_flag_present_flag)
pic_output_flag
u(1)
if((NalUnitType!=IDR_W_RADL andand NalUnitType!=IDR_N_LP) | | sps_idr_rpl_present_flag){
for(i=0; i<2; i++) {
if(num_ref_pic_lists_in_sps[i]>0 andand<u>!sps_or_slice_ref_pic_list_sps_flag[i] andand</u> (i==0 | | (i==1 andand rpl1_idx_present_flag)))
ref_pic_list_sps_flag[i]
u(1)
if(ref_pic_list_sps_flag[i]){
if(num_ref_pic_lists_in_sps[i]>1 andand
(i==0 | | (i==1 andand rpl1_idx_present_flag)))
ref_pic_list_idx[i]
u(v)
}else
ref_pic_list_struct(i, num_ref_pic_lists_in_sps[i])
for(j=0; j<NumLtrpEntries[i][RplsIdx[i]]; j++){
if(ltrp_in_slice_header_flag[i][RplsIdx[i]])
slice_poc_lsb_lt[i][j]
u(v)
delta_poc_msb_present_flag[i][j]
u(1)
if(delta_poc_msb_present_flag[i])
delta_poc_msb_cycle_lt[i][j]
ue(v)
}
}
if((slice_type!=I andand num_ref_entries[0 [RplsIdx[0]]>1) | | (slice_type==B andand num_ref_entries[1][RplsIdx[1]]>1)){
num_ref_idx_active_override_flag
u(1)
if(num_ref_idx_active_override_flag)
for(i=0; i<(slice_type==B? 2: 1); i++)
if(num_ref_entries[i][RplsIdx[i]]>1)
num_ref_idx_active_minus1[i]
ue(v)
}
}
if(partition_constraints_override_enabled_flag){
partition_constraints_override_flag
ue(v)
if(partition_constraints_override_flag){
slice_log2_diff_min_qt_min_cb_luma
ue(v)
slice_max_mtt_hierarchy_depth_luma
ue(v)
if(slice_max_mtt_hierarchy_depth_luma!=0)
slice_log2_diff_max_bt_min_qt_luma
ue(v)
slice_log2_diff_max_tt_min_qt_luma
ue(v)
}
if(slice_type==I andand qtbtt_dual_tree_intra_flag){
slice_log2_diff_min_qt_min_cb_chroma
ue(v)
slice_max_mtt_hierarchy_depth_chroma
ue(v)
if(slice_max_mtt_hierarchy_depth_chroma!=0)
slice_log2_diff_max_bt_min_qt_chroma
ue(v)
slice_log2_diff_max_tt_min_qt_chroma
ue(v)
}
}
}
}
if (slice_type != I) {
if(<u>!</u>sps_or_slice_temporal_mvp_enabled_flag)
slice_temporal_mvp_enabled_flag
u(1)
if(slice_type==B andand !sps_or_slice_mvd_l1_zero_flag)
mvd_l1_zero_flag
u(1)
if(cabac_init_present_flag)
cabac_init_flag
u(1)
if(slice_temporal_mvp_enabled_flag){
if(slice_type==B andand !sps_or_slice_collocated_from_l0_flag)
collocated_from_l0_flag
u(1)
}
if((weighted_pred_flag andand slice_type==P) | | (weighted_bipred_flag andand slice_type==B))
pred_weight_table()
if(!sps_or_slice_six_minus_max_num_merge_cand)
six_minus_max_num_merge_cand
ue(v)
if(sps_affine_enabled_flag andand!sps_or_slice_five_minus_max_num_subblock_merge_cand)
five_minus_max_num_subblock_merge_cand
ue(v)
if(sps_fpel_mmvd_enabled_flag)
slice_fpel_mmvd_enabled_flag
u(1)
if(sps_triangle_enabled_flag andand MaxNumMergeCand>=2 andand !sps_or_slice_max_num_merge_cand_minus_max_num_triangle_cand)
max_num_merge_cand_minus_max_num_triangle_cand
ue(v)
}else if (sps_ibc_enabled_flag andand !sps_or_slice_six_minus_max_num_merge_cand)
six_minus_max_num_merge_cand
ue(v)
slice_qp_delta
se(v)
if(pps_slice_chroma_qp_offsets_present_flag){
slice_cb_qp_offset
se(v)
slice_cr_qp_offset
se(v)
slice_joint_cbcr_qp_offset
se(v)
}
if(sps_sao_enabled_flag){
slice_sao_luma_flag
u(1)
if(ChromaArrayType !=0)
slice_sao_chroma_flag
u(1)
}
if(sps_alf_enabled_flag){
slice_alf_enabled_flag
u(1)
if(slice_alf_enabled_flag){
slice_num_alf_aps_ids_luma
tb(v)
for(i=0; i<slice_num_alf_aps_ids_luma; i++)
slice_alf_aps_id_luma[i]
u(5)
slice_alf_chroma_idc
tu(v)
if(slice_alf_chroma_idc andand (slice_type!=I | | slice_num_alf_aps_ids_luma!=1))
slice_alf_aps_id_chroma
u(5)
}
}
if(!sps_or_slice_dep_quant_enabled_flag)
dep_quant_enabled_flag
u(1)
if(!dep_quant_enabled_flag)
sign_data_hiding_enabled_flag
u(1)
if(deblocking_filter_override_enabled_flag)
deblocking_filter_override_flag
u(1)
if(deblocking_filter_override_flag){
slice_deblocking_filter_disabled_flag
u(1)
if(!slice_deblocking_filter_disabled_flag) {
slice_beta_offset_div2
se(v)
slice_tc_offset_div2
se(v)
}
}
if(sps_lmcs_enabled_flag){
slice_lmcs_enabled_flag
u(1)
if(slice_lmcs_enabled_flag){
slice_lmcs_aps_id
u(5)
if(!(qtbtt_dual_tree_intra_flag andand slice_type==I) andand (!sps_or_slice_chroma_residual_scale_flag))
slice_chroma_residual_scale_flag
u(1)
}
if(entropy_coding_sync_enabled_flag)
num_entry_point_offsets
ue(v)
if(NumEntryPoints>0){
offset_len_minus1
ue(v)
for(i=0; i<NumEntryPoints; i++)
entry_point_offset_minus1[i]
u(v)
}
byte_alignment()
}
[0156] Фиг. 4 является блок-схемой последовательности операций способа, иллюстрирующей процесс 400, который может выполнять декодер согласно одному варианту осуществления. Процесс 400 может начинаться с этапа s402.
[0157] Этап s402 содержит получение (например, прием из кодера или другого сетевого узла или извлечение из хранилища), посредством декодера, первого набора параметров кодированного потока видеобитов.
[0158] Этап s404 содержит определение, посредством декодера, на основе первого кодового слова, включенного в принимаемый первый набор параметров, одного из следующего: i) того, что каждый сегмент, включенный в первый набор сегментов, содержит значение параметра, соответствующее конкретному параметру, ii) того, что набор параметров, включенный в поток битов, содержит значение параметра, соответствующее конкретному параметру (например, набор параметров содержит кодовое слово, из которого может извлекаться параметр), при этом значение параметра может использоваться для того, чтобы декодировать данные сегмента для каждого сегмента, включенного в первый набор сегментов, iii) того, что значение параметра по умолчанию, соответствующее конкретному параметру, должно использоваться для того, чтобы декодировать данные сегмента для каждого сегмента, включенного в первый набор сегментов, или iv) того, что значение параметра, соответствующее конкретному параметру, может извлекаться из одного или более других значений параметров, включенных в поток битов, при этом извлеченное значение параметра может использоваться для того, чтобы декодировать данные сегмента для каждого сегмента, включенного в первый набор сегментов. Таким образом, декодер, на основе первого кодового слова, определяет то, содержит или нет каждый сегмент, включенный в первый набор сегментов, значение параметра, соответствующее конкретному параметру.
[0159] В некоторых вариантах осуществления, на этапе s404, декодер, на основе первого кодового слова, определяет: 1) либо то, что каждый сегмент, включенный в первый набор сегментов, содержит значение параметра, соответствующее конкретному параметру, 2) либо то, что набор параметров, включенный в поток битов, содержит значение параметра, соответствующее конкретному параметру.
[0160] В другом варианте осуществления, на этапе s404, декодер, на основе первого кодового слова, определяет: 1) либо то, что каждый сегмент, включенный в первый набор сегментов, содержит значение параметра, соответствующее конкретному параметру, 2) либо то, что значение параметра по умолчанию, соответствующее конкретному параметру, должно использоваться для того, чтобы декодировать данные сегмента для каждого сегмента, включенного в первый набор сегментов.
[0161] В еще одном другом варианте осуществления, на этапе s404, декодер, на основе первого кодового слова, определяет: 1) либо то, что каждый сегмент, включенный в первый набор сегментов, содержит значение параметра, соответствующее конкретному параметру, 2) либо то, что значение параметра, соответствующее конкретному параметру, может извлекаться из одного или более других значений параметров, включенных в поток битов.
[0162] В некоторых вариантах осуществления, определение (этап s404) содержит, посредством декодера, получение значения индикатора из первого кодового слова, включенного в набор параметров, и определение того, равно или нет полученное значение индикатора определенному значению.
[0163] В некоторых вариантах осуществления, в результате определения, что полученное значение индикатора равно некоторому значению, декодер определяет, что набор параметров, включенный в поток битов, содержит значение параметра, соответствующее конкретному параметру, либо в результате определения, что полученное значение индикатора не равно некоторому значению, декодер определяет, что набор параметров, включенный в поток битов, содержит значение параметра, соответствующее конкретному параметру. В некоторых вариантах осуществления, в результате определения, что набор параметров, включенный в поток битов, содержит значение параметра, соответствующее конкретному параметру, декодер получает значение параметра из набора параметров, который содержит значение параметра. В некоторых вариантах осуществления, набор параметров, который содержит значение параметра, представляет собой первый набор параметров, и значение параметра кодируется в первом кодовом слове, из которого получается значение индикатора, и получение значения параметра содержит извлечение значения параметра из первого кодового слова. В некоторых вариантах осуществления, значение параметра кодируется во втором кодовом слове, которое отличается от первого кодового слова, и получение значения параметра содержит извлечение значения параметра из второго кодового слова. В некоторых вариантах осуществления, процесс 400 дополнительно включает в себя, для каждого сегмента, включенного в первый набор сегментов, использование полученного значения параметра для того, чтобы декодировать данные сегмента для сегмента.
[0164] В некоторых вариантах осуществления, в результате определения, что полученное значение индикатора равно некоторому значению, декодер определяет то, что каждый сегмент, включенный в первый набор сегментов, содержит значение параметра, соответствующее конкретному параметру, либо в результате определения, что полученное значение индикатора не равно некоторому значению, декодер определяет то, что каждый сегмент, включенный в первый набор сегментов, содержит значение параметра, соответствующее конкретному параметру. В некоторых вариантах осуществления, в результате определения, что каждый сегмент, включенный в первый набор сегментов, содержит значение параметра, соответствующее конкретному параметру, декодер выполняет процесс, который включает в себя: для каждого сегмента, включенного в первый набор сегментов, получение из второго кодового слова, включенного в сегмент, значения параметра, соответствующего конкретному параметру, и использование полученного значения параметра для того, чтобы декодировать данные сегмента для сегмента.
[0165] В некоторых вариантах осуществления, каждый сегмент, включенный в первый набор сегментов, включается в различную единицу уровня сетевой абстракции (NAL) в уровне кодирования видео (VCL). В некоторых вариантах осуществления, каждый упомянутый сегмент содержит заголовок сегмента и рабочие данные сегмента. В некоторых вариантах осуществления, сегмент представляет собой слайс, заголовок сегмента представляет собой заголовок слайса, и рабочие данные сегмента содержат данные слайсов.
[0166] В некоторых вариантах осуществления, первый набор параметров включается в часть рабочих данных не-VCL NAL-единицы, включенной в поток битов. В некоторых вариантах осуществления, первый набор параметров представляет собой последовательность набор параметров (SPS), набор параметров картинки (PPS), набор параметров декодера (DPS), набор параметров видео (VPS) или набор параметров заголовка картинки (PHPS). PHPS (который иногда также называется "заголовком картинки"), содержит данные, которые используются для того, чтобы декодировать один картинка. В случае если картинка сегментируется на несколько слайсов, PHPS может использоваться для того, чтобы передавать в служебных сигналах информацию для всех слайсов картинки. Это сокращает число битов по сравнению с альтернативой, в которой информация повторяется в каждом слайсе картинки. PHPS может быть включен в заголовок слайса, но в заголовок, который является допустимым для всех слайсов в картинке. Таким образом, PHPS может представлять собой часть NAL-единицы, которая содержит первый слайс картинки (в этом сценарии, PHPS называется "заголовком картинки"). PHPS также может передаваться в служебных сигналах, вместо этого или помимо этого, в заголовок слайса для первого слайса в картинке. Таким образом, PHPS может передаваться в служебных сигналах в качестве отдельной NAL-единицы, а не в любой NAL-единице слайса.
[0167] В некоторых вариантах осуществления, процесс 400 дополнительно включает в себя, до выполнения этапа определения, декодер получает информацию, указывающую то, что первый набор параметров содержит первое кодовое слово. В некоторых вариантах осуществления, получение информации, указывающей то, что первый набор параметров содержит первое кодовое слово, содержит извлечение информации из второго кодового слова, включенного в первый набор параметров.
[0168] В некоторых вариантах осуществления, конкретный параметр представляет собой 1-битовый параметр.
[0169] В некоторых вариантах осуществления, в результате определения, что значение параметра по умолчанию, соответствующее конкретному параметру, должно использоваться для того, чтобы декодировать данные сегмента для каждого сегмента, включенного в первый набор сегментов, декодер выполняет процесс, который включает в себя: получение значения параметра по умолчанию; и для каждого сегмента, включенного в первый набор сегментов, использование полученного значения параметра по умолчанию для того, чтобы декодировать данные сегмента для сегмента.
[0170] В некоторых вариантах осуществления, в результате определения, что значение параметра, соответствующее конкретному параметру, должно извлекаться из одного или более других значений параметров, включенных в поток битов, декодер выполняет процесс, который включает в себя: извлечение значения параметра, соответствующего конкретному параметру, из одного или более других значений параметров, включенных в поток битов; и для каждого сегмента, включенного в первый набор сегментов, использование извлеченного значения параметра для того, чтобы декодировать данные сегмента для сегмента. В некоторых вариантах осуществления, значение параметра является значением параметра типа слайса, и извлечение значения параметра типа слайса содержит получение значения параметра типа картинки, которое идентифицирует тип картинки, и извлечение значения параметра типа слайса на основе полученного значения параметра типа картинки.
[0171] В некоторых вариантах осуществления, поток битов содержит первую CVS и вторую CVS, первый набор параметров и первый набор сегментов включаются в первую CVS, и второй набор параметров и второй набор сегментов включаются во вторую CVS. В некоторых вариантах осуществления, процесс 400 дополнительно включает в себя прием, посредством декодера, второго набора параметров, включенного во вторую CVS; и на основе кодового слова, включенного в принимаемый второй набор параметров, определение, посредством декодера, одного из следующего: i) того, что каждый сегмент, включенный во второй набор сегментов, содержит значение параметра, соответствующее конкретному параметру, ii) того, что набор параметров, включенный во вторую CVS, содержит значение параметра, соответствующее конкретному параметру, и значение параметра должно использоваться для того, чтобы декодировать данные сегмента для каждого сегмента, включенного во второй набор сегментов, iii) того, что значение параметра по умолчанию, соответствующее конкретному параметру, должно использоваться для того, чтобы декодировать данные сегмента для каждого сегмента, включенного во второй набор сегментов, или iv) того, что значение параметра, соответствующее конкретному параметру, должно извлекаться из одного или более других значений параметров, включенных в CVS, и извлеченное значение параметра должно использоваться для того, чтобы декодировать данные сегмента для каждого сегмента, включенного во второй набор сегментов.
[0172] Фиг. 5 является блок-схемой последовательности операций способа, иллюстрирующей процесс 500, который может выполнять кодер согласно одному варианту осуществления. Процесс 500 может начинаться с этапа s502. Этап s502 содержит формирование, посредством кодера, первого набора сегментов. Этап s504 содержит формирование, посредством кодера, первого набора параметров. Первый набор параметров включает в себя первое кодовое слово, которое указывает одно из следующего: i) то, что каждый сегмент, включенный в первый набор сегментов, содержит значение параметра, соответствующее конкретному параметру, ii) то, что первый набор параметров или второй набор параметров, сформированный посредством кодера, содержит значение параметра, соответствующее конкретному параметру, который использован для того, чтобы кодировать данные сегмента для каждого сегмента, включенного в первый набор сегментов, iii) то, что значение параметра по умолчанию, соответствующее конкретному параметру, использовано для того, чтобы кодировать данные сегмента для каждого сегмента, включенного в первый набор сегментов, или iv) то, что значение параметра, соответствующее конкретному параметру, может извлекаться из одного или более других значений параметров, и то, что извлеченное значение параметра использовано для того, чтобы кодировать данные сегмента для каждого сегмента, включенного в первый набор сегментов.
[0173] В некоторых вариантах осуществления, процесс 500 дополнительно включает в себя, до формирования первого набора параметров, определение того, что значение параметра для конкретного параметра должно оставаться постоянным для каждого сегмента, включенного в первый набор сегментов. В некоторых вариантах осуществления, в результате определения, что значение параметра для конкретного параметра должно оставаться постоянным для каждого сегмента, включенного в первый набор сегментов, кодер формирует первый набор параметров таким образом, что первое кодовое слово указывает то, что: i) набор параметров содержит значение параметра, соответствующее конкретному параметру, ii) значение параметра по умолчанию, соответствующее конкретному параметру, может использоваться для того, чтобы декодировать данные сегмента для каждого сегмента, включенного в первый набор сегментов, или iii) значение параметра, соответствующее конкретному параметру, может извлекаться из одного или более других значений параметров, включенных в поток битов, при этом извлеченное значение параметра может использоваться для того, чтобы декодировать данные сегмента для каждого сегмента, включенного в набор сегментов.
[0174] Фиг. 6 является блок-схемой оборудования 600, согласно некоторым вариантам осуществления, для реализации видеокодера 140 или видеодекодера 260. Как показано на фиг. 6, оборудование 600 может содержать: схему 602 обработки (PC), которая может включать в себя один или более процессоров 655 (P) (например, микропроцессор общего назначения и/или один или более других процессоров, таких как специализированная интегральная схема (ASIC), программируемые пользователем вентильные матрицы (FPGA) и т.п.), причем эти процессоры могут совместно размещаться в одном корпусе или в одном центре обработки и хранения данных либо могут географически распределяться (т.е. оборудование 600 может представлять собой распределенное вычислительное оборудование); сетевой интерфейс 648, содержащий передающее устройство 645 (Tx) и приемное устройство 647 (Rx) для обеспечения возможности оборудованию 600 передавать данные и принимать данные в/из других узлов, соединенных с сетью 110 (например, с сетью по Интернет-протоколу (IP)), с которой соединяется (прямо или косвенно) сетевой интерфейс 648 (например, сетевой интерфейс 648 может соединяться в беспроводном режиме с сетью 110, причем в этом случае сетевой интерфейс 648 соединяется с антенным устройством); и локальный модуль 608 хранения данных (иначе "систему хранения данных"), который может включать в себя одно или более энергонезависимых устройств хранения данных и/или одно или более энергозависимых устройств хранения данных. В вариантах осуществления, в которых PC 602 включает в себя программируемый процессор, может предоставляться компьютерный программный продукт 641 (CPP). CPP 641 включает в себя машиночитаемый носитель 642 (CRM), сохраняющий компьютерную программу 643 (CP), содержащую машиночитаемые инструкции 644 (CRI). CRM 642 может представлять собой энергонезависимый машиночитаемый носитель, такой как магнитные носители (например, жесткий диск), оптические носители, запоминающие устройства (например, оперативное запоминающее устройство, флэш-память) и т.п. В некоторых вариантах осуществления, CRI 644 компьютерной программы 643 имеет такую конфигурацию, в которой при выполнении посредством PC 602, CRI инструктируют оборудованию 600 выполнять этапы, описанные в данном документе (например, этапы, описанные в данном документе со ссылкой на блок-схемы последовательности операций способа). В других вариантах осуществления, оборудование 600 может быть выполнено с возможностью выполнять этапы, описанные в данном документе, без необходимости кода. Таким образом, например, PC 602 может состоять просто из одной или более ASIC. Следовательно, признаки вариантов осуществления, описанных в данном документе, могут реализовываться в аппаратных средствах и/или в программном обеспечении.
[0175] Фиг. 7A иллюстрирует функциональные модули оборудования 701 декодирования видео согласно варианту осуществления.
[0176] Фиг. 7B иллюстрирует функциональные модули оборудования 721 кодирования видео согласно варианту осуществления.
Сущность различных вариантов осуществления
[0177]
[0178] A1. Способ 400, осуществляемый посредством видеодекодера 260, 600, 701 для декодирования потока битов, причем поток битов содержит первый набор параметров и первый набор сегментов, при этом способ содержит: получение первого набора параметров; на основе первого кодового слова, включенного в первый набор параметров, определение, посредством декодера, одного из следующего: i) того, что каждый сегмент, включенный в первый набор сегментов, содержит значение параметра, соответствующее конкретному параметру, ii) того, что набор параметров, включенный в поток битов, содержит значение параметра, соответствующее конкретному параметру, при этом значение параметра может использоваться для того, чтобы декодировать данные сегмента для каждого сегмента, включенного в первый набор сегментов, iii) того, что значение параметра по умолчанию, соответствующее конкретному параметру, должно использоваться для того, чтобы декодировать данные сегмента для каждого сегмента, включенного в первый набор сегментов, или iv) того, что значение параметра, соответствующее конкретному параметру, может извлекаться из одного или более других значений параметров, включенных в поток битов, при этом извлеченное значение параметра может использоваться для того, чтобы декодировать данные сегмента для каждого сегмента, включенного в первый набор сегментов.
[0179] A2. Способ по варианту A1 осуществления, в котором определение содержит, посредством декодера, получение значения индикатора из первого кодового слова, включенного в набор параметров, и определение того, равно или нет полученное значение индикатора некоторому значению.
[0180] A3. Способ по варианту A2 осуществления, в котором в результате определения, что полученное значение индикатора равно некоторому значению, декодер определяет, что набор параметров, включенный в поток битов, содержит значение параметра, соответствующее конкретному параметру, либо в результате определения, что полученное значение индикатора не равно некоторому значению, декодер определяет, что набор параметров, включенный в поток битов, содержит значение параметра, соответствующее конкретному параметру.
[0181] A4. Способ по варианту A3 осуществления, в котором в результате определения, что набор параметров, включенный в поток битов, содержит значение параметра, соответствующее конкретному параметру, декодер получает значение параметра из набора параметров, который содержит значение параметра.
[0182] A5. Способ по варианту A4 осуществления, в котором набор параметров, который содержит значение параметра, представляет собой первый набор параметров.
[0183] A6a1. Способ по любому варианту A4 или A5 осуществления, в котором значение параметра кодируется в первом кодовом слове, из которого получается значение индикатора, и получение значения параметра содержит извлечение значения параметра из первого кодового слова.
[0184] A6a2. Способ по варианту A6a1 осуществления, в котором извлечение значения параметра (PV) из первого кодового слова содержит вычисление: PV=cw-1, при этом cw является значением первого кодового слова.
[0185] A6b. Способ по варианту A4 или A5 осуществления, в котором значение параметра кодируется во втором кодовом слове, которое отличается от первого кодового слова, и получение значения параметра содержит извлечение значения параметра из второго кодового слова.
[0186] A7. Способ по любому из вариантов A4, A5, A6a1, A6a2 и A6b осуществления, дополнительно содержащий: для каждого сегмента, включенного в первый набор сегментов, использование полученного значения параметра для того, чтобы декодировать данные сегмента для сегмента.
[0187] A8. Способ по варианту A2 осуществления, в котором в результате определения, что полученное значение индикатора равно некоторому значению, декодер определяет то, что каждый сегмент, включенный в первый набор сегментов, содержит значение параметра, соответствующее конкретному параметру, либо в результате определения, что полученное значение индикатора не равно некоторому значению, декодер определяет то, что каждый сегмент, включенный в первый набор сегментов, содержит значение параметра, соответствующее конкретному параметру.
[0188] A9. Способ по варианту A8 осуществления, в котором в результате определения, что каждый сегмент, включенный в первый набор сегментов, содержит значение параметра, соответствующее конкретному параметру, декодер выполняет процесс, который включает в себя: для каждого сегмента, включенного в первый набор сегментов, получение из второго кодового слова, включенного в сегмент, значения параметра, соответствующего конкретному параметру, и использование полученного значения параметра для того, чтобы декодировать данные сегмента для сегмента.
[0189] A10. Способ по любому из предыдущих вариантов осуществления, в котором каждый сегмент, включенный в первый набор сегментов, включается в различную единицу уровня сетевой абстракции (NAL) в уровне кодирования видео (VCL).
[0190] A11. Способ по варианту A10 осуществления, в котором каждый упомянутый сегмент содержит заголовок сегмента и рабочие данные сегмента.
[0191] A12. Способ по варианту A11 осуществления, в котором сегмент представляет собой слайс, заголовок сегмента представляет собой заголовок слайса, и рабочие данные сегмента содержат данные слайсов.
[0192] A13. Способ по любому из предыдущих вариантов осуществления, в котором первый набор параметров включается в часть рабочих данных не-VCL NAL-единицы, включенной в поток битов.
[0193] A13b. Способ по варианту A13 осуществления, в котором первый набор параметров представляет собой набор параметров последовательности (SPS), набор параметров картинки (PPS), набор параметров декодера (DPS), набор параметров видео (VPS) или набор параметров заголовка картинки (PHPS).
[0194] A14. Способ по любому из предыдущих вариантов осуществления, дополнительно содержащий: до выполнения этапа определения, декодер получает информацию, указывающую то, что первый набор параметров содержит первое кодовое слово.
[0195] A15a. Способ по варианту A14 осуществления, в котором получение информации, указывающей то, что первый набор параметров содержит первое кодовое слово, содержит извлечение информации из второго кодового слова, включенного в первый набор параметров.
[0196] A15b. Способ по варианту A14 осуществления, в котором второе кодовое слово состоит из одного бита.
[0197] A15c. Способ по любому из вариантов A14 A15a и A15b осуществления, в котором информация, указывающая то, что первый набор параметров содержит первое кодовое слово дополнительно указывает то, что первый набор параметров дополнительно содержит третье кодовое слово, соответствующее второму конкретному параметру, и способ дополнительно содержит определение, посредством декодера, на основе третьего кодового слова, того, содержит или нет каждый сегмент, включенный в первый набор сегментов, значение параметра, соответствующее второму конкретному параметру.
[0198] A16. Способ по любому из предыдущих вариантов осуществления, в котором конкретный параметр представляет собой 1-битовый параметр.
[0199] A17. Способ по любому из вариантов A1 или A2 осуществления, в котором в результате определения, что значение параметра по умолчанию, соответствующее конкретному параметру, должно использоваться для того, чтобы декодировать данные сегмента для каждого сегмента, включенного в первый набор сегментов, декодер выполняет процесс, который включает в себя: получение значения параметра по умолчанию; и для каждого сегмента, включенного в первый набор сегментов, использование полученного значения параметра по умолчанию для того, чтобы декодировать данные сегмента для сегмента.
[0200] A18. Способ по любому из вариантов A1 или A2 осуществления, в котором в результате определения, что значение параметра, соответствующее конкретному параметру, должно извлекаться из одного или более других значений параметров, включенных в поток битов, декодер выполняет процесс, который включает в себя: извлечение значения параметра, соответствующего конкретному параметру, из одного или более других значений параметров, включенных в поток битов; и для каждого сегмента, включенного в первый набор сегментов, использование извлеченного значения параметра для того, чтобы декодировать данные сегмента для сегмента.
[0201] A19. Способ по варианту A18 осуществления, в котором значение параметра является значением параметра типа слайса, и извлечение значения параметра типа слайса содержит получение значения параметра типа картинки, которое идентифицирует тип картинки, и извлечение значения параметра типа слайса на основе полученного значения параметра типа картинки.
[0202] A20. Способ по любому из предыдущих вариантов осуществления, в котором поток битов содержит первую кодированную видеопоследовательность (CVS) и вторую CVS; первый набор параметров и первый набор сегментов включаются в первую CVS, и второй набор параметров и второй набор сегментов включаются во вторую CVS.
[0203] A21. Способ по варианту A20 осуществления, дополнительно содержащий прием, посредством декодера, второго набора параметров, включенного во вторую CVS; и на основе кодового слова, включенного в принимаемый второй набор параметров, определение, посредством декодера, одного из следующего: i) того, что каждый сегмент, включенный во второй набор сегментов, содержит значение параметра, соответствующее конкретному параметру, ii) того, что набор параметров, включенный во вторую CVS, содержит значение параметра, соответствующее конкретному параметру, и значение параметра должно использоваться для того, чтобы декодировать данные сегмента для каждого сегмента, включенного во второй набор сегментов, iii) того, что значение параметра по умолчанию, соответствующее конкретному параметру, должно использоваться для того, чтобы декодировать данные сегмента для каждого сегмента, включенного во второй набор сегментов, или iv) того, что значение параметра, соответствующее конкретному параметру, должно извлекаться из одного или более других значений параметров, включенных в CVS, и извлеченное значение параметра должно использоваться для того, чтобы декодировать данные сегмента для каждого сегмента, включенного во второй набор сегментов.
[0204] A22. Способ по варианту A1 осуществления, в котором этап определения содержит: i) либо определение того, что каждый сегмент, включенный в первый набор сегментов, содержит значение параметра, соответствующее конкретному параметру, ii) либо определение того, что набор параметров, включенный в поток битов, содержит значение параметра, соответствующее конкретному параметру, при этом значение параметра может использоваться для того, чтобы декодировать данные сегмента для каждого сегмента, включенного в первый набор сегментов.
[0205] A23. Способ по варианту A1 осуществления, в котором этап определения содержит: i) либо определение того, что каждый сегмент, включенный в первый набор сегментов, содержит значение параметра, соответствующее конкретному параметру, ii) либо определение того, что значение параметра по умолчанию, соответствующее конкретному параметру, должно использоваться для того, чтобы декодировать данные сегмента для каждого сегмента, включенного в первый набор сегментов.
[0206] A24. Способ по варианту A1 осуществления, в котором этап определения содержит: i) либо определение того, что каждый сегмент, включенный в первый набор сегментов, содержит значение параметра, соответствующее конкретному параметру, ii) либо определение того, что значение параметра, соответствующее конкретному параметру, может извлекаться из одного или более других значений параметров, включенных в поток битов.
[0207] B1. Способ (500), осуществляемый посредством видеокодера (140, 600, 721), при этом способ содержит формирование первого набора сегментов; и формирование первого набора параметров, при этом первый набор параметров включает в себя первое кодовое слово, которое указывает одно из следующего: i) то, что каждый сегмент, включенный в первый набор сегментов, содержит значение параметра, соответствующее конкретному параметру, ii) то, что первый набор параметров или второй набор параметров, сформированный посредством кодера, содержит значение параметра, соответствующее конкретному параметру, который использован для того, чтобы кодировать данные сегмента для каждого сегмента, включенного в первый набор сегментов, iii) то, что значение параметра по умолчанию, соответствующее конкретному параметру, использовано для того, чтобы кодировать данные сегмента для каждого сегмента, включенного в первый набор сегментов, или iv) то, что значение параметра, соответствующее конкретному параметру, может извлекаться из одного или более других значений параметров, и то, что извлеченное значение параметра использовано для того, чтобы кодировать данные сегмента для каждого сегмента, включенного в первый набор сегментов.
[0208] B2. Способ по варианту B1 осуществления, дополнительно содержащий: до формирования первого набора параметров, определение того, что значение параметра для конкретного параметра должно оставаться постоянным для каждого сегмента, включенного в первый набор сегментов.
[0209] B3. Способ по варианту B2 осуществления, в котором в результате определения, что значение параметра для конкретного параметра должно оставаться постоянным для каждого сегмента, включенного в первый набор сегментов, кодер формирует первый набор параметров таким образом, что первое кодовое слово указывает то, что: i) набор параметров содержит значение параметра, соответствующее конкретному параметру, при этом значение параметра может использоваться для того, чтобы декодировать данные сегмента для каждого сегмента, включенного в набор сегментов, ii) значение параметра по умолчанию, соответствующее конкретному параметру, может использоваться для того, чтобы декодировать данные сегмента для каждого сегмента, включенного в первый набор сегментов, или iii) значение параметра, соответствующее конкретному параметру, может извлекаться из одного или более других значений параметров, включенных в поток битов, при этом извлеченное значение параметра может использоваться для того, чтобы декодировать данные сегмента для каждого сегмента, включенного в набор сегментов.
[0210] C1. Способ 400, осуществляемый посредством декодера 260, 600, 701 для декодирования потока битов, причем поток битов содержит набор параметров картинки (PPS) и первый набор слайсов, при этом способ содержит: получение (s402) набора параметров картинки; и декодирование синтаксического элемента, включенного в набор параметров картинки, чтобы получать значение индикатора (например, флаг), при этом декодер имеет такую конфигурацию, в которой если значение индикатора задается равным первому значению, то определяется то, что заголовок картинки, включенный в поток битов, содержит значение параметра, соответствующее конкретному параметру, при этом значение параметра может использоваться для того, чтобы декодировать данные слайсов для каждого слайса, включенного в первый набор слайсов, иначе определяется то, что каждый слайс, включенный в первый набор слайсов, содержит значение параметра, соответствующее конкретному параметру.
[0211] C2. Способ 500, осуществляемый посредством кодера 140, 600, 721, при этом способ содержит формирование (s502) первого набора слайсов; и формирование (s504) набора параметров картинки, при этом набор параметров картинки включает в себя первое кодовое слово, которое задается равным первому значению или второму значению, когда первое кодовое слово задается равным первому значению, то первое кодовое слово указывает то, что заголовок картинки, сформированный посредством кодера, содержит значение параметра, соответствующее конкретному параметру, который использован для того, чтобы кодировать данные слайсов для каждого слайса, включенного в первый набор слайсов, и когда первое кодовое слово задается равным второму значению, то первое кодовое слово указывает то, что каждый слайс, включенный в первый набор слайсов, содержит значение параметра, соответствующее конкретному параметру.
[0212] D1. Видеодекодер (260, 600, 701), причем видеодекодер выполнен с возможностью: получать первый набор параметров, включенный в кодированный поток битов видео, при этом поток битов также включает в себя первый набор сегментов; и на основе первого кодового слова, включенного в первый набор параметров, определять одно из следующего: i) то, что каждый сегмент, включенный в первый набор сегментов, содержит значение параметра, соответствующее конкретному параметру, ii) то, что первый параметр или второй набор параметров, включенный в поток битов, содержит значение параметра, соответствующее конкретному параметру, при этом значение параметра может использоваться для того, чтобы декодировать данные сегмента для каждого сегмента, включенного в первый набор сегментов, iii) то, что значение параметра по умолчанию, соответствующее конкретному параметру, должно использоваться для того, чтобы декодировать данные сегмента для каждого сегмента, включенного в первый набор сегментов, или iv) то, что значение параметра, соответствующее конкретному параметру, может извлекаться из одного или более других значений параметров, включенных в поток битов, при этом извлеченное значение параметра может использоваться для того, чтобы декодировать данные сегмента для каждого сегмента, включенного в первый набор сегментов.
[0213] E1. Видеодекодер (701), причем видеодекодер содержит: модуль (702) получения, выполненный с возможностью получать первый набор параметров, включенный в кодированный поток битов видео, при этом поток битов также включает в себя первый набор сегментов; и модуль (704) определения, выполненный с возможностью определять, на основе первого кодового слова, включенного в первый набор параметров, одно из следующего: i) то, что каждый сегмент, включенный в первый набор сегментов, содержит значение параметра, соответствующее конкретному параметру, ii) то, что первый параметр или второй набор параметров, включенный в поток битов, содержит значение параметра, соответствующее конкретному параметру, при этом значение параметра может использоваться для того, чтобы декодировать данные сегмента для каждого сегмента, включенного в первый набор сегментов, iii) то, что значение параметра по умолчанию, соответствующее конкретному параметру, должно использоваться для того, чтобы декодировать данные сегмента для каждого сегмента, включенного в первый набор сегментов, или iv) то, что значение параметра, соответствующее конкретному параметру, может извлекаться из одного или более других значений параметров, включенных в поток битов, при этом извлеченное значение параметра может использоваться для того, чтобы декодировать данные сегмента для каждого сегмента, включенного в первый набор сегментов.
[0214] F1. Видеокодер (140, 600, 721), причем видеокодер выполнен с возможностью: формировать первый набор сегментов; и формировать первый набор параметров, при этом первый набор параметров включает в себя первое кодовое слово, которое указывает одно из следующего: i) то, что каждый сегмент, включенный в первый набор сегментов, содержит значение параметра, соответствующее конкретному параметру, ii) то, что первый набор параметров или второй набор параметров, сформированный посредством кодера, содержит значение параметра, соответствующее конкретному параметру, который использован для того, чтобы кодировать данные сегмента для каждого сегмента, включенного в первый набор сегментов, iii) то, что значение параметра по умолчанию, соответствующее конкретному параметру, использовано для того, чтобы кодировать данные сегмента для каждого сегмента, включенного в первый набор сегментов, или iv) то, что значение параметра, соответствующее конкретному параметру, может извлекаться из одного или более других значений параметров, и то, что извлеченное значение параметра использовано для того, чтобы кодировать данные сегмента для каждого сегмента, включенного в первый набор сегментов.
[0215] G1. Видеокодер (721), причем видеокодер содержит: модуль (722) формирования сегментов, выполненный с возможностью формировать первый набор сегментов; и модуль (724) формирования наборов параметров, формирующий первый набор параметров, при этом первый набор параметров включает в себя первое кодовое слово, которое указывает одно из следующего: i) то, что каждый сегмент, включенный в первый набор сегментов, содержит значение параметра, соответствующее конкретному параметру, ii) то, что первый набор параметров или второй набор параметров, сформированный посредством кодера, содержит значение параметра, соответствующее конкретному параметру, который использован для того, чтобы кодировать данные сегмента для каждого сегмента, включенного в первый набор сегментов, iii) то, что значение параметра по умолчанию, соответствующее конкретному параметру, использовано для того, чтобы кодировать данные сегмента для каждого сегмента, включенного в первый набор сегментов, или iv) то, что значение параметра, соответствующее конкретному параметру, может извлекаться из одного или более других значений параметров, и то, что извлеченное значение параметра использовано для того, чтобы кодировать данные сегмента для каждого сегмента, включенного в первый набор сегментов.
[0216] H1. Компьютерная программа (643), содержащая инструкции (644), которые, при выполнении посредством схемы (602) обработки, инструктируют схеме (602) обработки осуществлять способ по любому из вышеуказанных вариантов A1-A24, B1-B3, C1-C2 осуществления.
[0217] H2. Носитель, содержащий компьютерную программу по варианту H1 осуществления, при этом носитель представляет собой одно из электронного сигнала, оптического сигнала, радиосигнала или машиночитаемого носителя (642) хранения данных.
Преимущества
[0218]
[0219] Как отмечено в разделе "Сущность изобретения", преимущество вышеуказанных описанных вариантов осуществления состоит в том, что для каждого параметра, который остается постоянным, по меньшей мере, в части потока битов (например, в CVS), нет необходимости передавать в служебных сигналах значение параметра для параметра на уровне сегмента (например, слайса), что сокращает число битов и повышает общую эффективность сжатия.
[0220] Согласно предыдущему примеру из CTC, можно в среднем добиваться сокращения на 16,5, 7,9, 12,8 и 7,8 битов в расчете на слайс для каждой из AI-, RA-, LDB- и LDP-конфигураций для VTM 5.0, как показано в нижеприведенной таблице.
Табл. 18. Оцененное среднее число битов, сокращенных в расчете на слайс
Параметр слайса
Среднее число битов, сокращенных в расчете на слайс
AI
RA
LDB
LDP
no_output_of_prior_pics_flag
1
slice_sao_luma_flag
1
slice_sao_chroma_flag
1
tile_group_alf_enabled_flag
1
dep_quant_enabled_flag
1
1
1
1
partition_constrainst_override_flag
1
slice_loop_filter_across_slices_enabled_flag<sup>1)</sup>
1
1
1
1
short_term_ref_pic_set_sps_flag<sup>2)</sup>
0,99
1
1
inter_ref_pic_set_prediction_flag
0,99
slice_temporal_mvp_enabled_flag
1
1
mvd_l1_zero_flag
1
collocated_from_l0_flag
1
num_negative_pics
0,99
num_positive_pics
0,99
reshaper_model_delta_max_bin_idx
2,39
slice_reshaper_ChromaAdj<sup>3)</sup>
0,79
0,79
six_minus_max_num_merge_cand
0,16
0,98
1
1
five_minus_max_num_affine_merge_cand<sup>4)</sup>
0,98
1
1
max_num_merge_cand_minus_max_num_triangle_cand
2,93
3
collocated_ref_idx<sup>5)</sup>
0,96
1
1
slice_type
3
Всего
16,5
7,9
12,8
2,8
[0221] Примечания: 1) slice_loop_filter_across_slices_enabled_flag не составляет часть спецификации VVC 5.0 v7 (этот флаг перемещен в PPS); 2) short_term_ref_pic_set_sps_flag не составляет часть спецификации VVC 5.0 v7 (flags_ref_pic_list_sps_flag[i] должен быть эквивалентным; 3) slice_reshaper_ChromaAdj не составляет часть спецификации VVC 5.0 v7 (slice_chroma_residual_scale_flag, должен быть эквивалентным); 4) five_minus_max_num_affine_merge_cand не составляет часть спецификации VVC 5.0 v7 (этот параметр должен быть эквивалентным five_minus_max_num_subblock_merge_cand); и 5) collocated_ref_idx не составляет часть спецификации VVC 5.0 v7 (кажется, эквивалентный параметр отсутствует).
Сокращения
[0222]
[0223] ALF - адаптивный контурный фильтр
[0224] APS - набор параметров адаптации
[0225] AUD - разделитель единиц доступа
[0226] BLA - доступ с разорванной связью
[0227] CRA - чистый произвольный доступ
[0228] CVS - кодированная видеопоследовательность
[0229] CVSS - начальный CVS
[0230] CU - единица кодирования
[0231] DPS - набор параметров декодера
[0232] GRA - постепенный произвольный доступ
[0233] HEVC - стандарт высокоэффективного кодирования видео
[0234] IDR - мгновенное обновление при декодировании
[0235] IRAP - внутренняя точка произвольного доступа
[0236] JVET - объединенная исследовательская группа по видеостандартам
[0237] LMCS - преобразование сигнала яркости и масштабирование сигнала цветности
[0238] MPEG - Экспертная группа по киноизображению
[0239] NAL - уровень сетевой абстракции
[0240] PES - пакетизированный элементарный поток
[0241] PPS - набор параметров картинки
[0242] RADL - опережающий декодируемый с произвольным доступом (RADL)
[0243] RASL - опережающий пропускаемый с произвольным доступом (RADL)
[0244] SPS - набор параметров последовательности
[0245] STSA - пошаговый доступ к временному подуровню
[0246] TSA - доступ к временному подуровню
[0247] VCL - уровень кодирования видео
[0248] VPS - набор параметров видео
[0249] VVC - универсальное кодирование видео
[0250] SEI - дополнительный улучшающий уровень
Доклад (Эта часть раскрытия сущности содержит релевантные части доклада, которые могут вноситься на рассмотрение)
[0251]
[0252] -- Начало проекта доклада --
[0253] Название: Параметры в SPS или заголовках слайсов
[0254] Статус: Входной документ в JVET
[0255] Цель: Предложение
Сущность изобретения
[0256]
[0257] Некоторые параметры слайса в VVC остаются постоянными для всех слайсов в потоке битов для некоторых CTC-конфигураций. Этот доклад предлагает механизм для того, чтобы обеспечивать передачу в служебных сигналах некоторых параметров слайса в VVC либо в SPS, либо для каждого слайса.
[0258] Более конкретно, следующие изменения VVC предлагаются в этом докладе:
[0259] (1) Передача в служебных сигналах sps_or_slice_flag в SPS, который указывает то, могут или нет значения ниже перечисленных синтаксических элементов условно передаваться в служебных сигналах в SPS или заголовках слайсов, либо то, если они всегда передаются в служебных сигналах в заголовках слайсов.
a. dep_quant_enabled_flag,
b. ref_pic_list_sps_flag,
c. slice_temporal_mvp_enabled_flag,
d. mvd_l1_zero_flag,
e. collocated_from_l0_flag,
f. six_minus_max_num_merge_cand,
g. five_minus_max_num_subblock_merge_cand,
h. max_num_merge_cand_minus_max_num_triangle_cand.
[0260] (2) Если sps_or_slice_flag равен 1, то для каждого из вышеуказанных синтаксических элементов, передача в служебных сигналах соответствующего параметра в SPS. Если соответствующее значение параметра равно 0, то соответствующий синтаксический элемент передается в служебных сигналах в заголовке слайса. Иначе значение для соответствующего синтаксического элемента заголовков слайсов извлекается в качестве значения SPS-параметра минус 1.
[0261] Сообщается, что значения BD-коэффициента сигнала яркости для CTC составляют 0,0%/0,0%/-0,1%/0,0% для AI/RA/LDB/LDP, соответственно, и сторонники заявляют большее сокращение, когда используются несколько слайсов в расчете на картинка.
Введение
[0262]
[0263] Обнаружено, что некоторые параметры в заголовке слайса остаются постоянными для всех заголовков слайсов во всех тестовых последовательностях CTC. Нижеприведенная таблица показывает в каких CTC-конфигурациях с использованием VTM 5.0 некоторые параметры остаются постоянными для всех заголовков слайсов во всех тестовых последовательностях.
Табл. 19. Параметры слайса, которые остаются постоянными для каждой CTC-конфигурации с использованием VTM 5.0
Название параметра слайса
Постоянный в:
AI
RA
LDB
LDP
dep_quant_enabled_flag
x
x
x
x
short_term_ref_pic_set_sps_flag
x
x
x
slice_temporal_mvp_enabled_flag
x
x
mvd_l1_zero_flag
x
collocated_from_l0_flag
x
six_minus_max_num_merge_cand
x
x
x
x
five_minus_max_num_affine_merge_cand
x
x
x
max_num_merge_cand_minus_max_num_triangle_cand
x
x
[0264] Следует отметить, что несколько названий параметров слайса отличаются между VTM 5.0 и проектом VVC-спецификации, JVET-N1001-v8. В силу этого предлагается изменять название short_term_ref_pic_set_sps_flag и five_minus_max_num_affine_merge_cand на ref_pic_list_sps[0, ref_pic_list_sps[1] и five_minus_max_num_subblock_merge_cand в программном обеспечении VTM.
Предложение
[0265]
[0266] Отправка параметров в заголовке слайса, которые остаются постоянными для всех заголовков слайсов в потоке битов, является избыточной. Следовательно, предлагается механизм для того, чтобы обеспечивать передачу в служебных сигналах некоторых параметров слайса либо в SPS, либо для каждого слайса.
[0267] Более конкретно, следующие изменения VVC предлагаются в этом докладе:
[0268] (1) Передача в служебных сигналах sps_or_slice_flag в SPS, который указывает то, могут или нет значения ниже перечисленных синтаксических элементов условно передаваться в служебных сигналах в SPS или заголовках слайсов, либо то, если они всегда передаются в служебных сигналах в заголовках слайсов.
a. dep_quant_enabled_flag,
b. ref_pic_list_sps_flag,
c. slice_temporal_mvp_enabled_flag,
d. mvd_l1_zero_flag,
e. collocated_from_l0_flag,
f. six_minus_max_num_merge_cand,
g. five_minus_max_num_subblock_merge_cand,
h. max_num_merge_cand_minus_max_num_triangle_cand.
[0269] Если sps_or_slice_flag равен 1, то для каждого из вышеуказанных синтаксических элементов, передача в служебных сигналах соответствующего параметра в SPS.
[0270] Если значение параметра равно 0, то синтаксический элемент передается в служебных сигналах для каждого заголовка слайса. Иначе значение для синтаксического элемента извлекается в качестве значения параметра минус 1.
Предложенные изменения VVC-спецификации
[0271]
[0272] Демонстрируются предложенные изменения поверх VVC-проекта (JVET-N1001-v8).
seq_parameter_set_rbsp() {
Дескриптор
…
<u> sps_or_slice_flag</u>
<u>u(1)</u>
<u> if(sps_or_slice_flag){</u>
<u> sps_or_slice_dep_quant_enabled_flag</u>
<u>tu(v)</u>
<u> for(i=0; i<2; i++)</u>
<u> sps_or_slice_ref_pic_list_sps_flag[i]</u>
<u>tu(v)</u>
sps_<u>or_slice_</u>temporal_mvp_enabled_flag
<u>t</u>u(<u>v</u>)
<u> sps_or_slice_mvd_l1_zero_flag</u>
<u>tu(v)</u>
<u> sps_or_slice_collocated_from_l0_flag</u>
<u>tu(v)</u>
<u> sps_or_slice_six_minus_max_num_merge_cand</u>
<u>ue(v)</u>
<u> sps_or_slice_five_minus_max_num_subblock_merge_cand</u>
<u>ue(v)</u>
<u> sps_or_slice_max_num_merge_cand_minus_max_num_triangle_cand</u>
<u>ue(v)</u>
<u> }</u>
if(sps_or_slice_temporal_mvp_enabled_flag<u>!=1</u>)
sps_sbtmvp_enabled_flag
u(1)
…
}
[0273] sps_or_slice_flag, равный 0, указывает то, что sps_or_slice_dep_quant_enabled_flag, sps_or_slice_ref_pic_list_sps_flag, sps_or_slice_temporal_mvp_enabled_flag, sps_or_slice_mvd_l1_zero_flag, sps_or_slice_collocated_from_l0_flag, sps_or_slice_six_minus_max_num_merge_cand, sps_or_slice_five_minus_max_num_subblock_merge_cand и sps_or_slice_max_num_merge_cand_minus_max_num_triangle_cand логически выводятся равными 0. sps_or_slice_flag, равный 1, указывает то, что эти синтаксические элементы присутствуют в SPS.
[0274] sps_or_slice_dep_quant_enabled_flag, равный 0, указывает то, что dep_quant_enabled_flag присутствует в заголовках слайсов. sps_or_slice_dep_quant_enabled_flag, больший 0, указывает то, что dep_quant_enabled_flag логически выводится равным sps_or_slice_dep_quant_enabled_flag минус 1. Максимальное значение maxVal усеченного унарного преобразования tu(v) в двоичную форму задается равным 2.
[0275] sps_or_slice_ref_pic_list_sps_flag[i], равный 0, указывает то, что ref_pic_list_sps[i] присутствует в заголовках слайсов. sps_or_slice_ref_pic_list_sps_flag[i], больший 0, указывает то, что ref_pic_list_sps[i] логически выводится равным sps_or_slice_ref_pic_list_sps_flag[i] минус 1. Максимальное значение maxVal усеченного унарного преобразования tu(v) в двоичную форму задается равным 2.
[0276] sps_or_slice_temporal_mvp_enabled_flag, равный 0, указывает то, что slice_temporal_mvp_enabled_flag присутствует в заголовках слайсов для слайсов с slice_type, не равным I в CVS. sps_or_slice_temporal_mvp_enabled_flag, больший 0, указывает то, что slice_temporal_mvp_enabled_flag логически выводится равным sps_or_slice_temporal_mvp_enabled_flag минус 1. Максимальное значение maxVal усеченного унарного преобразования tu(v) в двоичную форму задается равным 2.
[0277] sps_or_slice_mvd_l1_zero_flag, равный 0, указывает то, что mvd_l1_zero_flag присутствует в заголовках слайсов. sps_or_slice_mvd_l1_zero_flag, больший 0, указывает то, что mvd_l1_zero_flag логически выводится равным sps_or_slice_mvd_l1_zero_flag минус 1. Максимальное значение maxVal усеченного унарного преобразования tu(v) в двоичную форму задается равным 2.
[0278] sps_or_slice_collocated_from_l0_flag, равный 0, указывает то, что collocated_from_l0_flag присутствует в заголовках слайсов. sps_or_slice_collocated_from_l0_flag, больший 0, указывает то, что collocated_from_l0_flag логически выводится равным sps_or_slice_collocated_from_l0_flag минус 1. Максимальное значение maxVal усеченного унарного преобразования tu(v) в двоичную форму задается равным 2.
[0279] sps_or_slice_six_minus_max_num_merge_cand, равный 0, указывает то, что six_minus_max_num_merge_cand присутствует в заголовках слайсов. sps_or_slice_six_minus_max_num_merge_cand, больший 0, указывает то, что six_minus_max_num_merge_cand логически выводится равным sps_or_slice_six_minus_max_num_merge_cand минус 1. Значение sps_or_slice_six_minus_max_num_merge_cand должно составлять в диапазоне 0-6, включительно.
[0280] sps_or_slice_five_minus_max_num_subblock_merge_cand, равный 0, указывает то, что five_minus_max_num_subblock_merge_cand присутствует в заголовках слайсов. sps_or_slice_five_minus_max_num_subblock_merge_cand, больший 0, указывает то, что five_minus_max_num_subblock_merge_cand логически выводится равным sps_or_slice_five_minus_max_num_subblock_merge_cand минус 1. Значение sps_or_slice_five_minus_max_num_subblock_merge_cand должно составлять в диапазоне 0-6, включительно.
[0281] sps_or_slice_max_num_merge_cand_minus_max_num_triangle_cand, равный 0, указывает то, что max_num_merge_cand_minus_max_num_triangle_cand присутствует в заголовках слайсов. sps_or_slice_max_num_merge_cand_minus_max_num_triangle_cand, больший 0, указывает то, что max_num_merge_cand_minus_max_num_triangle_cand логически выводится равным sps_or_slice_max_num_merge_cand_minus_max_num_triangle_cand минус 1. Значение sps_or_slice_max_num_merge_cand_minus_max_num_triangle_cand должно составлять в диапазоне 0 в MaxNumMergeCand-1.
slice_header() {
Дескриптор
…
if((NalUnitType!=IDR_W_RADL andand NalUnitType!=IDR_N_LP) | | sps_idr_rpl_present_flag){
for(i=0; i<2; i++) {
if(num_ref_pic_lists_in_sps[i]>0 andand<u>!sps_or_slice_ref_pic_list_sps_flag[i] andand </u> (i==0 | | (i==1 andand rpl1_idx_present_flag)))
ref_pic_list_sps_flag[i]
u(1)
…
if(slice_type !=I)
if(<u>!</u>sps_or_slice_temporal_mvp_enabled_flag)
slice_temporal_mvp_enabled_flag
u(1)
if(slice_type==B <u>andand!sps_or_slice_mvd_l1_zero_flag</u>)
mvd_l1_zero_flag
u(1)
…
if(slice_temporal_mvp_enabled_flag){
if(slice_type==B <u>andand!sps_or_slice_collocated_from_l0_flag</u>)
collocated_from_l0_flag
u(1)
}
…
<u> if(!sps_or_slice_six_minus_max_num_merge_cand)</u>
six_minus_max_num_merge_cand
ue(v)
if(sps_affine_enabled_flag <u>andand</u><u>!sps_or_slice_five_minus_max_num_subblock_merge_cand</u>)
five_minus_max_num_subblock_merge_cand
ue(v)
…
if(sps_triangle_enabled_flag andand MaxNumMergeCand>=2 <u>andand!sps_or_slice_max_num_merge_cand_minus_max_num_triangle_cand</u>)
max_num_merge_cand_minus_max_num_triangle_cand
ue(v)
}else if (sps_ibc_enabled_flag <u>andand !sps_or_slice_six_minus_max_num_merge_cand</u>)
six_minus_max_num_merge_cand
ue(v)
…
<u> if(!sps_or_slice_dep_quant_enabled_flag)</u>
dep_quant_enabled_flag
u(1)
…
byte_alignment()
}
Результаты
[0282]
[0283] Ниже показывается сокращение скорости передачи битов для CTC с использованием VTM-5.0. Для AI, sps_or_slice_flag задается равным 0, поскольку SPS отправляется для каждого картинки. Следует отметить, что отсутствует шум в этих значениях BD-коэффициента, поскольку усиления обусловлены не изменением по качеству, а просто сокращением числа битов в силу передачи в служебных сигналах постоянных параметров в SPS, а не в заголовках слайсов. Для последовательности Джонни в LDB, BD-коэффициент составляет -0,37%.
Главный профиль 10, полностью внутренний
По сравнению с VTM-5.0
Y
U
V
EncT
DecT
Класс A1
0,00%
0,00%
0,00%
98%
98%
Класс A2
0,00%
0,00%
0,00%
99%
100%
Класс B
0,00%
0,00%
0,00%
98%
99%
Класс C
0,00%
0,00%
0,00%
105%
102%
Класс E
0,00%
0,00%
0,00%
94%
95%
В целом
0,00%
0,00%
0,00%
99%
99%
Класс D
0,00%
0,00%
0,00%
98%
100%
Класс F
0,00%
0,00%
0,00%
100%
100%
Главный профиль 10, произвольный доступ
По сравнению с VTM-5.0
Y
U
V
EncT
DecT
Класс A1
0,00%
0,00%
0,00%
100%
98%
Класс A2
0,00%
0,00%
0,00%
100%
98%
Класс B
-0,01%
-0,01%
-0,01%
99%
97%
Класс C
-0,02%
-0,02%
-0,02%
99%
91%
Класс E
В целом
-0,01%
-0,01%
-0,01%
101%
100%
Класс D
-0,07%
-0,06%
-0,07%
98%
95%
Класс F
-0,02%
-0,02%
-0,02%
105%
91%
Главный профиль 10, B с низкой задержкой
По сравнению с VTM-5.0
Y
U
V
EncT
DecT
Класс A1
Класс A2
Класс B
-0,02%
-0,01%
-0,02%
101%
98%
Класс C
-0,04%
-0,04%
-0,04%
102%
100%
Класс E
-0.25%
-0.20%
-0.20%
97%
99%
В целом
-0,08%
-0,07%
-0,07%
100%
99%
Класс D
-0,13%
-0,11%
-0,11%
103%
105%
Класс F
-0,12%
-0,09%
-0,10%
100%
97%
Главный профиль 10, P с низкой задержкой
По сравнению с VTM-5.0
Y
U
V
EncT
DecT
Класс A1
Класс A2
Класс B
-0,01%
-0,01%
-0,01%
101%
101%
Класс C
-0,02%
-0,02%
-0,02%
101%
102%
Класс E
-0,08%
-0,07%
-0,07%
100%
101%
В целом
-0,03%
-0,03
-0,03%
102%
102%
Класс D
-0,05%
-0,04%
-0,04%
104%
105%
Класс F
-0,05%
-0,05%
-0,05%
102%
101%
Оцененные результаты для не-CTC-конфигураций
[0284]
[0285] В не-CTC-конфигурации с несколькими слайсами, сокращение числа битов предположительно должно быть более высоким. Приблизительная оценка выполняется в нижеприведенной таблице 5 посредством умножения CTC-сокращений числа битов на число слайсов:
Оцененное сокращение числа битов для нескольких слайсов в расчете на картинка
Оцененное сокращение числа битов (Y)
X слайсов в расчете на картинка
RA
LDB
LDP
6
-0,06%
-0.48%
-0,18%
24 (OMAF-пример)
-0.24%
-1.92%
-0,72%
[0286] -- Конец доклада --
[0287] Хотя различные варианты осуществления описываются в данном документе (включающем в себя приложенный проект доклада), следует понимать, что они представлены только в качестве примера, а не ограничения. Таким образом, сущность и объем этого раскрытия сущности не должны быть ограничены посредством какого-либо из вышеописанных примерных вариантов осуществления. Более того, любая комбинация вышеописанных элементов во всех возможных вариациях охватывается посредством раскрытия сущности, если иное не указано данном документе или явно не опровергается контекстом.
[0288] Дополнительно, хотя процессы, описанные выше и проиллюстрированные на чертежах, показаны как последовательность этапов, это выполняется только для иллюстрации. Соответственно, предполагается, что некоторые этапы могут добавляться, некоторые этапы могут опускаться, порядок этапов может перекомпоновываться, и некоторые этапы могут выполняться параллельно.