СПОСОБ И УСТРОЙСТВО ДЛЯ ОБРАБОТКИ ДЕЛЬТА ПАРАМЕТРОВ КВАНТОВАНИЯ ПРИ ВЫСОКОЭФФЕКТИВНОМ ВИДЕОКОДИРОВАНИИ
METHOD AND APPARATUS OF DELTA QUANTISATION PARAMETER PROCESSING FOR HIGH-EFFICIENCY VIDEO CODING

РОДСТВЕННЫЕ ЗАЯВКИ
Данная заявка испрашивает приоритет у предварительной заявки на патент США №61/411,066, поданной 8 ноября 2010, «Дельта параметров квантования для высокоэффективного видеокодирования (HEVC)», содержимое которой полностью включено в данный документ по ссылке.
ОБЛАСТЬ ТЕХНИКИ, К КОТОРОЙ ОТНОСИТСЯ ИЗОБРЕТЕНИЕ
Настоящее изобретение имеет отношение к видеокодированию. Более конкретно: данное изобретение имеет отношение к методам кодирования, связанным с обработкой параметра квантования.
ПРЕДПОСЫЛКИ К СОЗДАНИЮ ИЗОБРЕТЕНИЯ
HEVC (Высокоэффективное видеокодирование) представляет собой продвинутую систему видеокодирования, которая была разработана Объединенной командой по видеокодированию (JCT-VC) группой экспертов в области видеокодирования из исследовательской группы Международного телекоммуникационного союза-телекоммуникационного сектора (ITU-T). HEVC представляет собой блочно-ориентированное гибридное видеокодирование с очень гибкой блочной структурой. В HEVC представлены три группы блоков: блок кодирования (CU), блок предсказания (PU) и блок преобразования (TU). Общая структура кодирования характеризуется различными размерами CU, PU и TU в обратном порядке, где каждое изображение разделено на CU максимального размера (LCU), содержащие 64×64 пикселов. Затем каждый LCU последовательно делится на меньшие CU до получения CU минимального размера или CU листьев. После разбиения CU создается иерархическое дерево, каждый CU листа делится далее на блоки предсказания (PU) в соответствии с типом предсказания и разбиением PU. Кроме того, проводится преобразование TU, чтобы трансформировать пространственные данные в коэффициенты преобразования для компактного представления данных. В стандарте кодирования Н.264 базовые видеокадры разделены на слои, где каждый слой состоит из неперекрываемых макроблоков в качестве минимального блока кодирования. Поскольку каждый слой проходит независимую обработку, то ошибки или отсутствующие данные из одного слоя не могут распространиться на другой слой в пределах изображения. В современной версии HEVC слой вместо макроблоков содержит несколько LCU. Размер LCU намного превышает размер макроблока 16×16 пикселов. Следовательно, выровненный по LCU слой HEVC не обеспечивает достаточной степени детализации для разбиения видеокадров и управления скоростью передачи данных. В то время как для HEVC используется слой, выровненный по LCU, то при этом можно также использовать слои, выровненные не по LCU. Слои, выровненные не по LCU, обеспечивают более гибкую структуру слоя и улучшенный контроль скорости детализации.
В HEVC у каждого LCU есть свой собственный параметр квантования (QP), этот QP, выбранный для LCU, передается на сторону декодера так, чтобы декодер использовал такое же значение QP для надлежащего декодирования. Чтобы уменьшить объем информации, связанной с QP, вместо самого значения QP передается разность между текущим и эталонным параметром QP. Эталонный QP может быть получен разными способами. Например, в Н.264 эталонный QP получается на базе предыдущего макроблока; в то время как в HEVC эталонный QP определен в заголовке слоя. Если сравнивать с кодированием AVC/H.2 64, основанным на макроблоке, то размер блока кодирования для HEVC может достигать 64×64 пикселов, то есть максимального размера CU (LCU). Поскольку LCU намного больше, чем макроблок AVC/H.264, то использование одного дельта-QP на LCU может привести к снижению контроля скорости, поскольку в этом случае невозможно достаточно быстро приспособиться к скорости передачи данных. Следовательно, возникает потребность адаптировать дельта-QP в блоках меньше LCU, чтобы обеспечить улучшенный контроль скорости детализации. Кроме того, желательно разработать такую систему, которая способна выполнять более гибкую и/или регулируемую обработку дельта-QP.
КРАТКОЕ ОПИСАНИЕ СУЩНОСТИ ИЗОБРЕТЕНИЯ
Изобретение представляет устройство и способ кодирования видеоизображений, связанные с параметром квантования. В одном варианте осуществления настоящего изобретения устройство и способ видеокодирования включают этапы получения CU листа, определения минимального размера CU QP для передачи информации параметра квантования и введения информации параметра квантования, при условии, что размер CU листа больше или равен минимальному размеру CU QP. Минимальный размер CU QP может быть указан на уровне последовательности, изображения или слоя, где можно использовать флаг выбора QP для того, чтобы выбрать признак минимального размера CU QP на уровне слоя или уровне последовательности/изображения. В альтернативном варианте настоящего изобретения способ дополнительно включает этап внедрения второго блока информации параметра квантования для минимум двухсекундных CU листа, чтобы разделить второй блок информации параметра квантования в том случае, если размер указанных двухсекундных CU листа меньше минимального размера CU QP, и размер родительского CU указанных двухсекундных блоков CU равен минимальному размеру CU QP. Еще в одном варианте настоящего изобретения способ включает этап введения третьего блока информации параметра квантования для третьего CU листа независимо от размера третьего CU листа, при условии, что третий CU листа является первым блоком кодирования в слое. Изобретение представляет устройство и способ декодирования видеопотока, связанные с адаптивной обработкой параметра квантования. В одном варианте настоящего изобретения устройство и метод для декодирования видеопотока включают этапы получения видеопотока, определения минимального размера CU QP из видеопотока, определения размера CU листа из видеопотока и получения информации параметра квантования для CU листа, если размер CU листа больше или равен минимальному размеру CU QP. В альтернативном варианте настоящего изобретения способ дополнительно включает этап получения второго блока информации о параметре квантования для двухсекундных CU листа, чтобы разделить второй блок информации о параметре квантования, при условии, что размер указанных двухсекундных CU листа меньше, чем минимальный размер CU QP, и размер родительского CU указанных двухсекундных CU листа равен минимальному размеру CU QP. В еще одном варианте настоящего изобретения способ включает этап внедрения третьего блока информации параметра квантования для третьего CU листа независимо от размера третьего CU листа, если третий CU листа является первым блоком кодирования в слое.
Изобретение представляет устройство и способ для кодирования видеоизображений, связанные с параметром квантования. В дальнейшем описании в качестве примера для иллюстрации обработки дельта-QP согласно настоящему изобретению используются слои, выровненные по. LCU. Что касается слоев, выровненных не по LCU, то соответствующие операции для первого CU листа слоя могут быть выполнены таким же образом. В одном варианте настоящего изобретения устройство и способ видеокодирования включают этапы получения CU листа, определения минимального размера CU QP, чтобы передать информацию о параметре квантования для CU листа, и введения информации о параметре квантования, при условии, что размер CU листа больше или равен минимальному размеру CU QP, и CU листа имеет хотя бы один ненулевой квантованный коэффициент преобразования. В альтернативном варианте настоящего изобретения способ дополнительно включает введение второго блока информации о параметре квантования для двухсекундных CU листа, чтобы разделить второй блок информации о параметре квантования, если размер указанных двухсекундных CU листа меньше минимального размера CU QP, размер родительского CU указанных двухсекундных CU листа равен минимальному размеру CU QP, и указанные двухсекундные CU листа имеют хотя бы односекундный ненулевой квантованный коэффициент преобразования. Обнаружение ненулевых квантованных коэффициентов преобразования может быть основано на методах PredMode, СВР, CBF или их комбинации. Изобретение представляет устройство и способ для декодирования видеопотока, связанные с адаптивной обработкой параметра квантования. В одном варианте настоящего изобретения устройство и способ декодирования видеопотока включают получение видеопотока, определение минимального размера CU QP из видеопотока и определение размера CU листа для CU листа из видеопотока. Если размер CU листа больше или равен минимальному размеру CU QP, то сюда входит определение того, имеет ли CU листа хотя бы один ненулевой квантованный коэффициент преобразования. Если CU листа имеет хотя бы один ненулевой квантованный коэффициент преобразования, то проводится передача информации о параметре квантования для CU листа.
Изобретение представляет устройство и способ кодирования видеоизображений, связанные с параметром квантования. В одном варианте настоящего изобретения устройство и способ видеокодирования включают этапы получения CU листа и введения информации о параметре квантования для CU листа, если CU листа имеет хотя бы один ненулевой квантованный коэффициент преобразования, где указанный ненулевой квантованный коэффициент преобразования обнаружен с помощью метода PredMode, СВР, CBF или их комбинации. Способ введения информации о параметре квантования для CU листа, у которого есть хотя бы один ненулевой квантованный коэффициент преобразования, может быть явным или неявным. Например, информация параметра квантования может быть передана непосредственно в видеопоток явным способом, или информация параметра квантования может быть получена неявным способом из информации другого CU листа, например, информации параметра квантования, PredMode, CBF, СВР, положения CU листа или комбинации всего вышеупомянутого. Изобретение представляет устройство и способ декодирования видеопотока, связанные с адаптивной обработкой параметра квантования. В одном варианте настоящего изобретения устройство и способ декодирования видеопотока включают получение видеопотока и определение того, имеет ли CU листа хотя бы один ненулевой квантованный коэффициент преобразования. Если CU листа имеет хотя бы один ненулевой квантованный коэффициент преобразования, то процесс включает получение информации параметра квантования для CU листа. Информация параметра квантования может быть получена явным или неявным способом, например, из видеопотока или из информации другого CU листа.
Изобретение представляет устройство и способ кодирования видеоизображений, связанные с параметром квантования. В одном варианте настоящего изобретения устройство и способ для видеокодирования включают этапы получения CU листа, введения флага QP, основанного на максимальном блоке кодирования (LCU), согласно критерию производительности, введения информации параметра квантования для LCU при выборе QP, основанного на LCU, как обозначено флагом QP, основанным на LCU, при условии, что LCU содержит хотя бы один ненулевой квантованный коэффициент преобразования, а также введения информации параметра квантования для CU листа, если выбран QP, основанный не на LCU, что обозначено соответствующим флагом QP, и CU листа содержит хотя бы один ненулевой квантованный коэффициент преобразования. Изобретение представляет устройство и способ кодирования видеоизображений, связанные с адаптивной обработкой параметра квантования. В одном варианте настоящего изобретения устройство и способ декодирования видеопотока включают получение видеопотока и извлечение из видеопотока флага QP, основанного на LCU. Если выбран QP, основанный на LCU, как обозначено соответствующим флагом, то способ дополнительно включает этап получения информации параметра квантования для каждого LCU. Если выбран QP, основанный не на LCU, что обозначено соответствующим флагом QP, то способ дополнительно включает этап получения информации параметра квантования для каждого CU листа.
КРАТКОЕ ОПИСАНИЕ ЧЕРТЕЖЕЙ
Фиг.1 - пример разбиения блока кодирования, основанного на дереве квадрантов.
Фиг.2 - пример разбиения слоя, где границы разбиения выровнены по максимальному блоку кодирования.
Фиг.3 - пример разбиения слоя, где слои могут включать фракционные максимальные блоки кодирования.
Фиг.4 - пример синтаксиса заголовка последовательности, связанного с обработкой дельта параметров квантования согласно настоящему изобретению.
Фиг.5 - пример синтаксиса заголовка слоя, связанного с обработкой дельта параметров квантования согласно настоящему изобретению.
Фиг.6 - пример синтаксиса данных слоя, связанного с обработкой дельта параметров квантования согласно настоящему изобретению.
Фиг.7А - пример синтаксиса блока кодирования, связанного с обработкой дельта параметров квантования согласно настоящему изобретению.
Фиг.7В - остальная часть примера синтаксиса блока кодирования, связанного с обработкой дельта параметров квантования согласно настоящему изобретению.
Фиг.8 - альтернативный пример синтаксиса данных слоя, связанного с обработкой дельта параметров квантования согласно настоящему изобретению.
Фиг.9А - альтернативный пример синтаксиса блока кодирования, связанного с обработкой дельта параметров квантования согласно настоящему изобретению.
Фиг.9В - остальная часть альтернативного примера синтаксиса блока кодирования, связанного с обработкой дельта параметров квантования согласно настоящему изобретению.
Фиг.10 - пример синтаксиса блока преобразования, связанного с обработкой дельта параметров квантования согласно настоящему изобретению.
Фиг.11 - синтаксис заголовка последовательности, основанного на обычном HEVC для обработки дельта параметров квантования согласно настоящему изобретению.
Фиг.12 - синтаксис заголовка слоя, основанного на обычном HEVC для обработки дельта параметров квантования согласно настоящему изобретению.
Фиг.13 - синтаксис данных слоя, основанный на обычном HEVC для обработки дельта параметров квантования согласно настоящему изобретению.
Фиг.14А - синтаксис блока кодирования, основанный на обычном HEVC для обработки дельта параметров квантования согласно настоящему изобретению.
Фиг.14В - остальная часть синтаксиса блока кодирования, основанного на обычном HEVC для обработки дельта параметров квантования согласно настоящему изобретению.
Фиг.15 - альтернативный пример синтаксиса блока преобразования, связанного с обработкой дельта параметров квантования согласно настоящему изобретению.
Фиг.16А - другой альтернативный пример синтаксиса блока кодирования, связанного с обработкой дельта параметров квантования согласно настоящему изобретению.
Фиг.16В - остальная часть другого альтернативного примера синтаксиса блока кодирования, связанного с обработкой дельта параметров квантования согласно настоящему изобретению.
Фиг.17 - альтернативный пример синтаксиса блока преобразования, связанного с обработкой дельта параметров квантования согласно настоящему изобретению.
ПОДРОБНОЕ ОПИСАНИЕ
HEVC (Высокоэффективное видеокодирование) представляет собой улучшенную систему видеокодирования, которая была разработана Объединенной командой по видеокодированию (JCT-VC) группой экспертов в области видеокодирования из исследовательской группы Международного телекоммуникационного союза-телекоммуникационного сектора (ITU-T). HEVC представляет собой блочно-ориентированное гибридное видеокодирование с очень гибкой блочной структурой. В HEVC представлены три группы блоков: блок кодирования (CU), блок предсказания (PU) и блок преобразования (TU). Общая структура кодирования характеризуется различными размерами CU, PU и TU в обратном порядке. Каждое изображение разделено на CU максимального размера (LCU), содержащие 64×64 пикселов, каждый LCU последовательно делится на меньшие CU до получения CU минимального размера или CU листьев. После разбиения CU создается иерархическое дерево, каждый CU листа делится далее на блоки предсказания (PU) в соответствии с типом предсказания и разбиением PU. В стандарте кодирования Н.264 одной из новейших характеристик является способность разбиения изображения на области, называемые слоями. Использование слоя обеспечивает различные потенциальные преимущества, такие как приоритетная передача, устойчивая передача ошибки и т.д. В то время как для HEVC используется слой, выровненный по LCU, то при этом можно также использовать слои, выровненные не по LCU. Слой, выровненный не по LCU, обеспечивает более гибкую структуру слоя и улучшенный контроль скорости детализации.
HEVC представляет собой блочно-ориентированное гибридное видеокодирование с очень гибкой блочной структурой, где процесс кодирования применяется к каждому блоку кодирования. После разбиения иерархического дерева CU каждый CU листа подвергается дальнейшему делению на блоки преобразования (PU) в соответствии с типом предсказания и разбиением PU. Затем проводится преобразование блоков, связанных с остатками предсказания или непосредственно с данными изображения блока. После этого выполняется квантование коэффициентов преобразования, и квантованные коэффициенты преобразования проходят обработку с помощью кодера энтропии, чтобы уменьшить объем информации, запрошенной для представления видеоданных. Параметр квантования (QP) представляет собой управляющий параметр, который определяет размер шага квантования и соответственно регулирует качество изображения и скорость передачи сжатых данных. В обычном HEVC параметр квантования регулируется на основе LCU. Поэтому для каждого LCU передается информация, связанная с QP. Чтобы сохранить скорость передачи данных, связанную с передачей QP, вместо самого значения QP используется разность между текущим и эталонным QP кодирования. Такая разность между текущим и эталонным QP называется дельта-QP. Эталонный QP может быть получен разными способами. Например, в Н.264 эталонный QP может быть получен на базе предыдущего макроблока; а в HEVC эталонный QP определяется в заголовке слоя.
В разрабатываемом высокоэффективном видеокодировании (HEVC) макроблок фиксированного размера H.264/AVC заменен на переменный блок кодирования. На фиг.1 показан пример разбиения блока кодирования, основанный на дереве квадрантов. На глубине 0 начальный блок кодирования CU0, 112 состоящий из 64×64 пикселов, является максимальным CU. Начальный блок кодирования CU0, 112 подвергается разбиению по дереву квадрантов, как показано в блоке 110. Флаг разбиения 0 указывает на то, что основной CU не разделен, с другой стороны, флаг разбиения 1 указывает на то, что основной CU разбит на четыре меньших блока кодирования CU1, 122 по дереву квадрантов. Полученные четыре блока кодирования маркированы цифрами 0, 1, 2 и 3, и каждый полученный блок кодирования может быть далее разделен на следующей глубине. Блоки кодирования, полученные из блока кодирования CU0, 112, обозначаются CU1, 122. После разбиения блока кодирования по дереву квадрантов полученные блоки кодирования подвергаются дальнейшему разбиению по дереву квадрантов, пока размер блока кодирования не достигает предопределенного минимального размера CU (SCU). Таким образом, на глубине 1 блок кодирования CU1, 122 подвергается разбиению по дереву квадрантов, как показано в блоке 120. И снова флаг разбиения, равный 0, указывает на то, что основной CU не разделен, с другой стороны, флаг разбиения, равный 1, указывает на то, что основной CU разделен на четыре меньших блока кодирования CU2, 132 по дереву квадрантов. Блок кодирования CU2, 132, имеет размер 16×16, процесс разбиения по дереву квадрантов, как показано в блоке 130, может продолжаться до тех пор, пока не будет достигнут предопределенный наименьший размер блока кодирования. Например, если минимальный размер блока кодирования выбран равным 8×8, то блок кодирования CU3, 142 на глубине 3 не будет подвергаться дальнейшему разбиению, как показано в блоке 140. Набор разбиений деревьев квадрантов для изображения, применяемый для формирования блоков кодирования переменного размера, представляет собой карту разбиения, используемую кодером для соответствующей обработки области входного изображения. Необходимо обеспечить передачу карты разбиения в декодер, чтобы можно было соответственно выполнить процесс декодирования.
В разрабатываемом стандарте высокоэффективного видеокодирования (HEVC) максимальный блок кодирования (LCU) используется в качестве начального блока кодирования. LCU может быть адаптивно разделен на CU меньшего размера для более эффективной обработки. Основанное на макроблоке разбиение слоя для Н.264 может быть расширено до разбиения по слоям для HEVC, основанного на LCU. Пример разбиения по слоям для HEVC, основанного на LCU, показан на фиг.2, где двадцать четыре LCU разделены на три части. LCU с LCU00 до LCU07 назначены в слой 0, 210, LCU с LCU08 по LCU15 - в слой 1, 220, и LCU с LCU16 по LCU23 - в слой 2, 230. Как показано на фиг.2, граница слоя выровнена по границе LCU. Хотя разбиение слоя с выравниванием по LCU достаточно легко выполнимо, размер LCU намного превышает размер макроблока, и слой, выровненный по LCU, может не обеспечить достаточную степень детализации, чтобы поддерживать динамическую среду систем кодирования. Поэтому в стандартных разработках HEVC предлагается разбиение слоя, выровненное не по LCU.
На фиг.3 показан пример структуры слоя с фракционным разбиением LCU, где границы разбиения могут проходить через LCU. Слой 0, 310 включает LCU с LCU00 по LCU06 и заканчивается в CU листа LCU07. LCU07 разделен между слоем 0, 310 и слоем 1, 320. Слой 1, 320 включает оставшиеся CU листа LCU07, не включенные в слой 0, 310 и LCU с LCU08 по LCU15, и слой LCU16. Слой 1, 320 заканчивается в CU листа LCU16. LCU16 разделен между слоем 1, 320 и слоем 2, 330. Слой 2, 330 включает оставшиеся CU листа LCU16, не включенные в слой 1, 320 и LCU с LCU17 по LCU23.
В текущем варианте HEVC каждый LCU имеет собственный параметр квантования (QP), и QP, выбранный для LCU, передается на сторону декодера так, чтобы декодер использовал то же самое значение QP для надлежащего выполнения процесса декодирования. Чтобы уменьшить объем информации, связанной с QP, вместо самого значения QP передается разность между значениями текущего и эталонного QP. Таким образом, дельта QP передается для каждого LCU, где дельта QP определена в качестве разности между значениями текущего и эталонного QP. Если текущий LCU является первым в слое, то QP слоя считается эталонным QP. В зависимости от различных вариантов проекта эталонным QP для LCU, не являющегося первым LCU в слое, может быть QP слоя, предопределенное значение QP или QP предыдущего LCU. Дельта QP для LCU обычно является последним элементом синтаксиса данных LCU. Если в качестве вида предсказания (PredMode) LCU выбран «SKIP» (Пропустить), то дельта QP не передается. Если сравнивать с кодированием AVC/H.264, основанным на макроблоке, размер блока кодирования для HEVC может достигать 64x64 пикселов, то есть, размера максимального CU (LCU). Поскольку размер LCU намного превышает размер макроблока AVC/H.2 64, то использование одной дельта QP на LCU может привести к снижению контроля скорости, поскольку в этом случае невозможно достаточно быстро приспособиться к скорости передачи данных. Следовательно, возникает потребность адаптировать дельта QP в блоках меньше LCU, чтобы обеспечить улучшенный контроль скорости детализации. Кроме того, желательно разработать такую систему, которая способна выполнять более гибкую и/или регулируемую обработку дельта QP.
Если для кодирования блоков с размером меньше LCU разрешено использовать дельта QP, то при уменьшении размера блока кодирования увеличится объем информации, связанный с дельта QP на основе пикселя. Поэтому QP CU с минимальным размером определен таким образом, чтобы дельта QP передавалась только для тех блоков управления, размер которых больше или равен QP CU с минимальным размером. Кроме того, чтобы обеспечить гибкость дельта QP, минимальный размер CU QP может быть определен в заголовке последовательности, изображения или слоя. Например, элемент синтаксиса sps_qp_max_depth в заголовке последовательности; SPS определен, как показано на фиг.4. Дополнительный элемент синтаксиса, требуемый помимо аналогичных параметров для обычного HEVC, обозначен блоком 410. Элемент синтаксиса sps_qp_max_depth определяет глубину минимального размера CU QP из максимального CU. Поэтому минимальный размер CU QP может быть получен из максимального размера CU в соответствии с sps_qp_max_depth. Элемент синтаксиса определяет, что глубина минимального размера CU QP в заголовке изображения может быть определена таким же образом. В каждом заголовке слоя определен другой элемент синтаксиса, sh_qp_max_depth, как показано на фиг.5. Дополнительные элементы синтаксиса, требуемые помимо аналогичных для обычного HEVC, обозначены блоком 510. Элемент синтаксиса sh_qp_max_depth определяет глубину минимального размера CU QP, QpMinCuSize, исходя из максимального CU; QpMinCuSize может быть получен из максимального размера CU в соответствии с sh_qp_max_depth. Для каждого слоя в качестве параметра QpMinCuSize может быть выбран минимальный размер CU QP, идентифицированный в уровне последовательности или слоя. Элемент синтаксиса change_qp_max_depth_flag, показанный в блоке 510, используется для того, чтобы обозначить выбор минимального размера CU QP, исходя из уровня последовательности или слоя. Например, значение параметра change_qp_max_depth_flag, равное 0, указывает на то, что минимальный размер CU для передачи дельта QP, будет получен из параметра sps_qp_max_depth. Значение параметра change_qp_max_depth_flag, равное 1, определяет, что минимальный размер CU для передачи дельта QP будет получен из параметра sh_qp_max_depth. Общее правило для передачи дельта QP описано следующим образом. Для CU листа, размер которого больше или равен QpMinCuSize, передается одна дельта QP. Для нескольких CU листа, размер которых меньше QpMinCuSize, и которые относятся к одному родительскому CU с размером, равным QpMinCuSize, передается одна дельта QP, чтобы разделить информацию QP. Если используются слои, выровненные не по LCU, то для первого CU листа слоя всегда передается одна дельта QP независимо от размера первого CU листа.
На фиг.6 показан пример синтаксиса данных слоя, связанного с обработкой дельта параметров квантования согласно настоящему изобретению. Дополнительные элементы синтаксиса, требуемые помимо аналогичных параметров для обычного HEVC, обозначены блоком 610. Элемент синтаксиса FirstCuFlag представляет собой флаг, используемый для того, чтобы указать, является ли данный CU первым CU в слое. При инициализации FirstCuFlag равен 1 в блоке 610. Элемент синтаксиса SendQpFlag является флагом, используемым для того, чтобы указать, передан ли дельта QP для CU; при инициализации этот параметр равен 0 в блоке 610. Последующее выполнение последовательности coding_unit() может вызвать изменение значений параметров FirstCuFlag и SendQpFlag. После передачи дельта QP для первого CU в слое параметр FirstCuFlag будет сброшен до 0 в последовательности coding_unit().
На фиг.7А и 7В показан пример синтаксиса блока кодирования, связанного с обработкой дельта параметра квантования, согласно настоящему изобретению. Дополнительные элементы синтаксиса, требуемые помимо аналогичных для обычного HEVC, обозначены блоками 710 и 720. В блоке 710 параметр SendQpFlag установлен равным 1, чтобы указать на необходимость передачи одной дельта QP, при условии, что текущий размер CU, CurrCuSize, равен минимальному размеру CU QP, QpMinCuSize. В блоке 720 выполняется проверка трех условий: является ли текущий CU первым CU в слое - параметр FirstCuFlag; установлен ли SendQpFlag; и соответствует ли CurrCuSize параметру QpMinCuSize. Если любое из этих трех условий верно, то осуществляется передача дельта QP, delta_qp, и значения параметров SendQpFlag и FirstCuFlag сбрасываются до 0. Вариант настоящего изобретения с использованием элементов синтаксиса, показанных на фиг.4-7В, обеспечивает обработку дельта QP, основанную на блоках с размером меньше, чем у LCU, а также позволяет обрабатывать дельта QP для системы, имеющей фракционный LCU. Кроме того, вариант настоящего изобретения с использованием элементов синтаксиса, показанных на фиг.4-7В, позволяет системе адаптивно выбирать минимальный размер CU QP, указанный в заголовке последовательности/изображения или в заголовке слоя.
В то время как проект синтаксиса, показанный на фиг.4-7В, демонстрирует вариант настоящего изобретения, в качестве примеров используются специальные элементы синтаксиса, чтобы можно было применить настоящее изобретение, и специалист в данной области может легко изменить элементы синтаксиса, чтобы использовать настоящее изобретение. Согласно элементам синтаксиса, показанным на фиг.4-7В, декодер может получить запрошенную информацию QP для декодирования потока. Например, декодер может извлечь элемент синтаксиса change_qp_max_depth_flag, чтобы определить, обозначен ли минимальный размер CU QP в заголовке слоя или последовательности. Таким образом, можно определить минимальный размер CU QP. Из потока можно декодировать размер CU листа, а также порядок CU листа в слое. Если размер CU листа больше или равен минимальному размеру CU QP, или CU листа является первым CU в слое, выровненном не по LCU, то в данных блока кодирования присутствует дельта QP. Соответственно декодер может извлечь значение дельта QP и применить дельта QP к данным блока кодирования для того, чтобы декодировать этот блок.
Несмотря на то, что описанная выше обработка QP позволяет изменять QP на более высоком уровне детализации, чем LCU, и адаптивно выбирает минимальный размер CU QP, обозначенный в заголовке последовательности или слоя, есть некоторые возможности для дальнейшего улучшения эффективности передачи, связанной с информацией параметра квантования. Соответственно, первый альтернативный вариант настоящего изобретения описан следующим образом. Когда передается одна дельта QP, возможно, что область, охваченная дельта QP, не имеет ни одного ненулевого квантованного коэффициента преобразования. Поскольку QP используется для квантования и деквантования ненулевых коэффициентов преобразования, то нет никакой потребности в передаче QP или дельта QP для области, которая не имеет ни одного ненулевого квантованного коэффициента преобразования. Следовательно, информация, связанная с дельта QP или QP, может быть пропущена для этих областей. Чтобы поддержать эту особенность, выполнены изменения синтаксиса для параметров coding_unit() и transform_unit(); для упрощения демонстрации в качестве примера взят только слой, выровненный по LCU. Синтаксис для заголовка последовательности и слоя остается таким же, как показано на фиг.4 и 5. Синтаксис для параметра slide_data() соответствует используемому для обычного HEVC, как показано на фиг.8, где инициализация параметров FirstCuFlag и SendQpFlag (фиг.6) не выполнена для слоев, выровненных по LCU, а только для слоев, выровненных не по LCU, при этом необходима инициализация параметра FirstCuFlag, чтобы обработать первый CU листа, который имеет хотя бы один ненулевой коэффициент в слое. Согласно альтернативному варианту синтаксис параметра coding_unit() изменен так, чтобы дельта QP могла существовать только в конце CU листа с размером большим или равным QpMinCuSize или только после последнего CU листа разделенного CU с размером, равным QpMinCuSize. Кроме того, синтаксис параметра transform_unit(), связанного с дельта QP, изменен так, чтобы передавать дельта QP только в том случае, если соответствующая область имеет хотя бы один ненулевой квантованный коэффициент преобразования. Условие наличия хотя бы одного ненулевого квантованного коэффициента преобразования в области может быть определено путем выбора вида предсказания (PredMode), шаблона закодированного блока (СВР), флага закодированного блока (CBF) или комбинации PredMode, СВР и CBF. Например, когда для PredMode выбрано «SKIP» (Пропустить), то тем самым подразумевается, что в CU листа нет никакого остатка. Если используется VLC, и СВР равно нулю, то тем самым подразумевается, что в CU листа нет никакого остатка. Если используется САВАС, и CBF равно нулю, это снова подразумевает, что в CU листа нет никакого остатка. Для таких CU листа информация QP может быть пропущена, чтобы улучшить эффективность кодирования и передачи.
Чтобы поддержать вышеупомянутый альтернативный вариант, на фиг.9А и 9В показаны модификации синтаксиса coding_unit(), обозначенные блоками 910-940. В блоке 910, когда CurrCuSize равно QpMinCuSize, NonZeroFound равен 0. Дальнейшая последовательность coding_unit() выполняется рекурсивным способом, где значение NonZeroFound может меняться. В процессе обработки, показанной в блоке 920, если CurrCuSize равно QpMinCuSize, то проверяется значение NonZeroFound. Если NonZeroFound равен 1, происходит передача delta_qp. После выполнения последовательности prediction_unit(), и если для PredMode не выбрано «SKIP», выполняется блок 930. В блоке 930, если CurrCuSize больше или равен QpMinCuSize, NonZeroFound устанавливается равным 0. Затем выполняется следующая последовательность transform_unit(), где может измениться значение NonZeroFound. После завершения последовательности transform_unit() выполняется блок 940. В процессе обработки, показанной в блоке 940, если CurrCuSize больше или равен QpMinCuSize, проверяется значение NonZeroFound. Если NonZeroFound равно 1, происходит передача delta_qp.
Для поддержания вышеупомянутого альтернативного варианта предлагаются изменения синтаксиса параметра transform_unit(), показанные в блоке 1010 на фиг.10. Если используется VLC, и СВР не равно нулю, это подразумевает, что для CU листа существует хотя бы один ненулевой коэффициент преобразования, и NonZeroFound равен 1. В противном случае, если используется VLC, и СВР равно нулю, параметр NonZeroFound имеет то же самое значение, т.е. 0. Если используется САВАС, и CBF не равно нулю, это подразумевает, что для CU листа существует хотя бы один ненулевой коэффициент преобразования, и NonZeroFound равен 1. В противном случае, если используется САВАС, и CBF равно нулю, параметр NonZeroFound имеет то же самое значение, т.е. 0.
Для поддержки вышеупомянутого альтернативного варианта синтаксис заголовка последовательности и слоя остается таким же, как на фиг.4 и 5. Как и прежде, элемент синтаксиса sps_qp_max_depth в заголовке последовательности определяет глубину минимального размера CU QP, исходя из максимального CU. В каждом заголовке слоя элемент синтаксиса sh_qp_max_depth определяет глубину минимального размера CU QP, исходя из максимального CU. Элемент синтаксиса change_qp_max_depth_flag, показанный в блоке 510, используется для того, чтобы обозначить выбор минимального размера CU QP, QpMinCuSize, исходя из уровня последовательности или слоя. Например, если параметр change_qp_max_depth_flag равен 0, то это обозначает, что минимальный размер CU для передачи QP получен из параметра sps_qp_max_depth. Значение параметра change_qp_max_depth_flag, равное 1, указывает на то, что минимальный размер CU для передачи QP, получен из sh_qp_max_depth. Для CU листа, размер которого больше или равен QpMinCuSize, осуществляется передача одной дельта QP, при условии, что CU листа имеет хотя бы один ненулевой квантованный коэффициент преобразования. Для нескольких CU листа, общий размер которых меньше QpMinCuSize, и которые относятся к одному родительскому CU с размером, равным QpMinCuSize, осуществляется передача одной дельта QP, если эти CU листа имеют хотя бы один ненулевой квантованный коэффициент преобразования. Согласно альтернативному варианту для CU листа, размер которого больше или равен QpMinCuSize, и который имеет хотя бы один ненулевой квантованный коэффициент преобразования, передается одна дельта QP. Другими словами, передача дельта QP не выполняется в том случае, если не существует ни одного ненулевого квантованного коэффициента преобразования. Кроме того, для нескольких CU листа, общий размер которых меньше QpMinCuSize, и которые относятся к одному родительскому CU с размером, равным QpMinCuSize, осуществляется передача одной дельта QP для нескольких CU листа, чтобы разделить информацию QP в том случае, когда эти CU листа имеют хотя бы один ненулевой квантованный коэффициент преобразования. Вдобавок, обнаружение ненулевых квантованных коэффициентов преобразования может быть основано на PredMode, СВР, CBF или любой их комбинации.
В то время как проект синтаксиса, показанный на фиг.4, 5, 8, 9А, 9В и 10, демонстрирует вариант настоящего изобретения, в качестве примеров используются специальные элементы синтаксиса, чтобы применить настоящее изобретение, и специалист в данной области может легко изменить элементы синтаксиса, чтобы использовать настоящее изобретение. В соответствии с представленными элементами синтаксиса декодер может получить запрошенную информацию QP для декодирования потока. Например, декодер может извлечь элемент синтаксиса change_qp_max_depth_flag, чтобы определить, указан ли минимальный размер CU QP в заголовке слоя или последовательности. Таким образом, можно определить минимальный размер CU QP. Из потока можно декодировать размер CU листа, а также порядок CU листа в слое. Если размер CU листа больше или равен минимальному размеру CU QP, то проверяется значение NonZeroFound. Если параметр NonZeroFound равен 0, то это указывает на отсутствие ненулевых коэффициентов преобразования в CU листа, и все коэффициенты преобразования CU листа установлены на 0. Если параметр NonZeroFound равен 1, то в данных блока кодирования есть значение дельта QP. Соответственно, декодер может извлечь значение дельта QP и применить его к данным блока кодирования для декодирования.
Во втором альтернативном варианте настоящего изобретения дельта QP для каждого CU листа, который имеет ненулевой квантованный коэффициент преобразования, передается явно или получается неявным образом на основании информации хотя бы одного другого CU листа, принадлежащего к тому же LCU. Признак наличия ненулевых квантованных коэффициентов преобразования в CU листа может быть получен с помощью методов PredMode, CBF, СВР или их комбинации. Например, если способ предсказания CU листа, PredMode, не равен «SKIP», и шаблон закодированного блока, СВР, в случае VLC, или флаг закодированного блока, CBF, в случае САВАС не равен нулю, то CU листа содержит хотя бы один ненулевой коэффициент преобразования. Далее, в качестве примера, мы берем только случай явной передачи информации дельта QP для CU листа, который имеет ненулевой квантованный коэффициент преобразования. Необходимый синтаксис для поддержки второго альтернативного варианта показан на фиг.11-15. Заголовок последовательности на фиг.11, заголовок слоя на фиг.12, синтаксис параметра slice_data() на фиг.13 и синтаксис параметра coding_unit() на фиг.14А и 14В соответствуют аналогичным параметрам для обычного HEVC. Необходимые модификации синтаксиса параметра transform_unit() по сравнению с обычным HEVC обозначены в блоке 1510, как показано на фиг.15. Блок 1510 демонстрирует, что передача дельта QP осуществляется в том случае, если используется VLC, и СВР не равно нулю. Кроме того, передача QP осуществляется в том случае, если используется САВАС, и CBF не равно нулю. Согласно второму альтернативному варианту каждый CU листа может иметь собственный параметр квантования, и информация параметра квантования будет передаваться только в том случае, если CU листа имеет хотя бы один ненулевой квантованный коэффициент преобразования.
В то время как проект синтаксиса, показанный на фиг.11-15, демонстрирует второй альтернативный вариант настоящего изобретения, в качестве примеров используются специальные элементы синтаксиса, чтобы можно было применить настоящее изобретение, и специалист в данной области может легко изменить элементы синтаксиса, чтобы использовать настоящее изобретение. Согласно приведенным для примера элементам синтаксиса декодер может получить запрошенную информацию QP для того, чтобы декодировать CU листа в видеопоток, если CU листа имеет хотя бы один ненулевой квантованный коэффициент преобразования. Например, если используется VLC, и если шаблон закодированного блока, СВР, CU листа не равен нулю, то декодер получает информацию о дельта QP в явном виде из видеопотока или в неявном виде из информации другого CU листа, принадлежащего тому же максимальному блоку кодирования (LCU). Декодер может соответственно извлечь дельта QP и применить дельта QP к данным блока кодирования для декодирования. Если используется VLC, и СВР равно нулю, то это свидетельствует о том, что все коэффициенты преобразования CU листа равны 0. Точно так же, если используется САВАС, и если флаг закодированного блока, CBF, не равен нулю, то дельта QP существует. Декодер может соответственно извлечь дельта QP и применить ее к данным блока кодирования для декодирования. Если используется САВАС, и CBF равно нулю, то это указывает на то, что все коэффициенты преобразования CU листа равны 0.
В третьем альтернативном варианте настоящего изобретения система кодирования может переключаться между двумя способами обработки параметра квантования. В первом случае система кодирования использует одну дельта QP на LCU при условии, что LCU имеет хотя бы один ненулевой квантованный коэффициент преобразования. Во втором случае система кодирования использует одну дельта QP на CU листа, если CU листа имеет хотя бы один ненулевой квантованный коэффициент преобразования. Чтобы поддержать третий альтернативный вариант, можно использовать тот же самый синтаксис заголовка последовательности, слоя и параметра slide_data{), что и для обычного HEVC. Модификации синтаксиса coding_unit() обозначены блоками 1610 и 1620, как показано на фиг.16А и фиг.16В. В блоке 1610 включен параметр lcu_based_qp_flag, чтобы указать, на чем был основан используемый QP, при условии, что текущий CU имеет такой же размер, что и LCU. Если установлен lcu_based_qp_flag, то параметр NonZeroFound сбрасывается на 0. После выполнения следующей последовательности transform_unit() значение NonZeroFound может быть изменено. Как показано в блоке 1620, если текущий CU имеет тот же размер, что и LCU, то проверяется значение элемента синтаксиса lcu_based_qp_flag. Если lcu_based_qp_flag равен 1, то проверяется значение NonZeroFound. Если NonZeroFound равен 1, то вводится параметр delta_qp, и параметр NonZeroFound сбрасывается до 0. Необходимые модификации синтаксиса transform_unit() по сравнению с обычным HEVC обозначены в блоке 1710, как показано на фиг.17. Согласно блоку 1710, если lcu_based_qp_flag равен 1, то проверяются первые два условия: используется ли VLC, и равен ли шаблон закодированного блока, СВР значению, отличному от нуля. Если первые два условия выполнены, то NonZeroFound устанавливается равным 1. Далее проверяются вторые два условия: используется ли САВАС, и равен ли флаг закодированного блока, CBF, значению, отличному от нуля. Если вторые два условия выполнены, то параметр NonZeroFound устанавливается равным 1. Если ни первые, ни вторые условия не выполнены, то значение NonZeroFound остается тем же самым, т.е., 0. Если параметр lcu_based_qp_flag не установлен, то проверяются третьи два условия того, что используется VLC, и СВР не равен нулю. Если третьи два условия выполнены, то осуществляется передача дельта QP. Далее проверяются четвертые два: используется ли САВАС, и равен ли CBF значению, отличному от нуля. Если четвертые два условия выполнены, то в этом случае также осуществляется передача дельта QP. Согласно третьему альтернативному варианту, в первом способе у каждого LCU может быть свой собственный параметр квантования, и информация параметра квантования будет передана в том случае, если LCU имеет хотя бы один ненулевой квантованный коэффициент преобразования. Во втором способе каждый CU листа может иметь собственный параметр квантования, и информацию параметра квантования посылают в том случае, если CU листа имеет хотя бы один ненулевой квантованный коэффициент преобразования.
В то время как проект синтаксиса, показанный на фиг.16А, 16В и 17, демонстрирует третий альтернативный вариант настоящего изобретения, специальные элементы синтаксиса используются в качестве примеров, чтобы можно было применить настоящее изобретение, и специалист в данной области может легко изменить элементы синтаксиса, чтобы использовать настоящее изобретение. Согласно представленным для примера элементам синтаксиса декодер может получить запрошенную информацию QP для декодирования потока. Например, декодер может проверить, установлен ли lcu_based_qp_flag. Если флаг lcu_based_qp_flag установлен, то декодер проверяет, установлен ли NonZeroFound. Если NonZeroFound установлен, то декодер соответственно извлекает информацию о дельта QP и применяет дельта QP для LCU. Если NonZeroFound не установлен, то это подразумевает, что в LCU нет ни одного ненулевого коэффициента преобразования. Если lcu_based_qp_flag не установлен, декодер проверяет условия того, что используется VLC, и шаблон закодированного блока, СВР, не равен нулю. Если условия выполнены, декодер соответственно извлекает информацию о дельта QP и применяет дельта QP для декодирования CU листа. Декодер также проверяет условия того, что используется САВАС, и флаг закодированного блока CBF не равен нулю. Если условия выполнены, декодер соответственно извлекает информацию о дельта QP и применяет ее для декодирования CU листа. Если используется VLC, и СВР равен нулю, то все коэффициенты преобразования CU листа равны 0. Точно так же, если используется САВАС, и CBF равен нулю, то все коэффициенты преобразования CU листа равны 0.
Изобретение может быть воплощено в других определенных формах без отступления от его духа или существенных особенностей. Изобретение может быть реализовано в аппаратных средствах, таких как интегральные схемы (IC) и специализированные микросхемы (ASIC), программном обеспечении и микропрограммных кодеках, связанных с процессором, осуществляющим определенные функции и задачи настоящего изобретения, или в комбинации оборудования и программного обеспечения/программируемого оборудования. Описанные примеры во всех отношениях следует рассматривать только в качестве иллюстраций, а не ограничений. Поэтому область применения изобретения обозначена приложенной формулой изобретения, а не предшествующим описанием. Все изменения, которые находятся в пределах значения и диапазона эквивалентности формулы изобретения, должны быть использованы в пределах их объема.