КОДИРОВАНИЕ МЛАДШИХ ЗНАЧАЩИХ БИТОВ ЗНАЧЕНИЙ СЧЕТА ПО ПОРЯДКУ КАРТИНКИ, ИДЕНТИФИЦИРУЮЩИХ ДОЛГОСРОЧНЫЕ ОПОРНЫЕ КАРТИНКИ
CODING OF LEAST SIGNIFICANT BITS OF COUNT VALUES ON PICTURE ORDER, IDENTIFYING LONG-TERM REFERENCE PICTURES

[0001] Настоящая заявка испрашивает приоритет предварительной заявки на патент США № 61/566,359, поданной 2 декабря 2011, предварительной заявки на патент США № 61/589,295, поданной 20 января 2012 и предварительной заявки на патент США № 61/624,933, поданной 16 апреля 2012, все содержимое которых каждой тем самым включено по ссылке в их соответствующей полноте.
ОБЛАСТЬ ТЕХНИКИ
[0002] Настоящее раскрытие относится к кодированию видео.
УРОВЕНЬ ТЕХНИКИ
[0003] Цифровые возможности видео могут быть включены в широкий диапазон устройств, включая цифровые телевизоры, цифровые системы прямого вещания, беспроводные системы вещания, персональные цифровые помощники (PDA), портативные или настольные компьютеры, цифровые камеры, цифровые устройства регистрации, цифровые медиаплееры, видео игровые устройства, пульты видеоигр, сотовые или спутниковые радио-телефоны, видеоустройства организации телеконференций, и т.п. Стандарты кодирования видео включают в себя 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). Последний объединенный проект MVC описан в “Advanced video coding for generic audiovisual services”, Рекомендация H.264 ITU-T, март 2010.
[0004] Способы сжатия видео выполняют пространственное предсказание и/или временное предсказание, чтобы уменьшить или удалить избыточность, присущую видеопоследовательностям. Для основанного на блоке кодирования видеокадр или вырезка видео могут быть разделены на блоки. Каждый блок может быть далее разделен. Блоки во внутренне кодированном (I) кадре или вырезке кодируют, используя пространственное предсказание относительно соседних блоков. Блоки во внешне кодированном (P или B) кадре или вырезке могут использовать пространственное предсказание относительно соседних блоков в том же самом кадре или вырезке или временное предсказание относительно других опорных кадров.
[0005] Были предприняты усилия, чтобы развить новые стандарты кодирования видео на основании H.264/AVC. Одним таким стандартом является стандарт масштабируемого кодирования видео (SVC), который является масштабируемым расширением к H.264/AVC. Другим стандартом является стандарт кодирования видео множественных видов (MVC), который стал расширением множественных видов к H.264/AVC. Объединенный проект MVC описан в JVT-AB204, “Joint Draft 8.0 on Multiview Video Coding,” 28th JVT meeting, Hannover, Germany, July 2008, доступном по http://wftp3.itu.int/av-arch/jvt-site/2008_07_Hannover/JVT-AB204.zip. Версия стандарта AVC описана в JVT-AD007, “Editors' draft revision to ITU-T Rec. H.264 | ISO/IEC 14496-10 Advanced Video Coding - in preparation for ITU-T SG 16 AAP Consent (in integrated form),” 30th JVT meeting, Geneva, CH, Feb. 2009”, доступном по <http://wftp3.itu.int/av-arch/jvt-site/2009_01_Geneva/JVT-AD007.zip>. Этот документ интегрирует SVC и MVC в спецификации AVC.
СУЩНОСТЬ ИЗОБРЕТЕНИЯ
[0006] В целом описаны способы, которые обеспечивают различные способы для выведения набора опорных картинок (RPS) и сигнализации долгосрочных опорных картинок (LTRPs), которые должны быть включены в RPS закодированной картинки для использования при выполнении аспектов внешнего предсказания кодирования видео.
[0007] В одном примере способ кодирования видеоданных содержит определение, для текущей картинки видеоданных, долгосрочной опорной картинки, которая должна использоваться при кодировании по меньшей мере части текущей картинки видеоданных, и определение количества битов, которые должны быть использованы для представления одного или более младших значащих битов значения счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку в потоке битов, представляющем закодированную версию видеоданных. Способ далее содержит задание одного или более младших значащих битов значения счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку в потоке битов, используя определенное количество битов, использованных для представления одного или более младших значащих битов значения счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку и кодирование по меньшей мере части текущей картинки, используя долгосрочную опорную картинку.
[0008] В другом примере устройство кодирования видео, конфигурируемое, чтобы закодировать видеоданные, содержит один или более процессоров, сконфигурированных, чтобы определить, для текущей картинки видеоданных, долгосрочную опорную картинку, которая должна использоваться при кодировании по меньшей мере части текущей картинки видеоданных, определить количество битов, которые должны быть использованы для представления одного или более младших значащих битов значения счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку в потоке битов, представляющем закодированную версию видеоданных, задавать один или более младших значащих битов значения счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку в потоке битов, используя определенное количество битов, использованных для представления одного или более младших значащих битов значения счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку, и кодировать по меньшей мере часть текущей картинки, используя долгосрочную опорную картинку.
[0009] В другом примере устройство кодирования видео для кодирования видеоданных содержит средство для определения, для текущей картинки видеоданных, долгосрочной опорной картинки, которая должна использоваться при кодировании по меньшей мере части текущей картинки видеоданных и средство для определения количества битов, которые должны быть использованы для представления одного или более младших значащих битов значения счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку в потоке битов, представляющем закодированную версию видеоданных. Устройство кодирования видео далее содержит средство для задания одного или более младших значащих битов значения счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку в потоке битов, используя определенное количество битов, использованных для представления одного или более младших значащих битов значения счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку, и средство для кодирования по меньшей мере части текущей картинки, используя долгосрочную опорную картинку.
[0010] В другом примере невременный считываемый компьютером запоминающий носитель имеет сохраненные на нем инструкции, которые, когда выполняются, вынуждают один или более процессоров устройства кодирования видео, определить, для текущей картинки видеоданных, долгосрочную опорную картинку, которая должна использоваться при кодировании по меньшей мере части текущей картинки видеоданных, определять количество битов, которые должны быть использованы для представления одного или более младших значащих битов значения счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку в потоке битов, представляющем закодированную версию видеоданных, задавать один или более младших значащих битов значения счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку в потоке битов, используя определенное количество битов, использованных для представления одного или более младших значащих битов значения счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку, и кодировать по меньшей мере часть текущей картинки, используя долгосрочную опорную картинку.
[0011] В другом примере способ декодирования закодированных видеоданных содержит определение, для текущей картинки закодированных видеоданных, количество битов, использованных для представления одного или более младших значащих битов значения счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку, которая должна использоваться при декодировании по меньшей мере части текущей картинки, и синтаксический разбор определенного количества битов из потока битов, представляющего закодированные видеоданные, в котором синтаксически разобранное определенное количество битов представляет один или более младших значащих битов значения счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку. Способ далее содержит извлечение долгосрочной опорной картинки из буфера декодированных картинок на основании младших значащих битов значения счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку, и декодирование по меньшей мере части текущей картинки, используя извлеченную долгосрочную опорную картинку.
[0012] В другом примере устройство декодирования видео для декодирования закодированных видеоданных содержит один или более процессоров, сконфигурированных, чтобы определить, для текущей картинки закодированных видеоданных, количество битов, использованных для представления одного или более младших значащих битов значения счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку, которая должна использоваться при декодировании по меньшей мере части текущей картинки, синтаксически разбирать определенное количество битов из потока битов, представляющего закодированные видеоданные, в котором синтаксически разобранное определенное количество битов представляет один или более младших значащих битов значения счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку, извлекать долгосрочную опорную картинку из буфера декодированных картинок на основании младших значащих битов значения счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку, и декодировать по меньшей мере часть текущей картинки, используя извлеченную долгосрочную опорную картинку.
[0013] В другом примере устройство декодирования видео для декодирования закодированных видеоданных содержит средство для определения, для текущей картинки закодированных видеоданных, количества битов, использованных для представления одного или более младших значащих битов значения счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку, которая должна использоваться при декодировании по меньшей мере части текущей картинки, и средство для синтаксического разбора определенного количества битов из потока битов, представляющего закодированные видеоданные, в котором синтаксически разобранное определенное количество битов представляет один или более младших значащих битов значения счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку. Устройство декодирования видео также содержит средство для извлечения долгосрочной опорной картинки из буфера декодированных картинок на основании младших значащих битов значения счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку, и средство для декодирования по меньшей мере части текущей картинки, используя извлеченную долгосрочную опорную картинку.
[0014] В другом примере невременный считываемый компьютером запоминающий носитель, имеющий сохраненные на нем инструкции, которые, когда выполняются, вынуждают один или более процессоров устройства декодирования видео определить, для текущей картинки закодированных видеоданных, количество битов, использованных для представления одного или более младших значащих битов значения счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку, которая должна использоваться при декодировании по меньшей мере части текущей картинки, синтаксически разбирать определенное количество битов из потока битов, представляющего закодированные видеоданные, в котором синтаксически разобранное определенное количество битов представляет один или более младших значащих битов значения счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку, извлекать долгосрочную опорную картинку из буфера декодированных картинок на основании младших значащих битов значения счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку, и декодировать по меньшей мере часть текущей картинки, используя извлеченную долгосрочную опорную картинку.
[0015] В другом примере способ кодирования видеоданных содержит определение, для текущей картинки видеоданных, одного или более младших значащих битов значения счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку, которая должна использоваться при кодировании по меньшей мере части текущей картинки, и когда один или более младших значащих битов любых других значений счета по порядку картинки, которые идентифицируют любую другую картинку, сохраненную в буфере декодированных картинок, в котором также сохранена долгосрочная опорная картинка, являются такими же как определенные один или более младших значащих битов значения счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку, определение одного или более старших значащих битов значения счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку, которая должна использоваться при кодировании по меньшей мере части текущей картинки. Количество одного или более младших значащих битов, когда добавляются к количеству из одного или более старших значащих битов, приводят к сумме, которая является меньшей, чем общее количество битов для задания значения счета по порядку картинки. Способ также содержит задание как определенного одного или более младших значащих битов, так и определенного одного или более старших значащих битов значения счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку, которая должна использоваться при кодировании по меньшей мере части текущей картинки в потоке битов, представляющем закодированную версию видеоданных, и кодирование по меньшей мере часть текущей картинки, используя долгосрочную опорную картинку.
[0016] В другом примере устройство кодирования видео для кодирования видеоданных, причем устройство кодирования видео содержит один или более процессоров, сконфигурированных, чтобы определить, для текущей картинки видеоданных, один или более младших значащих битов значения счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку, которая должна использоваться при кодировании по меньшей мере части текущей картинки, когда один или более младших значащих битов любых других значений счета по порядку картинки, которые идентифицируют любую другую картинку, сохраненную в буфере декодированных картинок, в котором также сохранена долгосрочная опорная картинка, являются такими же как определенные один или более младших значащих битов значения счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку, определять один или более старших значащих битов значения счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку, которая должна использоваться при кодировании по меньшей мере части текущей картинки, при этом количество из одного или более младших значащих битов, когда добавляются к количеству из одного или более старших значащих битов, приводят к сумме, которая является меньшей, чем общее количество битов для задания значения счета по порядку картинки, задавать как определенные один или более младших значащих битов, так и определенные один или более старших значащих битов значения счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку, которая должна использоваться при кодировании по меньшей мере части текущей картинки в потоке битов, представляющем закодированную версию видеоданных, и кодировать по меньшей мере часть текущей картинки, используя долгосрочную опорную картинку.
[0017] В другом примере устройство кодирования видео для кодирования видеоданных содержит средство для определения, для текущей картинки видеоданных, одного или более младших значащих битов значения счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку, которая должна использоваться при кодировании по меньшей мере части текущей картинки, и когда один или более младших значащих битов любых других значений счета по порядку картинки, которые идентифицируют любую другую картинку, сохраненную в буфере декодированных картинок, в котором также сохранена долгосрочная опорная картинка, являются такими же как определенные один или более младших значащих битов значения счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку, средство для определения одного или более старших значащих битов значения счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку, которая должна использоваться при кодировании по меньшей мере части текущей картинки, при этом количество из одного или более младших значащих битов, когда добавляются к количеству из одного или более старших значащих битов, приводят к сумме, которая является меньшей, чем общее количество битов для задания значения счета по порядку картинки. Устройство кодирования видео также содержит средство для задания как определенного одного или более младших значащих битов, так и определенного одного или более старших значащих битов значения счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку, которая должна использоваться при кодировании по меньшей мере части текущей картинки в потоке битов, представляющем закодированную версию видеоданных, и средство для кодирования по меньшей мере части текущей картинки, используя долгосрочную опорную картинку.
[0018] В другом примере невременный считываемый компьютером запоминающий носитель имеет сохраненные на нем инструкции, которые, когда выполняются, вынуждают один или более процессоров устройства кодирования видео определять, для текущей картинки видеоданных, один или более младших значащих битов значения счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку, которая должна использоваться при кодировании по меньшей мере части текущей картинки, когда один или более младших значащих битов любых других значений счета по порядку картинки, которые идентифицируют любую другую картинку, сохраненную в буфере декодированных картинок, в котором также сохранена долгосрочная опорная картинка, являются такими же как определенные один или более младших значащих битов значения счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку, определять один или более старших значащих битов значения счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку, которая должна использоваться при кодировании по меньшей мере части текущей картинки, при этом количество из одного или более младших значащих битов, когда добавляются к количеству из одного или более старших значащих битов, приводит к сумме, которая является меньшей, чем общее количество битов для задания значения счета по порядку картинки, задавать как определенные один или более младших значащих битов, так и определенные один или более старших значащих битов значения счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку, которая должна использоваться при кодировании по меньшей мере части текущей картинки в потоке битов, представляющем закодированную версию видеоданных, и кодировать по меньшей мере часть текущей картинки, используя долгосрочную опорную картинку.
[0019] В другом примере способ декодирования закодированных видеоданных содержит определение, для текущей картинки закодированных видеоданных, одного или более младших значащих битов значения счета по порядку картинки, которые идентифицируют долгосрочную опорную картинку, которая должна использоваться при декодировании по меньшей мере части текущей картинки. Один или более младших значащих битов уникально не идентифицируют значение счета по порядку картинки долгосрочной опорной картинки относительно одного или более младших значащих битов любого другого значения счета по порядку картинки, которое идентифицирует любую другую картинку, присутствующую в буфере декодированных картинок, в котором также сохранена долгосрочная опорная картинка. Кроме того, количество из одного или более младших значащих битов, когда добавляются к количеству из одного или более старших значащих битов, приводят к сумме, которая является меньшей, чем общее количество битов для задания значения счета по порядку картинки. Способ далее содержит определение одного или более старших значащих битов значения счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку, при этом один или более старших значащих битов в комбинации с определенным одним или более младшими значащими битами достаточны, чтобы отличить значение счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку, от любого другого значения счета по порядку картинки, которое идентифицирует любую другую картинку в буфере декодированных картинок. Дополнительно, способ содержит извлечение долгосрочной опорной картинки из буфера декодированных картинок на основании определенного одного или более младших значащих битов значения счета по порядку картинки и определенного одного или более старших значащих битов значения счета по порядку картинки, и декодирование по меньшей мере части текущей картинки, используя извлеченную долгосрочную опорную картинку.
[0020] В другом примере устройство декодирования видео для декодирования закодированных видеоданных содержит один или более процессоров, сконфигурированных, чтобы определить, для текущей картинки закодированных видеоданных, один или более младших значащих битов значения счета по порядку картинки, которые идентифицируют долгосрочную опорную картинку, которая должна использоваться при декодировании по меньшей мере части текущей картинки, в котором один или более младших значащих битов уникально не идентифицируют значение счета по порядку картинки долгосрочной опорной картинки относительно одного или более младших значащих битов любого другого значения счета по порядку картинки, которое идентифицирует любую другую картинку, присутствующую в буфере декодированных картинок, в котором долгосрочная опорная картинка также сохранена, и при этом количество из одного или более младших значащих битов, когда добавляется к количеству из одного или более старших значащих битов, приводит к общему числу, которое является меньшим, чем общее количество битов для задания значения счета по порядку картинки, определять один или более старших значащих битов значения счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку, в котором один или более старших значащих битов в комбинации с определенным одним или более младшими значащими битами достаточны, чтобы отличить значение счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку, от любого другого значения счета по порядку картинки, которое идентифицирует любую другую картинку в буфере декодированных картинок, извлекать долгосрочную опорную картинку из буфера декодированных картинок на основании определенного одного или более младших значащих битов значения счета по порядку картинки и определенного одного или более старших значащих битов значения счета по порядку картинки, и декодировать по меньшей мере часть текущей картинки, используя извлеченную долгосрочную опорную картинку.
[0021] В другом примере устройство декодирования видео для декодирования закодированных видеоданных содержит средство для определения, для текущей картинки закодированных видеоданных, одного или более младших значащих битов значения счета по порядку картинки, которые идентифицируют долгосрочную опорную картинку, которая должна использоваться при декодировании по меньшей мере части текущей картинки, в котором один или более младших значащих битов уникально не идентифицируют значение счета по порядку картинки долгосрочной опорной картинки относительно одного или более младших значащих битов любого другого значения счета по порядку картинки, которое идентифицирует любую другую картинку, присутствующую в буфере декодированных картинок, в котором долгосрочная опорная картинка также сохранена, и при этом количество из одного или более младших значащих битов, когда добавляется к количеству из одного или более старших значащих битов, приводит к общему числу, которое является меньшим, чем общее количество битов для задания значения счета по порядку картинки. Устройство декодирования видео также содержит средство для определения одного или более старших значащих битов значения счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку, в котором один или более старших значащих битов в комбинации с определенным одним или более младшими значащими битами достаточны, чтобы отличить значение счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку, от любого другого значения счета по порядку картинки, которое идентифицирует любую другую картинку в буфере декодированных картинок. Дополнительно, устройство декодирования видео содержит средство для извлечения долгосрочной опорной картинки из буфера декодированных картинок на основании определенного одного или более младших значащих битов значения счета по порядку картинки и определенного одного или более старших значащих битов значения счета по порядку картинки, и средство для декодирования по меньшей мере части текущей картинки, используя извлеченную долгосрочную опорную картинку.
[0022] В другом примере невременный считываемый компьютером запоминающий носитель имеет сохраненные на нем инструкции, которые, когда выполняются, вынуждают один или более процессоров устройства декодирования видео определить, для текущей картинки закодированных видеоданных, один или более младших значащих битов значения счета по порядку картинки, которые идентифицируют долгосрочную опорную картинку, которая должна использоваться при декодировании по меньшей мере части текущей картинки, в котором один или более младших значащих битов уникально не идентифицируют значение счета по порядку картинки долгосрочной опорной картинки относительно одного или более младших значащих битов любого другого значения счета по порядку картинки, которое идентифицирует любую другую картинку, присутствующую в буфере декодированных картинок, в котором долгосрочная опорная картинка также сохранена, и в котором количество из одного или более младших значащих битов, когда добавляется к количеству из одного или более старших значащих битов, приводит к сумме, которая является меньшей, чем общее количество битов для задания значения счета по порядку картинки, определять один или более старших значащих битов значения счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку, в котором один или более старших значащих битов в комбинации с определенным одним или более младшими значащими битами достаточны, чтобы отличить значение счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку, от любого другого значения счета по порядку картинки, которое идентифицирует любую другую картинку в буфере декодированных картинок, извлекать долгосрочную опорную картинку из буфера декодированных картинок на основании определенного одного или более младших значащих битов значения счета по порядку картинки и определенного одного или более старших значащих битов значения счета по порядку картинки, и декодировать по меньшей мере часть текущей картинки, используя извлеченную долгосрочную опорную картинку.
[0023] Детали одного или более аспектов раскрытия сформулированы в прилагаемых чертежах и описании ниже. Другие признаки, задачи и преимущества способов, описанных в настоящем раскрытии, будут очевидны из описания и чертежей, и из формулы изобретения.
КРАТКОЕ ОПИСАНИЕ ЧЕРТЕЖЕЙ
[0024] ФИГ. 1 является блок-схемой, иллюстрирующей примерную систему кодирования и декодирования видео, которая может использовать способы для кодирования видеоданных.
[0025] ФИГ. 2 является блок-схемой, иллюстрирующей пример видеокодера, который может реализовать способы для кодирования видеоданных.
[0026] ФИГ. 3 является блок-схемой, иллюстрирующей пример видеодекодера, который декодирует закодированную видеопоследовательность.
[0027] ФИГ. 4 является последовательностью операций, иллюстрирующей примерную операцию видеокодера при выполнении первого аспекта способов, описанных в настоящем раскрытии.
[0028] ФИГ. 5 является последовательностью операций, иллюстрирующей примерную операцию видеодекодера при выполнении первого аспекта способов, описанных в настоящем раскрытии.
[0029] ФИГ. 6 является последовательностью операций, иллюстрирующей примерную операцию видеокодера при выполнении второго аспекта способов, описанных в настоящем раскрытии.
[0030] ФИГ. 7 является последовательностью операций, иллюстрирующей примерную операцию видеодекодера при выполнении второго аспекта способов, описанных в настоящем раскрытии.
ДЕТАЛЬНОЕ ОПИСАНИЕ
[0031] В целом описаны способы, которые обеспечивают различные способы для выведения набора опорных картинок (RPS) и сигнализации долгосрочных опорных картинок (LTRPs), которые должны быть включены в RPS закодированной картинки для использования при выполнении аспектов внешнего предсказания кодирования видео. Например, кодировщик видео (который является термином, который может относится к одному или обоим из видеокодера и видеодекодера) включает в себя буфер декодированных картинок (DPB). DPB хранит опорные картинки, которые являются картинками, которые могут быть использованы для того, чтобы внешне предсказать картинку. Другими словами, кодировщик видео может предсказать картинку на основании одной или более опорных картинок, сохраненных в DPB.
[0032] Видеодекодеру может быть также задана работа с построением списков опорных картинок, которые указывают, какие опорные картинки используются в целях внешнего предсказания. Два из этих списков опорных картинок упоминаются как Список 0 и Список 1, соответственно. Видеодекодер сначала использует способы построения по умолчанию, чтобы построить Список 0 и Список 1 (например, предварительно сконфигурированные схемы построения для построения Списка 0 и Списка 1). Необязательно, после того, как начальный Список 0 и Список 1 построены, декодер может декодировать элементы синтаксиса, когда присутствуют, которые инструктируют видеодекодер модифицировать начальные Список 0 и Список 1.
[0033] Видеокодер может сигнализировать элементы синтаксиса, которые являются указывающими идентификатор(ы) опорных картинок в DPB, и видеокодер может также сигнализировать элементы синтаксиса, которые включают в себя индексы, в пределах Списка 0, Список 1, или обоих Списка 0 и Список 1, которые указывают какую опорную картинку или картинки использовать, чтобы декодировать закодированный блок текущей картинки. Видеодекодер, в свою очередь, использует принятый идентификатор, чтобы идентифицировать значение или значения индекса для опорной картинки или опорных картинок, перечисленных в Списке 0, Списке 1, или обоих Списке 0 и Списке 1. Из значения(ий) индекса, а также идентификатора(ов) опорной картинки или опорных картинок, кодировщик видео извлекает опорную картинку или опорные картинки из DPB, и декодирует закодированный блок текущей картинки.
[0034] В наборе параметров картинки (PPS) или наборе параметров последовательности (SPS), ассоциированных с, или заголовке вырезки текущей картинки, видеокодер может сигнализировать RPS. RPS текущей картинки включает в себя идентификационную информацию для опорных картинок, которая может быть использована для предсказания текущей картинки, и картинки, которые могут быть использованы для предсказания картинки после текущей картинки в порядке декодирования. Только опорные картинки в RPS могут быть включены в Список 0 или Список 1.
[0035] Информация идентификационной информации для опорных картинок может включать в себя одно или более значений счета по порядку картинок (POC). Значения POC указывают порядок, в котором картинки в пределах закодированной видеопоследовательности выводятся или отображаются (то есть, порядок отображения картинок). Например, картинка с более низким значением POC отображается ранее чем картинка с более высоким значением POC в той же самой закодированной видеопоследовательности.
[0036] Первый аспект способов, описанных в настоящем раскрытии, относится к способам для непосредственного сигнализирования долгосрочных опорных картинок для текущей картинки. Например, опорные картинки могут быть классифицированы как краткосрочные опорные картинки и долгосрочные опорные картинки. Краткосрочные опорные картинки являются картинками, которые являются обычно временно ближайшими к текущей картинке в порядке вывода.
[0037] В соответствии с первым аспектом способов, описанных в настоящем раскрытии, вместо того, чтобы закодировать биты LSB дельты POC, которые идентифицируют долгосрочную опорную картинку, которая присутствует в буфере декодированных картинок, но не определена в ассоциированном SPS, используя экспоненциальное кодирование Голомба, видеокодер может непосредственно задать (сигнализировать) биты LSB POC такой долгосрочной опорной картинки, используя переменные фиксированные унарные коды. Таким образом, видеокодер может задать количество битов, использованных для сигнализации этих битов LSB POC, которые сигнализируются в заголовке вырезки, ассоциированном с текущей картинкой. Конкретное количество битов сигнализирует видеодекодеру количество битов, которые должны быть синтаксически разобраны из потока битов, и которые представляют эти биты LSB POC, которые идентифицируют долгосрочную опорную картинку, которая присутствует в буфере декодированных картинок, но не задана в ассоциированном SPS. Учитывая более широкое распределение значений в контексте таких значений LSB POC, способы могут способствовать экономии битов посредством кодирования этих LSB POC как однородной длины (и переменная, в том смысле, что однородная длина может быть сигнализирована или логически выведена для каждой вырезки) двоичные числа без знака, обозначенные как "u (v)" в различных стандартах кодирования видео.
[0038] Таким образом, видеодекодер может определить количество битов, использованных для представления одного или более младших значащих битов значения счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку, которая должна использоваться при декодировании текущей картинки. Часто, видеодекодер может определить количество битов из элемента синтаксиса, заданного в одном или более из заголовка вырезки, набора параметров картинки или набора параметров последовательности. Альтернативно, видеодекодер может вывести количество битов на основании других элементов синтаксиса без явного приема элемента синтаксиса, который задает количество битов. Видеодекодер может затем синтаксически разобрать определенное количество битов из потока битов, где это синтаксически разобранное количество битов представляет значащие биты значения POC, которое идентифицирует долгосрочную опорную картинку. Видеодекодер может затем извлечь долгосрочную опорную картинку из буфера декодированных картинок на основании младших значащих битов значения POC, которое идентифицирует долгосрочную опорную картинку, и декодировать по меньшей мере часть текущей картинки, используя извлеченную долгосрочную опорную картинку.
[0039] В соответствии со вторым аспектом способов, описанных в настоящем раскрытии, видеокодер может дополнительно или альтернативно конфигурироваться, чтобы проанализировать каждую картинку, присутствующую во всем буфере декодированных картинок при определении, необходимо ли сигнализировать дополнительную информацию, например, некоторые или все старшие значащие биты (MSB), для того, чтобы снять неоднозначность LSB POC. Другими словами, видеокодер вычисляет набор из одного или более LSB POC для каждого значения POC, которое идентифицирует картинку в DPB. При выполнении анализа видеокодер определяет, является ли набор LSB POC, вычисленный для каждой из долгосрочных опорных картинок, сигнализированных в заголовке вырезки, уникальным относительно всех других наборов LSB POC, вычисленных для этих значений POC, который идентифицирует все другие картинки в DPB. Если один из этих других наборов битов LSB POC равен набору битов LSB POC текущих долгосрочных опорных картинок при анализе, этот набор битов LSB POC определяется как не являющийся уникальным, и видеокодер может затем сигнализировать достаточные старшие значащие биты (MSB), чтобы позволить значению POC долгосрочной опорной картинки быть правильно выведенным видеодекодером.
[0040] Таким образом, видеодекодер может принять поток битов, представляющий закодированные видеоданные, из видеокодера, который был закодирован в соответствии с различными аспектами способов, описанных в настоящем раскрытии. Видеодекодер может затем определить младшие значащие биты значения POC, которое идентифицирует долгосрочную опорную картинку, которая должна использоваться при декодировании текущей картинки. Как отмечено выше, эти младшие значащие биты могут не уникально идентифицировать значение счета по порядку картинки долгосрочной опорной картинки относительно младших значащих битов любого другого значения POC, которое идентифицирует любую другую картинку, присутствующую в буфере декодированных картинок, в котором также сохранена долгосрочная опорная картинка. В результате видеодекодер может затем определить один или более старших значащих битов значения POC, которое идентифицирует долгосрочную опорную картинку. Видеокодер выбирает старшие значащие биты таким образом, что старшие значащие биты в комбинации с младшими значащими битами являются достаточными, чтобы отличить значение POC, которое идентифицирует долгосрочную опорную картинку, от любого другого значения счета по порядку картинки, которое идентифицирует любую другую картинку в буфере декодированных картинок. Видеодекодер может затем извлечь долгосрочную опорную картинку из буфера декодированных картинок на основании однозначной комбинации младших значащих битов и старших значащих битов и декодировать текущую картинку, используя извлеченную долгосрочную опорную картинку.
[0041] ФИГ. 1 является блок-схемой, иллюстрирующей примерную систему 10 кодирования и декодирования видео, которая может использовать способы, описанные в настоящем раскрытии для выведения RPS и сигнализации LTRPs. Как показано на фиг. 1, система 10 включает в себя исходное устройство 12, которое передает закодированное видео к устройству-адресату 14 через канал 16 связи. Исходное устройство 12 и устройство-адресат 14 может содержать любое из широкого диапазона устройств. В некоторых случаях исходное устройство 12 и устройство-адресат 14 может содержать устройства беспроводной связи, такие как беспроводные телефонные трубки, так называемые сотовые или спутниковые радиотелефоны, или любые беспроводные устройства, которые могут передать видео информацию по каналу 16 связи, когда канал 16 связи является беспроводным. Способы этого раскрытия не обязательно ограничены беспроводными приложениями или параметрами настройки. Например, эти способы могут относиться к эфирным телевизионным вещаниям, передачам кабельного телевидения, передачам спутникового телевидения, передачам видео по Интернет, закодированному цифровому видео, которое закодировано на носитель данных, или другим сценариям. Соответственно, канал 16 связи может содержать любую комбинацию беспроводного, проводного или запоминающего носителя, подходящих для передачи или хранения закодированных видеоданных.
[0042] В примере согласно ФИГ. 1 исходное устройство 12 включает в себя видео источник 18, видеокодер 20, модулятор/демодулятор (модем) 22 и передатчик 24. Устройство-адресат 14 включает в себя приемник 26, модем 28, видеодекодер 30, и устройство 32 отображения. Видеокодер 20 может быть сконфигурирован, чтобы применять способы этого раскрытия. В других примерах исходное устройство и устройство-адресат могут включать в себя другие компоненты или компоновки. Например, исходное устройство 12 может принять видеоданные из внешнего видео источника, такого как внешняя камера. Аналогично, устройство-адресат 14 может соединяться с внешним устройством отображения вместо включения интегрированного устройства отображения.
[0043] Система 10 из ФИГ. 1 является просто одним примером. Способы для кодирования видеоданных могут быть выполнены различным цифровым устройством кодирования и/или декодирования видео. Способы этого раскрытия могут быть выполнены видеокодером/декодером, типично называемым "кодек". Кроме того, способы этого раскрытия могут также быть выполнены видео препроцессором. Исходное устройство 12 и устройство-адресат 14 является просто примерами таких устройств кодирования. В некоторых примерах устройства 12, 14 могут работать по существу симметричным способом таким образом, что каждое из устройств 12, 14 включает в себя компоненты кодирования и декодирования видео. Следовательно, система 10 может поддерживать одностороннюю или двустороннюю передачу видео между исходным устройством 12 и устройством-адресатом 14, например, для потоковой передачи видео, воспроизведения видео, вещания видео или видео телефонии.
[0044] Видео источник 18 может включать в себя устройство захвата видео, такое как видео камера, видео архив, содержащий ранее захваченное видео, и/или подачу видео от видео поставщика контента. В качестве дальнейшей альтернативы, видео источник 18 может генерировать основанные на компьютерной графике данные, как исходное видео или комбинация живого видео, заархивированного видео, и генерируемое компьютером видео. В некоторых случаях, если видео источник 18 является видео камерой, исходное устройство 12 и устройство-адресат 14 могут формировать так называемые камерофоны или видео телефоны. В каждом случае захваченное, предварительно захваченное или генерируемое компьютером видео может быть закодировано видеокодером 20. Закодированная видео информация может затем модулироваться модемом 22 согласно стандарту связи, и передана к устройству-адресату 14 через передатчик 24. Модем 22 может включать в себя различные смесители, фильтры, усилители или другие компоненты, разработанные для модуляции сигнала. Передатчик 24 может включать в себя схемы, разработанные для того, чтобы передать данные, включая усилители, фильтры и одну или более антенн.
[0045] Приемник 26 из устройства назначения 14 принимают информацию по каналу 16 связи, и модем 28 демодулирует информацию. Информация, переданная по каналу 16 связи, может включать в себя информацию синтаксиса, определенную видеокодером 20, которая включает в себя элементы синтаксиса, которые описывают характеристики и/или обработку блоков и других закодированных блоков, например, групп картинок (GOP). Устройство 32 отображения отображает декодированные видеоданные пользователю. Устройство 32 отображения может содержать любое из множества устройств отображения, таких как электронно-лучевая трубка (CRT), жидкокристаллический дисплей (LCD), плазменный дисплей, дисплей на органических светодиодах (OLED), или другой тип устройства отображения.
[0046] В примере согласно фиг. 1, канал 16 связи может содержать любой беспроводной или проводной коммуникационный носитель, такой как радиочастотного (RF, РЧ) спектра или одну или более физических линий передачи, или любую комбинацию беспроводного и проводного носителей. Канал 16 связи может быть частью основанной на пакетной передаче сети, такой как локальная сеть, региональная сеть, или глобальная сеть, такая как Интернет. Канал 16 связи может представлять любой подходящий коммуникационный носитель, или набор различных коммуникационных носителей, для передачи видеоданных от исходного устройства 12 к устройству-адресату 14, включая подходящие комбинации проводного или беспроводного носителей. Канал 16 связи может включать в себя маршрутизаторы, переключатели, базовые станции или любое другое оборудование, которое может быть полезным, чтобы облегчить связь от исходного устройства 12 к устройству-адресату 14. В других примерах исходное устройство 12 может сохранять закодированные данные на носителе данных, вместо того, чтобы передавать данные. Аналогично, устройство-адресат 14 может быть сконфигурировано, чтобы извлечь закодированные данные из носителя данных.
[0047] Видеокодер 20 и видеодекодер 30 могут работать согласно стандарту сжатия видео, такому как стандарт ITU-T H.264, альтернативно называемый MPEG-4, Часть 10, Усовершенствованное видео кодирование (AVC), или появляющийся стандарт высокоэффективного кодирования видео, который может также обычно упоминаться как H.265. В то время как способы вообще описаны в настоящем раскрытии относительно HEVC, способы могут также быть реализованы или иначе использоваться для альтернативных стандартов кодирования видео, таких как стандарт H.264/Advanced Video Coding (AVC). HEVC развивается Объединенной Совместной Командой по кодированию видео (JCT-VC) группы экспертов по кодированию видео ITU-T (VCEG) и ISO/Группа Экспертов по движущимся изображениям IEC (MPEG). Недавний рабочий проект (WD) HEVC, названный и называемый HEVC WD6 в дальнейшем, Bross и другие, названный ““High efficiency video coding (HEVC) text specification draft 6,” Joint Collaborative Team on Video Coding (JCT-VC) of ITU-T SG16 WP3 and ISO/IEC JTC1/SC29/WG11, 8th Meeting, San Jose, CA, USA, 1-10 February, 2012, который доступен от http://phenix.int-evry.fr/jct/doc_end_user/documents/8_San%20Jose/wg11/JCTVC-H1003-v22.zip. Дополнительно, другие WD из HEVC были также одобрены, последний называемый HEVC WD9, Bross и др., названный High efficiency video coding (HEVC) text specification draft 9,” Joint Collaborative Team on Video Coding (JCT-VC) of ITU-T SG16 WP3 and ISO/IEC JTC1/SC29/WG11, 11th Meeting: Shanghai, CN, 10-19 October 2012, JCTVC-K1003_v9, будучи доступным по http://phenix.int-evry.fr/jct/doc_end_user/documents/11_Shanghai/wg11/JCTVC-K1003-v9.zip
[0048] Стандарт ITU-T H.264/MPEG-4 (AVC) был сформулирован группой экспертов по кодированию видео ITU-T (VCEG) вместе с ISO/IEC группой экспертов по движущимся изображениям (MPEG) как продукт коллективного товарищества, известного как объединенная команда видео (JVT). В некоторых аспектах, способы, описанные в настоящем раскрытии, могут быть применены к устройствам, которые в целом соответствуют стандарту H.264. Стандарт H.264 описан в Рекомендации H.264 ITU-T, Advanced Video Coding for generic audiovisual services, Группой по изучению ITU-T, и датирован март 2005, который может быть упомянут здесь как стандарт H.264 или спецификация H.264, или стандарт или спецификация H.264/AVC. Объединенная команда видео (JVT) продолжает развивать расширения к H.264/MPEG-4 AVC.
[0049] Стандарты кодирования видео включают в себя 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). Последний объединенный проект MVC описан в Рекомендации H.264 ITU-T “Advanced video coding for generic audiovisual services”, март 2010.
[0050] Способы этого раскрытия, однако, не ограничены каким-либо конкретным стандартом кодирования. Другие примеры включают в себя MPEG-2 и ITU-T H.263. Хотя не показано на фиг. 1, в некоторых аспектах видеокодер 20 и видеодекодер 30 могут каждый быть интегрированы с кодером и декодером аудио, и могут включать в себя соответствующие блоки MUX-DEMUX (мультиплексор-демультиплексор), или другое аппаратное обеспечение и программное обеспечение, чтобы обрабатывать кодирование и аудио и видео в общем потоке данных или отдельных потоках данных. Если применимо, блоки MUX-DEMUX могут соответствовать протоколу мультиплексора ITU H.223, или другим протоколам, таким как протокол дейтаграмм пользователя (UDP).
[0051] Видеокодер 20 и видеодекодер 30 каждый может быть реализован как любая из множества подходящих схем кодера или декодера, как применимо, таких как один или более микропроцессоров, цифровых сигнальных процессоров (DSPs), специализированных интегральных схем (ASIC), программируемых пользователем вентильных матриц (FPGA), дискретной логики, программного обеспечения, аппаратного обеспечения, программно-аппаратных средств или любых их комбинаций. Термин "процессор" может в целом быть использован для обращаются к любой комбинации предшествующего и может включать в себя невременный считываемый компьютером носитель, имеющий сохраненные на нем инструкции, которые, когда выполняются, заставляют этот процессор выполнять различные способы, описанные в настоящем раскрытии. Каждый из видеокодера 20 и видеодекодера 30 может быть включен в один или более кодеров или декодеров, любой из которых может быть интегрирован как часть объединенного видеокодера/декодера (кодек). Устройство, включающее в себя видеокодер 20 и/или видеодекодер 30 может содержать интегральную схему, микропроцессор, и/или устройство беспроводной связи, такое как сотовый телефон, камера, компьютер, мобильное устройство, устройство абонента, устройство вещания, телевизионная приставка, игровое устройство, сервер, или подобное.
[0052] Видеопоследовательность типично включает в себя ряд видео кадров, альтернативно называемых картинками. Группа картинок (GOP) обычно содержит набор из одного или более видео кадров (который является другим обычно известным способом обращения к картинке). GOP может включать в себя данные синтаксиса в заголовке GOP, заголовке одного или более кадров GOP, или в другом месте, который описывает множество кадров, включенных в GOP. Каждый кадр может включать в себя данные синтаксиса кадра, которые описывают режим кодирования для соответствующего кадра. Видеокодер 20 типично оперирует над блоками видео в пределах индивидуальных видео кадров, чтобы закодировать видеоданные. Блок видео может соответствовать макроблоку или разделению макроблока в H.264 или CU (которая может включать в себя одну или более единиц предсказания (PU) и/или единиц преобразования (TU)) в HEVC. Блоки видео могут иметь фиксированный или переменный размеры, и могут отличаться по размеру согласно указанному стандарту кодирования. Каждый видео кадр может включать в себя множество вырезок. Каждая вырезка может включать в себя множество макроблоков (или единиц LCU), которые могут быть разделены на субблоки (или CUs).
[0053] Как пример, стандарт ITU-T H.264 поддерживает внутреннее предсказание в различных размерах блока, таких как 16 на 16, 8 на 8, или 4 на 4 для компонентов яркости, и 8x8 для компонентов насыщенности цвета, а также внешнего предсказания в различных размерах блока, таких как 16×16, 16×8, 8×16, 8×8, 8×4, 4×8 и 4×4 для компонентов яркости и соответствующих масштабированных размеров для компонентов насыщенности цвета. В настоящем описании "N×N" и "N на N" могут быть использованы взаимозаменяемо, чтобы ссылаться на пиксельные размерности блока в терминах вертикального и горизонтального измерений, например, 16×16 пикселей или 16 на 16 пикселей. Обычно блок 16×16 будет иметь 16 пикселей в вертикальном направлении (y=16) и 16 пикселей в горизонтальном направлении (x=16). Аналогично, блок N×N обычно имеет N пикселей в вертикальном направлении и N пикселей в горизонтальном направлении, где N представляет неотрицательное целочисленное значение. Пиксели в блоке могут быть размещены в рядах и колонках. Кроме того, блоки должен не обязательно иметь то же самое количество пикселей в горизонтальном направлении как в вертикальном направлении. Например, блоки могут содержать N×M пикселей, где М не обязательно равно N.
[0054] Размеры блока, которые меньше чем 16×16, могут упоминаться как разделение блока 16×16. Блоки видео могут содержать блоки пиксельных данных в пиксельной области, или блоки коэффициентов преобразования в области преобразования. В некоторых случаях блок видео может содержать блоки квантованных коэффициентов преобразования в области преобразования.
[0055] Меньшие блоки видео могут обеспечить лучшее разрешение и могут быть использованы для местоположений видео кадра, которые включают в себя высокие уровни деталей. Вообще, блоки и различные разделения, иногда называемые субблоками, могут считаться блоками видео. Кроме того, вырезка (слайс) может рассматриваться как множество блоков видео, таких как блоки и/или субблоки. Каждая вырезка может быть независимо декодируемой единицей видео кадра. Альтернативно, сами кадры могут быть декодируемыми единицами, или другие части кадра могут быть определены как декодируемые единицы. Термин "закодированная единица" или "единица кодирования" может относиться к любой независимо декодируемой единице видео кадра, такой как весь кадр, вырезка кадра, GOP, также называемой как последовательность, или другая независимо декодируемая единица, определенная согласно применимым способам кодирования. GOP может также упоминаться как закодированная видеопоследовательность, например, в H.264/AVC и HEVC.
[0056] Видеокодер 20 может генерировать единицы уровня абстракции сети (NAL). Единица NAL может быть синтаксической структурой, содержащей индикацию типа данных в единице NAL, и байты, содержащие данные. Например, единица NAL может содержать данные, представляющие набор параметров последовательности (SPS), набор параметров картинки (PPS), закодированную вырезку, дополнительную информацию расширения (SEI), разделитель единицы доступа, данные заполнителя, или другой тип данных. Данные единицы NAL могут быть в форме необработанных полезных данных последовательности байтов (RBSP) с вставленными битами предотвращения эмуляции. RBSP может быть синтаксической структурой, содержащей целое количество байтов, которое инкапсулировано в пределах единицы NAL.
[0057] Единицы NAL могут быть категоризированы на единицы NAL уровня кодирования видео (VCL) и единицы NAL не-VCL. Блоки VCL могут включать в себя блок, макроблок, и/или данные уровня вырезки. Единицы NAL не-VCL могут включать в себя единицы NAL набора параметров и единицы NAL SEI, среди других. Наборы параметров могут содержать информацию заголовка уровня последовательности (например, в SPS) и нечасто изменяющуюся информацию заголовка уровня картинки (например, в PPS). С наборами параметров (например, SPS и PPS) нечасто изменяющуюся информацию нет необходимости повторять для каждой последовательности или картинки, следовательно эффективность кодирования может быть улучшена. Кроме того, использование наборов параметров может разрешить передачу вне диапазона важной информации заголовка, избегая потребности в избыточных передачах для устойчивости к ошибкам. В примерах передачи вне частотного диапазона единицы NAL набора параметров могут быть переданы на другом канале, чем другие единицы NAL, такие как единицы NAL SEI.
[0058] Сообщения SEI могут содержать информацию, которая не является необходимой для декодирования закодированных выборок картинок из единиц NAL VCL, но может помочь в процессах, относящихся к декодированию, отображению, устойчивости к ошибкам, и другим целям. Сообщения SEI могут содержаться в единицах NAL не-VCL. Сообщения SEI являются нормативной частью спецификаций некоторых стандартов, и таким образом, не всегда обязательными для совместимой со стандартом реализации декодера. Сообщения SEI могут быть сообщениями SEI уровня последовательности или сообщениями SEI уровня картинок. Некоторая информация уровня последовательности может содержаться в сообщениях SEI, таких как сообщения SEI информации масштабируемости в примере SVC и сообщения SEI информации масштабируемости вида в MVC. Они пример сообщения SEI может передавать информацию относительно, например, извлечения рабочих точек и характеристики рабочих точек.
[0059] Как отмечено выше, кодировщик видео (который является термином, который может относиться к одному или обоим из видеокодера 20 и видеодекодера 30) включает в себя буфер декодированных картинок (DPB), который не показан в примере согласно фиг. 1 для простоты целей иллюстрации. DPB хранит опорные картинки, которые являются картинками, которые могут быть использованы для того, чтобы внешне предсказать картинку. Другими словами, кодировщик видео может предсказать картинку на основании одной или более опорных картинок, сохраненных в DPB.
[0060] Видеодекодер может также конфигурироваться, чтобы построить списки опорных картинок, которые указывают, какие опорные картинки используются в целях внешнего предсказания. Два из этих списков опорных картинок упоминаются как Список 0 и Список 1, соответственно. Видеодекодер 30 может сначала использовать способы конструирования по умолчанию, чтобы построить Список 0 и Список 1 (например, предварительно сконфигурированные схемы конструирования для конструирования Списка 0 и Списка 1, такие как те, что сформулированы в HEVC WD 6 в качестве одного примера). Необязательно, видеокодер 20 может быть сконфигурирован, чтобы сигнализировать элементы синтаксиса, которые определяют, какие картинки, сохраненные в DPB, должны использоваться при построении Списка 0 и Списка 1. Таким образом, после того, как начальные Список 0 и Список 1 построены, видеодекодер 30 может декодировать элементы синтаксиса, когда присутствуют, которые инструктируют видеодекодер 30 модифицировать начальные Список 0 и Список 1.
[0061] Видеокодер 30 может сигнализировать элементы синтаксиса, которые являются указывающими идентификатор(ы) опорных картинок в DPB. Видеокодер 30 может также сигнализировать элементы синтаксиса, которые включают в себя индексы, в пределах Списка 0, Список 1, или обоих из Списка 0 и Список 1, которые указывают, какая опорная картинка или картинки, сохраненные в DPB, должны быть использованы для декодирования закодированного блока текущей картинки. Видеодекодер 30, в свою очередь, использует принятый идентификатор, чтобы идентифицировать значение индекса или значения для опорной картинки или опорных картинок, перечисленных в Списке 0, Списке 1 или обоих Списках 0 и Списке 1. Из значения(ий) индекса, а также идентификатора(ов) опорной картинки или опорных картинок, видеодекодер 30 извлекает опорную картинку или опорные картинки из DPB, формирует Список 0 и Список 1 и декодирует закодированный блок текущей картинки.
[0062] В наборе параметров картинки (PPS) или наборе параметров последовательности (SPS), ассоциированном с или заголовке вырезки текущей картинки, видеокодер 20 может сигнализировать набор опорных картинок (который снова может упоминаться как “RPS”). RPS текущей картинки включает в себя идентификационную информацию для опорных картинок, которые могут быть использованы для предсказания текущей картинки и картинок, которые могут быть использованы для предсказания картинки после текущей картинки в порядке декодирования. Только опорные картинки в RPS могут быть включены в Список 0 или Список 1.
[0063] Идентификационная информация для опорных картинок может включать в себя одно или более значений счета по порядку картинок (POC). Значения POC указывают порядок, в котором картинки выводятся или показываются (то есть, порядок отображения картинок). Например, картинка с более низким значением POC отображается ранее, чем картинка с более высоким значением POC в той же самой закодированной видеопоследовательности.
[0064] HEVC WD 6 и более поздние рабочие проекты, например, HEVC WD 9, типично предусматривают два различных типа опорных картинок, называемых краткосрочные опорные картинки (STRPs) и долгосрочные опорные картинки (LTRPs). Краткосрочные опорные картинки являются картинками, которые являются типично временно ближайшими к текущей картинке в порядке вывода.
[0065] Долгосрочные опорные картинки являются картинками, которые являются типично временно еще более дальними от текущей картинки, но могут все еще быть полезными в целях предсказания. Например, при видео конференц-связи начальные несколько захваченных картинок могут включать в себя контент фонового изображения, который может быть полезным в предсказании картинок, которые захвачены позже на видео конференции. В качестве другого примера, долгосрочную опорную картинку можно обрабатывать по-иному, чем краткосрочную опорную картинку при масштабировании вектора движения, или типовом масштабировании значения во взвешенном предсказании.
[0066] Краткосрочная опорная картинка может также быть более далекой от текущей картинки в порядке вывода, чем долгосрочная опорная картинка. В этом смысле долгосрочные опорные картинки могут относиться к картинкам, которые могут быть использованы множество раз как опорные картинки, тогда как краткосрочные опорные картинки могут быть использованы меньше раз как опорные картинки относительно долгосрочных опорных картинок. Если полагаться только на краткосрочные опорные картинки для предсказания, это может привести к видеодекодеру 30, неспособному использовать такие долгосрочные опорные картинки, которые могут быть полезными или желательными для устойчивости к ошибкам или эффективности кодирования.
[0067] Чтобы определить эти долгосрочные опорные картинки, видеокодер 20 может обеспечить список долгосрочных опорных картинок, которые могут быть ассоциированы с и использованы для декодирования одной или более картинок в SPS. В заголовках вырезок (которые могут также упоминаться “как заголовки вырезки”) ассоциированной одной или более картинок видеокодер 20 может, в некоторых случаях, задавать, какие из этих долгосрочных опорных картинок, определенных в SPS, должны использоваться при декодировании конкретной картинки. Часто, видеокодер 20 задает индекс, идентифицирующий каждую из долгосрочных опорных картинок, заданный в SPS, которые должны использоваться при декодировании конкретной картинки. Как правило, требуется, что все заголовки вырезки картинки должны относиться к одной и той же сигнализации набора опорных картинок.
[0068] В некоторых случаях видеокодер 20 может определить, что одна или более долгосрочных опорных картинок, которые присутствуют в буфере декодированных картинок, но которые не заданы в списке долгосрочных опорных картинок, заданных в SPS, должны использоваться при декодировании конкретной картинки. В этом случае видеокодер 20 может задавать (или, в контексте кодирования видео, "сигнализировать") значения POC, которые назначены на одну или более долгосрочных опорных картинок, присутствующих в DPB, но которые не заданы в списке долгосрочных опорных картинок, определенных в SPS.
[0069] Чтобы сократить количество битов, требуемых для сигнализации этого значения POC, видеокодер 20 может определить значение POC как функцию значения POC, назначенного на ту из картинок (которая может упоминаться как “текущая картинка” в смысле, что эта картинка является картинкой, которая в настоящее время декодируется), которой вырезка (которая может упоминаться как “текущая вырезка” по подобным причинам), которая должна быть декодирована, соответствует. Чтобы иллюстрировать это, видеокодер 20 может вычесть значение POC долгосрочной опорной картинки из значения POC текущей картинки, которой текущая вырезка соответствует, чтобы получить дельту значений POC. В частности, дельта значений POC может быть представлена выбранным количеством младших значащих битов (LSB) дельты значений POC. Сигнализируя только дельту битов LSB POC в заголовке вырезки, видеокодер 20 может сократить количество битов, требуемых для идентификации долгосрочных опорных картинок, которые присутствуют в буфере декодированных картинок, но не заданы в SPS, ассоциированном с текущей вырезкой; эти долгосрочные опорные картинки также упоминаются как непосредственно сигнализируемые в заголовках вырезки.
[0070] Ранее, дельта битов LSB POC для задания значения POC долгосрочной опорной картинки была энтропийно кодирована, чтобы улучшить устойчивость к ошибкам и сократить количество битов, требуемых для задания значения POC в потоке битов. В частности, эти предыдущие видеокодеры кодировали дельту битов LSB POC долгосрочных опорных картинок, непосредственно сигнализированных в заголовках вырезки, используя форму кодирования, обозначенную как “ue (v)” в различных стандартах кодирования видео, включая HEVC. Термин "ue(v)" относится к форме кодирования, называемой экспоненциальным кодированием по Голомбу.
[0071] Когда значение, которое должно быть задано, является беззнаковым (которое формирует “u” в “ue (v),”, в то время как “e” относится к экспоненциальной функции в экспоненциальных кодах Голомба), экспоненциальное кодирование по Голомбу вовлекает сигнализацию количества битов, использованных для кодирования заданного значения посредством задания количества нулей, которое равно или меньше чем количество битов, чтобы закодировать заданное значение и затем задание заданного значения плюс один. Если значение дельты битов LSB POC равно 0001, например, видеокодер закодировал это значение как 0 (чтобы указать, что значение может быть сигнализировано, используя один бит, то есть, 1 в этом примере) с последующими 10 (при задании, что значение один плюс один равно двум, что в двоичной системе указывается как 10), выводя экспоненциальный код Голомба 010.
[0072] Поскольку экспоненциальные коды Голомба является формой кодирования с переменной длиной кода (который относится к факту, что эти коды не имеют фиксированной или однородной длины и вместо этого изменяются на основании того, какое значение закодировано), экспоненциальное кодирование по Голомбу обычно подходит только для кодирования информации, имеющей некоторые статистические распределения значений. Более конкретно, экспоненциальное кодирование по Голомбу подходит для кодирования информации, статистически вероятной, чтобы быть заданной в качестве малого числа. Вычисление дельты битов LSB POC для задания значения POC текущей картинки обычно вовлекало вычисление значения единицы (при том, что текущее значение POC было вычтено из значения POC предыдущей картинки, чтобы получить дельту битов LSB POC в контексте сигнализации значения POC текущей картинки). Соответственно, экспоненциальное кодирование по Голомбу было выбрано, чтобы закодировать их значения дельты битов LSB POC для задания значения POC текущей картинки. Однако, значения дельты битов LSB POC для идентификации долгосрочных опорных картинок представляют информацию, которая имеет весьма различное распределение, которое на является хорошо подходящей для экспоненциального кодирования по Голомбу.
[0073] В соответствии с первым аспектом способов, описанных в настоящем раскрытии, вместо того, чтобы закодировать дельту битов LSB POC, которые идентифицируют долгосрочную опорную картинку, которая присутствует в буфере декодированных картинок, но не задана в ассоциированном SPS, используя экспоненциальное кодирование Голомба, видеокодер 20 может непосредственно задать (или, другими словами, сигнализировать) LSB POC такой долгосрочной опорной картинки, используя переменные фиксированной длины унарные коды. Таким образом, видеокодер 20 может задать количество битов, использованных для сигнализации этих LSB POC в заголовке вырезки, ассоциированной с текущей картинкой. Заданное количество битов сигнализирует видеодекодеру количество битов, которые должны быть синтаксически разобраны из потока битов, и которые представляют биты LSB POC, которые идентифицируют долгосрочную опорную картинку, которая присутствует в буфере декодированных картинок, но не задана в ассоциированном SPS. При заданном более широком распределении значений в контексте таких значений LSB POC, способы могут способствовать экономии битов посредством кодирования их LSB POC как однородной длины (и переменной в том смысле, что однородная длина может быть сигнализирована или получена (выведена) для каждой вырезки) двоичных чисел без знака, обозначенных как "u (v)" в различных стандартах кодирования видео.
[0074] Во время работы видеокодер 20 может определить, для текущей картинки видеоданных, долгосрочную опорную картинку, которая должна использоваться при кодировании по меньшей мере части текущей картинки видеоданных, способом описанным выше. Видеокодер 20 может затем определить количество битов, которые должны быть использованы для представления набора из одного или более значений LSB POC, который идентифицирует долгосрочную опорную картинку в потоке битов, представляющем закодированную версию видеоданных. Другими словами, видеокодер 20 может определить “v” в двоичном кодировании без знака, обозначенном как “u (v)” с “u,” снова обозначающим двоичное кодирование без знака.
[0075] Часто это количество битов LSB определено на основании количества битов LSB, требуемых, чтобы снять неоднозначность LTRP от других LTRP или любой другой опорной картинки, сохраненной в DPB. Другими словами, это количество может измениться на основании вырезки, картинки или GOP. В некоторых случаях количество битов LSB может быть определено для всего потока битов или частей его. В некоторых случаях количество битов LSB, использованных для идентификации значения POC, является заранее определенным, так что нет потребности сигнализировать количество битов LSB. В некоторых случаях количество битов LSB может быть сигнализировано для каждой картинки, например, в заголовке вырезки. В некоторых случаях количество битов LSB может быть сигнализировано для многих картинок, например, в SPS или PPS. В некоторых случаях количество битов LSB, использованных для идентификации значения POC, может быть получено на основании элементов синтаксиса, определенных для текущей картинки и/или ранее закодированных картинок видеоданных, где видеокодеру 20 затем может не быть необходимо сигнализировать это количество битов, использованных для представления этих LSB POC, при том, что видеодекодер 30 может выполнить подобный процесс выведения, чтобы получить “v” количество битов, использованных для представления LSB POC.
[0076] В любом случае видеокодер 20 может затем задать набор из одного или более значений LSB POC, которое идентифицирует LTRP в потоке битов, используя это определенное количество битов, использованных для представления количество из набора из одного или более битов LSB значения POC, которое идентифицирует долгосрочную опорную картинку. Другими словами, видеокодер 20 может задать биты LSB POC, отмеченные выше, в потоке битов, используя “v” количество битов как двоичное число без знака. Видеокодер 20 может также закодировать по меньшей мере часть текущей картинки, используя LTRP. Видеокодер 20 может закодировать по меньшей мере часть текущей картинки прежде, после или параллельно к заданию в потоке битов LSB POC как двоичное значение без знака для “v” битов в длину. Видеокодер 20 может затем передать этот поток битов к видеодекодеру 30 или сохранить этот поток битов для более позднего поиска видеодекодером 30.
[0077] Видеодекодер 30 может принять поток битов, представляющий закодированные видеоданных, закодированных в соответствии со способами, описанными в настоящем раскрытии. Модуль 150 энтропийного декодирования из видеодекодера 30 может сначала определить, для вырезки текущей картинки закодированных видеоданных, количество битов, использованных для определения набора из одного или более битов LSB значения POC, которое идентифицирует LTRP для использования при декодировании текущей картинки. В некоторых примерах количество битов может быть явно сигнализировано в потоке битов как элемент синтаксиса, например, в заголовке вырезки, SPS или PPS, как описано выше. В других примерах количество битов может быть получено как функция других элементов синтаксиса, определенных в любом одном или более из SPS, PPS и заголовка вырезки.
[0078] Видеодекодер 30 может затем синтаксически разобрать определенное количество битов из потока битов, где синтаксически разобранное определенное количество битов представляет набор из одного или более битов LSB значения POC, которое идентифицирует долгосрочную опорную картинку, которая должна использоваться при декодировании по меньшей мере части текущей картинки. Это определенное количество битов может задавать то, что выше упоминалось как биты LSB POC. Видеодекодер 30 может затем извлечь из буфера декодированных картинок LTRP из подлежащих использованию при декодировании по меньшей мере части текущей картинки на основании упомянутых LSB POC.
[0079] Чтобы извлечь эту LTRP из буфера декодированных картинок, видеодекодер 30 может сравнить младшие значащие биты значения POC, которое идентифицирует LTRP с тем же количеством младших значащих битов значения POC, ассоциированных с по меньшей мере одной картинкой, сохраненной в буфере декодированных картинок. Видеодекодер 30 извлекает эту одну из по меньшей мере одной картинки, сохраненных в буфере декодированных картинок, для использования вк в качестве долгосрочной опорной картинки при декодировании текущей картинки, которая имеет те же самые биты LSB для значения POC, ассоциированного с упомянутой одной из по меньшей мере одной картинок, сохраненных в буфере декодированных картинок, в качестве определенных младших значащих битов упомянутой LTRP, которая должна быть использована для декодирования текущей картинки. Другими словами, видеодекодер 30 может сопоставлять биты LSB POC с младшими значащими битами значений POC для картинок, сохраненных в буфере декодированных картинок, и идентифицировать картинку с совпадающими битами LSB POC в качестве долгосрочной опорной картинки, которая присутствует в буфере декодированных картинок, но не задана в SPS, ассоциированном с текущей картинкой.
[0080] Видеодекодер 30 может затем использовать долгосрочную опорную картинку, идентифицированную посредством полученного значения счета по порядку картинки, чтобы декодировать часть текущей картинки. Другими словами, один или более векторов движения, заданных для единицы кодирования текущей вырезки текущей картинки, могут ссылаться на LTRP, идентифицированную посредством битов LSB POC. Видеодекодер 30 может извлечь различные блоки LTRP, идентифицированной этими векторами движения, используя эти различные блоки как опорные блоки при выполнении компенсации движения. Видеодекодер 30 может суммировать остаточные данные, закодированные для блоков текущей вырезки текущей картинки, с этими опорными блоками, чтобы генерировать декодированные блоки видеоданных и таким образом восстановить первоначальные видеоданные. Видеодекодер 30 может сохранить декодированные блоки видеоданных в буфере декодированных картинок для более позднего использования при декодировании последующих картинок и/или для отображения. Видеодекодер может затем декодировать другие вырезки, если таковые вообще имеются, текущей картинки, аналогично тому, как описано выше.
[0081] Как отмечено выше, видеокодер 20 может задавать (или "сигнализировать") младшие значащие биты счета по порядку картинки (“дельту битов LSB POC”) или направить биты LSB POC в заголовках вырезки для текущих картинок, чтобы идентифицировать долгосрочные опорные картинки, присутствующие в буфере декодированных картинок, но не заданных в наборе параметров последовательности (SPS), ассоциированном с текущей картинкой. При задании этих битов LSB (дельты) POC, видеокодер 20 обычно анализирует каждый из этих заданных битов LSB (дельту) POC, чтобы гарантировать, что один или более этих битов LSB (дельта) POC не являются избыточными или теми же самыми.
[0082] Для иллюстрации, предположим, что видеокодер 20 должен задать пять долгосрочных опорных картинок в заголовке вырезки для вырезки или другой части текущей картинки, которая должна быть закодирована. Кроме того, предположим, что две из этих пяти долгосрочных опорных картинок были заданы в SPS, ассоциированном с текущей картинкой, оставляя оставшиеся три из пяти долгосрочных опорных картинок, которые будут сигнализируются как непосредственные биты LSB POC для текущей картинки. Видеокодер 20 может сигнализировать индекс для каждой из первых двух из пяти долгосрочных опорных картинок, где каждый индекс идентифицирует одну из долгосрочных опорных картинок, заданных в SPS, ассоциированном с текущей картинкой.
[0083] Видеокодер 20, согласно этим предположениям, может определить следующее в заголовке вырезки, чтобы сигнализировать долгосрочные опорные картинки, которые должны использоваться при декодировании текущей картинки (где типично требуется, что все заголовки вырезки картинки должны иметь одну и ту же сигнализацию набора опорных картинок):
10
1: indexA//идентифицирует значение POC 4001
10
2: indexB//идентифицирует значение POC 4010
A
10
3: POCLSB//идентифицирует значение POC 5001
B
10
4: POCLSB//идентифицирует значение POC 4500
C
10
5: POCLSB//идентифицирует значение POC 5005
[0084] Следующие описания основаны на битах LSB POC. Однако, те же самые описания также применимы для дельты битов LSB POC.
A
A
2
10
10
2
[0085] Как отмечено выше, каждый из вышеупомянутых элементов 1-5 эффективно идентифицирует различное значение POC. В различных случаях, однако, при сигнализации только непосредственно битов LSB POC, могут быть проблемы (из-за неоднозначностей), которые могут препятствовать видеодекодер 30 быть способным эффективно определить, какие долгосрочные опорные картинки были предназначены быть использованными для декодирования текущей вырезки. Предполагая, что только три младших значащих бита используются для сигнализации POCLSB, то POCLSB равно 001. Все же, indexA также идентифицирует значение POC для 4001, что означает, что значение POC 4001 также присутствует в буфере декодированных картинок. Учитывая, что имеются две картинки в буфере декодированных картинок, имеющие LSB POC 001, видеодекодер 30 может быть не способен извлечь какую-либо LTRP для текущей картинки, поскольку неясно относительно того, какую LTRP видеодекодер 30 намеревается использовать при декодировании текущей картинки.
[0086] В результате обычные видеокодеры анализируют биты LSB POC для каждой долгосрочной опорной картинки, сигнализированной в заголовке вырезки (включая сигнализированные как индекс), чтобы гарантировать, что нет избыточных или неоднозначно сигнализированных битов LSB POC для каждой долгосрочной опорной картинки, сигнализированной в заголовке вырезки. Когда неоднозначная дельта битов LSB POC идентифицирована, эти обычные видеокодеры также кодируют старшие значащие биты каждого или по меньшей мере один из этих неоднозначных битов LSB POC, таким образом потенциально гарантируя, что каждый из дельты битов LSB POC, сигнализированных в заголовке вырезки, уникально идентифицирует значение POC в пределах контекста заголовка вырезки. Таким образом, эти видеокодеры могут гарантировать, что каждый из дельты битов LSB POC уникально сигнализирует значение POC в пределах набора значений POC, определенных в заголовке вырезки.
10
10
C
2
10
[0087] К тому же, обеспечение того, что значения POC, сигнализированные в заголовке вырезки, уникально сигнализированы друг относительно друга, недостаточно, чтобы соответственно разрешить видеодекодеру извлекать эти долгосрочные опорные картинки из буфера декодированных картинок. Чтобы проиллюстрировать это, рассмотрим вышеупомянутый пример, но также и предположим, что есть другая долгосрочная опорная картинка в буфере декодированных картинок, идентифицированная значением POC 4005. При проверке, чтобы гарантировать, что нет конфликта ни с каким другим значением POC, определенным в заголовке вырезки, видеокодер определяет, что это значение неоднозначно не сигнализирует значение POC 5005 в контексте других значений POC, сигнализированных в заголовке вырезки, и задает POCLSB как 101 (которое равно просто 5), без задания какого-либо из старших значащих битов.
C
C
2
10
2
[0088] Согласно этим предположениям, видеодекодер 30 может синтаксически разобрать POCLSB из потока битов для текущей вырезки и пытаться извлечь долгосрочную опорную картинку, идентифицированную посредством POCLSB (101 или 5). Все же, при условии, что есть две картинки в буфере декодированных картинок, имеющие LSB POC 101, видеодекодер 30 может быть неспособен извлечь любую LTRP для текущей картинки, поскольку неясно, относительно какой LTRP видеодекодер 30 был предназначен для использования при декодировании текущей картинки.
[0089] В соответствии со способами, описанными в настоящем раскрытии, видеокодер 20 конфигурируется, чтобы проанализировать каждую картинку, присутствующую во всем буфере декодированных картинок при определении, необходимо ли сигнализировать информацию дополнительных старших значащих битов (MSB) для того, чтобы снять неоднозначность дельты битов LSB POC. Другими словами, видеокодер 20 определяет биты LSB POC (или дельту битов LSB POC в зависимости от реализации) для каждого значения POC, которое идентифицирует картинку в буфере декодированных картинок. Выполняя анализ битов LSB POC, сигнализированных в заголовке вырезки, видеокодер 20, определяет, были ли биты LSB POC, определенные для каждой из долгосрочных опорных картинок, сигнализированных в заголовке вырезки, уникальными относительно каждого из битов LSB POC, определенных для каждого значения POC, которое идентифицирует картинку в буфере декодированных картинок. Если один из этих битов LSB POC, сигнализированных в заголовке вырезки, определен как не являющийся уникальным, видеокодер 20 может затем сигнализировать достаточно старших значащих битов (MSB) для этого значения POC, чтобы разрешить значению POC долгосрочной опорной картинки быть правильно идентифицированной видеодекодером 30. В некоторых случаях количество из одного или более младших значащих битов, когда добавляются к количеству из одного или более старших значащих битов, приводит к сумме, которая является меньшей, чем общее количество битов для задания значения счета по порядку картинки.
[0090] Во время работы видеокодер 20 может определить, для текущей картинки видеоданных, один или более младших значащих битов значения счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку, которая должна использоваться при кодировании по меньшей мере части текущей картинки. Видеокодер 20 может затем определить, достаточны ли эти младшие значащие биты, чтобы однозначно идентифицировать долгосрочную опорную картинку от любой другой опорной картинки, сохраненной в буфере декодированных картинок, в котором эта долгосрочная опорная картинка также сохранена (или будет сохранена в зависимости от порядка, в котором долгосрочная опорная картинка сохранена по сравнению с тем, когда это определение сделано).
[0091] Когда один или более младших значащих битов любых других значений счета по порядку картинки, которые идентифицируют любую другую картинку, сохраненную в этом буфере декодированных картинок, в котором также сохранена долгосрочная опорная картинка, являются такими же, как определенные один или более младших значащих битов значения счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку, видеокодер 20 может определить один или более старших значащих битов значения счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку, которая должна использоваться при кодировании по меньшей мере части текущей картинки. Видеокодер 20 может затем задавать как определенные один или более младших значащих битов, так и определенные один или более старших значащих битов значения счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку, которая должна использоваться при кодировании по меньшей мере части текущей картинки в потоке битов, представляющем закодированную версию видеоданных. Видеокодер 20 может затем закодировать по меньшей мере часть текущей картинки, используя долгосрочную опорную картинку.
[0092] Другими словами, вместо того, чтобы только определить, что биты LSB POC, которые идентифицируют долгосрочную опорную картинку, достаточны, чтобы уникально идентифицировать долгосрочную опорную картинку от любой другой долгосрочной опорной картинки, определенной в SPS, PPS и/или заголовке вырезки, видеокодер 20 может определить, что биты LSB POC, которые идентифицируют долгосрочную опорную картинку, достаточны, чтобы уникально идентифицировать долгосрочную опорную картинку от любой другой долгосрочной опорной картинки, сохраненной во всем DPB. Снова, количество из одного или более младших значащих битов, когда добавляются к количеству из одного или более старших значащих битов, приводят к сумме, которая является меньшей, чем общее количество битов для задания значения счета по порядку картинки. В этом отношении, видеокодер 20 может избежать тех случаев, которые приводят к проблемам, отмеченным выше, когда видеодекодер неспособен правильно идентифицировать долгосрочную опорную картинку посредством сигнализированных битов LSB POC, когда две или более долгосрочных опорных картинки, имеющие одни и те же биты LSB POC, сохранены в DPB, но только одна из этих долгосрочных опорных картинок была определена в SPS, PPS и/или заголовке вырезки. В результате реализации этих способов, видеокодер 20 может более робастно закодировать видеоданные по сравнению с обычными видеокодерами, которые только идентифицируют, когда более робастно закодировать сигнализированную долгосрочную опорную картинку относительно тех долгосрочных опорных картинок, сигнализированных в SPS, PPS и/или заголовке вырезки.
[0093] Видеодекодер 30 может принять этот поток битов, представляющий закодированную версию видеоданных (которая может также упоминаться “как закодированные видеоданные”). Видеодекодер 30 затем может определить, для текущей картинки этих закодированных видеоданных, один или более младших значащих битов счета по порядку картинки, который идентифицирует долгосрочную опорную картинку, которая должна использоваться при декодировании по меньшей мере части текущей картинки. Эти один или более младших значащих битов могут не уникально идентифицировать значение счета по порядку картинки долгосрочной опорной картинки относительно одного или более младших значащих битов любого другого значения счета по порядку картинки, которое идентифицирует любую другую картинку, присутствующую в буфере декодированных картинок, в котором также сохранена долгосрочная опорная картинка. Как отмечено выше, младшие значащие биты значения счета по порядку картинки могут уникально идентифицировать значение счета по порядку картинки долгосрочной опорной картинки относительно младших значащих битов любого другого значения счета по порядку картинки, вычисленного относительно значения счета по порядку картинки, которое идентифицирует любую другую долгосрочную опорную картинку, которая должна использоваться как кандидат на декодирование вырезки текущей картинки.
[0094] Другими словами, предыдущий анализ, выполняемый обычными видеокодерами, которые не реализуют способы, описанные в настоящем раскрытии, не могут идентифицировать биты LSB POC, как являющийся неоднозначно заданными, при том, что биты LSB POC для любых других долгосрочных опорных картинок, сигнализированных в заголовке вырезки, все уникально идентифицировали их соответствующие долгосрочные опорные картинки. Кроме того, это не означает, что биты LSB POC уникально идентифицирует долгосрочные опорные картинки относительно всего буфера декодированных картинок. Поскольку видеокодер 20 был модифицирован, чтобы реализовать способы, описанные в настоящем раскрытии, в соответствии с примером этого раскрытия, видеокодер 20 расширяет этот анализ, чтобы рассматривать каждую картинку, сохраненную в буфере декодированных картинок. В результате видеокодер 20 может, как описано выше, дополнительно сигнализировать биты MSB POC даже при том, что биты LSB POC являются уникальными для заданного поднабора картинок, сохраненных в буфере декодированных картинок (например, поднабор, сигнализированный в заголовке вырезки).
[0095] В этом отношении, даже когда биты LSB POC являются уникальными для заданного поднабора картинок, сохраненных в буфере декодированных картинок, видеодекодер 30 определяет один или более старших значащих битов значения счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку. Эти один или более старших значащих битов в комбинации с определенным одним или более младшими значащими битами являются достаточными, чтобы отличить значение счета по порядку картинок (POC), которое идентифицирует долгосрочную опорную картинку, от любого другого значения счета по порядку картинки, которое идентифицирует любую другую картинку в буфере декодированных картинок. Видеодекодер 30 может затем извлечь долгосрочную опорную картинку из буфера декодированных картинок на основании определенного одного или более младших значащих битов значения счета по порядку картинки и определенного одного или более старших значащих битов значения счета по порядку картинки.
[0096] Видеодекодер 30 может затем использовать долгосрочную опорную картинку, идентифицированную полученным значением счета по порядку картинки, чтобы декодировать часть текущей картинки. Другими словами, один или более векторов движения, заданные для единицы кодирования текущей вырезки текущей картинки, могут ссылаться на долгосрочную опорную картинку, идентифицированную полученным значением счета по порядку картинки. Видеодекодер может извлечь различные блоки долгосрочной опорной картинки, идентифицированной этими векторами движения, используя эти различные блоки как опорные блоки при выполнении компенсации движения. Видеодекодер может суммировать остаточные данные, закодированные для блоков текущей вырезки текущей картинки, с этими опорными блоками, чтобы генерировать декодированные блоки видеоданных. Видеодекодер может сохранить декодированные блоки видеоданных в буфере декодированных картинок для более позднего использования при декодировании последующих картинок и/или для отображения. Видеодекодер может затем декодировать другие части, если таковые вообще имеются, текущей картинки, аналогично как описано выше.
[0097] ФИГ. 2 является блок-схемой, которая иллюстрирует конфигурацию примерного видеокодера 20, который конфигурируется, чтобы реализовать способы этого раскрытия. ФИГ. 2 предоставлена в целях объяснения и не должны быть рассмотрена как ограничивающая способы, которые широко иллюстрируется и описаны в настоящем раскрытии. В целях объяснения настоящее раскрытие описывает видеокодер 20 в контексте кодирования HEVC. Однако, способы этого раскрытия, как отмечено выше, могут быть применимыми к другим стандартам или способам кодирования.
[0098] В примере согласно фиг. 2, видеокодер 20 включает в себя множество функциональных компонентов. Функциональные компоненты видеокодера 20 включают в себя модуль 100 предсказания, модуль 102 генерирования остатка, модуль 104 преобразования, модуль 106 квантования, модуль 108 обратного квантования, модуль 110 обратного преобразования, модуль 112 реконструкции, и буфер 114 декодированных картинок, и модуль 116 энтропийного кодирования. Модуль 100 предсказания включает в себя модуль 122 оценки движения, модуль 124 компенсации движения, и модуль 126 внутреннего предсказания.
[0099] В других примерах видеокодер 20 может включать в себя больше, меньше, или другие функциональные компоненты. Например, видеокодер 20 может включать в себя фильтр удаления блочности, чтобы фильтровать выходной сигнал модуля 112 реконструкции, чтобы удалить артефакты блочности из восстановленного видео. Кроме того, модуль 122 оценки движения и модуль 124 компенсации движения могут быть высоко интегрированными, но представлены в примере согласно фиг. 4 отдельно в целях объяснения.
[0100] Видеокодер 20 может принимать видеоданные. В различных примерах видеокодер 20 может принять видеоданные из различных источников. Например, видеокодер 20 может принять видеоданные из источника 18 видео (ФИГ. 1) или другого источника. Видеоданные могут представлять последовательности картинок. Картинки могут включать в себя вид текстуры и виды глубины. Чтобы закодировать видеоданные, видеокодер 20 может выполнить операцию кодирования в отношении каждой последовательности картинок. В качестве части выполнения операции кодирования в отношении последовательности картинок, видеокодер 20 может выполнить операции кодирования в отношении каждой картинки в пределах последовательности картинок. В качестве части выполнения операции кодирования в отношении картинки, видеокодер 20 может выполнить операции кодирования в отношении каждой вырезки в картинке. Когда видеокодер 20 выполняет операцию кодирования в отношении вырезки, видеокодер 20 генерирует закодированную вырезку. Закодированная вырезка является вырезкой в ее закодированной форме. Закодированная вырезка может включать в себя заголовок вырезки и данные вырезки. Заголовок вырезки может содержать элементы синтаксиса, ассоциированные с вырезкой.
[0101] В качестве части выполнения операции кодирования в отношении вырезки, видеокодер 20 может выполнить операции кодирования в отношении блоков дерева в вырезке. Когда видеокодер 20 выполняет операцию кодирования в отношении блока дерева, видеокодер 20 может генерировать закодированный блок дерева. Закодированный блок дерева может содержать данные, представляющие закодированную версию блока дерева. Другими словами, закодированный блок дерева может быть блоком дерева в его закодированной форме. Способы, хотя описаны выше относительно H.264/AVC, могут, как описано ниже, также быть примененными относительно HEVC. В этом отношении эти способы не должны быть ограничены или H.264 или HEVC, но могут быть применены и в контексте H.264/AVC и HEVC.
[0102] В качестве части выполнения операции кодирования в отношении блока дерева, модуль 100 предсказания может выполнить разделение квадродерева в отношении блока дерева, чтобы разделить блок дерева на прогрессивно меньшие единицы CU. Например, модуль 100 предсказания может разделить блок дерева в четыре одинакового размера суб-единицы CU, разделение одной или более суб-единиц CU на четыре одинакового размера суб-суб-единицы CU, и так далее.
[0103] Размеры единицы CU могут располагаться от 8×8 пиксели до размера блока дерева с максимумом 64×64 пикселями или больше. В настоящем раскрытии “N×N” и “N на N” могут быть использованы взаимозаменяемо, чтобы относиться к пиксельным измерениям блока видео в терминах вертикального и горизонтального измерений, например, 16×16 пикселей или 16 на 16 пикселей. Вообще, у блока 16×16 будет 16 пикселей в вертикальном направлении (y=16) и 16 пикселей в горизонтальном направлении (x=16). Аналогично, у блока N×N обычно есть N пикселей в вертикальном направлении и N пикселей в горизонтальном направлении, где N представляет неотрицательное целочисленное значение.
[0104] В качестве части выполнения операции кодирования для блока дерева, модуль 100 предсказания может генерировать иерархическую структуру данных квадродерева для блока дерева. Например, блок дерева может соответствовать корневому узлу структуры данных квадродерева. Если модуль 100 предсказания разделяет блок дерева на четыре суб-единицы CU, корневой узел имеет четыре дочерних узла в структуре данных квадродерева. Каждый из дочерних узлов соответствует одной из суб-единиц CU. Если модуль 100 предсказания разделяет одну из суб-единиц CU на четыре суб-суб-единицы CU, узел, соответствующий суб-CU, может иметь четыре дочерних узла, каждый из которых соответствует одной из суб-суб-единиц CU.
[0105] Каждый узел структуры данных квадродерева может обеспечить данные синтаксиса для соответствующей CU. Например, узел в квадродереве может включать в себя флаг разделения, указывающий, разделена ли CU, соответствующая узлу, (то есть, разделена) на четыре суб-единицы CU. Элементы синтаксиса для CU могут быть определены рекурсивно, и могут зависеть от того, разделена ли CU на суб-единицы CU. CU, которая не разделена, может соответствовать листовому узлу в структуре данных квадродерева. Листовой узел в структуре данных квадродерева может упоминаться как “узел кодирования”. Закодированный блок дерева может включать в себя данные на основании структуры данных квадродерева для соответствующего блока дерева. Закодированный блок дерева является блоком дерева в его закодированной форме. Закодированный блок дерева соответствует блоку дерева, когда закодированный блок дерева является блоком дерева в его закодированной форме.
[0106] Видеокодер 20 может выполнять операции кодирования в отношении каждой неразделенной CU блока дерева. Когда видеокодер 20 выполняет операцию кодирования в отношении неразделенной CU, видеокодер 20 генерирует данные, представляющие закодированную версию неразделенной CU.
[0107] В качестве части выполнения операции кодирования в отношении CU, модуль 122 оценки движения и модуль 124 компенсации движения могут выполнить внешнее предсказание в отношении CU. Другими словами, модуль 122 оценки движения и модуль 124 компенсации движения могут генерировать данные предсказания для CU на основании декодированных выборок опорных картинок, кроме картинки, которая содержит CU. Внешнее предсказание может обеспечить временное сжатие.
[0108] Чтобы выполнить внешнее предсказание в отношении CU, модуль 122 оценки движения может разделить CU на один или более единиц предсказания (PU). Видеокодер 20 и видеодекодер 30 могут поддерживать различные размеры PU. Предполагая, что размер конкретной CU равен 2N×2N, видеокодер 20 и видеодекодер 30 могут поддерживать размеры PU равными 2N×2N или N×N, и внешнее предсказание в симметричных размерах PU, равных 2N×2N, 2N×N, N×2N, N×N, 2N×nU, nL×2N, nR×2N, или подобных. Видеокодер 20 и видеодекодер 30 могут также поддерживать асимметричное разделение для размеров PU, равных 2N×nU, 2N×nD, nL×2N, и nR×2N. В некоторых примерах модуль 122 оценки движения может разделить CU в единицы PU вдоль границы, которая не встречает стороны этой CU под прямым углом.
[0109] Модуль 122 оценки движения может выполнить операцию оценки движения относительно каждой PU в CU. Когда модуль 122 оценки движения выполняет операцию оценки движения относительно PU, модуль 122 оценки движения может генерировать один или более векторов движения для PU. Например, вырезки могут быть I вырезками, P вырезками, или B вырезками. Модуль 122 оценки движения и модуль 124 компенсации движения могут выполнить различные операции для PU в CU в зависимости от того, является ли CU в вырезке I, вырезке P, или вырезке B. В вырезке I все единицы CU являются внутренне-предсказанными. Следовательно, если CU находится в вырезке I, модуль 122 оценки движения и модуль 124 компенсации движения не выполняют внешнее предсказание в отношении этой CU.
[0110] Если CU находится в вырезке P, картинка, содержащая эту CU, является ассоциированной со списком опорных картинок, называемым “список 0”. Каждая из опорных картинок в списке 0 содержит выборки, которые могут быть использованы для внешнего предсказания последующих картинок в порядке декодирования. Когда модуль 122 оценки движения выполняет операцию оценки движения относительно PU в вырезке P, модуль 122 оценки движения ищет опорные картинки в списке 0 для опорной выборки для этой PU. Опорная выборка PU может быть набором пиксельных значений, который наиболее близко соответствует значениям пикселей PU. Модуль 122 оценки движения может использовать множество метрик, чтобы определить, как близко набор пиксельных значений в опорной картинке соответствует пиксельным значениям PU. Например, модуль 122 оценки движения может определить, как близко набор пиксельных значений в опорной картинке соответствует пиксельным значениям PU с помощью суммы абсолютных разностей (SAD), суммы разностей квадратов (SSD) или других метрик разности.
[0111] После идентификации опорной выборки PU в CU в вырезке P модуль 122 оценки движения может генерировать опорный индекс, который указывает опорную картинку в списке 0, содержащую опорную выборку, и вектор движения, который указывает пространственное смещение между PU и опорной выборкой. В различных примерах модуль 122 оценки движения может генерировать вектора движения с различными степенями точности. Например, модуль 122 оценки движения может генерировать вектора движения с пиксельной точности в одну четверть, пиксельной точности в одну восьмую, или другой фракционной пиксельной точностью. Модуль 122 оценки движения может вывести информацию движения для PU к модулю 56 энтропийного кодирования и модулю 124 компенсации движения. Информация движения для PU может включать в себя опорный индекс и вектор движения PU. Модуль 124 компенсации движения может использовать информацию движения единиц PU в CU, чтобы идентифицировать и извлечь опорные выборки этих единиц PU. Модуль 124 компенсации движения может затем использовать пиксельные значения опорных выборок единицы PU, чтобы генерировать данные предсказания для CU.
[0112] Если CU находится в вырезке B, картинка, содержащая CU, может быть ассоциирована с двумя списками опорных картинок, называемых “список 0” и “список 1”. Каждая из опорных картинок в списке 0 содержит выборки, которые могут быть использованы для внешнего предсказания последующих картинок в порядке декодирования. Опорные картинки в списке 1 имеют место перед картинкой в порядке декодирования, но после картинки в порядке представления. В некоторых примерах картинка, содержащая вырезку B, может быть ассоциирована с комбинацией списка, который является комбинацией списка 0 и списка 1.
[0113] Кроме того, если CU находится в вырезке B, модуль 122 оценки движения может выполнить однонаправленное предсказание или двунаправленное предсказание для единиц PU в CU. Когда модуль 122 оценки движения выполняет однонаправленное предсказание для PU, модуль 122 оценки движения может искать опорные картинки списка 1 для опорной выборки для PU. Модуль 122 оценки движения может затем генерировать опорный индекс, который указывает опорную картинку в списке 1, который содержит опорную выборку, и вектор движения, который указывает пространственное смещение между PU и опорной выборкой. Модуль 122 оценки движения может вывести информацию движения для единицы PU в CU к модулю 56 энтропийного кодирования и модулю 124 компенсации движения. Информация движения для PU может включать в себя опорный индекс, индикатор направления предсказания, и вектор движения PU. Индикатор направления предсказания может указать, указывает ли опорный индекс опорную картинку в списке 0 или списке 1. Модуль 124 компенсации движения может использовать информацию движения единиц PU в CU, чтобы идентифицировать и извлечь опорные выборки этих единиц PU. Модуль 124 компенсации движения может затем использовать пиксельные значения опорных выборок единиц PU, чтобы генерировать данные предсказания для CU.
[0114] Когда модуль 122 оценки движения выполняет двунаправленное предсказание для PU, модуль 122 оценки движения может искать опорные картинки в списке 0 для опорной выборки для PU и может также искать опорные картинки в списке 1 для другой опорной выборки для PU. Модуль 122 оценки движения может затем генерировать опорные индексы, которые указывают опорные выборки и вектора движения, которые указывают пространственные смещения между опорными выборками и PU. Модуль 122 оценки движения может вывести информацию движения PU к модулю 116 энтропийного кодирования и модулю 124 компенсации движения. Информация движения для PU может включать в себя опорные индексы и вектора движения PU. Модуль 124 компенсации движения может использовать информацию движения, чтобы идентифицировать и извлечь опорные выборки этих единиц PU. Модуль 124 компенсации движения может затем интерполировать пиксельные значения данных предсказания CU из пиксельных значений в опорных выборках этих единиц PU в CU.
[0115] Обычно модуль 100 предсказания может реализовать способы, описанные в настоящем раскрытии, чтобы сформировать вышеупомянутый отмеченный RPS и генерировать SPS и/или элементы синтаксиса уровня вырезки, идентифицирующие опорные картинки в RPS. Модуль 100 предсказания может представлять аппаратное обеспечение или объединенный аппаратный и программный блок (который может быть включен в пределах большего аппаратного или объединенного аппаратного и программного блока), который реализует способы, описанные более подробно выше.
[0116] В качестве части выполнения операции кодирования в отношении CU, модуль 126 внутреннего предсказания может выполнить внутреннее предсказание в отношении этой CU. Другими словами, модуль 126 внутреннего предсказания может генерировать данные предсказания для CU на основании декодированных пиксельных значений других единиц CU. Внутреннее предсказание может обеспечить пространственное сжатие.
[0117] Чтобы выполнить внутреннее предсказание в отношении CU, модуль 126 внутреннего предсказания может использовать множественные режимы внутреннего предсказания, чтобы генерировать множественные наборы данных предсказания для этой CU. Когда модуль 126 внутреннего предсказания использует режим внутреннего предсказания, чтобы генерировать набор данных предсказания для CU, модуль 126 внутреннего предсказания может разделить CU на одну или более единиц PU. Модуль 126 внутреннего предсказания может затем, для каждой единицы PU, расширять пиксельные значения от соседних единиц PU через эту PU в направлении и/или по градиенту, ассоциированном с режимом внутреннего предсказания. Соседние единицы PU могут быть выше, выше и справа, выше и слева, или слева от PU, принимая слева направо, сверху вниз порядок кодирования относительно единицы PU, единицы CU и блоков дерева. Модуль 46 внутреннего предсказания может использовать различные количества режимов внутреннего предсказания, например, 33 направленных режима внутреннего предсказания, в зависимости от размера CU.
[0118] Модуль 126 внутреннего предсказания может выбрать один из наборов данных предсказания для CU. В различных примерах модуль 126 внутреннего предсказания может выбрать набор данных предсказания для CU различными способами. Например, модуль 126 внутреннего предсказания может выбрать набор данных предсказания для CU, вычисляя «скорость передачи - искажения» для наборов данных предсказания и выбирая набор данных предсказания, которые имеют самую низкое «скорость передачи - искажения».
[0119] Модуль 100 предсказания может выбрать данные предсказания для CU из числа данных предсказания, генерируемых модулем 124 компенсации движения для CU, или данных предсказания, генерируемых модулем 126 внутреннего предсказания для CU. В некоторых примерах модуль 100 предсказания выбирает данные предсказания для CU, на основании ошибки (то есть, искажения) в наборах данных предсказания.
[0120] После того, как модуль 100 предсказания выбрал данные предсказания для CU, модуль 102 генерирования остатка может генерировать остаточные данные для CU, вычитая выбранные данные предсказания CU из пиксельных значений CU. Остаточные данные CU могут включать в себя 2D остаточные блоки, которые соответствуют различным пиксельным компонентам пикселей в CU. Например, остаточные данные могут включать в себя остаточный блок, который соответствует разностям между компонентами светимости пикселей в данных предсказания CU и компонентами светимости пикселей в первоначальных пикселях CU. Кроме того, остаточные данные CU могут включать в себя остаточные блоки, которые соответствуют разностям между компонентами цветности пикселей в данных предсказания CU и компонентами цветности первоначальных пикселей CU.
[0121] CU может иметь одну или более единиц преобразования (TU). Каждая TU в CU может соответствовать различной части остаточных данных CU. Размеры единиц TU в CU могут быть или могут не быть на основании размеров единиц PU в CU. В некоторых примерах CU может быть подразделена на меньшие блоки, используя структуру квадродерева, известную как “остаточное квадро дерево” (RQT). Единицы TU могут соответствовать листовым узлам RQT.
[0122] Модуль 104 преобразования может генерировать один или более блоков коэффициентов для каждой TU в CU, посредством применения преобразования к остаточным данным, соответствующим этой TU. Каждый из блоков коэффициента может быть 2D матрицей коэффициентов. В различных примерах модуль 104 преобразования может применить различные преобразования к остаточным данным, соответствующим TU. Например, модуль преобразования может применить дискретное косинусное преобразование (DCT), направленное преобразование, или концептуально подобное преобразование.
[0123] После того как модуль 104 преобразование генерирует блок коэффициентов для TU, модуль 106 квантования может квантовать коэффициенты в блоке коэффициентов. Квантование в целом относится к процессу, в котором коэффициенты в блоке коэффициентов квантуются, чтобы возможно уменьшить величину использованных данных для представления коэффициентов, обеспечивая дальнейшее сжатие. Квантование может уменьшить битовую глубину, ассоциированную с некоторыми или всеми коэффициентами. Например, значение n-bit может быть округлено в меньшую сторону до m-битового значения во время квантования, где n более чем m.
[0124] Модуль 108 обратного квантования и модуль 110 обратного преобразования могут применить обратное квантование и обратное преобразование к блоку коэффициентов, соответственно, чтобы восстановить остаточные данные из блока коэффициента. Модуль 112 реконструкции может суммировать восстановленные остаточные данные с данными предсказания, генерируемыми модулем 124 компенсации движения или модулем 126 внутреннего предсказания, чтобы произвести восстановленный блок видео для сохранения в буфере 114 декодированных картинок. Модуль 122 оценки движения и модуль 124 компенсации движения могут использовать опорную картинку, которая содержит восстановленный блок видео, чтобы выполнить внешнее предсказание в отношении единиц CU последующих картинок. Кроме того, модуль 126 внутреннего предсказания может использовать восстановленные пиксельные значения единиц CU текущей картинки, чтобы выполнить внутреннее предсказание.
[0125] Модуль 116 энтропийного кодирования может принять данные от других функциональных компонентов видеокодера 20. Например, модуль 116 энтропийного кодирования может принять блоки коэффициентов от модуля 106 квантования и может принять элементы синтаксиса от модуля 100 предсказания. Когда модуль 116 энтропийного кодирования принимает данные, модуль 116 энтропийного кодирования может выполнить одну или более операций энтропийного кодирования, чтобы генерировать энтропийно кодированные данные. Например, видеокодер 20 может выполнить операцию контекстно-адаптивного кодирования с переменной длиной кода (CAVLC), операцию CABAC, операция основанного на синтаксисе контекстно-адаптивного двоичного арифметического кодирования (SBAC), операцию энтропийного кодирования с разделением интервала вероятности (PIPE), или другой тип операции энтропийного кодирования в отношении данных.
[0126] Модуль 116 энтропийного кодирования выводит поток битов, который включает в себя набор единиц NAL. Как описано выше, каждая из единиц NAL может быть синтаксической структурой, содержащей индикацию типа данных в единице NAL и байты, содержащие данные. Каждая закодированная единица NAL вырезки в потоке битов содержит закодированную вырезку. Закодированная вырезка включает в себя закодированные заголовок вырезки и данные вырезки. Данные вырезки могут включать в себя закодированные блоки дерева. Закодированные блоки дерева может включать в себя одну или более закодированных единиц CU. Каждая закодированная CU может включать в себя один или более энтропийно кодированных блоков коэффициентов. Модуль 116 энтропийного кодирования может вывести поток битов для любого из в реальном времени или почти в реальном времени декодирования или для сохранения и более позднего декодирования декодером 30.
[0127] Как описано выше, видеокодер 20 может закодировать видеоданные в соответствии с первыми аспектами способов этого раскрытия. Чтобы закодировать видеоданные в соответствии с первым аспектом способов, модуль 122 оценки движения из видеокодера 20 может определить для текущей картинки видеоданных долгосрочную опорную картинку, которая должна использоваться при кодировании по меньшей мере части текущей картинки видеоданных, способом, описанным выше. В некоторых случаях эта долгосрочная опорная картинка является долгосрочной опорной картинкой, которая присутствует в буфере 114 декодированных картинок, но она не определена как одна или более долгосрочных опорных картинок в наборе параметров последовательности, ассоциированном с текущей картинкой.
[0128] Модуль 122 оценки движения может затем определить количество битов, которые должны быть использованы для представления одного или более битов Значений LSB в POC, которое идентифицирует долгосрочную опорную картинку в потоке битов, представляющем закодированную версию видеоданных. Другими словами, модуль 122 оценки движения может определить “v” в двоичном кодировании без знака, обозначенном как “u(v)” с “u”, снова обозначающим двоичное кодирование без знака. Часто, это количество битов LSB определяют на основании количества битов LSB, требуемых для устранения неоднозначности LTRP от других LTRP или любой другой опорной картинки, сохраненной в DPB. Другими словами, это количество может изменяться на основании вырезки, картинки или GOP. В некоторых случаях количество битов LSB может быть определено для всего потока битов, или его частей. В некоторых случаях количество битов LSB, использованных для идентификации этого различия, является статическим или заранее определенным, таким как в стандарте HEVC. В некоторых случаях количество битов LSB, использованных для идентификации LTRP, может быть получено на основании элементов синтаксиса, определенных для текущей картинки и/или ранее закодированных картинок видеоданных, где модулю 122 оценки движения затем нет необходимости должен сигнализировать количество битов, использованных для представления этого LSB POC, при том что модуль 122 оценки движения может выполнить подобный процесс выведения, чтобы получить “v” количество битов, использованных для представления битов LSB в POC.
[0129] В любом случае модуль 122 оценки движения может затем передать эти один или более битов LSB значения POC к модулю 116 энтропийного кодирования, который может задать один или более битов LSB значения POC, которое идентифицирует LTRP в потоке битов, используя определенное количество битов, использованных для представления одного или более младших значащих битов значения счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку. Другими словами, модуль 116 энтропийного кодирования может задавать биты LSB POC, отмеченные выше в потоке битов, используя “v” количество битов как двоичное число без знака. Как правило, модуль 116 энтропийного кодирования задает один или более младших значащих битов значения счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку в заголовке вырезки, ассоциированном с по меньшей мере частью текущей картинки.
[0130] В некоторых случаях модуль 122 оценки движения определяет количество битов, которые должны быть использованы для представления одного или более младших значащих битов значения счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку в потоке битов, на основании элементов синтаксиса, ранее определенных для одной или более из текущей картинки и ранее закодированных картинок видеоданных, чтобы избежать задания в потоке битов этого определенного количества битов, которые должны быть использованы для представления одного или более младших значащих битов значения счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку. В некоторых случаях, например, когда “v” количество битов не выведено из других элементов синтаксиса (часто как выбор реализации), модуль 116 энтропийного кодирования также задает определенное количество битов, использованных для представления одного или более младших значащих битов значения счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку в потоке битов. Различные модули видеокодера 20, включая модуль 122 оценки движения, блок 124 компенсации движения, сумматор 102, модуль 104 преобразования, модуль 106 квантования и модуль 116 энтропийного кодирования, могут затем закодировать по меньшей мере часть текущей картинки, используя LTRP.
[0131] Видеокодер 20 может также реализовать второй аспект способов, описанных в настоящем раскрытии, потенциально в соединении с первым аспектом способов, описанных в настоящем раскрытии. В соответствии со вторым аспектом способов модуль 122 оценки движения может определить для текущей картинки видеоданных один или более младших значащих битов значения счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку, которая должна использоваться при кодировании по меньшей мере части текущей картинки. Модуль 122 оценки движения может затем определить, являются достаточными ли эти младшие значащие биты, чтобы однозначно идентифицировать долгосрочную опорную картинку от любой другой опорной картинки, сохраненной в буфере 114 декодированных картинок, в котором долгосрочная опорная картинка также сохранена (или будет сохранена в зависимости от порядка, в котором долгосрочная опорная картинка сохранена, по сравнению с тем, когда это определение сделано).
[0132] Модуль 122 оценки движения может определить, являются ли достаточными эти младшие значащие биты, чтобы однозначно идентифицировать долгосрочную опорную картинку от любой другой опорной картинки, сохраненной в буфере 114 декодированных картинок, по меньшей мере частично, определяя младшие значащие биты для по меньшей мере одного значения счета по порядку картинки, которое идентифицирует соответствующую одну из других картинок, сохраненных в буфере 114 декодированных картинок. Модуль 122 оценки движения может затем определить, являются ли младшие значащие биты для этого значения счета по порядку картинки такими же как определенные младшие значащие биты значения счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку. Если эти два младших значащих бита значения счета по порядку картинки являются такими же, модуль 122 оценки движения может затем определить, что младшие значащие биты значения счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку, которая должна использоваться посредством кодирования и декодирования по меньшей мере части текущей картинки, являются недостаточными, чтобы уникально идентифицировать соответствующую долгосрочную опорную картинку. Если, однако, эти два младших значащих бита значения счета по порядку картинки не являются такими же, модуль 122 оценки движения может продолжить определять младшие значащие биты значений счета по порядку картинки, которые идентифицируют другую долгосрочную опорную картинку, сохраненную в буфере 114 декодированных картинок, сравнивать два младших значащих бита счета по порядку картинки, пока или совпадение не будет найдено или все значения счета по порядку картинки, которые идентифицируют картинки, сохраненные в буфере 114 декодированных картинок, не будут подвергнуты этому сравнению.
[0133] Когда один или более младших значащих битов любых других значений счета по порядку картинки, которые идентифицируют любую другую картинку, сохраненную в буфере 114 декодированных картинок, в котором также сохранена долгосрочная опорная картинка, являются такими же как определенные один или более младших значащих битов значения счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку, модуль 122 оценки движения может определить один или более старших значащих битов значения счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку, которая должна использоваться при кодировании по меньшей мере части текущей картинки. Чтобы определить один или более старших значащих битов значения счета по порядку картинки, модуль 122 оценки движения может определить старшие значащие биты значения счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку, которая должна использоваться при кодировании по меньшей мере части текущей картинки таким образом, что эти старшие значащие биты в комбинации с определенными младшими значащими битами являются достаточными, чтобы уникально идентифицировать значение счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку, от любого другого значения счета по порядку картинки, которое идентифицирует любую другую картинку в буфере декодированных картинок.
[0134] Модуль 122 оценки движения может затем отправить эти младшие значащие биты и старшие значащие биты к модулю 116 энтропийного кодирования. Модуль 116 энтропийного кодирования может задавать как определенные один или более младших значащих битов, так и определенные один или более старших значащих битов значения счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку, которая должна использоваться при кодировании по меньшей мере части текущей картинки в потоке битов, представляющем закодированную версию видеоданных. Различные модули видеокодера 20, включая модуль 122 оценки движения, блок 124 компенсации движения, сумматор 102, модуль 104 преобразования, модуль 106 квантования и модуль 116 энтропийного кодирования, могут затем закодировать по меньшей мере часть текущей картинки, используя LTRP.
[0135] Другими словами, вместо того, чтобы только определить, что биты LSB POC, которые идентифицируют долгосрочную опорную картинку, являются достаточными, чтобы уникально идентифицировать долгосрочную опорную картинку от любой другой долгосрочной опорной картинки, определенной в SPS, PPS и/или заголовке вырезки, модуль 122 оценки движения может определить, что биты LSB POC, которые идентифицируют долгосрочную опорную картинку, являются достаточными, чтобы уникально идентифицировать долгосрочную опорную картинку от любой другой долгосрочной опорной картинки, сохраненной в буфере 114 декодированных картинок. В этом отношении видеокодер 20 может избежать тех случаев, которые дают начало проблемам, отмеченным выше, когда видеодекодер неспособен правильно идентифицировать долгосрочную опорную картинку посредством сигнализированных битов LSB POC, когда две или более долгосрочных опорных картинки, имеющие одни и те же биты LSB POC, сохранены в DPB, но только одна из этих долгосрочных опорных картинок была определена в SPS, PPS и/или заголовке вырезки. В результате, посредством реализации этих способов, видеокодер 20 может более робастно закодировать видеоданные по сравнению с обычными видеокодерами, которые только идентифицируют, когда более робастно закодировать сигнализированную долгосрочную опорную картинку относительно тех долгосрочных опорных картинок, сигнализированных в SPS, PPS и/или заголовке вырезки.
[0136] ФИГ. 3 является блок-схемой, которая иллюстрирует примерную конфигурацию видеодекодера 30. ФИГ. 3 предоставлена в целях объяснения и не является ограничивающей способы, которые широко иллюстрируются и описаны в настоящем раскрытии. В целях объяснения настоящее раскрытие описывает видеодекодер 30 в контексте кодирования HEVC. Однако, способы этого раскрытия могут быть применимыми к другим стандартам или способам кодирования.
[0137] В примере согласно фиг. 3, видеодекодер 30 включает в себя множество функциональных компонентов. Функциональные компоненты видеодекодера 30 включают в себя модуль 150 энтропийного декодирования, модуль 152 предсказания, модуль 154 обратного квантования, модуль 156 обратного преобразования, модуль 158 реконструкции и буфер 160 декодированных картинок. Модуль 152 предсказания включает в себя модуль 162 компенсации движения и модуль 164 внутреннего предсказания. В некоторых примерах видеодекодер 30 может выполнить проход декодирования, в целом обратный проходу кодирования, описанному относительно видеокодера 20 из ФИГ. 2. В других примерах видеодекодер 30 может включать в себя больше, меньше или другие функциональные компоненты. Например, видеодекодер 30 может включать в себя фильтр удаления блочности, чтобы фильтровать выходной сигнал модуля 158 реконструкции, чтобы удалить артефакты блочности из восстановленного видео.
[0138] Видеодекодер 30 может принять поток битов, который содержит закодированные видеоданные. Когда видеодекодер 30 принимает поток битов, модуль 150 энтропийного декодирования выполняет операцию синтаксического разбора в отношении потока битов. В результате выполнения операции синтаксического разбора в отношении потока битов модуль 150 энтропийного декодирования может генерировать энтропийно декодированные элементы синтаксиса. Энтропийно декодированные элементы синтаксиса могут включать в себя энтропийно декодированные блоки коэффициентов. Модуль 152 предсказания, модуль 154 обратного квантования, модуль 156 обратного преобразования и модуль 158 реконструкции могут выполнять операцию декодирования, которая использует элементы синтаксиса, чтобы генерировать декодированные видеоданные.
[0139] В некоторых примерах модуль 150 энтропийного декодирования может синтаксически разобрать элементы синтаксиса, относящиеся к битам счета по порядку картинки, используемым для идентификации опорных картинок и формировать наборы опорных картинок в соответствии с различными аспектами способов, описанных более подробно выше. Модуль 150 энтропийного декодирования может обеспечить эти элементы синтаксиса модулю 152 предсказания, который может реализовать способы, описанные в настоящем раскрытии, чтобы определить счет по порядку картинок из этих битов, сформировать набор опорных картинок, который включает в себя опорную картинку, ассоциированную с или идентифицированную со счетом по порядку картинки, и декодировать одну или более закодированных картинок видеоданных, используя набор опорных картинок.
[0140] Как описано выше, поток битов может содержать набор единиц NAL. Единицы NAL потока битов могут включать в себя единицы NAL набора параметров последовательности, единицы NAL набора параметров картинки, единицы NAL SEI, и так далее. В качестве части выполнения операции синтаксического разбора в отношении потока битов модуль 150 энтропийного декодирования может выполнить операции синтаксического разбора, которые извлекают и энтропийно декодируют наборы параметров последовательности из единиц NAL набора параметров последовательности, наборы параметров картинки из единиц NAL набора параметров картинки, данные SEI из единиц NAL SEI, и так далее. Набор параметров последовательности является синтаксической структурой, которая содержит элементы синтаксиса, которые относятся к нулю или более всем закодированным видеопоследовательностям. Набор параметров картинки является синтаксической структурой, содержащей элементы синтаксиса, которые относятся к нулю или более всем закодированным картинкам. Набор параметров картинки, ассоциированный с заданной картинкой, может включать в себя элемент синтаксиса, который идентифицирует набор параметров последовательности, ассоциированный с заданной картинкой.
[0141] Кроме того, единицы NAL потока битов могут включать в себя закодированные единицы NAL вырезки. В качестве части выполнения операции синтаксического разбора в отношении потока битов модуль 150 энтропийного декодирования может выполнять операции синтаксического разбора, которые извлекают и энтропийно декодируют закодированные вырезки из закодированных единиц NAL вырезки. Каждая из закодированных вырезок может включать в себя заголовок вырезки и данные вырезки. Заголовок вырезки может содержать элементы синтаксиса, имеющие отношение к вырезке. Элементы синтаксиса в заголовке вырезки могут включать в себя элемент синтаксиса, который идентифицирует набор параметров картинки, ассоциированный с картинкой, которая содержит вырезку. Модуль 150 энтропийного декодирования может выполнить операцию энтропийного декодирования, такую как операции CAVLC-декодирования, в отношении закодированного заголовка вырезки, чтобы восстановить заголовок вырезки.
[0142] После извлечения данных вырезки из закодированных единиц NAL вырезки модуль 150 энтропийного декодирования может извлечь закодированные блоки дерева из данных вырезки. Модуль 150 энтропийного декодирования может затем извлечь закодированные единицы CU из закодированных блоков дерева. Модуль 150 энтропийного декодирования может выполнить операции синтаксического разбора, которые извлекают элементы синтаксиса из закодированных единиц CU. Извлеченные элементы синтаксиса могут включать в себя энтропийно кодированные блоки коэффициентов. Модуль 150 энтропийного декодирования может затем выполнить операции энтропийного декодирования в отношении элементов синтаксиса. Например, модуль 150 энтропийного декодирования может выполнить операции CABAC в отношении блоков коэффициента.
[0143] Когда модуль 150 энтропийного декодирования выполняет операцию энтропийного декодирования в отношении набора данных, модуль 150 энтропийного декодирования может выбрать контекстную модель. В примерах, где модуль 150 энтропийного декодирования использует CABAC, контекстная модель может указать вероятности конкретных контейнеров (бинов). В примерах, где модуль 150 энтропийного декодирования использует CAVLC, контекстная модель может указать отображение между кодовыми словами и соответствующими данными. Модуль 150 энтропийного декодирования может затем использовать выбранную контекстную модель, чтобы выполнить операцию энтропийного декодирования в отношении набора данных.
После того, как модуль 150 энтропийного декодирования выполнит операцию синтаксического разбора в отношении неразделенной CU, видеодекодер 30 может выполнить операцию декодирования в отношении неразделенной CU. Чтобы выполнить операцию декодирования в отношении неразделенной CU, видеодекодер 30 может, на каждом уровне остаточного квадродерева упомянутой CU, выполнять операцию декодирования в отношении каждой TU в CU. Выполняя операцию декодирования для каждой TU в CU, видеодекодер 30 может восстановить остаточные данные CU.
[0144] В качестве части выполнения операции декодирования в отношении неразделенной TU, модуль 154 обратного квантования может обратно квантовать, то есть, деквантовать, блоки коэффициентов, ассоциированные с TU. Модуль 154 обратного квантования может обратно квантовать блоки коэффициентов способом, подобным процессам обратного квантования, предложенным для HEVC или определенным стандартом декодирования H.264. Модуль 154 обратного квантования может использовать параметр квантования QPY, вычисленный видеокодером 20 для единицы CU блока коэффициента, чтобы определить степень квантования и, аналогично, степень обратного квантования для модуля 154 обратного квантования, для применения.
[0145] После того, как модуль 154 обратного квантования обратно квантует блок коэффициентов, модуль 156 обратного преобразования может генерировать остаточные данные для TU, ассоциированной с блоком коэффициентов. Модуль 156 обратного преобразования может генерировать остаточные данные для TU по меньшей мере частично, посредством применения обратного преобразования к блоку коэффициентов. Например, модуль 156 обратного преобразования может применить обратное DCT, обратное целочисленное преобразование, обратное преобразование Karhunen-Loeve (KLT), обратное вращательное преобразование, обратное направленное преобразование, или другое обратное преобразование к блоку коэффициентов. В некоторых примерах модуль 156 обратного преобразования может определить обратное преобразование, для применения к блоку коэффициентов на основании сигнализации от видеокодера 20. В таких примерах модуль 156 обратного преобразования может определить обратное преобразование на основании сигнализированного преобразования в корневом узле квадродерева для блока дерева, ассоциированного с блоком коэффициентов. В других примерах модуль 156 обратного преобразования может логически вывести обратное преобразование из одной или более характеристик кодирования, таких как размер блока, режима кодирования или подобных. В некоторых примерах модуль 156 обратного преобразования может применить каскадное обратное преобразование.
[0146] Если CU была закодирована, используя внешнее предсказание, модуль 162 компенсации движения может выполнить компенсацию движения, чтобы генерировать данные предсказания для этой CU. Модуль 162 компенсации движения может использовать информацию движения для единиц PU в CU, чтобы идентифицировать опорные выборки для этих единиц PU. Информация движения для PU может включать в себя вектор движения, индекс опорной картинки и направление предсказания. Модуль 162 компенсации движения может затем использовать опорные выборки для единиц PU, чтобы генерировать данные предсказания для упомянутой CU.
[0147] В некоторых примерах модуль 162 компенсации движения может уточнить данные предсказания для CU, выполняя интерполяцию, на основании фильтров интерполяции. Идентификаторы для фильтров интерполяции, которые должны использоваться для компенсации движения с суб-пиксельной точностью, могут быть включены в элементы синтаксиса. Модуль 162 компенсации движения может использовать те же самые фильтры интерполяции, используемые видеокодером 20 во время генерирования данных предсказания CU, чтобы вычислить интерполированные значения для суб-целочисленных пикселей опорного блока. Модуль 162 компенсации движения может определить фильтры интерполяции, используемые видеокодером 20, согласно принятой информации синтаксиса, и использовать эти фильтры интерполяции, чтобы произвести данные предсказания.
[0148] Если CU закодирована, используя внутреннее предсказание, модуль 164 внутреннего предсказания может выполнить внутреннее предсказание, чтобы генерировать данные предсказания для этой CU. Например, модуль 164 внутреннего предсказания может определить режим внутреннего предсказания для CU на основании элементов синтаксиса в потоке битов. Модуль 164 внутреннего предсказания может затем использовать этот режим внутреннего предсказания, чтобы генерировать данные предсказания (например, предсказанные пиксельные значения) для CU на основании пиксельных значений соседних единиц CU.
[0149] Модуль 158 реконструкции может использовать остаточные данные CU и данные предсказания для CU, чтобы восстановить пиксельные значения для CU. В некоторых примерах видеодекодер 30 может применить фильтр удаления блочности, чтобы удалить артефакты блочности из восстановленного фильтра пиксельных значений вырезки или картинки. Буфер 160 декодированных картинок может сохранить декодированные пиксельные значения для картинок этих видеоданных. Буфер 160 декодированных картинок может выдавать опорные картинки для последующей компенсации движения, внутреннего предсказания, и представления на устройстве отображения, таком как устройство 32 отображения из ФИГ. 1.
[0150] Как описано выше, видеодекодер 30 может реализовать или быть сконфигурирован, чтобы выполнить первый аспект способов, описанных выше. Модуль 150 энтропийного декодирования из видеодекодера 30 может принять поток битов, представляющий закодированные видеоданные, закодированные в соответствии с первым аспектом способов, описанных в настоящем раскрытии. Модуль 150 энтропийного декодирования может сначала определить, для части текущей картинки закодированных видеоданных, количество битов, использованных для задания одного или более битов LSB значения POC, которое идентифицирует LTRP для использования при декодировании текущей картинки. В некоторых примерах количество битов может быть явно сигнализировано в потоке битов как элемент синтаксиса, например в заголовке вырезки, как описано выше. В других примерах модуль 150 энтропийного декодирования может вывести количество битов как функцию других элементов синтаксиса, заданных в любом одном или более из SPS, набора параметров картинки (PPS) и заголовка вырезки.
[0151] Модуль 150 энтропийного декодирования может затем синтаксически разобрать определенное количество битов из потока битов, где синтаксически разобранное определенное количество битов представляет один или более битов LSB POC, который идентифицирует LTRP. Часто значение счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку, является значением счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку, которая присутствует в буфере 160 декодированных картинок, но которая не задана как одна или более долгосрочных опорных картинок в наборе параметров последовательности, ассоциированном с текущей картинкой. Это определенное количество битов может задавать то, что упомянуто как биты LSB POC выше. Модуль 150 энтропийного декодирования может передать биты LSB значения POC к модулю 162 компенсации движения. Модуль 162 компенсации движения может затем извлечь, из буфера 160 декодированных картинок, LTRP, которая будет использоваться при декодировании по меньшей мере части текущей картинки на основании этих битов LSB POC.
[0152] Чтобы извлечь эту LTRP из буфера декодированных картинок, модуль 162 компенсации движения может сравнить младшие значащие биты значения POC, которое идентифицирует LTRP, с таким же количеством младших значащих битов значения POC, ассоциированного с по меньшей мере одной картинкой, сохраненной в буфере 160 декодированных картинок. Модуль 162 компенсации движения извлекает эту одну из по меньшей мере одной картинки, сохраненных в буфере 160 декодированных картинок, для использования в качестве долгосрочной опорной картинки при декодировании текущей картинки, которая имеет те же биты LSB для значения POC, ассоциированного с упомянутой одной из по меньшей мере одной картинок, сохраненных в буфере 160 декодированных картинок, что и определенные младшие значащие биты упомянутой LTRP, которые должны быть использованы для декодирования текущей картинки. Другими словами, модуль 162 компенсации движения может сопоставлять биты LSB POC с младшими значащими битами значений POC для картинок, сохраненных в буфере 160 декодированных картинок, и идентифицировать картинку с совпадающими битами LSB POC в качестве долгосрочной опорной картинки, которая присутствует в буфере 160 декодированных картинок, но не задана в SPS, ассоциированном с текущей картинкой.
[0153] Модуль 162 компенсации движения может затем использовать долгосрочную опорную картинку, идентифицированную полученным значением счета по порядку картинки, чтобы декодировать часть текущей картинки. Другими словами, один или более векторов движения, заданных для единицы кодирования текущей вырезки текущей картинки, могут ссылаться на LTRP, идентифицированную битами LSB POC. Модуль 162 компенсации движения может извлечь различные блоки упомянутой LTRP, идентифицированной этими векторами движения, используя эти различные блоки как опорные блоки при выполнении компенсации движения. Видеодекодер 30 может суммировать остаточные данные, закодированные для блоков текущей вырезки текущей картинки, с этими опорными блоками, чтобы генерировать декодированные блоки видеоданных и таким образом восстановить первоначальные видеоданные, как описано выше. Видеодекодер 30 может сохранить декодированные блоки видеоданных в буфере 160 декодированных картинок для более позднего использования при декодировании последующих картинок. Видеодекодер может затем декодировать другие вырезки, если таковые вообще имеются, текущей картинки, аналогично как описано выше.
[0154] Видеодекодер 30 может также реализовать второй аспект способов, описанных в настоящем раскрытии потенциально в соединении с первым аспектом способов, описанных в настоящем раскрытии. В соответствии со вторыми аспектами способов модуль 150 энтропийного декодирования может определить, для текущей картинки этих закодированных видеоданных, младшие значащие биты значения счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку, которая должна использоваться при декодировании по меньшей мере части текущей картинки. Эти один или более младших значащих битов могут не уникально идентифицировать значение счета по порядку картинки долгосрочной опорной картинки относительно одного или более младших значащих битов любого другого значения счета по порядку картинки, которое идентифицирует любую другую картинку, присутствующую в буфере 160 декодированных картинок, в котором также сохранена долгосрочная опорная картинка. Как отмечено выше, младшие значащие биты значения счета по порядку картинки могут уникально идентифицировать значение счета по порядку картинки долгосрочной опорной картинки относительно младших значащих битов любого другого значения счета по порядку картинки, определенного относительно значения счета по порядку картинки, которое идентифицирует любую другую долгосрочную опорную картинку, которая должна использоваться как кандидат на декодирование вырезки текущей картинки.
[0155] В этом отношении, даже когда дельта битов LSB POC являются уникальными для заданного поднабора картинок, сохраненных в буфере 160 декодированных картинок, модуль 150 энтропийного декодирования может определить старшие значащие биты значения счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку. Старшие значащие биты в комбинации с определенными младшими значащими битами потенциально являются достаточными, чтобы отличить значение счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку, от любого другого значения счета по порядку картинки, которое идентифицирует любую другую картинку в буфере 160 декодированных картинок. Модуль 150 энтропийного декодирования может передать младшие значащие биты и старшие значащие биты к модулю 162 компенсации движения. Модуль 162 компенсации движения может затем извлечь долгосрочную опорную картинку из буфера 160 декодированных картинок на основании определенных младших значащих битов значения счета по порядку картинки и определенных старших значащих битов значения счета по порядку картинки. Модуль 162 компенсации движения (в соединении с одним или более из модулей 154, 156 и 158) может затем использовать долгосрочную опорную картинку, идентифицированную определенным значением счета по порядку картинки, чтобы декодировать часть текущей картинки в способе, подобном описанному выше.
[0156] ФИГ. 4 является последовательностью операций, иллюстрирующей примерную операцию видеокодера при выполнении первого аспекта способов, описанных в настоящем раскрытии. В качестве одного примера, видеокодер 20, показанный в примере согласно фиг. 2, может закодировать видеоданные в соответствии с первыми аспектами способов этого раскрытия. Чтобы закодировать видеоданные в соответствии с первым аспектом способов, модуль 122 оценки движения из видеокодера 20 может определить, для текущей картинки видеоданных, долгосрочную опорную картинку, которая должна использоваться, при выполнении внешнего предсказания для текущей картинки видеоданных способом, описанным выше (170). В некоторых случаях эта долгосрочная опорная картинка является долгосрочной опорной картинкой, которая присутствует в буфере 114 декодированных картинок, но которая не задана как одна или более долгосрочных опорных картинок в наборе параметров последовательности, ассоциированном с текущей картинкой.
[0157] Модуль 122 оценки движения может идентифицировать эту выбранную долгосрочную опорную картинку с помощью вышеописанного значения счета по порядку картинки. Модуль 122 оценки движения может получить доступ к набору параметров последовательности, чтобы определить, присутствует ли значение счета по порядку картинки, которое идентифицирует выбранную долгосрочную опорную картинку, в наборе параметров последовательности, который, как отмечено выше, может быть обозначен как “SPS” (172). Другими словами, модуль 122 оценки движения может определить, сигнализирует ли этот SPS уже эту долгосрочную опорную картинку посредством определения, включает ли SPS в себя, в качестве одного примера, значение счета по порядку картинки, которое идентифицирует эту выбранную долгосрочную опорную картинку. Когда SPS включает в себя значение счета по порядку картинки ("ДА" 172), модуль 122 оценки движения определяет индекс этой долгосрочной опорной картинки, идентифицированной значением счета по порядку картинки в, в качестве одного примера, списке значений счета по порядку картинки, которые сигнализируются в SPS для использования при кодировании текущей картинки (и возможно других картинок) (174). Модуль 122 оценки движения может затем передать этот индекс к модулю 116 энтропийного кодирования. Модуль 116 энтропийного кодирования может затем задать этот индекс долгосрочной опорной картинки в потоке битов, представляющем закодированную версию видеоданных (176).
[0158] Однако, если значение счета по порядку картинки, которое идентифицирует выбранную долгосрочную опорную картинку, не задано в SPS ("НЕТ" 172), модуль 122 оценки движения может затем определить количество битов, которые должны быть использованы для представления одного или более битов LSB значения POC, которое идентифицирует долгосрочную опорную картинку, как описано выше (178). Модуль 122 оценки движения может затем передать эти один или более битов LSB значения POC модулю 116 энтропийного кодирования. Модуль 116 энтропийного кодирования может задать один или более битов LSB значения POC, который идентифицирует LTRP в потоке битов, используя определенное количество битов, использованных для представления одного или более младших значащих битов значения счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку (180).
[0159] Видеокодер 20 может затем использовать долгосрочную опорную картинку, идентифицированную значением счета по порядку картинки, чтобы закодировать часть текущей картинки. Другими словами, модуль 124 компенсации движения может также конфигурироваться, чтобы определить предсказанный блок, посредством выполнения внешнего предсказания, используя долгосрочную опорную картинку, способом, описанным выше (182). Модуль 124 компенсации движения затем определяет остаточный блок видео на основании предсказанного блока (184). Таким образом, модуль 124 компенсации движения затем определяет остаточный блок видео, вычитая пиксельные значения предсказанного блока из пиксельных значений текущего закодированного блока видео, формируя остаточные данные как значения пиксельной разности. Сумматор 50 представляет компонент или компоненты, которые выполняют эту операцию вычитания.
[0160] Модуль 104 преобразования затем преобразовывает остаточный блок, чтобы определить коэффициенты преобразования, используя преобразование, такое как дискретное косинусное преобразование (DCT) или концептуально подобное преобразование (186). Модуль 104 преобразования может преобразовать остаточные видеоданные из пиксельной (пространственной) области к области преобразования, такой как частотная область. Модуль 104 преобразования может послать получающиеся коэффициенты преобразования в блок 54 квантования. Модуль 106 квантования квантует коэффициенты преобразования, чтобы далее уменьшить частоту следования битов (188). Процесс квантования может уменьшить битовую глубину, ассоциированную с некоторыми или всеми коэффициентами. Вслед за квантованием модуль 116 энтропийного кодирования энтропийно кодируют квантованные коэффициенты преобразования (190), вставляя энтропийно квантованные коэффициенты преобразования в поток битов, ассоциированные с индексом и/или младшими значащими битами значения счета по порядку картинки (которые обычно задаются в заголовке вырезки, ассоциированном с закодированным блоком видеоданных).
[0161] ФИГ. 5 является последовательностью операций, иллюстрирующей примерную операцию видеодекодера при выполнении первого аспекта способов, описанных в настоящем раскрытии. В качестве одного примера, видеодекодер 30 реализуется или конфигурируется, чтобы выполнить первый аспект способов, описанных выше. Модуль 150 энтропийного декодирования может энтропийно декодировать поток битов, представляющих закодированные видеоданные, чтобы определить квантованные коэффициенты преобразования, соответствующие блоку (который может представлять часть) закодированных видеоданных (200). Модуль 150 энтропийного декодирования может затем передать эти квантованные коэффициенты преобразования к модулю 154 обратного квантования. Модуль 154 обратного квантования может выполнить обратное квантование относительно квантованных коэффициентов преобразования, чтобы определить коэффициенты преобразования (202). Модуль 156 обратного преобразования может затем выполнить обратное преобразование относительно коэффициентов преобразования, чтобы генерировать остаточные данные для текущей картинки (204).
[0162] Модуль 150 энтропийного декодирования может также синтаксически разобрать поток битов, чтобы определить, для блока текущей картинки, долгосрочную опорную картинку, используемую при выполнении внешнего предсказания для блока текущей картинки (206). Модуль 150 энтропийного декодирования может определить, была ли долгосрочная опорная картинка уже сигнализирована в SPS, ассоциированном с текущей картинкой (208). Если эта долгосрочная опорная картинка была уже сигнализирована в SPS ("ДА" 208), модуль 150 энтропийного декодирования может определить индекс этой долгосрочной опорной картинки, как задано в списке долгосрочных опорных картинок в SPS (210). Модуль 150 энтропийного декодирования может затем определить значение счета по порядку картинок (POC), которое идентифицирует долгосрочную опорную картинку из SPS на основании индекса (212).
[0163] Однако, если долгосрочная опорная картинка не задана в SPS ("НЕТ" 208), модуль 150 энтропийного декодирования определяет количество битов, использованных для сигнализации одного или более битов LSB значения POC, которое идентифицирует долгосрочную опорную картинку для использования при декодировании текущей картинки (214). В некоторых примерах количество битов может быть явно сигнализировано в потоке битов как элемент синтаксиса, например, в заголовке вырезки, как описано выше. В других примерах модуль 150 энтропийного декодирования может получить количество битов как функцию других элементов синтаксиса, заданных в любом один или более из SPS, набора параметров картинки (PPS) и заголовка вырезки.
[0164] Модуль 150 энтропийного декодирования может затем синтаксически разобрать определенное количество битов из потока битов, где синтаксически разобранное определенное количество битов представляет один или более битов LSB POC, которое идентифицирует LTRP, как двоичное число без знака (216). Часто значение счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку, является значением счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку, которая присутствует в буфере 160 декодированных картинок, но которая не задана как одна или более долгосрочных опорных картинок в наборе параметров последовательности, ассоциированных с текущей картинкой. Снова, определенное количество битов может задавать то, что упоминалось как биты LSB POC выше. Модуль 150 энтропийного декодирования может передать значение биты LSB POC к модулю 162 компенсации движения. Модуль 162 компенсации движения может затем извлечь, из буфера 160 декодированных картинок, LTRP, которая должна использоваться при декодировании по меньшей мере части текущей картинки на основании битов LSB POC способом, описанный выше (218).
[0165] Модуль 162 компенсации движения извлекает эту одну из по меньшей мере одной картинки, сохраненных в буфере 160 декодированных картинок, для использования в качестве долгосрочной опорной картинки при декодировании текущей картинки, которая имеет те же самые биты LSB для значения POC, ассоциированного с этой одной из по меньшей мере одной картинок, сохраненных в буфере 160 декодированных картинок, что и определенные младшие значащие биты LTRP, которые должны быть использованы для декодирования текущей картинки. Другими словами, модуль 162 компенсации движения может сопоставлять биты LSB POC с младшими значащими битами значений POC для картинок, сохраненных в буфере 160 декодированных картинок, и идентифицировать картинку с совпадающими битами LSB POC в качестве долгосрочной опорной картинки, которая присутствует в буфере 160 декодированных картинок, но не задана в SPS, ассоциированном с текущей картинкой.
[0166] Модуль 162 компенсации движения может затем использовать долгосрочную опорную картинку, идентифицированную полученным значением счета по порядку картинки, чтобы декодировать часть текущей картинки. Другими словами, один или более векторов движения, заданные для единицы кодирования текущей вырезки текущей картинки, могут ссылаться на LTRP, идентифицированную битами LSB POC. Модуль 162 компенсации движения может извлечь различные блоки LTRP, идентифицированные этими векторами движения, используя эти различные блоки как опорные блоки при выполнении компенсации движения. Видеодекодер 30 может суммировать остаточные данные, закодированные для блоков текущей вырезки текущей картинки, с этими опорными блоками, чтобы генерировать декодированные блоки видеоданных и таким образом восстановить первоначальные видеоданные, как описано выше. В этом смысле видеодекодер 30 может восстановить блок текущей картинки на основании долгосрочной опорной картинки и остаточных данных (220). Видеодекодер 30 может сохранить декодированные блоки видеоданных в буфере 160 декодированных картинок для более позднего использования при декодировании последующих картинок. Видеодекодер может затем декодировать другие вырезки, если таковые вообще имеются, текущей картинки, аналогично тому, как описано выше.
[0167] ФИГ. 6 является последовательностью операций, иллюстрирующей примерную операцию видеокодера при выполнении второго аспекта способов, описанных в настоящем раскрытии. В качестве одного примера видеокодер 20 конфигурируется, чтобы реализовать второй аспект способов, описанных в настоящем раскрытии, потенциально в соединении с первым аспектом способов. В соответствии со вторыми аспектами способов, модуль 122 оценки движения из видеокодера 20 может определить, для текущей картинки видеоданных, долгосрочную опорную картинку для использования при выполнении внешнего предсказания для текущей картинки (230). Модуль 122 оценки движения может определить один или более младших значащих битов значения счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку (232). Модуль 122 оценки движения может затем определить, являются ли достаточными эти младшие значащие биты, чтобы однозначно идентифицировать долгосрочную опорную картинку от любой другой опорной картинки, сохраненной в буфере 114 декодированных картинок, в котором долгосрочная опорная картинка также сохранена (или будет сохранена в зависимости от порядка, в котором долгосрочная опорная картинка сохранена по сравнению с тем, когда это определение сделано), способом, описанным выше.
[0168] Модуль 122 оценки движения может определить, являются ли достаточными эти младшие значащие биты, чтобы однозначно идентифицировать долгосрочную опорную картинку от любой другой опорной картинки, сохраненной в буфере 114 декодированных картинок, по меньшей мере частично, посредством определения младших значащих битов для по меньшей мере одного значения счета по порядку картинки, которое идентифицирует соответствующую одну из других картинок, сохраненных в буфере 114 декодированных картинок. Модуль 122 оценки движения может затем определить, являются ли младшие значащие биты для этого значения счета по порядку картинки такими же как определенные младшие значащие биты значения счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку. Если эти два младших значащих бита значения счета по порядку картинки являются такими же, модуль 122 оценки движения может затем определить, что младшие значащие биты значения счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку, которая должна использоваться посредством кодирования и декодирования по меньшей мере части текущей картинки, являются недостаточными, чтобы уникально идентифицировать соответствующую долгосрочную опорную картинку. Если, однако, эти два младших значащих бита значения счета по порядку картинки не являются одинаковыми, модуль 122 оценки движения может продолжить определять младшие значащие биты значений счета по порядку картинки, которые идентифицируют другую долгосрочную опорную картинку, сохраненную в буфере 114 декодированных картинок, сравнивая два младших значащих бита счета по порядку картинки, пока или совпадение не будет найдено или все значения счета по порядку картинки, которые идентифицируют картинки, сохраненные в буфере 114 декодированных картинок, не будут подвергнуты этому сравнению.
[0169] Другими словами, блок 122 оценки движения может сравнить определенные младшие значащие биты с младшими значащими битами каждого из значений счета по порядку картинки, которые идентифицируют каждую другую картинку, сохраненную в буфере 114 декодированных картинок (234). Когда один или более младших значащих битов любых других значений счета по порядку картинки, которые идентифицируют любую другую картинку, сохраненную в буфере 114 декодированных картинок, в котором также сохранена долгосрочная опорная картинка, являются такими же как определенные один или более младших значащих битов значения счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку ("ДА" 236), модуль 122 оценки движения может определить один или более старших значащих битов определенного значения счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку, которая должна использоваться при кодировании по меньшей мере части текущей картинки, способом, описанным выше (238).
[0170] Модуль 122 оценки движения может затем отправить эти младшие значащие биты и старшие значащие биты к модулю 116 энтропийного кодирования. Модуль 116 энтропийного кодирования может задать старшие значащие биты значения счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку, которая должна использоваться при кодировании по меньшей мере части текущей картинки, в потоке битов, представляющем закодированную версию видеоданных (240). Модуль 116 энтропийного кодирования может также задать определенные один или более младших значащих битов значения счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку, которая должна использоваться при кодировании по меньшей мере части текущей картинки в потоке битов (242).
[0171] Когда, однако, один или более младших значащих битов любых других значений счета по порядку картинки, которые идентифицируют любую другую картинку, сохраненную в буфере 114 декодированных картинок, в котором также сохранена долгосрочная опорная картинка, не являются такими же как определенные один или более младших значащих битов значения счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку ("НЕТ" 236), блок 122 оценки движения может отправить только определенные младшие значащие биты значения счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку, без, в ином случае, определения старших значащих битов, так как младшие значащие биты уникально идентифицируют долгосрочную опорную картинку относительно картинок, сохраненных в буфере 114 декодированных картинок. Модуль энтропийного кодирования 122 может затем задать определенные один или более младших значащих битов значения счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку, которая должна использоваться при кодировании по меньшей мере части текущей картинки в потоке битов, без определения старших значащих битов снова, так как младшие значащие биты уникально идентифицируют долгосрочную опорную картинку относительно картинок, сохраненных в буфере 114 декодированных картинок (242).
[0172] Видеокодер 20 может затем использовать долгосрочную опорную картинку, идентифицированную значением счета по порядку картинки, чтобы закодировать часть текущей картинки. Другими словами, модуль 124 компенсации движения может также конфигурироваться, чтобы определить предсказанный блок, посредством выполнения внешнего предсказания, используя долгосрочную опорную картинку, способом, описанным выше (244). Модуль 124 компенсации движения затем определяет остаточный блок видео на основании предсказанного блока (246). Таким образом, модуль 124 компенсации движения затем определяет остаточный блок видео, вычитая пиксельные значения предсказанного блока из пиксельных значений текущего закодированного блока видео, формируя остаточные данные как значения пиксельной разности. Сумматор 50 представляет компонент или компоненты, которые выполняют эту операцию вычитания.
[0173] Модуль 104 преобразования затем преобразовывает остаточный блок, чтобы определить коэффициенты преобразования, используя преобразование, такое как дискретное косинусное преобразование (DCT) или концептуально подобные преобразование (248). Модуль 104 преобразования может преобразовать остаточные видеоданные из пиксельной (пространственной) области в область преобразования, такую как частотная область. Модуль 104 преобразования может послать результирующие коэффициенты преобразования в блок 54 квантования. Модуль 106 квантования квантует коэффициенты преобразования, чтобы далее уменьшить частоту следования битов (250). Процесс квантования может уменьшить битовую глубину, ассоциированную с некоторыми или всеми коэффициентами. После квантования модуль 116 энтропийного кодирования энтропийно кодирует квантованные коэффициенты преобразования (252), вставляя энтропийно квантованные коэффициенты преобразования в поток битов, ассоциированный с индексом и/или младшими значащими битами значения счета по порядку картинки (которые обычно задается в заголовке вырезки, ассоциированном с закодированным блоком видеоданных).
[0174] ФИГ. 7 является последовательностью операций, иллюстрирующей примерную операцию видеодекодера при выполнении второго аспекта способов, описанных в настоящем раскрытии. В качестве одного примера видеодекодер 30 может реализовать вторые аспекты способов, описанных в настоящем раскрытии, потенциально в соединении с первым аспектом способов, описанных в настоящем раскрытии. Модуль 150 энтропийного декодирования может энтропийно декодировать поток битов, представляющий закодированные видеоданные, чтобы определить квантованные коэффициенты преобразования, соответствующие блоку (который может представлять часть) закодированных видеоданных (260). Модуль 150 энтропийного декодирования может затем передать эти квантованные коэффициенты преобразования к модулю 154 обратного квантования. Модуль 154 обратного квантования может выполнить обратное квантование относительно квантованных коэффициентов преобразования, чтобы определить коэффициенты преобразования (262). Модуль 156 обратного преобразования может затем выполнить обратное преобразование относительно коэффициентов преобразования, чтобы генерировать остаточные данные для текущей картинки (264).
[0175] Модуль 150 энтропийного декодирования может также синтаксически разобрать поток битов, чтобы определить, для блока текущей картинки, долгосрочную опорную картинка, используемую при выполнении внешнего предсказания для блока текущей картинки. В соответствии со вторыми аспектами способов, модуль 150 энтропийного декодирования может энтропийно декодировать младшие значащие биты потока битов счета по порядку картинки, который идентифицирует долгосрочную опорную картинку, которая должна использоваться при декодировании, то есть, посредством внешнего предсказания, по меньшей мере части текущей картинки (266). Модуль 150 энтропийного декодирования может определить, присутствуют ли старшие значащие биты (MSB) для значения счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку, в потоке битов (часто посредством синтаксического разбора элемента синтаксиса в форме флага из потока битов, который указывает, присутствуют ли старшие значащие биты) (268).
[0176] Если эти старшие значащие биты присутствуют ("ДА" 268), модуль 150 энтропийного декодирования может энтропийно декодировать поток битов, чтобы определить старшие значащие биты значения счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку, которая должна использоваться при выполнении внешнего предсказания для текущей картинки (270). Модуль 150 энтропийного декодирования может передать младшие значащие биты и старшие значащие биты к модулю 162 компенсации движения. Модуль 162 компенсации движения может затем извлечь долгосрочную опорную картинку из буфера 160 декодированных картинок на основании определенных младших значащих битов значения счета по порядку картинки и определенные старшие значащие биты значения счета по порядку картинки (272). Если эти старшие значащие биты не присутствуют ("НЕТ" 268), модуль 150 энтропийного декодирования может передать младшие значащие биты к модулю 162 компенсации движения. Модуль 162 компенсации движения может затем извлечь долгосрочную опорную картинку из буфера 160 декодированных картинок на основании определенных младших значащих битов значения счета по порядку картинки (274).
[0177] После извлечения этой долгосрочной опорной картинки модуль 162 компенсации движения (в соединении с одним или более из модулей 154, 156 и 158) может затем использовать долгосрочную опорную картинку, идентифицированную определенным значением счета по порядку картинки, чтобы декодировать часть текущей картинки способом, подобным описанному выше. Другими словами, один или более векторов движения, определенные для единицы кодирования текущей вырезки текущей картинки, могут ссылаться на LTRP, идентифицированную битами LSB POC. Модуль 162 компенсации движения может извлечь различные блоки LTRP, идентифицированной этими векторами движения, используя эти различные блоки как опорные блоки при выполнении компенсации движения. Видеодекодер 30 может суммировать остаточные данные, закодированные для блоков текущей вырезки текущей картинки, с этими опорными блоками, чтобы генерировать декодированные блоки видеоданных и таким образом восстановить первоначальные видеоданные, как описано выше. В этом смысле видеодекодер 30 может восстановить блок текущей картинки на основании долгосрочной опорной картинки и остаточных данных (276). Видеодекодер 30 может сохранить декодированные блоки видеоданных в буфере 160 декодированных картинок для более позднего использования при декодировании последующих картинок. Видеодекодер может затем декодировать другие вырезки, если таковые вообще имеются, текущей картинки, аналогично тому, как описано выше.
[0178] В то время как описано выше относительно полных значений счета по порядку картинки, способы могут также быть реализованы относительно дельты значений счета по порядку картинки, вычисленной как разность между значением счета по порядку картинки, которое идентифицирует текущую картинку, и значением счета по порядку картинки, которое идентифицирует долгосрочную опорную картинку, которая должна использоваться при кодировании (который является термином, который может быть использован для упоминания кодирования и декодирования) текущей картинки видеоданных. В этом отношении ссылка на значение счета по порядку картинки может относиться как к полным значениям счета по порядку картинки, так и к дельте значений счета по порядку картинки. Способы не должны поэтому быть ограничены в этом отношении.
[0179] Кроме того, различные другие способы описаны, которые относятся к первым и вторым аспектам способов и в некоторой степени описаны ниже. Как отмечено выше, последняя версия HEVC WD6 использует основанный на наборе опорных картинок (RPS) механизм, чтобы управлять опорными картинками. RPS относится к набору опорных картинок, ассоциированных с картинкой, состоящему из всех опорных картинок, которые находятся до ассоциированной картинки в порядке декодирования, который может использоваться для внешнего предсказания ассоциированной картинки или любой картинки после ассоциированной картинки в порядке декодирования. Порядок декодирования может ссылаться на порядок, в котором элементы синтаксиса обрабатываются процессом декодирования.
[0180] В HEVC RPS может быть непосредственно сигнализирован для каждой закодированной картинки. Элементы синтаксиса для сигнализации RPS включены как в набор параметров последовательности (SPS), так и в заголовок вырезки, ассоциированный с каждой закодированной картинкой. Для конкретной закодированной картинки RPS может быть одним из альтернативных наборов, включенных в SPS, как обозначено флагом в заголовке вырезки, или непосредственно сигнализированных в заголовке вырезки.
[0181] RPS для каждой картинки состоит из пяти различных списков опорных картинок, на которые также можно ссылаться как на пять поднаборов RPS. Первый поднабор RPS может относиться к RefPicSetStCurrBefore, который включает в себя все краткосрочные опорные картинки (STRP), которые находятся до текущей картинки, как в порядке декодирование, так и в порядке вывода, и которые могут быть использованы во внешнем предсказании текущей картинки. Второй поднабор RPS может относиться к RefPicSetStCurrAfter, который включает в себя все краткосрочные опорные картинки, которые находятся до текущей картинки в порядке декодирования, которые следуют за текущей картинкой в порядке вывода, и которые могут быть использованы во внешнем предсказании текущей картинки. Третий поднабор RPS может относиться к RefPicSetStFoll, который включает в себя все краткосрочные опорные картинки, которые могут быть использованы во внешнем предсказании одной или более картинок после текущей картинки в порядке декодирования, и которые не используются во внешнем предсказании текущей картинки. Четвертый поднабор RPS может относиться к RefPicSetLtCurr, который включает в себя все долгосрочные опорные картинки (LTRP), которые могут быть использованы во внешнем предсказании текущей картинки. Пятый поднабор RPS может относиться к RefPicSetLtFoll, который включает в себя все долгосрочные опорные картинки, которые могут быть использованы во внешнем предсказании одной или более картинок после текущей картинки в порядке декодирования, и которые не используются во внешнем предсказании текущей картинки. Порядок вывода может относится к порядку, в котором декодированные картинки выводятся из буфера декодированных картинок (DPB) в случае, если декодированные картинки должны быть выведены из DPB. Порядок вывода картинки может быть задан значением счета по порядку картинки (POC), часто независимо от того, должна ли картинка быть выведена.
[0182] В любом случае, имеются многие потенциальные проблемы относительно того, как HEVC WD6 указывает, что эти поднаборы RPS могут быть получены и сигнализированы. Первая проблема касается HEVC WD6 подпункт 8.3.2, уравнение (Eqn). 8-6, где выведение поднаборов RPS согласно этим уравнениям 8-6 может зависеть от статуса опорных картинок в DPB как результат предыдущей картинки (из-за формулировки “есть долгосрочная опорная картинка picX в DPB” или подобной). Однако, эта формулировка в подпункте 8.3.2 может быть в противоречии с фундаментальным принципом RPS, что статус опорных картинок в DPB является "внутренне кодированным", который может означать, что он не должен зависеть от более раннего статуса. Другими словами, определение текущего RPS для текущей картинки может зависеть от предыдущего хранения LTRP ("picX") в DPB несмотря на то, что фундаментальный принцип RPS является тем, что статус опорной картинки в DPB является внутренне кодированным, а не внешне кодированным и поэтому должен использоваться для временного принятия решения внешнего кодирования.
[0183] Вторая проблема относится к выведению LTRP в RPS. Из уравнений 8-6 в подпункте 8.3.2 HEVC WD6, LTRP идентифицирована ее младшим значащим битом POC (LSB) (который обозначен как “pic_order_cnt_lsb”), если delta_poc_msb_present_flag[i] равно 0, или его полным значением POC (обозначенное “PicOrderCntVal”) иначе. Однако, в последнем случае, части в уравнениях 8-5 из HEVC WD6 для выведения полного значения POC LTRP, "((PicOrderCntVal−DeltaPocLt[i]+MaxPicOrderCntLsb)%MaxPicOrderCntLsb)-(DeltaPocMSBCycleLt[i])*MaxPicOrderCntLsb", могут быть неправильными.
[0184] Например, если MaxPicOrderCntLsb=256, и текущая картинка имеет полное значение POC, равное 256*10+100 (LSB равны 100), картинки с полными значениями POC 256*8+100 и 256*6+100 приводят к двум LTRP с одним и тем же значением LSB POC равным 100. При заданном том, что выше упомянуто, DeltaPocMSBCycleLt [i] для двух LRTP может быть равно 2 и 4, соответственно. Согласно уравнения 8-5, полные значения POC двух LTRP могут быть равны -256*2 и -256*4, соответственно, что является неправильным.
[0185] Третья проблема, ассоциированная с выведением RPS в HEVC WD6, может быть той, что, как только картинка сигнализирована как LTRP, она никогда не может быть сигнализирована как краткосрочная опорная картинка (STRP).
[0186] Четвертая проблема, ассоциированная с выведением RPS в HEVC WD6, может быть той, что LSB POC в LTRP, которая должна быть включена в RPS картинки, сигнализируется в заголовке вырезки как дельта битов LSB дельты значений POC, закодированная с использованием ue (v). Это может быть неэффективно, как дельта LSB дельты значений POC являются типично большими для LTRP, таким образом требуя множества битов для представления. Это является также не непосредственным для кодеров, чтобы выяснить какое значение сигнализировать в заголовке вырезки.
[0187] Пятая проблема, ассоциированная с выведением RPS в HEVC WD6, может быть той, что, когда есть две или более LTRP, имеющих одно и то же значение LSB POC, полные значения POC всех этих LTRP должны быть сигнализированы, при этом значения MSB POC сигнализируются как дельта двух непрерывных LTRP, имеющих одинаковые биты LSB POC, используя ue (v). Для первого одного из наборов непрерывно сигнализированных LTRP, имеющих одинаковые биты LSB POC, MSB POC непосредственно сигнализируются, используя ue (v). Здесь может быть два аспекта неэффективности. Первый заключается в том, что дельта значений MSB POC и непосредственно сигнализированное значение MSB POC для первой LTRP в наборе может быть большим и поэтому может требовать много битов для представления этих значений. Второй заключается в том, что в большинстве случаев суммирование несколько более LSB (или эквивалентно, делая длину MSB немного больше) может обеспечить уникальную идентификационную информацию всех LTRP. Соответственно, может не быть необходимым сигнализировать все значения MSB для LTRP, имеющих одинаковые значения LSB.
[0188] Чтобы потенциально решить вышеупомянутые идентифицированные проблемы, различные способы описаны ниже для выведения набора опорных картинок (RPS) и сигнализации долгосрочных опорных картинок (LTRP), которые должны быть включены в RPS закодированной картинки, включая вышеупомянутые отмеченные первые и вторые аспекты способов, описанных выше со ссылками на фиг. 1-7. Снова, в то время как описаны ниже относительно HEVC WD6, эти способы могут быть реализованы относительно любого стандарта кодирования видео или других способов кодирования, вовлекающих внешнее предсказание относительно опорных данных. Кроме того, выделение серым используется ниже, чтобы обозначить изменения к HEVC WD6.
[0189] В одном аспекте синтаксис заголовка вырезки и семантика, как задано HEVC WD6, могут быть модифицированы, где синтаксис заголовка вырезки изменен следующим образом: элементы синтаксиса poc_lsb_len_delta[i] и poc_lsb_lt[i] добавлены, и элементы синтаксиса delta_poc_lsb_lt[i], delta_poc_msb_present_flag[i] и delta_poc_msb_cycle_lt_minus1[i] удалены, другие элементы синтаксиса оставлены неизменными. Синтаксис заголовка вырезки может поэтому быть похож на тот, который показан ниже в Таблице 1, где выделенные жирным шрифтом и выделенные части, показанные ниже, отражают дополнения, или изменения к HEVC в поддержку одного или более аспектов способов, описанных в настоящем раскрытии.
<b>Таблица 1</b>
slice_header(){
Дескриптор
…
if(long_term_ref_pics_present_flag){
num_long_term_pics
ue(v)
for(i=0; i<num_long_term_pics; i++){
poc_lsb_len_delta[i]
ue(v)
poc_lsb_lt[i]
u(v)
used_by_curr_pic_lt_flag[i]
u(1)
}
}
…
}
[0190] Семантика заголовка вырезки может также быть изменена следующим образом: семантика элементов синтаксиса poc_lsb_len_delta[i] и poc_lsb_lt[i] добавлена, и семантика элементов синтаксиса delta_poc_lsb_lt[i], delta_poc_msb_present_flag[i] и delta_poc_msb_cycle_lt_minus1[i] удалена, с семантикой для других элементов синтаксиса оставленной неизменной.
[0191] Элемент синтаксиса poc_lsb_len_delta[i] может задавать количество битов, чтобы представить poc_lsb_lt[i].
[0192] Переменная PocLsbLtLen[i] может быть выведена следующим образом:
if(i= =0)PocLsbLtLen[i]=log2_max_pic_order_cnt_lsb_minus4+4 +poc_lsb_len_delta[i]else PocLsbLtLen[i]=PocLsbLtLen[i−1]+poc_lsb_len_delta[i]
[0193] Элемент синтаксиса poc_lsb_lt[i] может задавать младшие значащие биты значения счета по порядку картинки i-th долгосрочной опорной картинки, которая включена в набор долгосрочных опорных картинок текущей картинки. Этот элемент синтаксиса poc_lsb_lt[i] может быть в диапазоне от 0 до (1<<PocLsbLtLen[i])-1, включительно. Длина poc_lsb_lt[i] может быть PocLsbLtLen[i]. Альтернативно, переменная PocLsbLtLen[i] может быть получена следующим образом:
PocLsbLtLen[i]=log2_max_pic_order_cnt_lsb_minus4+4+poc_lsb_len_delta[i]
[0194] Процесс декодирования для наборов опорных картинок, заданных в секции 8.3.3 HEVC WD6, может быть изменен следующим образом, где выделение серым или штриховка указывают дополнения и/или изменения к секции 8.3.2 HEVC WD6 как задано в настоящее время. Следующее воспроизводит большую часть секции 8.3.2 HEVC WD6.
Этот процесс вызывается однократно для каждой картинки после декодирования заголовка вырезки, но до декодирования любой единицы кодирования и до процесса декодирования для создания списка опорных картинок вырезки, как задано в подпункте 8.3.3 HEVC WD6. Процесс может привести к маркировке одной или более опорных картинок как "неиспользуемая для ссылки".
ЗАМЕЧАНИЕ 1 - Набор опорных картинок является абсолютным описанием опорных картинок, используемых в процессе декодирования потока и будущих кодированных картинок. Сигнализация набора опорных картинок является явной в том смысле, что все опорные картинки, включенные в набор опорных картинок, перечислены явно и нет никакого процесса создания набора опорных картинок по умолчанию в декодере, который зависит от статуса буфера декодированных картинок.
Краткосрочные опорные картинки идентифицированы их значениями PicOrderCntVal. Долгосрочные опорные картинки идентифицированы младшими значащими битами их значений PicOrderCntVal.
[0195] Пять списков значений счета по порядку картинки или младших значащих битов счета по порядку картинки построены, чтобы получить набор опорных картинок; PocStCurrBefore, PocStCurrAfter, PocStFoll, PocLtCurr, и PocLtFoll с NumPocStCurrBefore, NumPocStCurrAfter, NumPocStFoll, NumPocLtCurr, и количеством элементов NumPocLtFoll, соответственно.
- Если текущая картинка является картинкой IDR, PocStCurrBefore, PocStCurrAfter, PocStFoll, PocLtCurr, и PocLtFoll все установлены пустыми, и NumPocStCurrBefore, NumPocStCurrAfter, NumPocStFoll, NumPocLtCurr, и NumPocLtFoll все установлены в 0.
- Иначе, следующее применяется для выведения пяти списков значений счета по порядку картинки и количеств записей.
for(i=0, j=0, k=0; i<NumNegativePics[StRpsIdx]; i++) if (UsedByCurrPicS0[StRpsIdx][i]) PocStCurrBefore[j++]=PicOrderCntVal+DeltaPocS0[StRpsIdx][i] else PocStFoll[k++]=PicOrderCntVal+DeltaPocS0[StRpsIdx][i]NumPocStCur rBefore=jfor(i=0, j=0; i<NumPositivePics[StRpsIdx]; i++) if (UsedByCurrPicS1[StRpsIdx][i]) PocStCurrAfter[j++]=PicOrderCntVal+DeltaPocS1[StRpsIdx][i] else PocStFoll[k++]=PicOrderCntVal+DeltaPocS1[StRpsIdx][i]NumPocStCurrAfter=jNumPocStFoll=k (8-5)
for(i=0, j=0, k=0; i<num_long_term_pics; i++) if (used_by_curr_pic_lt_flag[i]) {PocLtCurr[j]=poc_lsb_lt[i] PocLsbLenCurr[j]=PocLsbLtLen[i]j++} else {PocLtFoll[k]=poc_lsb_lt[i] ExtPocLsbLenFoll[k]=PocLsbLtLen[i] k++}NumPocLtCurr=jNumPocLtFoll=k
где PicOrderCntVal - является счетом по порядку картинок текущей картинки как задано в подпункте 8.2.1 HEVC WD6.
ЗАМЕЧАНИЕ 2 - значение StRpsIdx в диапазоне от 0 до num_short_term_ref_pic_sets − 1, включительно, указывает, что набор краткосрочных опорных картинок из активного набора параметров последовательности используется, где StRpsIdx - индекс набора краткосрочных опорных картинок в списке наборов краткосрочных опорных картинок в порядке, в котором они сигнализируются в наборе параметров последовательности. StRpsIdx, равный num_short_term_ref_pic_sets, указывает, что используется набор краткосрочных опорных картинок, явно сигнализированный в заголовке вырезки.
Набор опорных картинок состоит из пяти списков опорных картинок; RefPicSetStCurrBefore, RefPicSetStCurrAfter, RefPicSetStFoll, RefPicSetLtCurr и RefPicSetLtFoll. Переменная NumPocTotalCurr установлена равной NumPocStCurrBefore+NumPocStCurrAfter+NumPocLtCurr. При декодировании P или B вырезки, имеется требование соответствия потока битов, что значение NumPocTotalCurr не должно быть равным 0.
ЗАМЕЧАНИЕ 3 - RefPicSetStCurrBefore, RefPicSetStCurrAfter и RefPicSetLtCurr содержат все опорные картинки, которые могут быть использованы во внешнем предсказании текущей картинки, и которое может использоваться во внешнем предсказании одной или более картинок после текущей картинки в порядке декодирования. RefPicSetStFoll и RefPicSetLtFoll состоят из всех опорных картинок, которые не используются во внешнем предсказании текущей картинки, но могут быть использованы во внешнем предсказании одной или более картинок после текущей картинки в порядке декодирования.
Маркировка опорной картинки может быть "неиспользуемая для ссылки", "используемая для краткосрочной ссылки" или "используемая для долгосрочной ссылки," но только одна среди этих трех. Когда опорная картинка упоминается как отмеченная как "используемая для ссылки," это все вместе относится к картинке, отмечаемой как "используемая для краткосрочной ссылки" или "используемая для долгосрочной ссылки" (но не оба). Опорная картинка, которая отмечена как "используемая для краткосрочной ссылки", упоминается как краткосрочная опорная картинка. Опорная картинка, которая отмечена как "используемая для долгосрочной ссылки", упоминается в качестве долгосрочной опорной картинки.
[0196] Процесс выведения для набора опорных картинок и маркировка картинок выполняются согласно следующим упорядоченным этапам, где DPB ссылается на буфер декодированных картинок, как описано в Приложении C HEVC WD6:
1. Следующее применяется:
for(i=0; i<NumPocStCurrBefore; i++) if(there is a reference picture picX in the DPB with PicOrderCntVal equal to PocStCurrBefore[i]) RefPicSetStCurrBefore[i]=picX else RefPicSetStCurrBefore[i]="no reference picture"
for(i=0; i<NumPocStCurrAfter; i++) if(there is a reference picture picX in the DPB with PicOrderCntVal equal to PocStCurrAfter[i]) RefPicSetStCurrAfter[i]=picX else RefPicSetStCurrAfter[i]="no reference picture" (8-6)
for(i=0; i<NumPocStFoll; i++) if(there is a reference picture picX in the DPB with PicOrderCntVal equal to PocStFoll[i]) RefPicSetStFoll[i]=picX else RefPicSetStFoll[i]="no reference picture"
2. Все опорные картинки, включенные в RefPicSetStCurrBefore, RefPicSetStCurrAfter и RefPicSetStFoll, отмечены как "используется для краткосрочной ссылки".
3. Следующее применяется:
For (i=0; i<NumPocLtCurr; i++) {if(there is a reference picture picX in the DPB, not included in RefPicSetStCurrBefore, RefPicSetStCurrAfter or RefPicSetStFoll, with PicOrderCntVal for which Abs(PicOrderCntVal) % (2PocLsbLenCurr[i]) is equal to PocLtCurr[i]) RefPicSetLtCurr[i]=picX else RefPicSetLtCurr[i]="no reference picture"} (8-7)
for(i=0; i<NumPocLtFoll; i++) {if(there is a reference picture picX in the DPB, not included in RefPicSetStCurrBefore, RefPicSetStCurrAfter or RefPicSetStFoll, with PicOrderCntVal for which Abs(PicOrderCntVal) % (2PocLsbLenFoll[i]) is equal to PocLtFoll[i]) RefPicSetLtFoll[i]=picX else RefPicSetLtFoll[i]="no reference picture"}
4. Все опорные картинки, включенные в RefPicSetLtCurr и RefPicSetLtFoll, отмечены как "используемые для долгосрочной ссылки"
5. Все опорные картинки в буфере декодированных картинок, которые не включены в RefPicSetLtCurr, RefPicSetLtFoll, RefPicSetStCurrBefore, RefPicSetStCurrAfter или RefPicSetStFoll, отмечены как "неиспользуемые для ссылки".
ЗАМЕЧАНИЕ 4 - Могут быть одна или более опорных картинок, которые включены в набор опорных картинок, но которые не присутствуют в буфере декодированных картинок. Когда первая закодированная картинка в потоке битов является картинкой IDR, или текущая закодированная картинка не является лидирующей картинкой первой закодированной картинки в потоке битов, записи в RefPicSetStFoll или RefPicSetLtFoll, которые не равны "никакой опорной картинки" должны быть проигнорированы. Когда первая закодированная картинка в потоке битов не является картинкой CRA, или текущая закодированная картинка не является лидирующей картинкой первой закодированной картинки в потоке битов, непреднамеренная потеря картинок должна быть логически выведена для каждой записи в RefPicSetStCurrBefore, RefPicSetStCurrAfter и RefPicSetLtCurr, которая не равна "никакой опорной картинки".
Альтернативно, в вышеупомянутых этапах слова "Это есть опорная картинка picX", изменяются на "Это есть картинка picX".
Имеется требование соответствия потока битов, что набор опорных картинок ограничен следующим образом:
- Не должно быть никакой опорной картинки с temporal_id большим, чем таковое текущей картинки, включенной в RefPicSetStCurrBefore, RefPicSetStCurrAfter или RefPicSetLtCurr.
- Для каждого значения i в диапазоне от 0 до NumPocLtCurr − 1 включительно, не должно быть больше, чем одна опорная картинка в DPB, которая не включена в RefPicSetStCurrBefore, RefPicSetStCurrAfter или RefPicSetStFoll, и которая имеет PicOrderCntVal, для которого Abs (PicOrderCntVal) % (2PocLsbLenCurr[i] равно PocLtCurr[i]. Для каждого значения i в диапазоне от 0 до NumPocLtFoll − 1 включительно, не должно быть более чем одна опорная картинка в DPB, которая не включена в RefPicSetStCurrBefore, RefPicSetStCurrAfter или RefPicSetStFoll, и которая имеет PicOrderCntVal, для которого Abs (PicOrderCntVal) % (2PocLsbLenFoll[i] равно PocLtFoll[i].
- Не должно быть опорной картинки, включенной в набор опорных картинок, которая предшествует, в порядке вывода, любой картинке CRA, которая предшествует текущей картинке как в порядке декодирования, так и в порядке вывода.
- Когда первая закодированная картинка в потоке битов является картинкой IDR, или текущая закодированная картинка не является лидирующей картинкой первой закодированной картинки в потоке битов, не должно быть никакой записи в RefPicSetStCurrBefore, RefPicSetStCurrAfter или RefPicSetLtCurr, которая не равна "никакой опорной картинке".
ЗАМЕЧАНИЕ 5 - Опорная картинка не может быть включена в более чем один из пяти списков набора опорных картинок.
[0197] В другом аспекте способы могут модифицировать синтаксис и семантику заголовка вырезки, чтобы добавить элементы синтаксиса poc_lsb_lt[i], add_poc_lsb_len[i] и add_poc_lsb[i], и удалить элементы синтаксиса delta_poc_lsb_lt[i], delta_poc_msb_present_flag[i] и delta_poc_msb_cycle_lt_minus1[i], оставляя другие элементы синтаксиса неизменными. Следующая Таблица 2 иллюстрирует эти изменения, где дополнения и/или изменения обозначены, используя выделение серым или затемнением:
<b>Таблица 2</b>
slice_header(){
Дескриптор
…
if(long_term_ref_pics_present_flag){
num_long_term_pics
ue(v)
for(i=0; i<num_long_term_pics; i++){
poc_lsb_lt[i]
u(v)
add_poc_lsb_len[i]
ue(v)
if(add_poc_lsb_len[i]!=0)
add_poc_lsb[i]
u(v)
used_by_curr_pic_lt_flag[i]
u(1)
}
}
…
}
[0198] Семантика заголовка вырезки может быть изменена, чтобы добавить семантику элементов синтаксиса poc_lsb_lt[i], add_poc_lsb_len[i] и add_poc_lsb[i], и удалить семантику элементов синтаксиса delta_poc_lsb_lt[i], delta_poc_msb_present_flag[i] и delta_poc_msb_cycle_lt_minus1[i], оставляя неизменной семантику для других элементов синтаксиса.
[0199] Элемент синтаксиса poc_lsb_lt[i] может задавать младшие значащие биты значения счета по порядку картинки i-th долгосрочной опорной картинки, которая включена в набор долгосрочных опорных картинок текущей картинки. Длина poc_lsb_lt[i] может быть равна log2_max_pic_order_cnt_lsb_minus4+4 бита.
[0200] Элемент синтаксиса add_poc_lsb_len[i] может задавать количество дополнительных младших значащих битов значения счета по порядку картинки i-th долгосрочной опорной картинки, которая включена в набор долгосрочных опорных картинок текущей картинки. add_poc_lsb_len[i] должен быть в диапазоне от 0 до 32−log2_max_pic_order_cnt_lsb_minus4−4, включительно.
[0201] Элемент синтаксиса add_poc_lsb[i] может задавать значение дополнительных младших значащих битов значения счета по порядку картинки i-th долгосрочной опорной картинки, которая включена в набор долгосрочных опорных картинок текущей картинки. poc_lsb_lt[i] должен быть в диапазоне от 1 до (1 <<add_poc_lsb_len[i])-1, включительно. Длина add_poc_lsb[i] равна add_poc_lsb_len[i] битов.
[0202] Процесс декодирования для набора опорных картинок, заданного в секции 8.3.3 HEVC WD6, может быть изменен следующим образом, где снова выделение серым или затенение указывают дополнения и/или изменения к секции 8.3.2 HEVC WD6 как в настоящее время задано. Следующее воспроизводит большую часть секции 8.3.2 HEVC WD6.
[0203] Этот процесс вызывается однажды для каждой картинки, после декодирования заголовка вырезки, но до декодирования любой единицы кодирования и до процесса декодирования для создания списка опорных картинок вырезки, как задано в подпункте 8.3.3. Процесс может привести к маркировке одной или более опорных картинок как "неиспользуемая для ссылки".
ЗАМЕЧАНИЕ 1 - Набор опорных картинок является абсолютным описанием опорных картинок, используемых в процессе декодирования потока и будущих закодированных картинок. Сигнализация набора опорных картинок является явной в том смысле, что все опорные картинки, включенные в набор опорных картинок, перечисляются явно и нет никакого процесса создания набора опорных картинок по умолчанию в декодере, который зависит от статуса буфера декодированных картинок.
Краткосрочные опорные картинки идентифицированы их значениями PicOrderCntVal. Долгосрочные опорные картинки идентифицированы младшими значащими битами их значений PicOrderCntVal.
[0204] Пять списков значений счета по порядку картинки или младшие значащие биты счета по порядку картинки построены так, чтобы получить набор опорных картинок; PocStCurrBefore, PocStCurrAfter, PocStFoll, PocLtCurr, и PocLtFoll с NumPocStCurrBefore, NumPocStCurrAfter, NumPocStFoll, NumPocLtCurr, и количество элементов NumPocLtFoll, соответственно.
- Если текущая картинка является картинкой IDR, PocStCurrBefore, PocStCurrAfter, PocStFoll, PocLtCurr, и PocLtFoll все установлены пустыми, и NumPocStCurrBefore, NumPocStCurrAfter, NumPocStFoll, NumPocLtCurr, и NumPocLtFoll все установлены в 0.
- Иначе, следующее применяется для выведения пяти списков значений счета по порядку картинки и количеств записей.
for(i=0, j=0, k=0; i<NumNegativePics[StRpsIdx]; i++) if(UsedByCurrPicS0[StRpsIdx][i]) PocStCurrBefore[j++]=PicOrderCntVal+DeltaPocS0 [StRpsIdx][i] else PocStFoll[k++]=PicOrderCntVal+DeltaPocS0[StRpsIdx][i]NumPocStCurrBefore=jfor(i=0, j=0; i<NumPositivePics[StRpsIdx]; i++) if(UsedByCurrPicS1[StRpsIdx][i]) PocStCurrAfter[j++]=PicOrderCntVal+DeltaPocS1[StRpsIdx][i] else PocStFoll[k++]=PicOrderCntVal+DeltaPocS1[StRpsIdx][i]NumPocStCurrAfter=jNumPocStFoll=k (8-5)
for(i=0, j=0, k=0; i<num_long_term_pics; i++) if(used_by_curr_pic_lt_flag[i]) {PocLtCurr[j]=add_poc_lsb[i] *MaxPicOrderCntLsb+poc_lsb_lt[i] ExtPocLsbLenCurr[j]=log2_max_pic_order_cnt_lsb_minus4+4+add_poc_lsb_len[i]j++} else {PocLtFoll[k]=add_poc_lsb[i]*MaxPicOrderCntLsb+poc_lsb_lt[i] ExtPocLsbLenFoll[k]=log2_max_pic_order_cnt_lsb_minus4+4+add_poc_lsb_len[i]k++}NumPocLtCurr=jNumPocLtFoll=k
где PicOrderCntVal - счет по порядку картинок текущей картинки, как задано в подпункте 8.2.1.
ЗАМЕЧАНИЕ 2 - Значение StRpsIdx в диапазоне от 0 до num_short_term_ref_pic_sets − 1 включительно, указывает, что используется набор краткосрочных опорных картинок из активного набора параметров последовательности, где StRpsIdx - индекс набора краткосрочных опорных картинок в списке наборов краткосрочных опорных картинок в порядке, в котором они сигнализируются в наборе параметров последовательности. StRpsIdx, равный num_short_term_ref_pic_sets, указывает, что используется набор краткосрочных опорных картинок, явно сигнализированных в заголовке вырезки.
Набор опорных картинок состоит из пяти списков опорных картинок; RefPicSetStCurrBefore, RefPicSetStCurrAfter, RefPicSetStFoll, RefPicSetLtCurr и RefPicSetLtFoll. Переменная NumPocTotalCurr установлена равной NumPocStCurrBefore+NumPocStCurrAfter+NumPocLtCurr. При декодировании вырезки P или B, имеется требование соответствия потока битов, что значение NumPocTotalCurr не должно быть равным 0.
ЗАМЕЧАНИЕ 3 - RefPicSetStCurrBefore, RefPicSetStCurrAfter и RefPicSetLtCurr содержат все опорные картинки, которые могут быть использованы во внешнем предсказании текущей картинки, и которые могут использоваться во внешнем предсказании одной или более картинок после текущей картинки в порядке декодирования. RefPicSetStFoll и RefPicSetLtFoll состоят из всех опорных картинок, которые не используются во внешнем предсказании текущей картинки, но могут быть использованы во внешнем предсказании одной или более из картинок после текущей картинки в порядке декодирования.
Маркировка опорной картинки может быть "неиспользуемая для ссылки," "используемая для краткосрочной ссылки," или "используемая для долгосрочной ссылки," но только одна среди этих трех. Когда опорная картинка упоминается как отмеченная как "используемая для ссылки", это в целом относится к картинке, отмечаемой как "используемая для краткосрочной ссылки", или "используемая для долгосрочной ссылки" (но не оба). Опорная картинка, которая отмечена как "используемая для краткосрочной ссылки", упоминается как краткосрочная опорная картинка. Опорная картинка, которая отмечена как "используемая для долгосрочной ссылки", упоминается в качестве долгосрочной опорной картинки.
[0205] Процесс выведения для набора опорных картинок и маркировка картинок выполняются согласно следующим упорядоченным этапам, где DPB относится к буферу декодированных картинок, как описано в Приложении C в HEVC WD6:
1. Следующее применяется:
for(i=0; i<NumPocStCurrBefore; i++) if(there is a reference picture picX in the DPB with PicOrderCntVal equal to PocStCurrBefore[i]) RefPicSetStCurrBefore[i]=picX else RefPicSetStCurrBefore[i]="no reference picture"
for(i=0; i<NumPocStCurrAfter; i++) if(there is a reference picture picX in the DPB with PicOrderCntVal equal to PocStCurrAfter[i]) RefPicSetStCurrAfter[i]=picX else RefPicSetStCurrAfter[i]="no reference picture" (8-67)
for(i=0; i<NumPocStFoll; i++) if(there is a reference picture picX in the DPB with PicOrderCntVal equal to PocStFoll[i]) RefPicSetStFoll[i]=picX else RefPicSetStFoll[i]="no reference picture"
2. Все опорные картинки, включенные в RefPicSetStCurrBefore, RefPicSetStCurrAfter и RefPicSetStFoll, отмечены как "используемая для краткосрочной ссылки".
3. Следующее применяется:
for(i=0; i<NumPocLtCurr; i++) {if(there is a reference picture picX in the DPB, not included in RefPicSetStCurrBefore, RefPicSetStCurrAfter or RefPicSetStFoll, with PicOrderCntVal for which Abs(PicOrderCntVal) % (2ExtPocLsbLenCurr[i]) is equal to PocLtCurr[i]) RefPicSetLtCurr[i]=picX else RefPicSetLtCurr[i]="no reference picture"} (8-7)
for(i= 0; i <NumPocLtFoll; i++) {if(there is a reference picture picX in the DPB, not included in RefPicSetStCurrBefore, RefPicSetStCurrAfter or RefPicSetStFoll, with PicOrderCntVal for which Abs(PicOrderCntVal) % (2ExtPocLsbLenFoll[i]) is equal to PocLtFoll[i]) RefPicSetLtFoll[i]=picX else RefPicSetLtFoll[i]="no reference picture"}
4. Все опорные картинки, включенные в RefPicSetLtCurr и RefPicSetLtFoll, отмечены как "используется для долгосрочной ссылки"
5. Все опорные картинки в буфере декодированных картинок, которые не включены в RefPicSetLtCurr, RefPicSetLtFoll, RefPicSetStCurrBefore, RefPicSetStCurrAfter или RefPicSetStFoll, отмечены как "неиспользуемые для ссылки".
ЗАМЕЧАНИЕ 4 - Могут быть одна или более опорные картинки, которые включены в набор опорных картинок, но которые не присутствуют в буфере декодированных картинок. Когда первая закодированная картинка в потоке битов является картинкой IDR, или текущая закодированная картинка не является лидирующей картинкой первой закодированной картинки в потоке битов, записи в RefPicSetStFoll или RefPicSetLtFoll, которые не равны "никакой опорной картинке" должны быть проигнорированы. Когда первая закодированная картинка в потоке битов не является картинкой CRA, или текущая закодированная картинка не является ведущей картинкой первой закодированной картинки в потоке битов, непреднамеренная потеря картинки должна быть логически выведена для каждой записи в RefPicSetStCurrBefore, RefPicSetStCurrAfter и RefPicSetLtCurr, которая не равна "никакой опорной картинке".
Альтернативно, в вышеупомянутых этапах, слова "Это есть опорная картинка picX", изменяются на "Это есть картинка picX".
[0206] Имеется требование соответствия потока битов, что набор опорных картинок ограничен следующим образом:
- Не должно быть никакой опорной картинки с temporal_id большим, чем таковое текущей картинки, включенной в RefPicSetStCurrBefore, RefPicSetStCurrAfter или RefPicSetLtCurr.
- Для каждого значения i в диапазоне 0 к NumPocLtCurr − 1, включительно, должна быть не более чем одна опорная картинка в DPB, которая не включена в RefPicSetStCurrBefore, RefPicSetStCurrAfter или RefPicSetStFoll, и которая имеет PicOrderCntVal, для которого Abs (PicOrderCntVal) % (2ExtPocLsbLenCurr [i] равно PocLtCurr[i]. Для каждого значения i в диапазоне 0 к NumPocLtFoll − 1, включительно, не должно быть более чем одной опорной картинки в DPB, которая не включена в RefPicSetStCurrBefore, RefPicSetStCurrAfter или RefPicSetStFoll, и которая имеет PicOrderCntVal, для которого Abs (PicOrderCntVal) % (2ExtPocLsbLenFoll[i] равно PocLtFoll[i].
- Не должно быть никакой опорной картинки, включенной в набор опорных картинок, который предшествует, в порядке вывода, любой картинке CRA, которая предшествует текущей картинке как в порядке декодирования, так и в порядке вывода.
- Когда первая закодированная картинка в потоке битов является картинкой IDR, или текущая закодированная картинка не является лидирующей картинкой первой закодированной картинки в потоке битов, не должно быть никакой записи в RefPicSetStCurrBefore, RefPicSetStCurrAfter или RefPicSetLtCurr, которая не равна "никакой опорной картинке".
ЗАМЕЧАНИЕ 5 - Опорная картинка не может быть включена в более чем один из пяти списков набора опорных картинок.
[0207] Третий аспект способов может быть основан на первом аспекте способов, описанных выше. В этом третьем аспекте в синтаксисе заголовка вырезки, еще один элемент синтаксиса может быть добавлен для каждой LTRP, которая должна быть включена в RPS, чтобы сигнализировать начальный бит POC упомянутой LTRP, со значением 0, указывающим, в качестве одного примера, начало с младшего значащего бита (бит 0), значение 1, указывающее начало со второго младшего значащего бита (бит 1), и так далее. PocLsbLtLen[i] затем может быть получен те же способом как в первом аспекте способов, описанных выше, где PocLsBLtLen[i] получен на основании poc_lsb_len_delta[i]. Однако, в этом третьем аспекте способов PocLsbLtLen[i] может представлять количество битов POC в LTRP, начиная с бита начала как идентифицировано выше дополнительным элементом синтаксиса, где poc_lsb_lt[i] задает значение битов PocLsbLtLen[i] упомянутой POC в LRTP, начиная с начального бита, как идентифицировано выше дополнительным элементом синтаксиса.
[0208] Может затем потребоваться, что в DPB есть только одна опорная картинка (или, альтернативно, только одна картинка), которая имеет тот же самый набор битов значения POC, равный таковому, указанному для LTRP, исключая таковые, включенные в RefPicSetStCurrBefore, RefPicSetStCurrAfter или RefPicSetStFoll. Таким образом, LTRP может затем быть уникально идентифицирована набором битов, и в уравнениях 8-7 из HEVC WD6, это условие (вместо условия, что набор младших значащих битов значения POC равно указанному для LTRP) может быть использовано для идентификации опорной картинки (или, альтернативно, картинки), подлежащей включению в RefPicSetLtCurr [i] или RefPicSetLtFoll [i]. Другие части третьего аспекта способов могут быть подобными описанным выше относительно первого аспекта способов.
[0209] Четвертый аспект способов, описанных в настоящем раскрытии, может представлять изменение вторых аспектов способов, описанных выше. В этом четвертом аспекте синтаксис заголовка вырезки может включать в себя add_poc_lsb_len[i], который представляет дельту длины дополнительных LSB, сигнализированных посредством add_poc_lsb[i]. Если i равно 0, add_poc_lsb_len[i] может задавать длину дополнительного LSB, сигнализированного посредством add_poc_lsb[i]; иначе, add_poc_lsb_len[i] может задавать разность между длиной add_poc_lsb[i] и длиной add_poc_lsb[i−1]. Другие части четвертого аспекта способов могут быть подобными описанным выше относительно второго аспекта способов.
[0210] Пятый аспект способов может быть основан на первом аспекте способов, описанных выше. В этом пятом аспекте, чтобы сигнализировать LTRP, вместо того, чтобы сигнализировать POC LSB, начиная с самого младшего значащего бита, усеченные LSB в POC могут быть сигнализированы.
[0211] Синтаксис заголовка вырезки может быть изменен, чтобы добавить элементы синтаксиса poc_lsb_len_delta[i] и poc_lsb_lt[i] и удалить элементы синтаксиса delta_poc_lsb_lt[i], delta_poc_msb_present_flag[i] и delta_poc_msb_cycle_lt_minus1, который [i] удаленные, оставляя другие элементы синтаксиса неизменными. Следующая Таблица 3 иллюстрирует, как эти изменения могут затронуть заголовок вырезки, с серым выделением или затемнение, обозначающим изменения и/или дополнения.
<b>Таблица 3</b>
slice_header(){
Дескриптор
…
if(long_term_ref_pics_present_flag){
num_long_term_pics
ue(v)
for(I=0; I<num_long_term_pics; i++){
poc_lsb_len_truncated_delta[i]
ue(v)
poc_lsb_lt_truncated[i]
u(v)
used_by_curr_pic_lt_flag[i]
u(1)
}
}
…
}
[0212] poc_lsb_len_truncated_delta[i] может быть использовано для задания количества битов, чтобы представить poc_lsb_truncated_lt[i]. Переменная PocLsbLtTrunLen[i] может быть получена следующим образом:
if(i= =0)
PocLsbLtTrunLen[i]=log2_max_pic_order_cnt_lsb_minus4+4+poc_lsb_len_truncated_delta[i]-NumTruncatedBitselse
PocLsbLtTrunLen[i]=PocLsbLtTrunLen[i−1]+poc_lsb_len_truncated_delta[i]
NumTruncatedBits может быть установлено равным log2_max_pic_order_cnt_lsb_minus4+4, и в этом PocLsbLtTrunLen[0] равно poc_lsb_len_truncated_delta[0]. Это значение может также быть сигнализировано в PPS или SPS.
[0213] poc_lsb_truncated_lt[i] может задавать младшие значащие биты, после усечения битов NumTruncatedBits, значения счета по порядку картинки i-th долгосрочной опорной картинки, которая включена в набор долгосрочных опорных картинок текущей картинки, другими словами, бит NumTruncatedBits до бита NumTruncatedBits+PocLsbLtTrunLen [i]-1, включительно значения счета по порядку картинки i-th долгосрочной опорной картинки, которая включена в набор долгосрочных опорных картинок текущей картинки. Эти биты называются как усеченный набор битов для i-th LTRP, которая включена в набор долгосрочных опорных картинок текущей картинки. Элемент синтаксиса poc_lsb_truncted_lt[i] может быть равен в диапазоне от 0 до (1 <<PocLsbLtTrunLen[i])-1, включительно. Длина poc_lsb_lt[i], в качестве одного примера, может быть равна PocLsbLtTrunLen [i].
[0214] Долгосрочные опорные картинки типично идентифицируются усеченным набором бита их значений PicOrderCntVal. Никакие две опорные картинки (или, альтернативно, никакие две картинки) в DPB (исключая включенные в RefPicSetStCurrBefore, RefPicSetStCurrAfter или RefPicSetStFoll) не могут иметь одно и то же значение для того же самого набора битов для их значений PicOrderCntVal. Таким образом, LTRP может быть уникально идентифицирована усеченным набором битов, и в уравнениях 8-7 из HEVC WD6, это условие (вместо условия, что набор младших значащих битов значения POC равно указанному для LTRP) используется для идентификации опорной картинки (или, альтернативно, картинки), для включения в RefPicSetLtCurr[i] или RefPicSetLtFoll[i].
[0215] Как альтернатива, NumTruncatedBits может быть сигнализирован в каждой вырезке, когда картинки LTRP сигнализируются. Таблица 4 иллюстрирует эту альтернативу, с серым выделением или затенением, обозначающими изменения и/или дополнения:
<b>Таблица 4</b>
slice_header(){
Дескриптор
…
if(long_term_ref_pics_present_flag){
num_long_term_pics
ue(v)
num_truncated_bits
u(v)
for(i=0; i<num_long_term_pics; i++){
poc_lsb_len_truncated_delta[i]
ue(v)
poc_lsb_lt_truncated[i]
u(v)
used_by_curr_pic_lt_flag[i]
u(1)
}
}
…
}
В Таблице 4 num_truncated_bits может задавать младшие значащие биты значения POC, подлежащие усечению при идентификации LTRP от битов LSB POC. Этот элемент синтаксиса может быть в диапазоне от 0 до log2_max_pic_order_cnt_lsb_minus4+4, включительно, и длина может быть, ceil(log2(log2_max_pic_order_cnt_lsb_minus4+4+1)). В качестве другой альтернативы, num_truncated_bits может быть сигнализирован в ue (v) и может быть большим чем log2_max_pic_order_cnt_lsb_minus4+4.
[0216] Должно быть понятно, что в зависимости от примера, некоторые действия или события любого из способов, описанных здесь, могут быть выполнены в различной последовательности, могут быть добавлены, слиты, или не учтены в целом (например, не все описанные действия или события необходимы для практической реализации способов). Кроме того, в некоторых примерах действия или события могут быть выполнены одновременно, например, с помощью многопотоковой обработки, обработки прерывания, или множественных процессоров, а не последовательно.
[0217] В одном или более примерах описанные функции могут быть реализованы в аппаратном обеспечении, программном обеспечении, программно-аппаратных средствах, или любой их комбинации. Если реализованы в программном обеспечении, функции могут быть сохранены на или переданы по как одна или более инструкций или код по считываемому компьютером носителю и выполнены в основанном на аппаратном обеспечении блоке обработки. Считываемый компьютером носитель может включать в себя считываемый компьютером запоминающий носитель, который соответствует материальному носителю, такому как запоминающие носители данных, или коммуникационные носители, включая любой носитель, который облегчает передачу компьютерной программы от одного места к другому, например, согласно протоколу связи. В этом способе считываемый компьютером носитель вообще может соответствовать (1) материальному считываемому компьютером запоминающему носителю, который является невременным или (2) коммуникационному носителю, такому как сигнал или несущая. Запоминающие носители данных могут быть любым доступным носителем, к которому могут получить доступ один или более компьютеров или один или более процессоров, чтобы извлечь инструкции, код и/или структуры данных для реализации способов, описанных в настоящем раскрытии. Компьютерный программный продукт может включать в себя считываемый компьютером носитель.
[0218] Посредством примера, а не ограничения, такие считываемые компьютером запоминающий носители могут содержать RAM, ROM, EEPROM, CD-ROM или другой накопитель на оптических дисках, накопитель на магнитных дисках, или другие магнитные запоминающие устройства, флэш-память, или любой другой носитель, который может быть использованным для хранения желаемого программного кода в форме инструкций или структур данных, и к которому может получить доступ компьютер. Кроме того, любое соединение должным образом называют считываемым компьютером носителем. Например, если инструкции передают от вебсайта, сервера, или другого удаленного источника, используя коаксиальный кабель, волоконно-оптический кабель, витую пару, цифровую абонентскую линию (DSL), или беспроводные технологии, такие как инфракрасное, радио- и микроволновое излучение, то эти коаксиальный кабель, волоконно-оптический кабель, витая пара, DSL, или беспроводные технологии, такие как инфракрасное, радио- и микроволновое излучение включены в определение носителя. Нужно подразумевать, однако, что считываемые компьютером запоминающий носители и запоминающие носители данных не включают в себя соединения, несущие, сигналы, или другие временные носители, но вместо этого направлены на невременные, материальные запоминающие носители. Диск и диск, как используется здесь, включают в себя компакт-диск (компакт-диск), лазерный диск, оптический диск, цифровой универсальный диск (DVD), дискета и диск blu-ray, где диски (disks) обычно воспроизводят данные магнитно, в то время как диски (discs) воспроизводят данные оптически с помощью лазеров. Комбинации вышеупомянутого должны также быть включены в понятие считываемого компьютером носителя.
[0219] Инструкции могут быть выполнены одним или более процессорами, такими как один или более цифровых сигнальных процессоров (DSPs), микропроцессоры общего назначения, специализированные интегральные схемы (ASIC), программируемые пользователем логические матрицы (FPGA), или другие эквивалентные интегральные или дискретные логические схемы. Соответственно, термин "процессор", как используется здесь, может относиться к любой известной структуре или любой другой структуре, подходящей для реализации способов, описанных здесь. Также, в некоторых аспектах функциональные возможности, описанные здесь, могут быть предоставлены в пределах специализированного аппаратного обеспечения и/или программных модулей, сконфигурированных для кодирования и декодирования, или встроенных в объединенный кодек. Также, способы могли быть полностью реализованы в одной или более схемах или логических элементах.
[0220] Способы настоящего раскрытия могут быть реализованы в широком разнообразии устройств или аппаратов, включая беспроводную телефонную трубку, интегральную схему (IC) или набор IC (например, микропроцессорный набор). Различные компоненты, модули или блоки описаны в настоящем описании, чтобы подчеркнуть функциональные аспекты устройств, конфигурируемых, чтобы выполнять раскрытые способы, но не обязательно требовать реализации различными блоками аппаратного обеспечения. Вместо этого, как описано выше, различные блоки могут быть объединены в блоке аппаратного обеспечения кодека или предоставлены коллекцией взаимодействующих блоков аппаратного обеспечения, включая один или более процессоров, как описано выше, в соединении с подходящим программным обеспечением и/или программно-аппаратными средствами.
[0221] Были описаны различные примеры. Эти и другие примеры находятся в рамках нижеследующей формулы изобретения.