СИГНАЛИЗАЦИЯ ДАННЫХ ДЛЯ ДОЛГОСРОЧНЫХ ЭТАЛОННЫХ ИЗОБРАЖЕНИЙ ДЛЯ КОДИРОВАНИЯ ВИДЕО
DATA SIGNALIZATION FOR LONG-TERM REFERENCE IMAGES FOR ENCODING VIDEO

[0001] Данная заявка испрашивает преимущество Предварительной патентной заявки США № 61/656,877, поданной 7 июня 2012 г., все содержимое которой настоящим включается в этот документ путем отсылки.
ОБЛАСТЬ ТЕХНИКИ
[0002] Данное раскрытие изобретения относится к кодированию видео.
УРОВЕНЬ ТЕХНИКИ
[0003] Возможности цифрового видео могут встраиваться в широкий диапазон устройств, включая цифровые телевизоры, системы цифрового прямого вещания, системы беспроводного вещания, персональные цифровые помощники (PDA), переносные или настольные компьютеры, планшетные компьютеры, электронные книги, цифровые камеры, цифровые записывающие устройства, цифровые мультимедийные проигрыватели, видеоигровые устройства, игровые приставки, сотовые или спутниковые радиотелефоны, так называемые "смартфоны", устройства для видеоконференцсвязи, устройства для потокового видео и т.п. Цифровые видеоустройства реализуют методики кодирования видео, например описанные в стандартах, заданных MPEG-2, MPEG-4, H.263 ITU-T, H.264/MPEG-4 ITU-T, часть 10, Улучшенное кодирование видео (AVC) ITU-T, стандартом Высокоэффективного кодирования видео (HEVC), в настоящее время находящимся в разработке, и расширениях таких стандартов, например расширениях по масштабируемому кодированию видео (SVC) и многовидовому кодированию видео (MVC). Видеоустройства могут эффективнее передавать, принимать, кодировать, декодировать и/или хранить цифровую видеоинформацию с помощью реализации таких методик кодирования видео.
[0004] Последний вариант предстоящего стандарта HEVC, называемый "HEVC Working Draft 6" или "WD6", описывается в документе JCTVC-H1003 под авторством Бросс (Bross) и др., "High efficiency video coding (HEVC) text specification draft 6", Объединенная команда по кодированию видео (JCT-VC) из SG16 WP3 ITU-T и JTC1/SC29/WG11 ISO/IEC, 8-е заседание в Сан-Хосе, Калифорния, США, февраль 2012 г., который по состоянию на 7 июня 2012 г. доступен для загрузки по адресу http://phenix.int-evry.fr/jct/doc_end_user/documents/8_San Jose/wg11/JCTVC-H1003-v22.zip. Другой вариант предстоящего стандарта HEVC, называемый "HEVC Working Draft 7" или "WD7", описывается в документе JCTVC-I1003 под авторством Бросс (Bross) и др., "High Efficiency Video Coding (HEVC) Text Specification Draft 7", Объединенная команда по кодированию видео (JCT-VC) из SG16 WP3 ITU-T и JTC1/SC29/WG11 ISO/IEC, 9-е заседание в Женеве, Швейцария с 27 апреля 2012 г. по 7 мая 2012 г., который по состоянию на 7 июня 2012 г. доступен для загрузки по адресу http://phenix.it-sudparis.eu/jct/doc_end_user/documents/9_Geneva/wg11/JCTVC-I1003-v3.zip.
[0005] Методики кодирования видео включают в себя пространственное (внутреннее) предсказание и/или временное (внешнее) предсказание для уменьшения или устранения избыточности, присущей видеопоследовательностям. Для блочного кодирования видео видеослайс (например, видеокадр или часть видеокадра) может разбиваться на видеоблоки, которые также могут называться блоками дерева, единицами дерева кодирования, единицами кодирования (CU) и/или узлами кодирования. Видеоблоки в интракодированном (I) слайсе изображения кодируются с использованием пространственного предсказания относительно эталонных выборок в соседних блоках в том же изображении. Видеоблоки в интеркодированном (P или B) слайсе изображения могут использовать пространственное предсказание относительно эталонных выборок в соседних блоках в том же изображении или временное предсказание относительно эталонных выборок в других эталонных изображениях. Изображения могут называться кадрами, а эталонные изображения могут называться эталонными кадрами.
[0006] Пространственное или временное предсказание приводит к блоку с предсказанием для блока, который будет кодироваться. Остаточные данные представляют собой разности пикселей между исходным блоком, который будет кодироваться, и блоком с предсказанием. Интеркодированный блок кодируется в соответствии с вектором движения, который указывает на блок эталонных выборок, образующих блок с предсказанием, и остаточными данными, указывающими разность между кодированным блоком и блоком с предсказанием. Интракодированный блок кодируется в соответствии с режимом интракодирования и остаточными данными. Для дополнительного сжатия остаточные данные могут быть преобразованы из области пикселей в область преобразования, что приводит к остаточным коэффициентам преобразования, которые затем можно квантовать. Квантованные коэффициенты преобразования, организованные первоначально в двумерный массив, можно сканировать для создания одномерного вектора коэффициентов преобразования, и может применяться энтропийное кодирование для достижения еще большего сжатия.
СУЩНОСТЬ ИЗОБРЕТЕНИЯ
[0007] Вообще, данное раскрытие изобретения описывает методики, связанные с выведением набора эталонных изображений (RPS) и сигнализацией долгосрочных эталонных изображений (LTRP), которые будут включены в RPS, например, в наборе параметров последовательности (SPS), наборе параметров изображения (PPS) или заголовке слайса. Эти методики могут включать в себя обеспечение того, что значения самых младших разрядов (LSB) у значений счетчика последовательности изображений (POC) для LTRP являются неубывающими или невозрастающими. Дополнительно или в качестве альтернативы эти методики могут включать в себя сигнализацию данных для значения POC у LTRP либо в SPS, либо в заголовке слайса и предоставление информации, указывающей, сигнализируются ли данные для значения POC в SPS или в заголовке слайса.
[0008] В одном примере способ кодирования видеоданных включает в себя кодирование заголовка слайса для слайса видеоданных, где заголовок слайса включает в себя синтаксический элемент, указывающий, сигнализируется ли идентифицирующая информация для долгосрочного эталонного изображения явно в заголовке слайса либо выводится из набора параметров последовательности, соответствующего слайсу, и когда синтаксический элемент указывает, что идентифицирующая информация для долгосрочного эталонного изображения сигнализируется явно, кодирование заголовка слайса дополнительно содержит кодирование значения для идентифицирующей информации для долгосрочного эталонного изображения в заголовке слайса.
[0009] В другом примере устройство для кодирования видеоданных включает в себя средство для кодирования заголовка слайса для слайса видеоданных, где заголовок слайса включает в себя синтаксический элемент, указывающий, сигнализируется ли идентифицирующая информация для долгосрочного эталонного изображения явно в заголовке слайса либо выводится из набора параметров последовательности, соответствующего слайсу, и средство для кодирования значения для идентифицирующей информации для долгосрочного эталонного изображения в заголовке слайса, когда синтаксический элемент указывает, что идентифицирующая информация для долгосрочного эталонного изображения сигнализируется явно.
[0010] В другом примере устройство для кодирования видеоданных, содержащее кодировщик видео, может быть выполнено с возможностью: кодирования заголовка слайса для слайса видеоданных, где заголовок слайса включает в себя синтаксический элемент, указывающий, сигнализируется ли идентифицирующая информация для долгосрочного эталонного изображения явно в заголовке слайса либо выводится из набора параметров последовательности, соответствующего слайсу, и когда синтаксический элемент указывает, что идентифицирующая информация для долгосрочного эталонного изображения сигнализируется явно, для кодирования заголовка слайса устройство дополнительно выполнено с возможностью кодирования значения для идентифицирующей информации для долгосрочного эталонного изображения в заголовке слайса.
[0011] В другом примере долговременный компьютерно-читаемый носитель информации имеет сохраненные на нем команды, которые при исполнении предписывают процессору устройства кодировать видео, причем команды предписывают процессору: кодировать заголовок слайса для слайса видеоданных, где заголовок слайса включает в себя синтаксический элемент, указывающий, сигнализируется ли идентифицирующая информация для долгосрочного эталонного изображения явно в заголовке слайса либо выводится из набора параметров последовательности, соответствующего слайсу, и когда синтаксический элемент указывает, что идентифицирующая информация для долгосрочного эталонного изображения сигнализируется явно, для кодирования заголовка слайса устройство дополнительно выполнено с возможностью кодирования значения для идентифицирующей информации для долгосрочного эталонного изображения в заголовке слайса.
[0012] Подробности одного или нескольких примеров излагаются на прилагаемых чертежах и в описании ниже. Другие признаки, цели и преимущества станут очевидны из описания, чертежей и из формулы изобретения.
КРАТКОЕ ОПИСАНИЕ ЧЕРТЕЖЕЙ
[0013] Фиг. 1 - блок-схема, иллюстрирующая примерную систему кодирования и декодирования видео, которая может использовать методики для сигнализации данных для долгосрочных эталонных изображений (LTRP) в наборе параметров последовательности (SPS) или в заголовке слайса.
[0014] Фиг. 2 - блок-схема, иллюстрирующая пример видеокодера, который может реализовать методики для сигнализации данных для LTRP в SPS или в заголовке слайса.
[0015] Фиг. 3 - блок-схема, иллюстрирующая пример видеодекодера, который может реализовать методики для сигнализации данных для LTRP в SPS или в заголовке слайса.
[0016] Фиг. 4 - блок-схема алгоритма, иллюстрирующая процесс для кодирования данных для эталонных изображений в соответствии с одним или несколькими примерами, описанными в данном раскрытии изобретения.
[0017] Фиг. 5 - блок-схема алгоритма, иллюстрирующая процесс для сигнализации данных для LTRP в SPS или в заголовке слайса в соответствии с одним или несколькими примерами, описанными в данном раскрытии изобретения.
ПОДРОБНОЕ ОПИСАНИЕ
[0018] Видеопоследовательность в целом представлена в виде последовательности изображений. Как правило, методики блочного кодирования используются для кодирования каждого из отдельных изображений. То есть каждое изображение разделяется на блоки, и каждый из блоков кодируется отдельно. Кодирование блока видеоданных в целом включает в себя образование предсказанного значения для блока и кодирование остаточного значения, то есть разности между исходным блоком и предсказанным значением. В частности, исходный блок видеоданных включает в себя матрицу значений пикселей, а предсказанное значение включает в себя матрицу предсказанных значений пикселей. Остаточное значение соответствует попиксельным разностям между значениями пикселей исходного блока и предсказанными значениями пикселей.
[0019] Методики предсказания для блока видеоданных в целом категоризируются на интрапредсказание и интерпредсказание. Интрапредсказание, или пространственное предсказание, в целом включает в себя предсказание блока из значений пикселей в соседних, ранее кодированных блоках. Интерпредсказание, или временное предсказание, в целом включает в себя предсказание блока из значений пикселей ранее кодированных изображений.
[0020] Ранее кодированные изображения могут представлять собой изображения, которые отображаются раньше или позже, чем кодируемое изображение. Другими словами, порядок отображения для изображений не обязательно такой же, как порядок декодирования изображений, и соответственно изображения, отображенные раньше или позже, чем текущее кодируемое изображение, могут использоваться в качестве эталона для кодирования блоков текущего изображения.
[0021] Например, кодировщик видео (который является термином, который может относиться к одному или обоим из видеокодера и видеодекодера) включает в себя буфер декодированных изображений (DPB). DPB хранит эталонные изображения, которые являются изображениями, которые могут использоваться для интерпредсказания изображения. Другими словами, кодировщик видео может предсказывать изображение на основе одного или нескольких эталонных изображений, сохраненных в DPB. Вообще, описываются методики, которые предоставляют различные способы для выведения набора эталонных изображений (RPS) и сигнализации долгосрочных эталонных изображений (LTRP), которые будут включены в RPS кодированного изображения для использования при выполнении особенностей интерпредсказания в кодировании видео.
[0022] В задачу видеодекодера также может входить построение списков эталонных изображений, которые указывают, какие эталонные изображения используются для целей интерпредсказания. Два из этих списков эталонных изображений называются соответственно Списком 0 и Списком 1. Видеодекодер сначала применяет методики построения по умолчанию для построения Списка 0 и Списка 1 (например, предварительно сконфигурированные схемы построения для построения Списка 0 и Списка 1). При желании после того, как строятся начальные Список 0 и Список 1, декодер может декодировать синтаксические элементы, когда они присутствуют, которые дают видеодекодеру указание изменить начальные Список 0 и Список 1.
[0023] Видеокодер может сигнализировать синтаксические элементы, которые указывают идентификатор (идентификаторы) эталонных изображений в DPB, и видеокодер также может сигнализировать синтаксические элементы, которые включают в себя индексы в Списке 0, Списке 1 или одновременно в Списке 0 и Списке 1, которые указывают, какое эталонное изображение или изображения использовать для декодирования кодированного блока в текущем изображении. В свою очередь, видеодекодер использует принятый идентификатор, чтобы идентифицировать значение или значения индекса для эталонного изображения или эталонных изображений, перечисленных в Списке 0, Списке 1 или одновременно в Списке 0 и Списке 1. Из значения (значений) индекса, а также из идентификатора (идентификаторов) эталонного изображения или эталонных изображений кодировщик видео извлекает эталонное изображение или эталонные изображения из DPB и декодирует кодированный блок в текущем изображении.
[0024] Видеокодер может сигнализировать RPS в наборе параметров изображения (PPS) или наборе параметров последовательности (SPS), ассоциированном с заголовком слайса в текущем изображении. RPS текущего изображения включает в себя идентификационную информацию для эталонных изображений, которые могут использоваться для предсказания текущего изображения, и изображений, которые могут использоваться для предсказания изображений после текущего изображения в порядке декодирования. Только эталонные изображения в RPS могут включаться в Список 0 или Список 1.
[0025] В потоке двоичных сигналов кодированного видео кодировщик видео (то есть видеокодер или видеодекодер) может использовать два типа значений для обращения к изображениям: значения счетчика последовательности изображений (POC), которые обычно соответствуют порядку вывода изображений, и значения номера кадра (frame_num), которые обычно соответствуют порядку декодирования изображений. Вообще, термины "кадр" и "изображение" могут использоваться взаимозаменяемо. Поэтому значения номера кадра соответствуют порядку декодирования изображений.
[0026] Идентификационная информация для эталонных изображений может включать в себя одно или несколько значений счетчика последовательности изображений (POC). Значения POC указывают порядок, в котором выводятся или отображаются изображения в кодированной видеопоследовательности (то есть порядок отображения изображений). Например, изображение с меньшим значением POC отображается раньше, чем изображение с большим значением POC в одной и той же кодированной видеопоследовательности.
[0027] При кодировании видео данные для изображений, или слайсы изображений, обычно заключаются в единицы на уровне абстракции сети (NAL). Единицы NAL могут включать в себя данные уровня видеокодирования (VCL), например кодированные данные для изображений или слайсов, также называемые единицами NAL VCL, или не относящиеся к VCL данные, например наборы параметров и сообщения с дополнительной информацией расширения (SEI), также называемые не относящимися к VCL единицами NAL. Единицы NAL также включают в себя данные заголовка, которые описывают тип данных, включенных в соответствующие единицы NAL. Например, единицы NAL могут включать в себя nal_ref_flag, указывающий, включает ли в себя единица NAL данные для эталонного изображения. Таким образом, эталонное изображение может быть задано как изображение с nal_ref_flag, равным "1". Эталонное изображение может содержать выборки (то есть значения пикселей), которые могут использоваться для интерпредсказания в процессе декодирования последующих изображений в порядке декодирования.
[0028] В HEVC может существовать больше одного типа эталонного изображения. В качестве одного примера HEVC задает долгосрочное эталонное изображение, которое может быть задано в качестве эталонного изображения, которое помечается как "используемое для долгосрочного эталона". Более того, HEVC также может включать в себя краткосрочные эталонные изображения, хотя методики из данного раскрытия изобретения ориентированы на сигнализацию долгосрочных эталонных изображений. Краткосрочные эталонные изображения выходят за пределы объема данного раскрытия изобретения.
ое
[0029] HEVC описывает методики для сигнализации и использования долгосрочных эталонных изображений (LTRP). Пример традиционной сигнализации LTRP описывается в HEVC WD6. WD6 также описывает принятые методики, связанные с сигнализацией LTRP, включая изменения в сигнализации самых младших разрядов (LSB) у LTRP, семантику синтаксических элементов, связанных с LTRP, и выведение наборов эталонных изображений. Недавние введения в рабочий вариант HEVC также включают в себя методики, которые описывают сигнализацию LTRP в наборах параметров последовательностей (SPS). Введения, связанные с сигнализацией LTRP в SPS, описываются в JCTVC-I0340r2, который введен в HEVC WD7 и описывается под авторством Рамасубраманиан (Ramasubramonian) и др. в документе JCTVC-I0340r2 "Signaling of Long term Reference Pictures in the SPS", 9 заседание JCT-VC из SG16 WP3 ITU-T и JTC1/SC29/WG11 ISO/IEC в Женеве, Швейцария, с 27 апреля 2012 г. по 7 мая 2012 г., который доступен по адресу http://phenix.int-evry.fr/jct/doc_end_user/documents/9_Geneva/wg11/JCTVC-I0340-v3.zip. Подробности сигнализации LTRP в SPS обобщаются ниже.
[0030] В методиках, описанных в JCTVC-I0340r2, SPS может включать в себя синтаксический элемент типа признака, который указывает, сигнализируются ли LTRP (то есть, использует ли кодировщик видео LTRP для интерпредсказания) для кодированной видеопоследовательности. Если LTRP сигнализируются для кодированной видеопоследовательности, то синтаксические элементы активного SPS или заголовка слайса для кодированной видеопоследовательности могут ссылаться на LTRP, используя некоторое количество LSB в POC для LTRP. Использование только LSB в POC для ссылки на LTRP может повысить эффективность кодирования и уменьшить сложность потока двоичных сигналов кодированного видео. Кодировщик видео сигнализирует количество LSB в LTRP, используемое для ссылки на каждое LTRP, в SPS в первом синтаксическом элементе с последующим списком LSB значений POC у LTRP.
[0031] В кодированной видеопоследовательности заголовок слайса может наследовать или ссылаться на одно или несколько LTRP в SPS. В заголовке слайса кодировщик видео сигнализирует синтаксический элемент типа списка, который включает в себя значения LSB у значений POC для LTRP, которые будут унаследованы от SPS. В дополнение к LTRP, унаследованным от SPS, заголовок слайса также может явно сигнализировать LSB у дополнительных LTRP, которые не наследуются от SPS. Заголовок слайса включает в себя синтаксический элемент, который включает в себя список значений LSB у значений POC для LTRP, явно сигнализированных в заголовке слайса.
[0032] В некоторых случаях два LTRP могут иметь одинаковую последовательность LSB POC, создавая неопределенность касательно того, на какое LTRP ссылается конкретный синтаксический элемент LSB POC. Чтобы выяснить, на какое LTRP ссылается синтаксический элемент, заголовок слайса или SPS может сигнализировать некоторые из самых старших разрядов (MSB) для LTRP, если больше одного эталонного изображения в буфере декодированных изображений (DPB) имеет одинаковые LSB. Синтаксический элемент типа признака используется для указания, сигнализируются ли MSB для LTRP, и сигнализация информации MSB для LTRP, если есть, идет непосредственно за этим признаком. В конечном счете кодировщик видео может кодировать некий признак для указания, может ли текущее изображение использовать сигнализированное LTRP в качестве эталонного изображения. Синтаксис и семантика связанных синтаксических элементов в SPS и заголовке слайса описываются ниже. Для тех синтаксических элементов, которые включаются в синтаксическую таблицу, но никакой семантики для них не предоставляется, семантика является такой же, как в HEVC WD6.
[0033] JCTVC-I0340r2 предоставляет синтаксис и семантику SPS, описанные ниже в Таблице 1:
ТАБЛИЦА 1
seq_parameter_set_rbsp( ) {
Дескриптор
…
num_short_term_ref_pic_sets
ue(v)
for( i=0; i<num_short_term_ref_pic_sets; i++)
short_term_ref_pic_set( i )
long_term_ref_pics_present_flag
u(1)
if( long_term_ref_pics_present_flag ) {
num_long_term_ref_pics_sps
ue(v)
for( i=0; i<num_long_term_ref_pics_sps; i++ )
lt_ref_pic_poc_lsb_sps[ i ]
u(v)
}
…
}
[0034] Семантика синтаксических элементов в SPS, измененная документом JCTVC-I0340r2, описывается ниже:
[0035] num_long_term_ref_pics_sps задает количество долгосрочных эталонных изображений, которые задаются в наборе параметров последовательности. Значение num_long_term_ref_pics_sps находится в диапазоне от 0 до 32 включительно.
[0036] lt_ref_pic_poc_lsb_sps[ i ] задает самые младшие разряды счетчика последовательности изображений у i-го долгосрочного эталонного изображения, заданного в наборе параметров последовательности. Количество разрядов, используемое для представления lt_ref_pic_poc_lsb_sps[ i ], равно log2_max_pic_order_cnt_lsb_minus4 + 4.
[0037] JCTVC-I0340r2 также изменил синтаксис и семантику заголовка слайса, как описано ниже в Таблице 2:
ТАБЛИЦА 2
slice_header( ) {
Дескриптор
…
if( IdrPicFlag ) {
idr_pic_id
ue(v)
no_output_of_prior_pics_flag
u(1)
} else {
pic_order_cnt_lsb
u(v)
short_term_ref_pic_set_sps_flag
u(1)
if( !short_term_ref_pic_set_sps_flag )
short_term_ref_pic_set( num_short_term_ref_pic_sets )
else
short_term_ref_pic_set_idx
u(v)
if( long_term_ref_pics_present_flag ) {
num_long_term_pics
ue(v)
if( num_long_term_ref_pics_sps )
num_long_term_sps
ue(v)
for( i=0; i<num_long_term_sps + num_long_term_pics; i++ ) {
if ( i<num_long_term_sps )
long_term_idx_sps[ i ]
ue(v)
else
poc_lsb_lt[ i ]
u(v)
delta_poc_msb_present_flag[ i ]
u(1)
if( delta_poc_msb_present_flag[ i ] )
delta_poc_msb_cycle_lt[ i ]
ue(v)
used_by_curr_pic_lt_flag[ i ]
u(1)
}
}
}
…
}
[0038] Семантика синтаксических элементов в заголовке слайса, измененная документом JCTVC-I0340r2, описывается ниже:
[0039] num_long_term_pics задает количество долгосрочных эталонных изображений, которые нужно включить в набор долгосрочных эталонных изображений в текущем изображении и которые непосредственно сигнализируются в заголовке слайса. Значение num_long_term_pics находится в диапазоне от 0 до sps_max_dec_pic_buffering[ sps_max_temporal_layers_minus1 ] - NumNegativePics[ StRpsIdx ] - NumPositivePics[ StRpsIdx ] - num_long_term_sps включительно. Когда отсутствует, кодировщик видео предполагает значение num_long_term_pics равным 0.
[0040] num_long_term_sps задает количество долгосрочных эталонных изображений, которые задаются в активном наборе параметров последовательности и которые нужно включить в набор долгосрочных эталонных изображений в текущем изображении. Если num_long_term_sps отсутствует, то кодировщик видео предполагает его значение равным 0. Значение num_long_term_sps находится в диапазоне от 0 до Min( num_long_term_ref_pics_sps, max_dec_pic_buffering[ max_temporal_layers_minus1 ] - NumNegativePics[ StRpsIdx ] - NumPositivePics[ StRpsIdx ] - num_long_term_pics ) включительно.
[0041] long_term_idx_sps[ i ] задает индекс в списке долгосрочных эталонных изображений, заданных в активном наборе параметров последовательности, у i-го долгосрочного эталонного изображения, унаследованного от указанного набора параметров последовательности в набор долгосрочных эталонных изображений в текущем изображении. Значение long_term_idx_sps[ i ] находится в диапазоне от 0 до num_long_term_ref_pics_sps - 1 включительно.
[0042] poc_lsb_lt[ i ] задает значение самых младших разрядов значения счетчика последовательности изображений у i-го долгосрочного эталонного изображения, которое включается в набор долгосрочных эталонных изображений в текущем изображении. Длина синтаксического элемента poc_lsb_lt[ i ] равна log2_max_pic_order_cnt_lsb_minus4 + 4 разряда. Для любых значений j и k в диапазоне от num_long_term_sps до num_long_term_pics + num_long_term_sps - 1 включительно, если j меньше k, то poc_lsb_lt[ j ] не должен быть меньше poc_lsb_lt[ k ].
[0043] Переменная PocLsbLt[ i ] выводится следующим образом.
if( i<num_long_term_sps )
PocLsbLt[ i ]=lt_ref_pic_poc_lsb_sps[ long_term_idx_sps[ i ] ]
else
PocLsbLt[ i ]=poc_lsb_lt[ i ].
[0044] То есть для индексов от нуля до num_long_term_sps значение PocLsbLt[ i ] получается с использованием индекса в lt_ref_pic_poc_lsb_sps, который сигнализируется в заголовке слайса. Для индексов PocLsbLt больше num_long_term_sps значение PocLsbLt[ i ] равно LSB POC у LTRP, явно сигнализированных в заголовке слайса.
[0045] delta_poc_msb_present_flag[ i ], равный 1, задает, что присутствует синтаксический элемент delta_poc_msb_cycle_lt[ i ]. delta_poc_msb_present_flag[ i ], равный 0, задает, что delta_poc_msb_cycle_lt[ i ] отсутствует, и поэтому никакие MSB не сигнализируются для заголовка слайса, потому что имеется только одно эталонное изображение в DPB, имеющее LSB, равные PocLsbLt[ i ]. delta_poc_msb_present_flag[ i ] равен 1, когда имеется больше одного эталонного изображения в буфере декодированных изображений с самыми младшими разрядами значения счетчика последовательности изображений, равными PocLsbLt[ i ].
[0046] delta_poc_msb_cycle_lt[ i ] используется для определения значения самых старших разрядов значения счетчика последовательности изображений у i-го долгосрочного эталонного изображения, которое включается в набор долгосрочных эталонных изображений в текущем изображении. Кодировщик видео использует значение delta_poc_msb_cycle_lt[ i ] для определения MSB у i-го LTRP.
[0047] Переменная DeltaPocMSBCycleLt[ i ] выводится, как описано в следующем псевдокоде:
if(i= = 0 | | PocLsbLt[ i−1 ] != PocLsbLt[ i ] )
DeltaPocMSBCycleLt[ i ]=delta_poc_msb_cycle_lt[ i ]
else
DeltaPocMSBCycleLt[ i ] = delta_poc_msb_cycle_lt[ i ] +
DeltaPocMSBCycleLt[ i − 1 ]
24
[0048] Значение DeltaPocMSBCycleLt[ i ] * MaxPicOrderCntLsb + pic_order_cnt_lsb - PocLsbLt[ i ] находится в диапазоне от 1 до 2 - 1 включительно для методик, соответствующих JCTVC-I0340r2.
[0049] used_by_curr_pic_lt_flag[ i ], равный 0, задает, что i-е долгосрочное эталонное изображение, включенное в набор долгосрочных эталонных изображений в текущем изображении, не используется текущим изображением для эталона. Таким образом, на основе значений used_by_curr_pic_lt_flag[ i ] подмножество эталонных изображений, унаследованных от SPS или явно сигнализированных в заголовке слайса, может использоваться текущим изображением для эталона.
[0050] JCTVC-I0340r2 также изменил процесс декодирования для набора эталонных изображений. В соответствии с JCTVC-I0340r2 этот процесс вызывается один раз на изображение после декодирования заголовка слайса, но перед декодированием любой единицы кодирования и перед процессом декодирования для построения списка эталонных изображений слайса, как задано в подпункте 8.3.3 в HEVC WD6. Процесс может привести к пометке одного или нескольких эталонных изображений как "неиспользуемых для эталона". JCTVC-I0340r2 включает в себя следующие модификации в HEVC WD6:
for( i=0, j=0, k=0; i<NumNegativePics[ StRpsIdx ] ; i++ )
if( UsedByCurrPicS0[ StRpsIdx ][ i ] )
PocStCurrBefore[ j++ ] = PicOrderCntVal + DeltaPocS0[ StRpsIdx ][ i ]
else
PocStFoll[ k++ ] = PicOrderCntVal + DeltaPocS0[ StRpsIdx ][ i ]
NumPocStCurrBefore = j
for( i=0, j=0; i<NumPositivePics[ StRpsIdx ]; i++ )
if( UsedByCurrPicS1[ StRpsIdx ][ i ] )
PocStCurrAfter[ j++ ] = PicOrderCntVal + DeltaPocS1[ StRpsIdx ][ i ]
else
PocStFoll[ k++ ] = PicOrderCntVal + DeltaPocS1[ StRpsIdx ][ i ]
NumPocStCurrAfter = j
NumPocStFoll=k (8-5)
for( i=0, j=0, k=0; i<num_long_term_sps + num_long_term_pics; i++ )
if( delta_poc_msb_present_flag[ i ] )
if( used_by_curr_pic_lt_flag[ i ] )
PocLtCurr[ j++ ] = PicOrderCntVal − DeltaPocMSBCycleLt[ i ] * MaxPicOrderCntLsb −
pic_order_cnt_lsb + PocLsbLt[ i ]
else
PocLtFoll[ k++ ] = PicOrderCntVal − DeltaPocMSBCycleLt[ i ] * MaxPicOrderCntLsb − pic_order_cnt_lsb + PocLsbLt[ i ]
else
if( used_by_curr_pic_lt_flag[ i ] )
PocLtCurr[ j++ ] = PocLsbLt[ i ]
else
PocLtFoll[ k++ ] = PocLsbLt[ i ]
NumPocLtCurr = j
NumPocLtFoll = k
[0051] Одна из возможных проблем, ассоциированных с существующим исполнением для сигнализации LTRP, относится к семантике признака delta_poc_msb_present_flag[ i ]. В последней семантике, которая описана выше, delta_poc_msb_present_flag[ i ] равен 1, когда имеется больше одного эталонного изображения в буфере декодированных изображений с самыми младшими разрядами значения счетчика последовательности изображений, равными PocLsbLt[ i ]. Значение delta_poc_msb_present_flag[ i ] зависит, таким образом, от эталонных изображений в буфере декодированных изображений (DPB). Даже если в DPB имеются эталонные изображения, которые помечаются как "неиспользуемые для эталона", то значение delta_poc_msb_present_flag[ i ] тоже будет зависеть от тех изображений. Это может быть нежелательным, так как изображения в DPB, которые помечаются "неиспользуемыми для эталона", присутствуют и лишь ожидают вывода, и больше не используются для эталона. Присутствуют ли такие изображения в DPB, обычно зависит от расписания вывода декодера.
[0052] Нужно читывать, что поток двоичных сигналов, системы и приложения могут применять разные расписания вывода на основе доступной памяти, которая может использоваться для хранения декодированных изображений. Таким образом, подсчет таких изображений может не только излишне повысить вероятность требования, что значение delta_poc_msb_present_flag[ i ] должно быть 1, соответственно требуя больше разрядов для сигнализации LTRP, но также может создать проблемы соответствия и функциональной совместимости потока двоичных сигналов. В качестве примера, когда декодер фактически использует больше памяти DPB, чем минимально необходимая, соответствующий поток двоичных сигналов может оказаться несоответствующим декодеру, так как в DPB может присутствовать больше изображений, ожидающих только вывода и больше не используемых для эталона (по сравнению с декодером, который использует точно минимально необходимую память DPB), и таким образом, декодер может быть даже не способен правильно декодировать поток двоичных сигналов.
[0053] Другая возможная проблема с описанной выше семантикой относится к сигнализации long_term_idx_sps[ i ]. Семантика, которая описана выше, не ограничивает порядок, в котором сигнализируются LTRP, унаследованные от SPS. Это отсутствие ограничения упорядочения также может быть неэффективным, потому что кодировщик видео может использовать больше разрядов, чем необходимо для сигнализации информации, например MSB и LSB у LTRP. В качестве примера предположим, что в SPS сигнализируются MaxPicOrderCntLsb, равный 256, и два LSB - 0 и 10. Для изображения с POC 2560 предположим, что кодировщик видео должен сигнализировать три LTRP, имеющие POC 0, 10 и 256 соответственно. Для изображения с POC 0 и 256 видеокодеру, соответствующему вышеописанным методикам сигнализации LTRP, пришлось бы сигнализировать циклы MSB для обоих LTRP. Однако методики из данного раскрытия изобретения могут повысить эффективность такой сигнализации. В частности, некоторые неэффективности демонстрируются с помощью Таблицы 3 ниже. А именно, Таблица 3 предоставляет пример неэффективной сигнализации LTRP, унаследованных от соответствующего SPS. В этом примере "i" описывает конкретное долгосрочное эталонное изображение, POC LTRP описывает значение POC у соответствующего долгосрочного эталонного изображения, PocLsbLt описывает самые младшие разряды (LSB) у значения POC для долгосрочного эталонного изображения, унаследованного от SPS, delta_poc_msb_present_flag указывает, сигнализируется ли delta_poc_msb_cycle_lt, и delta_poc_msb_cycle_lt используется для определения значения самых старших разрядов (MSB) у значения POC для долгосрочного эталонного изображения, когда сигнализируется.
ТАБЛИЦА 3
i
0
1
2
LTRP POC
0
10
256
PocLsbLt
0
10
0
delta_poc_msb_present_flag
1
0
1
delta_poc_msb_cycle_lt
10
-
9
[0054] Данное раскрытие изобретения описывает методики для сигнализации идентифицирующей информации для долгосрочных эталонных изображений, которые в некоторых случаях могут обеспечить преимущества по сравнению с описанными выше методиками сигнализации. В некоторых примерах методики из данного раскрытия изобретения могут уменьшить количество разрядов, используемых для сигнализации синтаксических элементов, включающих в себя MSB у LTRP. Одним более подходящим способом сигнализации изображений может быть задание порядка кодирования изображений в LTRP, то есть порядка, в котором LTRP кодируются в poc_lsb_lt [ i ], так что LSB у LTRP являются либо неубывающими (либо невозрастающими, практически с аналогичным влиянием на производительность), как описано в Таблице 4. Кодирование LSB у LTRP в неубывающем или невозрастающем порядке в некоторых примерах может привести к тому, что кодировщик видео сигнализирует меньше разрядов MSB. Упорядочивая LTRP в невозрастающем или неубывающем порядке LSB, кодировщик видео будет последовательно сигнализировать любые LTRP с равными LSB в порядке кодирования изображений у синтаксического элемента poc_lsb_lt.
[0055] Если два LTRP имеют равные значения LSB, то кодировщик видео может кодировать данные, представляющие MSB по меньшей мере у одного из двух LTRP (например, синтаксический элемент delta_poc_msb_cycle_lt). Кодировщик видео может кодировать данные, представляющие MSB, в виде разности значения MSB у второго LTRP и MSB у первого LTRP. Чтобы определить значение MSB у LTRP из сигнализированных значений delta_poc_msb_cycle_lt[ i ], кодировщик видео может вычислить переменную DeltaPocMSBCycleLt[ i ] как сумму delta_poc_msb_cycle_lt [ i ] и delta_poc_msb_cycle_lt [ i - 1]. В случае, где нет предыдущего LTRP в порядке кодирования изображений, кодировщик видео может сигнализировать разность MSB у LTRP и MSB у текущего изображения в значении синтаксического элемента delta_poc_msb_cycle_lt.
[0056] В качестве примера, используя предыдущие методики для сигнализации MSB LTRP, проиллюстрированные в Таблице 3, кодировщик видео может сигнализировать LTRP со значением POC, равным 0, в виде первого LTRP в порядке подсчета изображений (i = 0), и значение delta_poc_msb_cycle_lt в виде 10 для POC 0. Кодировщик видео может сигнализировать LTRP со значением POC 256 в виде третьего LTRP в порядке подсчета изображений (то есть i = 2), и значение delta_poc_msb_cycle_lt в виде 9 для LTRP.
[0057] Тогда как методики кодирования видео, описанные в Таблице 3, сигнализируют 10 в качестве значения delta_poc_msb_cycle_lt для POC 0, кодировщик видео, соответствующий методикам из данного раскрытия изобретения, может сигнализировать данные, которые могут использоваться для восстановления MSB у LTRP в виде смещения, которое может быть разностью между значением цикла MSB у POC текущего LTRP и MSB у POC предыдущего LTRP. Как проиллюстрировано в Таблице 4, кодировщик видео может ограничить порядок подсчета изображений неубывающим порядком LSB у каждого LTRP, которое унаследовано от SPS. Результатом этого упорядочения является то, что LTRP с POC 256, POC 0, которые оба имеют равные 0 LSB, упорядочиваются первым и вторым соответственно, а LTRP с POC 10 упорядочивается третьим в порядке подсчета изображений. Кодировщик видео сигнализирует значение цикла MSB у LTRP с POC 256 в виде 9, потому что это первое LTRP в порядке подсчета изображений, а значение цикла MSB у второго LTRP в виде разности между MSB текущего LTRP (10) и MSB предыдущего LTRP (9), то есть 10 - 9 = 1, поэтому кодировщик видео сигнализирует 1 в качестве значения для delta_poc_msb_cycle_lt[ i ]. Сигнализация значения 1 может потребовать меньше разрядов по сравнению с сигнализацией значения 10, приводя в этом примере к повышению эффективности кодирования для сигнализации синтаксического элемента delta_poc_msb_cycle_lt. Таким образом, методики из данного раскрытия изобретения, описанные в Таблице 4, могут уменьшить количество разрядов, необходимых для сигнализации MSB для значений POC у LTRP, унаследованных от соответствующего SPS для кодированной видеопоследовательности.
ТАБЛИЦА 4
i
0
1
2
LTRP POC
256
0
10
PocLsbLt
0
0
10
delta_poc_msb_present_flag
1
1
0
delta_poc_msb_cycle_lt
9
1
-
[0058] Как обсуждалось выше, чтобы устранить отмеченные выше проблемы, ассоциированные с сигнализацией MSB у LTRP, данное раскрытие изобретения описывает различные методики для сигнализации долгосрочных эталонных изображений (LTRP), которая будет включена в SPS кодированного изображения, и индексирования LTRP в заголовке слайса последовательности кодированных изображений либо явно, путем сигнализации LSB у значения POC у LTRP в заголовке слайса, либо иным образом путем сигнализации в заголовке слайса индекса к записи в списке LSB у LTRP в SPS, который определяет LSB POC у LTRP. Данное раскрытие изобретения также описывает модификации в семантике delta_poc_msb_present_flag[ i ], которые могут применяться для обеспечения, что значение признака зависит только от изображений, которые помечаются как "используемые для эталона". Эти и другие методики подробнее описываются ниже.
[0059] Фиг. 1 - блок-схема, иллюстрирующая примерную систему 10 кодирования и декодирования видео, которая может использовать методики для сигнализации данных для LTRP в SPS или в заголовке слайса. Как показано на фиг. 1, система 10 включает в себя устройство-источник 12, которое предоставляет кодированные видеоданные, которые позднее будут декодированы устройством-адресатом 14. В частности, устройство-источник 12 предоставляет видеоданные устройству-адресату 14 посредством компьютерно-читаемого носителя 16. Устройство-источник 12 и устройство-адресат 14 могут быть выполнены в виде любого из широкого диапазона устройств, включающего в себя настольные компьютеры, блокнотные (то есть переносные) компьютеры, планшетные компьютеры, телевизионные приставки, телефонные трубки, например так называемые "интеллектуальные" телефоны, так называемые "интеллектуальные" планшеты, телевизоры, камеры, устройства отображения, цифровые мультимедийные проигрыватели, игровые приставки, устройство для потокового видео или т.п. В некоторых случаях устройство-источник 12 и устройство-адресат 14 могут быть оборудованы для беспроводной связи.
[0060] Устройство-адресат 14 может принимать кодированные видеоданные, которые будут декодированы, посредством компьютерно-читаемого носителя 16. Компьютерно-читаемый носитель 16 может быть выполнен в виде любого типа носителя или устройства, допускающего перемещение кодированных видеоданных от устройства-источника 12 к устройству-адресату 14. В одном примере компьютерно-читаемый носитель 16 может быть выполнен в виде средства связи, чтобы дать устройству-источнику 12 возможность передавать кодированные видеоданные непосредственно к устройству-адресату 14 в реальном масштабе времени. Кодированные видеоданные могут модулироваться в соответствии со стандартом связи, например протоколом беспроводной связи, и передаваться устройству-адресату 14. Средство связи может быть выполнено в виде любого средства беспроводной или проводной связи, например радиочастотного (RF) спектра или одной или нескольких физических линий передачи. Средство связи может образовывать часть пакетной сети, например локальной сети, региональной сети или глобальной сети, такой как Интернет. Средство связи может включать в себя маршрутизаторы, коммутаторы, базовые станции или любое другое оборудование, которое может быть полезно для упрощения связи от устройства-источника 12 к устройству-адресату 14.
[0061] В некоторых примерах кодированные данные могут выводиться из интерфейса 22 вывода в запоминающее устройство. Аналогичным образом к кодированным данным можно обращаться из запоминающего устройства с помощью интерфейса ввода. Запоминающее устройство может включать в себя любой из ряда распределенных или локально доступных носителей информации, например жесткий диск, диски Blu-ray, DVD, CD-ROM, флэш-память, энергозависимое или энергонезависимое запоминающее устройство либо любые другие подходящие цифровые носители информации для хранения кодированных видеоданных. В дополнительном примере запоминающее устройство может соответствовать файловому серверу или другому промежуточному запоминающему устройству, которое может хранить кодированное видео, сформированное устройством-источником 12. Устройство-адресат 14 может обращаться к сохраненным видеоданным из запоминающего устройства посредством потоковой передачи или загрузки. Файловый сервер может быть любым типом сервера, допускающим хранение кодированных видеоданных и передачу тех кодированных видеоданных устройству-адресату 14. Примерные файловые серверы включают в себя веб-сервер (например, для веб-сайта), FTP-сервер, сетевые устройства хранения (NAS) или локальный накопитель на дисках. Устройство-адресат 14 может обращаться к кодированным видеоданным посредством любого стандартного информационного соединения, включая Интернет-соединение. Это соединение может включать в себя радиоканал (например, соединение Wi-Fi), проводное соединение (например, DSL, кабельный модем и т.п.) или сочетание их обоих, которое подходит для обращения к кодированным видеоданным, сохраненным на файловом сервере. Передача кодированных видеоданных из запоминающего устройства может быть потоковой передачей, загрузкой или их сочетанием.
[0062] Методики из данного раскрытия изобретения не обязательно ограничиваются беспроводными приложениями или настройками. Методики могут применяться к кодированию видео в поддержку любого из ряда мультимедийных приложений, таких как эфирные телевизионные передачи, кабельные телевизионные передачи, спутниковые телевизионные передачи, передачи потокового видео по Интернету, например динамическая адаптивная потоковая передача по HTTP (DASH), цифровое видео, которое кодируется на носителе информации, декодирование цифрового видео, сохраненного на носителе информации, или других приложений. В некоторых примерах система 10 может конфигурироваться для поддержки однонаправленной или двунаправленной передачи видео для поддержки таких приложений, как потоковая передача видео, воспроизведение видео, телевизионное вещание и/или видеотелефония.
[0063] В примере из фиг. 1 устройство-источник 12 включает в себя источник 18 видео, видеокодер 20 и интерфейс 22 вывода. Устройство-адресат 14 включает в себя интерфейс 28 ввода, видеодекодер 30 и устройство 32 отображения. В соответствии с данным раскрытием изобретения видеокодер 20 в устройстве-источнике 12 может конфигурироваться для применения методик для сигнализации данных для LTRP в SPS. В других примерах устройство-источник и устройство-адресат могут включать в себя другие компоненты или компоновки. Например, устройство-источник 12 может принимать видеоданные из внешнего источника 18 видео, например внешней камеры. Также устройство-адресат 14 может взаимодействовать с внешним устройством отображения вместо включения в себя встроенного устройства отображения.
[0064] Проиллюстрированная система 10 из фиг. 1 является всего лишь одним примером. Методики для сигнализации данных для LTRP в SPS могут выполняться любым устройством кодирования и/или декодирования цифрового видео. Хотя методики из данного раскрытия изобретения выполняются, как правило, устройством кодирования видео, методики также могут выполняться видеокодером/декодером, обычно называемым "кодеком". Кроме того, методики из данного раскрытия изобретения также могут выполняться препроцессором видео. Устройство-источник 12 и устройство-адресат 14 являются всего лишь примерами таких устройств кодирования, в которых устройство-источник 12 формирует кодированные видеоданные для передачи устройству-адресату 14. В некоторых примерах устройства 12, 14 могут работать практически симметричным образом, так что каждое из устройств 12, 14 включает в себя компоненты кодирования и декодирования видео. Поэтому система 10 может поддерживать однонаправленную или двунаправленную передачу видео между видеоустройствами 12, 14, например для потоковой передачи видео, воспроизведения видео, телевизионного вещания или видеотелефонии.
[0065] Источник 18 видео в устройстве-источнике 12 может включать в себя устройство видеозахвата, например видеокамеру, видеоархив, содержащий ранее захваченное видео, и/или интерфейс источника видеосигнала для приема видео от поставщика видеоконтента. В качестве дополнительной альтернативы источник 18 видео может формировать данные на основе компьютерной графики в качестве исходного видео, или сочетание "реального" видео, архивного видео и сформированного компьютером видео. В некоторых случаях, если источником 18 видео является видеокамера, то устройство-источник 12 и устройство-адресат 14 могут образовывать так называемые камерофоны или видеотелефоны. Однако, как упоминалось выше, описанные в данном раскрытии изобретения методики могут быть применимы к кодированию видео в целом и могут применяться к беспроводным и/или проводным приложениям. В каждом случае захваченное, предварительно захваченное или сформированное компьютером видео может кодироваться видеокодером 20. Кодированная видеоинформация затем может выводиться с помощью интерфейса 22 вывода на компьютерно-читаемый носитель 16.
[0066] Компьютерно-читаемый носитель 16 может включать в себя кратковременные носители, например беспроводную широковещательную или проводную сетевую передачу, или носители информации (то есть долговременные носители информации), например жесткий диск, флеш-накопитель, компакт-диск, цифровой видеодиск, диск Blu-ray или другие компьютерно-читаемые носители. В некоторых примерах сетевой сервер (не показан) может принимать кодированные видеоданные от устройства-источника 12 и предоставлять кодированные видеоданные устройству-адресату 14, например, посредством сетевой передачи. Аналогичным образом вычислительное устройство из оборудования по производству носителей, например оборудования по штамповке оптических дисков, может принять кодированные видеоданные от устройства-источника 12 и произвести диск, содержащий кодированные видеоданные. Поэтому в различных примерах компьютерно-читаемый носитель 16 может подразумеваться включающим в себя один или несколько компьютерно-читаемых носителей различных видов.
[0067] Интерфейс 28 ввода в устройстве-адресате 14 принимает информацию с компьютерно-читаемого носителя 16. Информация с компьютерно-читаемого носителя 16 может включать в себя синтаксическую информацию, заданную видеокодером 20, которая также используется видеодекодером 30, которая включает в себя синтаксические элементы, которые описывают характеристики и/или обработку блоков и других кодированных единиц, например GOP. Устройство 32 отображения отображает пользователю декодированные видеоданные и может быть выполнено в виде любого из ряда устройств отображения, таких как электронно-лучевая трубка (CRT), жидкокристаллический дисплей (LCD), плазменный дисплей, дисплей на органических светоизлучающих диодах (OLED) или другой тип устройства отображения.
[0068] Видеокодер 20 и видеодекодер 30 могут работать в соответствии с неким стандартом кодирования видео, например стандартом Высокоэффективного кодирования видео (HEVC), в настоящее время находящимся в разработке, и могут соответствовать Экспериментальной модели HEVC (HM). В качестве альтернативы видеокодер 20 и видеодекодер 30 могут работать в соответствии с другими собственными или промышленными стандартами, например стандартом H.264 ITU-T, в качестве альтернативы называемым MPEG-4, часть 10, Улучшенное кодирование видео (AVC), или расширениями таких стандартов. Однако методики в данном раскрытии изобретения не ограничиваются никаким конкретным стандартом кодирования. Другие примеры стандартов кодирования видео включают в себя MPEG-2 и H.263 ITU-T. Хотя и не показано на фиг. 1, в некоторых особенностях видеокодер 20 и видеодекодер 30 могут быть объединены со звуковым кодером и декодером и могут включать в себя подходящие модули мультиплексирования-демультиплексирования или другие аппаратные средства и программное обеспечение, чтобы справляться с кодированием звука и видео в общем потоке данных или в отдельных потоках данных. Если применимо, то модули мультиплексирования-демультиплексирования могут соответствовать протоколу мультиплексора H.223 ITU или другим протоколам, например протоколу дейтаграмм пользователя (UDP).
[0069] Стандарт H.264/MPEG-4 (AVC) ITU-T был сформулирован Экспертной группой в области кодирования видео (VCEG) ITU-T вместе с Экспертной группой по движущимся изображениям (MPEG) ISO/IEC как результат коллективного сотрудничества, известного как Объединенная команда по видео (JVT). В некоторых особенностях описанные в данном раскрытии изобретения методики могут применяться к устройствам, которые в целом соответствуют стандарту H.264. Стандарт H.264 описывается Исследовательской группой ITU-T в Рекомендации H.264 ITU-T, Улучшенное кодирование видео для универсальных аудиовизуальных служб, датирован мартом 2005 года и в этом документе может называться стандартом H.264 или спецификацией H.264 либо стандартом или спецификацией H.264/AVC. Объединенная команда по видео (JVT) продолжает работать над расширениями к H.264/MPEG-4 AVC.
[0070] Видеокодер 20 и видеодекодер 30 могут быть реализованы в виде любой из ряда подходящих схем кодера, например одного или нескольких микропроцессоров, цифровых процессоров сигналов (DSP), специализированных интегральных схем (ASIC), программируемых пользователем вентильных матриц (FPGA), дискретной логики, программного обеспечения, аппаратных средств, микропрограммного обеспечения или любых их сочетаний. Когда методики реализуются частично в программном обеспечении, устройство может хранить команды для программного обеспечения на подходящем долговременном компьютерно-читаемом носителе и исполнять команды на аппаратных средствах, использующих один или несколько процессоров, для выполнения методик из данного раскрытия изобретения. Каждый из видеокодера 20 и видеодекодера 30 может включаться в один или несколько кодеров или декодеров, любой из которых может встраиваться как часть объединенного кодера/декодера (кодека) в соответствующем устройстве.
[0071] JCT-VC работает над развитием стандарта HEVC. Работа по стандартизации HEVC основывается на развивающейся модели устройства кодирования видео, называемой Экспериментальной моделью HEVC (HM). HM предполагает несколько дополнительных возможностей у устройств кодирования видео по сравнению с существующими устройствами, соответствующими, например, H.264/AVC ITU-T. Например, тогда как H.264 предоставляет девять режимов кодирования с интрапредсказанием, HM может предоставить целых тридцать три режима кодирования с интрапредсказанием.
[0072] Вообще, рабочая модель HM описывает, что видеокадр или изображение можно разделить на последовательность блоков дерева или наибольших единиц кодирования (LCU, также называемых "единицами дерева кодирования"), которые включают в себя выборки яркости и цветности. Синтаксические данные в потоке двоичных сигналов могут задавать размер для LCU, которая является наибольшей единицей кодирования в показателях количества пикселей. Слайс включает в себя некоторое количество последовательных блоков дерева в порядке кодирования. Видеокадр или изображение может разбиваться на один или несколько слайсов. Каждый блок дерева можно разделить на единицы кодирования (CU) в соответствии с квадродеревом. Обычно структура данных квадродерева включает в себя один узел на CU, причем корневой узел соответствует блоку дерева. Если CU разделяется на четыре суб-CU, то узел, соответствующий CU, включает в себя четыре листа, каждый из которых соответствует одной из суб-CU.
[0073] Соответственно, видеокодер 20 может кодировать последовательность LCU, образующую слайс изображения. Кроме того, видеокодер 20 может использовать методики из данного раскрытия изобретения для кодирования заголовка слайса для слайса. Заголовок слайса может включать в себя данные, которые могут использоваться во время декодирования слайса. Например, заголовок слайса может включать в себя данные, указывающие эталонные изображения, которые могут использоваться во время декодирования видеоданных, включенных в слайс. В соответствии с методиками из данного раскрытия изобретения, видеокодер 20 может кодировать данные заголовка слайса, которые указывают, кодируются ли данные, представляющие идентифицирующую информацию для конкретного долгосрочного эталонного изображения, явно в заголовке слайса, либо наследуется ли такая идентифицирующая информация от набора параметров последовательности (SPS), соответствующего последовательности изображений, включающей в себя изображение, в котором встречается слайс.
[0074] Также видеодекодер 30 может использовать методики из данного раскрытия изобретения для декодирования заголовка слайса, что может включать в себя декодирование данных, указывающих, кодируется ли идентифицирующая информация для конкретного долгосрочного эталонного изображения явно в заголовке слайса, либо наследуется ли идентифицирующая информация от SPS, соответствующего слайсу. Если заголовок слайса указывает, что идентифицирующая информация кодируется явно, то видеодекодер 30 может декодировать идентифицирующую информацию для долгосрочного эталонного изображения из заголовка слайса. Однако, если заголовок слайса указывает, что идентифицирующая информация унаследована от SPS, то видеодекодер 30 может извлечь идентифицирующую информацию для SPS из SPS. Ниже подробнее объясняются методики для кодирования заголовка слайса.
[0075] Каждый узел в структуре данных квадродерева может предоставлять синтаксические данные для соответствующей CU. Например, узел в квадродереве может включать в себя признак разделения, указывающий, разделяется ли соответствующая узлу CU на суб-CU. Синтаксические элементы для CU можно задать рекурсивно, и они могут зависеть от того, разделяется ли CU на суб-CU. Если CU больше не разделяется, то она называется листовой CU. В данном раскрытии изобретения четыре суб-CU в листовой CU также будут называться листовыми CU, даже если отсутствует явное разделение исходной листовой CU. Например, если CU с размером 16×16 больше не разделяется, то четыре суб-CU 8x8 также будут называться листовыми CU, хотя CU 16×16 никогда не разделялась.
[0076] CU имеет сходную с макроблоком из стандарта H.264 цель за исключением того, что CU не имеет отличия в размере. Например, блок дерева можно разделить на четыре дочерних узла (также называемых суб-CU), и каждый дочерний узел, в свою очередь, может быть родительским узлом и разделяться на четыре других дочерних узла. Конечный, неразделенный дочерний узел, называемый листом квадродерева, содержит узел кодирования, также называемый листовой CU. Синтаксические данные, ассоциированные с кодированным потоком двоичных сигналов, могут задавать максимальное количество раз, которое можно делить блок дерева, называемое максимальной глубиной CU, а также могут задавать минимальный размер узлов кодирования. Соответственно, поток двоичных сигналов также может задавать наименьшую единицу кодирования (SCU). Данное раскрытие изобретения использует термин "блок", чтобы ссылаться на любую из CU, PU или TU применительно к HEVC, или на аналогичные структуры данных применительно к другим стандартам (например, макроблоки и их субблоки в H.264/AVC).
[0077] CU включает в себя узел кодирования и единицы предсказания (PU) и единицы преобразования (TU), ассоциированные с узлом кодирования. Размер CU соответствует размеру узла кодирования и должен иметь квадратную форму. Размер CU может варьироваться от 8×8 пикселей до размера блока дерева с максимальным количеством 64×64 пикселей или больше. Каждая CU может содержать одну или несколько PU и одну или несколько TU. Синтаксические данные, ассоциированные с CU, могут описывать, например, разбиение CU на одну или несколько PU. Режимы разбиения могут отличаться между тем, кодируется ли CU в режиме пропуска или в прямом режиме, режиме интрапредсказания или режиме интерпредсказания. PU могут разбиваться, чтобы иметь неквадратную форму. Синтаксические данные, ассоциированные с CU, также могут описывать, например, разбиение CU на одну или несколько TU в соответствии с квадродеревом. TU может иметь квадратную или неквадратную (например, прямоугольную) форму.
[0078] Стандарт HEVC допускает преобразования в соответствии с TU, которые могут отличаться для разных CU. TU обычно имеют размер на основе размера PU в данной CU, заданной для разделенной LCU, хотя это не всегда может быть так. TU обычно имеют такой же размер или меньше, чем PU. В некоторых примерах остаточные выборки, соответствующие CU, можно подразделить на меньшие единицы, используя структуру квадродерева, известную как "остаточное квадродерево" (RQT). Листы RQT могут называться единицами преобразования (TU). Значения разности пикселей, ассоциированные с TU, можно преобразовать для создания коэффициентов преобразования, которые можно квантовать.
[0079] Листовая CU может включать в себя одну или несколько единиц предсказания (PU). Обычно PU представляет пространственную область, соответствующую всей или части соответствующей CU, и может включать в себя данные для извлечения эталонной выборки для PU. Кроме того, PU включает в себя данные, связанные с предсказанием. Например, когда PU кодируется в интрарежиме, данные для PU могут включаться в остаточное квадродерево (RQT), которое может включать в себя данные, описывающие режим интрапредсказания для TU, соответствующей PU. В качестве другого примера, когда PU кодируется в интеррежиме, PU может включать в себя данные, задающие один или несколько векторов движения для PU. Данные, задающие вектор движения для PU, могут описывать, например, горизонтальную составляющую вектора движения, вертикальную составляющую вектора движения, разрешение для вектора движения (например, точность в одну четверть пикселя или точность в одну восьмую пикселя), эталонное изображение, на которое указывает вектор движения, и/или список эталонных изображений (например, Список 0, Список 1 или Список C) для вектора движения.
[0080] Листовая CU, имеющая одну или несколько PU, также может включать в себя одну или несколько единиц преобразования (TU). Единицы преобразования можно задавать с использованием RQT (также называемого структурой квадродерева TU), как обсуждалось выше. Например, признак разделения может указывать, разделяется ли листовая CU на четыре единицы преобразования. Затем каждую единицу преобразования можно дальше разделить на дополнительные суб-TU. Когда TU больше не разделяется, она может называться листовой TU. Как правило, для интракодирования все листовые TU, принадлежащие листовой CU, совместно используют один и тот же режим интрапредсказания. То есть один и тот же режим интрапредсказания применяется, как правило, для вычисления предсказанных значений для всех TU в листовой CU. Для интракодирования видеокодер может вычислять остаточное значение для каждой листовой TU, использующей режим интрапредсказания, в качестве разности между частью CU, соответствующей TU, и исходным блоком. TU не обязательно ограничивается размером PU. Таким образом, TU могут быть больше или меньше PU. Для интракодирования PU может соотноситься с соответствующей листовой TU для одной и той же CU. В некоторых примерах максимальный размер листовой TU может соответствовать размеру соответствующей листовой CU.
[0081] Кроме того, TU в листовых CU также могут ассоциироваться с соответствующими структурами данных квадродерева, называемыми остаточными квадродеревьями (RQT). То есть листовая CU может включать в себя квадродерево, указывающее, как листовая CU разбивается на TU. Корневой узел квадродерева TU, как правило, соответствует листовой CU, тогда как корневой узел квадродерева CU, как правило, соответствует блоку дерева (или LCU). TU в RQT, которые не разделяются, называются листовыми TU. Вообще, данное раскрытие изобретения использует термины "CU" и "TU", чтобы ссылаться на листовую CU и листовую TU соответственно, пока не указано иное.
[0082] Видеопоследовательность, как правило, включает в себя последовательность видеокадров или изображений. Группа изображений (GOP), как правило, содержит последовательность из одного или нескольких видеоизображений. GOP может включать в себя синтаксические данные в заголовке GOP, заголовке одного или нескольких изображений или где-либо в другом месте, которые описывают количество изображений, включенных в GOP. Каждый слайс изображения может включать в себя синтаксические данные слайса, которые описывают режим кодирования для соответствующей слайса. Видеокодер 20 обычно действует на видеоблоки в отдельных слайсах видео, чтобы кодировать видеоданные. Видеоблок может соответствовать узлу кодирования в CU. Видеоблоки могут иметь фиксированные или изменяющиеся размеры и могут отличаться по размеру в соответствии с заданным стандартом кодирования.
[0083] В качестве примера HM поддерживает предсказание в различных размерах PU. Предполагая, что размер конкретной CU равен 2N×2N, HM поддерживает интрапредсказание в размерах PU 2N×2N или N×N и интерпредсказание в симметричных размерах PU 2N×2N, 2N×N, N×2N или N×N. HM также поддерживает асимметричное разбиение для интерпредсказания в размерах PU 2N×nU, 2N×nD, nL×2N и nR×2N. При асимметричном разбиении одно направление CU не разбивается, тогда как другое направление разбивается на 25% и 75%. Часть CU, соответствующая разбиению 25%, указывается с помощью "n" с последующим указанием "Сверху", "Снизу", "Слева" или "Справа". Таким образом, например, "2N×nU" ссылается на CU 2N×2N, которая разбивается горизонтально с PU 2N×0,5N сверху и PU 2N×1,5N снизу.
[0084] В данном раскрытии изобретения "N×N" и "N на N" могут использоваться взаимозаменяемо, чтобы ссылаться на размеры пикселя видеоблока в показателях вертикального и горизонтального размеров, например 16×16 пикселей или 16 на 16 пикселей. Обычно блок 16×16 будет иметь 16 пикселей в вертикальном направлении (y = 16) и 16 пикселей в горизонтальном направлении (x = 16). Также блок N×N, как правило, имеет N пикселей в вертикальном направлении и N пикселей в горизонтальном направлении, где N представляет неотрицательное целое значение. Пиксели в блоке могут располагаться в строках и столбцах. Кроме того, блокам не обязательно иметь такое же количество пикселей в горизонтальном направлении, как и в вертикальном направлении. Например, блоки могут содержать N×M пикселей, где M не обязательно равно N.
[0085] Как отмечалось выше, видеокодер 20 и видеодекодер 30 могут конфигурироваться для интер- или интрапредсказания PU в CU. Обычно интеркодирование включает в себя предсказание относительно одного или нескольких эталонных изображений. Эталонное изображение может быть предыдущим изображением во временном порядке, будущим изображением или сочетанием предсказаний из двух или более ранее кодированных изображений. Видеокодер 20 или видеокодер 20 может хранить эталонные изображения в буфере декодированных изображений (DPB). Видеокодер 20 может сигнализировать значение единицы NAL, которое указывает, что изображение нужно использовать в качестве эталонного изображения, помечая изображение как краткосрочное эталонное изображение или долгосрочное эталонное изображение. Видеокодер 20 и видеодекодер 30 хранят долгосрочные и краткосрочные эталонные изображения в списке эталонных изображений. Видеокодер 20 или видеокодер 20 может хранить долгосрочные эталонные изображения в DPB более длительное время, чем краткосрочные эталонные изображения, и поэтому они могут использоваться в качестве эталонных изображений для большего количества изображений, чем краткосрочные эталонные изображения.
[0086] Видеокодер 20 или видеодекодер 30 может удалять эталонные изображения из DPB разными способами. Когда эталонные изображения уже не нужны, видеокодер 20 или видеодекодер 30 может пометить эталонное изображение как уже не нужное для эталона, и в конечном счете может удалить из DPB изображения, уже не нужные для эталона, например, путем вывода эталонного изображения для отображения или путем отбрасывания эталонного изображения, если эталонное изображение уже выведено для отображения. Если DPB заполнен, то видеокодер 20 или видеодекодер 30 может удалить самое старое краткосрочное эталонное изображение.
[0087] В дополнение к хранению эталонных изображений в DPB видеокодер 20 или видеодекодер 30 хранит эталонные изображения в одном из двух списков эталонных изображений, называемых списком 0 и списком 1. Эталонные изображения, сохраненные в списке 0 и списке 1, которые используются для предсказания конкретного изображения, могут называться набором эталонных изображений (RPS). Изображения, сохраненные в списке 0 и списке 1, могут поступать из разных источников, например SPS и PPS. Как описано выше, заголовок слайса также может явно сигнализировать изображения, которые будут включены в RPS, который задается в качестве набора эталонных изображений, ассоциированного с изображением, состоящим из всех эталонных изображений, которые находятся перед ассоциированным изображением в порядке декодирования, которые могут использоваться для интерпредсказания блоков в ассоциированном изображении или любом изображении после ассоциированного изображения в порядке декодирования, например, до следующего изображения с мгновенным обновлением декодирования (IDR), или изображения с доступом с разорванной связью (BLA). Другими словами, эталонные изображения в наборе эталонных изображений могут требовать следующих характеристик: (1) они все находятся перед текущим изображением в порядке декодирования, и (2) они могут использоваться для интерпредсказания текущего изображения и/или интерпредсказания любого изображения после текущего изображения в порядке декодирования, а в некоторых примерах - до следующего IDR-изображения или BLA-изображения.
[0088] Видеокодер 20 или видеодекодер 30 может вывести RPS, и после такого выведения может построить списки эталонных изображений, например список 0 и список 1. Видеокодер 20 или видеодекодер 30 может использовать эталонные изображения от списка 0 при предсказании p-слайса и эталонные изображения из списка 0 или списка 1 при предсказании слайса с двунаправленным предсказанием. Только эталонные изображения в RPS могут быть возможными эталонными изображениями, которые используются для построения списков эталонных изображений.
[0089] Чтобы построить набор эталонных изображений, кодировщик видео может построить множество подмножеств эталонных изображений. WD 9 описывает пять подмножеств эталонных изображений, которые строит видеодекодер. Объединение подмножеств эталонных изображений может образовывать набор эталонных изображений. Например, видеокодер 20 может явно сигнализировать в кодированном потоке двоичных сигналов значения, которые позволяют видеодекодеру определить идентификаторы для эталонных изображений, которые включаются в набор эталонных изображений. Например, идентификаторами эталонных изображений могут быть счетчики последовательности изображений. Каждое изображение ассоциируется с одним значением POC. Значение POC у изображения указывает порядок вывода или порядок отображения соответствующего изображения относительно предыдущего IDR-изображение в порядке декодирования, а в некоторых других альтернативах указывает положение ассоциированного изображения в порядке вывода относительно положений порядка вывода у других изображений в той же кодированной видеопоследовательности. Например, в рамках кодированной видеопоследовательности изображение с меньшим значением POC выводится или отображается раньше изображения с большим значением POC.
[0090] Как описано выше, эталонные изображения хранятся в DPB и могут сигнализироваться в SPS, PPS или заголовке слайса. PPS может наследовать подмножество эталонных изображений от SPS и может сигнализировать дополнительные эталонные изображения, которые могут использоваться для сигнализации изображений, которые видеокодер 20 или видеодекодер 30 может использовать во время интерпредсказания текущего изображения. Кодировщик видео может определить идентификаторы для эталонных изображений, например, значения POC или другие идентификаторы, и из этих идентификаторов построить множество подмножеств эталонных изображений.
[0091] Могут существовать различные способы, которыми видеодекодер 30 может определять идентификаторы для изображений, которые принадлежат набору эталонных изображений. Обычно видеокодер 20 может сигнализировать значения, из которых видеодекодер 30 может определить идентификаторы для изображений, включая изображения, которые принадлежат набору эталонных изображений. Идентификаторами изображений может быть POC для каждого из изображений. Как описано выше, значение POC может указывать порядок отображения или вывода изображения, где изображения с меньшими значениями POC отображаются раньше изображений с большими значениями POC. Значение POC у данного изображения может быть значением относительно предыдущего IDR-изображения. Например, PicOrderCnt (то есть значение POC) для IDR-изображения может быть равно 0, значение POC для изображения после IDR-изображения в порядке отображения или вывода может быть равно 1, значение POC для изображения после изображения со значением 1 POC в порядке отображения или вывода может быть равно 2, и так далее.
[0092] Из этих подмножеств эталонных изображений видеодекодер может вывести набор эталонных изображений, как подробнее описано ниже. В некоторых примерах каждое из подмножеств эталонных изображений включает в себя разные эталонные изображения, так что отсутствует перекрытие эталонных изображений в подмножествах эталонных изображений. Таким образом, каждое из эталонных изображений может находиться только в одном из подмножеств эталонных изображений и ни в каком другом подмножестве эталонных изображений.
[0093] После определения идентификаторов (например, значений POC) эталонных изображений в наборе эталонных изображений или его подмножествах видеодекодер может построить подмножества эталонных изображений. Как подробнее описано ниже, видеодекодер может построить пять подмножеств эталонных изображений, хотя видеодекодер может построить больше или меньше подмножеств эталонных изображений.
[0094] Эти пять подмножеств эталонных изображений называются: RefPicSetStCurrBefore, RefPicSetStCurrAfter, RefPicSetStFoll, RefPicSetLtCurr и RefPicSetLtFoll.
[0095] Подмножества RefPicSetStCurrBefore, RefPicSetStCurrAfter и RefPicSetStFoll эталонных изображений могут идентифицировать краткосрочные эталонные изображения. В некоторых примерах эти подмножества эталонных изображений могут идентифицировать краткосрочные эталонные изображения на основе того, находятся ли краткосрочные эталонные изображения раньше в порядке отображения или позже в порядке отображения, чем текущее кодируемое изображение, а также могут ли краткосрочные эталонные изображения потенциально использоваться для интерпредсказания текущего изображения и изображений после текущего изображения в порядке декодирования, или могут ли потенциально использоваться для интерпредсказания только изображений после текущего изображения в порядке декодирования.
[0096] Например, подмножество RefPicSetStCurrBefore эталонных изображений может включать в себя (и может включать в себя только) идентификационную информацию, например значения POC, всех краткосрочных эталонных изображений, которые имеют порядок вывода или отображения раньше текущего изображения, и которые потенциально могут использоваться для эталона при интерпредсказании текущего изображения и потенциально могут использоваться для эталона при интерпредсказании одного или нескольких изображений после текущего изображения в порядке декодирования. Подмножество RefPicSetStCurrAfter эталонных изображений может включать в себя (и может включать в себя только) идентификационную информацию всех краткосрочных эталонных изображений, которые имеют порядок вывода или отображения позже текущего изображения, и которые потенциально могут использоваться для эталона при интерпредсказании текущего изображения и потенциально могут использоваться для эталона при интерпредсказании одного или нескольких изображений после текущего изображения в порядке декодирования.
[0097] Подмножество RefPicSetStFoll эталонных изображений может включать в себя (и может включать в себя только) идентификационную информацию всех краткосрочных эталонных изображений, которые имеют порядок вывода или отображения раньше текущего изображения, которые потенциально могут использоваться для эталона при интерпредсказании одного или нескольких изображений после текущего изображения в порядке декодирования и которые нельзя использовать для эталона при интерпредсказании текущего изображения.
[0098] Подмножества RefPicSetLtCurr и RefPicSetLtFoll эталонных изображений могут идентифицировать долгосрочные эталонные изображения. В некоторых примерах эти подмножества эталонных изображений могут идентифицировать долгосрочные эталонные изображения на основе того, находятся ли долгосрочные эталонные изображения раньше в порядке отображения или позже в порядке отображения, чем текущее кодируемое изображение.
[0099] Например, подмножество RefPicSetLtCurr эталонных изображений может включать в себя (и может включать в себя только) идентификационную информацию всех долгосрочных эталонных изображений, которые потенциально могут использоваться для эталона при интерпредсказании текущего изображения и которые потенциально могут использоваться для эталона при интерпредсказании одного или нескольких изображений после текущего изображения в порядке декодирования. Подмножество RefPicSetLtFoll эталонных изображений может включать в себя (и может включать в себя только) идентификационную информацию всех долгосрочных эталонных изображений, которые потенциально могут использоваться для эталона при интерпредсказании одного или нескольких изображений после текущего изображения в порядке декодирования и которые нельзя использовать для эталона при интерпредсказании текущего изображения.
[0100] В некоторых примерах подмножества RefPicSetStCurrBefore, RefPicSetStCurrAfter и RefPicSetLtCurr могут включать в себя все эталонные изображения, которые могут использоваться при интерпредсказании блока в текущем изображении и которые могут использоваться при интерпредсказании одного или нескольких изображений после текущего изображения в порядке декодирования. Подмножества RefPicSetStFoll и RefPicSetLtFoll могут включать в себя все эталонные изображения, которые не используются при интерпредсказании блока в текущем изображении, но могут использоваться при интерпредсказании одного или нескольких изображений после текущего изображения в порядке декодирования.
[0101] Чтобы построить подмножества RefPicSetLtCurr и RefPicSetLtAfter эталонных изображений, видеодекодер проходит по DPB и добавляет LTRP, сохраненные в DPB, в подмножества RefPicSetLtCurr и RefPicSetLtAfter эталонных изображений в соответствии со следующим псевдокодом:
for( i=0; i<NumPocLtCurr; i++ )
if( !CurrDeltaPocMsbPresentFlag[ i ] )
if( имеется долгосрочное эталонное изображение picX в DPB с pic_order_cnt_lsb, равным PocLtCurr[ i ] )
RefPicSetLtCurr[ i ] = picX
else if( имеется краткосрочное эталонное изображение picY в DPB
с pic_order_cnt_lsb, равным PocLtCurr[ i ] )
RefPicSetLtCurr[ i ] = picY
else
RefPicSetLtCurr[ i ] = "нет эталонного изображения"
else
if( имеется долгосрочное эталонное изображение picX в DPB
с PicOrderCntVal, равным PocLtCurr[ i ] )
RefPicSetLtCurr[ i ] = picX
else if( имеется краткосрочное эталонное изображение picY в DPB
с PicOrderCntVal, равным PocLtCurr[ i ] )
RefPicSetLtCurr[ i ] = picY
else
RefPicSetLtCurr[ i ] = "нет эталонного изображения"
for( i=0; i < NumPocLtFoll; i++ )
if( !FollDeltaPocMsbPresentFlag[ i ] )
if( имеется долгосрочное эталонное изображение picX в DPB
с pic_order_cnt_lsb, равным PocLtFoll[ i ] )
RefPicSetLtFoll[ i ] = picX
else if( имеется краткосрочное эталонное изображение picY в DPB
с pic_order_cnt_lsb, равным PocLtFoll[ i ] )
RefPicSetLtFoll[ i ] = picY
else
RefPicSetLtFoll[ i ] = "нет эталонного изображения"
else
if( имеется долгосрочное эталонное изображение picX в DPB
с PicOrderCntVal, равным PocLtFoll[ i ] )
RefPicSetLtFoll[ i ] = picX
else if( имеется краткосрочное эталонное изображение picY в DPB с PicOrderCntVal, равным PocLtFoll[ i ] )
RefPicSetLtFoll[ i ] = picY
else
RefPicSetLtFoll[ i ] = "нет эталонного изображения"
[0102] После построения списков RefPicSetLtCurr и RefPicSetLtFoll эталонных изображений видеодекодер 30 помечает каждое из изображений в упоминаемых изображениях как "используемое для долгосрочного эталона".
[0103] Чтобы построить наборы RefPicSetStCurrBefore, RefPicSetStCurrAfter и RefPicSetLtCurr эталонных изображений, видеодекодер 30 может выполнить следующий псевдокод, который проходит по DPB и добавляет изображения из DPB со значениями POC в соответствующий набор эталонных изображений:
for( i=0; i < NumPocStCurrBefore; i++ )
if( имеется краткосрочное эталонное изображение picX в DPB
с PicOrderCntVal, равным PocStCurrBefore[ i ])
RefPicSetStCurrBefore[ i ] = picX
else
RefPicSetStCurrBefore[ i ] = "нет эталонного изображения"
for( i=0; i<NumPocStCurrAfter; i++ )
if( имеется краткосрочное эталонное изображение picX в DPB
с PicOrderCntVal, равным PocStCurrAfter[ i ])
RefPicSetStCurrAfter[ i ] = picX
else
RefPicSetStCurrAfter[ i ] = "нет эталонного изображения" (8-7)
for( i = 0; i < NumPocStFoll; i++ )
if( имеется краткосрочное эталонное изображение picX в DPB
с PicOrderCntVal, равным PocStFoll[ i ])
RefPicSetStFoll[ i ] = picX
else
RefPicSetStFoll[ i ] = "нет эталонного изображения"
[0104] Видеодекодер 30 помечает любые эталонные изображения, которые не включаются в одно из пяти подмножеств эталонных изображений, как "неиспользуемые для эталона".
[0105] Если текущее изображение, которое будет декодировано, является IDR-изображением, то видеодекодер 30 может установить подмножества RefPicSetStCurrBefore, RefPicSetStCurrAfter, RefPicSetStFoll, RefPicSetLtCurr и RefPicSetLtFoll эталонных изображений пустыми. Причина может быть в том, что IDR-изображение может не быть интерпредсказанным, и никакое изображение после IDR-изображения в порядке декодирования не может использовать для эталона никакое изображение перед IDR-изображением при декодировании. В противном случае (например, когда текущее изображение не является IDR-изображением) видеодекодер 30 может построить подмножества краткосрочных эталонных изображений и подмножества долгосрочных эталонных изображений путем реализации следующего псевдокода.
[0106] Как только видеодекодер 30 выводит набор эталонных изображений из множества подмножеств эталонных изображений, видеодекодер может построить списки эталонных изображений (например, список 0 и список 1) из набора эталонных изображений. Например, построение списков эталонных изображений может включать в себя этап инициализации и, возможно, этап модификации.
[0107] В некоторых примерах видеодекодер может конфигурироваться для реализации методики построения списка эталонных изображений по умолчанию, в которой видеодекодер использует подмножества эталонных изображений для построения начальных списков эталонных изображений. Затем, если не нужна модификация списка эталонных изображений, то окончательные списки эталонных изображений могут быть такими же, как начальные списки эталонных изображений, без необходимости какого-либо дополнительного переупорядочения списков эталонных изображений.
[0108] Во время интерпредсказания однонаправленно предсказанной PU видеокодер 20 или видеодекодер 30 использует эталонные изображения из списка 0 эталонных изображений для предсказания текущих значений яркости и цветности у текущего блока. Во время интерпредсказания двунаправленно предсказанной PU видеокодер 20 или видеодекодер 30 использует эталонные изображения из списка 0 эталонных изображений и списка 1 эталонных изображений для предсказания значений у текущих блоков яркости и цветности.
[0109] Видеодекодер 30 может адресовать эталонные изображения, например LTRP и STRP, путем индексирования в один из двух списков эталонных изображений, называемых RefPicList0 и RefPicList1. RefPicList0 и RefPicList1 включают в себя эталонные изображения из пяти подмножеств эталонных изображений, RefPicSetStCurrBefore, RefPicSetStCurrAfter, RefPicSetStFoll, RefPicSetLtCurr и RefPicSetLtFoll. При декодировании однонаправленно предсказанной PU видеодекодер 30 может использовать одно из изображений, сохраненных в RefPicList0, для предсказания значений у текущих блоков яркости и цветности. При декодировании PU с двунаправленным предсказанием видеодекодер 30 может использовать изображение из RefPicList0 и изображение из RefPicList1 для предсказания CU текущего слайса. В начале декодирования P- или B-слайса видеодекодер 30 может построить временной список эталонных изображений, RefPicList0, в соответствии со следующим псевдокодом:
rIdx=0
while( rIdx < NumRpsCurrTempList0 ) {
for(i=0; i<NumPocStCurrBefore && rIdx < NumRpsCurrTempList0; rIdx++, i++ )
RefPicListTemp0[ rIdx ] = RefPicSetStCurrBefore[ i ]
for(i=0; i<NumPocStCurrAfter && rIdx < NumRpsCurrTempList0; rIdx++, i++ )
RefPicListTemp0[ rIdx ] = RefPicSetStCurrAfter[ i ]
for( i=0; i<NumPocLtCurr && rIdx < NumRpsCurrTempList0; rIdx++, i++ )
RefPicListTemp0[ rIdx ] = RefPicSetLtCurr[ i ]
}
[0110] где RefPicListTemp0 является временной переменной, которая включает в себя содержимое RefPicSetStCurrBefore с последующими RefPicSetStCurrAfter и RefPicSetLtCurr.
[0111] В некоторых случаях поток двоичных сигналов может сигнализировать, что изображения в RefPicList0 следует переупорядочить. Видеодекодер 30 может переупорядочить RefPicListTemp0 на основе ref_pic_list_modification_flag_l0. После построения RefPicListTemp0 видеодекодер 30 строит RefPicList0 в соответствии со следующим псевдокодом:
for( rIdx=0; rIdx <= num_ref_idx_l0_active_minus1; rIdx++)
RefPicList0[ rIdx ] = ref_pic_list_modification_flag_l0 ? RefPicListTemp0[ list_entry_l0[ rIdx ] ] :
RefPicListTemp0[ rIdx ]
[0112] Когда текущая PU имеет двунаправленное предсказание, видеодекодер 30 строит временную версию RefPicList1, называемую RefPicListTemp1, в соответствии со следующим псевдокодом в аналогичном процессе, используемом для построения RefPicListTemp0:
rIdx=0
while( rIdx < NumRpsCurrTempList1 ) {
for(i=0; i<NumPocStCurrAfter && rIdx < NumRpsCurrTempList1; rIdx++, i++ )
RefPicListTemp1[ rIdx ] = RefPicSetStCurrAfter[ i ]
for(i=0; i<NumPocStCurrBefore && rIdx < NumRpsCurrTempList1; rIdx++, i++ )
RefPicListTemp1[ rIdx ] = RefPicSetStCurrBefore[ i ]
for( i = 0; i < NumPocLtCurr && rIdx < NumRpsCurrTempList1; rIdx++, i++ )
RefPicListTemp1[ rIdx ] = RefPicSetLtCurr[ i ]
}
[0113] Видеодекодер 30 может переупорядочить RefPicListTemp1 на основе ref_pic_list_modification_flag_l1 в соответствии со следующим псевдокодом:
for( rIdx=0; rIdx <= num_ref_idx_l1_active_minus1; rIdx++)
RefPicList1[ rIdx ] = ref_pic_list_modification_flag_l1 ? RefPicListTemp1[list_entry_l1[ rIdx ] ] :
RefPicListTemp1[ rIdx ]
[0114] Как описано выше, поток двоичных сигналов HEVC включает в себя единицы кодирования (CU), которые состоят из единиц предсказания (PU) и единиц преобразования (TU). Для интерпредсказанных PU каждая единица предсказания может включать в себя информацию предсказания движения, например, конкретный режим интерпредсказания у PU, одно или несколько значений разности векторов движения (MVD) и эталонные изображения, которые будут использоваться при предсказании значений пикселей у CU. Для каждой PU может сигнализироваться одно или два эталонных изображения: одно эталонное изображение, если CU предсказывается однонаправленно, и два эталонных изображения, если CU предсказывается двунаправленно.
[0115] Интерпредсказанная PU слайса может включать в себя синтаксические элементы, ref_idx_l0 и ref_idx_l1. Значение каждого из ref_idx_l0 и ref_idx_l1 является индексами в списках эталонных изображений RefPicList0 и RefPicList1 соответственно. ref_idx_l0 и ref_idx_l1 сигнализируют эталонные изображения, которые использует видеодекодер, в сочетании со значениями разности векторов движения для определения набора выборок предсказания, который видеодекодер 30 использует для предсказания значений цветности и яркости у текущего блока.
[0116] В случае, где PU предсказывается однонаправленно или двунаправленно, видеодекодер 30 использует значения MVD у PU для восстановления одного или нескольких векторов движения цветности и векторов движения яркости. Видеодекодер 30 может восстановить векторы движения яркости и цветности путем определения предсказателя вектора движения для CU и объединения предсказателя вектора движения с MVD для образования вектора движения для CU. Видеодекодер 30 может определить предсказатель вектора движения из другой, ранее кодированной CU, например соседней, ранее кодированной CU. В некоторых случаях PU может кодироваться с использованием так называемого режима слияния или улучшенного предсказания вектора движения (AMVP), в котором видеодекодер 30 определяет предсказатель вектора движения для текущей PU только на основе одного или нескольких векторов движения ранее кодированных CU. В этом случае текущая PU не включает в себя никакие сигнализированные значения MVD.
[0117] Как только видеодекодер 30 восстановил векторы движения цветности и яркости для текущей PU, видеодекодер 30 определяет массив выборок предсказания яркости, массив выборок предсказания цветности и массив остаточных выборок цветности на основе одного или нескольких эталонных изображений, сигнализированных с помощью их индексов в PU. Чтобы вычислить выборки предсказания яркости (например, значения с предсказанием) для текущего блока яркости, видеодекодер 30 вычисляет целую часть и дробную часть вектора движения яркости. Видеодекодер 30 складывает координаты x и y верхнего левого угла текущего блока яркости с вектором движения яркости, чтобы определить соответствующее целое или дробное смещение для выборок яркости у указанного эталонного изображения. На основе смещения видеокодер 20 может интерполировать значения дробных субположений на основе значений целых пикселей у выборок яркости эталонного изображения, чтобы определить выборки предсказания яркости для текущего блока яркости. В качестве примера разность векторов движения яркости при объединении с предсказателем вектора движения может ссылаться на конкретное местоположение четверти пикселя у выборок предсказания яркости. Видеодекодер 30 может интерполировать значения четвертей пикселей на основе одного или нескольких интерполирующих фильтров. Интерполирующие фильтры могут использовать поддержку наборов целых пикселей из эталонных выборок яркости для формирования значений четвертей пикселей. Видеодекодер 30 может использовать сформированные значения яркости четвертей пикселей в качестве значений с предсказанием у текущего блока яркости.
[0118] Видеодекодер 30 может выполнить аналогичный процесс для определения выборок предсказания для текущего блока цветности. Видеодекодер 30 восстанавливает по меньшей мере один вектор движения цветности, который может отличаться от вектора движения яркости, и использует вектор движения цветности для определения смещения в выборках цветности у эталонного изображения. Также вектор движения цветности может иметь точность вплоть до одной восьмой пикселя, тогда как вектор движения яркости может иметь точность вплоть до четверти пикселя. На основе смещения в выборках цветности у эталонного изображения видеодекодер 30 может интерполировать значения цветности подпикселя с предсказанием в качестве предсказателей значений цветности у текущего блока цветности.
[0119] В случаях, где текущая PU имеет двунаправленное предсказание, видеодекодер 30 определяет два массива выборок предсказания яркости, по одному для каждого из двух векторов движения яркости, и два массива выборок предсказания цветности, по одному для каждого из двух векторов движения цветности. Видеодекодер 30 объединяет две выборки предсказания яркости и два массива выборок предсказания цветности для образования единого массива выборок предсказания. Методика, используемая для предсказания каждого из массивов выборок яркости и цветности, зависит от двух синтаксических элементов признаков предсказания, predFlagL0 и preFlagL1, которые указывают, какой из двух процессов взвешенного предсказания выборок выполняет видеодекодер 30. Характерные веса, назначенные каждому из двух массивов выборок предсказания цветности и яркости, задаются синтаксической таблицей взвешенного предсказания, которая может сигнализироваться в заголовке сегмента слайса.
[0120] После кодирования с интрапредсказанием или интерпредсказанием, использующего PU в CU, видеокодер 20 или видеодекодер 30 может вычислить остаточные данные для TU в CU. PU могут содержать синтаксические данные, описывающие способ или режим формирования данных пикселя с предсказанием в пространственной области (также называемой областью пикселей), а TU могут содержать коэффициенты в области преобразования после применения преобразования, например дискретного косинусного преобразования (DCT), целочисленного преобразования, вейвлет-преобразования или концептуально сходного преобразования к остаточным видеоданным. Остаточные данные могут соответствовать разностям пикселей между пикселями некодированного изображения и значениями предсказания, соответствующими PU. Видеокодер 20 или видеодекодер 30 может образовать TU, включающие в себя остаточные данные для CU, а затем преобразовать TU для создания коэффициентов преобразования для CU.
[0121] После любых преобразований для создания коэффициентов преобразования видеокодер 20 или видеодекодер 30 может выполнить квантование коэффициентов преобразования. Квантование в целом относится к процессу, в котором коэффициенты преобразования квантуются, чтобы уменьшить по возможности объем данных, используемый для представления коэффициентов, обеспечивая дополнительное сжатие. Процесс квантования может уменьшить разрядную глубину, ассоциированную с некоторыми или всеми коэффициентами. Например, n-разрядное значение во время квантования можно округлить в меньшую сторону до m-разрядного значения, где n больше m.
[0122] После квантования видеокодер может сканировать коэффициенты преобразования, создавая одномерный вектор из двумерной матрицы, включающей в себя квантованные коэффициенты преобразования. Сканирование может быть предназначено для помещения коэффициентов с большей энергией (и поэтому с меньшей частотой) впереди массива и помещения коэффициентов с меньшей энергией (и поэтому большей частотой) сзади массива. В некоторых примерах видеокодер 20 или видеодекодер 30 может использовать предопределенный порядок сканирования, чтобы сканировать квантованные коэффициенты преобразования для создания сериализованного вектора, который можно энтропийно кодировать. В других примерах видеокодер 20 или видеодекодер 30 может выполнять адаптивное сканирование. После сканирования квантованных коэффициентов преобразования для образования одномерного вектора видеокодер 20 или видеодекодер 30 может энтропийно кодировать одномерный вектор, например, в соответствии с контекстно-адаптивным кодированием с переменной длиной (CAVLC), контекстно-адаптивным двоичным арифметическим кодированием (CABAC), синтаксическим контекстно-адаптивным двоичным арифметическим кодированием (SBAC), энтропийным кодированием с разбиением на интервалы вероятности (PIPE) или другой методологией энтропийного кодирования. Видеокодер 20 также может энтропийно кодировать синтаксические элементы, ассоциированные с кодированными видеоданными, для использования видеодекодером 30 при декодировании видеоданных.
[0123] Для выполнения CABAC видеокодер 20 может назначить контекст в рамках контекстной модели символу, который будет передан. Контекст может относиться, например, к тому, являются ли соседние значения символа ненулевыми. Для выполнения CAVLC видеокодер 20 может выбрать код переменной длины для символа, который будет передан. Кодовые слова при VLC могут быть построены так, что относительно более короткие коды соответствуют более вероятным символам, тогда как более длинные коды соответствуют менее вероятным символам. Таким образом, использование VLC может добиться экономии разрядов по сравнению, например, с использованием кодовых слов равной длины для каждого символа, который будет передан. Определение вероятности может основываться на контексте, назначенном символу.
[0124] Видеокодер 20 дополнительно может отправлять видеодекодеру 30 синтаксические данные, например блочные синтаксические данные, кадровые синтаксические данные и основанные на GOP синтаксические данные, например, в заголовке кадра, заголовке блока, заголовке слайса или заголовке GOP. Синтаксические данные GOP могут описывать количество кадров в соответствующей GOP, а синтаксические данные кадра могут указывать режим кодирования/предсказания, используемый для кодирования соответствующего кадра.
[0125] Методики из данного раскрытия изобретения ориентированы на методики для улучшения сигнализации эталонных изображений в потоке двоичных сигналов кодированного видео. Обычно, чтобы сэкономить разряды при сигнализации ссылок на значения POC у эталонных изображений, WD6 указывает, что сигнализируется только некоторое количество самых младших разрядов (LSB) у значений POC, чтобы ссылаться на долгосрочные эталонные изображения, тогда как краткосрочные эталонные изображения идентифицируются с помощью полного значения POC.
[0126] Данное раскрытие изобретения предоставляет методики, связанные с сигнализацией долгосрочных эталонных изображений, которые может реализовать видеокодер 20 и видеодекодер 30. В частности, данное раскрытие изобретения описывает методики для сигнализации идентифицирующей информации для долгосрочных эталонных изображений, например, в заголовке слайса. В частности, методики из данного раскрытия изобретения ориентированы на методики для улучшения сигнализации самых старших разрядов (MSB) и самых младших разрядов у долгосрочных эталонных изображений в заголовке слайса кодированной видеопоследовательности. Методики из данного раскрытия изобретения также ориентированы на методики для сигнализации в заголовке слайса дополнительных эталонных изображений, которые не включаются в набор эталонных изображений, включенный в активный набор параметров последовательности или набор параметров изображения для кодирующегося в настоящее время изображения.
[0127] Первая особенность методик из данного раскрытия изобретения ориентирована на сигнализацию долгосрочных эталонных изображений, а конкретнее - на сигнализацию самых старших разрядов у долгосрочных эталонных изображений в заголовке слайса кодированной видеопоследовательности. Вообще, методики из данного раскрытия изобретения могут реализовать синтаксис заголовка слайса, который описан в Таблице 2 выше. В соответствии с Таблицей 2 заголовок слайса включает в себя синтаксические элементы long_term_idx_sps[ i ] и poc_lsb_lt. Для конкретного значения i индекса значение long_term_idx_sps[ i ] задает индекс в списке возможных долгосрочных эталонных изображений из активного набора параметров последовательности, а значение poc_lsb_lt[ i ] задает самые младшие разряды для i-го долгосрочного эталонного изображения.
[0128] Таким образом, синтаксические элементы long_term_idx_sps и poc_lsb_lt идентифицируют подмножество долгосрочных эталонных изображений, которые унаследованы из набора параметров последовательности и которые видеодекодер 30 использует для предсказания CU текущего слайса. Методики из данного раскрытия изобретения ограничивают порядок значений LSB POC LTRP, унаследованных от SPS, в синтаксическом элементе long_term_idx_sps[ i ]. Ограничение порядка значений LSB POC LTRP в long_term_idx_sps[ i ] в соответствии с методиками из данного раскрытия изобретения может уменьшить сложность потока двоичных сигналов кодированного видео. Соответственно, семантику синтаксических элементов заголовка слайса в Таблице 2 можно изменить относительно семантики, описанной в Таблице 2 выше, следующим образом.
го
[0129] Для конкретного индекса i значение long_term_idx_sps[ i ] задает индекс в списке долгосрочных эталонных изображений, заданных в активном наборе параметров последовательности, у i долгосрочного эталонного изображения, унаследованного от указанного набора параметров последовательности в набор долгосрочных эталонных изображений в текущем изображении. Значение long_term_idx_sps[ i ] может находиться в диапазоне от 0 до num_long_term_ref_pics_sps - 1 включительно.
[0130] Методики из данного раскрытия изобретения дополнительно изменяют упорядочения значений poc_lsb_lt, так что для любых значений j и k в диапазоне от 0 до num_long_term_sps - 1 включительно, если j меньше k, то lt_ref_pic_poc_lsb_sps[ long_term_idx_sps[ j ] не меньше lt_ref_pic_poc_lsb_sps[ long_term_idx_sps[ k ] ]. В этом примере значения POC LSB у long_term_idx_sps[ j ] не меньше значений POC LSB у long_term_idx_sps [ k ] для всех j<k.
[0131] Заголовок слайса также может включать в себя синтаксический элемент delta_poc_msb_present_flag[ i ]. delta_poc_msb_present_flag[ i ] задает, сигнализируется ли заданное количество MSB для i-го LTRP, то есть LTRP, указанного с помощью long_term_idx_sps[ i ] или poc_lsb_lt[ i ]. Если i-ый индекс у delta_poc_msb_present_flag [ i ] равен 1, то значение delta_poc_msb_cycle_lt[ i ] присутствует. Если значение delta_poc_msb_present_flag[ i ] равно 0, то delta_poc_msb_cycle_lt[ i ] отсутствует для i-го сигнализированного LTRP. Методики из данного раскрытия изобретения изменяют сигнализацию delta_poc_msb_present_flag[ i ] так, что delta_poc_msb_present_flag[ i ] сигнализируется только равным 1, когда имеется больше одного изображения в буфере декодированных изображений, и то эталонное изображение помечается как "используемое для эталона" и имеет самые младшие разряды у значения счетчика последовательности изображений, равные PocLsbLt[ i ]. Предыдущие методики могут сигнализировать равный единице delta_poc_msb_present_flag[ i ] и значения delta_poc_msb_lt[ i ], даже когда изображение не помечается как "используемое для эталона", то есть, когда изображение уже не нужно для эталона. С помощью ограничения сигнализации delta_poc_msb_present_flag[ i ] изображениями, помеченными как "используемые для эталона", методики из данного раскрытия изобретения могут уменьшить частоту сигнализации MSB у эталонного изображения, что может уменьшить сложность потока двоичных сигналов кодированного видео.
[0132] Заголовок слайса также может включать в себя синтаксический элемент delta_poc_msb_cycle_lt[ i ]. Видеодекодер 30 может использовать значение delta_poc_msb_cycle_lt[ i ] для определения значения самых старших разрядов значения счетчика последовательности изображений у i-го долгосрочного эталонного изображения, которое включается в набор долгосрочных эталонных изображений в текущем изображении. Чтобы определить значение MSB у i-го LTRP, кодировщик видео может определить значение переменной DeltaPocMSBCycleLt[ i ], которая указывает MSB у i-го LTRP.
[0133] Кодировщик видео может вывести переменную DeltaPocMSBCycleLt[ i ] в соответствии со следующим псевдокодом:
if( i = = 0 | | i = = num_long_term_sps | | PocLsbLt[ i − 1 ] ! = PocLsbLt[ i ] )
DeltaPocMSBCycleLt[ i ] = delta_poc_msb_cycle_lt[ i ]
else
DeltaPocMSBCycleLt[ i ] = delta_poc_msb_cycle_lt[ i ] +DeltaPocMSBCycleLt[ i − 1 ]
24
[0134] Значение DeltaPocMSBCycleLt[ i ] * MaxPicOrderCntLsb + pic_order_cnt_lsb - PocLsbLt[ i ] может находиться в диапазоне от 1 до 2 - 1 включительно.
[0135] В некоторых случаях видеодекодер 30 определяет DeltaPocMSBCycleLt[ i ] путем добавления значения DeltaPocMSBCycleLt[ i - 1], значения DeltaPocMSB у предыдущего LTRP, к значению delta_poc_msb_cycle_lt[ i ] у текущего LTRP.
[0136] По сравнению с предыдущей методикой для определения DeltaPocMSBCycleLt[ i ], DeltaPocMSBCycleLt[ i ] задается равным delta_poc_msb_cycle_lt[ i ], если i равно количеству LTRP, заданных в активном SPS и которые нужно включить в набор LTRP для текущего изображения.
[0137] В альтернативном примере в соответствии с методиками из данного раскрытия изобретения (который может объединяться с рассмотренным выше примером) синтаксис заголовка слайса может быть практически таким же, как в Таблице 2. Однако заголовок слайса также может включать в себя синтаксический элемент "lt_pic_from_sps_flag[i]", который описан ниже. Порядок значений LSB POC, унаследованных от SPS, и значений LSB POC, сигнализированных непосредственно в заголовке слайса, может вместе ограничиваться посредством ограничения значений массива PocLsbLt[ i ]. Ограничение delta_poc_msb_present_flag[ i ] может быть таким же, как в описанном выше примере. Таблица 5 предоставляет пример синтаксиса для заголовка слайса в соответствии с этим примером:
ТАБЛИЦА 5
slice_header( ) {
Дескриптор
...
if( IdrPicFlag ) {
idr_pic_id
ue(v)
no_output_of_prior_pics_flag
u(1)
} else {
pic_order_cnt_lsb
u(v)
short_term_ref_pic_set_sps_flag
u(1)
if( !short_term_ref_pic_set_sps_flag )
short_term_ref_pic_set( num_short_term_ref_pic_sets )
else
short_term_ref_pic_set_idx
u(v)
if( long_term_ref_pics_present_flag ) {
num_long_term_pics
ue(v)
if( num_long_term_ref_pics_sps )
num_long_term_sps
ue(v)
for( i=0; i<num_long_term_sps + num_long_term_pics; i++ ) {
if ( num_long_term_sps )
<u>lt_pic_from_sps_flag[ i ]</u>
<u>u(1)</u>
if ( lt_pic_from_sps_flag[ i ] )
long_term_idx_sps[ i ]
ue(v)
else
poc_lsb_lt[ i ]
u(v)
delta_poc_msb_present_flag[ i ]
u(1)
if( delta_poc_msb_present_flag[ i ] )
delta_poc_msb_cycle_lt[ i ]
ue(v)
used_by_curr_pic_lt_flag[ i ]
u(1)
}
}
}
...
}
[0138] Как отмечалось выше, Таблица 5 предоставляет дополнительный синтаксический элемент "lt_pic_from_sps_flag[ i ]". Видеодекодер 30 может использовать lt_pic_from_sps_flag[ i ] для определения, выводится ли i-е LTRP, сигнализированное в заголовке слайса, из SPS или сигнализируется явно в заголовке слайса. Когда признак равен 1, LTRP может наследоваться из SPS и соответствует индексу, который сигнализируется. Когда признак равен 0, LSB у долгосрочного эталонного изображения может сигнализироваться явно. Когда отсутствует, кодировщик видео может предположить lt_pic_from_sps_flag[ i ] равным 0.
[0139] Таким образом, lt_pic_from_sps_flag[ i ] представляет пример синтаксического элемента, который может кодироваться в заголовке слайса, который указывает, сигнализируется ли идентифицирующая информация для долгосрочного эталонного изображения явно в заголовке слайса либо выводится из набора параметров последовательности, включающего в себя последовательность изображений, в которой встречается слайс (то есть набора параметров последовательности, соответствующего слайсу).
[0140] В этом примере long_term_idx_sps[ i ] может задавать индекс в списке долгосрочных эталонных изображений, заданных в активном наборе параметров последовательности, у i-го долгосрочного эталонного изображения в наборе долгосрочных эталонных изображений в текущем изображении. Значение long_term_idx_sps[ i ] может находиться в диапазоне от 0 до num_long_term_ref_pics_sps - 1 включительно.
[0141] В этом примере poc_lsb_lt[ i ] может задавать значение самых младших разрядов значения счетчика последовательности изображений у i-го долгосрочного эталонного изображения, которое включается в набор долгосрочных эталонных изображений в текущем изображении. Длина синтаксического элемента poc_lsb_lt[ i ] может быть равна log2_max_pic_order_cnt_lsb_minus4 + 4 разряда. Переменная PocLsbLt[ i ] может задавать LSB для i-го LTRP.
[0142] Переменная PocLsbLt[ i ] может выводиться следующим образом в нижеследующем псевдокоде:
if(lt_pic_from_sps_flag[ i ])
PocLsbLt[ i ]=lt_ref_pic_poc_lsb_sps [ long_term_idx_sps[ i ] ]
else
PocLsbLt[ i ] = poc_lsb_lt[ i ]
[0143] Для любых значений j и k в диапазоне от 0 до num_long_term_pics + num_long_term_sps - 1 включительно, если j меньше k, то PocLsbLt[ j ] нужно ограничить, чтобы она была не меньше PocLsbLt[ k ]. Таким образом, PocLsbLt[ i ] задается как LSB у эталонного изображения, унаследованного от SPS, если LTRP наследуется от SPS, и как LSB, сигнализированные явно в заголовке слайса, если LTRP не наследуется от SPS. Более того, LSB ограничиваются невозрастающим порядком.
[0144] Изменения в семантике delta_poc_msb_present_flag[ i ] и delta_poc_msb_cycle_lt[ i ] могут быть такими же, как описаны в примере выше, и выведение переменной DeltaPocMSBCycleLt[ i ] может быть таким же, как способ в Таблице 2 выше.
[0145] В качестве альтернативы num_long_term_pics может задавать общее количество сигнализированных LTRP, включая те, которые унаследованы от SPS, и те, которые сигнализированы явно в заголовке слайса, и кодировщику видео не нужно сигнализировать num_long_term_sps.
[0146] Видеокодер 20 и видеодекодер 30 могут конфигурироваться для кодирования данных заголовка слайса и/или набора параметров последовательности в соответствии с различными примерами синтаксиса и семантики, описанными выше. Таким образом, видеокодер 20 и видеодекодер 30 могут реализовать экономию разрядов, например, путем сигнализации меньшего количества самых старших разрядов для некоторых долгосрочных эталонных изображений.
[0147] Соответственно, видеокодер 20 и видеодекодер 30 представляют примеры кодировщика видео, сконфигурированного для кодирования заголовка слайса для слайса видеоданных, где заголовок слайса включает в себя синтаксический элемент, указывающий, сигнализируется ли идентифицирующая информация для долгосрочного эталонного изображения явно в заголовке слайса либо выводится из набора параметров последовательности, соответствующего слайсу, и кодирования значения для LSB для долгосрочного эталонного изображения в заголовке слайса, когда синтаксический элемент указывает, что идентифицирующая информация для долгосрочного эталонного изображения сигнализируется явно.
[0148] Видеокодер 20 и видеодекодер 30 могут быть реализованы в виде любой из ряда подходящих схем кодера или декодера в соответствующих случаях, например, одного или нескольких микропроцессоров, цифровых процессоров сигналов (DSP), специализированных интегральных схем (ASIC), программируемых пользователем вентильных матриц (FPGA), дискретных логических схем, программного обеспечения, аппаратных средств, микропрограммного обеспечения или любых их сочетаний. Каждый из видеокодера 20 и видеодекодера 30 может включаться в один или несколько кодеров или декодеров, любой из которых может встраиваться как часть объединенного видеокодера/декодера (кодека). Устройство, включающее в себя видеокодер 20 и/или видеодекодер 30, может содержать интегральную схему, микропроцессор и/или устройство беспроводной связи, например сотовый телефон.
[0149] Фиг. 2 - блок-схема, иллюстрирующая пример видеокодера 20, который может реализовать методики для сигнализации данных для LTRP в SPS или в заголовке слайса. Видеокодер 20 может выполнять интра- и интеркодирование видеоблоков в секциях видео. Интракодирование опирается на пространственное предсказание, чтобы уменьшить или устранить пространственную избыточность в видео в данном видеокадре или изображении. Интеркодирование опирается на временное предсказание, чтобы уменьшить или устранить временную избыточность в видео в соседних кадрах или изображениях видеопоследовательности. Интрарежим (I-режим) может относиться к любому из нескольких режимов пространственного кодирования. Интеррежимы, например однонаправленное предсказание (P-режим) или двунаправленное предсказание (B-режим), могут относиться к любому из нескольких режимов временного кодирования.
[0150] Как показано на фиг. 2, видеокодер 20 принимает текущий видеоблок в видеокадре, который будет кодироваться. В примере из фиг. 2 видеокодер 20 включает в себя модуль 40 выбора режима, запоминающее устройство 64 эталонных изображений, сумматор 50, модуль 52 обработки с преобразованием, модуль 54 квантования и модуль 56 энтропийного кодирования. Модуль 40 выбора режима в свою очередь включает в себя модуль 44 компенсации движения, модуль 42 оценки движения, модуль 46 интрапредсказания и модуль 48 разбиения. Для восстановления видеоблока видеокодер 20 также включает в себя модуль 58 обратного квантования, модуль 60 обратного преобразования и сумматор 62. Также может включаться фильтр уменьшения блочности (не показан на фиг. 2) для фильтрации границ блока, чтобы удалить артефакты блочности из восстановленного видео. При желании фильтр уменьшения блочности обычно фильтровал бы вывод сумматора 62. Также могут использоваться дополнительные фильтры (в цикле или после цикла) в дополнение к фильтру уменьшения блочности. Такие фильтры для краткости не показаны, но при желании могут фильтровать вывод сумматора 50 (в качестве фильтра в цикле).
[0151] Во время процесса кодирования видеокодер 20 принимает видеокадр или секцию, которые будут кодироваться. Кадр или секцию можно разделить на несколько видеоблоков. Модуль 42 оценки движения и модуль 44 компенсации движения выполняют кодирование с интерпредсказанием принятого видеоблока относительно одного или нескольких блоков в одном или нескольких эталонных кадрах, чтобы обеспечить временное предсказание. Модуль 46 интрапредсказания в качестве альтернативы может выполнять кодирование с интрапредсказанием принятого видеоблока относительно одного или нескольких соседних блоков в том же кадре или слайса в качестве блока, который будет кодироваться, чтобы обеспечить пространственное предсказание. Видеокодер 20 может выполнять несколько проходов кодирования, например, для выбора подходящего режима кодирования для каждого блока видеоданных.
[0152] Кроме того, модуль 48 разбиения может разбить блоки видеоданных на субблоки на основе оценки предыдущих схем разбиения в предыдущих проходах кодирования. Например, модуль 48 разбиения может сначала разбить кадр или слайс на LCU, и разбить каждую из LCU на суб-CU на основе анализа искажения в зависимости от скорости передачи (например, оптимизации искажения в зависимости от скорости передачи). Модуль 40 выбора режима дополнительно может создать структуру данных квадродерева, указывающую разбиение LCU на суб-CU. CU листа в квадродереве могут включать в себя одну или несколько PU и одну или несколько TU.
[0153] Модуль 40 выбора режима может выбрать один из режимов кодирования, интра- или интер-, например, на основе ошибочных результатов и предоставляет результирующий блок с интра- или интеркодированием сумматору 50, чтобы сформировать данные остаточного блока, и сумматору 62, чтобы восстановить кодированный блок для использования в качестве эталонного кадра. Модуль 40 выбора режима также предоставляет синтаксические элементы, например векторы движения, индикаторы интрарежима, информацию о разбиении и другую такую синтаксическую информацию, модулю 56 энтропийного кодирования.
[0154] Модуль 42 оценки движения и модуль 44 компенсации движения могут быть существенно объединены, но иллюстрируются отдельно с концептуальной целью. Оценка движения, выполняемая модулем 42 оценки движения, является процессом формирования векторов движения, которые оценивают движение для видеоблоков. Вектор движения может указывать, например, смещение PU видеоблока в текущем видеокадре или изображении относительно блока с предсказанием в эталонном кадре (или другой кодированной единице) относительно текущего блока, кодируемого в текущем кадре (или другой кодированной единице). Блок с предсказанием является блоком, который признан точно совпадающим с блоком, который будет кодироваться, в показателях разности пикселей, которая может определяться с помощью суммы абсолютных разностей (SAD), суммы квадратов разностей (SSD) или других показателей разности. В некоторых примерах видеокодер 20 может вычислять значения для положений субцелого пикселя в эталонных изображениях, сохраненных в запоминающем устройстве 64 эталонных изображений. Например, видеокодер 20 может интерполировать значения положений одной четверти пикселя, положений одной восьмой пикселя или других положений дробного пикселя в эталонном изображении. Поэтому модуль 42 оценки движения может выполнить поиск движения относительно положений полного пикселя и положений дробного пикселя и вывести вектор движения с точностью до дробного пикселя.
[0155] Модуль 42 оценки движения вычисляет вектор движения для PU видеоблока в слайсе с интеркодированием путем сравнения положения PU с положением блока с предсказанием в эталонном изображении. Эталонное изображение может выбираться из первого списка эталонных изображений (Список 0) или второго списка эталонных изображений (Список 1), каждый из которых идентифицирует одно или несколько эталонных изображений, сохраненных в запоминающем устройстве 64 эталонных изображений. Модуль 42 оценки движения отправляет вычисленный вектор движения модулю 56 энтропийного кодирования и модулю 44 компенсации движения.
[0156] Компенсация движения, выполняемая модулем 44 компенсации движения, может включать в себя выборку или формирование блока с предсказанием на основе вектора движения, определенного модулем 42 оценки движения. Снова в некоторых примерах модуль 42 оценки движения и модуль 44 компенсации движения могут быть объединены функционально. После приема вектора движения для PU текущего видеоблока модуль 44 компенсации движения может найти блок с предсказанием, на который указывает вектор движения, в одном из списков эталонных изображений. Сумматор 50 образует остаточный видеоблок путем вычитания значений пикселей блока с предсказанием из значений пикселей текущего кодируемого видеоблока, образуя значения разности пикселей, которые обсуждаются ниже. Обычно модуль 42 оценки движения выполняет оценку движения относительно компонентов яркости, а модуль 44 компенсации движения использует векторы движения, вычисленные на основе компонентов яркости, для компонентов цветности и компонентов яркости. Модуль 40 выбора режима также может формировать синтаксические элементы, ассоциированные с видеоблоками и слайсом видео, для использования видеодекодером 30 при декодировании видеоблоков слайса видео.
[0157] Модуль 46 интрапредсказания может внутренне предсказать текущий блок в качестве альтернативы внешнему предсказанию, выполняемому модулем 42 оценки движения и модулем 44 компенсации движения, как описано выше. В частности, модуль 46 интрапредсказания может определить режим интрапредсказания, чтобы использовать его для кодирования текущего блока. В некоторых примерах модуль 46 интрапредсказания может кодировать текущий блок с использованием различных режимов интрапредсказания, например, во время отдельных проходов кодирования, а модуль 46 интрапредсказания (или модуль 40 выбора режима в некоторых примерах) может выбирать подходящий режим интрапредсказания для использования из проверенных режимов.
[0158] Например, модуль 46 интрапредсказания может вычислить значения искажения в зависимости от скорости передачи, используя анализ искажения в зависимости от скорости передачи для различных проверенных режимов интрапредсказания, и выбрать режим интрапредсказания, имеющий наилучшие характеристики искажения в зависимости от скорости передачи среди проверенных режимов. Анализ искажения в зависимости от скорости передачи, как правило, определяет величину искажения (или ошибки) между кодированным блоком и исходным, некодированным блоком, который кодировался для создания кодированного блока, а также скорость передачи разрядов (то есть количество разрядов), используемую для создания кодированного блока. Модуль 46 интрапредсказания может вычислить отношения из искажений и скоростей для различных кодированных блоков, чтобы определить, какой режим интрапредсказания демонстрирует наилучшее значение искажения в зависимости от скорости передачи для блока.
[0159] После выбора режима интрапредсказания для блока модуль 46 интрапредсказания может предоставить модулю 56 энтропийного кодирования информацию, указывающую выбранный режим интрапредсказания для блока. Модуль 56 энтропийного кодирования может кодировать информацию, указывающую выбранный режим интрапредсказания. Видеокодер 20 может включить в переданный поток двоичных сигналов конфигурационные данные, которые могут включать в себя множество таблиц индексов режимов интрапредсказания и множество таблиц индексов измененных режимов интрапредсказания (также называемых таблицами отображения кодовых слов), определения контекстов кодирования для различных блоков и указания наиболее вероятного режима интрапредсказания, таблицы индексов режимов интрапредсказания и таблицы индексов измененного режима интрапредсказания для использования для каждого из контекстов.
[0160] Видеокодер 20 образует остаточный видеоблок путем вычитания данных предсказания от модуля 40 выбора режима из исходного кодируемого видеоблока. Сумматор 50 представляет собой компонент или компоненты, которые выполняют эту операцию вычитания. Модуль 52 обработки с преобразованием применяет к остаточному блоку преобразование, например дискретное косинусное преобразование (DCT) или концептуально сходное преобразование, создавая видеоблок, содержащий значения остаточных коэффициентов преобразования. Модуль 52 обработки с преобразованием может выполнять и другие преобразования, которые концептуально сходны с DCT. Также могли бы использоваться вейвлет-преобразования, целочисленные преобразования, преобразования поддиапазонов или другие типы преобразований. В любом случае модуль 52 обработки с преобразованием применяет преобразование к остаточному блоку, создавая блок остаточных коэффициентов преобразования. Преобразование может преобразовывать остаточную информацию из области значений пикселей в область преобразования, например частотную область. Модуль 52 обработки с преобразованием может отправить результирующие коэффициенты преобразования модулю 54 квантования. Модуль 54 квантования квантует коэффициенты преобразования для дополнительного уменьшения скорости передачи разрядов. Процесс квантования может уменьшить разрядную глубину, ассоциированную с некоторыми или всеми коэффициентами. Степень квантования можно изменять путем регулирования параметра квантования. В некоторых примерах модуль 54 квантования затем может выполнить сканирование матрицы, включающей в себя квантованные коэффициенты преобразования. В качестве альтернативы сканирование может выполнить модуль 56 энтропийного кодирования.
[0161] После квантования модуль 56 энтропийного кодирования энтропийно кодирует квантованные коэффициенты преобразования. Например, модуль 56 энтропийного кодирования может выполнять контекстно-адаптивное кодирование с переменной длиной (CAVLC), контекстно-адаптивное двоичное арифметическое кодирование (CABAC), синтаксическое контекстно-адаптивное двоичное арифметическое кодирование (SBAC), энтропийное кодирование с разбиением на интервалы вероятности (PIPE) или другую методику энтропийного кодирования. В случае контекстного энтропийного кодирования контекст может основываться на соседних блоках. После энтропийного кодирования с помощью модуля 56 энтропийного кодирования кодированный поток двоичных сигналов может передаваться другому устройству (например, видеодекодеру 30) или архивироваться для последующей передачи или извлечения.
[0162] Модуль 58 обратного квантования и модуль 60 обратного преобразования применяют обратное квантование и обратное преобразование соответственно, чтобы восстановить остаточный блок в области пикселей, например, для последующего использования в качестве эталонного блока. Модуль 44 компенсации движения может вычислить эталонный блок путем добавления остаточного блока к блоку с предсказанием в одном из кадров в запоминающем устройстве 64 эталонных изображений. Модуль 44 компенсации движения также может применить один или несколько интерполирующих фильтров к восстановленному остаточному блоку, чтобы вычислить значения субцелых пикселей для использования при оценке движения. Сумматор 62 добавляет восстановленный остаточный блок к блоку предсказания с компенсированным движением, созданному модулем 44 компенсации движения, чтобы создать восстановленный видеоблок для сохранения в запоминающем устройстве 64 эталонных изображений. Восстановленный видеоблок может использоваться модулем 42 оценки движения и модулем 44 компенсации движения в качестве эталонного блока, чтобы внешне кодировать блок в последующем видеокадре.
[0163] Модуль 42 оценки движения может определить одно или несколько эталонных изображений, которые видеокодер 20 может использовать для предсказания значений пикселей у одной или нескольких PU, которые предсказаны внешне. Модуль 42 оценки движения может сигнализировать каждое эталонное изображение в виде LTRP или краткосрочного эталонного изображения. Модуль 42 оценки движения может хранить эталонные изображения в буфере декодированных изображений (DPB), пока изображения не помечаются как неиспользуемые для эталона.
[0164] Модуль 40 выбора режима в видеокодере 20 может кодировать различные синтаксические элементы, которые включают в себя идентифицирующую информацию для одного или нескольких эталонных изображений. Во время кодирования предсказанного внешне изображения модуль 40 выбора режима может кодировать идентифицирующую информацию одного или нескольких LTRP для текущего изображения в наборе параметров последовательности. Модуль 40 выбора режима также может кодировать идентифицирующую информацию для одного или нескольких краткосрочных эталонных изображений, используемых для предсказания текущего изображения, в заголовке слайса текущего изображения или наборе параметров изображения для текущего изображения. В некоторых примерах синтаксические элементы могут указывать, наследует ли заголовок слайса долгосрочные эталонные изображения от активного набора параметров последовательности, или сигнализируется ли долгосрочное эталонное изображение явно в заголовке слайса.
[0165] Таким образом, модуль 40 выбора режима в видеокодере 20 на фиг. 2 представляет пример видеокодера, сконфигурированного для кодирования заголовка слайса для слайса видеоданных, где заголовок слайса включает в себя синтаксический элемент, указывающий, сигнализируется ли идентифицирующая информация для долгосрочного эталонного изображения явно в заголовке слайса либо выводится из набора параметров последовательности, соответствующего слайсу, и кодирования значения для идентифицирующей информации для долгосрочного эталонного изображения в заголовке слайса, когда синтаксический элемент указывает, что идентифицирующая информация для долгосрочного эталонного изображения сигнализируется явно.
[0166] В некоторых примерах видеокодер 20 может сигнализировать идентифицирующую информацию долгосрочных эталонных изображений путем сигнализации только некоторых из LSB значений POC у долгосрочных эталонных изображений в активном SPS или заголовке слайса. Однако в некоторых случаях два LTRP могут иметь одинаковые LSB POC, поэтому видеокодер 20 может дополнительно сигнализировать некоторые из MSB значений POC у LTRP.
[0167] В другом примере методик из данного раскрытия изобретения видеокодер 20 может сигнализировать список LTRP, используемых для предсказания значений пикселей текущего слайса, в синтаксических элементах заголовка текущего слайса. Видеокодер 20 может кодировать данные для множества изображений в порядке кодирования. Данные могут указывать, что каждое из множества изображений доступно для использования в качестве LTRP. Видеокодер 20 может кодировать синтаксический элемент в заголовке слайса текущего изображения, который включает в себя значения для самых младших разрядов (LSB) у соответствующих значений счетчика последовательности изображений (POC) у множества изображений, так что значения для LSB являются либо неубывающими, либо невозрастающими в порядке кодирования изображений.
[0168] На основе эталонных изображений, сигнализированных в SPS, PPS и заголовке слайса, видеокодер 20 строит списки эталонных изображений, например списки RefPicSetStCurrBefore, RefPicSetStCurrAfter, RefPicSetStFoll, RefPicSetLtCurr и RefPicSetLtFoll эталонных изображений. Видеокодер 20 может строить списки эталонных изображений на основе значений POC у эталонных изображений. На основе пяти списков эталонных изображений видеокодер 20 также может построить списки RefPicList0 и RefPicList1 эталонных изображений. Видеокодер 20 может использовать эталонные изображения, включенные в RefPicList0 и RefPicList1, для предсказания значений пикселей блока с двунаправленным предсказанием и эталонные изображения в RefPicList0 для предсказания значений пикселей блока с однонаправленным предсказанием.
[0169] Фиг. 3 - блок-схема, иллюстрирующая пример видеодекодера 30, который может реализовать методики для сигнализации данных для LTRP в SPS или в заголовке слайса. В примере из фиг. 3 видеодекодер 30 включает в себя модуль 70 энтропийного декодирования, модуль 72 компенсации движения, модуль 74 интрапредсказания, модуль 76 обратного квантования, модуль 78 обратного преобразования, запоминающее устройство 82 эталонных изображений и сумматор 80. Видеодекодер 30 в некоторых примерах может выполнять проход декодирования, в целом обратный по отношению к проходу кодирования, описанному по отношению к видеокодеру 20 (фиг. 2). Модуль 72 компенсации движения может формировать данные предсказания на основе векторов движения, принятых от модуля 70 энтропийного декодирования, тогда как модуль 74 интрапредсказания может формировать данные предсказания на основе индикаторов режима интрапредсказания, принятых от модуля 70 энтропийного декодирования.
[0170] Во время процесса декодирования видеодекодер 30 принимает от видеокодера 20 поток двоичных сигналов кодированного видео, который представляет собой видеоблоки кодированной слайса видео и ассоциированные синтаксические элементы. Модуль 70 энтропийного декодирования в видеодекодере 30 энтропийно декодирует поток двоичных сигналов, чтобы сформировать квантованные коэффициенты, векторы движения или индикаторы режима интрапредсказания, и другие синтаксические элементы. Модуль 70 энтропийного декодирования перенаправляет векторы движения и другие синтаксические элементы в модуль 72 компенсации движения. Видеодекодер 30 может принять синтаксические элементы на уровне слайса видео и/или уровне видеоблока.
[0171] Когда секция видео кодируется в виде слайса с интракодированием (I), модуль 74 интрапредсказания может сформировать данные предсказания для видеоблока текущей слайса видео на основе сигнализированного режима интрапредсказания и данных из ранее декодированных блоков текущего кадра или изображения. Когда видеокадр кодируется в виде слайса с интеркодированием (то есть B, P или GPB), модуль 72 компенсации движения создает блоки с предсказанием для видеоблока текущего слайса видео на основе векторов движения и других синтаксических элементов, принятых от модуля 70 энтропийного декодирования. Блоки с предсказанием могут создаваться из одного из эталонных изображений в одном из списков эталонных изображений. Видеодекодер 30 может построить списки эталонных кадров, Список 0 и Список 1, используя методики построения по умолчанию на основе эталонных изображений, сохраненных в запоминающем устройстве 82 эталонных изображений.
[0172] Модуль 72 компенсации движения определяет информацию предсказания для видеоблока текущего слайса видео путем синтаксического анализа векторов движения и других синтаксических элементов и использует информацию предсказания для создания блоков с предсказанием для текущего декодируемого видеоблока. Например, модуль 72 компенсации движения использует некоторые из принятых синтаксических элементов для определения режима предсказания (например, интра- или интерпредсказание), используемого для кодирования видеоблоков слайса видео, типа слайса интерпредсказания (например, B-слайс, P-слайс или GPB-слайс), информации построения для одного или нескольких списков эталонных изображений для слайса, векторов движения для каждого видеоблока с интеркодированием в слайсе, состояния интерпредсказания для каждого видеоблока с интеркодированием в слайсе и другой информации для декодирования видеоблоков в текущем слайсе видео.
[0173] Модуль 72 компенсации движения также может выполнить интерполяцию на основе интерполирующих фильтров. Модуль 72 компенсации движения может использовать интерполирующие фильтры, которые использовались видеокодером 20 во время кодирования видеоблоков, чтобы вычислить интерполированные значения для субцелых пикселей эталонных блоков. В этом случае модуль 72 компенсации движения может определить интерполирующие фильтры, используемые видеокодером 20, из принятых синтаксических элементов и использовать интерполирующие фильтры для создания блоков с предсказанием.
Y
[0174] Модуль 76 обратного квантования обратно квантует, то есть деквантует, квантованные коэффициенты преобразования, предоставленные в потоке двоичных сигналов и декодированные модулем 70 энтропийного декодирования. Процесс обратного квантования может включать в себя использование параметра QP квантования, вычисленного видеодекодером 30 для каждого видеоблока в слайсе видео, чтобы определить степень квантования, а также степень обратного квантования, которое следует применить.
[0175] Модуль 78 обратного преобразования применяет к коэффициентам преобразования обратное преобразование, например обратное DCT, обратное целочисленное преобразование или концептуально сходный процесс обратного преобразования, чтобы создать остаточные блоки в области пикселей.
[0176] После того, как модуль 72 компенсации движения сформирует блок с предсказанием для текущего видеоблока на основе векторов движения и других синтаксических элементов, видеодекодер 30 образует декодированный видеоблок путем суммирования остаточных блоков от модуля 78 обратного преобразования с соответствующими блоками с предсказанием, сформированными модулем 72 компенсации движения. Сумматор 80 представляет собой компонент или компоненты, которые выполняют эту операцию суммирования. При желании также можно применить фильтр уменьшения блочности для фильтрации декодированных блоков, чтобы удалить артефакты блочности. Другие фильтры цикла (либо в цикле кодирования, либо после цикла кодирования) также могут использоваться для сглаживания переходов пикселей или иного повышения качества видео. Декодированные видеоблоки в заданном кадре или изображении затем сохраняются в запоминающем устройстве 82 эталонных изображений, которое хранит эталонные изображения, используемые для последующей компенсации движения. Запоминающее устройство 82 эталонных изображений также хранит декодированное видео для последующего представления на устройстве отображения, например устройстве 32 отображения из фиг. 1.
[0177] Как описано выше, во время интерпредсказания модуль 72 компенсации движения может определить одно или несколько эталонных изображений, которые видеодекодер 30 может использовать для образования видеоблоков с предсказанием для текущего декодируемого блока. Модуль 72 компенсации движения может определить, являются ли эталонные изображения долгосрочными эталонными изображениями или краткосрочными эталонными изображениями, на основе синтаксических элементов в потоке двоичных сигналов кодированного видео, которые указывают, помечается ли эталонное изображение для долгосрочного эталона или краткосрочного эталона. Модуль 72 компенсации движения может хранить эталонные изображения в буфере декодированных изображений (DPB), пока изображения не помечаются как неиспользуемые для эталона.
[0178] Модуль 72 компенсации движения в видеодекодере 30 может декодировать различные синтаксические элементы, которые включают в себя идентифицирующую информацию для одного или нескольких эталонных изображений, используемых для образования блоков с предсказанием для декодирующегося в настоящее время блока. Во время декодирования предсказанной внешне PU модуль 72 компенсации движения может декодировать идентифицирующую информацию у одного или нескольких LTRP для текущего изображения, которые сигнализируются в активном наборе параметров последовательности. Модуль 72 компенсации движения также может декодировать идентифицирующую информацию для одного или нескольких краткосрочных эталонных изображений, используемых для предсказания текущего изображения, в заголовке слайса текущего изображения или наборе параметров изображения для текущего изображения. В некоторых примерах синтаксические элементы могут указывать, наследует ли заголовок слайса долгосрочные эталонные изображения от активного набора параметров последовательности, или сигнализируется ли идентифицирующая информация для долгосрочного эталонного изображения явно в заголовке слайса.
[0179] Таким образом, модуль 72 компенсации движения в видеодекодере 30 на фиг. 3 представляет пример видеодекодера, сконфигурированного для кодирования заголовка слайса для слайса видеоданных, где заголовок слайса включает в себя синтаксический элемент, указывающий, сигнализируется ли идентифицирующая информация для долгосрочного эталонного изображения явно в заголовке слайса либо выводится из набора параметров последовательности, соответствующего слайсу, и кодирования значения для идентифицирующей информации для долгосрочного эталонного изображения в заголовке слайса, когда синтаксический элемент указывает, что идентифицирующая информация для долгосрочного эталонного изображения сигнализируется явно.
[0180] В некоторых примерах видеодекодер 30 может декодировать идентифицирующую информацию долгосрочных эталонных изображений на основе только некоторых из LSB значений POC у долгосрочных эталонных изображений, сигнализированных в активном SPS или заголовке слайса. Однако в некоторых случаях два LTRP могут иметь одинаковые LSB POC, поэтому видеокодер 20 может дополнительно декодировать некоторые из MSB значений POC у LTRP, чтобы устранить неоднозначность у LTRP, которые имеют одинаковые LSB POC.
[0181] В другом примере методик из данного раскрытия изобретения видеодекодер 30 может кодировать список LTRP, используемых для предсказания значений пикселей текущего слайса, в синтаксических элементах заголовка текущего слайса. Видеодекодер 30 может кодировать данные для множества изображений в порядке кодирования. Данные могут указывать, что каждое из множества изображений доступно для использования в качестве LTRP. Видеодекодер 30 может кодировать синтаксический элемент в заголовке слайса текущего изображения, который включает в себя значения для самых младших разрядов (LSB) у соответствующих значений счетчика последовательности изображений (POC) у множества изображений, так что значения для LSB являются либо неубывающими, либо невозрастающими в порядке кодирования изображений.
[0182] На основе эталонных изображений, сигнализированных в SPS, PPS и заголовке слайса, видеодекодер 30 строит подмножества эталонных изображений, например подмножества RefPicSetStCurrBefore, RefPicSetStCurrAfter, RefPicSetStFoll, RefPicSetLtCurr и RefPicSetLtFoll эталонных изображений. Видеодекодер 30 может строить списки эталонных изображений на основе значений POC у эталонных изображений. На основе пяти списков эталонных изображений видеодекодер 30 также может построить списки RefPicList0 и RefPicList1 эталонных изображений. Видеодекодер 30 может использовать эталонные изображения, включенные в RefPicList0 и RefPicList1, для предсказания значений пикселей блока с двунаправленным предсказанием и эталонные изображения в RefPicList0 для предсказания значений пикселей блока с однонаправленным предсказанием.
[0183] Фиг. 4 - блок-схема алгоритма, иллюстрирующая процесс для кодирования данных для эталонных изображений в соответствии с одним или несколькими примерами, описанными в данном раскрытии изобретения. Только с целью иллюстрации способ из фиг. 4 может выполняться кодировщиком видео, соответствующим либо видеокодеру 20, либо видеодекодеру 30. В способе из фиг. 4 кодировщик видео может кодировать идентифицирующую информацию для долгосрочных эталонных изображений в активном наборе параметров последовательности (SPS) (100). В некоторых примерах идентифицирующая информация может включать в себя LSB значений POC для LTRP.
[0184] Кодировщик видео также может кодировать один или несколько синтаксических элементов, которые включают в себя идентифицирующую информацию для одного или нескольких краткосрочных эталонных изображений, в SPS и заголовке слайса для кодируемого в настоящее время изображения (102).
[0185] В дополнение к кодированию идентифицирующей информации для LTRP в SPS кодировщик видео также может кодировать идентифицирующую информацию для LTRP в текущем заголовке слайса у кодирующегося в настоящее время изображения (104). Заголовок слайса может включать в себя синтаксический элемент, содержащий список LTRP для текущего слайса. В некоторых примерах по меньшей мере некоторые из LTRP в списке унаследованы от активного SPS, а некоторые из LTRP в списке кодируются в текущем заголовке слайса. Процесс кодирования унаследованного SPS подробнее описывается ниже по отношению к фиг. 5.
[0186] После кодирования LTRP и STRP кодировщик видео может построить подмножества эталонных изображений. В некоторых примерах строятся подмножества эталонных изображений, например подмножества RefPicSetStCurrBefore, RefPicSetStCurrAfter, RefPicSetStFoll, RefPicSetLtCurr и RefPicSetLtFoll эталонных изображений (106). На основе подмножеств эталонных изображений кодировщик видео строит списки RefPicList0 и RefPicList1 эталонных изображений (108). Кодировщик видео может применять методики построения по умолчанию для построения списков эталонных изображений. Кодировщик видео также может изменить порядок эталонных изображений в RefPicList0 и RefPicList1 на основе синтаксических элементов, которые задают иной порядок для эталонных изображений.
[0187] После построения списков эталонных изображений кодировщик видео может образовать блоки с предсказанием для кодирующегося в настоящее время изображения на основе эталонных изображений из списков эталонных изображений (110). Во время кодирования кодировщик видео может предсказать часть видеоданных слайса, используя долгосрочное эталонное изображение, и кодировать часть видеоданных на основе предсказания (112).
[0188] Фиг. 5 - блок-схема алгоритма, иллюстрирующая процесс для кодирования данных для LTRP в SPS или в заголовке слайса в соответствии с одним или несколькими примерами, описанными в данном раскрытии изобретения. Только с целью иллюстрации способ из фиг. 5 может выполняться кодировщиком видео, соответствующим либо видеокодеру 20, либо видеодекодеру 30. В способе из фиг. 5 кодировщик видео может кодировать заголовок слайса для слайса видеоданных (120). В некоторых примерах заголовок слайса может быть заголовком слайса для кодирующегося в настоящее время изображения.
[0189] Заголовок слайса включает в себя синтаксический элемент, указывающий, сигнализируется ли идентифицирующая информация для LTRP явно в заголовке слайса либо выводится из набора параметров последовательности, соответствующего слайсу. Если синтаксический элемент указывает, что идентифицирующая информация для LTRP сигнализируется явно, то кодировщик видео может кодировать значение для идентифицирующей информации для долгосрочного эталонного изображения в заголовке слайса (122). Если синтаксический элемент не указывает, что идентифицирующая информация для LTRP сигнализируется явно, то кодировщик видео может вывести идентифицирующую информацию для LTRP из набора параметров последовательности, когда синтаксический элемент указывает, что идентифицирующая информация для долгосрочного эталонного изображения не сигнализируется явно (124).
[0190] В некоторых примерах устройство кодирования видео, выполненное с возможностью выполнения процесса из фиг. 5, можно дополнительно сконфигурировать для сохранения первого декодированного изображения, соответствующего первому изображению, в буфере декодированных изображений. Когда буфер декодированных изображений содержит больше одного эталонного изображения, которое помечается как "используемое для эталона" и которое имеет такое же значение самых младших разрядов (LSB) у счетчика последовательности изображений (POC), как и первое изображение, для кодирования идентифицирующей информации устройство дополнительно конфигурируется для кодирования первого синтаксического элемента, равного единице, в заголовке слайса у слайса второго изображения. Когда буфер декодированных изображений не содержит больше одного изображения, которое помечается как "используемое для эталона" и которое имеет такое же значение LSB у POC, как и первое изображение, для кодирования идентифицирующей информации устройство может конфигурироваться для кодирования первого синтаксического элемента, равного нулю, в заголовке слайса. Когда первый синтаксический элемент равен единице, для кодирования идентифицирующей информации устройство дополнительно конфигурируется для кодирования второго синтаксического элемента, указывающего самые старшие разряды (MSB) у значения POC первого изображения, и для кодирования второго изображения с использованием первого изображения в качестве долгосрочного эталонного изображения.
[0191] В некоторых примерах кодировщик видео, сконфигурированный для выполнения процесса из фиг. 5, может дополнительно конфигурироваться для кодирования данных для множества изображений в порядке кодирования изображений. Данные могут указывать, что в множестве изображений каждое доступно для использования в качестве долгосрочных эталонных изображений. Кодировщик видео также может кодировать значения для самых младших разрядов (LSB) у значений счетчика последовательности изображений (POC) у множества изображений так, что значения для LSB являются либо неубывающими, либо невозрастающими в порядке кодирования изображений.
[0192] В другом примере для кодирования значений для LSB кодировщик видео может конфигурироваться для кодирования значений для LSB так, что для любых значений j и k, где j и k являются целыми числами в диапазоне от нуля до количества долгосрочных эталонных изображений минус единица, LSB у значения POC первого изображения в множестве изображений в положении j в списке эталонных изображений больше либо равны или меньше либо равны LSB у значения POC второго изображения в множестве изображений в положении k в списке эталонных изображений. Кодировщик видео может дополнительно конфигурироваться для кодирования SPS, включающего в себя информацию, указывающую количество LTRP.
[0193] В еще одном примере данные для множества изображений дополнительно могут указывать, используется ли множество изображений для эталона, и для каждого из множества изображений, которое указано как используемое для эталона, данные могут дополнительно включать в себя данные для определения, кодируются ли значения самых старших разрядов (MSB) у значений POC для каждого из изображений.
[0194] В другом примере кодировщик видео может определить значение переменной DeltaPocMSBCycleLt, где значение DeltaPocMSBCycleLt у одного из множества изображений равно значению для синтаксического элемента delta_poc_msb_cycle_lt для одного из множества изображений, когда одно из множества изображений имеет значение порядка кодирования, равное количеству долгосрочных эталонных изображений, заданных в наборе параметров последовательности.
[0195] Нужно признать, что в зависимости от примера некоторые действия или события в любой из методик, описанных в этом документе, могут выполняться в иной последовательности, могут добавляться, объединяться или полностью пропускаться (например, не все описанные действия или события необходимы для применения методик на практике). Кроме того, в некоторых примерах действия или события могут выполняться одновременно, например, посредством многопоточной обработки, обработки прерываний или нескольких процессоров, а не последовательно.
[0196] В одном или нескольких примерах описываемые функции могут быть реализованы в аппаратных средствах, программном обеспечении, микропрограммном обеспечении или любом их сочетании. Если они реализованы в программном обеспечении, то функции могут храниться или передаваться в виде одной или нескольких команд либо кода на компьютерно-читаемом носителе и исполняться аппаратным модулем обработки. Компьютерно-читаемые носители могут включать в себя компьютерно-читаемые носители информации, которые соответствуют материальному носителю, такому как носители информации, или средства связи, включающие в себя любое средство, которое облегчает перенос компьютерной программы из одного места в другое, например, в соответствии с неким протоколом связи. Таким образом, компьютерно-читаемые носители в целом могут соответствовать (1) материальным компьютерно-читаемым носителям информации, которые являются долговременными, или (2) средству связи, такому как сигнал или несущая. Носители информации могут быть любыми доступными носителями, к которым можно обращаться с помощью одного или нескольких компьютеров либо одного или нескольких процессоров для извлечения команд, кода и/или структур данных для реализации методик, описанных в данном раскрытии изобретения. Компьютерный программный продукт может включать в себя компьютерно-читаемый носитель.
[0197] В качестве примера, а не ограничения, такие компьютерно-читаемые носители информации могут быть выполнены в виде RAM, ROM, EEPROM, компакт-диска или другого накопителя на оптических дисках, накопителя на магнитных дисках или других магнитных запоминающих устройств, флэш-памяти или любого другого носителя, который может использоваться для хранения нужного программного кода в виде команд или структур данных и к которому [носителю] можно обращаться с помощью компьютера. Также любое соединение корректно называть компьютерно-читаемым носителем. Например, если команды передаются с веб-сайта, сервера или другого удаленного источника с использованием коаксиального кабеля, оптоволоконного кабеля, витой пары, цифровой абонентской линии (DSL) или беспроводных технологий, например ИК-связи, радиочастотной связи и СВЧ-связи, то коаксиальный кабель, оптоволоконный кабель, витая пара, DSL или беспроводные технологии, например ИК-связь, радиочастотная связь и СВЧ-связь, включаются в определение носителя. Однако следует понимать, что компьютерно-читаемые носители информации и носители информации не включают в себя соединения, несущие, сигналы или другие кратковременные носители, а вместо этого ориентированы на долговременные, материальные носители информации. Оптические и магнитные диски при использовании в данном документе включают в себя компакт-диск (CD), лазерный диск, оптический диск, цифровой универсальный диск (DVD), гибкий диск и диск Blu-ray, где магнитные диски обычно воспроизводят данные магнитным способом, тогда как оптические диски воспроизводят данные оптически с помощью лазеров. Сочетания вышеперечисленного также следует включить в область компьютерно-читаемых носителей.
[0198] Команды могут исполняться одним или несколькими процессорами, например одним или несколькими цифровыми процессорами сигналов (DSP), универсальными микропроцессорами, специализированными интегральными схемами (ASIC), программируемыми пользователем логическими матрицами (FPGA) или другими эквивалентными интегральными либо дискретными логическими схемами. Соответственно, термин "процессор" при использовании в данном документе может относиться к любой вышеупомянутой структуре или к любой другой структуре, подходящей для реализации описанных в этом документе методик. К тому же в некоторых особенностях функциональные возможности, описанные в этом документе, могут быть предоставлены в специализированных аппаратных и/или программных модулях, сконфигурированных для кодирования и декодирования, или встроены в объединенный кодек. Также методики можно было бы полностью реализовать в одной или нескольких схемах или логических элементах.
[0199] Методики из данного раскрытия изобретения могут быть реализованы в широком спектре устройств, включая беспроводную телефонную трубку, интегральную схему (ИС) или набор ИС (например, набор микросхем). Различные компоненты, модули или блоки описываются в данном раскрытии изобретения для подчеркивания функциональных особенностей устройств, сконфигурированных для выполнения раскрытых методик, но не обязательно требуют реализации с помощью разных аппаратных модулей. Точнее, как описано выше, различные модули могут объединяться в аппаратный модуль кодека или предоставляться с помощью совокупности взаимодействующих аппаратных модулей, включающих в себя один или несколько процессоров, как описано выше, в сочетании с подходящим программным обеспечением и/или микропрограммным обеспечением.
[0200] Описаны различные примеры. Эти и другие примеры входят в объем нижеследующей формулы изобретения.