ПОСТРОЕНИЕ СПИСКА ОПОРНЫХ ИЗОБРАЖЕНИЙ ДЛЯ ВИДЕОКОДИРОВАНИЯ
REFERENCE PICTURE LIST CONSTRUCTION FOR VIDEO CODING

Перекрестные ссылки на родственные заявки
По данной заявке испрашивается приоритет по:
предварительной заявке на патент США №61/538787, поданной 23 сентября 2011 года;
предварительной заявке на патент США №61/539433, поданной 26 сентября 2011 года; и
предварительной заявке на патент США №61/542034, поданной 30 сентября 2011 года, содержание которых целиком включено сюда по ссылке.
Область техники, к которой относится изобретение
Изобретение относится к видеокодированию и, в частности, касается методик для кодирования видеоданных.
Уровень техники
Возможности цифрового видео могут быть включены в устройства самого широкого применения, в том числе цифровые телевизионные приемники, системы прямого цифрового вещания, системы беспроводного вещания, персональные цифровые помощники (PDA), компьютеры типа «лэптоп» или настольные компьютеры, планшетные компьютеры, устройства для чтения электронных книг, цифровые камеры, цифровые записывающие устройства, цифровые медиаплееры, видеоигровые устройства, видеоигровые консоли, сотовые или спутниковые радиотелефоны, так называемые «смартфоны», устройства для проведения телеконференций, устройства потокового видео и т.п. Устройства цифрового видео реализуют различные методики сжатия видео, которые, например, описаны в стандартах определенных как MPEG-2, MPEG-4, ITU-T H.263, ITU-T H.264/MPEG-4, Часть 10, стандарт усовершенствованного видеокодирования (AVC), высокоэффективный стандарт видеокодирования (HEVC), находящийся в процессе разработки, а также расширения указанных стандартов. Видеоустройства могут передавать, принимать, энкодировать, декодировать и/или запоминать цифровую видеоинформацию более эффективно посредством реализации указанных методик сжатия видео.
Согласно методикам сжатия видео выполняется пространственное (внутрикадровое) предсказание и/или временное (межкадровое) предсказание с целью уменьшения или исключения избыточности, свойственной видеопоследовательностям. Для видеокодирования на блочной основе видеослайс (то есть, видеоизображение или часть видеоизображения) может быть разделен на видеоблоки, которые также могут называться древовидными блоками, блоками древовидного кода (CTB), единицами древовидного кода (CTU), единицами кода (CU) и/или узлами кадра. Видеоблоки в слайсе изображения с внутрикадровым кодированием (I) кодируют с использованием пространственного предсказания применительно к опорным отсчетам в соседних блоках одного и того же изображения. В видеоблоках в слайсе изображения с межкадровым кодированием (P или B) может использоваться пространственное предсказание в отношении опорных отсчетов в соседних блоках одного и того же изображения или временное предсказание в отношении опорных отсчетов других опорных изображений. Изображения могут называться кадрами, а опорные изображения могут называться опорными кадрами.
В результате пространственного или временного предсказания получают предиктивный блок для блока, подлежащего кодированию. Остаточные данные представляют пиксельную разность между исходным блоком, подлежащим кодированию, и предиктивным блоком. Блок с межкадровым кодированием кодируют в соответствии с вектором движения, который указывает блок опорных отсчетов, образующих предиктивный блок, и остаточные данные, указывающие различие между кодированным блоком и предиктивным блоком. Блок с внутрикадровым кодированием кодируют в соответствии с режимом внутрикадрового кодирования и остаточными данными. Для дальнейшего сжатия остаточные данные можно преобразовать из пиксельной области в область преобразования, в результате чего получают остаточные коэффициенты преобразования, которые затем можно квантовать. Квантованные коэффициенты преобразования, изначально скомпонованные в двумерной матрице, можно сканировать для создания одномерного вектора коэффициентов преобразования, и применить энтропийное кодирование для достижения еще большего сжатия.
Сущность изобретения
В общем случае в данном разделе описываются методики, относящиеся к получению набора опорных изображений для его использования при видеокодировании. Например, набор опорных изображений может образовать комбинацию из множества поднаборов опорных изображений. Каждый из поднаборов опорных изображений может идентифицировать множество потенциальных опорных изображений, меньшее, чем все потенциальные опорные изображения. В приведенных в качестве примера методиках, описанных в этом разделе, видеокодер (кодер или декодер) может построить множество списков, каждый из которых включает в себя идентификаторы поднабора потенциальных опорных изображений. Исходя из этого множества списков, видеокодер может построить множество поднаборов опорных изображений, в результате чего видеокодер получит набор опорных изображений.
Вдобавок к методикам, относящимся к получению набора опорных изображений, здесь раскрыты упрощенные методики использования списка опорных изображений. Использование списка опорных изображений может исключить необходимость переупорядочивания опорных изображений. Например, если в модификации списка опорных изображений нет необходимости, то тогда начальные списки опорных изображений могут образовать конечные списки опорных изображений, и тогда дополнительное переупорядочивание может не потребоваться. Указанные методики также могут быть предназначены для построения списка опорных изображений таким образом, при котором видеокодер многократно добавляет опорные изображения в список опорных изображений, пока количество записей в списке опорных изображений не станет равным максимально допустимому количеству записей.
В некоторых примерах указанные методики предназначены для модификации списка опорных изображений. Например, видеокодер может модифицировать список опорных изображений путем обращения к одному или нескольким поднаборам опорных изображений и введения одного или нескольких изображений из поднаборов опорных изображений в список опорных изображений после построения начального списка опорных изображений.
В некоторых примерах видеокодер может осуществлять управление буфером декодированных изображений (DPB). В этих примерах видеокодер может удалять декодированные изображения из буфера DPB, если декодированное изображение не относится к набору опорных изображений. В некоторых случаях, видеокодер может удалить декодированное изображение до кодирования текущего изображения.
В одном примере описывается способ кодирования видеоданных, который включает в себя кодирование информации, указывающей опорные изображения, относящиеся к набору опорных изображений. В этом примере набор опорных изображений идентифицирует опорные изображения, которые потенциально можно использовать для межкадрового предсказания текущего изображения и можно потенциально использовать для межкадрового предсказания одного или нескольких изображений, следующих за текущим изображением в порядке декодирования. Этот способ также включает в себя построение множества поднаборов опорных изображений, каждый из которых идентифицирует нуль или более опорных изображений из набора опорных изображений, и кодирование текущего изображения на основе указанного множества поднаборов опорных изображений.
В одном примере описывается устройство для кодирования видеоданных. Устройство включает в себя видеокодер, который сконфигурирован для кодирования информации, указывающей опорные изображения, относящиеся к набору опорных изображений. В этом примере набор опорных изображений идентифицирует опорные изображения, которые потенциально можно использовать для межкадрового предсказания текущего изображения и можно потенциально использовать для межкадрового предсказания одного или нескольких изображений, следующих за текущим изображением в порядке декодирования. Видеокодер также сконфигурирован для построения множества поднаборов опорных изображений, каждый из которых идентифицирует нуль или более опорных изображений из набора опорных изображений, и кодирования текущего изображения на основе указанного множества поднаборов опорных изображений.
В одном примере описывается считываемый компьютером носитель данных, с запомненными на нем командами, которые при их выполнении инициируют кодирование процессором устройства для кодирования видеоданных информации, указывающей опорные изображения, относящиеся к набору опорных изображений. В этом примере набор опорных изображений идентифицирует опорные изображения, которые потенциально можно использовать для межкадрового предсказания текущего изображения и можно потенциально использовать для межкадрового предсказания одного или нескольких изображений, следующих за текущим изображением в порядке декодирования. Эти команды также инициируют построение процессором множества поднаборов опорных изображений, каждый из которых идентифицирует нуль или более опорных изображений из набора опорных изображений, и кодирование текущего изображения на основе указанного множества поднаборов опорных изображений.
В одном примере описывается устройство для кодирования видеоданных. Устройство включает в себя средство для кодирования информации, указывающей опорные изображения, относящиеся к набору опорных изображений. В этом примере набор опорных изображений идентифицирует опорные изображения, которые потенциально можно использовать для межкадрового предсказания текущего изображения и можно потенциально использовать для межкадрового предсказания одного или нескольких изображений, следующих за текущим изображением в порядке декодирования. Устройство также включает в себя средство для построения множества поднаборов опорных изображений, каждый из которых идентифицирует нуль или более опорных изображений из набора опорных изображений, и средство для кодирования текущего изображения на основе указанного множества поднаборов опорных изображений.
В одном примере описывается способ кодирования видеоданных, причем способ включает в себя кодирование информации, указывающей опорные изображения, относящиеся к набору опорных изображений. В этом примере набор опорных изображений идентифицирует опорные изображения, которые потенциально можно использовать для межкадрового предсказания текущего изображения и можно потенциально использовать для межкадрового предсказания одного или нескольких изображений, следующих за текущим изображением в порядке декодирования. Этот способ также включает в себя построение множества поднаборов опорных изображений, каждый из которых идентифицирует нуль или более опорных изображений из набора опорных изображений, добавление опорных изображений из первого поднабора из множества поднаборов опорных изображений, за которыми добавляют опорные изображения из второго поднабора из множества поднаборов опорных изображений, и за которыми добавляют опорные изображения из третьего поднабора из множества поднаборов опорных изображений, в список опорных изображений, пока количество записей в списке опорных изображений не превышает максимальное количество записей, допустимое для списка опорных изображений, и кодирование текущего изображения на основе указанного списка опорных изображений.
В одном примере описывается устройство для кодирования видеоданных. Устройство включает в себя видеокодер, сконфигурированный для кодирования информации, указывающей опорные изображения, относящиеся к набору опорных изображений. В этом примере набор опорных изображений идентифицирует опорные изображения, которые потенциально можно использовать для межкадрового предсказания текущего изображения и можно потенциально использовать для межкадрового предсказания одного или нескольких изображений, следующих за текущим изображением в порядке декодирования. Видеокодер также сконфигурирован для построения множества поднаборов опорных изображений, каждый из которых идентифицирует нуль или более опорных изображений из набора опорных изображений, добавления опорных изображений из первого поднабора из множества поднаборов опорных изображений, за которыми добавляют опорные изображения из второго поднабора из множества поднаборов опорных изображений, и за которыми добавляют опорные изображения из третьего поднабора из множества поднаборов опорных изображений, в список опорных изображений, пока количество записей в списке опорных изображений не превышает максимальное количество записей, допустимое для списка опорных изображений, и кодирование текущего изображения на основе указанного списка опорных изображений.
В одном примере описывается считываемый компьютером носитель данных с запомненными на нем командами, которые при их выполнении инициируют кодирование процессором устройства для кодирования видеоданных информации, указывающей опорные изображения, относящиеся к набору опорных изображений. В этом примере набор опорных изображений идентифицирует опорные изображения, которые потенциально можно использовать для межкадрового предсказания текущего изображения и можно потенциально использовать для межкадрового предсказания одного или нескольких изображений, следующих за текущим изображением в порядке декодирования. Эти команды также инициируют построение процессором множества поднаборов опорных изображений, каждый из которых идентифицирует нуль или более опорных изображений из набора опорных изображений, добавление опорных изображений из первого поднабора из множества поднаборов опорных изображений, за которыми добавляют опорные изображения из второго поднабора из множества поднаборов опорных изображений, и за которыми добавляют опорные изображения из третьего поднабора из множества поднаборов опорных изображений, в список опорных изображений, пока количество записей в списке опорных изображений не превышает максимальное количество записей, допустимое для списка опорных изображений, и кодирование текущего изображения на основе указанного списка опорных изображений.
В одном примере описывается устройство для кодирования видеоданных. Устройство включает в себя средство для кодирования информации, указывающей опорные изображения, относящиеся к набору опорных изображений. В этом примере набор опорных изображений идентифицирует опорные изображения, которые потенциально можно использовать для межкадрового предсказания текущего изображения и можно потенциально использовать для межкадрового предсказания одного или нескольких изображений, следующих за текущим изображением в порядке декодирования. Устройство также включает в себя средство для построения множества поднаборов опорных изображений, каждый из которых идентифицирует нуль или более опорных изображений из набора опорных изображений, средство для добавления опорных изображений из первого поднабора из множества поднаборов опорных изображений, за которыми добавляют опорные изображения из второго поднабора из множества поднаборов опорных изображений, и за которыми добавляют опорные изображения из третьего поднабора из множества поднаборов опорных изображений, в список опорных изображений, пока количество записей в списке опорных изображений не превышает максимальное количество записей, допустимое для списка опорных изображений, и кодирование текущего изображения на основе указанного списка опорных изображений.
В одном примере описывается способ кодирования видеоданных, причем способ включает в себя кодирование информации, указывающей опорные изображения, относящиеся к набору опорных изображений. В этом примере набор опорных изображений идентифицирует опорные изображения, которые потенциально можно использовать для межкадрового предсказания текущего изображения и можно потенциально использовать для межкадрового предсказания одного или нескольких изображений, следующих за текущим изображением в порядке декодирования. Этот способ также включает в себя: построение множества поднаборов опорных изображений, каждый из которых идентифицирует нуль или более опорных изображений из набора опорных изображений; добавление опорных изображений из множества поднаборов опорных изображений в первый набор записей в списке опорных изображений; определение того, равно ли количество записей в списке опорных изображений максимальному количеству записей, допустимому для списка опорных изображений; повторное добавление одного или нескольких опорных изображений по меньшей мере из одного из поднаборов опорных изображений к записям в списке опорных изображений, которые следуют за первым набором записей, пока количество записей в списке опорных изображений не станет равным максимальному количеству записей, допустимому для списка опорных изображений, когда количество записей в списке опорных изображений не равно максимальному количеству записей, допустимому для списка опорных изображений; и кодирование текущего изображения на основе указанного списка опорных изображений.
В одном примере описывается устройство для кодирования видеоданных. Устройство включает в себя видеокодер, сконфигурированный для кодирования информации, указывающей опорные изображения, относящиеся к набору опорных изображений. В этом примере набор опорных изображений идентифицирует опорные изображения, которые потенциально можно использовать для межкадрового предсказания текущего изображения и можно потенциально использовать для межкадрового предсказания одного или нескольких изображений, следующих за текущим изображением в порядке декодирования. Видеокодер также сконфигурирован для: построения множества поднаборов опорных изображений, каждый из которых идентифицирует нуль или более опорных изображений из набора опорных изображений; добавления опорных изображений из множества поднаборов опорных изображений в первый набор записей в списке опорных изображений; определения того, равно ли количество записей в списке опорных изображений максимальному количеству записей, допустимому для списка опорных изображений; повторного добавления одного или нескольких опорных изображений по меньшей мере из одного из поднаборов опорных изображений к записям в списке опорных изображений, которые следуют за первым набором записей, пока количество записей в списке опорных изображений не станет равным максимальному количеству записей, допустимому для списка опорных изображений, когда количество записей в списке опорных изображений не равно максимальному количеству записей, допустимому для списка опорных изображений; и кодирования текущего изображения на основе указанного списка опорных изображений.
В одном примере описывается считываемый компьютером носитель данных с запомненными на нем командами, которые при их выполнении инициируют кодирование процессором устройства для кодирования видеоданных информации, указывающей опорные изображения, относящиеся к набору опорных изображений. В этом примере набор опорных изображений идентифицирует опорные изображения, которые потенциально можно использовать для межкадрового предсказания текущего изображения и можно потенциально использовать для межкадрового предсказания одного или нескольких изображений, следующих за текущим изображением в порядке декодирования. Эти команды также инициируют: построение процессором множества поднаборов опорных изображений, каждый из которых идентифицирует нуль или более опорных изображений из набора опорных изображений; добавление процессором опорных изображений из множества поднаборов опорных изображений в первый набор записей в списке опорных изображений; определение процессором того, равно ли количество записей в списке опорных изображений максимальному количеству записей, допустимому для списка опорных изображений; повторное добавление процессором одного или нескольких опорных изображений по меньшей мере из одного из поднаборов опорных изображений к записям в списке опорных изображений, которые следуют за первым набором записей, пока количество записей в списке опорных изображений не станет равным максимальному количеству записей, допустимому для списка опорных изображений, когда количество записей в списке опорных изображений не равно максимальному количеству записей, допустимому для списка опорных изображений; и кодирование процессором текущего изображения на основе указанного списка опорных изображений.
В одном примере описывается устройство для кодирования видеоданных. Устройство включает в себя средство для кодирования информации, указывающей опорные изображения, относящиеся к набору опорных изображений. В этом примере набор опорных изображений идентифицирует опорные изображения, которые потенциально можно использовать для межкадрового предсказания текущего изображения и можно потенциально использовать для межкадрового предсказания одного или нескольких изображений, следующих за текущим изображением в порядке декодирования. Устройство также включает в себя: средство для построения множества поднаборов опорных изображений, каждый из которых идентифицирует нуль или более опорных изображений из набора опорных изображений; средство для добавления опорных изображений из множества поднаборов опорных изображений в первый набор записей в списке опорных изображений; средство для определения того, равно ли количество записей в списке опорных изображений максимальному количеству записей, допустимому для списка опорных изображений; средство для многократного повторного добавления одного или нескольких опорных изображений по меньшей мере из одного из поднаборов опорных изображений к записям в списке опорных изображений, которые следуют за первым набором записей, пока количество записей в списке опорных изображений не станет равным максимальному количеству записей, допустимому для списка опорных изображений, когда количество записей в списке опорных изображений не равно максимальному количеству записей, допустимому для списка опорных изображений; и средство для кодирования текущего изображения на основе указанного списка опорных изображений.
В одном примере описывается способ кодирования видеоданных, причем способ включает в себя кодирование информации, указывающей опорные изображения, относящиеся к набору опорных изображений. В этом примере набор опорных изображений идентифицирует опорные изображения, которые потенциально можно использовать для межкадрового предсказания текущего изображения и можно потенциально использовать для межкадрового предсказания одного или нескольких изображений, следующих за текущим изображением в порядке декодирования. Этот способ также включает в себя: построение множества поднаборов опорных изображений, каждый из которых идентифицирует нуль или более опорных изображений из набора опорных изображений; построение начального списка опорных изображений на основе построенных поднаборов опорных изображений; и идентификацию опорного изображения по меньшей мере в одном из построенных поднаборов опорных изображений, когда необходима модификация списка опорных изображений; и добавление идентифицированного опорного изображения в текущую запись начального списка опорных изображений для построения модифицированного списка опорных изображений. Способ кроме того включает в себя кодирование текущего изображения на основе модифицированного списка опорных изображений.
В одном примере описывается устройство для кодирования видеоданных. Устройство включает в себя видеокодер, сконфигурированный для кодирования информации, указывающей опорные изображения, относящиеся к набору опорных изображений. В этом примере набор опорных изображений идентифицирует опорные изображения, которые потенциально можно использовать для межкадрового предсказания текущего изображения и можно потенциально использовать для межкадрового предсказания одного или нескольких изображений, следующих за текущим изображением в порядке декодирования. Видеокодер также сконфигурирован для: построения множества поднаборов опорных изображений, каждый из которых идентифицирует нуль или более опорных изображений из набора опорных изображений; построения начального списка опорных изображений на основе построенных поднаборов опорных изображений; идентификации опорного изображения по меньшей мере в одном из построенных поднаборов опорных изображений, когда необходима модификация списка опорных изображений; и добавления идентифицированного опорного изображения в текущую запись начального списка опорных изображений для построения модифицированного списка опорных изображений. Способ кроме того включает в себя кодирование текущего изображения на основе модифицированного списка опорных изображений.
В одном примере описывается считываемый компьютером носитель данных с запомненными на нем командами, которые при их выполнении инициируют кодирование процессором устройства для кодирования видеоданных информации, указывающей опорные изображения, относящиеся к набору опорных изображений. В этом примере набор опорных изображений идентифицирует опорные изображения, которые потенциально можно использовать для межкадрового предсказания текущего изображения и можно потенциально использовать для межкадрового предсказания одного или нескольких изображений, следующих за текущим изображением в порядке декодирования. Эти команды также инициируют: построение процессором множества поднаборов опорных изображений, каждый из которых идентифицирует нуль или более опорных изображений из набора опорных изображений; построение процессором начального списка опорных изображений на основе построенных поднаборов опорных изображений; идентификацию процессором опорного изображения по меньшей мере в одном из построенных поднаборов опорных изображений, когда необходима модификация списка опорных изображений; и добавление процессором идентифицированного опорного изображения в текущую запись начального списка опорных изображений для построения модифицированного списка опорных изображений. Упомянутые команды также инициируют кодирование процессором текущего изображения на основе модифицированного спискаопорных изображений.
В одном примере описывается устройство для кодирования видеоданных. Устройство включает в себя средство для кодирования информации, указывающей опорные изображения, относящиеся к набору опорных изображений. В этом примере набор опорных изображений идентифицирует опорные изображения, которые потенциально можно использовать для межкадрового предсказания текущего изображения и можно потенциально использовать для межкадрового предсказания одного или нескольких изображений, следующих за текущим изображением в порядке декодирования. Устройство также включает в себя: средство для построения множества поднаборов опорных изображений, каждый из которых идентифицирует нуль или более опорных изображений из набора опорных изображений; средство для построения начального списка опорных изображений на основе построенных поднаборов опорных изображений; средство для идентификации опорного изображения по меньшей мере в одном из построенных поднаборов опорных изображений, когда необходима модификация списка опорных изображений; и средство для добавления идентифицированного опорного изображения в текущую запись начального списка опорных изображений для построения модифицированного списка опорных изображений. Устройство также включает в себя средство для кодирования текущего изображения на основе модифицированного списка опорных изображений.
В одном примере описывается способ кодирования видеоданных, причем способ включает в себя кодирование информации, указывающей опорные изображения, относящиеся к набору опорных изображений. В этом примере набор опорных изображений идентифицирует опорные изображения, которые потенциально можно использовать для межкадрового предсказания текущего изображения и можно потенциально использовать для межкадрового предсказания одного или нескольких изображений, следующих за текущим изображением в порядке декодирования. Этот способ включает в себя: получение набора опорных изображений на основе упомянутой кодированной информации; определение того, нет ли необходимости вывода декодированного изображения, хранящегося в буфере декодированных изображений (DPB), и не идентифицировано ли оно в списке опорных изображений; удаление декодированного изображения из буфера DPB, когда нет необходимости вывода декодированного изображения, и оно не идентифицировано в списке опорных изображений; и кодирование текущего изображения после удаления упомянутого декодированного изображения.
В одном примере описывается устройство для кодирования видеоданных. Устройство включает в себя видеокодер, сконфигурированный для кодирования информации, указывающей опорные изображения, относящиеся к набору опорных изображений. В этом примере набор опорных изображений идентифицирует опорные изображения, которые потенциально можно использовать для межкадрового предсказания текущего изображения и можно потенциально использовать для межкадрового предсказания одного или нескольких изображений, следующих за текущим изображением в порядке декодирования. Видеокодер также сконфигурирован для: получения набора опорных изображений на основе упомянутой кодированной информации; определения того, нет ли необходимости вывода декодированного изображения, хранящегося в буфере декодированных изображений (DPB), и не идентифицировано ли оно в списке опорных изображений; удаления декодированного изображения из буфера DPB, когда нет необходимости вывода декодированного изображения, и оно не идентифицировано в списке опорных изображений; и кодирования текущего изображения после удаления упомянутого декодированного изображения.
В одном примере описывается считываемый компьютером носитель данных с запомненными на нем командами, которые при их выполнении инициируют кодирование процессором устройства для кодирования видеоданных информации, указывающей опорные изображения, относящиеся к набору опорных изображений. В этом примере набор опорных изображений идентифицирует опорные изображения, которые потенциально можно использовать для межкадрового предсказания текущего изображения и можно потенциально использовать для межкадрового предсказания одного или нескольких изображений, следующих за текущим изображением в порядке декодирования. Упомянутые команды также инициируют: получение процессором набора опорных изображений на основе упомянутой кодированной информации; определение процессором того, нет ли необходимости вывода декодированного изображения, хранящегося в буфере декодированных изображений (DPB), и не идентифицировано ли оно в списке опорных изображений; удаление процессором декодированного изображения из буфера DPB, когда нет необходимости вывода декодированного изображения, и оно не идентифицировано в списке опорных изображений; и кодирование процессором текущего изображения после удаления упомянутого декодированного изображения.
В одном примере описывается устройство для кодирования видеоданных. Устройство включает в себя средство для кодирования информации, указывающей опорные изображения, относящиеся к набору опорных изображений. В этом примере набор опорных изображений идентифицирует опорные изображения, которые потенциально можно использовать для межкадрового предсказания текущего изображения и можно потенциально использовать для межкадрового предсказания одного или нескольких изображений, следующих за текущим изображением в порядке декодирования. Устройство также включает в себя: средство для получения набора опорных изображений на основе упомянутой кодированной информации; средство для определения того, нет ли необходимости вывода декодированного изображения, хранящегося в буфере декодированных изображений (DPB), и не идентифицировано ли оно в списке опорных изображений; средство для удаления декодированного изображения из буфера DPB, когда нет необходимости вывода декодированного изображения, и оно не идентифицировано в списке опорных изображений; и средство для кодирования текущего изображения после удаления упомянутого декодированного изображения.
В одном примере описывается способ кодирования видеоданных, причем способ включает в себя кодирование синтаксических элементов, указывающих возможные долгосрочные опорные изображения, которые идентифицированы в наборе параметров. В этом примере к набору опорных изображений текущего изображения относятся одно или несколько возможных долгосрочных опорных изображений. Также в этом примере набор опорных изображений идентифицирует опорные изображения, которые потенциально можно использовать для межкадрового предсказания текущего изображения и можно потенциально использовать для межкадрового предсказания одного или нескольких изображений, следующих за текущим изображением в порядке декодирования. Этот способ также включает в себя: кодирование синтаксических элементов, которые указывают, какие возможные долгосрочные опорные изображения, идентифицированные в наборе параметров, относятся к набору опорных изображений текущего изображения; и построение по меньшей мере одного из множества поднаборов опорных изображений на основе указания о том, какие возможные долгосрочные опорные изображения, относятся к набору опорных изображений текущего изображения. В этом примере множество поднаборов опорных изображений образует набор опорных изображений.
В одном примере описывается устройство для кодирования видеоданных. Устройство включает в себя видеокодер, сконфигурированный для кодирования синтаксических элементов, указывающих возможные долгосрочные опорные изображения, которые идентифицированы в наборе параметров. В этом примере к набору опорных изображений текущего изображения относятся одно или несколько возможных долгосрочных опорных изображений. Также в этом примере набор опорных изображений идентифицирует опорные изображения, которые потенциально можно использовать для межкадрового предсказания текущего изображения и можно потенциально использовать для межкадрового предсказания одного или нескольких изображений, следующих за текущим изображением в порядке декодирования. Видеокодер также сконфигурирован для: кодирования синтаксических элементов, которые указывают, какие возможные долгосрочные опорные изображения, идентифицированные в наборе параметров, относятся к набору опорных изображений текущего изображения; и построения по меньшей мере одного из множества поднаборов опорных изображений на основе указания о том, какие возможные долгосрочные опорные изображения относятся к набору опорных изображений текущего изображения. В этом примере множество поднаборов опорных изображений образует набор опорных изображений.
В одном примере описывается считываемый компьютером носитель данных с запомненными на нем командами, которые при их выполнении инициируют кодирование процессором устройства для кодирования видеоданных синтаксических элементов, указывающих возможные долгосрочные опорные изображения, идентифицированные в наборе параметров. В этом примере к набору опорных изображений текущего изображения относятся одно или несколько возможных долгосрочных опорных изображений. Также в этом примере набор опорных изображений идентифицирует опорные изображения, которые потенциально можно использовать для межкадрового предсказания текущего изображения и можно потенциально использовать для межкадрового предсказания одного или нескольких изображений, следующих за текущим изображением в порядке декодирования. Эти команды также инициируют: кодирование процессором синтаксических элементов, которые указывают, какие возможные долгосрочные опорные изображения, идентифицированные в наборе параметров, относятся к набору опорных изображений текущего изображения; и построение процессором по меньшей мере одного из множества поднаборов опорных изображений на основе указания о том, какие возможные долгосрочные опорные изображения относятся к набору опорных изображений текущего изображения. В этом примере множество поднаборов опорных изображений образует набор опорных изображений.
В одном примере описывается устройство для кодирования видеоданных. Устройство включает в себя средство для кодирования синтаксических элементов, указывающих возможные долгосрочные опорные изображения, которые идентифицированы в наборе параметров. В этом примере к набору опорных изображений текущего изображения относятся одно или несколько возможных долгосрочных опорных изображений. Также в этом примере набор опорных изображений идентифицирует опорные изображения, которые потенциально можно использовать для межкадрового предсказания текущего изображения и можно потенциально использовать для межкадрового предсказания одного или нескольких изображений, следующих за текущим изображением в порядке декодирования. Устройство включает в себя: средство для кодирования синтаксических элементов, которые указывают, какие возможные долгосрочные опорные изображения, идентифицированные в наборе параметров, относятся к набору опорных изображений текущего изображения; и средство для построения по меньшей мере одного из множества поднаборов опорных изображений на основе указания о том, какие возможные долгосрочные опорные изображения относятся к набору опорных изображений текущего изображения. В этом примере множество поднаборов опорных изображений образует набор опорных изображений.
В нижеследующем описании и сопроводительных чертежах раскрыты подробности одного или нескольких примеров осуществления изобретения. Другие признаки, цели и преимущества настоящего изобретения станут очевидными из его описания и чертежей, а также из формулы изобретения.
Краткое описание чертежей
Фиг. 1 - блок-схема, иллюстрирующая приведенную в качестве примера систему видеоэнкодирования и видеодекодирования, где могут быть использованы описанные методики;
фиг. 2 - концептуальная схема, иллюстрирующая приведенную в качестве примера видеопоследовательность, которая включает в себя множество кодированных и переданных изображений;
фиг. 3 - блок-схема, иллюстрирующая приведенный в качестве примера видеоэнкодер, который может реализовать описанные здесь методики;
фиг. 4 - блок-схема, иллюстрирующая приведенный в качестве примера видеодекодер, который может реализовать описанные здесь методики;
фиг. 5 - блок-схема, иллюстрирующая приведенную в качестве примера операцию получения набора опорных изображений;
фиг. 6 - блок-схема, иллюстрирующая приведенную в качестве примера операцию построения списка опорных изображений;
фиг. 7 - блок-схема, иллюстрирующая приведенную в качестве примера другую операцию построения списка опорных изображений;
фиг. 8 - блок-схема, иллюстрирующая приведенную в качестве примера операцию модификации начального списка опорных изображений;
фиг. 9 - блок-схема, иллюстрирующая приведенную в качестве примера операцию удаления декодированного изображения;
фиг. 10 - блок-схема, иллюстрирующая приведенную в качестве примера операцию по определению того, какие долгосрочные опорные изображения относятся к набору опорных изображений текущего изображения.
Подробное описание изобретения
Методики, раскрытые в этом изобретении, в общем случае относятся к управлению опорными изображениями, которые используют для межкадрового предсказания. Например, видеокодер (например, видеоэнкодер или видеодекодер) включает в себя буфер декодированных изображений (DPB). В буфере DPB запоминаются декодированные изображения, в том числе опорные изображения. Опорными изображениями являются изображения, которые можно потенциально использовать для межкадрового предсказания изображения. Другими словами, видеокодер может предсказывать изображение во время кодирования (энкодирования или декодирования) данного изображения на основе одного или нескольких опорных изображений, запомненных в буфере DPB.
Для эффективного использования DPB может быть определен процесс управления DPB, например, процесс запоминания декодированных изображений в DPB, процесс маркировки опорных изображений, процесс вывода и удаления декодированных изображений из буфера DPB и т.д. В общем случае, в некоторых современных, а также разрабатываемых в настоящее время стандартах видеокодирования управление буфером DPB может включать в себя один или несколько следующих аспектов: идентификацию изображения и идентификацию опорного изображения, построение списка опорных изображений, маркировку опорных изображений, вывод изображения из буфера DPB, ввод изображений в буфер DPB и удаление изображения из буфера DPB.
Для облегчения понимания далее представлено краткое описание того, как может реализоваться маркировка опорных изображений и как строится список опорных изображений согласно некоторым стандартам видеокодирования. Некоторые из описанных здесь методик учитывают проблемы, которые могут возникнуть при маркировке опорных изображений, построении списка опорных изображений и удалении и выводе изображений и буфера DPB, с тем чтобы повысить эффективность использования буфера DPB.
Для маркировки опорных изображений в действующем наборе параметров последовательности указывается максимальное количество, обозначенное как M (num_ref_frames) опорных изображений, используемых для межкадрового предсказания. После декодирования опорного изображения оно маркируется как «используемое для в качестве опорного». Если декодирование опорных изображений привело к появлению более, чем М изображений, отмеченных как «используемое в качестве опорного» по меньшей мере одно изображение должно быть помечено как «не используемое как опорное». Затем в ходе процесса удаления из буфера DPB удаляются изображения, помеченные как «не используемое в качестве опорного», если их не требуется выводить.
После декодирования изображения оно может представлять собой либо не опорное изображение, либо опорное изображение. Опорное изображение может представлять собой долгосрочное опорное изображение или краткосрочное опорное изображение, и, когда изображение маркируется как «не используемое в качестве опорного», оно в дальнейшем может больше не понадобиться в качестве опорного. В некоторых стандартах видеокодирования возможны операции маркировки опорных изображений, изменяющие статус опорных изображений.
Возможны два типа операций для маркировки опорных изображений: скользящее окно и адаптивное управление памятью. Рабочий режим для маркировки опорных изображений можно выбрать на основе изображения, в то время как операция скользящего окна может функционировать в виде очереди «первый пришел - первый вышел» с фиксированным количеством краткосрочных опорных изображений. Другими словами, краткосрочные опорные изображения с самым ранним временем декодирования могут оказаться первыми кандидатами на косвенное удаление (помеченные как изображения, не используемые в качестве опорных).
Однако при использовании адаптивного управления памятью краткосрочные или долгосрочные изображения удаляются явном образом. Также допускается переключение статуса краткосрочных и долгосрочных изображений, и т.д. Например, при адаптивном управлении памятью видеоэнкодер может передавать синтаксические элементы, которые предписывают, какие изображения следует маркировать, как используемые в качестве опорных. Видеодекодер может принимать синтаксические элементы и маркировать изображения, как это предписано. При использовании скользящего окна видеоэнкодеру возможно не понадобиться сигнализировать о том, какие изображения следует маркировать, как используемые в качестве опорных. Скорее, видеодекодер может неявным образом (то есть, не принимая синтаксические элементы) определить, какие изображения следует маркировать как используемые в качестве опорных, на основе того, какие изображения находятся внутри скользящего окна.
На видеокодер также может быть возложена задача построения списков опорных изображений, указывающих, какие опорные изображения можно использовать для целей межкадрового предсказания. Два из таких списков опорных изображений обозначены здесь как список 0 и список 1. Сначала видеокодер использует стандартные методики построения списков для построения списка 0 и списка 1 (например, предварительно сконфигурированные схемы для построения списка 0 и списка 1). В другом возможном варианте после построения начальных списков 0 и 1 видеодекодер может декодировать синтаксические элементы, если они присутствуют, которые предписывают видеодекодеру модифицировать начальный список 0 и начальный список 1.
Видеоэнкодер может передавать в качестве сигнализации синтаксические элементы, которые указывают идентификатор (идентификаторы) опорных изображений в буфере DPB, причем видеоэнкодер также может передавать синтаксические элементы, включающих в себя индексы в списке 0, списке 1 или в обоих списках 0 и 1, которые указывают, какое опорное изображение или изображения следует использовать для декодирования кодированного блока текущего изображения. В свою очередь, видеодекодер использует полученный идентификатор для идентификации значения или значений индекса для опорного изображения или опорных изображений, перечисленных в списке 0, списке 1 или обоих этих списках. Исходя из значения (значений) индекса, а также идентификатора (идентификаторов) опорного изображения или опорных изображений, видеодекодер извлекает из буфера DPB опорное изображение или опорные изображения либо его часть (части) и декодирует кодированный блок текущего изображения на основе извлеченного опорного изображения или изображений и одного или нескольких векторов движения, которые идентифицируют блоки в опорном изображении или изображениях, используемые для декодирования кодированного блока.
Например, построение списка опорных изображений для первого или второго списка опорных изображений для двунаправленного изображения включает в себя два шага: инициализацию списка опорных изображений и модификацию списка опорных изображений (также называемую переупорядочиванием списка опорных изображений). Инициализация списка опорных изображений может представлять собой имплицитный процесс, в ходе которого помещает опорные изображения помещают в память опорных изображений (известную также под названием «буфер декодированных изображений») в список на основе очередности значений POC (счетчика очередности изображения, согласованной с очередностью отображения изображения). Механизм переупорядочивания списка опорных изображений может изменить позицию изображения, которая была заложена в списке во время инициализации списка опорных изображений, на любую новую позицию или поместить какое-либо опорное изображение в памяти опорных изображений на какую-либо позицию, даже если данное изображение не относится к инициализированному списку. Некоторые изображения после переупорядочивания (модификации) списка опорных изображений могут быть помещены на очень далекую позицию в списке. Однако, если номер позиции изображения превышает количество реальных опорных изображений в списке, данное изображение не считается записью окончательного списка опорных изображений. Количество действительных опорных изображений может быть указано в заголовке каждого списка.
Методики, описанные в этом разделе, можно применять для различных стандартов видеокодирования. Примеры стандартов видеокодирования включают в себя ITU-T H.261, ISO/IEC MPEG-1 Visual, ITU-T H.262 или ISO/IEC MPEG-2 Visual, ITU-T H.263, ISO/IEC MPEG-4 Visual и ITU-T H.264 (также известный, как ISO/IEC MPEG-4 AVC), включая расширения масштабируемого видеокодирования (SVC) и многовидового видеокодирования (MVC). Вдобавок, имеется новый стандарт видеокодирования, а именно, высокоэффективное видеокодирование (HEVC), разрабатываемое объединенной командой разработчиков систем видеокодирования (JCT-VC) Экспертной группы по видеокодированию ITU-T (VCEG) и Экспертной группой по движущимся изображениям (MPEG) ISO/IEC.
Исключительно в иллюстративных целях эти методики описаны в контексте стандарта HEVC. Последний рабочий проект (WD) стандарта HEVC, далее называемый HEVC WD8, доступен с 20 июля 2012 года по ссылке http://phenix.int-evry/fr/jct/doc_end_user/documents/10_Stockholm/wg11/JCTVC-J1003-v8-zip.
Как было описано выше, раскрытые здесь методики могут касаться проблем, которые возможно присутствуют в существующих технических решениях, касающихся управления буфером декодированных изображений (DPB). В некоторых приведенных в качестве примера методиках, описанных в данном разделе, маркировка опорных изображений как «не используемых в качестве опорных» может не понадобиться. Например, описанные здесь методики могут касаться проблем, связанных со способами управления буфером DPB, которые не всегда хорошо подходят для временного изменения масштаба, проблем, относящимся к издержкам на сигнализацию для долгосрочных опорных изображений, проблем, относящихся к эффективности и сложности инициализации и модификации списка опорных изображений. Описанные в данном разделе методики могут также касаться вопросов, связанных с маркировкой «не опорных изображений» для незавершенных записей в списке опорных изображений во время инициализации списка опорных изображений, проблем, связанных с выводом, вводом и удалением из буфера DPB декодированного изображения, а также вопросов, связанных с возможными значениями счетчика очередности изображения (POC).
Согласно методикам, описанным в этом разделе, списки опорных изображений строят из набора опорных изображений. Набор опорных изображений определяют как набор опорных изображений, связанных с изображением, состоящим из всех опорных изображений, которые находятся перед соответствующим изображением в порядке декодирования, что можно использовать для межкадрового предсказания блоков в соответствующем изображении или любом изображении, следующем за указанным соответствующим изображением в порядке декодирования, например, до следующего изображения, обеспечивающего мгновенное обновление при декодировании, (далее называемого IDR изображением) или до изображения с доступом к нерабочей ссылке (далее называемым BLA изображением). Другими словами, для опорных изображений в наборе опорных изображений могут понадобиться следующие характеристики: (1) все опорные изображения поступают перед текущим изображением в порядке декодирования; и (2) их можно использовать для межкадрового предсказания текущего изображения и/или межкадрового предсказания любого изображения, следующего за текущим изображением в порядке декодирования, причем в некоторых примерах до следующего IDR изображения или до следующего BLA изображения. Возможны другие альтернативные определения набора опорных изображений, которые представлены ниже.
В описанных здесь методиках, представленных в качестве примеров, видеокодер может получить набор опорных изображений, и после выполнения этой операции получения видеокодер может построить списки опорных изображений. Например, возможными опорными изображениями, используемыми для построения списков опорных изображений, могут быть только опорные изображения, содержащиеся в наборе опорных изображений.
Для построения набора опорных изображений видеокодер может построить множество поднаборов опорных изображений. Комбинация поднаборов опорных изображений может образовать набор опорных изображений. Например, видеокодер может явным образом передать в кодированном битовом потоке в качестве сигнализации значения, позволяющие видеодекодеру определить идентификаторы для опорных изображений, которые включены в набор опорных изображений. Идентификаторы опорных изображений могут, например, представлять собой счетчики очередности изображения. Каждое изображение связано с одним счетчиком очередности изображения, названным здесь PicOrderCnt. Счетчик PicOrderCnt указывает очередность вывода или очередность отображения соответствующего изображения по отношению к предшествующему IDR изображению в порядке декодирования, а в некоторых других альтернативных вариантах указывает позицию соответствующего изображения в порядке вывода по отношению к позициям очередности вывода других изображений в той же самой кодированной видеопоследовательности.
PicOrderCnt может называться здесь значением счетчика очередности изображения (POC). Значение POC может указывать очередность вывода или отображения изображения и может быть использовано для идентификации изображения. Например, в кодированной видеопоследовательности изображение с меньшим значением POC выводится или отображается раньше, чем изображение с большим значением POC.
Видеодекодер может определить идентификаторы для опорных изображений и, исходя из этих идентификаторов, построить множество поднаборов опорных изображений. Исходя из этих поднаборов опорных изображений, видеодекодер может получить набор опорных изображений, как более подробно описано ниже. В некоторых примерах каждый из поднаборов опорных изображений включает в себя разные опорные изображения в том смысле, что в поднаборах опорных изображений отсутствует перекрытие опорных изображений. Таким образом, каждое из опорных изображений может находиться только в одном из поднаборов опорных изображений и отсутствует в других поднаборах опорных изображений. Однако раскрытые здесь аспекты не следует считать ограничениями.
После определения идентификаторов (например, значений POC) опорных изображений в наборе опорных изображений или его поднаборах видеодекодер может построить поднаборы опорных изображений. Как более подробно описано ниже, видеодекодер может построить шесть поднаборов опорных изображений, хотя вполне возможно, чтобы видеодекодер построил большее или меньшее количество поднаборов опорных изображений.
Эти шесть поднаборов опорных изображений названы: RefPicSetStCurr0, RefPicSetStCurr1, RefPicSetStFoll0, RefPicSetStFoll1, RefPicSetLtCurr, и RefPicSetLtFoll. Поднабор опорных изображений RefPicSetStCurr0 может использоваться под именем «поднабор опорных изображений RefPicSetStCurrBefore», а поднабор опорных изображений RefPicSetStCurr1 может использоваться под именем «поднабор опорных изображений RefPicSetStCurrAfter».
Поднаборы опорных изображений RefPicSetStCurr0, RefPicSetStCurr1, RefPicSetStFoll0 и RefPicSetStFoll1 могут идентифицировать краткосрочные опорные изображения. В некоторых примерах эти поднаборы опорных изображений могут идентифицировать краткосрочные опорные изображения, исходя из того, поступают эти краткосрочные опорные изображения в порядке отображения раньше или позже, чем кодируемое в данный момент текущее изображение, а также, исходя из того, могут ли эти краткосрочные опорные изображения быть потенциально использованы для межкадрового предсказания текущего изображения и изображений, следующих за текущим изображением в порядке декодирования, или потенциально использованы для межкадрового предсказания только тех изображений, которые следуют за текущим изображением в порядке декодирования.
Например, поднабор опорных изображений RefPicSetStCurr0 может включать в себя не только (или только) идентификационную информацию, такую как значения POC, для всех краткосрочных опорных изображений, которые выводятся и отображаются раньше, чем текущее изображение, и которые можно потенциально использовать в качестве опорных при межкадровом предсказании текущего изображения, и можно потенциально использовать в качестве опорных при межкадровом предсказании одного или нескольких изображений, следующих за текущим изображением в порядке декодирования. Поднабор опорных изображений RefPicSetStCurr1 может включать в себя не только (или только) идентификационную информацию для всех краткосрочных опорных изображений, которые выводятся или отображаются позднее, чем текущее изображение, и которые можно потенциально использовать в качестве опорных при межкадровом предсказании текущего изображения и можно потенциально использовать в качестве опорных при межкадровом предсказании одного или нескольких изображений, следующих за текущим изображением в порядке декодирования.
Поднабор опорных изображений RefPicSetStFoll0 может включать в себя не только (или только) идентификационную информацию для всех краткосрочных опорных изображений, которые выводятся или отображаются раньше, чем текущее изображение, и которые можно потенциально использовать в качестве опорных при межкадровом предсказании одного или нескольких изображений, которые следуют за текущим изображением в порядке декодирования, и которые не могут быть использованы в качестве опорных при межкадровом предсказании текущего изображения. Поднабор опорных изображений RefPicSetStFoll1 может включать в себя не только (или только) идентификационную информацию для всех краткосрочных опорных изображений, которые выводятся или отображаются позднее, чем текущее изображение, и которые можно потенциально использовать в качестве опорных при межкадровом предсказании одного или нескольких изображений, следующих за текущим изображением в порядке декодирования, и которые не могут быть использованы в качестве опорных при межкадровом предсказании текущего изображения.
Поднаборы опорных изображений RefPicSetLtCurr и RefPicSetLtFoll могут идентифицировать долгосрочные опорные изображения. В некоторых примерах эти поднаборы опорных изображений могут идентифицировать долгосрочные опорные изображения, исходя из того, отображаются ли эти долгосрочные опорные изображения раньше или позже, чем кодируемое текущее изображение.
Например, поднабор опорных изображений RefPicSetLtCurr может включать в себя не только (или только) идентификационную информацию для всех долгосрочных опорных изображений, которые можно потенциально использовать в качестве опорных при межкадровом предсказании текущего изображения и которые можно потенциально использовать в качестве опорных при межкадровом предсказании одного или нескольких изображений, следующих за текущим изображением в порядке декодирования. Поднабор опорных изображений RefPicSetLtFoll может включать в себя не только (или только) идентификационную информацию для всех долгосрочных опорных изображений, которые можно потенциально использовать в качестве опорных при межкадровом предсказании одного или нескольких изображений, следующих за текущим изображением в порядке декодирования и которые нельзя использовать в качестве опорных при межкадровом предсказании текущего изображения.
После построения поднаборов опорных изображений видеодекодер может выполнить переупорядочивание поднаборов опорных изображений, чтобы получить набор опорных изображений. Например, опорные изображения могут быть расположены в следующем порядке: RefPicSetStCurr0, RefPicSetStCurr1, RefPicSetFoll0, RefPicSetFoll1, RefPicSetLtCurr, и RefPicSetLtFoll. Однако, для получения набора опорных изображений возможно использование другого порядка следования поднаборов. Например, возможен следующий порядок следования поднаборов в наборе опорных изображений: поднабор опорных изображений RefPicSetStCurr0, за которым следует поднабор опорных изображений RefPicSetStCurr1, за которым следует поднабор опорных изображений RefPicSetLtCurr, за которым следует поднабор опорных изображений RefPicSetStFoll0, за которым следует поднабор опорных изображений RefPicSetFoll1, и за которым следует поднабор опорных изображений RefPicSetLtFoll.
Согласно описанным здесь методикам поднаборы RefPicSetStCurr0, RefPicSetStCurr1 и RefPicSetLtCurr включают в себя все опорные изображения, которые можно использовать при межкадровом предсказании блока в текущем изображении, и которые можно использовать при межкадровом предсказании одного или нескольких изображений, следующих за текущим изображением в порядке декодирования. Поднаборы RefPicSetStFoll0, RefPicSetStFoll и RefPicSetLtFoll включают в себя все опорные изображения, которые не используют при межкадровом предсказании блока в текущем изображении, но которые можно использовать при межкадровом предсказании одного или нескольких изображений, следующих за текущим изображением в порядке декодирования.
Следует понимать, что эти шесть поднаборов опорных изображений описаны только в иллюстративных целях, и их не следует рассматривать как ограничение. В альтернативных примерах возможно использование большего или меньшего количества поднаборов опорных изображений. В этих альтернативных примерах указанные поднаборы опорных изображений более подробно описываются ниже.
В некоторых описанных здесь методиках видеодекодер не обязательно выполняет маркировку декодированных изображений как «используемых в качестве опорных», «не используемых в качестве опорных», «используемых в качестве краткосрочных опорных» или «используемых в качестве долгосрочных опорных». Необходимость использования декодированного изображения, запомненного в буфере DPB, для межкадрового предсказания указывается тем, включено ли или нет указанное изображение в набор опорных изображений текущего изображения. В альтернативных примерах возможна следующая маркировка видеодекодером декодированных изображений: «используется в качестве опорного», «не используется в качестве опорного», «используется в качестве краткосрочного опорного» или «используется в качестве долгосрочного опорного». В этих примерах после декодирования изображения видеодекодером оно становится опорным изображением и маркируется как «используемое в качестве опорного». Затем, после активизации процесса получения набора опорных изображений все опорные изображения, запомненные в буфере DPB, но не включенные в набор опорных изображений текущего изображения, маркируются как «не используемые в качестве опорных» до возможного удаления декодированных изображений из буфера DPB. Таким образом, необходимость использования декодированного изображения, запомненного в буфере DPB для межкадрового предсказания, может быть указана в зависимости от того, имеет ли декодированное изображение маркировку «используемое в качестве опорного».
После получения видеодекодером набора опорных изображений из множества поднаборов опорных изображений видеодекодер может построить списки опорных изображений (например, список 0 и список 1) из набора опорных изображений. Например, построение списков опорных изображений может включать в себя шаг инициализации и возможно шаг модификации. Получив набор опорных изображений вышеописанным путем, видеодекодер может повысить эффективность и упростить инициализацию списков опорных изображений и модификацию списков опорных изображений.
Построение видеодекодером списков опорных изображений можно осуществить различными путями. Описанные здесь методики обеспечивают механизм, с помощью которого видеодекодер может построить списки опорных изображений без необходимости переупорядочивания опорных изображений, подлежащих включению в (начальный) список опорных изображений. Например, видеодекодер может быть сконфигурирован для реализации стандартной методики построения списка опорных изображений, согласно которой видеодекодер для построения начальных списков опорных изображений использует поднаборы опорных изображений. Тогда, если модификация списка опорных изображений не требуется, окончательные списки опорных изображений могут совпадать с начальными списками опорных изображений без необходимости какого-либо дополнительного переупорядочивания списков опорных изображений.
В некоторых примерах описанные здесь методики могут относиться к построению списков опорных изображений таким образом, чтобы в них не содержались незавершенные записи. Например, согласно этим методикам возможно многократное добавление опорных изображений в список опорных изображений из одного ил нескольких поднаборов опорных изображений. Например, после добавления видеодекодером опорных изображений из одного или нескольких наборов опорных изображений для построения начального списка опорных изображений видеодекодер может определить, меньше ли количество записей в списке опорных изображений максимально допустимого количества записей. Если количество записей в списке опорных изображений меньше максимально допустимого количества записей, то видеодекодер может добавить в список опорных изображений по меньшей мере одно из опорных изображений из одного из поднаборов опорных изображений, использованных для построения списка опорных изображений. Такое многократное добавление (также называемое «повторное внесение в список») опорного изображения может быть выполнено в другом месте в списках опорных изображений по сравнению с местом, куда видеодекодером было добавлено опорное изображение первый раз.
Используемое в этом изобретении повторное внесение в список или повторное добавление относится к повторному добавлению (например, повторная идентификация) опорного изображения, которое ранее было добавлено (например, идентифицировано) в начальный список опорных изображений. Однако, при повторном добавлении опорного изображения это опорное изображение может находиться в двух разных записях в начальном списке опорных изображений. Другими словами, при повторном добавлении опорного изображения может быть два значения индекса в начальном списке опорных изображений, которые идентифицируют одно и то же опорное изображение.
В некоторых примерах раскрытые здесь методики могут относиться к модификации начального списка опорных изображений. Например, видеодекодер может построить начальный список опорных изображений. Затем видеодекодер может определить, что необходима модификация списка опорных изображений, на основе синтаксических элементов, переданных видеокодером в кодированном битовом потоке. Если требуется модификация списка опорных изображений, то видеодекодер может идентифицировать опорное изображение по меньшей мере в одном из построенных поднаборов опорных изображений. Видеодекодер может внести (например, добавить) идентифицированное опорное изображение в текущую запись начального списка опорных изображений для построения модифицированного списка опорных изображений. Затем видеодекодер может декодировать текущее изображение на основе модифицированного списка опорных изображений.
В некоторых примерах описанные здесь методики могут относиться к выводу и удалению декодированных изображений из буфера декодированных изображений (DPB). Согласно приведенным в качестве примера методикам возможно удаление декодированного изображения из буфера DPB до кодирования текущего изображения. Например, согласно приведенным в качестве примера методикам возможно удаление декодированного изображения, если это декодированное изображение не идентифицировано в наборе опорных изображений текущего изображения, и, если не требуется вывод этого декодированного изображения (то есть, либо это изображение не предназначалось для вывода, либо оно предназначалось для вывода, но уже было выведено).
На фиг. 1 представлена блок-схема, иллюстрирующая приведенную в качестве примера систему 10 видеоэнкодирования и видеодекодирования, в которой можно использовать раскрытые здесь методики. В общем случае набор опорных изображений определен как набор опорных изображений, связанных с изображением, состоящим из всех опорных изображений, которые поступают до соответствующего изображения в порядке декодирования и которые могут быть использованы для межкадрового предсказания соответствующего изображения или любого изображения, следующего за этим соответствующим изображением в порядке декодирования. В некоторых примерах опорные изображения, идущие до указанного соответствующего изображения могут считаться опорными изображениями до следующего IDR изображения или следующего BLA изображения. Другими словами, все опорные изображения в наборе опорных изображений могут поступать до текущего изображения в порядке декодирования. Также опорные изображения в наборе опорных изображений можно использовать для межкадрового предсказания текущего изображения и/или межкадрового предсказания любого изображения, следующего за текущим изображением в порядке декодирования до следующего IDR изображения или BLA изображения.
Имеется много других альтернативных определений набора опорных изображений. Например, набор опорных изображений может представлять собой набор опорных изображений, связанный с одним изображением, который состоит из всех опорных изображений, исключая само, связанное с ними изображение, которые можно использовать для межкадрового предсказания соответствующего изображения или любого изображения, следующего за этим изображением в порядке декодирования, и которые имеют значение временного идентификатора (temporal_id), меньшее или равное значению идентификатора указанного соответствующего изображения. Идентификатор temporal_id может представлять собой значение для временной идентификации. Это значение для временной идентификации может быть иерархическим, указывающим, какие изображения можно использовать для кодирования текущего изображения. В общем случае изображение с конкретным значением temporal_id может быть опорным изображением для тех изображений, у которых значения temporal_id равны или превышают значение temporal_id опорного изображения, но не наоборот. Например, изображение со значением temporal_id, равным 1, может являться опорным изображением для изображений со значениями temporal_id, равными 1, 2, 3…, но не для изображения со значением temporal_id, равным 0.
Минимальное значение temporal_id может также указывать минимальную частоту отображения. Например, если видеодекодер декодирует только изображения со значениями temporal_id, равными 0, то частота отображения может составить 7,5 изображений в секунду. Если видеодекодер декодирует только изображения со значениями temporal_id, равными 0 и 1, то частота отображения может составить 15 изображений в секунду и т.д.
В другом примере набор опорных изображений может представлять собой набор опорных изображений, связанный с одним изображением, который состоит из всех опорных изображений, исключая само, связанное с ними, изображение, которые можно использовать для межкадрового предсказания соответствующего изображения или любого изображения, следующего за этим соответствующим изображением в порядке декодирования.
Еще в одном примере набор опорных изображений может быть определен как набор опорных изображений, связанный с одним изображением, который состоит из всех опорных изображений, возможно включая само упомянутое соответствующее изображение, причем эти опорные изображения можно использовать для межкадрового предсказания указанного изображения или любого изображения, следующего за указанным изображением в порядке декодирования. В следующем примере набор опорных изображений может быть определен как набор опорных изображений, связанный с одним изображением, который состоит из всех опорных изображений, возможно включая само упомянутое соответствующее изображение, причем эти опорные изображения можно использовать для межкадрового предсказания указанного изображения или любого изображения, следующего за указанным изображением в порядке декодирования, и у которых значения temporal_id меньше или равны значению temporal_id указанного изображения.
В другом примере в приведенных выше определениях набора опорных изображений фраза «можно использовать для межкадрового предсказания» заменена фразой «используются для межкадрового предсказания». Хотя возможны альтернативные определения набора опорных изображений, в этом описании приведены примеры, где используется определение набора опорных изображений как набора опорных изображений, связанного с одним изображением, где набор опорных изображений состоит из всех опорных изображений, которые находятся перед упомянутым изображением в порядке декодирования, и где упомянутые опорные изображения можно использовать для межкадрового предсказания упомянутого изображения или любого изображения, следующего за упомянутым изображением в порядке декодирования.
Например, некоторые опорные изображения в наборе опорных изображений представляют собой опорные изображения, которые можно потенциально использовать для межкадрового предсказания блока текущего изображения, но не тех изображений, которые следуют за текущим изображением в порядке декодирования. Некоторые из опорных изображений в наборе опорных изображений представляют собой опорные изображения, которые можно потенциально использовать для межкадрового предсказания блока текущего изображения и блоков в одном или нескольких изображениях, следующих за текущим изображением в порядке декодирования. Некоторые из опорных изображений в наборе опорных изображений представляют собой опорные изображения, которые можно потенциально использовать для межкадрового предсказания блоков в одном или нескольких изображениях, следующих за текущим изображением в порядке декодирования, и нельзя использовать для межкадрового предсказания одного блока в текущем изображении.
Используемые в настоящем изобретении опорные изображения можно потенциально использовать для межкадрового предсказания со ссылками на опорные изображения, которые можно, но не обязательно, использовать для межкадрового предсказания. Например, набор опорных изображений может идентифицировать опорные изображения, которые можно использовать для межкадрового предсказания. Однако это не означает, что все идентифицированные опорные изображения должны использоваться для межкадрового предсказания. Скорее, для межкадрового предсказания можно использовать одно или несколько из указанных идентифицированных опорных изображений, но не обязательно все эти опорные изображения.
Как показано на фиг. 1, система 10 включает в себя устройство-источник 12, которое создает энкодированное видео для его декодирования устройством-адресатом 14. Каждое из этих устройств 12 и 14, например, может представлять собой устройство видеокодирования. Устройство-источник 12 может передавать энкодированное видео на устройство-адресат 14 через канал 16 связи или запоминать энкодированное видео на носителе 17 данных или на файловом сервере 19, так чтобы это энкодированное видео могло быть доступно устройству/адресату 14, когда это потребуется.
Устройство-источник 12 и устройство-адресат 14 могут содержать любое из самых разных устройств, в том числе: беспроводные телефонные трубки; например, так называемые «смартфоны»; так называемые «смартпады» или другие беспроводные устройства, оборудованные средствами беспроводной связи. Дополнительные пример устройства-источника 12 и устройства-адресата 14 включают в себя, но не только: цифровой телевизор, устройство в системе прямого цифрового вещания, устройство в системе беспроводного вещания, персональные цифровые помощники (PDA), компьютер типа «лэптоп», настольные компьютеры, планшетные компьютеры, компьютер, устройства для чтения электронных книг, цифровую камеру, цифровое записывающее устройство, цифровой медиаплеер, видеоигровое устройство, видеоигровую консоль, сотовый радиотелефон, спутниковый радиотелефон, устройство для проведения видеотелеконференции, устройство потокового видео, устройство беспроводной связи или т.п.
Как было указано выше, во многих случаях устройство-источник 12 и/или устройство-адресат 14 могут быть оборудованы средствами беспроводной связи. Таким образом, канал 16 связи может содержать беспроводной канал, проводной канал или комбинацию беспроводного и проводного каналов, подходящих для передачи кодированных видеоданных. Аналогичным образом, файловый сервер 19 может быть доступен со стороны устройства-адресата 14 через любое стандартное соединение для передачи данных, в том числе, через Интернет соединение. Оно может включать в себя беспроводной канал (например, Wi-Fi соединение), проводное соединение (например, DSL, кабельный модем и т.д.) или комбинацию обоих типов соединений, подходящую для доступа к энкодированным видеоданным, хранящимся на файловом сервере.
Однако методики согласно настоящему изобретению можно применить к видеокодированию при поддержке любого из различных мультимедийных приложений, таких как эфирное телевизионное вещание, передачи кабельного телевидения, передачи спутникового телевидения, передачи потокового видео, например, через Интернет, кодирование цифрового видео для запоминания на носителе данных, декодирование цифрового видео, хранящегося на носителе данных, или других приложений. В некоторых примерах система 10 может быть сконфигурирована для поддержки однонаправленной или двунаправленной передачи видео с целью поддержки таких приложений, как потоковое видео, воспроизведение видео, видеовещание и/или видеотелефония.
В примере на фиг. 1 устройство-источник 12 включает в себя источник 18 видео, видеоэнкодер 20, модулятор/демодулятор (модем) 22 и интерфейс 24 вывода. В устройстве-источнике 12 источник 18 видео может включать в себя такой источник, как устройство фиксации видео, например, видеокамеру, видеоархив, содержащий ранее зафиксированное видео, интерфейс подачи видео для приема видео от провайдера видеоконтента, и/или компьютерная графическая система для создания данных компьютерной графики в качестве исходного видео, или комбинацию указанных источников. Например, если источником 18 видео является видеокамера, то устройство-источник 12 и устройство-адресат 14 могут образовать так называемые «камерофоны» или «видеофоны». Однако раскрытые здесь методики можно применить к видеоэнкодированию в целом, а также можно применить для беспроводных и/или проводных приложений.
Зафиксированное камерой видео, предварительно зафиксированное видео или созданное компьютером видео может быть закодировано видеоэнэнкодером 20. Энкодированная видеоинформация может быть модулирована модемом 22 в соответствии со стандартом связи, таким как Протокол беспроводной связи и передана на устройство-адресат 14 через интерфейс 24 вывода. Модем 22 может включать в себя различные микшеры, фильтры, усилители или другие компоненты, предназначенные для модуляции сигнала. Интерфейс 24 вывода может включать в себя схемы, предназначенные для передачи данных, в том числе усилители, фильтры и одну или несколько антенн.
Зафиксированное камерой, предварительно зафиксированное или созданное компьютером видео, энкодированное видеоэнэнкодером 20, также может запоминаться на носителе 17 данных или файловом сервере 19 для последующего использования. Носитель 17 данных может включать в себя диски Blu-ray, DVD диски, компакт-диски (CD-ROM), флэш-память или любую другую подходящую цифровую запоминающую среду для запоминания энкодированного видео. Затем к энкодированному видео, запомненному на носителе 17 данных, может быть предоставлен доступ со стороны устройства-адресата 14 для декодирования и воспроизведения.
Файловым сервером 19 может быть сервер любого типа, способный запоминать экодированное видео и передавать это энкодированное видео на устройство-адресат 14. Примерами файловых серверов являются Web-серверы (например, для Web-сайта), FTP сервер, подключенное к сети запоминающее устройство (NAS), локальный дисковый накопитель или устройство любого другого типа, способное запоминать энкодированные видеоданные и передавать их на устройство-адресат. Передача энкодированных видеоданных от файлового сервера 19 может представлять собой потоковую передачу, передачу с загрузкой или их комбинацию. Файловый сервер 19 может быть доступен для устройства-адресата 14 через любое стандартное соединение для передачи данных, включая Интернет соединение. Указанное соединение может включать в себя беспроводной канал (например, Wi-Fi соединение), проводное соединение (например, DSL, кабельный модем, Ethernet, USB и т.д.) или комбинацию обоих типов соединений, которая подходит для доступа к кодированным видеоданным, хранящимся на файловом сервере.
Устройство-адресат 14 в примере на фиг. 1 включает в себя интерфейс 26 ввода, модем 28, видеодекодер 30 и устройство 32 отображения. Интерфейс 26 ввода, входящий в устройство-адресат 14, принимает информацию через канал 16, как в одном примере, или от носителя 17 данных или файлового сервера 19, как в альтернативных примерах, а модем 28 демодулирует информацию, создавая демодулированный битовый поток для видеодекодера 30. Демодулированный битовый поток может включать в себя различную синтаксическую информацию, созданную видеоэнэнкодером 20 для ее использования видеодекодером 30 при декодировании видеоданных. Указанный синтаксис также может быть введен вместе с энкодированными видеоданными, хранящимися на носителе 17 данных, или на файловом сервере 19. В одном примере синтаксис может быть совмещен с энкодированными видеоданными, хотя аспекты настоящего изобретения не должны трактоваться в качестве ограничений для указанного требования. Синтаксическая информация, определенная видеоэнэнкодером 20, которая также используется видеодекодером 30 может включать в себя синтаксические элементы, описывающие характеристики и/или обработку видеоблоков, таких как единицы древовидного кода (CTU), блоки древовидного кода (CTB), блоки предсказания (PU), блоки кодирования (CU) или другие блоки кодированного видео, например, видеослайсы, видеоизображения и видеопоследовательности или группы изображений (GOP). Как видеоэнэнкодер 20, так и видеодекодер 30 могут образовать часть соответствующего кодера-декодера (кодек), который способен энкодировать или декодировать видеоданные.
Устройство 32 отображения может быть интегрировано в устройство-адресат 14 или представлять собой автономное устройство. В некоторых примерах устройство-адресат 14 может включать в себя интегрированное устройство отображения, а также может быть сконфигурировано для взаимодействия с внешним устройством отображения. В других примерах устройство-адресат 14 может быть устройством отображения. В общем случае, устройство 12 отображения отображает декодированные видеоданные пользователю и может содержать любое из различных устройств отображения, например, жидкокристаллический дисплей (LCD), плазменный дисплей, дисплей на органических светоизлучающих диодах (OLED) или устройство отображения другого типа.
В примере на фиг. 1 канал 16 связи может содержать любую беспроводную или проводную среду связи, такую как радиочастотный (RF) спектр или одну или несколько физических линий связи, либо любую комбинацию беспроводной и проводной среды. Канал 16 связи может образовать часть сети на пакетной основе, такую как локальная сеть, региональная сеть или глобальная сеть, например, Интернет. Канал 16 связи в общем случае представляет любую подходящую среду связи или совокупность различных сред связи для передачи видеоданных от устройства-источника 12 на устройство-адресат 14, в том числе любую подходящую комбинацию проводной и беспроводной сред. Канал 16 связи может включать в себя маршрутизаторы, коммутаторы, базовые станции или любое другое оборудование, которое можно использовать для обеспечения передачи от устройства-источника 12 на устройство-адресат 14.
Видеоэнэнкодер 20 и видеодекодер 30 могут функционировать в соответствии со стандартом сжатия видео, таким как ITU-T H.261, ISO/IEC MPEG-1 Visual, ITU-T H.262 или ISO/IEC MPEG-2 Visual, ITU-T H.263, ISO/IEC MPEG-4 Visual и ITU-T H.264 (также известный, как ISO/IEC MPEG-4 AVC), включая расширения масштабируемого видеокодирования (SVC) и многовидового видеокодирования (MVC). Вдобавок, имеется новый стандарт видеокодирования, а именно стандарт высокоэффективного видеокодирования (HEVC), разрабатываем Объединенной командой разработчиков систем видеокодирования (JCT-VC) Экспертной группы по видеокодированию ITU-T (VCEG) и Экспертной группой по движущимся изображениям (MPEG) ISO/IEC. Последний рабочий проект (WD) стандарта HEVC, далее называемый HEVC WD8, доступен с 20 июля 2012 года по ссылке http://phenix.int-evry/fr/jct/doc_end_user/documents/10_Stockholm/wg11/JCTVC-J1003-v8-zip. Однако, приведенные здесь методики не ограничены каким-либо конкретным стандартом кодирования. Исключительно в иллюстративных целях они описаны здесь в соответствии со стандартом HEVC.
Хотя это на фиг. 1 не показано, согласно некоторым аспектам видеоэнэнкодер 20 и видеодекодер 30 могут быть интегрированы с аудиокодеров и аудиодекодером соответственно и могут включать в себя соответствующие блоки мультиплексирования-демультиплексирования, либо другие аппаратные или программные средства для обработки кодирования как аудио-, так и видеоданных в общем потоке данных или в отдельных потоках данных. Блоки мультиплексирования-демультиплексирования, если они применяются, могут соответствовать Протоколу мультиплексора ITU H.223 или другим протоколам, таким как Протокол дейтаграмм пользователя (UDP).
Как видеоэнэнкодер 20, так и видеодекодер 30 могут быть реализованы в виде любой из множества разных подходящих схем энкодера, таких как один или несколько процессоров, включая микропроцессоры, цифровые процессоры сигналов (DSP), прикладные специализированные интегральные схемы (ASIC), вентильные матрицы, программируемые пользователем (FPGA), дискретная логика, программные средства, аппаратные средства, программно-аппаратные средства или любую их комбинацию. При реализации указанных методик частично в виде программного обеспечения в устройстве могут храниться команды для этого программного обеспечения на подходящем считываемом компьютером носителе долговременного хранения, и устройство может выполнять эти команды в аппаратных средствах, используя один или несколько процессоров для выполнения раскрытых здесь методик.
Как видеоэнэнкодер 20, так и видеодекодер 30 могут быть включены в один или несколько энкодеров или декодеров, либо каждый из них может быть составной частью объединенного кодера/декодера (кодека) в соответствующем устройстве. В некоторых случаях видеоэнкодер 20 и видеодекодер 30 могут вместе называться видеокодером, который кодирует информацию (например, изображения и синтаксические элементы). Кодирование информации может называться энкодированием, когда видеокодер соответствует видеоэнкодеру 20. Кодирование информации может относиться к декодированию, кода видеокодер соответствует видеодекодеру 30.
Кроме того, методики, описанные в этом изобретении, могут относиться к видеоэнкодеру 20, передающему сигнальную информацию. Когда видеоэнкодер 20 передает сигнальную информацию, методики, раскрытые в изобретении, обычно относятся к любому способу, используя который видеоэнкодер 20 предоставляет указанную информацию. Например, когда видеоэнкодер 20 передает синтаксические элементы видеодекодеру 30, это означает, что видеоэнкодер 20 передал синтаксические элементы на видеодекодер 30 через интерфейс 24 вывода и канал 16 связи, или что видеоэнкодер 20 запомнил синтаксические элементы, используя интерфейс 24 вывода, на носителе 17 данных или на файловом сервере 19 для окончательного приема видеодекодером 30. Таким образом, сигнализация от видеоэнкодера 20 на видеодекодер 30 не должна интерпретироваться как передача сигнальной информации от видеоэнкодера 20, требующая немедленного приема видеодекодером 30, хотя этот вариант возможен. Скорее наоборот, сигнализация от видеоэнкодера 20 на видеодекодер 30 должна интерпретироваться как операция, с помощью которой видеоэнкодер 20 предоставляет информацию для окончательного приема видеодекодером 30 либо напрямую, либо через промежуточную операцию запоминания (например, на носителе 17 данных и/или файловом сервере 19).
Видеоэнкодер 20 и видеодекодер 30 могут быть сконфигурированы для реализации методик, описанных в этом разделе, для получения набора опорных изображений. Например, видеодекодер 30 может инициировать процесс получения набора опорных изображений для каждого изображения. Видеодекодер 30 может инициировать процесс получения набора опорных изображений после декодирования заголовка слайса, но до декодирования какого-либо кодового блока и до декодирования для построения списка опорных изображений для данного слайса.
Как было описано выше, набор опорных изображений представляет собой абсолютное описание опорных изображений, используемых в процессе декодирования текущего изображения и будущих кодированных изображений в порядке декодирования до следующего IDR изображения или до следующего BLA изображения. В описанных здесь примерах видеоэнкодер 20 может явным образом просигнализировать о значениях, на основе которых видеодекодер 30 может определить идентификаторы для опорных изображений, которые относятся к набору опорных изображений. Сигнализация о наборе опорных изображений выполняется в явном виде в том смысле, что все опорные изображения, включенные в набор опорных изображений, вносятся в список явным образом за исключением некоторых изображений, например, IDR изображений, причем ни один из синтаксических элементов набора опорных изображений не содержится в заголовке слайса, и набор опорных изображений получается пустым.
Возможны различные способы, пользуясь которыми видеоэнкодер 20 может сигнализировать о синтаксических элементах в кодированном битовом потоке, которые видеодекодер 30 может использовать для получения набора опорных изображений. Например, видеоэнкодер 20 может обеспечить сигнализацию о синтаксических элементах в наборе параметров изображения (PPS), наборе параметров последовательности (SPS), заголовке изображения (если он имеется), заголовке слайса или любой их комбинации. Исключительно в иллюстративных целях видеоэнкодер 20 может обеспечить сигнализацию о синтаксических элементах, используя набор SPS, набор PPS и заголовок слайса, как это было подробно описано.
Для получения набора опорных изображений видеодекодер 30 может реализовать процесс декодирования для определения идентификаторов для изображений, относящихся к набору опорных изображений. Затем видеодекодер 30 может построить множество поднаборов опорных изображений, где каждый из поднаборов идентифицирует нуль или более опорных изображений, относящихся к данному набору опорных изображений. Видеодекодер 30 может получить набор опорных изображений из построенных поднаборов опорных изображений. Например, видеодекодер 30 может внести в список множество поднаборов опорных изображений в конкретном порядке для получения набора опорных изображений.
Возможно несколько различных путей, по которым видеодекодер 30 может определить идентификаторы для изображений, относящихся к набору опорных изображений. В общем случае видеоэнкодер 20 может сигнализировать о значениях, исходя из которых видеодекодер 30 может определить идентификаторы для изображений, в том числе тех изображений, которые относятся к указанному набору опорных изображений. Идентификаторами изображений могут быть PicOrderCnt (то есть, значения счетчика очередности изображений (POC)). Как было описано выше, значение POC может указывать порядок отображения или вывода изображения, где изображения с меньшими значениями POC отображаются раньше, чем изображения с большими значениями POC. Значение POC данного изображения может определяться относительно предшествующего IDR изображения. Например, PicOrderCnt (то есть, значение POC) для IDR изображения может быть равно 0, значение POC для изображения после IDR изображения в порядке отображения или вывода может быть равно 1, значение POC для изображения после изображения со значением POC в порядке отображения или вывода может быть равно 2 и т.д.
Согласно раскрытым здесь методикам, когда текущее изображение не является IDR изображением, для получения значения POC текущего изображения можно применить нижеследующий подход. Этот подход способствует лучшему пониманию изобретения, и его не следует рассматривать как ограничение.
Рассмотрим, например, переменную listD списка, которая включает в себя в качестве элементов значения PicOrderCnt (значения POC), связанные со списком изображений, включающим в себя все из нижеперечисленного: (1) первое изображение в списке является предшествующим IDR изображением в порядке декодирования, и (2) все другие изображения, которые следуют в порядке декодирования после первого изображения в списке и либо предшествуют текущему изображению в порядке декодирования, либо являются текущим изображением. В этом примере текущее изображение включено в listD до активации процесса получения набора опорных изображений. Также рассмотрим переменную listO списка, которая включает в себя элементы listD, отсортированные в порядке возрастания значений POC. В этом примере listO может не содержать значение POC, равное значению POC другого изображения.
pocLen-l
pocLen-l
31
31
В некоторых примерах значения POC могут быть ограничены диапазоном от -2 до 2-1 включительно. В этом примере pocLen может быть равен long_term_ref_pic_id_len_delta + long_term_ref_pic_id_delta_len_minus4 + 4. Элемент long_term_ref_pic_id_len_delta и элемент long_term_ref_pic_id_delta_len_minus4 могут представлять собой синтаксические элементы, которые видеодекодер 30 принимает в кодированном битовом потоке как часть синтаксиса установки параметров изображения, как более подробно описано ниже. В другом примере значения POC могут быть ограничены диапазоном от -2 до 2 - 1 включительно.
В одном примере видеодекодер 30 может принимать в кодированном битовом потоке (то есть, битовом потоке, передаваемом видеоэнкодером 20) синтаксический элемент pic_order_cnt_lsb. Синтаксический элемент pic_order_cnt_lsb может задавать значение по модулю счетчика очередности изображения MaxPicOrderCntLsb для кодированного изображения. Длина синтаксического элемента pic_order_cnt_lsb может составлять log2_max_pic_order_cnt_lsb_minus4 + 4 бита. Значение элемента pic_order_cnt_lsb может находиться в диапазоне от 0 до MaxPicOrderCntLsb - 1 включительно. Видеодекодер 30 может получить синтаксический элемент pic_order_cnt_lsb в синтаксисе заголовка слайса для текущего изображения, подлежащего декодированию.
Видеодекодер 30 может также получить синтаксический элемент log2_max_pic_order_cnt_lsb_minus4 в кодированном битовом потоке переданном видеоэнкодером 20. Видеодекодер 30 может получить синтаксический элемент log2_max_pic_order_cnt_lsb_minus4 в наборе параметров последовательности. Значение log2_max_pic_order_cnt_lsb_minus4 может находиться в диапазоне от 0 до 12 включительно. Синтаксический элемент log2_max_pic_order_cnt_lsb_minus4 может задавать значение переменной MaxPicOrderCntLsb, которую видеодекодер 30 использует в процессе декодирования для определения значений POC. Например:
(log2_max_pic_order_cnt_lsb_minus4+4)
MaxPicOrderCntLsb = 2
На основе этих полученных синтаксических элементов видеодекодер 30 может определить значение POC текущего изображения следующим образом. Видеодекодер 30 может, например, определить элемент PicOrderCntMsb для текущего изображения. Значение POC для текущего изображения может представлять собой определенный элемент PicOrderCntMsb для текущего изображения плюс полученный элемент pic_order_cnt_lsb для текущего изображения.
15
15
Далее функция PicOrderCnt(picX) равна значению POC для изображения X. Функция DiffPicOrderCnt(picA, picB) равна PicOrderCnt(picA) минус PicOrderCnt(picB). В некоторых примерах кодированный битовый поток может не содержать данные, которые дают значения функции DiffPicOrderCnt(picA, picB), используемой в процессе декодирования, которые выходят за рамки диапазона от -2 до 2 - 1 включительно. Кроме того, обозначим текущее изображение как X, а два других изображения в той же последовательности как Y и Z, причем считается, что Y и Z выводятся в одном и том же порядке в направлении от X, когда и DiffPicOrderCnt(X, Y), и DiffPicOrderCnt(X, Z) являются положительными или отрицательными. Также в некоторых примерах видеоэнкодер 20 может присваивать значение PicOrderCnt пропорционально времени дискретизации соответствующего изображения по отношению к времени дискретизации предшествующего IDR изображения.
В качестве части процесса определения значения POC для текущего изображения, видеодекодер 30 может определить переменные prevPicOrderCntMsb и prevPicOrderCntLsb. Например, если текущим изображением является IDR изображение, то видеодекодер 30 может установить значение prevPicOrderCntMsb равным 0 и установить значение prevPicOrderCntLsb, равным 0. В противном случае (то есть, когда текущее изображение не является IDR изображением), видеодекодер 30 может установить значение prevPicOrderCntMsb равным значению PicOrderCntMsb предыдущего опорного изображения в порядке декодирования с идентификатором temporal_id, меньшим или равным идентификатору текущего изображения и установить значение prevPicOrderCntLsb, равным значению pic_order_cnt_lsb предыдущего опорного изображения в порядке декодирования с идентификатором temporal_id, меньшим или равным идентификатору текущего изображения.
Используя эти значения переменных и значения синтаксических элементов (например, значения revPicOrderCntMsb, prevPicOrderCntLsb, pic_order_cnt_lsb и MaxPicOrderCntLsb), видеодекодер 30 может определить значение PicOrderCntMsb на основе шагов, описанных в нижеследующем псевдокоде. Следует понимать, что видеодекодер 30 может реализовать шаги, описанные в нижеследующем псевдокоде, чтобы определить PicOrderCntMsb для каждого текущего изображения, который используют для получения значения POC текущего изображения.
После определения PicOrderCntMsb для текущего изображения видеодекодер 30 может определить значение POC для текущего изображения на основе PicOrderCntMsb для текущего изображения и pic_order_cnt_lsb для текущего изображения. Видеодекодер 30 может определить значение POC для текущего изображения следующим образом:
PicOrderCnt = PicOrderCntMsb + pic_order_cnt_lsb.
После декодирования изображения видеодекодер 30 может запомнить значение PicOrderCntMsb, значение pic_order_cnt_lsb и значение POC для данного изображения, включая каждое из опорных изображений, которые относятся к набору опорных изображений, в буфере декодированных изображений (DPB) видеодекодера 30. Таким образом, каждое изображение в буфере DPB будет связано со значением POC, значением PicOrderCntMsb и значением pic_order_cnt_lsb.
Способы для определения значений POC для опорных изображений, включенных в набор опорных изображений текущего изображения, более подробно описаны ниже. Исходя из определенных значений POC, видеодекодер 30 может реализовать процесс получения набора опорных изображений. Однако перед описанием того, каким образом видеодекодер 30 реализует процесс получения набора опорных изображений, необходимо обеспечить таблицы синтаксических элементов, которые видеодекодер 30 может принять в кодированном битовом потоке, переданном видеоэнкодером 20 в целях сигнализации. Например, видеоэнкодер 20 может передать синтаксические элементы в нижеследующих таблицах в кодированном битовом потоке, принимаемом видеодекодером 30. Некоторые из этих синтаксических элементов были описаны выше. Исходя из этих синтаксических элементов, видеодекодер 30 может определить значения POC для опорных изображений, включенных в набор опорных изображений, и затем получить набор опорных изображений.
Например, в раскрытых здесь методиках описанные ниже синтаксические структуры модифицируют по отношению к предшествующим стандартам видеокодирования: синтаксис первичной байтовой последовательности данных (RBSP) для набора параметров последовательности (SPS), seq_paramater_set_rbsq(), синтаксис RBSP для набора параметров изображения (PPS), pic_parameter_set_rbsp(), синтаксис заголовка слайса, slice_header() и синтаксис модификации списков опорных изображений, ref_pic_list_modification(). Модификация списков опорных изображений более подробно описана далее в описании процесса получения набора опорных изображений и инициализации одного или нескольких списков опорных изображений.
Также, согласно раскрытым здесь методикам в кодированный битовый поток добавляют следующие синтаксические структуры: синтаксис набора краткосрочных опорных изображений, short_term_ref_pic_set() и синтаксис набора долгосрочных опорных изображений, long_term_ref_pic_set(). Видеодекодер 30 может использовать синтаксис набора краткосрочных опорных изображений и синтаксис набора долгосрочных опорных изображений в целях построения поднаборов опорных изображений, исходя из которых видеодекодер 30 получает список опорных изображений.
Например, для того, чтобы видеодекодер 30 смог определить значения POC для опорных изображений, относящихся к набору опорных изображений, видеоэнкодер 20 может передать информацию, идентифицирующую опорное изображение, которую видеодекодер использует для определения значений POC, в наборе параметров изображения и индекс для списка, к которому можно обратиться, в заголовке слайса. Однако возможны и другие способы, с помощью которых видеоэнкодер 20 может передать указанную информацию, идентифицирующую опорное изображение.
В одном альтернативном примере видеоэнкодер 20 может передать в качестве сигнализации информацию об опорном изображении в наборе параметров последовательности и индекс для списка, к которому можно обратиться, в заголовке слайса, что позволяет сократить издержки, связанные с сигнализацией. В другом альтернативном примере видеокодер может передать информацию об опорном изображении в наборе параметров нового типа (например, набор параметров набора опорных изображений (RPSPS)) и идентификатор RPSPS ID, а также индекс для списка с информацией, идентифицирующей опорное изображение, к которому можно обратиться, в заголовке слайса. Это дает возможность снизить издержки на сигнализацию, а также не увеличивать необходимое количество наборов параметров изображения или набора параметров последовательности. В других примерах видеоэнкодер 20 может использовать любую комбинацию из указанных приведенных в качестве примера методик для передачи сигнализирующей информации, идентифицирующей опорное изображение.
Таблица 1Синтаксис RBSP набора параметров последовательности
<img file="00000002.tif" he="158" wi="136" img-content="undefined" img-format="tif" />
16
Параметр pic_width_in_luma_samples может задать ширину каждого декодированного изображения в отсчетах яркости. Значение pic_with_in_luma_samples может находиться в диапазоне от 0 до 2-1 включительно.
16
Параметр pic_height_in_luma_samples может задавать высоту каждого декодированного изображения в отсчетах яркости. Значение pic_height_in_luma_samples может находиться в диапазоне от 0 до 2-1 включительно.
(log2_max_pic_order_cnt_lsb_minus4 + 4)
Как показано в Таблице 1, видеодекодер 30 может принимать в наборе параметров последовательности (SPS) синтаксический элемент log2_max_pic_order_cnt_lsb_minus4. Как было описано выше, значение log2_max_pic_order_cnt_lsb_minus4 может задавать значение переменной MaxPicOrderCntLsb, которое видеодекодер 30 использует в процессе декодирования для определения значений POC, MaxPicOrderCntLsb = 2.
Таблица 2Синтаксис RBSP набора параметров изображения
<img file="00000003.tif" he="167" wi="143" img-content="undefined" img-format="tif" />
Элемент num_short_term_ref_pic_sets_pps задает количество синтаксических структур short_term_ref_pic_set(), включенных в набор параметров изображения. Значение num_short_term_ref_pic_sets_pps должно находиться в диапазоне от 0 до 32 включительно.
Элемент long_term_ref_pics_present_flag, равный 0, определяет, что ни одно долгосрочное опорное изображение не используется для межкадрового предсказания любого кодированного изображения, относящегося к набору параметров изображения, и синтаксические элементы long_term_ref_pic_id_delta_len_minus4, long_term_ref_pic_id_len_delta и num_long_term_ref_pics_pps отсутствуют. Элемент long_term_ref_pics_present_flag, равный 1, определяет, что долгосрочные опорные изображения могут быть использованы для межкадрового предсказания одного или нескольких кодированных изображений, относящихся к набору параметров изображения, и синтаксические элементы long_term_ref_pic_id_delta_len_minus4, long_term_ref_pic_id_len_delta и num_long_term_ref_pics_pps присутствуют.
Элемент long_term_ref_pic_id_delta_len_minus4 плюс 4 определяет длину в битах синтаксических элементов long_term_ref_pic_id_delta_add_foll[i]. Значение long_term_ref_pic_id_delta_len_minus4 должно находиться в диапазоне от 0 до 12 включительно.
Элемент long_term_ref_pic_id_len_delta плюс элемент
long_term_ref_pic_id_delta_len_minus4 плюс 4 определяет длину в битах синтаксического элемента long_term_ref_pic_id_pps[i]. Значение элемента long_term_ref_pic_id_len_delta может находиться в диапазоне от 0 до 28 - long_term_ref_pic_id_delta_len_minus4 включительно. Значение long_term_ref_pic_id_len_delta + long_term_ref_pic_id_delta_len_minus4 + 4 во всех наборах параметров изображения, относящихся к одному конкретному набору параметров последовательности, может быть идентичным.
Элемент num_long_term_ref_pics_pps определяет количество идентификаций долгосрочных опорных изображений, включенных в набор опорных изображений. Значение num_long_term_ref_pics_pps может находиться в диапазоне от 0 до 32 включительно.
Элемент long_term_ref_pic_id_pps[i] определяет информацию, идентифицирующую i-ое долгосрочное опорное изображение, включенную в набор параметров изображения. Количество бит, используемых для представления long_term_ref_pic_id_pps[i], может быть равно long_term_ref_pic_id_len_delta + long_term_pic_id_len_minus4 + 4.
Таблица 3Синтаксис набора краткосрочных опорных изображений
<img file="00000004.tif" he="53" wi="141" img-content="undefined" img-format="tif" />
Синтаксис набора краткосрочных опорных изображений предназначен для краткосрочных изображений. Краткосрочное изображение можно определить как опорное изображение, идентификационная информация для которого содержится в синтаксической структуре short_term_ref_pic_set() для кодированного изображения, либо содержится в заголовке (заголовках) слайса, либо содержится в наборе параметров опорного изображения со ссылкой на синтаксический элемент short_term_ref_pic_set_idx в заголовке (заголовках) слайса. Синтаксические элементы заголовка слайса приведены ниже в Таблице 4.
Элемент num_short_term_curr0 определяет количество краткосрочных опорных изображений в элементе RefPicSetStCurr0, когда для получения набора опорных изображений кодированного изображения используют синтаксическую структуру short_term_ref_pic_set(), как описано ниже. Значение num_short_term_curr0 может находиться в диапазоне от 0 до max_num_ref_frames включительно.
Элемент num_short_term_curr1 определяет количество краткосрочных изображений в RefPicSetStCurr1, когда для получения набора опорных изображений кодированного изображения используют синтаксическую структуру short_term_ref_pic_set(), как описано ниже. Значение num short term curr1 может находиться в диапазоне от 0 до max_num_ref_frames - num_short_term_curr0 включительно.
Элемент num_short_term_foll0 определяет количество краткосрочных опорных изображений в RefPicSetStFoll0, когда для получения набора опорных изображений кодированного изображения используют синтаксическую структуру short_term_ref_pic_set(), как описано ниже. Значение num_short_term_foll0 может находиться в диапазоне от 0 до max_num_ref_frames - num_short_term_curr0 - num_short_term_curr1 включительно.
Элемент num_short_term_foll1 определяет количество краткосрочных опорных изображений в RefPicSetStFoll1, когда для получения набора опорных изображений кодированного изображения используют синтаксическую структуру short_term_ref_pic_set(), как описано ниже. Значение num_short_term_foll1 должно находиться в диапазоне от 0 до max_num_ref_frames - num_short_term_curr0 - num_short_term_curr1 - num_short_term_foll0 включительно.
Элемент short_term_ref_pic_id_delta_minus1[i] определяет идентификационную информацию i-го краткосрочного опорного изображения, включенного в синтаксическую структуру short_term_ref_pic_set().
Таблица 4Синтаксис заголовка слайса
<img file="00000005.tif" he="169" wi="135" img-content="undefined" img-format="tif" />
<img file="00000006.tif" he="118" wi="143" img-content="undefined" img-format="tif" />
Элемент no_output_of_prior_pics_flag определяет, каким образом обрабатываются ранее декодированные изображения в буфере декодированных изображений после декодирования IDR изображения. Когда IDR изображение является первым IDR изображением в битовом потоке, значение no_output_of_prior_pics_flag может не повлиять на процесс декодирования. Когда IDR изображение не является первым IDR изображением в битовом потоке, и значение pic_width_in_luma_samples или pic_height_in_luma_samples или max_dec_frame_buffering, полученное из действующего набора параметров последовательности, могут отличаться от значения pic_width_in_luma_samples или pic_height_in_luma_samples или max_dec_frame_buffering, полученного из набора параметров последовательности, активизированного для предшествующего изображения, элемент no_output_of_prior_pics_flag, равный 1, может, но не обязательно, быть получен декодером независимо от действующего значения флага no_output_of_prior_pics_flag.
Элемент short_term_ref_pic_set_pps_flag, равный 1, определяет, что идентификационная информация набора краткосрочных опорных изображений, включенных в набор опорных изображений, для текущего изображения присутствует в указанном наборе параметров изображения. Элемент short_term_ref_pic_set_pps_flag, равный 0, определяет, что идентификационная информация набора краткосрочных опорных изображений, включенных в набор опорных изображений для текущего изображения, отсутствует в указанном наборе параметров изображения.
Элемент short_term_ref_pic_set_idx определяет индекс синтаксической структуры short_term_ref_pic_set( ), включенный в указанный набор параметров изображений, содержащий идентификационную информацию набора краткосрочных опорных изображений в наборе опорных изображений для текущего изображения.
Переменные NumShortTermCurr0 и NumShortTermCurr1 определяются как:
NumShortTermCurr0 = num_short_term_curr0
NumShortTermCurr1 = num_short_term_curr1,
где num_short_term_curr0 и num_short_term_curr1 являются синтаксическими элементами с одинаковыми именами соответственно в синтаксической структуре short_term_ref_pic_set( ), либо присутствуют в указанном наборе параметров изображения и вызываются элементом short_term_ref_pic_set_idx, или непосредственно присутствуют в заголовке слайса.
Элемент num_ref_idx_10_active_minus1 определяет максимальный опорный индекс для списка 0 опорных изображений, который должен использоваться для декодирования данной слайса.
Когда текущий слайс является P слайсом или B слайсом, и элемент num_ref_idx_l0_active_minus1 отсутствует, можно положить, что num_ref_idx_l0_active_minus1 равен num_ref_idx_l0_default_active_minus1.
Значение num_ref_idx_l0_active_minus1 может находиться в диапазоне от 0 до 15 включительно.
Элемент num_ref_idx_l1_active_minus1 определяет максимальный опорный индекс для списка 1 опорных изображений, который должен использоваться для декодирования данного слайса.
Когда текущий слайс является P слайсом или B слайсом, и num_ref_idx_l1_active_minus1 отсутствует, можно положить, что num_ref_idx_l1_active_minus1 равен num_ref_idx_l1_default_active_minus 1.
Значение num_ref_idx_l1_active_minus1 может находиться в диапазоне от 0 до 15 включительно.
Таблица 5Синтаксис набора долгосрочных опорных изображений
<img file="00000007.tif" he="57" wi="142" img-content="undefined" img-format="tif" />
Синтаксис набора долгосрочных опорных изображений предназначен для долгосрочных изображений. Долгосрочное изображение можно определить как опорное изображение, идентификационная информация для которого включена в синтаксическую структуру long_term_ref_pic_set() для кодированного изображения.
Элемент num_long_term_pps_curr определяет количество всех долгосрочных опорных изображений, идентификационная информация о которых включена в указанный набор параметров изображения, и которые можно использовать для межкадрового предсказания текущего изображения. Если num_long_term_pps_curr отсутствует, то можно заключить, что его значение равно 0. Значение num_long_term_pps_curr может находиться в диапазоне от 0 до max_num_ref_frames включительно.
Элемент num_long_term_add_curr определяет количество всех долгосрочных опорных изображений, идентификационная информация о которых не включена в вышеупомянутый набор параметров изображения, и которые можно использовать для межкадрового предсказания текущего изображения. Если num_long_term_add_curr отсутствует, то можно заключить, что его значение равно 0. Значение num_long_term_add_curr может находиться в диапазоне от 0 до max_num_ref_frames -num_long_term_pps_curr включительно.
Переменная NumLongTermCurr определяется как:
NumLongTermCurr = num_long_term_pps_curr + num_long_term_add_curr.
Элемент num_long_term_pps_foll определяет количество всех долгосрочных опорных изображений, идентификационная информация о которых включена в вышеупомянутый набор параметров изображения, которые не используют для межкадрового предсказания текущего изображения и которые можно использовать для межкадрового предсказания любого из изображений, следующих за текущим изображением в порядке декодирования. Если num_long_term_pps_foll отсутствует, то можно заключит, что его значение равно 0. Значение num_long_term_pps_foll может находиться в диапазоне от 0 до max_num_ref_frames включительно.
Элемент num_long_term_add_foll определяет количество всех долгосрочных опорных изображений, идентификационная информация о которых не включена в вышеупомянутый набор параметров изображения, которые не используют для межкадрового предсказания текущего изображения, и которые можно использовать для межкадрового предсказания любого из последующих изображений в порядке декодирования. Если num_long_term_add_foll отсутствует, можно заключить, что его значение равно 0.
Значение num_long_term_add_foll может находиться в диапазоне от 0 до max_num_ref_frames -num_long_term_pps_foll включительно.
Элемент long_term_ref_pic_set_idx_pps[i] определяет индекс для списка опорных изображений, идентификационная информация о которых включена в вышеупомянутый набор параметров изображения, i-го долгосрочного опорного изображения из вышеупомянутого набора параметров изображения в набор опорных изображений текущего изображения. Значение long_term_ref_pic_set_idx_pps[i] может находиться в диапазоне от 0 до 31 включительно.
Элемент long_term_ref_pic_id_delta_add[i] определяет идентификационную информацию долгосрочного опорного изображения для i-го долгосрочного опорного изображения, которое не унаследовано от вышеупомянутого набора параметров изображения, а содержится в наборе опорных изображений текущего изображения. Количество бит, используемых для представления long_term_ref_pic_id_add_curr[i] может быть равно long_term_pic_id_len_minus4 + 4.
При использовании вышеупомянутых принятых в результате сигнализации или полученных значений (то есть, значений из таблиц 1-5) видеодекодер 30 может построить набор опорных изображений. Как было описано выше, полученный набор опорных изображений может идентифицировать опорные изображения, которые потенциально можно использовать для кодирования/предсказания текущего изображения (то есть, изображения, которое в данный момент декодируется), и изображения, следующие за текущим изображением в порядке декодирования. Согласно методикам, описанным в настоящем изобретении, порядок декодирования всех опорных изображений в полученном наборе опорных изображений характеризуется тем, что все опорные изображения из указанного набора декодируются раньше, чем текущее изображение.
Процесс получения упомянутого набора может включать в себя построение набора опорных изображений из множества поднаборов опорных изображений. Этот процесс может активироваться один раз для каждого изображения после декодирования заголовка слайса, но до декодирования какого-либо блока кодирования и до процесса декодирования для построения списка опорных изображений для данного слайса. Например, видеодекодер 30, исходя из полученных значений и просигнализированных синтаксических элементов, может определить значение POC для опорных изображений, относящихся к набору опорных изображений. Исходя из определенных значений POC видеодекодер 30 может построить поднаборы опорных изображений, которые совместно образуют набор опорных изображений. Таким путем, построив поднаборы опорных изображений, видеодекодер 30 может построить набор опорных изображений. Например, видеодекодер 30 может упорядочить поднаборы опорных изображений определенным образом, чтобы получить набор опорных изображений. Упорядочивание может относиться к способу, пользуясь которым видеодекодер 30 вносит в список поднаборы опорных изображений для получения набора опорных изображений.
Как было описано выше, для получения набора опорных изображений видеодекодер 30 может построить множество поднаборов опорных изображений. В некоторых примерах видеодекодер 30 может построить шесть поднаборов опорных изображений. Эти шесть поднаборов опорных изображений могут называться:
RefPicSetStCurr0, RefPicSetStCurr1, RefPicSetStFollO, RefPicSetStFoll1, RefPicSetLtCurr, и RefPicSetLtFoll. RefPicSetStCurr0 может называться как RefPicSetStCurrBefore, а RefPicSetStCurr1 может называться как RefPicSetStCurrAfter.
Следует понимать, что шесть поднаборов опорных изображений описаны здесь в иллюстративных целях, и это не следует трактовать как ограничение. В одном примере видеодекодер 30 может построить меньшее количество поднаборов опорных изображений, например, путем комбинирования некоторых из указанных поднаборов. Ряд примеров, где количество поднаборов, построенных видеодекодером 30, меньше шести, описаны ниже. Однако в иллюстративных целях приведенные здесь методики описаны на примерах, где видеодекодер 30 выполняет построение шести поднаборов опорных изображений.
Поднаборы опорных изображений RefPicSetStCurr0, RefPicSetStCurr1, RefPicSetStFoll0, и RefPicSetStFoll1 могут идентифицировать краткосрочные опорные изображения. В некоторых примерах эти поднаборы опорных изображений могут идентифицировать краткосрочные опорные изображения на основе того, отображаются ли краткосрочные опорный изображения раньше или позже, чем кодируемое текущее изображение, а также на основе того, можно ли потенциально использовать эти краткосрочные опорные изображения для межкадрового предсказания текущего изображения и изображений, следующих за текущим изображением в порядке декодирования, или можно ли потенциально использовать для межкадрового предсказания только те изображения, которые следуют за текущим изображением в порядке декодирования.
Например, поднабор опорных изображений RefPicSetStCurr0 может включать в себя только (или не только) идентификационную информацию, такую как значения POC, для всех краткосрочных опорных изображений, которые выводятся или отображаются раньше, чем текущее изображение, и которые можно потенциально использовать в качестве опорных при межкадровом предсказании текущего изображения, и можно потенциально использовать в качестве опорных при межкадровом предсказании одного или нескольких изображений, следующих за текущим изображением в порядке декодирования. Поднабор опорных изображений RefPicSetStCurr1 может включать в себя только (или не только) идентификационную информацию обо всех краткосрочных опорных изображениях, которые выводятся или отображаются позднее, чем текущее изображение, и которые можно потенциально использовать в качестве опорных при межкадровом предсказании текущего изображения и можно потенциально использовать в качестве опорных при межкадровом предсказании одного или нескольких изображений, следующих за текущим изображением в порядке декодирования.
Поднабор RefPicSetStFoll0 опорных изображений может включать в себя только (или не только) идентификационную информацию обо всех краткосрочных опорных изображениях, которые выводятся или отображаются раньше, чем текущее изображение, которые можно потенциально использовать в качестве опорных при межкадровом предсказании одного или нескольких изображений, следующих за текущим изображением в порядке декодирования, и которые нельзя использовать в качестве опорных при межкадровом предсказании текущего изображения. Поднабор RefPicSetStFoll1 опорных изображений может включать в себя только (или не только) идентификационную информацию всех краткосрочных опорных изображений, которые выводятся или отображаются позднее, чем текущее изображение, которые можно потенциально использовать в качестве опорных при межкадровом предсказании одного или нескольких изображений, следующих за текущим изображением в порядке декодирования, и которые нельзя использовать в качестве опорных при межкадровом предсказании текущего изображения.
Поднаборы RefPicSetLtCurr и RefPicSetLtFoll опорных изображений могут идентифицировать долгосрочные опорные изображения. В некоторых примерах эти поднаборы опорных изображений могут идентифицировать долгосрочные опорные изображения на основе того, отображаются ли эти долгосрочные опорные изображения раньше или позднее, чем текущее кодируемое изображение.
Например, поднабор RefPicSetLtCurr опорных изображений может включать в себя только (или не только) идентификационную информацию обо всех долгосрочных опорных изображениях, которые можно потенциально использовать в качестве опорных при межкадровом предсказании текущего изображения, и которые можно потенциально использовать в качестве опорных при межкадровом предсказании одного или нескольких изображений, следующих за текущим изображением в порядке декодирования. Поднабор RefPicSetLtFoll опорных изображений может включать в себя только (или не только) идентификационную информацию обо всех долгосрочных опорных изображениях, которые можно потенциально использовать в качестве опорных при межкадровом предсказании одного или нескольких изображений, следующих за текущим изображением в порядке декодирования, и которые нельзя использовать в качестве опорных при межкадровом предсказании текущего изображения.
Если текущее изображение, подлежащее декодированию, является IDR изображением, то видеодекодер 30 может установить поднаборы RefPicSetStCurr0, RefPicSetStCurr1, RefPicSetStFoll0, RefPicSetStFoll1, RefPicSetLtCurr и RefPicSetLtFoll опорных изображений пустыми. Причина этого может состоять в том, что IDR изображение может не быть результатом межкадрового предсказания, и что ни одно изображение после IDR в порядке декодирования не может использовать какое-либо изображение до IDR изображения в процессе декодирования в качестве опорного. В противном случае (например, когда текущее изображение не является IDR изображением), видеодекодер 30 может построить поднаборы краткосрочных опорных изображений и поднаборы долгосрочных опорных изображений, реализуя нижеследующий псевдокод.
Например, когда видеодекодер 30 декодирует один образец синтаксической структуры short_term_ref_pic_set() либо в заголовке слайса, либо путем обращения к вышеупомянутому набору параметров изображения, видеодекодер 30 может реализовать следующий псевдокод для построения поднаборов RefPicSetStCurr0, RefPicSetStCurr1, RefPicSetStFoll0 и RefPicSetStFoll1 опорных изображений.
Если видеодекодер 30 определяет, что флаг long_term_ref_pics_present_flag равен 0, то видеодекодер 30 может установить RefPicSetLtCurr и RefPicSetLtFoU пустыми, поскольку в этом случае нет долгосрочных опорных изображений. В противном случае, если видеодекодер 30 декодирует образец long_term_ref_pic_set() синтаксической структуры в заголовке слайса, видеодекодер 30 может реализовать следующий псевдокод для построения поднаборов RefPicSetLtCurr и RefPicSetLtFoll опорных изображений.
Согласно раскрытым здесь методикам опорное изображение с конкретным значением PicOrderCnt (значение POC) может считаться включенным в набор опорных изображений кодированного изображения, если это опорное изображение входит в любой из шести поднаборов набора опорных изображений данного кодированного изображения. Опорное изображение с конкретным значением PicOrderCnt считается включенным в конкретный поднабор набора опорных изображений, если конкретное значение PicOrderCnt (значение POC) равно одному из значений PicOrderCnt, включенных в данный поднабор.
После построения поднаборов опорных изображений видеодекодер 30 может получить набор опорных изображений. Например, видеодекодер 30 может упорядочить поднаборы опорных изображений для получения набора опорных изображений. В одном примере видеодекодер 30 может внести в список поднабор RefPicSetStCurr0 опорных изображений, за которым следует поднабор RefPicSetStCurr1 опорных изображений, за которым следует поднабор RefPicSetStFoll0 опорных изображений, за которым следует поднабор RefPicSetStFoll1 опорных изображений, за которым следует поднабор RefPicSetLtCurr опорных изображений, а затем поднабор RefPicSetLtFoll опорных изображений. В другом примере видеодекодер 30 может внести в список поднабор RefPicSetStCurr0 опорных изображений, за которым следует поднабор RefPicSetStCurr1 опорных изображений, за которым следует поднабор RefPicSetLtCurr опорных изображений, за которым следует поднабор RefPicSetStFoll0 опорных изображений, за которым следует поднабор RefPicSetStFoll1, а затем поднабор RefPicSetLtFoll опорных изображений.
Для получения набора опорных изображений возможно использование других перестановок, которые выполняет видеодекодер 30 с поднаборами опорных изображений. В некоторых примерах построение поднаборов опорных изображений и получение набора опорных изображений могут быть объединены вместе. Например, построение поднаборов опорных изображений может автоматически привести к тому, что видеодекодер 30 в конце концов получит набор опорных изображений. Другими словами, видеодекодеру 30 не обязательно выполнять разные шаги для построения поднаборов опорных изображений и получения набора опорных изображений, хотя возможно, что видеодекодер 30 сначала построит поднаборы опорных изображений, а затем получит набор опорных изображений.
Также согласно описанным здесь методикам построение набора опорных изображений вышеописанным способом может привести к тому, что видеодекодер 30 будет удовлетворять следующим ограничениям. Например, конкретное опорное изображение с конкретным значением PicOrderCnt возможно не будет включено в несколько поднаборов опорных изображений набора опорных изображений текущего изображения. Другими словами, опорное изображение, идентифицированное в одном из поднаборов опорных изображений, может не быть идентифицировано в каком-либо другом из поднаборов опорных изображений. В другом примере в полученном наборе опорных изображений может не оказаться опорное изображение с идентификатором temporal_id, превышающим аналогичный идентификатор текущего изображения, которое включено в какой-либо из поднаборов опорных изображений, образующих набор опорных изображений.
Как было описано выше, значение временной идентификации temporal_id может быть иерархическим, указывающим, какие изображения можно использовать для кодирования/предварительного кодирования текущего изображения. В общем случае изображение с конкретным значением temporal_id может оказаться опорным изображением для изображений, имеющих одинаковые или большие значения temporal_id, но не наоборот. Например, изображение со значением temporal_id, равным 1, может представлять собой опорное изображение для изображений со значениями temporal_id, равными 1, 2, 3,…, но не для изображения со значением temporal_id, равным 0.
Минимальное значение temporal_id также может указывать минимальную частоту отображения. Например, если видеодекодер 30 декодировал только изображение со значениями temporal_id, равными 0, частота отображения может составить 7, 5 изображений в секунду. Если видеодекодер 30 декодировал только изображения со значениями temporal_id, равными 0 и 1, то частота отображения может составить 15 изображений в секунду и т.д.
В некоторых примерах в набор опорных изображений текущего изображения могут быть включены только изображения со значениями temporal_id, меньшими или равными temporal_id текущего изображения. Как было описано выше, в качестве опорных изображений можно использовать только изображения со значениями temporal_id, меньшими или равными temporal_id текущего изображения. Таким образом, все опорные изображения с меньшими или одинаковыми значениями temporal_id могут быть использованы текущим изображением для межкадрового предсказания, и могут быть включены в набор опорных изображений. Также некоторые опорные изображения, имеющие значения temporal_id, превышающие соответствующее значение текущего изображения, и подлежащие использованию изображениями следующими за текущим изображением в порядке декодирования и имеющие значения temporal_id, превышающие соответствующее значение для текущего изображения, исключаются я из набора опорных изображений.
При использовании этих методик отпадает необходимость в сигнализации, состоящей в передаче temporal_id вдобавок к идентификационной информации изображения для получения набора опорных изображений; таким образом, сигнализация о наборе опорных изображений становится более эффективной. Например, видеоэнэнкодер 20 может не передавать значения temporal_id для опорных изображений, относящихся к набору опорных изображений, и видеодекодеру 30 нет необходимости принимать значения temporal_id опорных изображений, относящихся к набору опорных изображений, в целях получения набора опорных изображений.
Кроме того, при использовании этого подхода построенные поднаборы опорных изображений могут не идентифицировать опорные изображения со значениями temporal_id, превышающими соответствующее значение текущего изображения. Например, видеодекодер 30 будет способен построить поднаборы опорных изображений и гарантировать, что ни одно опорное изображение, идентифицированное в каком-либо из наборов опорных изображений не будет иметь значение temporal_id, превышающее соответствующее значение текущего изображения, поскольку может потребоваться соответствие битового потока, состоящее в том, что значения temporal_id не включены в битовый поток передаваемый видеоэнкодером 20 и принимаемый видеодекодером 30. В этом контексте видеодекодер 30 может создать набор опорных изображений, не принимая значения временных идентификаторов для опорных изображений, относящихся к набору опорных изображений.
В приведенных выше примерах видеодекодер 30 может построить шесть поднаборов опорных изображений, четыре для краткосрочных опорных изображений (а именно, RefPicSetStCurr0, RefPicSetStCurr1, RefPicSetStFoll0, и RefPicSetStFoll1) и два для долгосрочных опорных изображений (а именно, RefPicSetLtCurr и RefPicSetLtFoll). Однако аспекты настоящего изобретения эти не ограничиваются. В других примерах два или более поднабора опорных изображений могут быть объединены в один поднабор опорных изображений, в результате чего видеодекодер 30 построит меньшее количество поднаборов опорных изображений. Далее описываются некоторые примеры, не являющиеся ограничениями, в которых видеодекодер 30 может построить меньшее количество поднаборов опорных изображений. Возможны и другие пути построения видеодекодером 30 меньшего количества поднаборов опорных изображений.
Например, в некоторых случаях возможно, что для текущего изображения и для следующих изображений в порядке декодирования поднабор выделяться не будет. Таким образом, может быть два поднабора для краткосрочных опорных изображений, RefPicSetSt0 и RefPicSetStl и может быть только один поднабор для долгосрочных опорных изображений, а именно, RefPicSetLt. В этом примере поднабор опорных изображений RefPicSetSt0 может представлять собой сцепление RefPicSetStCurr0 и RefPicSetStFoll0 с RefPicSetStCurr0 в начале этого сцепления. В этом примере поднабор RefPicSetStl опорных изображений может представлять собой сцепление RefPicSetStCurr1 и RefPicSetStFoll1 с RefPicSetStCurr1 в начале этого сцепления. Поднабор RefPicSetLt опорных изображений может представлять собой сцепление RefPicSetLtCurr и RefPicSetLtFoll с RefPicSetLtCurr в начале получившегося сцепления.
В другом примере выделение указанного поднабора может отсутствовать для изображений, поступающих раньше или позже, чем текущее изображение. Такой подход может применяться только к краткосрочным опорным изображениям. Таким образом, можно иметь два поднабора для краткосрочных опорных изображений, называемых RefPicSetStCurr и RefPicSetStFoll. Поднабор RefPicSetStCurr опорных изображений может представлять собой сцепление RefPicSetStCurr0 и RefPicSetStCurr1 с RefPicSetStCurr0 в начале этого сцепления. Поднабор RefPicSetStFoll опорных изображений может представлять собой сцепление RefPicSetStFoll0 и RefPicSetStFoll1 с RefPicSetStFoll0 в начале этого сцепления.
В другом примере возможна ситуация, когда не применяются оба типа вышеупомянутых разделений. Следовательно может быть только один поднабор для краткосрочных опорных изображений, называемый RefPicSetSt, и только один поднабор для долгосрочных опорных изображений, называемый RefPicSetLt. Поднабор RefPicSetSt опорных изображений может представлять собой сцепление RefPicSetStCurr0, RefPicSetStCurr1, RefPicSetStFoll0 и RefPicSetStFoll1, в порядке перечисления (или в любом другом порядке), а RefPicSetLt может быть таким же, как указано выше.
В приведенных выше методиках описывается примерный способ получения видеодекодером 30 набора опорных изображений. В процессе кодирования видеоэнкодеру 20 также может понадобиться декодировать кодированные изображения в целях кодирования последовательных изображений, что называется процессом восстановления. Соответственно, в некоторых примерах видеоэнэнкодер 20 также может быть сконфигурирован для получения набора опорных изображений. В некоторых примерах видеоэнэнкодер 20 может реализовать такие же методики, которые реализует декодер 30 для получения набора опорных изображений. Однако, получение видеоэнкодером 20 набора опорных изображений в каждом случае может не потребоваться, и тогда видеодекодер 30 может быть просто кодером который получает набор опорных изображений.
Соответственно, в некоторых примерах видеокодер (например, видеоэнэнкодер 20 или видеодекодер 30) может кодировать (например, кодировать или декодировать соответственно) информацию, указывающую опорные изображения, относящиеся к набору опорных изображений. Например, видеоэнкодер 20 может
в качестве сигнализации передать кодированный битовый поток, включающий в себя значения для определения того, какие опорные изображения относятся к набору опорных изображений. Аналогичным образом, видеодекодер 30 может декодировать этот битовый поток, чтобы определить, какие опорные изображения относятся к набору опорных изображений.
Видеокодер может построить множество поднаборов опорных изображений, каждый из которых идентифицирует нуль или более опорных изображений. Например, видеокодер может построить шесть поднаборов опорных изображений (то есть, поднаборы RefPicSetStCurr0, RefPicSetStCurr1, RefPicSetStFoll0, RefPicSetStFoll1, RefPicSetLtCurr и RefPicSetLtFoll опорных изображений), где каждый из поднаборов идентифицирует нуль или более опорных изображений. В некоторых примерах видеокодер может кодировать текущее изображение на основе множества поднаборов опорных изображений.
Например, видеокодер может получить набор опорных изображений, исходя из построенного множества поднаборов опорных изображений. Например, видеокодер может упорядочить поднаборы опорных изображений любым образом, чтобы получить набор опорных изображений, или может получить набор опорных изображений в виде части конфигурации поднаборов опорных изображений. В некоторых примерах видеокодер может кодировать текущее изображение, исходя из полученного набора опорных изображений. Поскольку набор опорных изображений получают из множества поднаборов опорных изображений, можно считать, что видеокодер кодирует текущее изображение на основе множества поднаборов опорных изображений.
В некоторых примерах для упорядочивания поднаборов опорных изображений видеокодер может построить поднаборы опорных изображений в том порядке, в котором поднаборы опорных изображений должны быть внесены в набор опорных изображений. Например, видеокодер сначала может построить поднабор RefPicSetLtCurr опорных изображений, затем построить поднабор RefPicSetLtFol1 опорных изображений, затем построить поднабор RefPicSetStCurr0 опорных изображений, затем построить поднабор RefPicSetStCurr1 опорных изображений, затем построить поднабор RefPicSetStFoll0 опорных изображений и затем построить поднабор RefPicSetStFoll1 опорных изображений. В этом иллюстративном примере может быть следующий порядок поднаборов опорных изображений в наборе опорных изображений: RefPicSetLtCurr, RefPicSetLtFoll, RefPicSetStCurr0, RefPicSetStCurrl, RefPicSetStFoll0 и RefPicSetStFoll1, хотя возможны и другие порядки.
Согласно описанным здесь примерным методикам, после получения набора опорных изображений видеодекодер 30 может выполнять декодирование слайсов в текущем изображении. Часть процесса декодирования включает в себя построение одного или двух списков опорных изображений. Список опорных изображений - это список опорных изображений, который используется для предсказания P слайса или B слайса. Для процесса декодирования P слайса имеется один список (список 0) опорных изображений. Для декодирования процесса для B слайса имеется два списка (список 0 и список 1) опорных изображений. Список 0, иногда называемый списком 0 опорных изображений или RefPicList0, представляет собой список опорных изображений, используемый для межкадрового предсказания P или B слайса. Во всех межкадровых предсказаниях для P слайсов используется список 0. Список 0 опорных изображений является одним из двух списков опорных изображений, используемых для двунаправленного предсказания для B слайсов, причем другим списком является список 1 опорных изображений. Список 1, иногда называемый списком 1 опорных изображений, или RefPicListl, является списком опорных изображений, используемых для предсказания B слайса. Список 1 опорных изображений является одним из двух списков опорных изображений, используемых при предсказании B слайса, причем другим списком является список 0 опорных изображений. Для некоторых блоков в B слайсе двунаправленное предсказание можно выполнить, используя оба списка (список 0 и список 1), а также для некоторых блоков в B слайсе можно выполнить однонаправленное предсказание, используя либо список 0, либо список 1.
Для построения списков опорных изображений видеодекодер 30 может реализовать стандартную методику построения начального списка 0 и начального списка 1 для B слайсов. Построение начального списка 0 и начального списка 1 может называться здесь процессом инициализации. В некоторых примерах упомянутый кодированный битовый поток может указывать, что видеодекодер 30 должен модифицировать начальный список 0 и/или начальный список 1 для создания конечного списка 0 и конечного списка 1. Модификацию начального списка 0 и/или начального списка 1 можно назвать процессом модификации. Процесс модификации может не понадобиться в каждом конкретном случае, при этом возможный способ реализации видеодекодером 30 процесса модификации более подробно описывается ниже. Согласно раскрытым здесь методикам, когда нет необходимости модифицировать начальный список 0 или начальный список 1, конечный список 0 или конечный список 1 (то есть, начальный список 0 или 1, используемый для декодирования слайса текущего изображения) могут совпадать с начальным списком 0 или начальным списком 1. В результате, возможно, что не понадобиться переупорядочивание списка опорных изображений.
В методиках, раскрытых в этом изобретении, видеодекодер 30 может построить начальный список 0 или начальный список 1 таким образом, что видеодекодеру 30 не понадобится выполнять переупорядочивание текущих изображений, подлежащих включению в начальный список 0 или начальный список 1, независимо от того, необходим ли процесс модификации, поскольку опорные изображения в каждом из поднаборов опорных изображений уже расположены в правильном порядке. Например, в некоторых других методиках независимо от того, необходим ли процесс модификации, переупорядочивание опорных изображений, подлежащих включению в начальный список 0 или в начальный список 1 в соответствии с их значениями POC, при добавлении или внесении опорных изображений в начальный список 0 или начальный список 1 является обязательным.
В процессе инициализации видеодекодер 30 может реализовать стандартную методику построения начального списка 0 и начального списка 1. Эта стандартная методика может означать, что видеодекодер 30 формирует начальные списки опорных изображений, не получая синтаксические элементы от видеоэнкодера 20, независимо от того, каким образом видеодекодер 30 должен выполнять построения начальных списков опорных изображений, или каким образом должны идентифицироваться опорные изображения в начальных списках опорных изображений.
Видеодекодер 30 может активировать процесс построения списка опорных изображений при декодировании заголовка P или B слайса. Например, при декодировании P слайса видеодекодер 30 может активировать процесс для построения начального списка 0, но может не активировать процесс для построения начального списка 1, поскольку для блока в P слайсе выполняется только однонаправленное предсказание по отношению к опорному изображению, идентифицированному в списке 0. При декодировании B слайса видеодекодер 30 может активировать процесс для построения начального списка 0 и построения начального списка 1, поскольку для блока в B слайсе может быть выполнено двунаправленное предсказание по отношению к опорным изображения, идентифицированным в каждом из списков (список 0 и список 1).
Согласно примерным методикам, описанным в настоящем изобретении, видеодекодер 30 может использовать поднаборы опорных изображений для построения начального списка 0 и начального списка 1. Например, в начальный список 0 и в начальный список 1 может быть внесено нуль или более опорных изображений, идентифицированных в RefPicSetStCurr0, RefPicSetStCurr1 или RefPicSetLtCurr. В этом примере при активировании процесса построения списка опорных изображений возможно использование по меньшей мере одного опорного изображения в RefPicSetStCurr0, RefPicSetStCurr1 и RefPicSetLtCurr. Хотя начальный список 0 и начальный список 1 могут идентифицировать одно или несколько опорных изображений из одних и тех же поднаборов опорных изображений, порядок, в котором видеодекодер 30 добавляет опорные изображения в начальный список 0, может отличаться от порядка, в котором видеодекодер 30 добавляет опорные изображения в начальный список 1.
В настоящем изобретении, когда видеодекодер 30 добавляет (например, вносит в список) опорные изображения из одного или нескольких поднаборов опорных изображений в начальный список 0 или начальный список 1, это относится к видеодекодеру 30, идентифицирующему опорные изображения в начальном списке 0 или начальном списке 1. Например, каждый из множества поднаборов опорных изображений может идентифицировать нуль или более опорных изображений. Для построения начального списка 0 и начального списка 1 видеодекодер 30 может идентифицировать одно или несколько опорных изображений, которые идентифицированы в поднаборах опорных изображений, в начальном списке 0 или начальном списке 1.
Во избежание ошибок для прояснения сущности изобретения данное описание относится к видеодекодеру 30, вносящему в список или добавляющему нуль или несколько опорных изображений, которые идентифицированы в поднаборах опорных изображений, к начальному списку 0 и начальному списку 1 для построения начального списка 0 и начального списка 1. Таким образом, видеодекодер 30, который добавляет или вносит в список опорные изображения, представляет собой видеодекодер который добавляет или вносит в список идентификатор опорного изображения, идентифицированного в поднаборе опорных изображений. Соответственно, результирующий начальный список 0 и результирующий начальный список 1 включают в себя множество идентификаторов для опорных изображений, которые можно потенциально использовать для кодирования блока или слайса текущего изображения. Эти опорные изображения запоминаются в соответствующих буферах декодированных изображений видеодекодера 30 и видеоэнкодера 20.
Например, для построения начального списка 0 видеодекодер 30 сначала может внести в список (например, добавить) опорные изображения, идентифицированные в RefPicSetStCurr0 в начальном списке 0, за которыми следуют опорные изображения, идентифицированные в RefPicSetStCurr1 в начальном списке 0, а затем опорные изображения, идентифицированные в RefPicSetLtCurr в начальном списке 0. Для построения начального списка 1 видеодекодер 30 сначала может внести в список (например, добавить) опорные изображения, идентифицированные в RefPicSetStCurr1 в начальном списке 1, за которыми следуют опорные изображения, идентифицированные в RefPicSetStCurr0 в начальном списке 1, а затем опорные изображения, идентифицированные в RefPicSetLtCurr в начальном списке 1.
Кроме того, вдобавок к добавлению опорных изображений в поднаборах опорных изображений в другом порядке видеодекодер 30 может использовать другое количество опорных изображений из каждого поднабора опорных изображений при построении списка 0 и списка 1. Например, список 0 и список 1 не обязательно должен включать в себя все опорные изображения из RefPicSetStCurr0, RefPicSetStCurr1 и RefPicSetLtCurr. Скорее наоборот, количество перечисленных опорных изображений, из этих, приведенных в качестве примера поднаборов опорных изображений для построения начального списка 0 и начального списка 1 может быть основано на синтаксических элементах, которые указывают максимальное количество опорных изображений в каждом из начальных списков: в начальном списке 0 и в начальном списке 1.
Например, для начального списка 0 видеоэнэнкодер 20 в качестве сигнализации может передать синтаксический элемент num_ref_idx_l0_active_minus1 для P и B слайсов, и синтаксический элемент num_ref_idx_l1_active_minus1 для B слайсов, для которых выполняется двунаправленное предсказание. Как было описано выше num_ref_idx_l0_active_minus1 может определять максимальное количество опорных изображений, которое может находиться в начальном списке 0, а num_ref_idx_l1_active_minus1 может определять максимальное количество опорных изображений, которое может быть в начальном списке 1. В некоторых примерах возможно, что значение num_ref_idx_l0_active_minus1 будет отличаться от значения num_ref_idx_l1_active_minus1, хотя это не обязательно в каждом случае. В некоторых примерах значение num_ref_idx_l0_active_minus1 может совпадать со значением num_ref_idx_l1_active_minus1.
Как было описано выше, видеодекодер 30 может принимать в кодированном битовом потоке значения для num_short_term_curr0 и num_short_term_curr1. Видеодекодер 30 может определить переменную NumShortTermCurr0, равную num_short_term_curr0, и определить переменную NumShortTermCurr1, равную num_short_term_curr1. NumShortTermCurr0 указывает количество опорных изображений в поднаборе RefPicSetStCurr0 опорных изображений, а NumShortTermCurr1 указывает количество опорных изображений в поднаборе RefPicSetStCurr1 опорных изображений.
Видеодекодер 30 также может принимать в кодированном битовом потоке значения для num_long_term_pps_curr и num_long_term_add_curr. Видеодекодер 30 может определить переменную NumLongTermCurr, равную num_long_term_pps_curr плюс num_long_term_add_curr. NumLongTermCurr может указать количество опорных изображений в RefPicSetLtCurr.
Для построения начального списка 0 видеодекодер 30 сначала может добавить опорные изображения RefPicSetStCurr0 в начальной список 0, пока видеодекодер 30 не добавит все опорные изображения, содержащиеся в RefPicSetStCurr0, в начальный список 0, и, пока количество записей в начальном списке 0 (например, количество опорных изображений, идентифицированных в списке 0) меньше или равно num_ref_idx_l0_active_minus1. Например, NumShortTermCurr0 может указать количество опорных изображений в поднаборе RefPicSetStCurr0 опорных изображений. В этом примере, видеодекодер 30 может вносить в список (например, добавлять) опорные изображения из поднабора RefPicSetStCurr0 опорных изображений, пока количество опорных изображений, внесенных из RefPicSetStCurr0, не станет равным NumShortTermCurr0. Однако при внесении опорных изображений из RefPicSetStCurr0 в начальный список 0, если общее количество записей в начальном списке 0 равно num_ref_idx_l0_active_minus1, то тогда видеодекодер 30 может прекратить добавление опорных изображений в поднабор RefPicSetStCurr0 опорных изображений даже в том случае, если имеются добавленные изображения в RefPicSetStCurr0, которые не были внесены в начальный список 0. В этом случае видеодекодер 30 может завершить построение начального списка 0.
После того, как видеодекодер 30 внес в список все опорные изображения, находящиеся в поднаборе RefPicSetStCurr0 опорных изображений, и общее количество записей в начальном списке 0 меньше, чем num_ref_idx_l0_active_minus1, видеодекодер 30 может затем добавлять опорные изображения, входящие в RefPicSetStCurr1, пока видеодекодер 30 не идентифицирует все опорные изображения в RefPicSetStCurr1, и пока количество записей в начальном списке 0 (например, количество опорных изображений, идентифицированных в списке 0) меньше или равно num_ref_idx_l0_active_minus1. Например, по аналогии с вышеописанным, NumShortTermCurr1 может указывать количество опорных изображений в поднаборе RefPicSetStCurr1 опорных изображений. В этом примере видеодекодер 30 может вносить в список опорные изображения из поднабора RefPicSetStCurr1 опорных изображений, пока количество внесенных опорных изображений из RefPicSetStCurr1, не станет равным NumShortTermCurr1. Однако при внесении в список опорных изображений из RefPicSetStCurr1, если общее количество записей в начальном списке 0 равно num_ref_idx_l0_active_minus1, то тогда видеодекодер 30 может прекратить добавление опорных изображений из поднабора RefPicSetStCurr1 опорных изображений даже в том случае, если в RefPicSetStCurr1 имеются дополнительные изображения, которые не попали в начальный список 0. В этом случае видеодекодер 30 может завершить построение начального списка 0.
После того как видеодекодер 30 внес в список все опорные изображения, входящие в поднабор RefPicSetStCurr1 опорных изображений, и общее количество записей в начальном списке 0 меньше, чем num_ref_idx_l0_active_minus1, видеодекодер 30 может затем вносить в список опорные изображения, входящие в RefPicSetLtCurr, пока видеодекодер 30 не внесет все опорные изображения, содержащиеся в RefPicSetLtCurr и, пока количество записей в начальном списке 0 (например, количество опорных изображений, идентифицированных в списке 0) меньше или равно num_ref_idx_l0_active_minus1. Например, по аналогии с вышеописанным, NumLongTermCurr может указывать количество опорных изображений в поднаборе RefPicSetLtCurr опорных изображений. В этом примере видеодекодер 30 может вносить в список опорные изображения из поднабора RefPicSetLtCurr опорных изображений, пока количество внесенных опорных изображений из RefPicSetLtCurr не станет равным NumLongTermCurr. Однако, при внесении в начальный список 0 опорных изображений из RefPicSetLtCurr, если общее количество записей в начальном списке 0 равно num_ref_idx_l0_active_minus1, то тогда видеодекодер 30 может прекратить добавление опорных изображений, входящих в поднабор RefPicSetLtCurr опорных изображений даже в том случае, если имеются дополнительные изображения в RefPicSetLtCurr, не внесенные в начальный список 0. В этом случае видеодекодер 30 может завершить построение начального списка 0.
Нижеследующий псевдокод иллюстрирует, каким образом видеодекодер 30 может построить начальный список 0.
В вышеуказанном псевдокоде RefPicList0 может представлять собой начальный список 0. В примерах, где не требуется модификация списка 0, конечный список 0 может совпадать с начальным списком 0. Таким образом, в примерах, где нет необходимости в модификации списка 0, RefPicList0 в вышеуказанном псевдокоде может совпадать с конечным списком 0.
Видеодекодер 30 может строить начальный список 1 аналогичным образом. Однако для построения начального списка 1 видеодекодер 30 сначала может добавить в начальный список 1 опорные изображения из поднабора RefPicSetStCurr1 опорных изображений в начальный список 1, за которым последует поднабор RefPicSetStCurr0 опорных изображений, и за которым следует поднабор RefPicSetLtCurr опорных изображений. Также, по аналогии с вышесказанным, если при внесении в список опорных изображений из любого из поднаборов: RefPicSetStCurr1, RefPicSetStCurr0 и RefPicSetLtCurr опорных изображений общее количество записей в начальном списке 1 будет равно num_ref_idx_l1_active_minus1, то видеодекодер 30 может прекратить добавление опорных изображений даже в том случае, если имеются дополнительные опорные изображения в указанных поднаборах опорных изображений.
Например, для построения начального списка 1 видеодекодер 30 сначала может вносить в список опорные изображения из RefPicSetStCurr1, пока видеодекодер 30 не идентифицирует все опорные изображения в RefPicSetStCurr1, и пока количество записей в начальном списке 1 (например, количество опорных изображений, идентифицированных в списке 1) меньше или равно num_ref_idx_l1_active_minus1. Например, значение NumShortTermCurr1 может указывать, когда видеодекодер 30 завершил внесение в список всех опорных изображений из поднабора RefPicSetStCurr1 опорных изображений. Однако при внесении в список опорных изображений из RefPicSetStCurr1 если общее количество записей в начальном списке 1 равно num_ref_idx_l1_active_minus1, то тогда видеодекодер 30 может прекратить добавление опорных изображений, входящих в поднабор RefPicSetStCurr1 опорных изображений даже в том случае, если имеются дополнительные изображения в RefPicSetStCurr1, которые не были внесены в начальный список 1. В этом случае видеодекодер 30 может завершить построение начального списка 1.
После того, как видеодекодер 30 внес в список все опорные изображения из поднабора RefPicSetStCurr1 опорных изображений, и общее количество записей в начальном списке меньше, чем num_ref_idx_l1_active_minus1, видеодекодер 30 может затем вносить в список опорные изображения из RefPicSetStCurr0, пока видеодекодер 30 не перечислит все опорные изображения из RefPicSetStCurr0, и пока количество записей в начальном списке 1 (например, количество опорных изображений, идентифицированных в списке 1) меньше или равно num_ref_idx_l1_active_minus1. Например, по аналои с вышеописанным, значение NumShortTermCurr0 может указывать, когда видеодекодер 30 завершит внесение в список всех опорных изображений из поднабора RefPicSetStCurr0 опорных изображений. Однако при внесении в начальный список 1 опорных изображений из RefPicSetStCurr0, если общей количество записей в начальном списке 1 равно num_ref_idx_l1_active_minus1, то тогда видеодекодер 30 может прекратить добавление опорных изображений из поднабора RefPicSetStCurr0 опорных изображений даже в том случае, если имеются дополнительные изображения в RefPicSetStCurr0, которые не вошли в начальный список 1. В этом случае видеодекодер 30 может завершить построение начального списка 1.
После того, как видеодекодер 30 внес в список все опорные изображения из поднабора RefPicSetStCurr0 опорных изображений, и общее количество записей в начальном списке 1 меньше, чем num_ref_idx_l1_active_minus1, видеодекодер 30 может затем вносить в список опорные изображения RefPicSetLtCurr, пока видеодекодер 30 не внесет все опорные изображения из RefPicSetLtCurr, и пока количество записей в начальном списке 1 (например, количество опорных изображений, идентифицированных в списке 1) меньше или равно num_ref_idx_l1_active_minus1. Например, по аналогии с вышеописанным, значение NumLongTermCurr может указать, когда видеодекодер 30 завершил внесение в список всех опорных изображений из поднабора RefPicSetLtCurr опорных изображений. Однако, при внесении в список опорных изображений из поднабора RefPicSetLtCurr, если общее количество записей в начальном списке 1 равно num_ref_idx_l1_active_minus1, то тогда видеодекодер 30 может прекратить добавление опорных изображений из поднабора RefPicSetLtCurr опорных изображений даже в том случае, если в RefPicSetLtCurr имеются дополнительные изображения, не вошедшие в начальный список 1. В этом случае видеодекодер 30 может завершить построение начального списка 1.
Нижеследующий псевдокод иллюстрирует, каким образом видеодекодер 30 может построить начальный список 1.
В вышеуказанном псевдокоде RefPicList1 может быть начальным списком 1. В примерах, где модификация списка 1 не нужна, конечный список 1 может совпадать с начальным списком 1. Таким образом, в примерах, где необходимость модификации списка 1 отсутствует, RefPicList1 в вышеуказанном псевдокоде может стать конечным списком 1.
Вышеописанное является одном из примеров того, каким образом видеодекодер 30 может построить конечный список 0 и конечный список 1, когда необходимость в модификации списка опорных изображений отсутствует. В других примерах видеодекодер 30 может добавлять поднаборы опорных изображений в порядке, отличном от вышеописанного. В ряде других примеров видеодекодер 30 может добавлять поднаборы опорных изображений, отличные от вышеописанных.
Хотя в предыдущих примерах описаны методики для построения списков опорных изображений, выполняемого видеодекодером 30, раскрытые здесь аспекты не являются ограничениями, то есть, видеоэнкодер 20 может реализовать аналогичные методики для построения списков опорных изображений. Однако видеоэнкодеру 20 нет необходимости формировать списки опорных изображения таким же образом, как это делает видеодекодер 30.
Соответственно, видеокодер (например, видеоэнкодер 20 или видеодекодер 30) может быть сконфигурирован для кодирования (например, энкодирования или декодирования) информации, указывающей на то, какие опорные изображения относятся к списку опорных изображений. Как было описано выше, набор опорных изображений идентифицируют опорные изображения, которые можно потенциально использовать для межкадрового предсказания текущего изображения, а также можно потенциально использовать для межкадрового предсказания одного или нескольких изображений, следующих за текущим изображением в порядке декодирования.
Видеокодер также может быть сконфигурирован для построения множества поднаборов опорных изображений, каждое из которых идентифицирует нуль или несколько опорных изображений. Например, видеокодер может построить по меньшей мере поднаборы RefPicSetStCurr0, RefPicSetStCurr1 и RefPicSetLtCurr опорных изображений. Видеокодер может построить дополнительные поднаборы опорных изображений, например, вышеописанные поднаборы.
Затем видеокодер может добавлять опорные изображения из первого поднабора опорных изображений, за которыми добавлять опорные изображения из второго поднабора опорных изображений, и за которыми добавлять опорные изображения из третьего поднабора опорных изображений, в начальный список опорных изображений, пока количество записей в начальном списке опорных изображений не превысит максимальное количество записей, допустимое для списка опорных изображений. Например, видеокодер может вносить в начальный список 0 опорные изображения из поднабора RefPicSetStCurr0 опорных изображений, за которыми может вносить опорные изображения из поднабора RefPicSetStCurr1 опорных изображений, и за которыми вносить опорные изображения из поднабора RefPicSetLtCurr, пока количество записей в начальном списке 0 не превышает num_ref_idx_l0_active_minus1. Опять же, значение num_ref_idx_l0_active_minus1 может указывать максимальное количество записей, допустимое для списка опорных изображений для списка 0.
В некоторых примерах видеокодер может добавлять опорные изображения из первого поднабора опорных изображений в начальный список опорных изображений, пока все опорные изображения в первом поднаборе опорных изображений не войдут в начальный список опорных изображений, или пока количество записей в начальном списке опорных изображений не окажется равным максимальному количеству записей, допустимому для списка опорных изображений. Когда количество записей в начальном списке меньше максимального количества записей, допустимого для списка опорных изображений, и после добавления опорных изображений из первого поднабора опорных изображений, видеокодер может добавлять опорные изображения из второго поднабора опорных изображений в начальный список опорных изображений, пока все опорные изображения из второго поднабора опорных изображений не окажутся в начальном списке опорных изображений, или пока количество записей в начальном списке опорных изображений не окажется равным максимальному количеству записей, допустимому для списка опорных изображений. Когда количество записей в начальном списке опорных изображений меньше максимального количества записей, допустимого для списка опорных изображений, и после добавления опорных изображений из второго поднабора опорных изображений, видеокодер может добавлять опорные изображения из третьего поднабора опорных изображений в начальный список опорных изображений, пока все опорные изображения в третьем поднаборе опорных изображений не попадут в начальный список опорных изображений, или пока количество записей в начальном списке опорных изображений не станет равным максимальному количеству записей, допустимому для списка опорных изображений.
Аналогичным образом видеокодер может построить начальный список 1. Например, видеокодер может добавлять в начальный список 1, опорные изображения из второго поднабора опорных изображений, за которыми последуют опорные изображения из первого поднабора опорных изображений, а за ними опорные изображения из третьего поднабора опорных изображений, пока количество записей в начальном списке 1 опорных изображений не превышает num_ref_idx_l1_active_minus1. Синтаксический элемент num_ref_idx_l1_active_minus1 может определять максимальное количество записей, допустимое для списка 1.
В некоторых примерах, например, когда модификация не требуется, начальный список 0 и начальный список 1 могут совпадать с конечным списком 0 и конечным списком 1 соответственно. Другими словами, видеокодер может построить конечный список 0 и конечный список 1, не модифицируя начальный список 0 и начальный список 1, когда модификация не требуется. В этих случаях после построения начального списка 0 и начального списка 1 видеокодеру нет необходимости выполнять дополнительные шаги, необходимые для построения конечного списка 0 и конечного списка 1 (то есть, списков опорных изображений, которые использует видеокодер для кодирования блока текущего изображения).
Как указано в приведенном выше псевдокоде, видеодекодер 30 может построить начальный список 0, когда cldx меньше или равен num_ref_idx_l0_active_minus1, и может построить начальный список 1, когда cldx меньше или равен num_ref_idx_l1_active_minus1. Это может привести к тому, что видеодекодер 30 построит начальный список 0 и начальный список 1 без незавершенного ввода в списках опорных изображений. Например, в некоторых других методиках видеокодирования видеодекодер, реализующий эти другие методики обработки видео, выполняет построение начального списка 0 и начального списка 1, используя методики, отличные от раскрытых в настоящем изобретении. Для этих других методик видеокодирования, если количество записей в начальном списке 0 и начальном списке 1 было меньше максимально допустимого количество записей, то видеодекодер, реализующий эти другие методики видеокодирования, заполняет остальные места для записей в списке 0 и в списке 1 записью «опорное изображение отсутствует» для незавершенных записей. Незавершенные записи относятся к записям в списке 0 и списке 1 после последней записи, которая идентифицирует опорное изображение, и до последней возможной записи.
В качестве иллюстративного примера, помогающего понять сущность изобретения, рассмотрим случая, когда видеодекодер для упомянутых других методик видеокодирования может построить список 0 с пятью записями, где максимально допустимое количество записей равно десяти. В этом примере видеодекодер для упомянутых других методик видеокодирования заполняет записи с шестой по десятую текстом «опорное изображение отсутствует». В этом примере незавершенными записями являются записи с шестой (например, запись после последней записи, которая идентифицирует опорное изображение) до десятой записи (например, до последней возможной записи, исходя из максимально допустимого количества записей).
Согласно методикам, раскрытым в изобретении, видеодекодер 30 может построить начальный список 0 и начальный список 1 таким образом, что незавершенных записей вообще не будет. Также в тех примерах, где не требуется модификация списка опорных изображений, конечный список 0 и конечный список 1 могут совпадать соответственно с начальным списком 0 и начальным списком 1. Таким образом, в тех случаях, когда не требуется модификация списка опорных изображений, видеодекодер 30 может построить конечный список 0 и конечный список 1 таким образом, чтобы не было незавершенных записей. Даже в том случае, когда требуется модификация списка опорных изображений, эта модификация может не привести к появлению незавершенных записей. Таким образом, даже в тех случаях, когда требуется модификация списка опорных изображений, видеодекодер 30 может построить конечный список 0 и конечный список 1 таким образом, чтобы в нем отсутствовали незавершенные записи.
Например, список 0 и список 1 можно рассматривать как списки с записями, где каждая запись может идентифицировать опорное изображение (например, с помощью значения POC). Другими словами, видеодекодер 30 может идентифицировать опорное изображение с помощью значения POC в каждой записи списка 0 и списка 1. Количество записей в списке 0 и в списке 1 может определяться синтаксическими элементами num_ref_idx_l0_active_minus1 и num_ref_idx_l1_active_minus1 соответственно.
Чтобы исключить наличие незавершенных записей, видеодекодер 30 может многократно вносить в начальный список 0 и в начальный список 1 (например, добавлять или идентифицировать) опорные изображения из поднаборов опорных изображений, пока видеодекодер 30 не определит, какое опорное изображение следует идентифицировать в каждой потенциальной записи начального списка 0 и начального списка 1. Например, как было описано выше, для построения начального списка 0 после добавления опорных изображений из поднаборов RefPicSetStCurr0 и RefPicSetStCurr1 опорных изображений в начальный список 0 видеодекодер 30 может добавить опорные изображения из поднабора RefPicSetLtCurr опорных изображений начальный список 0.
В некоторых примерах после того, как видеодекодер 30 добавил опорные изображения из поднабора RefPicSetLtCurr опорных изображений в начальный список 0, возможно окажется, что общее количество записей в начальном списке 0 меньше максимального количества записей, допустимого для списка 0. Например, в псевдокоде для построения начального списка 0 элемент cldx может указывать количество записей в списке 0. В некоторых примерах после идентификации видеодекодером 30 опорных изображений в RefPicSetLtCurr в начальном списке 0 значение cldx может оказаться меньшим, чем num_ref_idx_l0_active_minus1, где num_ref_idx_l0_active_minus1 задает максимальное количество записей, допустимое для списка 0.
Согласно способам, описанным в настоящем изобретении, после внесения в список опорных изображений из трех поднаборов из числа поднаборов опорных изображений, если количество записей в начальном списке 0 меньше максимально допустимого количества записей, то видеодекодер 30 может многократно добавлять опорные изображения из этих трех поднаборов опорных изображений, пока не будут заполнены все записи в списке 0. Например, после добавления видеодекодером 30 опорных изображений из поднабора RefPicSetLtCurr опорных изображений, когда количество записей в начальном списке 0 меньше максимально допустимого количества записей, видеодекодер 30 может затем повторно внести в список (например, повторно добавить или повторно идентифицировать) опорные изображения из поднабора RefPicSetStCurr0 опорных изображений.
Согласно раскрытым здесь аспектам, когда видеодекодер 30 вносит в список опорные изображения из поднаборов RefPicSetStCurr0, RefPicSetStCurr1 и RefPicSetLtCurr опорных изображений, можно считать, что видеодекодер 30 добавляет опорные изображения из этого множества поднаборов опорных изображений в первый набор записей в списке опорных изображений (например, в списке 0). Например, первый набор записей может представлять собой записи в списке опорных изображений, в котором видеодекодер 30 идентифицировал опорные изображения из поднаборов RefPicSetStCurr0, RefPicSetStCurr1 и RefPicSetLtCurr опорных изображений. Затем, если количество записей в списке опорных изображений меньше максимально допустимого количества записей, то видеодекодер 30 может повторно вносить в список (например, повторно добавлять или повторно идентифицировать) одно или несколько опорных изображений по меньшей мере из одного из поднаборов RefPicSetStCurr0, RefPicSetStCurr1 и RefPicSetLtCurr опорных изображений в записи в списке опорных изображений, которые идут после первого набора записей. Записи после первого набора могут быть записями, которые следуют за первым набором записей, где видеодекодер 30 добавляет уже внесенные в список опорные изображения из одного или нескольких поднаборов RefPicSetStCurr0, RefPicSetStCurr1 и RefPicSetLtCurr опорных изображений, как было описано выше.
Если при многократном добавлении опорных изображений из поднабора RefPicSetStCurr0 опорных изображений общее количество записей в начальном списке 0 равно num_ref_idx_l0_active_minus1, то видеодекодер 30 может прекратить повторное добавление опорных изображений в начальный список 0. В этом случае видеодекодер 30 может завершить построение начального списка 0, и в нем могут отсутствовать незавершенные записи. В противном случае, видеодекодер 30 может многократно добавлять опорные изображения из поднабора RefPicSetStCurr0 опорных изображений, пока не будут внесены все опорные изображения из поднабора RefPicSetStCurr0 опорных изображений.
Если после добавления всех опорных изображений из поднабора RefPicSetStCurr0 опорных изображений количество записей в начальном списке 0 окажется меньшим, чем num_ref_idx_l0_active_minus1, видеодекодер 30 может продолжать добавлять опорные изображения из поднабора RefPicSetStCurr1 опорных изображений таким же образом, как в случае, когда видеодекодер 30 многократно вносит опорные изображения из поднабора RefPicSetStCurr0 опорных изображений. Если после добавления всех опорных изображений из поднабора RefPicSetStCurr1 опорных изображений количество записей в начальном списке 0 окажется меньшим, чем num_ref_idx_l0_active_minus1, то видеодекодер 30 может тогда многократно добавлять опорные изображения из поднабора RefPicSetLtCurr опорных изображений таким же образом, как в том случае, когда видеодекодер 30 многократно вносил опорные изображения из поднаборов RefPicSetStCurr0 и RefPicSetStCurr1 опорных изображений. Видеодекодер 30 будет многократно добавлять опорные изображения из упомянутых поднаборов опорных изображений, пока количество записей в начальном списке 0 не станет равным максимальному количеству записей, допустимому для списка 0 (то есть, не станет равным num_ref_idx_l0_active_minus1).
Предположим, например, что имеется одно опорное изображение в RefPicSetStCurr0, одно опорное изображение в RefPicSetCurr1 и одно опорное изображение в RefPicSetLtCurr. Также предположим, что num_ref_idx_l0_active_minus1 равно пяти. В этом примере видеодекодер 30 может идентифицировать опорное изображение в RefPicSetStCurr0 в двух записях начального списка 0. Например, видеодекодер 30 может идентифицировать опорное изображение из RefPicSetStCurr0 в первой записи начального списка 0 и вновь идентифицировать опорное изображение из RefPicSetStCurr0 в четвертой записи начального списка 0. В этом примере значение индекса для опорного изображения в RefPicSetStCurr0 может быть представлено как index[0] для первой записи в начальном списке 0 и index[3] для четвертой записи в начальном списке 0. Соответственно, в некоторых примерах одно опорное изображение из одного из поднаборов опорных изображений может быть внесено в список (например, идентифицировано) более одного раза в начальных списках опорных изображений.
Видеодекодер 30 может аналогичным образом построить начальный список 1 таким образом, что в начальном списке 1 незавершенные записи будут отсутствовать. Например, видеодекодер 30 может многократно добавлять опорные изображения из поднаборов RefPicSetStCurr0, RefPicSetStCurr1 и RefPicSetLtCurr опорных изображений в указанном порядке, пока количество записей в начальном списке 1 не станет равным максимальному количеству записей, допустимому для списка 1 (то есть, равным num_ref_idx_l1_active_minus1).
Таким образом, поскольку в вышеуказанном псевдокоде для построения начального списка 0 и начального списка 1 циклы « for (для)» вставлены в цикл «while (когда)», видеодекодер 30 может построить начальный список 0 и начальный список 1 так, что в начальном списке 0 и в начальном списке 1 не будет незавершенных записей (то есть, не будет незавершенных записей после процесса инициализации). В некоторых примерах каждая из записей в начальном списке 0 и начальном списке 1 может идентифицировать опорное изображение из одного поднабора из числа поднаборов опорных изображений. В некоторых примерах возможно, что одно или несколько опорных изображений из одного поднабора из числа поднаборов опорных изображений идентифицируются больше одного раза в конечных списках опорных изображений, но в разных записях и с разными значениями индекса.
Хотя в предыдущих примерах были описаны методики для построения списков опорных изображений без незавершенных записей, реализуемые видеодекодером 30, аспекты настоящего изобретения этим не ограничиваются, то есть, видеоэнкодер 20 может реализовать аналогичные методики для построения списков опорных изображений без незавершенных записей. Однако возможно, что видеоэнкодеру 20 не понадобится выполнять построение списков опорных изображений таким же образом, как это делает видеодекодер 30.
Соответственно, видеокодер (например, видеоэнкодер 20 или видеодекодер 30) могут быть сконфигурированы для кодирования (например, энкодирования или декодирования) информации, указывающей опорные изображения, относящиеся к набору опорных изображений. Как было описано выше, набор опорных изображений идентифицирует опорные изображения, которые потенциально можно использовать для межкадрового предсказания текущего изображения и можно потенциально использовать для межкадрового предсказания одного или нескольких изображений, следующих за текущим изображением в порядке декодирования.
Видеокодер может построить множество поднаборов опорных изображений, каждый из которых идентифицирует нуль или более опорных изображений (например, поднаборы RefPicSetStCurr0, RefPicSetStCurr1 и RefPicSetLtCurr опорных изображений). Видеокодер может внести в первый набор записей списка опорных изображений 9например, идентифицировать или добавить) опорные изображения из множества поднаборов опорных изображений. Видеокодер может определить, равно ли количество записей в списке опорных изображений максимальному количеству записей, допустимому для данного списка опорных изображений.
Когда количество записей в списке опорных изображений не равно максимальному количеству записей, допустимому для списка опорных изображений, видеокодер может многократно добавлять (например, многократно идентифицировать) одно или несколько опорных изображений по меньшей мере из одного поднабора опорных изображений в записи списка опорных изображений, которые следуют за первым набором записей, пока количество записей в списке опорных изображений не станет равным максимальному количеству записей, допустимому для списка опорных изображений. Затем видеокодер может закодировать текущее изображение на основе построенного списка опорных изображений.
Как было описано выше, в ряде примеров видеоэнкодер 20 может сообщать о синтаксических элементах, которые указывают видеодекодеру 30 на необходимость модификации начального списка или списков опорных изображений. Например, видеодекодер 30 может построить начальный список ил списки опорных изображений вышеописанным образом. Затем в некоторых случаях видеодекодер 30 может декодировать синтаксические элементы из кодированного битового потока, которые дают указание видеодекодеру 30 модифицировать начальный список или списки опорных изображений для построения конечного списка или списков опорных изображений. В общем случае при выполнении модификации видеодекодер 30 может отобразить одно или несколько изображений, идентифицированных в одном или нескольких поднаборах из упомянутого множества поднаборов опорных изображений, в записи одного из списков опорных изображений после инициализации списка опорных изображений.
Например, после построения видеодекодером 30 начального списка или списков опорных изображений вышеописанным образом видеодекодер 30 может модифицировать по меньшей мере одну из записей в одном из начальных списков опорных изображений таким образом, как это указано в кодированном битовом потоке. Например, видеоэнкодер 20 в качестве части синтаксических элементов модификации может указать, какое изображение из одного поднабора из множества поднаборов опорных изображений следует идентифицировать в записи списка опорных изображений, даже если эта запись из списка опорных изображений возможно уже идентифицирует опорное изображение в качестве части процесса инициализации. В некоторых примерах описанные здесь методики модификации списков опорных изображений позволяют выполнить гибкую модификацию. Например, видеодекодер 30 может идентифицировать в одном или обоих списках опорных изображений то опорное изображение, которое не находится в начальных списках опорных изображений.
Используемое в данном изобретении выражение «модифицированный список опорных изображений» относится к списку опорных изображений после модификации начального списка опорных изображений. Модифицированный список опорных изображений может быть конечным списком опорных изображений. Количество записей в модифицированном списке опорных изображений составляет num_ref_idx_l0_active_minus1 + 1 для списка 0 и num_ref_idx_l1_active_minus1+1 для списка 1. Опорное изображение может появиться с более чем одним индексом (например, запись) в модифицированных списках опорных изображений: в списке 0 и в списке 1.
Чтобы обеспечить модификацию списка опорных изображений, видеоэнкодер 20 может в качестве сигнализации передать следующие синтаксические элементы, представленные в Таблице 6.
Таблица 6Синтаксис модификации списка опорных изображений
<img file="00000013.tif" he="99" wi="126" img-content="undefined" img-format="tif" />
Синтаксические элементы modification_of_ref_pic_idc, short_term_ref_pic_set_idx и long_term_ref_pic_set_idx могут задавать изменения в начальных списках опорных изображений, что позволяет получить списки опорных изображений, подлежащие использованию для декодирования данного слайса.
Элемент ref_pic_list_modification_flag_10, равный 1 может задать присутствие синтаксического элемента modification_of_ref_pic_idc для задания списка 0 опорных изображений, а элемент ref_pic_list_modification_flag_10, равный 0, задает отсутствие этого синтаксического элемента.
Когда ref_pic_list_modification_flag_10 равен 1, то количество раз, когда элемент modification_of_ref_pic_idc не равно 3, из чего следует, что элемент ref_pic_list_modification_flag_10 не превысит num_ref_idx_l0_active_minus1 + 1.
Элемент ref_pic_list_modification_flag_l1, равный 1 может задать наличие синтаксического элемента modification_of_ref_pic_idc для задания списка 1 опорных изображений. Элемент ref_pic_list_modification_flag_l1, равный 0, может задать отсутствие этого синтаксического элемента.
Когда элмент ref_pic_list_modification_flag_l1 равен 1, то количество раз, когда элемент modification_of_ref_pic_idc не равен 3, из чего следует, что элемент ref_pic_list_modification_flag_l1 не превысит num_ref_idx_l1_active_minus1 + 1.
Элемент modification_of_ref_pic_idc вместе с элементом short_term_ref_pic_set_idx или элементом long_term_ref_pic_set_idx могут задать опорные изображения, отображение которых следует изменить. Значения элемента modification_of_ref_pic_idc заданы в Таблице 7. Значение первого элемента modification_of_ref_pic_idc, который следует сразу после элемента ref_pic_list_modification_flag_10 или элемента ref_pic_list_modification_flag_l1, может быть не равно 3.
Элемент ref_pic_set_idx задает индекс для RefPicSetStCurr0, RefPicSetStCurr1 или RefPicSetLtCurr опорного изображения, перемещаемого к текущему индексу в списке опорных изображений. Значение ref_pic_set_idx может находиться в диапазоне от 0 до max_num_ref_frames включительно.
Таблица 7Операции modification_of_ref_pic_idc для модификации списков опорных изображений
modification_of_ref_pic_idc
Заданная модификация
0
Для списка 0:ref_pic_set_idx присутствует и соответствует индексу для RefPicSetStCurr0; Для списка 1: ref_pic_set_idx присутствует и соответствует индексу RefPicSetStCurr1
1
Для списка 0:ref_pic_set_idx присутствует и соответствует индексу для RefPicSetStCurr1; Для списка 1: ref_pic_set_idx присутствует и соответствует индексу RefPicSetStCurr0
2
ref_pic_set_idx присутствует и соответствует индексу для RefPicSetLtCurr
3
ref_pic_idx отсутствует и цикл для модификации начального списка опорных изображений заканчивается
Для модификации списка опорных изображений, когда ref_pic_list_modification_flag_l0 равен 1, видеодекодер 30 может модифицировать начальный список 0 опорных изображений (то есть, начальный список 0), а когда ref_pic_list_modification_flag_l1 равен 1, видеодекодер 30 может модифицировать начальный список 1 опорных изображений (то есть, начальный список 1). Для облегчения понимания операции модификации списка опорных изображений положим, что переменная refldxL0 представляет собой индекс для начального списка 0, а переменная refldxL1 представляет индекс для начального списка 1. Другими словами, refldxL0 может идентифицировать запись начального списка 0 (то есть, индекс для начального списка 0 идентифицирует запись начального списка 0), а refldxL1 может идентифицировать запись начального списка 1. Переменные refldxL0 и refldxL1 изначально могут быть установлены равными 0.
Видеодекодер 30 может обрабатывать синтаксические элементы для modification_of_ref_pic_idc в процессе появления синтаксических элементов в битовом потоке. Например, если видеоэнкодер 20 сигнализирует о том, что для начального списка 0 требуется модификация, то тогда видеодекодер 30 может переработать порядок, в котором видеоэнкодер 20 передает синтаксические элементы modification_of_ref_pic_idc для модификации начального списка 0. Аналогичным образом, если видеоэнкодер 20 сообщает о необходимости модификации начального списка 1 опорных изображений, то тогда видеодекодер 30 может переработать порядок, в котором видеоэнкодер 20 передает синтаксические элементы modification_of_ref_pic_idc для модификации начального списка 1.
Синтаксический элемент modification_of_ref_pic_idc может принимать значения 0, 1, 2 или 3, как показано в Таблице 7. Если значение синтаксического элемента modification_of_ref_pic_idc равно 3, то тогда видеодекодер 30 может прекратить модификацию начального списка опорных изображений. В противном случае видеодекодер 30 может поддерживать модификацию начального списка опорных изображений, пока значение синтаксического элемента modification_of_ref_pic_idc не станет равным 3. Например, видеоэнкодер 20 может сообщить множество значений для синтаксического элемента modification_of_ref_pic_idc, а видеодекодер 30 может обработать каждое из упомянутых значений в том порядке, в каком эти значения присутствуют в кодированном битовом потоке. Когда видеодекодер 30 обрабатывает значение синтаксического элемента modification_of_ref_pic_idc, равное 3, видеодекодер 30 может определить, что дальнейшая модификация не требуется.
Значение синтаксического элемента modification_of_ref_pic_idc, которое иногда отличается от 3 (то есть, равно 0, 1, или 2) может указывать, исходя из какого поднабора опорных изображений, видеодекодер 30 должен идентифицировать опорное изображение, подлежащее внесению (например, добавлению) в ткущую запись списка опорных изображений. Как было описано выше, текущая запись списка опорных изображений может быть идентифицирована с помощью значения refldxLX, где LX - это либо список 0, либо список 1. Например, если видеодекодер 30 модифицирует в данный момент начальный список 0, и синтаксический элемент modification_of_ref_pic_idc равен 0, то тогда согласно Таблице 7 видеодекодер 30 может определить, какое опорное изображение из поднабора RefPicSetStCurr0 должно быть идентифицировано в текущей записи списка опорных изображений, на основе значения ref_pic_set_idx. Если видеодекодер 30 модифицирует в данный момент начальный список 1, и элемент modification_of_ref_pic_idc равен 0, то тогда согласно Таблице 7, видеодекодер 30 может определить, какое опорное изображение из поднабора RefPicSetStCurrl должно быть идентифицировано в текущей записи списка опорных изображений, на основе значения ref_pic_set_idx. Например, переменная curRefPicSet может определить, какой поднабор опорных изображений должен использовать видеодекодер 30 для модификации начального списка 0 или начального списка 1.
Например, если modification_of_ref_pic_idc равен 0, и видеодекодер 30 в данный момент модифицирует начальный список 0, то тогда curRefPicSet равен поднабору RefPicSetStCurr0 опорных изображений. Если modification_of_ref_pic_idx равен 0, и видеодекодер 30 в данный момент модифицирует начальный список 1, то тогда curRefPicSet равен поднабору RefPicSetStCurrl опорных изображений.
Если видеодекодер 30 в данный момент модифицирует начальный список 0, и modification_of_ref_pic_idc равен 1, то тогда согласно Таблице 7 видеодекодер 30 может определить, какое опорное изображение из поднабора RefPicSetStCurr1 следует идентифицировать в текущей записи списка опорных изображений, на основе значения ref_pic_set_idx. Если видеодекодер 30 в данный момент модифицирует начальный список 1 и modification_of_ref_pic_idc равен 1, то тогда согласно Таблице 7 видеодекодер 30 может определить, какое опорное изображение из поднабора RefPicSetStCurr0 следует идентифицировать в текущей записи списка опорных изображений, на основе значения ref_pic_set_idx.
В этом случае, если modification_of_ref_pic_idc равен 1, и видеодекодер 30 в данный момент модифицирует начальный список 0, то тогда curRefPicSet равен поднабору RefPicSetStCurr1 опорных изображений. Если modification_of_ref_pic_idx равен 1, и видеодекодер 30 в данный момент модифицирует начальный список 1, то тогда curRefPicSet равен поднабору RefPicSetStCurr0 опорных изображений.
Если видеодекодер 30 в данный момент модифицирует начальный список 0 или начальный список 1, и modification_of_ref_pic_idc равен 2, то тогда согласно Таблице 7 видеодекодер 30 может определить, какое опорное изображение из RefPicSetLtCurr следует идентифицировать в текущей записи списка опорных изображений, на основе значения ref_pic_set_idx. В этом примере, если modification_of_ref_pic_idc равен 2, и видеодекодер 30 модифицирует в данный момент начальный список 0 или начальный список 1, то тогда curRefPicSet равен поднабору RefPicSetLtCurr опорных изображений.
Как было описано выше, синтаксический элемент ref_pic_set_idx может указывать индекс для одного поднабора из множества поднаборов опорных изображений. Другими словами, синтаксический элемент ref_pic_set_idx может указать видеодекодеру 30 запись из одного поднабора из множества поднаборов опорных изображений. Видеодекодер 30 может определить опорное изображение, идентифицированное в указанной записи одного поднабора из множества поднаборов опорных изображений, в качестве опорного изображения, которое должно быть идентифицировано в текущем индексе начального списка 0 или начального списка 1.
Переменная curRefPicPoc может быть равна PicOrderCnt(curRefPicSet[ref_pic_set_idx]). Таким образом, значение curRefPicPoc может представлять собой значение POC опорного изображения, идентифицированного в записи ref_pic_set_idx набора curRefPicSet. Как было описано выше, curRefPicSet может быть равен RefPicSetStCurr0, RefPicSetStCurr1 или RefPicSetLtCurr в зависимости от значения синтаксического элемента modification_of_ref_pic_idc и в зависимости от того, модифицирует ли видеодекодер 30 начальный список 0 или начальный список 1.
Видеодекодер 30 может реализовать следующий псевдокод для модификации списка опорных изображений. Например, в следующем псевдокоде видеодекодер 30 может идентифицировать изображение со значением POC, равным curRefPicPoc, в записи начального списка опорных изображений. Переменная refldxLX указывает позицию индекса для записи в начальном списке опорных изображений. Например, когда видеодекодер 30 модифицирует начальный список 0, refldxLX может быть равным refldxL0, а когда видеодекодер 30 модифицирует начальный список 1, refldxLX может быть равен refldxLl.
После идентификации видеодекодером 30 опорного изображения со значением POC, равным curRefPicPOC в начальном списке опорных изображений (то есть, в начальном списке 0 или начальном списке 1), видеодекодер 30 может сместить положение других оставшихся изображений в сторону более поздних изображений в списке. Например, видеодекодер 30 может переместить опорные изображения, идентифицированные в начальном списке опорных изображений в записях, следующих за текущей записью, к следующей записи для построения модифицированного списка опорных изображений. Предположим в иллюстративных целях, что текущей записью в начальном списке опорных изображений является третья запись с индексом [2]. Видеодекодер 30 может переместить это опорное изображение, идентифицированное в данный момент в третьей записи с индексом [2], в следующую запись (например, четвертую запись с индексом [3]). Видеодекодер 30 может переместить опорное изображение, идентифицированное в данный момент в четвертой записи с индексом [3] на пятую запись с индексом [4]. В некоторых примерах видеодекодер 30 может начать с последней записи в начальном списке опорных изображений и переместить данное опорное изображение, идентифицированное в этой записи, в новую временную запись. Затем переместить опорное изображение, идентифицированное во второй записи по отношении к последней записи, в последнюю запись и так далее, пока видеодекодер 30 не достигнет текущей записи.
Затем видеодекодер 30 может увеличить на единицу значение переменной refldxLX. В этом псевдокоде длина RefPicListX (то есть, RefPicList0 или RefPicList1) временно установлена на один элемент больше длины, необходимой для конечного списка опорных изображений. Например, как было описано выше, видеодекодер 30 может начать с последней записи в начальном списке, перемесить эту последнюю запись во временную запись, переместить вторую по отношению к последней записи в последнюю запись и т.д. для модификации начального списка опорных изображений. После выполнения данного псевдокода видеодекодер 30 может сохранить только те записи в индексе от 0 до num_ref_idx_lX_active_minus1, где num_ref_idx_lX_active_minus1 равно num_ref_idx_l0_active_minus1 для списка 0 и num_ref_idx_l1_active_minus1 для списка 1.
В вышеуказанном псевдокоде RefPicListX относится либо к RefPicList0 (то есть, к конечному списку 0), либо к RefPicList1 (то есть, к конечному списку 1) в зависимости от того, модифицирует ли видеодекодер 30 начальный список 0 или начальный список 1. Элемент num_ref_idx_lX_active_minus1 относится либо к num_ref_idx_l0_active_minus1, либо к num_ref_idx_l1_active_minus1, в зависимости от того, модифицирует ли видеодекодер 30 начальный список 0 или начальный список 1.
В вышеописанных методиках раскрыт примерный способ, используя который видеодекодер 30 может модифицировать начальный список опорных изображений. В процессе кодирования видеоэнкодеру 20 также может понадобиться декодировать кодированное изображение в целях кодирования последовательных изображений. Соответственно, в некоторых примерах видеоэнкодер 20 также может быть сконфигурирован для построения начальных списков опорных изображений и модификации начальных списков опорных изображений вышеописанным образом. Однако бывает, что видеоэнкодеру 20 не нужно модифицировать начальный список или списки опорных изображений в каждом случае. В некоторых случаях видеодекодер 30 может выполнять лишь функцию кодера, который модифицирует начальный список опорных изображений, используя вышеописанные методики.
Соответственно, в некоторых примерах видеокодер (например, видеоэнкодер 20 или видеодекодер 30) может выполнить построение начального списка опорных изображений (например, начального списка 0 или начального списка 1), используя вышеописанные методики. Видеокодер может определить, требуется ли модификация списка опорных изображений, на основе закодированных синтаксических элементов в кодированном битовом потоке. При необходимости выполнения модификации списка опорных изображений видеокодер может модифицировать начальный список опорных изображений.
Например, когда необходима модификация списка опорных изображений, видеокодер может идентифицировать опорное изображение по меньшей мере в одном из построенных поднаборов опорных изображений. Видеокодер может внести (например, добавить) идентифицированный поднабор опорных изображений в текущую запись начального списка опорных изображений для построения модифицированного списка опорных изображений. Затем видеокодер может закодировать (например, закодировать или декодировать) текущее изображение на основе модифицированного списка опорных изображений.
В одном примере видеокодер может построить поднаборы RefPicSetStCurr0, RefPicSetStCurr1 и RefPicSetLtCurr опорных изображений. Для идентификации опорного изображения по меньшей мере в одном из этих поднаборов опорных изображений видеокодер может определить индекс по меньшей мере для одного из этих поднаборов опорных изображений. Затем видеокодер может определить опорное изображение, идентифицированное по записи по меньшей мере одного из указанных поднаборов опорных изображений на основе указанного определенного индекса.
Например, видеокодер может закодировать (например, энкодировать или декодировать) первый синтаксический элемент, такой как синтаксический элемент modification_of_ref_pic_idc, с помощью которого видеокодер идентифицирует один из поднаборов опорных изображений (например, один из поднаборов RefPicSetStCurr0, RefPicSetStCurr1 и RefPicSetLtCurr опорных изображений). Видеокодер может закодировать второй синтаксический элемент, такой как синтаксический элемент ref_pic_set_idx, который указывает индекс для идентифицированного поднабора опорных изображений (например, один из поднаборов RefPicSetStCurr0, RefPicSetStCurr1 и RefPicSetLtCurr опорных изображений).
В некоторых примерах видеокодер может быть дополнительно сконфигурирован для перемещения опорных изображений в начальном списке опорных изображений. Например, видеодекодер может перемещать опорные изображения, идентифицированные в начальном списке опорных изображений в записях, следующих за текущей записью до следующей записи в модифицированном списке опорных изображений.
В предыдущих примерах был описан способ, используя который видеоэнкодер 20 и видеодекодер 30 могут получить набор опорных изображений, а также примерные методики для построения списков опорных изображений, когда нет необходимости в модификации, и когда модификация необходима. Однако методики, раскрытые в данном описании, не следует рассматривать как ограничение. В некоторых примерах раскрытые здесь методики могут быть предназначены для управления буфером декодированных изображений (DPB). Буфер DPB может представлять собой буфер, где хранятся декодированные изображения.
Как видеоэнкодер 20, так и видеодекодер 30 могут включать в себя соответствующие буферы DPB. Например, в качестве части процесса кодирования видеоэнкодер 20 может декодировать текущее изображение, запоминать декодированное изображение в буфере DPB видеоэнкодера 20 и использовать декодированное изображение, запомненное в буфере DPB, для межкадрового предсказания следующего изображения. Аналогичным образом, как часть процесса декодирования, видеодекодер 30 может декодировать текущее изображение и запоминать декодированное изображение в буфере DPB видеодекодера 30. Видеодекодер 30 может затем использовать декодированное изображение для межкадрового предсказания следующего изображения.
В некоторых примерах в буфере DPB для видеоэнкодера 20 или видеодекодера 30 могут храниться декодированные изображения для переупорядочивания или задержки вывода. Например, видеодекодер 30 может определить, что декодированные изображения следует переупорядочить для вывода, или что вывод декодированного изображения следует задержать. В этих примерах в буфере DPB видеодекодера 30 могут храниться декодированные изображения для переупорядочивания вывода или задержки вывода.
Раскрытые здесь методики управления буфером DPB могут относиться к способу, используя который буфер DPB выводит и удаляет декодированные изображения. Синтаксический элемент output_flag может воздействовать на процесс вывода и удаления декодированного изображения и может быть определен как часть семантики блока сетевого абстрактного уровня (NAL). Блок NAL может быть определен в виде синтаксической структуры, включающей в себя указание типа данных для отслеживания и байты, которые включают в себя указанные данные в необработанной полезной нагрузки (RBSP), вперемежку, когда это необходимо, с байтами предотвращения эмуляции. Полезная нагрузка RBSP может представлять собой синтаксическую структуру, включающую в себя целое число байт, которые встроены в блок NAL. RBSP может быть либо пустой, либо иметь вид цепочки бит данных, которые включают в себя синтаксические элементы, за которыми следует бит прекращения RBSP, а за ним нуль или более следующих друг за другом бит, равных 0. Синтаксис блока NAL определен в Таблице 8.
Таблица 8Синтаксис блока NAL
<img file="00000015.tif" he="119" wi="143" img-content="undefined" img-format="tif" />
В Таблице 8 флаг output_flag может воздействовать на процесс вывода и удаления декодированного изображения, как более подробно описано ниже. Для любого изображения, если output_flag равен 1, то данное изображение предназначено для вывода. В противном случае это изображение никогда не выводится. В раскрытых здесь методиках переменная OutputFlag соответствует синтаксическому элементу output_flag.
В некоторых примерах любой кодированный блок NAL слайса кодированного изображения текущего блока доступа может отличаться от любого кодированного блока NAL кодированного изображения предыдущего блока доступа одним или несколькими следующими аспектами. Например, значения pic_parameter_set_id могут быть разными, значения nal_ref_idc могут быть разными, причем одно из значений nal_ref_idc равно 0. Значения pic_order_cnt_lsb могут быть разными. Также разными могут быть значения IdrPicFlag. Флаг IdrPicFlag может быть равен 1 для обоих, и значения idr_pic_id также могут быть разными.
В раскрытых здесь методиках блок доступа можно определить как набор блоков NAL, которые следуют друг за другом в порядке декодирования и содержат одно кодированное изображение. Вдобавок к этому кодированному изображению одно дополнительное кодированное изображение или другие блоки NAL могут не содержать слайсы кодированного изображения. В некоторых примерах декодирование блока доступа может привести к созданию декодированного изображения. Кодированное изображение может представлять собой кодированное представление изображения, используемого в процессе декодирования.
Как показано в Таблице 4, синтаксис заголовка слайса может включать в себя синтаксический элемент pic_parameter_set_id pic, синтаксический элемент pic_order_cnt_lsb, синтаксический элемент IdrPicFlag и синтаксический элемент idr_pic_id. Как показано в Таблице 8, синтаксис блока NAL может включать в себя синтаксический элемент nal_ref_idc.
В иллюстративных целях методики управления буфером DPB описываются здесь, исходя из перспективы применения гипотетического опорного декодера (HRD). Декодер HRD можно определить как модель гипотетического декодера, которая задает ограничения на изменяемость соответствующих потоков блоков NAL или соответствующих байтовых потоков, которые могут создаваться в процессе кодирования. Однако, в соответствии с раскрытыми здесь методиками видеодекодер 30 может реализовать методики управления буфером DPB, а в некоторых случаях методики управления буфером DPB также могут быть реализованы видеоэнкодером 20.
Модель HDR может определить буфер кодированных изображений (CPB), процесс мгновенного декодирования и буфер декодированных изображений (DPB). Буфер CPB может быть аналогичен буферу CPB моделей HDR, определенному в других предшествующих стандартах (то есть, в буфере CPB могут храниться кодированные изображения). Раскрытые здесь методики предназначены для операций буфера DPB, которые отличаются от операций в других стандартах. Опять же, следует понимать, что видеодекодер 30 и возможно видеоэнкодер 20 могут реализовать операции буфера DPB, как описано ниже.
В общем случае, раскрытые здесь методики относятся к выводу и удалению декодированных изображений в буфере DPB. В этом контексте вывод декодированного изображения означает вывод декодированного изображения с целью его отображения, запоминания или с другими целями. Однако декодированное изображение, которое выводится, не обязательно будет удалено из буфера DPB. Например, видеодекодер 30 может не удалять декодированное изображение, выводимое из буфера DPB, поскольку видеодекодеру 30 возможно не понадобиться использовать это декодированное изображение в качестве опорного изображения для межкадрового предсказания следующего изображения. Удаление декодированного изображения в этом контексте означает удаление декодированного изображения из буфера DPB.
Например, видеодекодер 30 может запомнить декодированные изображения в буфере DPB видеодекодера 30 в том порядке, в котором выполняется декодирование изображений. Однако, порядок декодирования этих изображений может не совпадать с порядком их вывода. Например, могут быть изображения, следующие за текущим изображением в порядке декодирования, которые необходимо вывести раньше текущее изображение. Соответственно, в некоторых примерах видеодекодер 30 может выполнить переупорядочивание, используя которое видеодекодер 30 переупорядочивает изображения в буфере DPB, которые упорядочены в порядке декодирования, формируя порядок вывода. Затем видеодекодер 30 может вывести декодированные изображения в порядке их вывода. Видеодекодер 30 может также удалить изображения из буфера декодированных изображении, если это изображение выводить нет необходимости (то есть, оно уже было выедено или оно не предназначено для вывода) и если с ним не надо выполнять межкадровое предсказание (то есть, его нет необходимости использовать в качестве опорного изображения для межкадрового предсказания).
В раскрытых здесь методиках видеодекодер 30 может удалить декодированное изображение из буфера DPB, если декодированное изображение было выведено или его не предполагалось выводить, и если декодированное изображение не идентифицировано в полученном наборе опорных изображений, что эквивалентно отсутствию необходимости межкадрового предсказания (то есть, больше нет необходимости его использования в качестве опорного изображения для межкадрового предсказания). Опять же, как было описано выше, набор опорных изображений может идентифицировать опорные изображения, которые можно потенциально использовать для межкадрового предсказания текущего изображения, и которые можно потенциально использовать для межкадрового предсказания одного или нескольких изображений, следующих за текущим изображением в порядке декодирования. Согласно раскрытым здесь методикам, если декодированное изображение не идентифицировано в полученном наборе опорных изображений, то тогда это декодированное изображение может не понадобиться в качестве опорного изображения для межкадрового предсказания (например, декодирование) текущего изображения и одного или нескольких изображений, следующих за текущим изображением в порядке декодирования. Таким образом, указанное декодированное изображение можно удалить из буфера DPB, если нет необходимости вывода этого декодированного изображения, поскольку нет необходимости поддерживать указанное декодированное изображение в буфере DPB, при условии, что это декодированное изображение не будет использоваться для межкадрового предсказания.
Кроме того, в раскрытых здесь методиках видеодекодер 30 может удалить декодированное изображение до декодирования текущего изображения. Например, как было описано выше, видеодекодер 30 может получить набор опорных изображений и построить список (списки) опорных изображений до декодирования текущего изображения. Поскольку видеодекодер 30 может получить набор опорных изображений до декодирования текущего изображения, видеодекодер 30 может быть сконфигурирован для определения того, следует ли удалить декодированное изображение, которое нет необходимости выводить, до декодирования текущего изображения. Например, после получения набора опорных изображений и до декодирования текущего изображения видеодекодер 30 может определить, идентифицировано ли выведенное декодированное изображение или декодированное изображение, которое не предполагается выводить, в наборе опорных изображений. Затем, до декодирования текущего изображения видеодекодер может удалить декодированное изображение, которое не требуется выводить (то есть, уже выведенное или не предполагаемое для вывода), если декодированное изображение не идентифицировано в наборе опорных изображений.
В некоторых примерах видеодекодер 30 может удалить декодированное изображение до декодирования текущего изображения. Однако, видеодекодер 30 может удалить декодированное изображение после построения списка (списков) опорных изображений. Например, видеодекодер 30 может получить набор опорных изображений и может построить списки опорных изображений на основе набора опорных изображений. Затем до декодирования текущего изображения видеодекодер 30 может удалить декодированное изображение. В некоторых примерах видеодекодер 30 может также вывести декодированное изображение после построения списка (списков) опорных изображений.
Здесь описаны технологии удаления декодированных изображений в буфере DPB по меньшей мере согласно двум аспектам. Согласно первому аспекту, видеодекодер 30 может удалять декодированные изображения на основе времени вывода, если эти изображения предполагается выводить. Согласно второму аспекту, видеодекодер 30 может удалять декодированные изображения на основе значений POC, если эти изображения предполагается выводить. Согласно любому из этих аспектов, видеодекодер 30 может удалить декодированные изображения, которые не нуждаются в выводе (то есть, уже выведенные или не предполагаемые для вывода), когда декодированное изображение отсутствует в упомянутом наборе опорных изображений, и до декодирования текущего изображения.
Буфер DPB может включать в себя множество буферов, причем каждый такой буфер может хранить декодированное изображение, подлежащее использованию в качестве опорного изображения, или хранить для его вывода в будущем. Изначально буфер DPB пуст (то есть, наполнение буфера DPB устанавливают равным нулю). В описываемых примерных технологиях удаление декодированных изображений из буфера DPB может произойти перед декодированием текущего изображения, но после того, как видеодекодер 30 проанализирует заголовок первого слайса текущего изображения.
Согласно первому аспекту следующие методики могут быть реализованы сразу в момент tr(n) в следующей последовательности. В этом примере tr(n)- это время удаления из буфера CPB (то есть, время декодирования) блока n доступа, содержащего текущее изображение. Как здесь описано, мгновенная реализация упомянутых методик может означать, что в модели HDR, как предполагается, декодирование изображения происходит мгновенно (то есть, бесконечно быстро), другими словами временной период для декодирования изображения считается равным нулю.
Если текущим изображением является IDR изображение, и это IDR изображение не является первым IDR изображением, и значение pic_width_in_luma_samples или pic_height_in_luma_samples или max_dec_frame_buffering, полученное из активного набора параметров последовательности, отличается от значения pic_width_in_luma_samples или pic_height_in_luma_samples или max_dec_frame_buffering, полученного из набора параметров последовательности, который был активным для предшествующего изображения соответственно, видеодекодер 30 может заключить, что синтаксический элемент no_output_of_prior_pics_flag равен 1 независимо от действительного значения no_output_of_prior_pics_flag. Если текущим изображением является IDR изображение, и когда no_output_of_prior_pics_flag равен 1, или можно заключить, что он равен 1, видеодекодер 30 может очистить все буферы DPB без вывода изображений и может установить наполнение буфера DPB, равным 0.
Как было указано выше в Таблице 1, набор параметров последовательности может включать в себя синтаксические элементы pic_width_in_luma_samples и pic_height_in_luma_samples. Этот набор параметров последовательности также может включать в себя синтаксический элемент max_dec_frame_buffering.Как было указано выше в Таблице 4, синтаксис заголовка слайса может включать в себя синтаксический элемент no_output_of_prior_pics_flag.
r
0
dpb
0,dpb
r
0
dpb
Когда текущее изображение не является IDR изображением, видеодекодер 30 может удалить все изображения (m) в буфере DPB, для которых удовлетворяются следующие условия. Первое условие может состоять в том, что изображение не включено в набор опорных изображений текущего изображения. Второе условие может состоять в том, что данное изображение имеет OutputFlag, равный 0, или его время вывода из буфера DPB меньше или равно времени удаления из буфера CPB текущего изображения. В этом примере время удаления из буфера CPB равно t(n), что относится к случаю выполнения процесса удаления (например, во время до декодирования текущего изображения). Время вывода из буфера DPB декодированного изображения m может быть определено переменной t,(m). Таким образом, время вывода из буфера DPB, будучи меньшим или равным времени удаления из буфера CPB, можно представить как t(m)≤t(n). Операция получения времени вывода из буфера DPB (t,) более подробно определена ниже.
Таким образом, видеодекодер 30 может удалить декодированные изображения из буфера DPB до декодирования изображения на основе времени вывода декодированного изображения, когда декодированное изображение не идентифицировано в наборе опорных изображений. При удалении декодированного изображения из буфера DPB видеодекодер 30 может увеличить на единицу наполнение буфера DPB.
Далее описывается, каким образом видеодекодер 30 может определить время для вывода декодированного изображения (например, время вывода из буфера DPB декодированного изображения), а также описывается, когда видеодекодер может запомнить декодированное изображение в буфере DPB. Как было описано выше, время вывода изображения из буфера DPB может быть решающим фактором для определений того, удалять ли данное изображение из буфера DPB.
Когда видеодекодер 30 декодирует изображение, он запоминает его в буфере DPB и увеличивает на единицу наполнение буфера DPB. Если это изображение имеет OutputFlag, равный 1, то видеодекодер 30 может получить время вывода из буфера DPB для данного изображения на основе следующего уравнения
0,dpb
r
c
t(n)=t(n)+t*dpb_output_delay(n)
В этом уравнении задержка dpb_output_delay(n) может быть задана в сообщении SEI синхронизации изображения, связанном с блоком доступа, который включает в себя данное изображение. Сообщение SEI определено в некоторых стандартах, например, стандарте H.264/AVC.
0,dpb
0,dpb
r
0,dpb
r
0,dpb
Значение t(n) позволяет определить, когда изображение должно быть выведено. Например, если OutputFlag равен 1, а t(n) равно t(n), видеодекодер 30 может вывести данное изображение. В противном случае, если OutputFlag равен 0, то видеодекодер 30 может не выводить данное изображение. В случаях, когда OutputFlag равен 1, и t(n) больше t(n), видеодекодер 30 может вывести данное изображение позже (например, в момент времени t(n)).
В некоторых примерах, когда видеодекодер 30 выводит изображение, он может его обрезать. Например, видеодекодер 30 может использовать прямоугольник для обрезки, заданный в активном наборе параметров последовательности для данного изображения. Методики, используемые для обрезки изображения, общеизвестны и описаны в таких стандартах, как стандарт H.264/AVC.
o,dPb
В некоторых примерах видеодекодер 30 может определить разность между временем вывода из буфера DPB для одного изображения и временем вывода из буфера DPB для изображения, следующего за данным изображением в порядке вывода. Например, когда изображением (m) является изображение, которое выводится видеодекодером 30, и которое не является последним выводимым изображением битового потока, видеодекодер 30 может определить значение Δt(n) как:
o,dpb
o,dpb
n
o,dpb
Δt(n)=t(n)-t(n)
n
o,dpb
В приведенном выше уравнении n указывает изображение, следующее после изображения (n) в порядке вывода и имеет OutputFlag, равный 1. Также в приведенном выше уравнении Δt(n) представляет разность между временем вывода из DPB данного изображения и временем вывода из DPB следующего изображения в порядке вывода.
Согласно второму аспекту для удаления декодированных изображений HDR может реализовать указанные методики мгновенно, когда блок доступа удален из буфера CPB. Опять же, видеодекодер 30 может реализовать удаление декодированных изображений из буфера DPB, причем видеодекодер 30 не обязательно может включать в себя буфер CPB. В общем случае согласно изобретению удаление декодированных изображений выполняется видеодекодером 30, но также может выполняться видеоэнкодером 20. В этих примерах видеодекодер 30 и видеоэнкодер 20 не обязательно должны иметь буфер CPB. Скорее наоборот, буфер CPB описывается как часть модели HDR только в иллюстративных целях.
Как упоминалось выше согласно второму аспекту, касающемуся удаления декодированных изображений, видеодекодер 30 может удалять изображения из буфера DPB перед декодированием текущего изображения, но после анализа заголовка первого слайса текущего изображения. Также, по аналогии с первым аспектом, касающимся удаления декодированных изображений, согласно второму аспекту видеодекодер 30 может выполнять функции, аналогичные функциям, описанным выше в связи с первым аспектом, когда текущее изображение является IDR изображением.
В противном случае, если текущее изображение не является IDR изображением, видеодекодер 30 может очистить (без вывода) буферы DPB, в которых запоминается изображение, помеченное как «не нуждающееся в выводе», и запоминаются изображения, не включенные в набор опорных изображений текущего изображения. Видеодекодер 30 также может уменьшить наполнение буфера DPB на величину, равную количеству буферов, которое очистил видеодекодер 30. При отсутствии пустого буфера (то есть, наполнение буфера DPB равно размеру буфера DPB) видеодекодер 30 может реализовать процесс «выталкивания», описанный ниже. В некоторых примерах при отсутствии пустого буфера видеодекодер 30 может многократно реализовать процесс выталкивания, пока не появится пустой буфер, в котором видеодекодер 30 сможет запомнить текущее декодированное изображение.
Когда текущим изображением является IDR изображение, для которого no_output_of_prior_pics_flag не равен 1 или не считается равным 1, видеодекодер 30 может выполнить следующие операции. Видеодекодер 30 может очистить (без вывода) буферы DPB, в которых хранится изображение, помеченное как «не нуждающееся в выводе», и которое не включено в набор опорных изображений текущего изображения. Видеодекодер 30 может очистить все не пустые буферы в DPB путем многократной активации процесса «выталкивания», и может установить наполнение буфера DPB, равным 0.
Другими словами, когда текущее изображение является IDR изображением, видеодекодер 30 может реализовать методики для очистки всех буферов в DPB. Когда текущее изображение не является IDR изображением, видеодекодер 30 может реализовать методики для перемещения декодированных изображений в свободные буферы для запоминания текущего декодированного изображения.
Например, после декодирования текущего изображения видеодекодер 30 может запомнить это текущее изображение в буфере DPB и увеличить на единицу наполнение буфера DPB. В некоторых примерах, если OutputFlag текущего изображения равен 1, видеодекодер 30 может пометить текущее изображение как «нуждающееся в выводе». В противном случае, если OutputFlag текущего изображения равен 0, то видеодекодер 30 может пометить это текущее изображение как «не нуждающееся в выводе».
Как было описано выше, в некоторых примерах видеодекодер 30 может реализовать процесс выталкивания. В общем случая процесс выталкивания включает в себя вывод декодированных изображений. Например, видеодекодер 30 может реализовать процесс выталкивания, когда текущим изображением является IDR изображение, и no_output_of_prior_pics_flag не равен 1, и его не посчитали равным 1. Видеодекодер 30 может также реализовать процесс выталкивания, если в DPB нет пустого буфера (то есть, наполнение DPB равно размеру DPB), а для запоминания декодированного изображения (не являющегося IDR изображением) необходимо иметь пустой буфер.
В общем случае видеодекодер 30 для реализации процесса выталкивания может выполнить следующие шаги. Сначала видеодекодер 30 может определить изображение, подлежащее выводу. Например, видеодекодер 30 может выбрать изображение, у которого значение PicOrderCnt (POC) меньше, чем у всех изображений в буфере DPB, которые помечены как «нуждающиеся в выводе». Видеодекодер 30 может обрезать выбранное изображение, используя прямоугольник для обрезки, заданный в активном наборе параметров последовательности для данного изображения. Видеодекодер 30 может вывести обрезанное изображение и пометить его как «не нуждающееся в выводе». Видеодекодер 30 может проверить буфер в DPB, в котором запомнено это обрезанное и выведенное изображение. Если данное изображение не включено в набор опорных изображений, то видеодекодер 30 может очистить этот буфер и уменьшить на единицу наполнение буфера DPB.
Хотя вышеуказанные методики управления буфером DPB описаны в контексте видеодекодера 30, в некоторых случаях видеоэнкодер 20 может реализовать аналогичные методики. Однако видеоэнкодер 20, реализующий аналогичные методики, в каждом случае не требуется. В некоторых примерах видеодекодер 30 может реализовать эти методики, а видеоэнкодер 20 может этого не делать.
Таким образом, видеокодер (например, видеоэнкодер 20 или видеодекодер 30) может закодировать информацию, указывающую опорные изображения, относящиеся к набору опорных изображений. Опять же, набор опорных изображений может идентифицировать опорные изображения, которые можно потенциально использовать для межкадрового предсказания текущего изображения и можно потенциально использовать для межкадрового предсказания одного или нескольких изображений, следующих за текущим изображением в порядке декодирования.
Видеокодер может получить набор опорных изображений любым способом, включая приведенные в качестве примера методики, описанные выше. Видеокодер может определить, требуется ли вывод декодированного изображения, запомненного в буфере декодированных изображений, и идентифицировано ли оно в списке опорных изображений. Если декодированное изображение было выведено и не идентифицировано в списке опорных изображений, то видеокодер может удалить декодированное изображение из буфера декодированных изображений. Вслед за удалением декодированного изображения видеокодер может закодировать текущее изображение. Например, видеокодер может построить список (списки) опорных изображений, как было описано выше, и закодировать текущее изображение на основе списка (списков) опорных изображений.
В предыдущих примерах описаны методики, которые может использовать видеоэнкодер 20 и видеодекодер 30 для получения набора опорных изображений, построения списков опорных изображений из списков опорных изображений, когда модификация не требуется, и когда модификация необходима, а также методики для управления буфером декодированных изображений (DPB). Однако аспекты настоящего изобретения этим не ограничены. В некоторых примерах раскрытые здесь методики могут относиться к тому, каким образом видеоэнкодер 20 сигнализирует о том, какие изображения, относящиеся к набору опорных изображений, являются долгосрочными опорными изображениями (или, другими словами, какое изображение относится к набору долгосрочных опорных изображений) и каким образом видеодекодер 30 определяет, какое изображение относится к набору долгосрочных опорных изображений.
Например, Таблица 2 включает в себя синтаксические элементы [num_long_term_ref_pics_pps, и long_term_ref_pic_id_pps[i], являющиеся частью набора параметров изображения. Однако аспекты настоящего изобретения этим не ограничены. В некоторых других примерах набор параметров последовательности (например, Таблица 1) может включать в себя синтаксические элементы num_long_term_ref_pics_pps и long_term_ref_pic_id_pps[i]. В примерах, где набор параметров последовательности включает в себя эти синтаксические элементы, данное описание может относиться к синтаксическим элементам num_long_term_ref_pics_sps и long_term_ref_pic_id_sps[i] во избежание путаницы. В иллюстративных целях эти методики описаны на примерах, где набор параметров последовательности включает в себя указанные синтаксические элементы.
По аналогии с определением num_long_term_ref_pics_pps, синтаксический элемент num_long_term_ref_pics_sps может задавать количество возможных долгосрочных опорных изображений, которые включены в набор параметров последовательности. Значение num_long_term_ref_pics_sps может находиться в диапазоне от 0 до 32 включительно. По аналогии с определением синтаксического элемента long_term_ref_pic_id_pps[i] синтаксический элемент long_term_ref_pic_id_sps[i] может задать идентификационную информацию i-го долгосрочного опорного изображения, включенного в набор параметров последовательности.
В некоторых примерах синтаксический элемент long_term_ref_pic_id_sps[i] может указывать возможные долгосрочные опорные изображения, относящиеся к набору опорных изображений текущего изображения. Возможные долгосрочные опорные изображения - это одно или несколько возможных долгосрочных опорных изображений, которые может использовать видеодекодер 30 для межкадрового предсказания текущего изображения или одного или нескольких изображений, следующих за текущим изображением в порядке декодирования. Другими словами, возможные долгосрочные опорные изображения могут указывать изображения, являющиеся долгосрочными опорными изображениями, которые можно использовать для межкадрового предсказания текущего изображения и использовать для межкадрового предсказания одного или нескольких изображений следующих за текущим изображением в порядке декодирования. В некоторых примерах синтаксический элемент long_term_ref_pic_id_sps[i] может включать в себя значения POC для возможных долгосрочных опорных изображений.
Однако для межкадрового предсказания не обязательно использовать все возможные долгосрочные опорные изображения. Например, не все возможные долгосрочные опорные изображения относятся к набору опорных изображений текущего изображения. Скорее наоборот, к набору опорных изображений относятся нуль, либо несколько возможных долгосрочных опорных изображений.
В методиках, раскрытых в этом описании, видеоэнкодер 20 может передать в качестве сигнализации синтаксический элемент long_term_ref_pic_id в наборе параметров (например, синтаксический элемент long_term_ref_pic_id_sps в наборе параметров последовательности или синтаксический элемент long_term_ref_pic_id_pps в наборе параметров изображения. Видеодекодер 30 может принять синтаксический элемент long_term_ref_pic_id и идентифицировать возможные долгосрочные опорные изображения. Согласно раскрытым здесь методикам видеодекодер 30 кроме того может определить, какие изображения из числа возможных долгосрочных опорных изображений относятся к набору опорных изображений. Например, видеодекодер 30 может быть сконфигурирован для выполнения указанного определения на основе дополнительных синтаксических элементов, преданных видеоэнкодером 20 в качестве сигнализации в кодированном битовом потоке.
Как указано в Таблице 4, видеоэнкодер 20 может в качестве сигнализации передать синтаксическую структуру long_term_ref_pic_set() в заголовке слайса текущего изображения. Синтаксическая структура long_term_ref_pic_set() описана в Таблице 5. Например, синтаксическая структура long_term_ref_pic_set() может включать в себя синтаксические элементы num_long_term_pps_curr и num_long_term_pps_foll. Опять же следует заметить, что, хотя синтаксические элементы num_long_term_pps_curr и num_long_term_pps_foll определены как количество долгосрочных опорных изображений, включенных в набор параметров изображения, в тех примерах, где возможные долгосрочные опорные изображения включены в набор параметров последовательности, эти синтаксические элементы могут определять количество возможных долгосрочных опорных изображений, включенных в набор параметров последовательности. Например, во избежание путаницы синтаксический элемент num_long_term_pps_curr может называться синтаксическим элементом num_long_term_sps_curr, а синтаксический элемент num_long_term_pps_foll может называться синтаксическим элементом num_long_term_sps_curr.
По аналогии с синтаксическим элементом num_long_term_pps_curr синтаксический элемент num_long_term_sps_curr может определять количество всех долгосрочных опорных изображений, чья идентификационная информация включена в упомянутый набор параметров последовательности, в качестве возможных долгосрочных опорных изображений, и которые можно использовать для межкадрового предсказания текущего изображения и одного или нескольких изображений, следующих за текущим изображением в порядке декодирования. По аналогии с синтаксическим элементом num_long_term_pps_foll синтаксический элемент num_long_term_sps_foll может определять количество всех долгосрочных опорных изображений, чья идентификационная информация включена в набор параметров последовательности, в качестве возможных долгосрочных опорных изображений, которые не используют для межкадрового предсказания текущего изображения, но которые можно использовать для межкадрового предсказания одного или нескольких изображений, следующих за текущим изображением в порядке декодирования.
Также синтаксическая структура long_term_ref_pic_set(), переданная в заголовке слайса, может включать в себя синтаксический элемент long_term_ref_pic_set_idx_pps[i]. Опять же, в примерах, где возможные долгосрочные опорные изображения передаются в качестве сигнализации в наборе параметров последовательности, можно считать, что синтаксический элемент long_term_ref_pic_set_idx_pps[i] соответствует синтаксическому элементу long_term_ref_pic_set_idx_sps[i]. По аналогии с синтаксическим элементом long_term_ref_pic_set_idx_pps[i] синтаксический элемент long_term_ref_pic_set_idx_sps[i] может определять индекс (для идентифицирующей информации списка возможных долгосрочных опорных изображений, включенной в упомянутый набор параметров последовательности) для i-го долгосрочного опорного изображения, заимствованного из набора параметров опорного изображения, для набора опорных изображений текущего изображения. Другими словами, синтаксический элемент long_term_ref_pic_set_idx_sps[i] может идентифицировать индекс в списке возможных долгосрочных опорных изображений в наборе параметров последовательности. Исходя из этого индекса, видеодекодер 30 может идентифицировать долгосрочное опорное изображение в возможных долгосрочных опорных изображениях и может определить идентифицированные долгосрочные опорные изображения, относящиеся к набору опорных изображений текущего изображения.
Например, видеодекодер 30 может реализовать следующий псевдокод, аналогичный псевдокоду в Таблице 5, для определения того, какие из возможных долгосрочных опорных изображений относятся к набору опорных изображений текущего изображения.
Таким образом, видеодекодер 30 может декодировать синтаксические элементы, указывающие возможные долгосрочные опорные изображения, которые идентифицированы в наборе параметров. Например, если набор параметров является набором параметров последовательности, то видеодекодер 30 может декодировать синтаксические элементы long_term_ref_pic_id_sps[i], которые указывают возможные долгосрочные опорные изображения, идентифицированные в наборе параметров последовательности. Если набор параметров является набором параметров изображения, то видеодекодер 30 может декодировать синтаксические элементы long_term_ref_pic_id_pps[i], которые указывают долгосрочные опорные изображения, идентифицированные в наборе параметров изображения.
Видеодекодер 30 может также декодировать синтаксические элементы, которые указывают, какие возможные долгосрочные опорные изображения, идентифицированные в наборе параметров, относятся к набору опорных изображений текущего изображения. Например, если набором параметров является набор параметров последовательности, то видеодекодер 30 может декодировать синтаксические элементы num_long_term_sps_curr, num_long_term_sps_foll и long_term_ref_pic_set_idx_sps[i], а, если набором параметров является набор параметров изображения, то видеодекодер 30 может декодировать синтаксические элементы num_long_term_pps_curr, num_long_term_pps_foll и long_term_ref_pic_set_idx_pps[i]. В любом случае видеодекодер 30 может декодировать эти синтаксические элементы из заголовка слайса текущего изображения.
Согласно раскрытым здесь методикам синтаксические элементы long_term_ref_pic_id_sps[i] long_term_ref_pic_id_pps[i] могут рассматриваться в качестве списка значений счетчика очередности изображений (POC) для возможных долгосрочных опорных изображений, относящихся к набору опорных изображений, и могут быть закодированы (то есть, энкодированы или декодированы) как часть набора параметров (например, набора параметров изображения и набора параметров последовательности). Синтаксический элемент long_term_ref_pic_set_idx_sps[i] или long_term_ref_pic_set_idx_pps[i] можно рассматривать в качестве элемента, обеспечивающего значение индекса для списка значений POC для возможных долгосрочных опорных изображений (например, индекс для long_term_ref_pic_id_sps[i] или long_term_ref_pic_id_pps[i]). В некоторых примерах синтаксический элемент long_term_ref_pic_set_idx_sps[i] или long_term_ref_pic_set_idx_pps[i] может кодироваться как часть заголовка слайса текущего изображения.
Выше было описано, каким образом видеоэнкодер 20 и видеодекодер 30 могут соответственно энкодировать или декодировать синтаксические элементы, указывающие, какие изображения относятся к набору долгосрочных опорных изображений текущего изображения. Исходя из этих синтаксических элементов, видеодекодер 30 или видеоэнкодер 20 может определить, какие изображения относятся к набору долгосрочных опорных изображений текущего изображения. После того как видеодекодер 30 и видеоэнкодер 20 определили, какие изображения относятся к набору долгосрочных опорных изображений, видеоэнкодер 20 и видеодекодер 30 могут построить по меньшей мере один поднабор опорных изображений из множества поднаборов опорных изображений и получить набор опорных изображений вышеописанным образом. Например, на основе определения того, какие изображения относятся к упомянутому набору долгосрочных опорных изображений, видеоэнкодер 20 и видеодекодер 30 могут построить поднабор RefPicSetLtCurr опорных изображений, который видеоэнкодер 20 и видеодекодер 30 используют для получения набора опорных изображений.
В некоторых примерах возможно наличие изображений, относящихся к набору долгосрочных опорных изображений, которые не включены в число возможных долгосрочных опорных изображений. Соответственно, возможны дополнительные способы того, каким образом видеоэнкодер 20 и видеодекодер 30 могут определять, какие изображения относятся к набору долгосрочных опорных изображений текущего изображения.
Например, как показано в Таблице 5, синтаксическая структура long_term_ref_pic_set() заголовка слайса включает в себя синтаксический элемент long_term_ref_pic_id_delta_add[i]. Этот синтаксический элемент может задавать идентификацию долгосрочного опорного изображения, например, в виде значений POC i-го долгосрочного опорного изображения, полученного не из набора параметров опорного изображения, но включенного в набор опорных изображений текущего изображения. Опять же в примерах, где возможные долгосрочные опорные изображения идентифицированы в наборе параметров последовательности, синтаксический элемент long_term_ref_pic_id_delta_add[i] может задать идентификацию долгосрочного опорного изображения i-го долгосрочного опорного изображения, не полученного из набора параметров последовательности, но включенного в набор опорных изображений текущего изображения.
Другими словами, синтаксический элемент long_term_ref_pic_id_pps[i] или long_term_ref_pic_id_sps[i] может идентифицировать возможные долгосрочные опорные изображения, но не обязательно идентифицировать все долгосрочные опорные изображения в наборе опорных изображений текущего изображения. Например, возможно наличие долгосрочных опорных изображений, которые должны использоваться для межкадрового предсказания текущего изображения и одного или нескольких изображений, следующих за текущим изображением в порядке декодирования, которые не включены в список возможных долгосрочных опорных изображений. Для указанных долгосрочных опорных изображений видеоэнкодер 20 и видеодекодер 30 могут соответственно энкодировать или декодировать идентификационную информацию, которая идентифицирует долгосрочные опорные изображения, относящиеся к набору опорных изображений текущего изображения.
Например, как показано в Таблице 5, видеоэнкодер 20 и видеодекодер 30 могут соответственно знкодировать или декодировать синтаксические элементы num_long_term_add_curr и num_long_term_add_foll. Синтаксический элемент num_long_term_add_curr может определить количество всех долгосрочных опорных изображений, чья идентификационная информация не включена в упомянутый набор параметров изображения или набор параметров последовательности (когда они применяются), и которые можно использовать для межкадрового предсказания текущего изображения и одного или нескольких изображений, следующих за текущим изображением в порядке декодирования. Синтаксический элемент num_long_term_add_foll может определять количество всех долгосрочных опорных изображений, чья идентификационная информация не включена в упомянутый набор параметров изображения или упомянутый набор параметров последовательности (когда они применяются), которые нельзя использовать для межкадрового предсказания текущего изображения, но которые можно использовать для межкадрового предсказания одного или нескольких изображений, следующих за текущим изображением в порядке декодирования.
Видеодекодер 30 может реализовать следующий псевдокод для определения того, какие долгосрочные опорные изображения относятся к набору опорных изображений. В этом примере долгосрочные опорные изображения могут не входить в возможные долгосрочные опорные изображения.
Как было описано выше, методики, описанные в этом изобретении, могут выполняться в соответствии со стандартом HEVC. Далее для лучшего понимания следует краткое описание стандарта HEVC. Кроме того, хотя предложенные методики описаны в контексте стандарта HEVC, их можно распространить на другие стандарты, включая традиционные стандарты.
Стандарт JCT-VC действует на основе развития стандарта HEVC. Работы по стандартизации (HEVC) основаны на развитой модели устройства видеокодирования, называемой тестовой моделью HEVC (HM). Модель HM предполагает несколько дополнительных возможностей для устройств видеокодирования по сравнению с существующими устройствами, например, согласно стандарту ITU-T H.264/AVC. Например, в то время как стандарт H.264 обеспечивает девять режимов кодирования с внутрикадровым предсказанием, модель HM может обеспечить до 33 режимов кодирования с внутрикадровым предсказанием.
В общем случае рабочая модель HM описывает, каким образом можно разделить видеокадр или видеоизображение на последовательность древовидных блоков или максимальных по размеру блоков (LCU) кодирования, которые включают в себя как отсчеты яркости, так и отсчеты цветности. Назначение древовидного блока такое же, как у макроблока согласно стандарту H.264. Слайс включает в себя несколько последовательных древовидных блоков в порядке декодирования. Видеокадр или видеоизображение можно разбить на один или несколько слайсов. Каждый древовидный блок можно разделить на блоки (CU) кодирования согласно квадродереву. Например, древовидный блок в виде корневого узла квадродерева можно разделить на четыре дочерних узла, а каждый дочерний узел, в свою очередь, может быть родительским узлом и может быть расщеплен на четыре других дочерних узла. Конечный нерасщепленный дочерний узел как краевой узел квадродерева содержит узел кодирования, то есть, кодированный видеоблок. Синтаксические данные, связанные с кодированным битовым потоком, могут определять максимальное количество возможных разделений древовидного блока, а также могут определять минимальный размер кодированных блоков. Древовидные блоки в некоторых примерах могут называться блоками LCU.
Блок CU включает в себя кодовый узел, а также блоки предсказания (PU) и блоки преобразования (TU), связанные с кодовым узлом. Размер блока CU соответствует размеру кодового узла и должен иметь квадратную форму. Размер блока CU может находиться в диапазоне от 8×8 пикселей до размера древовидного блока, содержащего максимум 64×64 пикселя или более. Каждый блок CU может содержать один или несколько блоков PU и один или несколько блоков TU. Синтаксические данные, связанные с блоком CU, могут описывать, например, разбиение блока CU на один или несколько блоков PU. Режимы разбиения могут отличаться в зависимости от того, закодирован ли блок CU в режиме прямого кодирования, в режиме внутрикадрового предсказания или в режиме межкадрового предсказания. Блоки PU могут быть разбиты на блоки не квадратной формы. Синтаксические данные, связанные с блоком CU, также могут описывать, например, разбиение блока CU на один или несколько блоков CU согласно квадродереву. Блок TU может иметь форму квадрата или иную форму.
Стандарт HEVC позволяет осуществлять преобразования в соответствии с блоками TU, которые могут быть разными для разных блоков CU. Размеры блоков TU, как правило, устанавливают на основе размера блоков PU в данном блоке CU, определенном для разделенного блока LCU, хотя это может быть не всегда. Блоки TU, как правило, имеют тот же или меньший размер, чем блоки PU. В некоторых примерах, остаточные отсчеты, соответствующие блоку CU, могут быть дополнительно разделены на меньшие блоки с использованием структуры квадродерева, известной как «остаточное квадродерево» (RQT). Краевые узлы RQT могут называться блоками преобразования (TU). Значения пиксельной разности, связанные с блоками TU, можно преобразовать для создания коэффициентов преобразования, которые можно подвергнуть квантованию.
В общем случае блок PU включает в себя данные, относящиеся к процессу предсказания. Например, когда блок PU закодирован в режиме внутрикадрового предсказания, блок PU может включать в себя данные, описывающие режим внутрикадрового предсказания для данного блока PU. В другом примере, когда блок PU закодирован в режиме межкадрового предсказания, блок PU может включать в себя данные, определяющие вектор движения для блока PU. Данные, определяющие вектор движения для блока PU, могут описывать, например, горизонтальную составляющую вектора движения, вертикальную составляющую вектора движения, разрешающую способность для вектора движения (например, точность в четверть пикселя или точность в одну восьмую пикселя), опорное изображение, на которое указывает вектор движения, и/или список опорных изображений (например, список 0, список 1 или список С) для данного вектора движения.
В общем случае блок TU используют для процессов преобразования и квантования. Данный блок CU, имеющий один или несколько блоков PU, также может включать в себя один или несколько блоков преобразования (TU). После предсказания видеоэнкодер 20 может вычислить остаточные значения, соответствующие блоку PU. Остаточные значения содержат значения пиксельной разности, которые можно преобразовать в коэффициенты преобразования, квантовать и сканировать с использованием блоков TU для создания сериализированных коэффициентов преобразования для энтропийного кодирования. В настоящем описании, как правило, используется термин «видеоблок» для обращения к кодовому узлу блока CU. В некоторых особых случаях в настоящем описании также может использоваться термин «видеоблок» для обращения к древовидному блоку, то есть, блоку LCU или блоку CU, который включает в себя кодовый узел и блоки PU и блоки TU.
Видеопоследовательность, как правило, включает в себя ряд видеокадров или видеоизображений. Группа изображений (GOP) обычно содержит ряд, состоящий из одного или нескольких видеоизображений. Группа GOP может включать в себя синтаксические данные в заголовке группы GOP, заголовок одного или нескольких изображений или, в противном случае, описывает количество изображений, включенных в группу GOP. Каждый слайс изображения может включать в себя синтаксические данные слайса, которые описывают режим кодирования для соответствующего слайса. Видеоэнкодер 20, как правило, работает с видеоблоками внутри отдельных видеослайсов, чтобы кодировать видеоданные. Видеоблок может соответствовать кодовому узлу в блоке CU. Видеоблоки могут иметь фиксированные или переменные размеры и могут отличаться по размеру в зависимости от конкретного стандарта кодирования.
В качестве примера, модель HM поддерживает предсказание с различными размерами блока PU. Положим, что размер конкретного блока CU составляет 2Nx2N, и тогда модель HM поддерживает внутрикадровое предсказание с размерами блока PU, составляющими 2Nx2N или NxN, и межкадровое предсказание с симметричными размерами блока PU, составляющими 2Nx2N, 2NxN, Nx2N или NxN. Модель HM также поддерживает асимметричное разбиение для межкадрового предсказания с размерами блока PU, составляющими 2NxnU, 2NxnD, nLx2N и nRx2N. При асимметричном разбиении в одном направлении блок CU не подлежит разбиению, в то время как в другом направлении выполняется разбиение на части, составляющие 25% и 75%. Часть блока CU, соответствующая 25% участку, обозначена как «n», за которой следует обозначение «Вверх», «Вниз», «Влево», или «Вправо». Таким образом, например, «2NxnU» относится к блоку CU размером 2Nx2N, который разбит по горизонтали на блок PU размером 2Nx0,5N наверху и блок PU размером 2Nx1,5N внизу.
В этом описании записи «NxN» и «N на N» могут использоваться как взаимозаменяемые, для обращения к размерам видеоблока в пикселях по вертикали и горизонтали, например, 16×16 пикселей или 16 на 16 пикселей. В общем случае блок размером 16×16 будет иметь 16 пикселей в вертикальном направлении (y=16) и 16 пикселей в горизонтальном направлении (x=16). Аналогичным образом, блок размером NxN в общем случае имеет N пикселей в вертикальном направлении и N пикселей в горизонтальном направлении, где N представляет не отрицательное целое число. Пиксели в блоке могут быть скомпонованы по строкам и столбцам. Кроме того, блоки не обязательно должны иметь одинаковое количество пикселей в горизонтальном и вертикальном направлениях. Например, блоки могут содержать NxM пикселей, где M не обязательно равно N.
После кодирования с внутрикадровым или межкадровым предсказанием с использованием блоков PU блока CU видеоэнкодер 20 может вычислить остаточные данные для блоков TU блока CU. Блоки PU могут содержать пиксельные данные в пространственной области (называемой также пиксельной областью), а блоки TU могут содержать коэффициенты в области преобразования после применения преобразования, например, дискретного косинусного преобразования (DCT), целочисленного преобразования, вейвлетного преобразования или концептуально подобного преобразования к остаточным видеоданным. Остаточные данные могут соответствовать разностям между пикселями некодированного изображения и значениями предсказания, соответствующими блокам PU. Видеоэнкодер 20 может сформировать блоки TU, включающие в себя остаточные данные для блока CU, а затем преобразовать эти блоки TU для создания коэффициентов преобразования для блока CU.
После любого преобразования для создания коэффициентов преобразования видеоэнкодер 20 может выполнить квантование коэффициентов преобразования. Квантование в общем случае относится к процессу, в ходе которого выполняется квантование коэффициентов преобразования с целью возможного сокращения объема данных, используемых для представления указанных коэффициентов, что обеспечивает дополнительное сжатие. Процесс квантования может уменьшить глубину в битах, связанную с некоторыми или всеми упомянутыми коэффициентами. Например, n-битовое значение можно округлить в меньшую сторону, получив m-битовое значение во время квантования, где n больше, чем m.
В некоторых примерах видеоэнкодер 20 может использовать заранее определенный порядок сканирования для сканирования квантованных коэффициентов преобразования, чтобы получить сериализированный вектор, который можно закодировать с использованием энтропийного кодирования. В других примерах видеоэнкодер 20 может выполнять адаптивное сканирование. После сканирования квантованных коэффициентов преобразования для формирования одномерного вектора видеоэнкодер 20 может закодировать этот одномерный вектор, используя энтропийное энкодирование, например, в соответствии с контекстно-зависимым адаптивным кодированием с переменной длиной слова (CAVLC), контекстно-адаптивным бинарным арифметическим кодированием (CABAC), синтаксически ориентированным адаптивным бинарным арифметическим кодированием (SBAC), вероятностное энтропийное кодирование с интервальным разбиением (PIPE), или другим методом энтропийного кодирования. Видеоэнкодер 20 может также, используя энтропийное кодирование, энкодировать синтаксические элементы, связанные с энкодированными видеоданными, для использования видеодекодером 30 при декодировании видеоданных.
Для выполнения кодирования CABAC видеоэнкодер 20 может присвоить контекст в контекстной модели для символа, подлежащего передаче. Этот контекст может относиться, например, к тому, являются ли соседние значения символа ненулевыми. Для выполнения кодирования CAVLC видеоэнкодер 20 может выбрать код переменной длины для символа, подлежащего передаче. Кодовые слова в VLC могут быть построены так, чтобы относительно более короткие коды соответствовали более вероятным символам, в то время как более длинные коды соответствовали менее вероятным символам. Таким образом, использование кодирования VLC может обеспечить экономное использование бит, например, путем использования кодовых слов одинаковой длины для каждого символа, подлежащего передаче. Определение вероятности может быть основано на контексте, присвоенном данному символу.
На фиг. 2 представлена концептуальная схема, иллюстрирующая примерную видеопоследовательность 33, которая включает в себя множество энкодируемых и передаваемых изображений. В некоторых случаях видеопоследовательность 33 может называться группой изображений (GOP). Видеопоследовательность 33, как здесь показано, включает в себя изображения 35A, 36A, 38A, 35B, 36B, 38B и 35C и конечное изображение 39 в порядке отображения. Изображение 34 является конечным изображением в порядке отображения для последовательности, появившейся перед последовательностью 33. На фиг. 2 в общем виде представлена примерная структура предсказания для видеопоследовательности, которая приведена только для иллюстрации опорных изображений, используемых для предсказания видеоблоков других типов слайсов или изображений (например, изображение или слайс P типа или изображение или слайс В типа). Действительная видеопоследовательность может содержать больше или меньше видеоизображений разных типов и в другом порядке отображения. Видеопоследовательность 33 может включать в себя больше или меньше изображений, чем показано на фиг. 2, причем изображения, показанные в видеопоследовательности 33, приведены здесь в целях обеспечения более полного понимания и в качестве примеров.
Для видеокодирования на блочной основе каждое из видеоизображений, включенных в последовательность 33, может быть разбита на видеоблоки, такие как блоки кодирования (CU) или блоки предсказания (PU). Например, каждый блок CU видеоизображения может включать в себя один или множество блоков PU. Видеоблоки в изображении с внутрикадровым кодированием (I) подвергаются операции предсказания с использованием пространственного предсказания в отношении соседних блоков в этом же изображении. Видеоблоки в изображении с межкадровым кодированием (типа P или B) могут использовать пространственное предсказание в отношении соседних блоков в том же изображении или временное предсказание в отношении других опорных изображений.
Видеоблоки в B изображении можно предсказать, используя двунаправленное предсказание для вычисления двух векторов движения, исходя из двух разных списков опорных изображений (например, исходя из списка 0 и списка 1). В некоторых случаях видеоблоки в B изображении можно предсказать, используя однонаправленное предсказание, исходя из одного из двух разных списков опорных изображений (например, исходя из однонаправленного предсказания с B-кодированием). Видеоблоки в P изображении можно предсказать, используя однонаправленное предсказание для вычисления одного вектора движения, исходя из одного списка опорных изображений. Согласно перспективному стандарту HEVC видеоблоки можно энкодировать, используя однонаправленное предсказание для вычисления одного вектора движения, исходя из одного из двух списков опорных изображений, или двунаправленное предсказание для вычисления двух векторов движения, исходя из двух списков опорных изображений. Эти два списка опорных изображений могут содержать прошлые опорные изображения или будущие опорные изображения, либо как прошлые, так и будущие опорные изображения в порядке отображения или вывода, но прошлые опорные изображения всегда в порядке декодирования.
В примере на фиг. 2 конечное изображение 39 предусмотрено для кодирования во внутрикадровом режиме как I изображение. В других примерах конечное изображение 39 может кодироваться с использованием кодирования в межкадровом режиме (например, как для P изображения) с обращением к конечному изображению 34 предшествующей последовательности, которое может быть I изображением. Видеоизображения 35А-35С (называемые вместе «видеоизображения 35») энкодируются как B изображение, используя двунаправленное предсказание с обращением к одному прошлому изображению и одному будущему изображению. В показанном здесь примере изображение 35А энкодируется как B изображение с обращением к конечному изображению 34 и изображению 36А как показано стрелками, идущими от изображений 34 и 36А к видеоизображению 35А. Изображения 35В и 35С энкодируются аналогичным образом.
Видеоизображения 36А-36В (называемые вместе «видеоизображения 36») могут быть предусмотрены для кодирования в качестве изображений с использованием однонаправленного предсказания с обращением к прошлому изображению. В показанном здесь примере изображение 36А энкодируют как P изображение с обращением к конечному изображению 34 как показано стрелкой, идущей от изображения 34 к видеоизображению 35А. Изображение 36В энкодируют аналогичным образом.
Видеоизображения 38А-38В (называемые вместе «видеоизображениями 38») могут быть предназначены для кодирования с использованием двунаправленного предсказания с обращением к одному и тому же прошлому изображению. В других примерах видеоизображения 38 можно энкодировать, используя двунаправленное предсказание с обращением к фактически подобным прошлым изображениям, включенным в списки опорных изображений. В показанном здесь примере изображение 38А энкодируют с использованием двух обращений к изображению 36А, как показано двумя стрелками от изображения 36А к видеоизображению 38А. Изображение 38В энкодируют аналогичным образом.
Согласно раскрытым здесь методикам видеоэнкодер 20 может в качестве сигнализации передать набор опорных изображений для каждого из изображений в последовательности 33. Например, для изображения 35А этот набор опорных изображений может идентифицировать все опорные изображения, которые могут быть использованы для межкадрового предсказания изображения 35А, а также все опорные изображения, которые можно потенциально использовать для межкадрового предсказания изображений, следующих за изображением 35А в порядке декодирования. Например, набор опорных изображений для изображения 35А может включать в себя значение POC для изображения 34 и изображения 36А, а также значения POC для дополнительных опорных изображений, например, опорных изображений, которые можно потенциально использовать для межкадрового предсказания изображений, следующих за изображением 35А в порядке декодирования. В этом примере изображениями, следующими за изображением 35А, могут быть те изображения, которые следуют за изображением 35А в порядке декодирования и которые входят в видеопоследовательность 33.
Затем видеодекодер 30 может получить набор опорных изображений для изображения 35А вышеописанным путем. Например, видеодекодер 30 может определить значения POC для опорных изображений, относящихся к упомянутому набору опорных изображений, как это было описано выше. Далее видеодекодер 30 может построить по меньшей мере четыре или по меньшей мере пять поднаборов опорных изображений, а в некоторых случаях до шести поднаборов опорных изображений, описанных выше. Видеодекодер 30 может скомпоновать эти шесть поднаборов опорных изображений в определенном порядке, чтобы получить набор опорных изображений для изображения 35А.
Видеодекодер 30 может кроме того построить начальные списки опорных изображений вышеописанным образом, для которых не требуется переупорядочивание изображений, включаемых в начальные списки опорных изображений. Когда модификация списка опорных изображений не разрешена, видеодекодер 30 может установить конечные списки опорных изображений, совпадающими с начальными списками опорных изображений. Также видеодекодер 30 может построить списки опорных изображений указанным образом, в которых будут отсутствовать незавершенные записи. Например, видеодекодер 30 может многократно вносить в список опорные изображения из поднаборов опорных изображений, пока количество записей в списках опорных изображений не станет равным максимальному количеству записей, допустимому для списков опорных изображений. В некоторых примерах видеодекодер 30 может модифицировать начальные списки опорных изображений вышеописанным образом (например, на основе опорных изображений по меньшей мере в одном из построенных поднаборов опорных изображений). Кроме того, в некоторых примерах видеодекодер 30 может удалить декодированные изображения из буфера DPB видеодекодера 30, используя раскрытые здесь методики, например, удалить декодированные изображения, которые не идентифицированы в наборе опорных изображений текущего изображения, подлежащего декодированию, и вывод которых не требуется. Также в некоторых примерах видеодекодер 30 может определить, какие долгосрочные опорные изображения относятся к набору опорных изображений, вышеописанным образом, где идентификационная информация списка возможных долгосрочных опорных изображений может быть включена в набор параметров.
На фиг. 3 представлена блок-схема, иллюстрирующая приведенный в качестве примера видеоэнкодер 20, который способен реализовать раскрытые здесь методики. Видеоэнкодер 20 может выполнять внутрикадровое и межкадровое кодирование видеоблоков в видеослайсах. Внутрикадровое кодирование основано на пространственном предсказании для уменьшения или устранения пространственной избыточности видеоданных в данном видеокадре или изображении. Межкадровое кодирование основано на временном предсказании для уменьшения или устранения временной избыточности видеоданных в соседних кадрах или изображениях видеопоследовательности. Внутрикадровый режим (I режим) может относиться к любому из нескольких режимов сжатия на пространственной основе. Межкадровые режимы, такие как однонаправленное предсказание (P режим) или двунаправленное предсказание (B режим) может относиться к любому из нескольких режимов сжатия на временной основе.
В примере, показанном на фиг. 3, видеоэнкодер 20 включает в себя блок 35 разбиения, модуль 41 предсказания, буфер 64 декодированных изображений (DPB), сумматор 50, модуль 52 преобразования, блок 54 квантования и блок 56 энтропийного кодирования. Модуль 41 предсказания включает в себя блок 42 оценки движения, блок 44 компенсации движения и модуль 46 внутрикадрового предсказания. Для восстановления видеоблока видеоэнкодер 20 также включает в себя блок 58 обратного квантования, модуль 60 обратного преобразования и сумматор 62. В состав блока фильтров также может быть включен фильтр для удаления «блочности» (на фиг. 3 не показан) для удаления артефактов блочности из восстановленного видео. По желанию, фильтр для удаления блочности может просто фильтровать выход сумматора 62. Вдобавок к фильтру удаления блочности также могут быть использованы дополнительные контурные фильтры (в контуре или в пост-контуре).
Как показано на фиг. 3, видеоэнкодер 20 принимает видеоданные, а блок 35 разбиения разбивает эти данные на видеоблоки. Это разбиение также может включать в себя разбиение на слайсы, тайлы или другие более крупные единицы, а также разбиение самого видеоблока, например, согласно структуре квадродерева из блоков LCU и CU. Видеоэнкодер 20 в общем случае содержит компоненты, которые выполняют энкодирование видеоблоков в видеослайсе, подлежащем кодированию. Слайс может быть разделен на множество видеоблоков (а возможно и на наборы видеоблоков, называемые здесь «тайлами»). Модуль 41 предсказания может выбрать один из множества возможных режимов кодирования, например, один из множества режимов внутрикадрового кодирвоания или один из множества режимов межкадрового кодирования для текущего видеоблока на основе результатов, полученных с ошибкой (например, скорость кодирования и уровень искажения). Модуль 41 предсказания может подать результирующий блок, закодированный с использованием внутрикадрового или межкадрового предсказания, на сумматор 50 для создания остаточных блочных данных, а также на сумматор 62 для восстановления кодированного блока с целью его использования в качестве опорного изображения.
Модуль 46 внутриркадрового предсказания, входящий в модуль 41 предсказания, может выполнить кодирование с внутрикадровым предсказанием текущего видеоблока относительно одного или нескольких соседних блоков в одном и том же изображении или слайсе, как текущего блока, подлежащего кодированию, для обеспечения пространственного сжатия. Блок 42 оценки движения и блок 44 компенсации движения в модуле 41 предсказания выполняют кодирование с межкадровым предсказанием текущего видеоблока относительно одного или нескольких предсказанных блоков в одном или нескольких опорных изображениях для обеспечения временного сжатия.
Блок 42 оценки движения может быть сконфигурирован для определения режима межкадрового предсказания для видеослайса согласно заранее определенному шаблону для видеопоследовательности. Этот заранее определенный шаблон может указать видеослайсы в последовательности как P слайсы или B слайсы. Блок 42 оценки движения и блок 44 компенсации движения могут быть реализованы в интегральном исполнении, но они показаны отдельно, исходя из концептуальных целей. Оценка движения, выполняемая блоком 42 оценки движения, представляет собой процесс создания векторов движения, которые оценивают движение для видеоблоков. Например, вектор движения может указывать смещение PU видеоблока в текущем видеоизображении по отношению к предсказанному блоку в опорном изображении.
Предсказанный блок - это блок, который, как это установлено, достаточно точно соответствует блоку PU видеоблока, подлежащего кодированию, с точки зрения пиксельной разности, которую можно определить как сумму абсолютных значений разности (SAD), сумму квадратов разностей (SSD) или другими разностными показателями. В некоторых примерах видеоэнкодер 20 может вычислить значения для дробных пиксельных позиций опорных изображений, хранящихся в буфере 64 декодированных изображений. Например, видеоэнкодер 20 может интерполировать значение пиксельных позиций с точностью до одной четверти, пиксельных позиций с точностью одна восьмая или других дробных пиксельных позиций опорного изображения. Таким образом, блок 42 оценки движения может выполнить поиск движения относительно полных пиксельных позиций и дробных пиксельных позиций и вывести вектор движения с точностью до долей пикселя.
Блок 42 оценки движения вычисляет вектор движения для блока PU видеоблока в слайсе, закодированном с использованием межкадрового предсказания, путем сравнения позиции блока PU с позицией предсказанного блока опорного изображения. Опорное изображение может быть выбрано из первого списка опорных изображений (список 0) или второго списка опорных изображений (список 1), каждый из которых идентифицирует одно или несколько опорных изображений, хранящихся в буфере 64 декодированных изображений. Блок 42 оценки движения посылает вычисленный вектор движения в блок 56 энтропийного кодирования и блок 44 компенсации движения.
Компенсация движения, выполняемая блоком 44 компенсации движения, может включать в себя получение или создание предсказанного блока на основе вектора движения, определенного при оценке движения, с возможным выполнением интерполяций с точностью до долей пикселя. После приема вектора движения для блока PU текущего видеоблока блок 44 компенсации движения может определить местоположение предсказанного блока, на который указывает вектор движения в одном из списков опорных изображений. Видеоэнкодер 20 формирует остаточный видеоблок, вычитая пиксельные значения предсказанного блока из пиксельных значений текущего кодируемого видеоблока, в результате чего получают значения пиксельной разности. Значения пиксельной разности образуют остаточные данные для упомянутого блока, которые могут включать в себя разностные компоненты яркости и разностные компоненты цветности. Сумматор 50 представляет компоненту или компоненты, которые выполняют указанную операцию вычитания. Блок 44 компенсации движения также может создать синтаксические элементы, связанные с видеоблоками и видеослайсом для их использования видеодекодером 30 при декодировании видеоблоков данного видеослайса.
Модуль 46 внутрикадрового предсказания может выполнить внутрикадровое предсказание текущего блока как альтернативу межкадровому предсказанию, выполняемому блоком 42 оценки движения и блоком 44 компенсации движения, как это было описано выше. В частности, модуль 46 внутрикадрового предсказания может определить режим внутрикадрового предсказания для использования для кодирования текущего блока. В некоторых примерах, модуль 46 внутрикадрового предсказания может закодировать текущий блок, используя различные режимы внутрикадрового предсказания например, во время отдельных проходов кодирования, и модуль 46 внутрикадрового предсказания (или блок 40 выбора режима в некоторых примерах) может выбрать необходимый режим внутрикадрового предсказания из тестовых режимов. Например, модуль 46 внутрикадрового предсказания может вычислить значения
искажения в зависимости от скорости передачи с использованием анализа зависимости искажения от скорости передачи для различных тесовых режимов внутрикадрового предсказания и выбрать режим внутрикадрового предсказания, имеющий наилучшие зависимости искажения от скорости передачи среди тестовых режимов. Анализ зависимости искажения от скорости передачи в общем случае определяет величину искажения (или ошибки) между кодированным блоком и исходным, не кодированным блоком, который был закодирован для создания кодированного блока, а также скорость передачи в битах (то есть, количество бит), используемую для создания кодированного блока. Модуль 46 внутрикадрового предсказания может вычислить отношения, исходя из упомянутых искажений и скоростей для различных кодированных блоков, чтобы определить, какой режим внутрикадрового предсказания дает наилучшее значение зависимости искажения от скорости передачи для данного блока.
После выбора режима внутрикадрового предсказания для блока модуль 46 внутрикадрового предсказания может подать информацию, указывающую выбранный режим внутрикадрового предсказания для данного блока, в блок 56 энтропийного энкодирования. Блок 56 энтропийного энкодирования может энкодировать информацию, указывающую выбранный режим внутрикадрового предсказания, в соответствии с методиками настоящего изобретения. Видеоэнкодер 20 может включить в переданные данные о конфигурации битового потока, которые могут включать в себя множество таблиц с индексами режимов внутрикадрового предсказания, и множество модифицированных таблиц с индексами внутрикадрового предсказания (также называемых таблицами отображения кодовых слов), определения контекстов кодирвоания для различных блоков и указания о наиболее вероятном режиме внутрикадрового предсказания, таблицу индексов режима внутрикадрового предсказания и модифицированную таблицу индексов режимов внутрикадрового предсказания для их использования для каждого из упомянутых контекстов.
После создания модулем 41 предсказания предсказанного блока для текущего видеоблока посредством либо межкадрового предсказания, либо внутрикадрового предсказания видеоэнкодер 20 формирует остаточный видеоблок путем вычитания предсказанного блока из текущего видеоблока. Остаточные видеоданные в остаточном блоке могут быть включены в один или несколько блоков TU и поданы в модуль 52 преобразования. Модуль 52 преобразования выполняет преобразование остаточных видеоданных в остаточные коэффициенты преобразования, используя такое преобразование, как, дискретное косинусное преобразование (DCT) или концептуально аналогичное преобразование. Модуль 52 преобразования может преобразовать остаточные видеоданные из пиксельной области в область преобразования, например, частотную область.
Модуль 52 преобразования может послать результирующие коэффициенты преобразования в блок 54 квантования. Блок 54 квантования выполняет квантование коэффициентов преобразования с целью дальнейшего снижения скорости передачи в битах. Процесс квантования может уменьшить глубину в битах, связанную с некоторыми или всеми коэффициентами. Степень квантования можно модифицировать, изменяя параметр квантования. В некоторых примерах блок 54 квантования может затем выполнить сканирование матрицы, содержащей квантованные коэффициенты преобразования. В альтернативном варианте сканирование может выполняться блоком 56 энтропийного кодирования.
После квантования блок 56 энтропийного кодирования выполняет энтропийное кодирование квантованных коэффициентов преобразования. Например, блок 56 энтропийного кодирования может выполнять контекстно-зависимое адаптивное кодирование с переменной длиной слова (CAVLC), контекстно-адаптивное бинарное арифметическое кодирование (CABAC), синтаксически ориентированное адаптивное бинарное арифметическое кодирование (SBAC), вероятностное энтропийное кодирование с интервальным разбиением (PIPE), или другой метод энтропийного кодирования. После выполнения энтропийного кодирования блоком 56 энтропийного кодирования кодированный битовый поток может быть передан на видеодекодер 30 или заархивирован для позднейшей передачи или извлечения видеодекодером 30. Блок 56 энтропийного кодирования может также выполнять энтропийное кодирование векторов движения и других синтаксических элементов для текущего кодируемого видеослайса.
Блок 58 обратного квантования и модуль 60 обратного преобразования применяют соответственно обратное квантование и обратное преобразование для восстановления остаточного блока в пиксельной области для позднейшего использования в качестве опорного блока опорного изображения. Блок 44 компенсации движения может вычислить опорный блок путем добавления остаточного блока к предсказанному блоку одного из опорных изображений в одном из списков опорных изображений. Блок 44 компенсации движения также может применить один или несколько интерполяционных фильтров к восстановленному остаточному блоку для вычисления дробных пиксельных значений для использования при оценке движения. Сумматор 62 добавляет восстановленный остаточный блок к предсказанному блоку с компенсацией движения, созданному блоком 44 компенсации движения, для создания опорного блока с целью его запоминания в буфере 64 декодированных изображений. Этот опорный блок может использоваться блоком 42 оценки движения и блоком 44 компенсации движения в качестве опорного блока для межкадрового предсказания блока в последующем видеокадре или видеоизображении.
Согласно настоящему изобретению модуль 41 предсказания представляет один примерный блок для выполнения вышеописанных примерных функций. Например, модуль 41 предсказания может определить, какие опорные изображения относятся к набору опорных изображений, и инициировать выполнение видеоэнкодером 20 энкодирования информации, указывающей опорные изображения, которые относятся к данному набору опорных изображений. Также во время процесса восстановления (например, во время процесса, используемого для восстановления изображения для его использования в качестве опорного изображения и запоминания в буфере 64 декодированных изображений) модуль 41 предсказания может построить множество поднаборов опорных изображений, каждый из которых идентифицирует одно или несколько опорных изображений. Модуль 41 предсказания также может получить набор опорных изображений из построенного множества поднаборов опорных изображений. Также модуль 41 предсказания может реализовать любой один или несколько псевдокодов из наборов примерных псевдокодов, описанных выше, для реализации одной или нескольких примерных методик, раскрытых в настоящем изобретении.
В некоторых примерах модуль 41 предсказания может построить начальные списки опорных изображений вышеописанным образом. В некоторых примерах не обязательно выполнять переупорядочивание изображений, включаемых в начальные списки опорных изображений. Также модуль 41 предсказания может построить списки опорных изображений указанным способом, причем в этих списках опорных изображений будут отсутствовать незавершенные записи. В некоторых примерах модуль 41 декодирования может также модифицировать начальные списки опорных изображений вышеописанным образом для построения модифицированного списка опорных изображений. Кроме того, в некоторых примерах модуль 41 предсказания может реализовать удаление декодированных изображений из буфера DPB 64 вышеописанным образом. Кроме того, в некоторых примерах модуль 41 предсказания может быть сконфигурирован для определения того, какие долгосрочные опорные изображения относятся к упомянутому набору опорных изображений для текущего изображения вышеописанным образом.
В других примерах вышеописанное может быть реализовано блоком, отличным от модуля 41 предсказания. В ряде других случаев модуль 41 вместе с одним или несколькими другими блоками видеоэнкодера 20 может реализовать вышеописанные случаи. В некоторых других примерах реализовать вышеописанное может процессор или блок видеоэнкодера 20 (на фиг. 3 не показан) автономно или вместе с другими блоками видеоэнкодера 20.
На фиг. 4 представлена блок-схема, иллюстрирующая примерный видеодекодер 30, который может реализовать раскрытые здесь методики. В примере на фиг. 4 видеодекодер 30 включает в себя блок 80 энтропийного декодирования, модуль 81 предсказания, блок 86 обратного квантования, блок 88 обратного преобразования, сумматор 90 и буфер 92 декодированных изображений (DPB). Модуль 81 предсказания включает в себя блок 82 компенсации движения и модуль 84 внутрикадрового предсказания. В некоторых примерах видеодекодер 30 может выполнять прогон декодирования, являющийся в общем случае обратным по отношению к прогону кодирования, описанному в связи с видеоэнкодером 20 по фиг. 3.
Во время процесса декодирования видеодекодер 30 принимает кодированный видеопоток, который представляет видеоблоки кодированного видеослайса и связанные с ними синтаксические элементы от видеоэнкодера 20. Блок 80 энтропийного декодирования видеодекодера 30 выполняет энтропийное декодирования битового потока для создания квантованных коэффициентов, векторов движения и других синтаксических элементов. Блок 80 энтропийного декодирования направляет векторы движения и другие синтаксические элементы в модуль 81 предсказания. Видеодекодер 30 может принимать эти синтаксические элементы на уровне видеослайса и/или на уровне видеоблока.
При кодировании видеослайса как слайса с внутрикадровым кодированием (I слайс) модуль 84 внутрикадрового предсказания, входящий в модуль 81 предсказания, может создавать данные предсказания для видеоблока текущего видеослайса на основе сигнальной информации о режиме внутрикадрового предсказания и данных из ранее декодированных блоков текущего изображения. При кодировании видеоизображения как слайса с межкадровым кодированием (например, B или P слайс) блок 82 компенсации движения, входящий в состав модуля 81 предсказания, создает предсказанные блоки для видеоблока текущего видеослайса на основе векторов движения и других синтаксических элементов, полученных от блока 80 энтропийного декодирования. Эти предсказанные блоки могут быть созданы, исходя из одного из числа опорных изображений в одном из списков опорных изображений. Видеодекодер 30 может построить списки опорных изображений (список 0 и список 1), используя стандартные методики построения на основе опорных изображений, запомненных в буфере 92 декодированный изображений. В некоторых примерах видеодекодер 30 может построить список 0 и список 1, исходя из опорных изображений, идентифицированных в полученном списке опорных изображений.
Блок 82 компенсации движения определяет информацию предсказания для видеоблока текущего видеослайса путем синтаксического анализа векторов движения и других синтаксических элементов и использует информацию о предсказании для создания предсказанных блоков для текущего декодируемого видеоблока. Например, блок 82 компенсации движения использует некоторые из полученных синтаксических элементов для определения режима предсказания (например, внутрикадровое или межкадровое предсказание) используемого для кодирования видеоблоков видеослайса типа слайса с межкадровым предсказанием (например, B слайс или P слайс), информацию о построении, касающуюся построения одного или нескольких списков опорных изображений для данного слайса, векторов движения для каждого видеоблока слайса с межкадровым кодированием, статуса межкадрового предсказания для каждого видеоблока слайса с межкадровым кодированием и другой информации для декодирования видеоблоков в текущем видеослайсе.
Блок 82 компенсации движения может также выполнять интерполяцию на основе интерполяционных фильтров. Блок 82 компенсации движения может использовать интерполяционные фильтры, используемые видеоэнкодером 20 во время кодирования видеоблоков, для вычисления интерполированных значений для дробных пикселей опорных блоков. В этом случае блок 82 компенсации движения может определить интерполяционные фильтры, используемые видеоэнкодером 20, исходя из полученных синтаксических элементов, и использовать эти интерполяционные фильтры для создания предсказанных блоков.
Блок 86 обратного квантования выполняет обратное квантование, то есть, «деквантование» квантованных коэффициентов преобразования, обеспеченных в битовом потоке и декодированных с использование блока 80 энтропийного кодирования. Процесс обратного квантования может включать в себя использование параметра квантования, вычисленного видеоэнкодером 20 для каждого видеоблока в видеослайсе для определения степени квантования и аналогичным образом степени обратного квантования, которые следует применить. Модуль 88 обратного преобразования применяет обратное преобразование, например, обратное DCT преобразование, обратное целочисленное преобразование или концептуально аналогичный процесс обратного преобразования к коэффициентам преобразования для создания остаточных блоков в пиксельной области.
После создания модулем 81 предсказания предсказанного блока для текущего видеоблока на основе либо межкадрового, либо внутрикадрового предсказания видеодекодер 30 формирует декодированный видеоблок путем суммирования остаточных блоков из модуля 88 обратного преобразования с соответствующими предсказанными блоками, созданными модулем 81 предсказания. Сумматор 90 представляет компоненту или компоненты, которые выполняют эту операцию суммирования. При необходимости также может быть применен фильтр для удаления блочности для фильтрации декодированных блоков с целью устранения артефактов блочности. Для сглаживания пиксельных переходов или иного улучшения качества видео также могут быть применены другие контурные фильтры (либо в контуре кодирования, либо после контура кодирования). Затем декодированные видеоблоки в данном изображении запоминаются в буфере 92 декодированных изображений, в котором хранятся опорные изображения, используемые для последующей компенсации движения. В буфере 92 декодированных изображений также хранится декодированное видео для представления в дальнейшем на устройстве отображения, таком как устройство 32 отображения по фиг. 1.
Согласно настоящему изобретению модуль 81 предсказания представляет один примерный блок для выполнения вышеописанных приведенных в качестве примера функций. Например, модуль 81 предсказания может определить, какие опорные изображения относятся к набору опорных изображений. Также модуль 81 предсказания может построить множество поднаборов опорных изображений, каждый из которых идентифицирует одно или несколько опорных изображений. Модуль 81 предсказания может также получить набор опорных изображений из построенного множества поднаборов опорных изображений. Также модуль 81 предсказания может реализовать один или несколько псевдокодов из наборов примерных псевдокодов, описанных выше, для реализации одной или нескольких раскрытых здесь примерных методик.
В некоторых примерах модуль 81 предсказания может построить начальные списки опорных изображений вышеописанным образом. В некоторых примерах переупорядочивание изображений, включаемых в начальные списки опорных изображений, не требуется. Также модуль 81 предсказания может построить списки опорных изображений указанным способом, так что в списках опорных изображений не будет незавершенных записей. В некоторых примерах модуль 81 предсказания также может модифицировать начальные списки опорных изображений вышеописанным образом для построения модифицированного списка опорных изображений. Кроме того, в некоторых примерах модуль 81 предсказания может реализовать удаление декодированных изображений из буфера DPB 94 вышеописанным образом. Кроме того, в некоторых примерах модуль 81 предсказания может быть сконфигурирован для определения того, какие долгосрочные опорные изображения относятся к упомянутому списку опорных изображений для текущего изображения вышеописанным образом.
В других примерах реализация вышеописанного может быть обеспечена другим блоком, отличным от модуля 81 предсказания. В некоторых других примерах модуль 81 предсказания вместе с одним или несколькими другими блоками видеодекодера 30 может реализовать вышеописанные примеры. В ряде других примеров реализовать вышеописанное может процессор или блок видеодекодера 30 (на фиг. 4 не показан), автономно или вместе с другими блоками видеодекодера 30.
На фиг. 5 представлена блок-схема, иллюстрирующая приведенную в качестве примера операцию получения набора опорных изображений. Исключительно в иллюстративных целях, способ, показанный на фиг. 5, может выполняться видеокодером, соответствующим видеоэнкодеру 20 или видеодекодеру 30. Например, видеокодер (например, видеоэнкодер 20 или видеодекодер 30) может закодировать (например, энкодировать или декодировать) информацию, указывающую опорные изображения, относящиеся к набору опорных изображений (94). Набор опорных изображений может идентифицировать опорные изображения, которые можно потенциально использовать для межкадрового предсказания текущего изображения и для межкадрового предсказания одного или нескольких изображений, следующих за текущим изображением в порядке декодирования.
Например, когда видеоэнкодер 20 выполняет шаг 94, он может закодировать значения, указывающие идентификаторы для тех опорных изображений, которые относятся к данному набору опорных изображений. Например, видеоэнкодер 20 может в качестве сигнализации передать в битовом потоке синтаксический элемент pic_order_cnt_lsb и синтаксический элемент log2_max_pic_order_cnt_lsb_minus4. При выполнении видеодекодером 30 шага 94, исходя из синтаксического элемента log2_max_pic_order_cnt_lsb_minus4, видеодекодер 30 может определить значение MaxPicOrderCntLsb. Затем видеодекодер 30 может определить идентификаторы (например, значения POC) для тех опорных изображений, которые относятся к данному списку опорных изображений.
Видекодер может построить множество поднаборов опорных изображений, каждый из которых идентифицирует нуль или более опорных изображений (96). Например, видеокодер может построить поднаборы RefPicSetStCurr0, RefPicSetStCurr1, RefPicSetStFoll0, RefPicSetStFoll1 , RefPicSetLtCurr и RefPicSetLtFoll опорных изображений. Однако аспекты настоящего изобретения этим не ограничиваются. В некоторых примерах видеокодер может построить пять поднаборов опорных изображений, четырьмя из которых могут быть четыре поднабора из RefPicSetStCurr0, RefPicSetStCurr1, RefPicSetStFoll0, RefPicSetStFoll1, RefPicSetLtCurr и RefPicSetLtFoll опорных изображений, а пятым может быть комбинация из двух оставшихся из шести поднаборов опорных изображений (например, комбинация из поднабора RefPicSetFoll0 и поднабора RefPicSetFoll1 опорных изображений).
В некоторых примерах видеокодер может построить по меньшей мере два из следующих четырех поднаборов опорных изображений. В других примерах видеокодер может построить по меньшей мере следующие четыре поднабора опорных изображений. Первый поднабор опорных изображений может идентифицировать краткосрочные опорные изображения, которые поступают перед текущим изображением в порядке декодирования и перед текущим изображением в порядке вывода, и которые можно потенциально использовать для межкадрового предсказания текущего изображения и одного или нескольких из одного или нескольких изображений, следующих за текущим изображением в порядке декодирования. Второй поднабор опорных изображений может идентифицировать краткосрочные опорные изображения, которые поступают до текущего изображения в порядке декодирования и после текущего изображения в порядке вывода, и которые можно потенциально использовать для межкадрового предсказания текущего изображения и одного или нескольких из одного или нескольких изображений, следующих за текущим изображением в порядке декодирования.
Третий поднабор опорных изображений может идентифицировать долгосрочные опорные изображения, которые поступают перед текущим изображением в порядке декодирования и которые можно потенциально использовать для межкадрового предсказания текущего изображения и одного или нескольких из одного или нескольких изображений, следующих за текущим изображением в порядке декодирования. Четвертый поднабор опорных изображений может идентифицировать долгосрочные опорные изображения, которые поступают до текущего изображения в порядке декодирования и которые можно использовать для межкадрового предсказания текущего изображения и можно потенциально использовать для межкадрового предсказания одного или нескольких из одного или нескольких изображений, следующих за текущим изображением в порядке декодирования.
Видеокодер может получить набор опорных изображений из множества поднаборов опорных изображений (98). Например, видеокодер может для получения набора опорных изображений расположить по меньшей мере два из поднаборов RefPicSetStCurr0, RefPicSetStCurr1, RefPicSetStFoll0, RefPicSetStFoll1 , RefPicSetLtCurr и RefPicSetLtFoll опорных изображений в конкретном порядке.
В некоторых примерах упорядочивание, выполняемое видеокодером, может означать, что изображения в каждом из поднаборов опорных изображений могут быть идентифицированы последовательно в наборе опорных изображений. В этих примерах видеокодер может обращаться к опорным изображениям в наборе опорных изображений, используя значение индекса в наборе опорных изображений.
Видеокодер может закодировать текущее изображение на основе полученного набора опорных изображений (100). Следует понимать, что, поскольку видеокодер получает набор опорных изображений из поднаборов опорных изображений, можно считать, что видеокодер кодирует текущие изображения на основе множества упомянутых поднаборов опорных изображений. Например, видеокодер может построить по меньшей мере один список опорных изображений (первый или второй) на основе множества поднаборов опорных изображений (например, исходя из полученного набора опорных изображений, который получен из множества поднаборов опорных изображений). Видеокодер может затем закодировать текущее изображение на основе по меньшей мере одного из списков: первого списка опорных изображений и/или второго списка опорных изображений.
На фиг. 6 представлена блок-схема, иллюстрирующая примерную операцию построения списка опорных изображений. Исключительно в иллюстративных целях способ по фиг. 6 может выполняться видеокодером, соответствующим либо видеоэнкодеру 20, либо видеодекодеру 30. По аналогии с фиг. 5, видеокодер может закодировать информацию, указывающую опорные изображения (102), и построить множество поднаборов опорных изображений (104).
Затем видеокодер может добавить опорные изображения из поднаборов опорных изображений в начальный список опорных изображений для построения начального списка опорных изображений (106). В некоторых примерах начальный список опорных изображений может быть построен как видеоэнкодером 20, так и видеодекодером 30. Например, видеоэнкодер 20 может построить начальный список опорных изображений для создания восстановленных видеоблоков с целью их запоминания в буфере DPB 64. Видеодекодер 30 может построить список опорных изображений в рамках выполняемого им процесса декодирования и может реализовать стандартную методику построения, используя которую, видеодекодеру 30 нет необходимости принимать информацию от видеоэнкодера 20, касающуюся того, каким образом следует формировать начальный список опорных изображений.
В некоторых примерах для построения начального списка опорных изображений видеокодер может добавить опорные изображения из первого поднабора из множества поднаборов опорных изображений в начальный список опорных изображений, за которыми добавляются опорные изображения из второго поднабора, а за ними добавляются опорные изображения из третьего поднабора опорных изображений. Видеокодер может добавлять опорные изображения из указанных поднаборов опорных изображений, пока общее количество опорных изображений, внесенных в начальный список опорных изображений, не превышает максимального количества записей, допустимого для начального списка опорных изображений. Например, если в какой-либо момент времени во время добавления опорных изображений в список опорных изображений количество записей в начальном списке опорных изображений сравняется с максимальным количеством записей, допустимым для начального списка опорных изображений, то видеокодер может прекратить добавление дополнительных изображений в данный начальный список опорных изображений.
Аналогичным образом, видеокодер может построить другой начальный список опорных изображений, такой как список в примерах, где выполняется двунаправленное предсказание видеоблока текущего изображения. В этом примере для построения другого начального списка опорных изображений видеокодер может добавлять опорные изображения из второго поднабора в этот другой начальный список опорных изображений, за которыми в указанный список добавляются опорные изображения из первого поднабора, а затем в этот список добавляются опорные изображения из третьего поднабора, пока общее количество записей в этом другом начальном списке опорных изображений не превышает допустимое количество записей. В этих примерах первым поднабором может быть поднабор RefPicSetStCurr0 опорных изображений, вторым поднабором может быть поднабор RefPicSetStCurr1 опорных изображений, а третьим поднабором может быть поднабор RefPicSetLtCurr опорных изображений.
В некоторых примерах для добавления опорных изображений, идентифицированных в поднаборах RefPicSetStCurr0, RefPicSetStCurr1 и RefPicSetLtCurr опорных изображений видеокодер может закодировать (например, энкодировать или декодировать) синтаксические элементы, исходя из которых этот видеокодер может определить количество опорных изображений в каждом из указанных поднаборов опорных изображений. Например, видеокодер может закодировать синтаксический элемент num_short_term_curr0 и синтаксический элемент num_short_term_curr1. Синтаксический элемент num_short_term_curr0 и синтаксический элемент num_short_term_curr1 могут указывать количество опорных изображений, идентифицированных в поднаборе RefPicSetStCurr0 опорных изображений и поднаборе RefPicSetStCurr1 опорных изображений соответственно.
Видеокодер может также закодировать синтаксический элемент num_long_term_pps_curr и синтаксический элемент num_long_term_add_curr. Синтаксический элемент num_long_term_pps_curr может указывать количество долгосрочных опорных изображений, чьи идентификационные данные включены в набор параметров изображения (PPS), а синтаксический элемент num_long_term_add_curr может указывать количество долгосрочных опорных изображений, чьи идентификационные данные не включены в набор PPS. В этом примере указанные долгосрочные опорные изображения можно потенциально использовать для межкадрового предсказания текущего изображения и можно потенциально использовать для межкадрового предсказания одного или нескольких изображений, следующих за текущим изображением в порядке декодирования.
Видеокодер может определить количество опорных изображений в поднаборе RefPicSetLtCurr опорных изображений на основе синтаксического элемента num_long_term_pps_curr и синтаксического элемента num_long_term_add_curr. Например, видеокодер может просуммировать значения синтаксического элемента num_long_term_pps_curr и синтаксического элемента num_long_term_add_curr чтобы определить количество опорных изображений в поднаборе RefPicSetLtCurr опорных изображений.
Видеокодер может закодировать текущее изображение на основе списка или списков опорных изображений (108). Например, видеокодер может построить по меньшей мере один из списков (первый список опорных изображений и/или второй список опорных изображений) на основе полученного набора опорных изображений. Затем видеокодер может закодировать текущее изображение на основе по меньшей мере одного из списков: первого списка опорных изображений и/или второго списка опорных изображений.
На фиг. 7 представлена блок-схема, иллюстрирующая другую примерную операцию построения списка опорных изображений. Исключительно в иллюстративных целях способ по п. 7 может выполняться видеокодером, соответствующим либо видеоэнкодеру 20, либо видеодекодеру 30. По аналогии с фиг. 5, видеокодер может закодировать информацию, указывающую опорные изображения (110) и построить множество поднаборов опорных изображений (112). Видеокодер может добавлять опорные изображения в первый набор записей списка опорных изображений (114). Например, количество записей в списке опорных изображений может быть равно максимально допустимому количеству записей, как это определено синтаксическими элементами num_ref_idx_l0_active_minus1 или num_ref_idx_l1_active_minus1.
В этом примере видеокодер может вносить (например, добавлять) в первый набор записей опорные изображения, идентифицированные в поднаборах RefPicSetStCurr0, RefPicSetStCurr1 и RefPicSetLtCurr опорных изображений. Например, для списка 0 видеокодер может добавить в первый набор записей списка 0 по порядку опорные изображения, идентифицированные в поднаборах RefPicSetStCurr0, RefPicSetStCurr1 и RefPicSetLtCurr опорных изображений. Для списка 1 видеокодер может добавлять в первый набор записей списка 1 по порядку опорные изображения, идентифицированные в поднаборах RefPicSetStCurr1, RefPicSetStCurr0 и RefPicSetLtCurr опорных изображений.
Затем видеокодер может определить, равно ли количество записей в списке опорных изображений максимальному количеству записей, допустимому для списка опорных изображений (116). Если количество записей в списке опорных изображений не меньше максимально допустимого количества записей («НЕТ» на шаге 116), видеокодер может закодировать текущее сообщение на основе списка опорных изображений (118).
В противном случае, если количество записей в списке опорных изображений меньше максимально допустимого количества записей («ДА» на шаге 116), то видеокодер может внести в список (например, идентифицировать или добавить) одно или несколько опорных изображений по меньшей мере из одного из поднаборов опорных изображений в записи в список опорных изображений, которые следуют за первым набором записей (120). Например, видеокодер может добавить одно или несколько опорных изображений, идентифицированных в поднаборе RefPicSetStCurr0 опорных изображений, в список 0 в записи, следующие за первым набором записей в списке 0, или одно или несколько опорных изображений, идентифицированных в поднаборе RefPicSetStCurrl опорных изображений, в список 1 в записи, следующие за первым набором записей в списке 1. Таким образом, видеокодер может идентифицировать по меньшей мере одно опорное изображение из первого поднабора опорных изображений и более одной записи в списке опорных изображений.
Затем видеокодер может определить, равно ли количество записей в списке опорных изображений максимальному количеству записей, допустимому для списка опорных изображений (122). Если количество записей в списке опорных изображений не меньше максимально допустимого количества записей («НЕТ» в блоке 122), то видеокодер может закодировать текущее изображение на основе списка опорных изображений (124).
В противном случае, если количество записей в списке опорных изображений меньше максимально допустимого количества записей («ДА» на шаге 122), то видеокодер может внести в список (например, идентифицировать или добавить) одно или несколько опорных изображений по меньшей мере из одного из поднаборов опорных изображений в записи в список опорных изображений, которые следуют за первым набором записей (120). Например, в этой ситуации видеокодер может добавить дополнительные опорные изображения, идентифицированные в первом поднаборе опорных изображений. Если видеокодер уже добавил все опорные изображения в первый поднабор опорных изображений, видеокодер может снова добавить одно или несколько опорных изображений из второго поднабора опорных изображений (например, поднабор RefPicSetStCurr0 опорных изображений для списка 0 или поднабор RefPicSetStCurr1 опорных изображений для списка 1). Этот процесс может повторяться, пока количество записей в списке опорных изображений меньше максимально допустимого количества записей («НЕТ» в блоке 122).
Таким образом, когда количество записей в списке опорных изображений не равно максимально допустимому количеству записей в этом списке опорных изображений, видеокодер может многократно вносить (например, идентифицировать или добавлять) одно или несколько опорных изображений по меньшей мере из одного из поднаборов опорных изображений в записи в списке опорных изображений, которые следуют за первым набором записей, пока количество записей в списке опорных изображений не станет равным максимальному количеству записей, допустимому для списка опорных изображений. В результате видеокодер будет вносить опорные изображения в записи списка опорных изображений так, чтобы каждая запись из списка опорных изображений идентифицировала одно из опорных изображений и так, чтобы по меньшей мере две записи из списка опорных изображений идентифицировали одно и то же опорное изображение из числа упомянутых опорных изображений.
На фиг. 8 представлена блок-схема, иллюстрирующая примерную операцию модификации начального списка опорных изображений. Исключительно в иллюстративных целях способ по фиг. 8 может выполняться видеокодером, соответствующим либо видеоэнкодеру 20, либо видеодекодеру 30. По аналогии с фиг. 6, видеокодер может закодировать информацию, указывающую опорные изображения (126), и построить множество поднаборов опорных изображений (128). Множество поднаборов опорных изображений может включать в себя поднаборы RefPicSetStCurr0, RefPicSetStCurr1 и RefPicSetLtCurr опорных изображений. Видеокодер может построить начальный список опорных изображений вышеописанным образом на основе поднаборов RefPicSetStCurr0, RefPicSetStCurr1 и RefPicSetLtCurr опорных изображений (130).
Видеокодер может определить, требуется ли модификация списка опорных изображений (132). Например, видеокодер может закодировать синтаксические элементы, такие как ref_pic_list_modification_flag_10 и ref_pic_list_modification_flag_ll, которые указывают, необходима ли модификация списка 0 или списка 1. Если модификация начального списка опорных изображений не нужна («НЕТ» в блоке 132), то видеокодер может закодировать текущее изображение на основе начального списка опорных изображений (134).
Если требуется модификация («ДА» в блоке 132), то видеокодер может идентифицировать опорное изображение по меньшей мере в одном из построенных поднаборов опорных изображений (136). Например, видеокодер может закодировать синтаксический элемент modification_of_ref_pic_idc. Значение этого синтаксического элемента modification_of_ref_pic_idc может указывать, какой поднабор опорных изображений должен использовать видеокодер для идентификации данного опорного изображения. Видеокодер также может закодировать синтаксический элемент ref_pic_set_idx, который указывает индекс в поднаборе опорных изображений, который следует использовать видеокодеру для идентификации данного опорного изображения.
Видеокодер может внести (например, добавить или идентифицировать) идентифицированное опорное изображение в начальном списке опорных изображений в текущие записи для построения модифицированного списка опорных изображений (138). Текущая запись изначально может являться записью в начальном списке опорных изображений, определенной под индексом 0. Для каждого экземпляра синтаксического элемента modification_of_ref_pic_idc в кодированном битовом потоке, где значение синтаксического элемента modification_of_ref_pic_idc не равно 3, видеокодер может увеличить на единицу значение начальной записи (например, следующее значение записи будет определяться индексом 1). Видеокодер может закодировать текущее изображение на основе модифицированного списка опорных изображений (140).
На фиг. 9 представлена блок-схема, иллюстрирующая примерную операцию удаления декодированных изображений. Исключительно в иллюстративных целях способ по фиг. 9 может быть выполнен видеокодером, соответствующим либо видеоэнкодеру 20, либо видеодекодеру 30. По аналогии с фиг. 5, видеокодер (например, видеоэнкодер 20 или видеодекодер 30) может кодировать (например, энкодировать или декодировать) информацию, указывающую опорные изображения из набора опорных изображений (142), и может получить набор опорных изображений из кодированной (например, кодированной или декодированной) информации (144).
Видеокодер может определить, необходим ли вывод декодированного изображения, запомненного в буфере декодированных изображений (DPB) (например, вывод уже был или вывод не предполагается) и оно не идентифицировано в наборе опорных изображений (146). Если требуется вывод данного декодированного изображения или оно идентифицировано в наборе опорных изображений («НЕТ» в блоке 146), то видеокодер может не удалять это декодированное изображение из буфера DPB и продолжать хранить это декодированное изображение в буфере DPB (148).
Если декодированное изображение уже было выведено, и оно не идентифицировано в наборе опорных изображений («ДА» в блоке 146), видеокодер может удалить это декодированное изображение из буфера DPB 150. Видеокодер может затем закодировать текущее изображение после удаления декодированного изображения (152).
Как было описано выше, видеокодер может построить список опорных изображений на основе набора опорных изображений для кодирвоания текущего изображения. В некоторых примерах видеокодер может удалить декодированное изображение из буфера DPB после построения списка опорных изображений. Кроме того, для выводимого декодированного изображения видеокодер может определить время вывода декодированного изображения и может вывести декодированное изображение на основе этого определенного времени, причем до кодирования текущего изображения.
В некоторых примерах видеокодер может запомнить кодированное (например, декодированное) изображение в буфере DPB. В некоторых примерах видеокодер может определить, что буфер DPB заполнен до упомянутого запоминания. В этих случаях видеокодер может выбрать декодированное изображение, запомненное в данный момент в буфере DPB, которое помечено как «нуждающееся в выводе», и имеющее минимальное значение счетчика очередности изображения среди всех декодированных изображений, хранящихся в буфере DPB. Затем видеокодер может вывести выбранное изображение. Кроме того, видеокодер может определить, что выведенное изображение не включено в набор опорных изображений текущего изображения. В этом случае видеокодер может очистить один буфер в DPB, где хранится выводимое изображение, и может запомнить это кодированное изображение в указанном буфере в DPB.
На фиг. 10 представлена блок-схема, иллюстрирующая примерную операцию определения того, какие долгосрочные опорные изображения относятся к набору опорных изображений текущего кадра. Исключительно в иллюстративных целях способ по фиг. 10 может выполняться видеокодером, соответствующим либо видеоэнкодеру 20, либо видеодекодеру 30.
Видеокодер (например, видеоэнкодер 20 или видеодекодер 30) может закодировать синтаксические элементы, указывающие возможные долгосрочные опорные изображения, идентифицированные в одном наборе параметров (154). В некоторых примерах к набору опорных изображений текущего кадра относится одно или несколько возможных долгосрочных опорных изображений. Согласно раскрытым здесь методикам, указанный набор параметров может представлять собой набор параметров последовательности или набор параметров изображения. В некоторых примерах для кодирования синтаксических элементов, которые указывают возможные долгосрочные опорные изображения, видеокодер может закодировать список значений POC для возможных долгосрочных опорных изображений в наборе параметров и закодировать значение индекса для списка в заголовке слайса текущего изображения.
Видеокодер может закодировать синтаксические элементы, которые указывают, какие возможные долгосрочные опорные изображения, идентифицированные в указанном наборе параметров, относятся к набору опорных изображений текущего изображения (156). Например, видеокодер может закодировать в заголовке слайса текущего изображения синтаксические элементы, указывающие, какие возможные долгосрочные опорные изображения относятся к набору опорных изображений.
В некоторых случаях не все долгосрочные опорные изображения, относящиеся к набору опорных изображений, включены во множество возможных долгосрочных опорных изображений. В этих случаях видеокодер может дополнительно закодировать синтаксические элементы, указывающие долгосрочные опорные изображения, относящиеся к данному набору опорных изображений (158). Затем видеокодер может построить по меньшей мере один из множества поднаборов опорных изображений на основе индикации о том, какие возможные долгосрочные опорные изображения относятся к упомянутому набору опорных изображений текущего изображения.
В вышеописанных примерах описаны различные случаи наряду с возможными альтернативами. Далее описываются некоторые дополнительные альтернативные варианты, которые можно рассматривать как альтернативы по отношению к одному или нескольким, описанным выше, примерам. Кроме того, эти альтернативные примеры можно использовать вместе с вышеописанными или отдельно от вышеописанных примеров.
Например, выше были описаны альтернативные примеры для концепции набора опорных изображений, альтернативные примеры для сигнализации о наборе опорных изображений в наборах параметров, альтернативные примеры поднаборов набора опорных изображений и альтернативные примеры маркировки опорных изображений. Далее описываются дополнительные альтернативные примеры.
Например, для заголовка блока NAL в вышеуказанных примерах заголовок блока NAL может включать в себя синтаксические элементы nal_ref_idc, temporal_id и output_flag. В одном альтернативном примере nal_ref_idc (2 бита) заменяется на nal_ref_flag (1 бит). В этом примере nal_ref_flag, равный 1, имеет семантику nal_ref_idc больше 0 и nal_ref_flag, равный 0, имеет такую же семантику, как nal_ref_idc, равный 0. В одном альтернативном примере nal_ref_idc (2 бита) удален. Определение опорного изображения может быть изменено следующим образом: это изображение, содержащее отсчеты, которые можно использовать для межкадрового предсказания в процессе декодирования последовательных изображений в порядке декодирования. В одном альтернативном примере temporal_id в синтаксисе заголовка блока NAL отсутствует, и его значение устанавливают таким образом, чтобы оно совпадало для всех изображений. В одном альтернативном примере в синтаксисе заголовка блока NAL отсутствует output_flag, и его значение устанавливают таким образом, чтобы оно было равно 1 для всех изображений.
При сигнализации и вычислении значения счетчика очередности изображения вышеописанные методики предусматривают использование одного варианта сигнализации и вычисления значения счетчика очередности изображения, который может быть аналогичен счетчику очередности изображения типа 0 в стандарте AVC. Можно использовать два альтернативных способа для сигнализации и вычисления значений счетчика очередности изображения, наподобие счетчика очередности изображения типа 1 и типа 2 соответственно в стандарте AVC. Также возможно применение любой комбинации, содержащей два из трех указанных подходов, или комбинации из всех трех указанных подходов.
Для идентификации изображения описанные методики предусматривают возможность использования значения счетчика очередности изображения (POC). В одном альтернативном примере в качестве идентификации изображения используют временную ссылку (TR). Один из вариантов определения TR состоит в следующем: TR совпадает со значением POC, когда POC ограничен так, что разность значений POC между любыми двумя изображениями пропорциональна разности времени представления или времени дискретизации. В одном альтернативном примере в качестве идентификации изображения можно использовать элемент frame_num, который указывает порядок декодирования (в то время как POC указывает порядок вывода или отображения) или переменная (например, под названием UnWrappedFrameNum), которая может иметь любое значение из числа 32-битовых целых значений без знака, полученных из frame_num. По существу UnWrappedFrameNum может представлять собой развернутую версию frame_num. Например, если frame_num представлен 8 битами, то максимальное значение frame_num составит 255. Следующим значением для frame_num после 255 будет 0. Значение UnWrappedFrameNum продолжает возрастать на позициях, где frame_num сворачивается до 0.
Для сигнализации о долгосрочных опорных изображениях в наборах параметров в вышеуказанных примерах видеоэнкодер 20 может в качестве сигнализации передать список абсолютных идентификационных данных о долгосрочных опорных изображениях в наборе параметров изображения, может передать информацию о длине в битах абсолютной идентификационной информации о долгосрочных опорных изображениях, а индекс для списка можно получить в заголовке слайса, что сокращает издержки на сигнализацию. В одном альтернативном примере список дифференциальной идентификационной информации о долгосрочных опорных изображениях может быть передан в наборе параметров последовательности, а индекс для списка можно получить из заголовка слайса, что сокращает издержки на сигнализацию. В одном альтернативном примере в качестве сигнализации может быть передана информация о длине (в битах) абсолютной идентификационной информации о долгосрочных опорных изображениях, но длина может считаться постоянной, например, равной 32. В разных случаях применяется комбинация из любых вышеописанных подходов.
В вышеуказанных примерах в случае сигнализации о краткосрочных опорных изображениях в наборе опорных изображений кодированного изображения вся информация передается либо в упомянутом наборе параметров изображения, либо вся информация передается в заголовке слайса. В одном альтернативном примере для краткосрочных опорных изображений в наборе опорных изображений кодированного изображения часть информации передается в упомянутом наборе параметров изображения, а остальное в заголовке слайса.
Что касается инициализации списка опорных изображений, то в одном альтернативном примере в процессе инициализации списка опорных изображений сначала в список могут быть добавлены краткосрочные опорные изображения, а затем, но не обязательно в этот список могут быть добавлены долгосрочные опорные изображения. После этого, если количество записей в этом списке опорных изображений (RefPicList0 или RefPicList1) все еще меньше, чем значение num_ref_idx_lx_active_minus1+l (lx равен 10 или 11), остальные записи могут быть помечены, как «не опорное изображение». В одном альтернативном примере также возможно, что, если список опорных изображений все еще не полный после добавления записей в RefPicSetStCurr0 и RefPicSetStCurr1, и возможно долгосрочных опорных изображений, то могут быть добавлены изображения из RefPicSetStFoll0 и/или RefPicSetStFoll1. В одном альтернативном примере в процессе инициализации списка опорных изображений в него возможно добавление только краткосрочных опорных изображений. В указанном случае в список опорных изображений может быть добавлено только одно долгосрочное опорное изображение путем использования команд модификации списка опорных изображений, переданных в синтаксической таблице модификации списка опорных изображений (RPLM).
Что касается модификации списка опорных изображений, то в одном альтернативном примере при модификации списка опорных изображений в качестве сигнализации также может передаваться ref_pic_set_idx в дифференциальном виде, когда предыдущий индекс используется в качестве прогностического параметра текущего индекса. В этом примере разные значения modification_of_ref_pic_idc могут соответствовать разным категориям индексации (RefPicSetStCurrx для RefPicListx, RefPicSetStCurrx для RefPicList(l-x), или RefPicSetLtCurr), каждая из которых поддерживает разный прогностический параметр. Прогностический параметр может обновляться каждый раз, когда анализируется синтаксический элемент, относящийся к одной и той же категории. В одном альтернативном примере модификации списков опорных изображений могут базироваться на разнице в параметрах изображений. В одном альтернативном примере модификации списков опорных изображений могут базироваться на разнице в значениях POC.
Что касается операций с буфером декодированных изображений (DPB), то в вышеописанном примере текущее декодированное изображение запоминается в буфере DPB после декодирования текущего изображения и перед анализом заголовка слайса следующего кодированного изображения в порядке декодирования. В одном альтернативном примере текущее декодированное изображение запоминается во временной памяти (не в буфере DPB) после декодирования текущего изображения, но перед анализом заголовка слайса следующего кодированного изображения в порядке декодирования. Оно запоминается в буфере DPB после анализа заголовка слайса следующего кодированного изображения в порядке декодирования и построения набора опорных изображений данного изображения, если это еще необходимо для вывода или использования в качестве опорного изображения. В этот момент, если необходимость в выводе или использовании в качестве опорного изображения отпала, это декодированное изображение может быть просто отброшено (удалено из временного буфера).
Также в вышеуказанных примерах удаление декодированного изображения из буфера DPB происходит немедленно после анализа заголовка слайса текущего изображения и перед декодированием какого-либо слайса текущего изображения. В одном альтернативном примере маркировка, если она имеет место и удаление декодированного изображения из буфера DPB происходит после того, как текущее изображение будет полностью декодировано.
В вышеописанных примерах поднаборы RefPicSetStCurr0 и RefPicSetStCurrl набора опорных изображений для текущего изображения получают для всех декодированных изображений. Однако это не обязательно для изображения с внутрикадровым предсказанием. Что касается получения набора опорных изображений с внутрикадровым кодированием, то в одном альтернативном примере для изображения (не являющегося IDR изображением) с внутрикадровым кодированием (то есть, все слайсы этого кодированного изображения являются I слайсами), RefPicSetStCurr0 и RefPicSetStCurr1 не получают, и несмотря на то, что они не являются пустыми после получения, для них не требуется декодирование кодированного изображения. Наличие не пустого RefPicSetStCurr0 или RefPicSetStCurr1 для изображения с внутрикадровым кодированием, не являющегося IDR изображением, позволяет совместно использовать синтаксическую структуру short_term_ref_pic_set( ) одного или нескольких изображений с межкадровым кодированием, для которых RefPicSetStCurr0 и RefPicSetStCurr1 могут оба не быть пустыми.
Что касается обнаружения потерь, то возможны следующие различные способы обнаружения потери опорного изображения или раннего определения того, правильно ли может быть декодировано текущее изображение. В различных примерах после получения набора опорных изображений видеодекодер 30 (например, на стороне декодера) может проверить наличие опорных изображений, включенных в RefPicSetStCurr0, RefPicSetStCurr1 и RefPicSetLtCurr. Если какое-либо из опорных изображений, включенных в RefPicSetStCurr0, RefPicSetStCurr1 и RefPicSetLtCurr, в буфере DPB отсутствует, то на стороне декодера можно заключить, что опорное изображение было потеряно, и что текущее изображение скорее всего будет декодировано неправильно, и возможно следует предпринять какое-либо действие для исправления ситуации, например, уведомить сторону кодера (например, видеоэнкодер 20) о потере (потерях) изображения, и тогда кодер может повторно передать потерянное опорное изображение (изображения) или закодировать следующее изображение (изображения), используя только те опорные изображения, о которых на стороне декодера известно, что они подходят в качестве опорных изображений для межкадрового предсказания.
В различных примерах после получения набора опорных изображений на стороне декодера можно провести проверку наличия опорных изображений включенных в RefPicSetStFoll0, RefPicSetStFoll1 и RefPicSetLtFoll. Если какое-либо из опорных изображений, включенных в RefPicSetStFoll0, RefPicSetStFoll1 и RefPicSetLtFoll в буфере DPB отсутствует, то на стороне декодера можно сделать вывод о том, что это опорное изображение было потеряно, и что некоторые из последующих изображений в порядке декодирования скорее всего будут декодированы неправильно, пока не будут предприняты те или иные меры, и можно предпринять определенное действие для устранения этой ситуации, например, уведомить сторону кодера о потере (потерях) изображения, и тогда кодер может повторно передать потерянное опорное изображение (изображения) или закодировать следующее изображение (изображения), используя только те опорные изображения, о которых на стороне декодера известно, что они подходят в качестве опорного изображения для межкадрового предсказания.
В вышеуказанных примерах, если на стороне кодера (например, видеоэнкодера 20) имеется композиция наборов опорных изображений, то для такой композиции наборов опорных изображений на стороне кодера можно использовать следующие различные способы. Например, в разных случаях кодер составляет синтаксические структуры, относящиеся к наборам опорных изображений, так что после получения набора опорных изображений на стороне декодера для текущего изображения: (1) RefPicSetStCurr0 включает в себя только идентификационную информацию обо всех краткосрочных опорных изображениях, которые выводятся раньше текущего изображения, и которые используются в качестве опорных при межкадровом предсказании текущего изображения; (2) RefPicSetStCurr1 включает в себя только идентификационную информацию обо всех краткосрочных опорных изображениях, которые выводятся позже, чем текущее изображение, и которые используют в качестве опорных при межкадровом предсказании текущего изображения; и (3) RefPicSetLtCurr включает в себя только идентификационную информацию обо всех долгосрочных опорных изображениях, которые используют в качестве опорных при межкадровом предсказании текущего изображения.
В различных примерах кодер (например, видеоэнкодер 20) может составить набор опорных изображений, относящийся к синтаксическим структурам, так что после получения набора опорных изображений на стороне декодера для текущего изображения: (1) RefPicSetStCurr0 включает в себя только идентификационную информацию о 1) всех краткосрочных опорных изображениях, которые выводятся раньше, чем текущее изображение, и которые используют в качестве опорных при межкадровом предсказании текущего изображения, а также идентификационную информацию о 2) одном или нескольких краткосрочных опорных изображений, которые выводятся раньше, чем текущие изображения, и которые не используют в качестве опорных при межкадровом предсказании текущего изображения; (2) RefPicSetStCurr1 включает в себя только идентификационную информацию о 1) всех краткосрочных опорных изображениях, которые выводятся позже, чем текущее изображение, и которые используют в качестве опорных при межкадровом предсказании текущего изображения, а также об 2) одном или нескольких краткосрочных опорных изображениях, которые выводятся позднее, чем текущее изображение, и которые не используют в качестве опорных при межкадровом предсказании текущего изображения, и RefPicSetLtCurr включает в себя только идентификационную информацию о 1) всех долгосрочных опорных изображениях, которые используют в качестве опорных при межкадровом предсказании текущего изображения, а также о 2) одном или нескольких долгосрочных изображениях, которые не используют в качестве опорных при межкадровом предсказании текущего изображения.
Таким образом, вышеописанные отдельные методики или любые их комбинации, включая любую комбинацию из альтернативных примеров, могут обеспечить выполнение нижеследующего. Однако указанный ниже список приведен лишь для облегчения понимания, и его не следует рассматривать как ограничение. Одна или несколько из вышеописанных методик могут быть реализованы вместе или по отдельности. Кроме того, это методики есть не что иное, как примеры, и их не следует рассматривать как ограничение применительно к конкретным методикам.
Ограничения на temporal_id для набора опорных изображений, например, состоящее в том, что способы управления буфером DPB хорошо подходят для масштабируемости во времени, издержки на сигнализацию могут быть сокращены, и может быть реализован простой процесс извлечения битового потока для очищенных извлеченных поднаборов битового потока.
Поднаборы долгосрочных опорных изображений, передаваемые в качестве сигнализации в наборе опорных изображений, и индекс могут быть включены в заголовок слайса. Это может обеспечить эффективную сигнализацию, касающуюся долгосрочных изображений.
Разбиение набора опорных изображений на различные поднаборы, в том числе разделение для текущего изображения или для последующих изображений в порядке декодирования, причем это разделение для тех изображений, вывод которых выполняется раньше или позже, чем текущее изображение. Это может обеспечить повышенную эффективность и уменьшить сложность инициализации списка опорных изображений и модификацию списка опорных изображений.
Двойное дифференциальное кодирование при сигнализации, касающееся идентификации краткосрочных изображений, может обеспечить повышение эффективности. Расширенная и ограниченная идентификация краткосрочных изображения может повысить эффективность и гибкость системы. Упрощенная инициализация списка опорных изображений может устранить необходимость маркировки незавершенных записей в списке опорных изображений, как «не являющихся опорными изображениями»; однако это не обязательно для всех случаев.
Упрощенные процессы для вывода декодированных изображений, ввода в буфер DPB и удаление из буфера DPB. Счетчик очередности изображения (POC) может быть обратным. Это позволяет реализовать ряд важных случаев использования, которые были бы невозможны, если POC не мог работать а режиме обратного счета. Сигнализация о том, является ли изображение опорным изображением, в процессе декодирования может оказаться необязательной, хотя ее возможность может сохраняться. Маркировка опорных изображений как «не используемых в качестве опорных» может оказаться необязательной.
В одном или нескольких примерах описанные функции могут быть реализованы аппаратными средствами, программными средствами, программно-аппаратными средствами или любой их комбинацией. При реализации программными средствами эти функции могут храниться или передаваться в виде одной или нескольких команд или кода на считываемом компьютером носителе и выполняться обрабатывающим аппаратным блоком. Считываемая компьютером среда может включать в себя считываемую компьютером запоминающую среду, которая может соответствовать материальному носителю, такому как среда хранения данных или среда передачи, включая любой носитель, который позволяет обеспечить пересылку компьютерной программы из одного места в другое, например, согласно какому-либо протоколу связи. В этом аспекте считываемая компьютером среда в общем случае может соответствовать (1) материальной считываемой компьютером запоминающей среде, которая обеспечивает долговременное хранение, или (2) среде связи, такой как сигнал или несущая волна. Средой для запоминания данных может служить любая доступная среда, доступ к которой может осуществляться одним или несколькими компьютерами или одним или несколькими процессорами для извлечения команд, кодирования, и/или со стороны структур данных для реализации раскрытых в этом изобретении методик. Компьютерный программный продукт может включать в себя считываемый компьютером носитель.
В качестве примера, но не как ограничение, указанная считываемая компьютером запоминающая я среда может содержать RAM, ROM, EEPROM, CD-ROM или другое запоминающее устройство на оптических дисках, запоминающее устройство на магнитных дисках или другие магнитные запоминающее устройства, флэш-память, или любой другой носитель, который можно использовать для запоминания требуемого программного кода в виде команд или структур данных, и к которым может иметь доступ компьютер. Также любое соединение будет правильно назвать считываемой компьютером средой. Например, если команды передаются с Web-сайта, сервера или другого удаленного источника с использованием коаксиального кабеля, оптоволоконного кабеля, скрученной пары, цифровой абонентской линии (DSL) или беспроводных технологий, таких как инфракрасная связь, радиосвязь и микроволновая связь, то тогда коаксиальный кабель, оптоволоконный кабель, скрученная пара, линии DSL или такие беспроводные технологии, как инфракрасная связь, радиосвязь и микроволновая связь, входят в определение среды. Однако следует понимать, что термины: «считываемая компьютером запоминающая среда» и «среда для хранения данных» не включают в себя соединения, несущие волны, сигналы или другие несущие, а относятся к долговременной материальной запоминающей среде. Используемый здесь термин «disc» (диск) относится к компакт-диску (CD), лазерному диску, оптическому диску, цифровому универсальному диску (DVD), и диску Blu-ray, воспроизводящих данные оптическим путем с использованием лазеров, в то время как термин «disk» (диск) обычно относится к дискам, воспроизводящим данные магнитным путем. В понятие считываемой компьютером среды также следует отнести комбинации из вышеперечисленного.
Команды могут выполняться одним или несколькими процессорами, такими как один или несколько цифровых процессоров сигналов (DSP), микропроцессоров общего назначения, прикладных специализированных интегральных схем (ASIC), логических матриц, программируемых пользователем (FPGA) или других эквивалентных интегральных или дискретных логических схем. Соответственно, используемый здесь термин «процессор» может относиться к любой из вышеописанных структур или любой иной структуре, подходящей для реализации вышеописанных методик. Вдобавок, в некоторых аспектах описанные здесь функциональные возможности могут быть обеспечены в рамках специализированных аппаратных и/или программных модулей, сконфигурированных для энкодирования и декодирования, или включенных в состав комбинированного кодека. Также раскрытые здесь методики можно полностью реализовать в одной или нескольких схемах или логических элементах.
Раскрытые здесь методики могут быть реализованы в самых разных устройствах или установках, включая беспроводную телефонную трубку, интегральную схему (IC) или набор интегральных схем (например, микропроцессорный набор). Различные компоненты, модули или блоки описаны здесь таким образом, чтобы подчеркнуть функциональные аспекты устройств, сконфигурированных для выполнения раскрытых здесь методик, причем для этого не требуется их реализация с помощью различных аппаратных блоков. Скорее наоборот, как обсуждалось выше, различные блоки могут быть скомбинированы в аппаратном блоке-кодеке или обеспечены в виде набора взаимодействующих аппаратных блоков, включая один или несколько процессоров, как было описано выше, в сочетании с подходящим программным и/или программно-аппаратным обеспечением.
Здесь были описаны различные примеры. Эти и другие примеры входят в объем нижеследующей формулы изобретения.