ОГРАНИЧЕНИЕ ОДНОНАПРАВЛЕННЫМ ИНТЕР-ПРЕДСКАЗАНИЕМ ДЛЯ БЛОКОВ ПРЕДСКАЗАНИЯ В В-СЛАЙСАХ
LIMITATION WITH UNIDIRECTIONAL INTER-PREDICTION FOR PREDICTION BLOCKS IN B-SLICES

Данная заявка испрашивает приоритет по предварительной патентной заявке США №61/596,597, поданной 08 февраля 2012 года, и предварительной патентной заявке США №61/622968, поданной 11 апреля 2012 года, содержание каждой из которых целиком включено в данный документ по ссылке.
ОБЛАСТЬ ТЕХНИКИ, К КОТОРОЙ ОТНОСИТСЯ ИЗОБРЕТЕНИЕ
Данное изобретение относится к видеокодированию и, в частности, к интер-предсказанию при видеокодировании.
УРОВЕНЬ ТЕХНИКИ
Возможности цифрового видео могут быть включены в широкое многообразие устройств, в том числе в цифровые телевизионные приемники, системы прямого цифрового вещания, системы беспроводного вещания, персональные цифровые помощники (PDA), компьютеры типа «лэптоп» или настольные компьютеры, планшетные компьютеры, устройства для чтения электронных книг, цифровые камеры, цифровые записывающие устройства, цифровые медиаплееры, видеоигровые устройства, видеоигровые консоли, сотовые или спутниковые радиотелефоны, так называемые «смартфоны», устройства для проведения телеконференций, устройства потокового видео и т.п. Устройства цифрового видео реализуют различные методики сжатия видео, которые, например, описаны в стандартах, определенных как MPEG-2, MPEG-4, ITU-T H.263, ITU-T H.264/MPEG-4, часть 10, стандарт усовершенствованного видеокодирования (AVC), стандарт высокоэффективного видеокодирования (HEVC), находящийся в процессе разработки, а также расширения указанных стандартов. Видеоустройства могут передавать, принимать, кодировать, декодировать и/или запоминать цифровую видеоинформацию более эффективно посредством реализации указанных методик сжатия видео.
Согласно методикам сжатия видео выполняется пространственное (внутрикадровое, интра-) предсказание и/или временное (межкадровое, интер-) предсказание с целью уменьшения или исключения избыточности, свойственной видеопоследовательностям. Для видеокодирования на блочной основе видеослайс (то есть видеокадр или часть видеокадра) может быть разделен на видеоблоки, которые также могут называться древовидными блоками, блоками кодирования (CU), и/или узлами кодирования. Видеоблоки в слайсе изображения с интра-кодированием (I) кодируют с использованием пространственного предсказания применительно к опорным отсчетам в соседних блоках одного и того же изображения. В видеоблоках в слайсе изображения с интер-кодированием (P или B) может использоваться пространственное предсказание в отношении опорных отсчетов в соседних блоках одного и того же изображения или временное предсказание в отношении опорных отсчетов других опорных изображений. Изображения могут называться кадрами, а опорные изображения могут называться опорными кадрами.
В результате пространственного или временного предсказания получают предсказанный видеоблок для блока, подлежащего кодированию. Остаточные данные представляют пиксельную разность между исходным блоком, подлежащим кодированию, и предсказанным видеоблоком. Блок с интер-кодированием кодируют в соответствии с вектором движения, который указывает блок опорных отсчетов, образующих предсказанный видеоблок, и остаточные данные, указывающие различие между кодированным блоком и предсказанным видеоблоком. Блок с интра-кодированием кодируют в соответствии с режимом интра-кодирования и остаточными данными. Для дальнейшего сжатия остаточные данные можно преобразовать из пиксельной области в область преобразования, в результате чего получают остаточные коэффициенты преобразования, которые затем можно квантовать. Квантованные коэффициенты преобразования, изначально скомпонованные в двумерной матрице, можно сканировать для формирования одномерного вектора коэффициентов преобразования. Затем можно применить энтропийное кодирование для достижения еще большего сжатия.
СУЩНОСТЬ ИЗОБРЕТЕНИЯ
В целом, в данном раскрытии описываются методики выполнения интер-предсказания в процессе видеокодирования. Видеокодер определяет, ограничен ли блок предсказания (PU) в B-слайсе однонаправленным интер-предсказанием. Вдобавок, видеокодер формирует список кандидатов на слияние для данного блока PU и определяет выбранного кандидата на слияние в списке кандидатов на слияние. Если блок PU ограничен однонаправленным интер-предсказанием, то видеокодер формирует предсказанный видеоблок для данного блока PU на основе не более одного опорного блока, связанного с информацией о движении, заданной выбранным кандидатом на слияние. Если блок PU не ограничен однонаправленным интер-предсказанием, то видеокодер формирует предсказанный видеоблок для данного блока PU на основе одного или более опорных блоков, связанных с информацией о движении, заданной выбранным кандидатом на слияние.
Согласно одному аспекту описывается способ кодирования видеоданных. Способ содержит определение того, ограничен ли блок PU в B-слайсе однонаправленным интер-предсказанием. Способ также содержит формирование списка кандидатов на слияние для данного блока PU. Вдобавок, способ содержит определение выбранного кандидата на слияние в списке кандидатов на слияние. Вдобавок, способ содержит формирование предсказанного видеоблока для данного блока PU на основе не более одного опорного блока, связанного с информацией о движении, заданной выбранным кандидатом на слияние, если данный блок PU ограничен однонаправленным интер-предсказанием. Способ также содержит формирование предсказанного видеоблока для данного блока PU на основе одного или более опорных блоков, связанных с информацией о движении, заданной выбранным кандидатом на слияние, если данный блок PU не ограничен однонаправленным интер-предсказанием.
Согласно другому аспекту описывается устройство видеокодирования, которое содержит один или более процессоров, сконфигурированных для определения того, ограничен ли блок PU в B-слайсе однонаправленным интер-предсказанием. Этот один или более процессоров также сконфигурированы для формирования списка кандидатов на слияние для данного блока PU и определения выбранного кандидата на слияние в списке кандидатов на слияние. Этот один или более процессоров сконфигурированы так, что они формируют предсказанный видеоблок для данного блока PU на основе не более одного опорного блока, связанного с информацией о движении, заданной выбранным кандидатом на слияние, если данный блок PU ограничен однонаправленным интер-предсказанием. Кроме того этот один или более процессоров также сконфигурированы так, что они формируют предсказанный видеоблок для данного блока PU на основе одного или более опорных блоков, связанных с информацией о движении, заданной выбранным кандидатом на слияние, если данный блок PU не ограничен однонаправленным интер-предсказанием.
Согласно еще одному аспекту описывается устройство видеокодирования, содержащее средство для определения того, ограничен ли блок PU в B-слайсе однонаправленным интер-предсказанием. Устройство видеокодирования также содержит средство для формирования списка кандидатов на слияние для данного блока PU. Вдобавок, Устройство видеокодирования содержит средство для определения выбранного кандидата на слияние в списке кандидатов на слияние. Устройство видеокодирования также содержит средство для формирования предсказанного видеоблока для данного блока PU на основе не более одного опорного блока, связанного с информацией о движении, заданной выбранным кандидатом на слияние, если данный блок PU ограничен однонаправленным интер-предсказанием. Устройство видеокодирования также содержит средство для формирования предсказанного видеоблока для данного блока PU на основе одного или более опорных блоков, связанных с информацией о движении, заданной выбранным кандидатом на слияние, если данный блок PU не ограничен однонаправленным интер-предсказанием.
Согласно следующему аспекту описывается компьютерный программный продукт, который содержит один или более компьютерно-читаемых запоминающих носителей, хранящих команды, которые при их исполнении конфигурируют один или более процессоров для определения того, ограничен ли блок PU в B-слайсе однонаправленным интер-предсказанием. Эти команды также конфигурируют один или более процессоров для формирования списка кандидатов на слияние для данного блока PU и определения выбранного кандидата на слияние в списке кандидатов на слияние. Эти команды конфигурируют один или более процессоров для формирования предсказанного видеоблока для данного блока PU на основе не более одного опорного блока, связанного с информацией о движении, заданной выбранным кандидатом на слияние, если данный блок PU ограничен однонаправленным интер-предсказанием. Эти команды конфигурируют один или более процессоров для формирования предсказанного видеоблока для данного блока PU на основе одного или более опорных блоков, связанных с информацией о движении, заданной выбранным кандидатом на слияние, если данный блок PU не ограничен однонаправленным интер-предсказанием.
В нижеследующем описании и сопроводительных чертежах раскрыты подробности одного или более примеров осуществления изобретения. Другие признаки, цели и преимущества настоящего изобретения станут очевидными из его описания и чертежей, а также из формулы изобретения.
КРАТКОЕ ОПИСАНИЕ ЧЕРТЕЖЕЙ
Фиг. 1 - блок-схема, иллюстрирующая пример системы видеокодирования, которая может использовать методики, описанные в настоящем изобретении;
фиг. 2 - блок-схема, иллюстрирующая пример видеокодера, который сконфигурирован для реализации описанных здесь методик;
фиг. 3 - блок-схема, иллюстрирующая пример видеодекодера, который сконфигурирован для реализации описанных здесь методик;
фиг. 4 - блок-схема, иллюстрирующая приведенную в качестве примера операцию компенсации движения;
фиг. 5 - блок-схема, иллюстрирующая приведенную в качестве другого примера операцию компенсации движения;
фиг. 6 - блок-схема, иллюстрирующая приведенную в качестве примера операцию формирования списка кандидатов на слияние;
фиг. 7 - блок-схема, иллюстрирующая приведенный в качестве примера процесс формирования искусственных кандидатов на слияние;
фиг. 8 - блок-схема, иллюстрирующая приведенную в качестве примера операцию для определения информации о движении блока предсказания с использованием усовершенствованного режима предсказания вектора движения.
ПОДРОБНОЕ ОПИСАНИЕ ИЗОБРЕТЕНИЯ
Как описывается ниже, изображение можно разделить на один или более слайсов. Каждый слайс может включать в себя целое число блоков кодирования (CU). Каждый блок CU может иметь один или более блоков предсказания (PU). Слайсы могут представлять собой I-слайсы, P-слайсы или B-слайсы. В I-слайсе для всех блоков PU используется интра-предсказание. Видеокодер может выполнить интра-предсказание или однонаправленное интер-предсказание на блоках PU в P-слайсах. Когда видеокодер выполняет однонаправленное интер-предсказание на блоке PU в P-слайсе, он может идентифицировать или синтезировать опорный отсчет в опорном изображении, вошедшем в первый список опорных изображений («список 0»). Указанный опорный блок может представлять собой блок опорных отсчетов в опорном изображении. Опорные отсчеты могут соответствовать реальным пикселям в опорном блоке или пикселям, которые синтезируют, например, путем интерполяции с использованием реальных пикселей. Затем видеокодер может сформировать предсказанный видеоблок для блока PU на основе опорного блока для данного PU.
Видеокодер может выполнить однонаправленное интер-предсказание по списку 0, однонаправленное интер-предсказание по списку 1 или двунаправленное интер-предсказание на блоках PU в B-слайсах. Когда видеокодер выполняет однонаправленное интер-предсказание на PU по списку 0, он может идентифицировать опорный блок в опорном изображении, введенном в список 0, или синтезировать опорный блок на основе опорных отсчетов в опорном изображении, внесенном в список 0. Затем видеокодер может сформировать предсказанный видеоблок для данного PU на основе опорного блока. Когда видеокодер выполняет однонаправленное интер-предсказание на PU по списку 1, он может идентифицировать опорный блок в опорном изображении, введенном во второй список опорных изображений («список 1»), или может синтезировать опорный блок на основе опорных отсчетов в опорном изображении, внесенном в список 1. Затем видеокодер может сформировать предсказанный видеоблок для данного PU на основе опорного блока. Когда видеокодер выполняет двунаправленное интер-предсказание на PU, он может идентифицировать опорный блок в опорном изображении, введенном в список 0, или синтезировать опорный блок на основе опорных отсчетов в опорном изображении, внесенном в список 0. Вдобавок, когда видеокодер выполняет двунаправленное интер-предсказание на данном PU, он может идентифицировать опорный блок в опорном изображении, внесенном в список 1, или синтезировать опорный блок на основе опорных отсчетов в опорном изображении, внесенном в список 1. Затем видеокодер может сформировать предсказанный видеоблок для данного PU на основе этих двух опорных блоков.
Видеокодер может сообщить информацию о движении блока PU, чтобы дать возможность видеодекодеру идентифицировать или синтезировать опорный блок или опорные блоки, которые видеокодер использовал для формирования предсказанного видеоблока для данного PU. Информация о движении блока PU может включать в себя один или более векторов движения, индексы опорных изображений и флаги, указывающие на основе какого списка (списка 0 и/или списка 1) выполняется интер-предсказание. В некоторых случаях видеокодер может сообщить информацию о движении блока PU, используя режим слияния. Когда видеокодер передает информацию о движении данного PU, используя режим слияния, он может сформировать список кандидатов на слияние для данного блока PU. Список кандидатов на слияние может включать в себя множество кандидатов на слияние, каждый из которых задает набор, содержащий информацию о движении.
Кандидатом на слияние может быть однонаправленный кандидат на слияние, если кандидат на слияние задает информацию о движении, которая идентифицирует единственное местоположение в опорном изображении, внесенном в список 0 или в список 1. Опорный блок может быть связан с набором, содержащим информацию о движении, если отсчеты в опорном блоке определены на основе отсчетов в том месте, которое идентифицировано информацией о движении в опорном изображении, идентифицированном информацией о движении. Например, опорный блок может быть связан с набором информации о движении, если отсчеты в опорном блоке совпадают с отсчетами в видеоблоке в месте, идентифицированном информацией о движении в опорном изображении, идентифицированном информацией о движении. Опорный блок также может быть связан с набором информации о движении, если отсчеты в этом опорном блоке синтезированы (например, интерполированы) из отсчетов в видеоблоке в месте, идентифицированном информацией о движении в опорном кадре, идентифицированном информацией о движении.
Кандидатом на слияние может быть двунаправленный кандидат на слияние, если этот кандидат на слияние задает информацию о движении, которая идентифицирует место в опорном изображении, внесенном в список 0, и место в опорном изображении, внесенном в список 1. Видеокодер может сформировать информацию о движении, заданную кандидатами на слияние, на основе информации о движении тех блоков PU, которые соседствуют в пространстве с текущим блоком PU, и/или соответственно расположенного блока PU в другом изображении. После формирования списка слияния для текущего PU видеокодер может выбрать одного из кандидатов на слияние в списке кандидатов на слияние и просигнализировать о местоположении в списке кандидатов на слияние выбранного кандидата на слияние. Видеодекодер может определить информацию о движении текущего PU на основе информации о движении, заданной выбранным кандидатом на слияние.
С точки зрения требуемых операций и пропускной способности памяти формирование предсказанного видеоблока для блока PU на основе двух опорных блоков может оказаться более сложным, чем формирование предсказанного видеоблока для данного блока PU на основе одного опорного блока. Сложность, связанная с формированием предсказанных видеоблоков на основе двух опорных блоков, может увеличиться с ростом количества блоков PU с двунаправленным интер-предсказанием в B-слайсе. Это может быть особенно актуальным при возрастании количества небольших блоков PU с двунаправленным интер-предсказанием. Соответственно, может оказаться выгодным ограничить некоторые блоки PU в B-слайсах однонаправленным интер-предсказанием.
Видеокодер может ограничить блок PU в B-слайсе однонаправленным интер-предсказанием, выбрав только однонаправленных кандидатов на слияние из списка кандидатов на слияние для данного PU. Однако в некоторых случаях список кандидатов на слияние может не включать в себя однонаправленных кандидатов на слияние. В указанных случаях видеокодер не сможет передать информацию о движении данного блока PU, используя режим слияния. Это может снизить эффективность кодирования. Кроме того, даже в том случае, если список кандидатов на слияние включает в себя по меньшей мере один двунаправленный кандидат на слияние, эффективность кодирования может снизиться, если опорные блоки, связанные с информацией о движении, заданной однонаправленными кандидатами на слияние, не имеют достаточного сходства с видеоблоком, связанным с данным PU.
Согласно раскрытым здесь методикам видеокодер (например, видеокодер или видеодекодер) может определить, ограничен ли блок PU в B-слайсе однонаправленным интер-предсказанием. Например, видеокодер может определить, что блок PU ограничен однонаправленным интер-предсказанием, если размерная характеристика этого блока PU меньше конкретного порогового значения. Размерной характеристикой блока PU может быть характеристика размера видеоблока, связанного с данным PU, такая как высота, ширина, длина диагонали и т.д. видеоблока, связанного с данным PU. Вдобавок, видеокодер может сформировать список кандидатов на слияние для данного PU и определить выбранного кандидата на слияние в списке кандидатов на слияние. Если данный PU ограничен однонаправленным интер-предсказанием, видеокодер может сформировать предсказанный видеоблок для данного PU на основе не более одного опорного блока, связанного с информацией о движении, заданной выбранным кандидатом на слияние. Если данный блок PU не ограничен однонаправленным интер-предсказанием, то видеокодер может сформировать предсказанный видеоблок для данного PU на основе одного или более опорных блоков, связанных с информацией о движении, заданной выбранным кандидатом на слияние. Используя такое ограничение некоторых блоков PU однонаправленным интер-предсказанием, видеокодер может уменьшить сложность формирования предсказанных видеоблоков на основе множества опорных блоков. Это может привести к увеличению скорости, с которой видеокодер способен выполнять кодирование видеоданных, и может снизить требования к пропускной способности, необходимой для обработки данных.
Для упрощения объяснения изобретения здесь описываются места расположения или видеоблоки, имеющие различные пространственные взаимосвязи с блоками CU или PU. Указанное описание можно интерпретировать в том смысле, что указанные места расположения или видеоблоки имеют разные пространственные взаимосвязи с видеоблоками, связанными с блоками CU или PU. Кроме того, это может относиться к блоку PU, который в текущий момент кодирует видеокодер в качестве текущего PU. Вышесказанное может относиться к блоку CU, который в текущий момент кодирует видеокодер в качестве текущего блока CU. Также вышесказанное может относиться к изображению, которое в текущий момент кодирует видеокодер в качестве текущего изображения.
На прилагаемых чертежах в качества иллюстрации показан ряд примеров. Элементы, отмеченные ссылочными позициями на приведенных чертежах, соответствуют элементам, отмеченными подобными ссылочными позициями в последующем описании. Здесь предполагается, что элементы, перед названиями которых употребляются порядковые числительные (например, «первый», «второй», «третий» и т.д.) не обязательно имеют конкретный порядок. Скорее, указанные числительные используются просто для ссылок на разные элементы одного и того же или подобного типа.
На фиг. 1 представлена блок-схема, где показан пример системы 10 видеокодирования, в которой могут быть реализованы раскрытые здесь методики. Используемый здесь термин «видеокодер» в общем случае относится как к видеокодерам, так и к видеодекодерам. В этом описании термины «видеокодирование» или «кодирование» могут относиться к видеокодированию или к видеодекодированию.
Как показано на фиг. 1, система 10 видеокодирования включает в себя устройство-источник 12 и устройство-адресат 14. Устройство-источник 12 формирует кодированные видеоданные. Соответственно, устройство-источник 12 может называться устройством видеокодирования или аппаратом для видеокодирования. Устройство-адресат 14 может декодировать кодированные видеоданные, сформированные устройством-источником 12. Соответственно, устройство-адресат 14 может называться устройством видеодекодирования или аппаратом для видеодекодирования. Устройство-источник 12 и устройство-адресат 14 представляют собой примеры устройств видеокодирования или аппаратов для видеокодирования.
Устройство-источник 12 и устройство-адресат 14 могут содержать любое из самых разных устройств, в том числе, настольный компьютер, мобильное вычислительное устройство, компьютер типа «ноутбук» (то есть «лэптоп»), планшетный компьютер, телевизионную приставку, телефонную трубку, такую как так называемый «смартфон», телевизионный приемник, камеру, устройство отображения, цифровой медиаплеер, видеоигровую консоль, автомобильный компьютер или т.п. В некоторых случаях устройство-источник 12 и устройство-адресат 14 могут быть оборудованы средствами беспроводной связи.
Устройство-адресат 14 может принимать кодированные видеоданные от устройства-источника 12, через канал 16. Канал 16 может содержать среду или устройство любого типа, способное перемещать кодированные видеоданные от устройства-источника 12 на устройство-адресат 14. В одном примере канал 16 может содержать среду связи, позволяющую устройству-источнику 12 передавать кодированные видеоданные непосредственно на устройство-адресат 14 в режиме реального времени. В этом примере кодированные видеоданные могут быть модулированы устройством-источником 12 в соответствии со стандартом связи, таким как протокол беспроводной связи, и могут передаваться на устройство-адресат 14. Среда связи может содержать беспроводную или проводную среду связи, например, радиочастотный (RF) спектр или одну или более физических линий передачи. Среда связи может составлять часть сети пакетной передачи, такой как локальная сеть, региональная сеть или глобальная сеть, например Интернет. Среда связи может включать в себя маршрутизаторы, коммутаторы, базовые станции или любое другое оборудование, которое может быть полезно для осуществления связи между устройством-источником 12 и устройством-адресатом 14.
В другом примере канал 16 может соответствовать запоминающему носителю, который хранит кодированные видеоданные, сформированные устройством-источником 12. В этом примере устройство-адресат 14 может обращаться к запоминающему носителю посредством доступа к диску или доступа к карте. Запоминающий носитель может включать в себя любой запоминающий носитель из числа самых разных локально доступных носителей, таких как диски типа Blu-ray, диски DVD, диски CD, флэш-память, либо любой другой подходящий цифровой запоминающий носитель для хранения кодированных видеоданных. В еще одном примере канал 16 может включать в себя файловый сервер или другое промежуточное запоминающее устройство, которое может хранить кодированное видео, сформированное устройством-источником 12. В этом примере устройство-адресат 14 может обращаться к запомненным на файловом сервере или в другом промежуточном запоминающем устройстве видеоданным, используя потоковую передачу или загрузку видеоданных. Файловый сервер может представлять собой сервер любого типа, способный запоминать кодированные видеоданные и передавать их на устройство-адресат 14. Примеры файловых серверов включают в себя Web-сервер (например, для Web-сайта), сервер протокола пересылки файлов (FTP), подключенные к сети запоминающие устройства (NAS) и локальный накопитель на диске. Устройство-адресат 14 может иметь доступ к кодированным видеоданным через любое стандартное соединение для передачи данных, в том числе Интернет соединение. Примерные типы соединений для передачи данных могут включать в себя беспроводные каналы (например, Wi-Fi соединения), проводные соединения (например, DSL, кабельный модем и т.д.), либо комбинации обоих видов соединений, которые подходят для доступа к кодированным видеоданным, хранящимся на файловом сервере. Передача кодированных видеоданных из файлового сервера может быть реализована в виде потоковой передачи, передачи с выгрузкой или их комбинации.
Раскрытые здесь методики не обязательно ограничиваются беспроводными приложениями или установками. Эти методики можно применить к видеокодированию для поддержки любого из разнообразных мультимедийных приложений, таких как эфирное телевизионное вещание, передачи кабельного телевидения, передачи спутникового телевидения, передачи потокового видео, например, через Интернет, кодирование цифрового видео для запоминания на носителе данных, декодирование цифрового видео, хранящегося на носителе данных, или другие приложения. В некоторых примерах система 10 видеокодирования может быть сконфигурирована для поддержки однонаправленной или двунаправленной передачи видео для поддержки приложений, таких как потоковое видео, видеовоспроизведение, видеовещание или видеотелефония.
В примере по фиг. 1 устройство-источник 12 включает в себя источник 18 видео, видеокодер 20 и выходной интерфейс 22. В некоторых случаях выходной интерфейс 22 может включать в себя модулятор/демодулятор (модем) и/или передатчик. В устройстве-источнике 12 источник 18 видео может включать в себя такой источник, как устройство захвата видео, например, видеокамеру, видеоархив, содержащий ранее захваченное видео, интерфейс подачи видео для приема видео от провайдера видеоконтента и/или систему компьютерной графики для формирования видеоданных или комбинацию указанных источников.
Захваченное в данный момент, предварительно захваченное или сформированное компьютером видео может быть кодировано видеокодером 20. Кодированные видеоданные могут передаваться непосредственно на устройство-адресат 14 через выходной интерфейс 22 устройства-источника 12. Кодированные видеоданные также могут запоминаться в запоминающем носителе или на файловом сервере для обращения к ним в будущем со стороны устройства-адресата 14 для декодирования и/или воспроизведения.
В примере на фиг. 1 устройство-адресат 14 включает в себя входной интерфейс 28, видеодекодер 30 и устройство 32 отображения. В некоторых случаях входной интерфейс 28 может включать в себя приемник и/или модем. Входной интерфейс 28 устройства-адресата 14 принимает кодированные видеоданные по каналу 16. Кодированные видеоданные, могут включать в себя разнообразные синтаксические элементы, сформированные видеокодером 20, которые представляют видеоданные. Указанные синтаксические элементы могут быть включены в кодированные видеоданные, передаваемые через среду связи, запоминаемые на носителе данных или запоминаемые на файловом сервере.
Устройство 32 отображения может являться составной частью или быть внешним по отношению к устройству-адресату 14. В некоторых примерах устройство-адресат 14 может включать в себя интегрированное в него устройство отображения, а также быть сконфигурировано для взаимодействия с внешним устройством отображения. В других примерах устройством-адресатом 14 может быть устройство отображения. В общем случае устройство 32 отображения отображает пользователю декодированные видеоданные. Устройство 32 отображения может содержать любое из разнообразных устройств отображения, таких как жидкокристаллический дисплей (LCD), плазменный дисплей, дисплей на органических светоизлучающих диодах (OLED) или устройство отображения другого типа.
Видеокодер 20 и видеодекодер 30 могут функционировать согласно стандарту сжатия видео, такому как стандарт высокоэффективного видеокодирования (HEVC), разрабатываемому в настоящее время, и может соответствовать тестовой модели HEVC (HM). Последний проект разрабатываемого стандарта HEVC, называемый «HEVC Working Draft 7» или «WD7» описан в документе JCTVC-I1003_d54, Bross и др., “High efficiency video coding (HEVC) text specification draft 7” Объединенной команды разработчиков систем видеокодирования (JCT-VC) стандартов ITU-T SG16 WP3 и ISO/IEC JTC1/SC29/WG11, 9th Meeting: Geneva, Switzerland, май 2012 года, который по состоянию на 19 июля 2012 года можно скачать из документов http://phenix.int-evry.fr/jct/doc_end_user/documents/9_Geneva/wg11/JCTVC-J1003-v6.zip, содержание которых целиком включено в данный документ по ссылке. В качестве альтернативы видеокодер 20 и видеодекодер 30 могут работать согласно другим коммерческим или промышленным стандартам, таким как стандарт ITU-T H.264, также называемый MPEG-4, часть 10, AVC (усовершенствованное видеокодирование) или расширениям указанных стандартов. Однако методики, раскрытые в этом изобретении, не ограничиваются каким-либо конкретным стандартом или методикой кодирования. Другие примеры стандартов сжатия видео включают в себя MPEG-2 и ITU-T H.263 и запатентованные или открытые форматы сжатия, такие как VP8 и родственные форматы.
Хотя в примере на фиг. 1 это не показано, видеокодер 20 и видеодекодер 30 могут быть интегрированы каждый с аудиокодером и аудиодекодером и могут включать в себя соответствующие блоки MUX-DEMUX (мультиплексор-демультиплексор) или другие аппаратные и программные средства для кодирования как аудио, так и видео в общем потоке данных или в отдельных потоках данных. В некоторых примерах блоки MUX-DEMUX, если они применяются, могут соответствовать Протоколу мультиплексора ITU H.223 или другим протоколам, таким как Протокол дэйтаграмм пользователя (UDP).
Следует вновь подчеркнуть, что фиг. 1 является лишь примером, то есть раскрытые здесь методики могут применяться к системам видеокодирования (например, видеокодирования или видеодекодирования), которые не обязательно включают в себя передачу данных между устройствами кодирования и декодирования. В других примерах данные могут извлекаться из локальной памяти, поступать в виде потоковой передачи через сеть или т.п. Устройство кодирования может кодировать и запоминать данные в памяти, а устройство декодирования может извлекать эти данные из памяти и их декодировать. Во многих примерах кодирование и декодирование выполняется устройствами, которые не имеют связь друг с другом, а просто кодируют данные, направляя их в память, и/или извлекают и декодируют данные из памяти.
Видеокодер 20 и видеодекодер 30 могут быть реализованы каждый в виде любых подходящих схем, таких как один или более микропроцессоров, цифровые процессоры сигналов (DSP), прикладные специализированные интегральные схемы (ASIC), вентильные матрицы, программируемые пользователем (FPGA), дискретные логические схемы, аппаратные средства, или любая их комбинация. При частичной реализации указанных методик программными средствами устройство может хранить команды программного обеспечения на подходящем компьютерно-читаемом носителе длительного хранения для выполнения этих команд аппаратными средствами с использованием одного или более процессоров, реализующих раскрытые в изобретении методики. Любое из вышеприведенных средств (включая аппаратные средства, программные средства, комбинации аппаратных и программных средств и т.д.) можно рассматривать как один или более процессоров. Как видеокодер 20, так и видеодекодер 30 могут быть включены в состав одного или более кодеров или декодеров, либо каждый из них может быть интегрирован в объединенном кодере/декодере («CODEC») в соответствующем устройстве.
Изобретение в общем случае может относиться к видеокодеру 20, сообщающему некоторую информацию другому устройству, например, видеодекодеру 30. Однако следует понимать, что видеокодер 20 может сообщать информацию путем связывания конкретных синтаксических элементов с различными кодированными частями видеоданных. То есть видеокодер 20 может «сигнализировать» путем запоминания некоторых синтаксических элементов в заголовках различных кодированных частей видеоданных. В некоторых случаях указанные синтаксические элементы могут кодироваться и запоминаться (например, в системе памяти), прежде чем они будут приняты и декодированы видеодекодером 30. Таким образом, термин «сигнализация» в общем случае относится к передаче синтаксических или иных данных, используемых для декодирования сжатых видеоданных. Указанная передача может осуществляться в режиме реального времени или близком к нему режиме. В качестве альтернативы, указанная передача может осуществляться через некоторый временной интервал, который может появиться при запоминании синтаксических элементов на носителе в кодированном битовом потоке во время кодирования, которые затем могут быть извлечены устройством декодирования в любой момент времени после запоминания на этом носителе.
Как кратко упоминалось выше, видеокодер 20 выполняет кодирование видеоданных. Видеоданные могут содержать одно или более изображений. Каждое из этих изображений может представлять собой неподвижное изображение, образующее часть видео. В некоторых примерах изображение может называться «видеокадром». Когда видеокодер 20 выполняет кодирование видеоданных, он может сформировать битовый поток. Битовый поток может включать в себя последовательность бит, которая образует кодированное представление видеоданных. Битовый поток может включать в себя кодированные изображения и связанные с ними данные. Кодированное изображение является кодированным представлением изображения.
Для формирования битового потока видеокодер 20 может выполнять операции кодирования на каждом изображении в видеоданных. Когда видеокодер 20 выполняет операции кодирования на изображениях, он может сформировать ряд кодированных изображений и связанных с ними данных. Эти связанные данные могут включать в себя Наборы параметров последовательности, наборы параметров изображения, наборы параметров адаптации и другие синтаксические структуры. Набор параметров последовательности (SPS) может содержать параметры, применимые к нулю или более последовательностям изображения. Набор параметров изображения (PPS) может содержать параметры, которые можно применить к нулю или более изображениям. Набор параметров адаптации (APS) может содержать параметры, применяемые к нулю или более изображениям. Параметрами в наборе APS могут быть параметры, которые изменяются с большей вероятностью, чем параметры в наборе PPS.
Для формирования кодированного изображения видеокодер 20 может разбить изображение на видеоблоки одинакового размера. Видеоблок может представлять собой двумерный массив отсчетов. Каждый видеоблок связан с одним древовидным блоком. В некоторых случаях древовидный блок может называться максимальным блоком кодирования (LCU) или «древовидным блоком кодирования». Древовидные блоки стандарта HEVC в широком смысле аналогичны макроблокам предшествующих стандартов, например, H.264/AVC. Однако, древовидный блок не обязательно ограничен конкретным размером и может включать в себя один или более блоков кодирования (CU). Видеокодер 20 может использовать разбиение по квадродереву для разделения видеоблоков древовидных блоков на видеоблоки, связанные с блоками CU (называемые поэтому «древовидными блоками»).
В некоторых примерах видеокодер 20 может разделить изображение на множество слайсов. Каждый слайс может включать в себя целое количество блоков CU. В некоторых случаях слайс содержит целое число древовидных блоков. В других случаях граница слайса может находиться внутри древовидного блока.
В качестве части операции кодирования изображения видеокодер 20 может выполнять операции кодирования для каждого слайса данного изображения. Когда видеокодер 20 выполняет операцию кодирования слайса, он может сформировать кодированные данные, связанные с этим слайсом. Связанные со слайсом кодированные данные могут называться «кодированным слайсом».
Для формирования кодированного слайса видеокодер 20 может выполнять операции кодирования для каждого древовидного блока в слайсе. Выполняя операцию кодирования для древовидного блока, видеокодер 20 может сформировать кодированный древовидный блок. Кодированный древовидный блок может содержать кодированное представление о данном древовидном блоке.
Когда видеокодер 20 формирует кодированный слайс, он может выполнить операции кодирования (то есть кодировать) на древовидных блоках (которые в этом случае представляют максимальные блоки кодирования) в данном слайсе согласно порядку растрового сканирования. Другими словами, видеокодер 20 может кодировать древовидные блоки слайса в порядке слева направо с верхней строки древовидных блоков в слайсе, затем слева направо по следующей нижележащей строке древовидных блоков и т.д., пока видеокодер 20 не закодирует каждый из древовидных блоков в данном слайсе.
В результате кодирования древовидных блоков согласно порядку растрового сканирования могут быть закодированы древовидные блоки, находящиеся выше и левее данного древовидного блока, но древовидные блоки, находящиеся ниже и правее данного древовидного блока, пока не будут кодированы. Следовательно, видеокодер 20 сможет обращаться к информации, сформированной путем кодирования древовидных блоков, находящихся выше и левее данного древовидного блока, при кодировании данного древовидного блока. Однако, видеокодер 20 не сможет обращаться к информации, сформированной путем кодирования древовидных блоков, находящихся ниже и правее данного древовидного блока при кодировании данного древовидного блока.
Для формирования кодированного древовидного блока видеокодер 20 может рекурсивно выполнять разбиение по квадродереву на видеоблоке древовидного блока для разделения видеоблока на все меньшие видеоблоки. Каждый из этих малых видеоблоков может быть связан с определенным блоком CU. Например, видеокодер 20 может разбить видеоблок древовидного блока на четыре субблока одинакового размера, разбить один или более субблоков на четыре суб-субблока и т.д. Выделенный таким образом CU может представлять собой CU, чей видеоблок разбит на видеоблоки, связанные с другими CU. Не выделенный CU может представлять собой CU, чей видеоблок не разбит на видеоблоки, связанные с другими CU.
Один или более синтаксических элементов в битовом потоке могут указывать максимальное количество разбиений видеоблока древовидного блока, выполняемых видеокодером 20. Видеоблок блока CU может иметь форму квадрата. Размер видеоблока блока CU (то есть размер CU) может составлять от 8×8 пикселей до размера видеоблока древовидного блока (то есть размер древовидного блока) с максимальным числом пикселей 64×64 или более.
Видеокодер 20 может выполнять операции кодирования (то есть кодировать) каждый CU древовидного блока согласно порядку z-сканирования. Другими словами, видеокодер 20 может кодировать левый верхний CU, правый верхний CU, левый нижний CU, а затем правый нижний CU в указанном порядке. Когда видеокодер 20 выполняет операцию кодирования на разделенном CU, он может кодировать блоки CU, связанные с субблоками видеоблока разделенного CU согласно порядку z-сканирования. Другими словами, видеокодер 20 может кодировать CU, связанный с левым верхним субблоком, CU, связанный с правым верхним субблоком, CU, связанный с левым нижним субблоком, а затем CU, связанный с правым нижним субблоком, в указанном порядке.
В результате кодирования блоков CU древовидного блока согласно порядку z-сканирования могут быть кодированы блоки CU, лежащие выше, выше и слева, выше и справа, слева, и ниже и слева данного блока CU. Блоки CU ниже или справа от данного блока CU пока остаются не кодированными. Таким образом, видеокодер 20 способен обращаться к информации, сформированной посредством кодирования некоторых блоков CU, являющихся соседними по отношению к данному блоку CU, при кодировании данного CU. Однако видеокодер 20 не сможет обращаться к информации, сформированной путем кодирования других блоков CU, являющихся соседними по отношению к данному блоку CU при его кодировании.
Когда видеокодер 20 выполняет кодирование неразделенного CU, он может сформировать один или более блоков предсказания (PU) для этого CU. Каждый из блоков PU данного CU может быть связан со своим видеоблоком в видеоблоке данного CU. Видеокодер 20 может сформировать предсказанный видеоблок для каждого PU данного CU. Предсказанный видеоблок блока PU может быть блоком отсчетов. Для формирования предсказанного видеоблока для PU видеокодер 20 может использовать интра-предсказание или интер-предсказание.
Когда видеокодер 20 использует интра-предсказание для формирования предсказанного видеоблока для PU, он может сформировать предсказанный видеоблок этого PU на основе декодированных отсчетов изображения, связанного с этим PU. Если видеокодер 20 использует интра-предсказание для формирования предсказанных видеоблоков блоков PU для CU, то CU является боком CU с интра-предсказанием.
Когда видеокодер 20 использует интер-предсказание для формирования видеоблока данного PU, он может сформировать предсказанный видеоблок данного PU на основе декодированных отсчетов одного или более изображений, отличных от изображения, связанного с данным PU. Если видеокодер 20 использует интер-предсказание для формирования предсказанных видеоблоков для блоков PU блока CU, то этот CU представляет собой CU с интер-предсказанием.
Кроме того, когда видеокодер 20 использует интер-предсказание для формирования предсказанного видеоблока для PU, он может сформировать информацию о движении для этого PU. Информация о движении для PU может указывать один или более опорных блоков данного PU. Каждый опорный блок данного PU может представлять собой видеоблок в опорном изображении. Это опорное изображение может отличаться от изображения, связанного с данным PU. В некоторых случаях опорный блок для PU может также называться «опорным отсчетом» данного PU. Видеокодер 20 может сформировать предсказанный видеоблок для данного PU на основе опорных блоков этого PU.
Как обсуждалось выше, слайс может быть I-слайсом, P-слайсом или B-слайсом. В I-слайсе для всех PU используется интра-предсказание. В P-слайсах и B-слайсах может использоваться интра-предсказание или интер-предсказание. Когда видеокодер 20 выполняет интер-предсказание на PU в P-слайсе, он может сформировать информацию о движении, которая идентифицирует местоположение в одном опорном изображении. Другими словами, для данного PU возможно однонаправленное интер-предсказание. Информация о движении может включать в себя индекс опорного изображения и вектор движения. Индекс опорного изображения может указывать место в первом списке опорных изображений («список 0») опорного изображения. Вектор движения может указывать пространственное смещение между видеоблоком, связанным с данным PU, и опорным блоком в опорном изображении. Видеокодер, например, видеокодер 20 или видеодекодер 30, может затем сформировать предсказанный видеоблок для данного PU на основе одного опорного блока, связанного с информацией о движении данного PU. Например, видеокодер может сформировать предсказанный видеоблок для данного PU таким образом, чтобы предсказанный видеоблок соответствовал опорному блоку.
В B-слайсе для PU может быть использовано однонаправленное интер-предсказание на основе списка 0, однонаправленное интер-предсказание на основе второго списка опорных изображений («список 1») или двунаправленное интер-предсказание. Если для PU в B-слайсе использовано однонаправленное интер-предсказание на основе списка 0, то информация о движении для данного PU может включать в себя индекс опорного изображения из списка 0 и вектор движения из списка 0. Индекс опорного изображения из списка 0 может идентифицировать опорное изображение путем указания местоположения в списке 0 этого опорного изображения. Вектор движения списка 0 может указывать пространственное смещение между видеоблоком, связанным с данным PU, и опорным блоком в этом опорном изображении. Видеокодер 20 может сформировать предсказанный видеоблок для данного PU на основе опорного блока, связанного с вектором движения списка 0. Другими словами, видеокодер 20 может сформировать предсказанный видеоблок для данного PU на основе блока опорных отсчетов, идентифицированных вектором движения списка 0, или может сформировать предсказанный видеоблок для данного блока PU на основе блока опорных отсчетов, синтезированных (например, интерполированных) из блока опорных отсчетов, идентифицированных вектором движения списка 0.
Если для PU в B-слайсе использовано однонаправленное интер-предсказание на основе списка 1, то информация о движении для данного PU может включать в себя индекс опорного изображения из списка 1 и вектор движения из списка 1. Индекс опорного изображения из списка 1 может идентифицировать опорное изображение путем указания местоположения в списке 1 данного опорного изображения. Вектор движения списка 1 может указать пространственное смещение между данным PU и опорным блоком в данном опорном изображении. Видеокодер 20 может сформировать предсказанный видеоблок для данного PU на основе блока опорных отсчетов, связанных с вектором движения списка 1. Например, видеокодер 20 может сформировать предсказанный видеоблок для данного PU на основе блока опорных отсчетов, идентифицированных вектором движения списка 1, или может сформировать предсказанный видеоблок для данного PU на основе блока опорных отсчетов, синтезированных (например, интерполированных) из блока опорных отсчетов, идентифицированных вектором движения списка 1.
Если для PU в B-слайсе используется двунаправленное интер-предсказание, то информация о движении для данного PU может включать в себя индекс опорного изображения из списка 0,вектор движения списка 0, индекс опорного изображения из списка 1 и вектор движения списка 1. В некоторых случаях индексы опорного изображения списка 0 и списка 1 могут идентифицировать одно и то же изображение. Видеокодер 20 может сформировать предсказанный видеоблок для данного PU на основе опорных блоков, связанных с векторами движения списка 0 и списка 1. В некоторых примерах видеокодер 20 может сформировать предсказанный видеоблок для данного PU посредством интерполирования предсказанного видеоблока из отсчетов в опорном блоке, связанном с вектором движения списка 0, и отсчетов в опорном блоке, связанном с вектором движения списка 1.
После того, как видеокодер 20 сформирует предсказанные видеоблоки для одного или более PU блока CU, видеокодер 20 может сформировать остаточные данные для блока CU на основе предсказанных видеоблоков для данных блоков PU блока CU. Остаточные данные для CU могут указывать разности между отсчетами в предсказанных видеоблоках для блоков PU данного CU и исходного видеоблока данного CU.
Кроме того, как часть выполнения операции кодирования на неразделенном CU, видеокодер 20 может сформировать остаточные данные для CU на основе предсказанных видеоблоков для блоков PU данного CU. Эти остаточные данные для CU могут указывать разности между отсчетами в предсказанных видеоблоках для блоков PU данного CU и исходным видеоблоком данного CU.
Кроме того, как часть выполнения операции кодирования на неразделенном CU, видеокодер 20 может выполнить рекурсивное разбиение квадродерева на остаточных данных данного блока CU для разделения этих остаточных данных блока CU на один или более блоков остаточных данных (то есть остаточных видеоблоков), связанных с блоками преобразования (TU) данного CU. Каждый блок TU блока CU может быть связан со своим остаточным видеоблоком.
Видеокодер 20 может применить одно или более преобразований к остаточным видеоблокам, связанным с блоками TU, для формирования блоков коэффициентов преобразования, связанных с TU. Концептуально, блок коэффициентов преобразования может представлять собой двумерную (2D) матрицу коэффициентов преобразования.
После формирования блока коэффициентов преобразования видеокодер 20 может выполнить процесс квантования на блоке коэффициентов преобразования. Квантование обычно относится к процессу, в котором коэффициенты преобразования квантуют с целью возможного сокращения объема данных, используемых для представления коэффициентов преобразования, что обеспечивает дополнительное сжатие. Процесс квантования может уменьшить глубину в битах, связанную с некоторыми или всеми коэффициентами преобразования. Например, n-битовый коэффициент преобразования можно округлить до m-битового коэффициента преобразования во время квантования, где n больше m.
Видеокодер 20 может связать каждый CU со значением параметра квантования (QP). Значение QP, связанное с CU, может определить, каким образом видеокодер 20 квантует блоки коэффициентов преобразования, связанные с данным CU. Видеокодер 20 может отрегулировать степень квантования, применяемого к блокам коэффициентов преобразования, связанных с CU, путем регулировки значения QP, связанного с данным CU.
После квантования блока коэффициентов преобразования видеокодером 20 он может сформировать наборы синтаксических элементов, которые представляют коэффициенты преобразования в квантованном блоке коэффициентов преобразования. Видеокодер 20 может применить операции энтропийного кодирования, такие как операции контекстного адаптивного двоичного арифметического кодирования (CABAC), к некоторым из этих синтаксических элементов.
Битовый поток, сформированный видеокодером 20, может включать в себя ряд единиц уровня сетевой абстракции (NAL). Каждая из единиц NAL может представлять собой синтаксическую структуру, содержащую указание типа данных в единице NAL, и байты, содержащие данные. Например, единица NAL может содержать данные, представляющие набор параметров последовательности, набор параметров изображения, кодированный слайс, информацию о дополнительном расширении функциональных возможностей (SEI), разделитель блока доступа, данные фильтрации или данные другого типа. Данные в единице NAL могут включать в себя различные синтаксические структуры.
Видеодекодер 30 может принять битовый поток, сформированный видеокодером 20. Этот битовый поток может включать в себя кодированное представление видеоданных, кодированных видеокодером 20. Получая этот битовый поток, видеодекодер 30 может выполнить на нем операцию синтаксического анализа. Когда видеодекодер 30 выполняет операцию синтаксического анализа, он может извлечь синтаксические элементы из битового потока. Видеодекодер 30 может восстановить изображения из видеоданных на основе синтаксических элементов, выделенных из этого битового потока. Процесс восстановления видеоданных на основе указанных синтаксических элементов обычно является обратным по отношению к процессу, выполняемому видеокодером 20 для формирования упомянутых синтаксических элементов.
После того, как видеодекодер 30 выделил синтаксические элементы, связанные с CU, он может сформировать предсказанные видеоблоки для блоков PU данного CU на основе этих синтаксических элементов. Вдобавок, видеодекодер 30 может выполнить обратное квантование блоков коэффициентов преобразования, связанных с блоками TU данного CU. Видеодекодер 30 может выполнить обратное преобразование блоков коэффициентов преобразования для восстановления остаточных видеоблоков, связанных с блоками TU данного CU. После формирования предсказанных видеоблоков и восстановления остаточных видеоблоков видеодекодер 30 может восстановить видеоблок данного CU на основе предсказанных видеоблоков и остаточных видеоблоков. Таким путем видеодекодер 30 может восстановить видеоблоки блоков CU на основе синтаксических элементов в битовом потоке.
Как было описано выше, видеокодер 20 может использовать интер-предсказание для формирования предсказанных видеоблоков, связанных с информаций о движении для блоков PU блока CU. Во многих случаях информация о движении для данного PU скорее всего совпадет или будет близка к информации о движении для одного или более близлежащих блоков PU (то есть блоков PU, чьи видеоблоки являются соседями по отношению к видеоблоку данного PU в пространстве или во времени). Поскольку соседние PU часто имеют подобную информацию о движении, видеокодер 20 может выполнить кодирование информации о движении данного PU, обратившись к информации о движении одного или более близлежащих PU. Кодирование информации о движении данного PU с обращением к информации о движении одного или более близлежащих PU может сократить количество бит, которое необходимо иметь в битовом потоке для указания об информации о движении для данного PU.
Видеокодер 20 может кодировать информацию о движении для данного PU с обращением к информации о движении для одного или более близлежащих PU различными путями. Например, видеокодер 20 может кодировать информацию о движении для данного PU, используя режим слияния или усовершенствованный режим предсказания вектора движения (AMVP). Для кодирования информации о движении с использованием режима слияния видеокодер 20 может сформировать список кандидатов на слияние для данного PU. Список кандидатов на слияние может включать в себя один или более кандидатов на слияние. Каждый из кандидатов на слияние задает набор информации о движении. Видеокодер 20 может сформировать один или более кандидатов на слияние на основе информации о движении, заданной блоками PU, которые соседствуют в пространстве с данным блоком PU в одном и том же изображении, и тогда их можно назвать пространственными кандидатами на слияние, или на основе соответственно расположенного PU в другом изображении, и тогда его можно назвать временным кандидатом на слияние. Если информация о движении, заданная кандидатом на слияние, связана с двумя опорными блоками, то кандидат на слияние может называться здесь двунаправленным кандидатом на слияние или кандидатом на слияние, являющимся двунаправленным. В противном случае, если информация о движении, заданная кандидатом на слияние, связана только с одним опорным блоком, то такой кандидат на слияние может называться здесь однонаправленным кандидатом на слияние или кандидатом на слияние, который является однонаправленным. Видеокодер 20 может выбрать одного из кандидатов на слияние из списка кандидатов на слияние и передать в качестве сигнализации значение индекса кандидата для данного PU. Значение индекса кандидата может указывать положение выбранного кандидата на слияние в списке кандидатов на слияние.
Когда видеокодер 20 кодирует информацию о движении для PU, используя режим слияния, видеодекодер 30 может сформировать такой же список кандидатов на слияние для данного PU, как видеокодер 20 сформировал для данного PU. Видеодекодер 30 может на основе значения индекса кандидата для данного PU затем определить, какой кандидат на слияние в списке кандидатов на слияние был выбран видеокодером 20. Затем видеодекодер 30 может принять информацию о движении, заданную выбранным кандидатом на слияние, в качестве информации о движении для данного PU. Информация о движении, заданная выбранным кандидатом, может включать в себя один или более векторов движения и один или более индексов опорного изображения.
Когда видеокодер 20 передает в качестве сигнализации информацию о движении для PU, используя режим AMVP, он может сформировать список кандидатов-предикторов вектора движения (MV) списка 0 для данного PU, если для данного PU используется однонаправленное интер-предсказание на основе списка 0 или если для данного PU используется двунаправленное интер-предсказание на основе опорных изображений в списке 0 и в списке 1. Список кандидатов-предикторов MV списка 0 может включать в себя один или более кандидатов-предикторов MV. Каждый кандидат-предиктор MV задает набор информации о движении. Видеокодер 20 может выбрать кандидата-предиктора MV списка 0 из списка кандидатов-предикторов MV списка 0. Видеокодер 20 может в качестве сигнализации передать флаг предиктора MV из списка 0, который указывает местоположение выбранного кандидата-предиктора MV в списке 0 кандидатов-предикторов MV. Флаг предиктора MV списка 0 может быть обозначен как «mvp_l0_flag».
Вдобавок, когда видеокодер 20 передает в качестве сигнализации информацию о движении для блока PU, используя режим AMVP, он может сформировать список кандидатов-предикторов MV списка 1 для данного PU, если для данного PU используется однонаправленное интер-предсказание на основе списка 1 или если для данного PU используется двунаправленное интер-предсказание. Список кандидатов-предикторов MV списка 1 может включать в себя один или более кандидатов-предикторов MV. Каждый кандидат-предиктор MV задает набор информации о движении. Затем видеокодер 20 может выбрать кандидата-предиктора MV списка 1 из списка кандидатов-предикторов MV списка 1. Видеокодер 20 может в качестве сигнализации передать флаг предиктора MV списка 1, который указывает местоположение выбранного кандидата-предиктора MV в списке кандидатов-предикторов MV списка 1. Флаг предиктора MV списка 1 может быть обозначен как «mvp_l1_flag».
Вдобавок, когда видеокодер 20 кодирует информацию о движении блока PU, используя режим AMVP, он может вычислить разность векторов движения (MVD) списка 0 для данного PU, если для данного PU используется однонаправленное интер-предсказание на основе списка 0 или если для данного PU используется двунаправленное интер-предсказание. MVD списка 0 указывает разность между вектором движения списка 0 для данного PU и вектором движения списка 0, заданным выбранным кандидатом-предиктором MV списка 0. Вдобавок, видеокодер 20 может выдать MVD списка 1 для данного PU, если для данного PU используется однонаправленное предсказание на основе списка 1 или если для данного PU используется двунаправленное интер-предсказание. MVD списка 1 указывает разность между вектором движения списка 1 для данного PU и вектором движения списка 1, заданного выбранным кандидатом-предиктором MV списка 1. Видеокодер 20 может передать в качестве сигнализации MVD списка 0 и/или MVD списка 1.
Когда видеокодер 20 передает в качестве сигнализации информацию о PU, используя режим AMVP, видеодекодер 30 может независимо сформировать такие же списки кандидатов-предикторов MV списка 0 и/или списка 1, какие сформировал видеокодер 20. В других примерах видеокодер 20 может кодировать синтаксические элементы, которые задают списки кандидатов-предикторов MV списка 0 и списка 1. Если для PU используется однонаправленное интер-предсказание на основе списка 0 или если для данного PU используется двунаправленное интер-предсказание, то видеодекодер 30 может определить выбранного кандидата-предиктора MV списка 0 из списка кандидатов предикторов MV списка. Затем видеодекодер 30 может определить вектор движения списка 0 для данного PU на основе выбранного кандидата-предиктора MV списка 0 и MVD списка 0 для данного PU. К примеру, видеодекодер 30 может определить вектор движения списка 0 для данного PU путем сложения вектора движения списка 0, заданного выбранным кандидатом-предиктором MV списка 0, с MVD списка 0. Если для данного PU используется однонаправленное интер-предсказание на основе списка 1 или если для данного PU используется двунаправленное интер-предсказание, то видеодекодер 30 может определить выбранного кандидата-предиктора MV списка 1 из списка кандидатов-предикторов MV списка 1. Затем видеодекодер 30 может определить вектор движения списка 1 для данного PU на основе вектора движения списка 1, заданного выбранным кандидатом MV списка 1 и MVD списка 1. Например, видеодекодер 30 может определить вектор движения списка 1 для данного PU путем сложения вектора движения списка 1, заданного выбранным кандидатом MV списка 1, и MVD списка 1.
Как кратко обсуждалось ранее, когда видеокодер 20 выполняет интер-предсказание на PU в B-слайсе, он может сформировать информацию о движении, связанную с одним или двумя опорными блоками для данного PU. Видеокодер, такой как видеокодер 20 или видеодекодер 30, может затем сформировать предсказанный видеоблок для данного PU на основе опорных блоков, связанных с информацией о движении для данного PU. Чтобы сформировать предсказанный видеоблок на основе двух опорных блоков, видеокодер может извлечь из памяти оба опорных блока. Поскольку пропускная способность памяти (то есть скорость, с которой возможна пересылка данных из памяти) может быть ограничена, для извлечения из памяти двух опорных блоков возможно потребуется больше времени, чем для извлечения одного опорного блока. Поэтому, если B-слайс включает в себя много небольших PU с двунаправленным интер-предсказанием, потребуется дополнительное время для извлечения двух опорных блоков для каждого PU, что может привести к уменьшению скорости, с которой видеокодер способен формировать предсказанные видеоблоки для блоков PU в B-слайсе.
Согласно различным примерам раскрытых здесь методик видеокодер, такой как видеокодер 20 или видеодекодер 30, может определить, ограничен ли блок PU в N-слайсе однонаправленным интер-предсказанием. В некоторых примерах видеокодер может определить, что данный PU ограничен однонаправленным интер-предсказанием на основе размерной характеристики данного PU или параметра. Вдобавок, видеокодер может сформировать список кандидатов на слияние для данного PU и определить выбранного кандидата на слияние в списке кандидатов на слияние. Если данный PU ограничен однонаправленным интер-предсказанием, то видеокодер может сформировать предсказанный видеоблок для данного PU на основе не более чем одного опорного блока, связанного с информацией о движении, заданной выбранным кандидатом на слияние. С другой стороны, если данный PU не ограничен однонаправленным интер-предсказанием, то видеокодер может сформировать предсказанный видеоблок для этого PU на основе одного или более опорных блоков, связанных с информацией о движении, заданной выбранным кандидатом на слияние. Поскольку видеокодер пересылает меньше данных из памяти при формировании предсказанного видеоблока на основе одного опорного блока, чем при формировании предсказанного видеоблока на основе двух опорных блоков, ограничение некоторых блоков PU в B-слайсах однонаправленным интер-предсказанием со стороны видеокодеров и видеодекодеров может увеличить скорость, с которой видеокодеры и видеодекодеры способны формировать предсказанные видеоблоки для указанных блоков PU в B-слайсах.
Видеокодер, то есть видеокодер или видеодекодер, может определить, что PU в B-слайсе ограничен однонаправленным интер-предсказанием, на основе различных критериев. Например, видеокодер может определить, что PU в B-слайсе ограничен однонаправленным интер-предсказанием, если размерная характеристика данного PU меньше конкретного порогового значения. В этом примере видеокодер может определить, что данный PU не ограничен однонаправленным интер-предсказанием, если размерная характеристика данного PU не ниже порогового значения. Например, видеокодер может определить, что данный PU ограничен однонаправленным интер-предсказанием, если высота или ширина видеоблока, связанного с этим PU, ниже порогового значения. Например, если высота и/или ширина видеоблока, связанного с данным PU, меньше N (например, N=8) пикселей, то видеокодер может определить, что данный PU ограничен однонаправленным интер-предсказанием.
В другом примере видеокодер может определить, что PU в B-слайсе ограничен однонаправленным интер-предсказанием, если первый размер видеоблока, связанного с данным PU, меньше порогового значения, а второй размер видеоблока, связанного с данным PU, меньше или равен пороговому значению. Размером видеоблока может быть его ширина или его высота. Например, если пороговое значение равно 8, то видеокодер может определить, что PU не ограничен однонаправленным интер-предсказанием, если ширина видеоблока равна 4, а высота это видеоблока равна 16. Однако, если пороговое значение равно 8, то видеокодер может определить, что данный PU ограничен однонаправленным интер-предсказанием, если ширина видеоблока равна 4, а высота этого видеоблока равна 8.
В другом примере видеокодер может определить, что PU в B-слайсе ограничен однонаправленным интер-предсказанием, если первый размер видеоблока, связанный с данным PU, меньше первого порогового значения, а второй размер видеоблока, связанного с данным PU, меньше второго порогового значения. Например, видеокодер может определить, что данный PU ограничен однонаправленным интер-предсказанием, если ширина видеоблока меньше 8, а высота этого видеоблока меньше 16. В некоторых случаях первое пороговое значение может совпадать со вторым пороговым значением.
В другом примере видеокодер может определить, что данный PU ограничен однонаправленным интер-предсказанием, если размерная характеристика CU, связанного с данным PU (например, текущего CU), равна конкретному размеру, а размерная характеристика данного PU меньше порогового значения. В этом примере видеокодер может определить, что PU не ограничен однонаправленным интер-предсказанием, если размерная характеристика данного CU не равна конкретному размеру, или размерная характеристика данного PU не ниже порогового значения. В этом примере упомянутый конкретный размер может быть равен N (например, N=8) пикселей, а пороговое значение также может быть равно N (например, N=8) пикселей. В данном примере для блока CU размером 8х8 любому PU данного CU, имеющему размер, меньший, чем 8х8, может быть запрещено двунаправленное интер-предсказание.
В еще одном примере видеокодер может определить, что PU в B-слайсе ограничен однонаправленным интер-предсказанием, если некий параметр указывает, что блоки PU в B-слайсе должны быть ограничены однонаправленным интер-предсказанием.
Видеокодер может ограничить PU в B-слайсе однонаправленным интер-предсказанием различными путями. Например, видеокодер может проигнорировать один из опорных блоков, связанных с информацией о движении для данного PU, и сформировать для него предсказанный видеоблок на основе другого опорного блока, связанного с информацией о движении данного PU. Например, видеокодер может сформировать список кандидатов на слияние, и, если выбранный кандидат на слияние является двунаправленным кандидатом на слияние, то видеокодер может сформировать предсказанный видеоблок для этого PU на основ опорного блока, связанного с индексом опорного изображения из списка 0 выбранного кандидата на слияние и вектора движения списка 0 выбранного кандидата на слияние. В аналогичном примере видеокодер может сформировать предсказанный видеоблок для данного PU на основе опорного блока, связанного с индексом опорного изображения списка 1 выбранного кандидата на слияние и вектором движения списка 1, выбранного кандидатом на слияние.
В другом примере, посвященном тому, каким образом видеокодер может ограничить PU в B-слайсе однонаправленным интер-предсказанием, видеокодер может содержать однонаправленные кандидаты на слияние в списке кандидатов на слияние для данного PU без двунаправленных кандидатов на слияние в списке кандидатов на слияние для данного PU. В этом примере видеокодер не выполняет преобразование двунаправленных кандидатов на слияние в однонаправленные кандидаты на слияние. В данном примере видеокодер может содержать в списке кандидатов на слияние искусственные однонаправленные кандидаты на слияние, если количество имеющихся однонаправленных кандидатов на слияние не достаточно для заполнения списка кандидатов на слияние. Искусственным кандидатом на слияние может быть кандидат на слияние, сформированный на основе информации о движении одного или более PU, однако искусственный кандидат не задает информацию о движении для одного или более PU.
В другом примере, связанном с тем, каким образом видеокодер может ограничить PU в B-слайсе однонаправленным интер-предсказанием, видеокодер может преобразовать двунаправленные кандидаты на слияние в один или более однонаправленных кандидатов на слияние и внести один или более однонаправленных кандидатов на слияние в список кандидатов на слияние. В некоторых указанных примерах видеокодер может преобразовать двунаправленного кандидата на слияние в единый однонаправленный кандидат на слияние, связанный с опорным изображением в списке 0 или опорным изображение в списке 1. В некоторых из указанных случаев, когда видеокодер преобразует двунаправленных кандидатов на слияние в однонаправленные кандидаты на слияние, однонаправленные кандидаты на слияние привязываются к опорным изображениям в конкретном опорном списке. Например, видеокодер может преобразовать двунаправленного кандидата на слияние в один однонаправленный кандидат на слияние, связанный с опорным изображением в списке 0. В качестве альтернативы, видеокодер может преобразовать двунаправленного кандидата на слияние в единственного однонаправленного кандидата на слияние, связанного с опорным изображением в списке 1. В других подобных примерах видеокодер может преобразовать двунаправленного кандидата на слияние в два однонаправленных кандидата на слияние, один из которых связан с опорным изображением в списке 0, а другой связан с опорным изображением в списке 1. Таким образом, в некоторых примерах после формирования списка кандидатов на слияние видеокодер может преобразовать двунаправленного кандидата на слияние в списке кандидатов на слияние в однонаправленного кандидата на слияние и включить этого однонаправленного кандидата на слияние в список кандидатов на слияние по месту двунаправленного кандидата на слияние.
В некоторых примерах видеокодер может удалить дублированных кандидатов на слияние из списка кандидатов на слияние перед преобразованием двунаправленных кандидатов на слияние в однонаправленные кандидаты на слияние. В других примерах видеокодер может удалить дублированных кандидатов на слияние из списка кандидатов на слияние после преобразования двунаправленных кандидатов на слияние в однонаправленные кандидаты на слияние.
Когда видеокодер 20 выполняет кодирование информации о движении для PU в B-слайсе, используя AMVP, видеокодер 20 может сформировать, кодировать, используя энтропийное кодирование, и вывести индикатор режима интер-предсказания для данного PU. Индикатор режима интер-предсказания может быть представлен в виде «inter_pred_idc». Индикатор режима интер-предсказания может указывать, используется ли для данного PU однонаправленное интер-предсказание на основе списка 0, однонаправленное интер-предсказание на основе списка 1 или двунаправленное интер-предсказание. Видеодекодер 30 может использовать индикатор режима интер-предсказания при выполнении интер-предсказания для данного PU. Поскольку индикатор режима интер-предсказания имеет три возможных значения, этот индикатор может быть представлен с использованием двух бит.
Однако в том случае, если PU в B-слайсе ограничен однонаправленным интер-предсказанием, то индикатор режима интер-предсказания может иметь два возможных значения: однонаправленное интер-предсказание на основе списка 0 и однонаправленное интер-предсказание на основе списка 1. Таким образом, согласно раскрытым здесь методикам, если PU в B-слайсе ограничен однонаправленным интер-предсказанием, то индикатор режима интер-предсказания может быть представлен с использованием одного бита. В противном случае, если данный PU не ограничен однонаправленным интер-предсказанием, то индикатор режима интер-предсказания можно представить, используя два бита. Представление индикатор режима интер-предсказания с использованием одного бита, когда данный PU ограничен однонаправленным интер-предсказанием, может повысить эффективность кодирования.
Кроме того, для энтропийного кодирования индикатора режима интер-предсказания для PU в B-слайсе можно использовать другие контексты, если данный PU ограничен однонаправленным интер-предсказанием, отличные от случаев, когда данный PU не ограничен однонаправленным интер-предсказанием. Это позволяет дополнительно повысить эффективность кодирования.
На фиг. 2 представлена блок-схема, иллюстрирующая представленный в качестве примера видеокодер 20, который сконфигурирован для реализации раскрытых здесь методик. Фиг. 2 представлена для объяснения, и ее содержание не следует трактовать как ограничение методик, раскрытых в этом описании на множестве различных примеров. Для объяснения этих методик видеокодер 20 описан здесь в контексте кодирования HEVC. Однако раскрытые здесь методики применимы и к другим стандартам или способам кодирования.
В примере на фиг. 2 видеокодер 20 включает в себя множество функциональных компонент. Функциональные компоненты видеокодера 20 включают в себя модуль 100 предсказания, модуль 102 формирования остатков, модуль 104 преобразования, модуль 106 квантования, модуль 108 обратного квантования, модуль 110 обратного преобразования, модуль 1112 восстановления, модуль 113 фильтров, буфер 114 декодированных изображений и модуль 116 энтропийного кодирования. Модуль 100 предсказания включает в себя модуль 121 интер-предсказания, модуль 122 оценки движения, модуль 124 компенсации движения и модуль 126 интра-предсказания. В других примерах видеокодер 20 может включать в себя большее или меньшее количество функциональных компонент или другие функциональные компоненты. Кроме того, модуль 122 оценки движения и модуль 124 компенсации движения могут составлять единый модуль с высокой степенью интеграции, но они представлены в примере на фиг. 2 отдельно для удобства объяснения.
Видеокодер 20 может принимать видеоданные. Видеокодер 20 может принимать видеоданные из разных источников. Например, видеокодер 20 может принимать видеоданные от источника 18 видео (фиг. 1) или другого источника. Видеоданные могут представлять ряд изображений. Для кодирования видеоданных видеокодер 20 может выполнять операцию кодирования для каждого изображения. Как часть выполнения операции кодирования изображения, видеокодер 20 может выполнять операции кодирования на каждом слайсе данного изображения. Как часть выполнения операции кодирования на слайсе, видеокодер 20 может выполнять операции кодирования на древовидных блоках в данном слайсе.
Как часть выполнения операции кодирования на древовидном блоке, модуль 100 предсказания может выполнить разделение по квадродереву на видеоблоке древовидного блока, чтобы разделить видеоблок на видеоблоки все меньшего размера. Каждый из видеоблоков все меньшего размера может быть связан с отдельным CU. Например, модуль 100 предсказания может разделить видеоблок одного древовидного блока на четыре субблока одинакового размера, разделить один или более из этих субблоков на четыре суб-субблока одинакового размера и т.д.
Размеры видеоблоков, связанных с блоками CU, могут находиться в диапазоне от 8×8 отсчетов до размера древовидного блока, имеющего максимум 64×64 отсчета или более. В данном описании «N×N» и «N на N» могут использоваться как взаимозаменяемые для ссылки на размеры видеоблоков по вертикали и горизонтали, например, 16×16 отсчетов или 16 на 16 отсчетов. В общем случае видеоблок 16×16 имеет шестнадцать отсчетов в вертикальном направлении (y=16) и шестнадцать отсчетов в горизонтальном направлении (x=16). Аналогичным образом блок N×N обычно содержит N отсчетов в вертикальном направлении и N отсчетов в горизонтальном направлении, где N представляет не отрицательное целое число.
Кроме того, как часть выполнения операции кодирования на древовидном блоке, модуль 100 предсказания может сформировать иерархическую структуру данных в виде квадродерева для древовидного блока. Например, древовидный блок может соответствовать корневому узлу структуры данных в виде квадродерева. Если модуль 100 предсказания разбивает видеоблок древовидного блока на четыре субблока, то данный корневой узел имеет четыре дочерних узла в структуре данных в виде квадродерева. Каждый из дочерних узлов соответствует блоку CU, связанному с одним из субблоков. Если модуль 100 предсказания разбивает один из субблоков на четыре суб-субблока, то узел, соответствующий данному CU, связанному с данным субблоком, может иметь четыре дочерних узла, каждый из которых соответствует CU, связанному с одним из указанных суб-субблоков.
Каждый узел структуры данных в виде квадродерева может содержать синтаксические данные (например, синтаксические элементы) для соответствующего древовидного блока или CU. Например, узел в квадродереве может включать в себя флаг расщепления, который указывает, разделен ли (то есть расщеплен ли) видеоблок данного CU, соответствующего данному узлу, на четыре субблока. Синтаксические элементы для CU можно определить рекурсивно, причем они могут зависеть от того, расщеплен ли видеоблок данного CU на субблоки. CU, чей видеоблок не разделен, может соответствовать концевому узлу в структуре данных в виде квадродерева. Кодированный древовидный блок может включать в себя данные на основе структуры данных в виде квадродерева для соответствующих древовидных блоков.
Видеокодер 20 может выполнять операции кодирования на каждом не разделенном CU древовидного блока. Когда видеокодер 20 выполняет операцию кодирования на неразделенном CU, он может сформировать кодированное представление этого неразделенного CU.
Как часть выполнения операции кодирования на CU, модуль 100 предсказания может разбить видеоблок этого CU для одного или более PU этого CU. Видеокодер 20 и видеодекодер 30 могут поддерживать разные размеры PU. Если предположить, что размер конкретного CU составляет 2N×2N, то видеокодер 20 и видеодекодер 30 могут поддерживать размеры PU, составляющие 2N×2N или N×N для интра-предсказания и симметричные размеры PU, составляющие 2N×2N, 2N×N, N×2N, N×N или т.п. для интер-предсказания. Видеокодер 20 и видеодекодер 30 также могут поддерживать асимметричное разбиение для размеров PU, составляющих 2N×nU, 2N×nD, nL×2N и nR×2N для интер-предсказания. В некоторых примерах модуль 100 предсказания может выполнять геометрическое разбиение для разделения видеоблока CU по блокам PU данного CU вдоль границы, которая не пересекает стороны видеоблока данного CU под прямыми углами.
Модуль 121 интер-предсказания может выполнить интер-предсказание на каждом PU данного CU. Интер-предсказание может обеспечить временное сжатие. Когда модуль 121 интер-предсказания выполняет интер-предсказание для PU, он может сформировать предсказанные данные для этого PU. Предсказанные данные для указанного PU могут включать в себя предсказанный видеоблок, который соответствует данному PU и информации о движении для данного PU. Модуль 122 оценки движения может сформировать информацию о движении для данного PU. В некоторых случаях модуль 122 оценки движения может использовать режим слияния или режим AMVP для передачи информации о движении для данного PU в качестве сигнализации. Модуль 124 компенсации движения может сформировать предсказанный видеоблок для данного PU на основе отсчетов одного или более изображений, отличных от текущего изображения (например, опорных изображений).
Слайсы могут представлять собой I-слайсы, P-слайсы или B-слайсы. Модуль 122 оценки движения и модуль 124 компенсации движения могут выполнять разные операции для PU блока CU в зависимости от того, находится ли данный PU в I-слайсе, P-слайсе или B-слайсе. В I-слайсе для всех PU используется интра-предсказание. Таким образом, если PU находится в I-слайсе, то модуль 122 оценки движения и модуль 124 компенсации движения не выполняют интер-предсказание на данном PU.
Если PU находится в P-слайсе, то изображение, содержащее этот PU, связано со списком опорных изображений, называемым «списком 0». В некоторых примерах каждое опорное изображение, входящее в список 0, появляется перед текущим изображением в порядке отображения. Каждое из опорных изображений в списке 0 содержит отсчеты, которые можно использовать для интер-предсказания других изображений. Когда модуль 122 оценки движения выполняет операцию оценки движения применительно к PU в P-слайсе, этот модуль может осуществлять поиск опорных изображений в списке 0 для опорного блока для данного PU. Опорный блок данного PU может представлять собой набор отсчетов, например, блок отсчетов, которые лучше других соответствуют отсчетам в видеоблоке данного PU. Модуль 122 оценки движения может использовать различные показатели для определения того, насколько хорошо набор отсчетов в опорном изображении соответствует отсчетам в видеоблоке блока PU. Например, модуль 122 оценки движения может определить, насколько хорошо набор отсчетов в опорном изображении соответствует отсчетам в видеоблоке блока PU, с использованием таких показателей, как сумма абсолютных отклонений (SAD), сумма квадратов отклонений (SSD) или другие показатели.
После идентификации или синтезирования опорного блока для PU в P-слайсе модуль 122 оценки движения может сформировать индекс опорного изображения, который указывает опорное изображение в списке 0, содержащее опорный блок и вектор движения, которое указывают пространственное смещение между данным PU и опорным блоком. Модуль 122 оценки движения может сформировать векторы движения, для изменения степеней точности. Например, модуль 122 оценки движения может сформировать векторы движения с точностью в четверть отсчета, с точностью в одну восьмую отсчета или с другой точностью, составляющую доли отсчета. В случае дробной точности значения опорного блока можно интерполировать исходя из целочисленных значений отсчетов местоположения в опорном изображении. Модуль 122 оценки движения может вывести индекс опорного изображения и вектор движения в качестве информации о движении для данного PU. Модуль 124 компенсации движения может сформировать предсказанный видеоблок данного PU на основе опорного блока, связанного с информацией о движении для данного PU.
Если PU находится в B-слайсе, то изображение, содержащееся в этом PU, может быть связано с двумя списками опорных изображений, называемых «списком 0» и «списком 1». В некоторых примерах изображение, содержащее B-слайс, может быть связано с комбинацией списков, представляющую собой комбинацию списка 0 и списка 1. В некоторых примерах, каждое опорное изображение, находящееся в списке 1, появляется после текущего изображения в порядке отображения.
Кроме того, если данный PU находится в B-слайсе, то модуль 122 оценки движения может выполнить однонаправленное интер-предсказание или двунаправленное интер-предсказание для данного PU. Когда модуль 122 оценки движения выполняет однонаправленное интер-предсказание для PU, он может осуществлять поиск опорных изображений из списка 0 или списка 1 для опорного блока для PU. Модуль 122 оценки движения может затем сформировать индекс опорного изображения, который указывает опорное изображение в списке 0 или списке 1, содержащее опорный блок и вектор движения, который указывает пространственное смещение между данным PU и опорным блоком.
Когда модуль 122 оценки движения выполняет двунаправленное интер-предсказание для PU, он может осуществлять поиск опорных изображений в списке 0 для опорного блока для данного PU, а также может осуществлять поиск опорных изображений в списке 1 для другого опорного блока для данного PU. Затем модуль 122 оценки движения может сформировать индексы опорных изображений, которые указывают пространственные смещения между опорными блоками и данным PU. Информация о движении для данного PU может включать в себя индексы опорных изображений и векторы движения для данного PU. Модуль 124 компенсации движения может сформировать предсказанный видеоблок для данного PU на основе опорных блоков, указанных в информации о движении для данного PU.
Модуль 124 компенсации движения может сформировать предсказанный видеоблок для данного PU на основе одного или более опорных блоков, связанных с информацией о движении данного PU. Согласно раскрытым здесь методикам модуль 124 компенсации движения может определить, ограничен ли данный PU однонаправленным интер-предсказанием. Вдобавок, модуль 124 компенсации движения может сформировать список кандидатов на слияние для данного PU и определить выбранного кандидата на слияние в списке кандидатов на слияние. Если данный PU ограничен однонаправленным интер-предсказанием, то модуль 124 компенсации движения может сформировать предсказанный видеоблок для данного PU на основе не более одного опорного блока, связанного с информацией о движении, заданной выбранным кандидатом на слияние. Если данный PU неограничен однонаправленным интер-предсказанием, то модуль 124 компенсации движения может сформировать предсказанный видеоблок для данного PU на основе одного или более опорных блоков, связанных с информацией о движении, заданной выбранным кандидатом на слияние.
В качестве части выполнения операции кодирования на CU, модуль 126 интра-предсказания может выполнить интра-предсказание на блоках PU данного CU. Интер-предсказание может обеспечить пространственное сжатие. Когда модуль 126 интра-предсказания выполняет интра-предсказание для PU, модуль 126 интра-предсказания может сформировать данные предсказания для указанного PU на основе декодированных отсчетов других PU в том же изображении. Данные предсказания для указанного PU могут включать в себя предсказанный видеоблок и различные синтаксические элементы. Модуль 126 интра-предсказания может выполнить интра-предсказание на блоках PU в I-слайсах, P-слайсах и B-слайсах.
Для выполнения интра-предсказания на PU модуль 126 интра-предсказания может использовать множество режимов интра-предсказания для формирования множества наборов предсказанных данных для указанного PU. Когда модуль 126 интра-предсказания использует режим интра-предсказания для формирования набора предсказанных данных для указанного PU, модуль 126 может растянуть отсчеты из видеоблоков соседних PU на видеоблок данного PU в одном направлении и/или с градиентом, связанным с режимом интра-предсказания. Указанные соседние PU могут находиться выше, выше и правее, выше и левее или слева от данного PU в предположении, что для блоков PU, CU и древовидных блоков порядком кодирования является порядок «слева направо, сверху вниз». Модуль 126 интра-предсказания может использовать разное количество режимов интра-предсказания, например, 33 прямых режимов интра-предсказания. В некоторых примерах количество режимов интра-предсказания может зависеть от размера данного PU.
Модуль 100 предсказания может выбрать данные предсказания для PU из данных предсказания, сформированных модулем 124 компенсации движения для данного PU или данных предсказания, сформированных модулем 126 интра-предсказания для данного PU. В некоторых примерах модуль 100 предсказания выбирает данные предсказания для PU на основе показателей «скорость передачи/искажение» для наборов данных предсказания.
Если модуль 100 предсказания выбирает данные предсказания, сформированные модулем 126 интра-предсказания, то модуль 100 предсказания может сообщить о режиме интра-предсказания, который был использован для формирования данных предсказания для данного PU, то есть о выбранном режиме интра-предсказания. Модуль 100 предсказания может сообщить о выбранном режиме интра-предсказания различными путями. Например, вероятно, что выбранный режим интра-предсказания совпадает с режимом интра-предсказания соседнего PU. Другими словами, режим интра-предсказания для соседнего PU может быть наиболее вероятным для текущего PU. Таким образом, модуль 100 предсказания может сформировать синтаксический элемент для указания о том, что выбранный режим интра-предсказания совпадает с режимом интра-предсказания соседнего PU.
Поле выбора модулем 100 предсказания данных предсказания для блоков PU блока CU модель 102 формирования остаточных данных может сформировать остаточные данные для CU путем вычитания предсказанных видеоблоков PU данного CU из видеоблока данного CU. Остаточные данные блока CU могут включать в себя остаточные 2D видеоблоки, которые соответствуют разным компонентам отсчетов в видеоблоке данного CU. Например, остаточные данные могут включать в себя остаточный видеоблок, который соответствует разностям между компонентами яркости в отсчетах в предсказанных видеоблоках указанных PU данного CU и компонентами яркости отсчетов в исходном видеоблоке данного CU. Вдобавок, остаточные данные указанного CU могут включать в себя остаточные видеоблоки, которые соответствуют разностям между компонентами яркости отсчетов в предсказанных видеоблоках указанных PU данного CU и компонентами цветности отсчетов в исходном видеоблоке данного CU.
Модуль 100 предсказания может выполнить разбиение по квадродереву для разделения остаточных видеоблоков блока CU на субблоки. Каждый неразделенный остаточный видеоблок может быть связан со своим TU данного CU. Раз меры и местоположения остаточных видеоблоков, связанных с блоками TU блока CU могут, но не обязательно, основываться на размерах и местоположениях видеоблоков, связанных с блоками PU данного CU. Структура квадродерева, известная как «остаточное квадродерево» (RQT) может включать в себя узлы, связанные с каждым из остаточных видеоблоков. Блоки TU блока CU могут соответствовать концевому узлу дерева RQT.
Модуль 104 преобразования может сформировать один или более блоков коэффициентов преобразования для каждого TU блока CU путем применения одного или более преобразований к остаточному видеоблоку, связанному с указанным блоком TU. Каждый из блоков коэффициентов преобразования может представлять собой 2D матрицу коэффициентов преобразования. Модуль 104 преобразования может применить различные преобразования к остаточному видеоблоку, связанному с TU. Например, модуль 104 преобразования может применить дискретное косинусное преобразование (DCT), направленное преобразование или концептуально подобное преобразование к остаточному видеоблоку, связанному с TU.
После формирования модулем 104 преобразования блока коэффициентов преобразования, связанного с TU, модуль 106 квантования может выполнить квантование коэффициентов преобразования в блоке коэффициентов преобразования. Модуль 106 квантования может выполнить квантование блока коэффициентов преобразования, связанного с TU блока CU, на основе значения QP, связанного с данным CU.
Видеокодер 20 может связать значение QP с CU различными путями. Например, видеокодер 20 может выполнить анализ «скорость передачи-искажение» на древовидном блоке, связанном с данным CU. В ходе анализа «скорость передачи-искажение» видеокодер 20 может сформировать множество кодированных представлений древовидного блока путем многократного выполнения операции кодирования на этом древовидном блоке. Видеокодер 20 может связать различные значения QP с данным CU при формировании разных кодированных представлений данного древовидного блока. Видеокодер 20 может сообщить о том, что данное значение QP связано с данным CU, кода это данное значение QP связано с CU в кодированном представлении древовидного блока, имеющего минимальный показатель «скорость передачи - искажение».
Модуль 108 обратного квантования и модуль 110 обратного преобразования могут применить обратное квантование и обратное преобразование к блоку коэффициентов преобразования соответственно для восстановления остаточного видеоблока из блока коэффициентов преобразования. Модуль 112 восстановления может добавить восстановленный остаточный видеоблок к соответствующим отсчетам из одного или более предсказанных видеоблоков, сформированных модулем 100 предсказания, для формирования восстановленного видеоблока, связанного с TU. Восстанавливая видеоблоки для каждого TU блока CU, видеокодер 20 может восстановить видеоблок данного CU.
После того, как модуль 112 восстановления, представленный в виде сумматора, восстановил видеоблок для CU, модуль 113 фильтров может выполнить операцию деблокирования для уменьшения блокирования артефактов в видеоблоке, связанном с данным CU. После выполнения одной или более операций деблокирования модуль 113 фильтров может запомнить восстановленный видеоблок данного CU в буфере 114 декодированных изображений. Модуль 122 оценки движения и модуль 124 компенсации движения могут использовать опорное изображение, содержащее восстановленный видеоблок, для выполнения интер-предсказания на блоках PU последовательных изображений. Вдобавок, модуль 126 интра-предсказания может использовать в качестве CU восстановленные видеоблоки в буфере 114 декодированных изображений для выполнения интра-предсказания на других блоках PU в том же изображении.
Модуль 116 энтропийного кодирования может принимать данные от других функциональных компонент видеокодера 20. Например, модуль 116 энтропийного кодирования может принимать блоки коэффициентов преобразования от модуля 106 квантования и может принимать синтаксические элементы от модуля 100 предсказания. Приняв указанные данные, модуль 116 энтропийного кодирования может выполнить одну или более операций энтропийного кодирования для формирования энтропийно кодированных данных. Например, видеокодер 20 может выполнить на этих данных операцию контекстно-зависимого адаптивного кодирования с переменной длиной слова (CAVLC), операцию контекстно-адаптивного бинарного арифметического кодирования (CABAC), операцию перекодирования с переменной длины слова на переменную длину слова (V2V), операцию синтаксически ориентированного адаптивного бинарного арифметического кодирования (SBAC), операцию вероятностного энтропийного кодирования с интервальным разбиением (PIPE), или операцию энтропийного кодирования другого типа. Модуль 116 энтропийного кодирования может вывести битовый поток, содержащий энтропийно кодированные данные.
В качестве части процесса выполнения операции энтропийного кодирования модуль 116 энтропийного кодирования может выбрать контекстную модель. Если модуль 116 выполняет операцию CABAC, то контекстная модель может давать оценки вероятностей конкретных бинов, имеющих различные значения. В контексте операции CABAC термин «бин» используют для обращения к биту бинарной версии синтаксического элемента.
На фиг. 3 представлена блок-схема, иллюстрирующая приведенный в качестве примера видеодекодер 30, который сконфигурирован для реализации раскрытых здесь методик. Фиг. 3 представлена для объяснения, ее не следует рассматривать как ограничение методик, раскрытых в этом описании на множестве различных примеров. Для объяснения этих методик видеодекодер 30 описан здесь в контексте кодирования HEVC. Однако раскрытые здесь методики применимы и к другим стандартам или способам кодирования.
В примере на фиг. 3 видеодекодер 30 включает в себя множество функциональных компонент. Функциональные компоненты видеодекодера 30 включают в себя модуль 150 энтропийного декодирования, модуль 152 предсказания, модуль 154 обратного квантования, модуль 156 обратного преобразования, модуль 158 восстановления, модуль 159 фильтров и буфер 160 декодированных изображений. Модуль 152 предсказания включает в себя модуль 162 компенсации движения и модуль 164 интра-предсказания. В некоторых примерах видеодекодер 30 может выполнять процесс декодирования, который в общем случае является обратным по отношению к процессу кодирования, описанному применительно к видеокодеру 20 по фиг. 2. В других примерах видеодекодер 30 может включать в себя большее или меньшее количество функциональных компонент или другие функциональные компоненты.
Видеодекодер 30 может принимать битовый поток, содержащий кодированные видеоданные. Этот битовый поток может включать в себя множество синтаксических элементов. Когда видеодекодер 30 принимает указанный битовый поток, модуль 150 энтропийного декодирования может выполнить операцию синтаксического анализа на этом битовом потоке. В результате выполнения на этом битовом потоке операции синтаксического анализа модуль 150 энтропийного декодирования может извлечь синтаксические элементы из битового потока. В качестве части выполнения операции синтаксического анализа, модуль 150 энтропийного декодирования может выполнить энтропийное декодирование энтропийно кодированных синтаксических элементов в битовом потоке. Модуль 152 предсказания, модуль 154 обратного квантования, модуль 156 обратного преобразования, модуль 158 восстановления и модуль 159 фильтров могут выполнить операцию восстановления, которая формирует декодированные видеоданные на основе синтаксических элементов, извлеченных из битового потока.
Как обсуждалось выше, битовый поток может содержать ряд единиц NAL. Единицы NAL битового потока могут включать в себя единицы NAL набора параметров последовательности, единицы NAL набора параметров изображения, единицы SEI NAL и т.д. В качестве части выполнения операции синтаксического анализа на битовом потоке, модуль 150 энтропийного декодирования может выполнить операции синтаксического анализа, в ходе которых извлекаются и подвергаются энтропийному декодированию наборы параметров последовательности из единиц NAL наборов параметров последовательности, наборы параметров изображения из единиц NAL наборов параметров изображения, данные SEI из единиц SEI NAL и т.д.
Вдобавок, единицы NAL битового потока могут включать в себя единицы NAL кодированного слайса. В качестве части выполнения операции синтаксического анализа на битовом потоке, модуль 150 энтропийного декодирования может выполнить операции синтаксического анализа, в ходе которых извлекаются и подвергаются энтропийному декодированию кодированные слайсы из единиц NAL кодированных слайсов. Каждый из кодированных слайсов может включать в себя заголовок слайса и данные слайса. Заголовок слайса моет содержать синтаксические элементы, относящиеся к слайсу. Синтаксические элементы в заголовке слайса могут включать в себя синтаксический элемент, который идентифицирует набор параметров изображения, связанный с изображением, содержащим данный слайс. Модуль 150 энтропийного декодирования может выполнять операции энтропийного декодирования, такие как операции декодирования CABAC, на синтаксических элементах в заголовке кодированного слайса для восстановления заголовка слайса.
В качестве части выделения данных слайса из единиц NAL кодированного слайса, модуль 150 энтропийного декодирования может выполнить операции синтаксического анализа, в ходе которых из кодированных CU в данных слайса извлекают синтаксические элементы. Извлеченные синтаксические элементы могут включать в себя синтаксические элементы, связанные с блоками коэффициентов преобразования. Затем модуль 150 энтропийного декодирования может выполнить операции декодирования CABAC на некоторых из синтаксических элементов.
После выполнения модулем 150 энтропийного декодирования операции синтаксического анализа на неразделенном CU видеодекодер 30 может выполнить операцию восстановления на этом неразделенном CU. Для выполнения операции восстановления на неразделенном CU видеодекодер 30 может выполнить операцию восстановления на каждом TU данного CU. Выполнив операцию восстановления для каждого TU данного CU, видеодекодер 30 может восстановить остаточный видеоблок, связанный с данным CU.
В качестве части выполнения операции восстановления на TU модуль 154 обратного квантования может выполнить обратное квантование, то есть «деквантование», блока коэффициентов преобразования связанного с данным TU. Модуль 154 обратного квантования может выполнить обратное квантование блока коэффициентов преобразования способом, подобным процессам обратного квантования, предложенным для HEVC или определенными стандартом декодирования H.264. Модуль 154 обратного квантования может использовать параметр QP квантования, вычисленный видеокодером 20 для CU блока коэффициентов преобразования, чтобы определить степень квантования и аналогичным образом степень обратного квантования для их использования модулем 154 обратного квантования.
После выполнения модулем 154 обратного квантования блока коэффициентов преобразования модуль 156 обратного преобразования может сформировать остаточный видеоблок для TU, связанного с эти блоком коэффициентов преобразования. Модуль 156 обратного преобразования может применить обратное преобразование к блоку коэффициентов преобразования для формирования остаточного видеоблока для TU. Например, модуль 156 обратного преобразования может применить обратное DCT преобразование, обратное целочисленное преобразования, обратное преобразование Карунена-Лоева (KLT), обратное преобразование вращением, обратное направленное преобразование или иное обратное преобразование к блоку коэффициентов преобразования.
В некоторых примерах модель 156 обратного преобразования может определить обратное преобразование для применения к блоку коэффициентов преобразования на основе сигнализации, полученной от видеокодера 20. В указанных примерах модуль 156 обратного преобразования может определить обратное преобразование на основе сообщенного преобразования в корневом узле квадродерева для древовидного блока, связанного с блоком коэффициентов преобразования. В других примерах модуль 156 обратного преобразования может выяснить, какое обратное преобразование необходимо, исходя из одной или более характеристик кодирования, таких как размер блока, режим кодирования или т.п. В некоторых примерах модель 156 обратного преобразования может применить каскадное обратное преобразование.
Если PU кодируют в режиме с пропуском или информация о движении для данного PU кодируется с использованием режима слияния, то модуль 162 компенсации движения может сформировать список кандидатов на слияние для данного PU. Затем модуль 162 компенсации движения может идентифицировать выбранного кандидата на слияние в списке кандидатов на слияние. После идентификации выбранного кандидата на слияние в списке кандидатов на слияние, модуль 162 компенсации движения может сформировать предсказанный видеоблок для данного PU на основе одного или более опорных блоков, связанных с информацией о движении, указанной выбранным кандидатом на слияние.
Согласно раскрытым здесь методикам модуль 162 компенсации движения может определить, ограничен ли PU однонаправленным интра-предсказанием. Кроме того, модуль 162 компенсации движения может сформировать список кандидатов на слияние для данного PU и определить выбранного кандидата на слияние в указанном списке кандидатов на слияние. Если PU ограничен однонаправленным интер-предсказанием, то модуль 162 компенсации движения может сформировать предсказанный видеоблок для этого PU на основе не более, чем одного опорного блока, связанного с информацией о движении, заданной выбранным кандидатом на слияние. В противном случае, если PU не ограничен однонаправленным интер-предсказанием, то модуль 162 компенсации движения может сформировать предсказанный видеоблок для указанного PU на основе одного или более опорных блоков, связанных с информацией о движении, заданной выбранным кандидатом на слияние.
Если информация о движении для PU кодирована с использованием режима AMVP, то модуль 162 компенсации движения может сформировать список кандидатов-предикторов MV списка 0 и/или список кандидатов-предикторов MV списка 1. Затем модуль 162 компенсации движении может определить выбранного кандидата-предиктора MV списка 0 и/или выбранного кандидата-предиктора MV списка 1. Далее модуль 162 компенсации движения может определить вектор движения списка 0 для данного PU и/или вектор движения списка 1 для данного PU на основе MVD списка 0, MVD списка 1, вектора движения списка 0, заданного выбранным кандидатом-предиктором MV списка 0, и/или вектором движения списка 1, заданного выбранным кандидатом-предиктором MV списка 1. Модуль 162 компенсации движения может затем сформировать предсказанный видеоблок для PU на основе опорных блоков, связанных с вектором движения списка 0 и индекса опорного изображения списка 0 и/или вектора движения списка 1 и индекса опорного изображения списка 1.
В некоторых примерах модуль 162 компенсации движения может уточнить предсказанный видеоблок PU путем выполнения интерполяции на основе интерполяционных фильтров. Идентификаторы для интерполяционных фильтров, подлежащих использованию для компенсации движения с точностью до суботсчетов, могут быть включены в синтаксические элементы. Модуль 162 компенсации движения может использовать те же самые интерполяционные фильтры, которые используются видеокодером 20 во время формирования предсказанного видеоблока данного PU, для вычисления интерполированных значений для дробных отсчетов опорного блока. Модуль 162 компенсации движения может определить интерполяционные фильтры, используемые видеокодером 20, в соответствии с полученной синтаксической информацией, и использовать эти интерполяционные фильтры для формирования предсказанного видеоблока.
Если PU кодируют, используя интра-предсказание, то модуль 164 интра-предсказания может выполнить интра-предсказание для формирования предсказанного видеоблока для данного PU. Например, модуль 164 интра-предсказания может определить режим интра-предсказания для данного PU на основе синтаксических элементов в битовом потоке. Битовый поток может включать в себя синтаксические элементы, которые модуль 164 интра-предсказания может использовать для определения режима интра-предсказания для данного PU.
В некоторых случаях синтаксические элементы могут указывать, что модуль 164 интра-предсказания должен использовать режим интра-предсказания другого PU, чтобы определить режим интра-предсказания текущего PU. Например, вполне вероятно, что режим интра-предсказания текущего PU совпадает с режимом интра-предсказания соседнего PU. Другими словами режим интра-предсказания соседнего PU может быть наиболее вероятным режимом для текущего PU. Таким образом, в данном примере битовый поток может включать в себя небольшой синтаксический элемент, указывающий, что режим интра-предсказания данного PU совпадает с режимом интра-предсказания соседнего PU. Затем модуль 164 интра-предсказания может использовать этот режим интра-предсказания для формирования данных предсказания (например, предсказанных отсчетов) для данного PU на основе видеоблоков соседних (в пространстве).
Модуль 158 восстановления может использовать остаточные видеоблоки, связанные с блоками TU блока CU и предсказанные видеоблоки блоков PU блоков CU, то есть либо данные интра-предсказания, либо данные интер-предсказания, в зависимости от того, какие данные применяются, для восстановления видеоблока данного CU. В частности, модуль 158 восстановления может добавить остаточные данные к предсказанным данным для восстановления кодированных видеоданных. Таким образом, видеодекодер 30 может сформировать предсказанный видеоблок и остаточный видеоблок на основе синтаксических элементов в битовом потоке и может сформировать видеоблок на основе предсказанного видеоблока и остаточного видеоблока.
После того, как модуль 158 восстановления восстановит видеоблок данного CU, модуль 159 фильтров может выполнить операцию деблокирования для уменьшения блокирования артефактов, связанных с данным CU. После выполнения модулем 159 фильтров операции деблокирования для уменьшения блокирования артефактов, связанных с данным CU, видеодекодер 30 может запомнить видеоблок данного CU в буфере 160 декодированных изображений. Буфер 160 декодированных изображений может обеспечить опорные изображения для последующих операций компенсации движения, интра-предсказания и представления на устройстве отображения, таком как устройство 32 отображения по фиг. 1. Например, видеодекодер 30 на основе видеоблоков в буфере 160 декодированных изображений может выполнить операции интра-предсказания или интер-предсказания на блоках PU других CU.
На фиг. 4 представлена блок-схема, иллюстрирующая примерную операцию 200 компенсации движения. Видеокодер, такой как видеокодер 20 или видеодекодер 30, может выполнить операцию 200 компенсации движения. Видеокодер может выполнить операцию 200 компенсации движения для формирования предсказанного блока для текущего PU.
После того, как видеокодер начнет операцию 200 компенсации движения, он может определить, является ли режим предсказания для текущего PU режимом с пропуском (202). Если режим предсказания для текущего PU не является режимом с пропуском («Нет» на этапе 202), то видеокодер может определить, является ли режим предсказания для текущего PU режимом интер-предсказания, и что режим интер-предсказания текущего PU является режимом слияния (204). Если режим предсказания текущего PU является режимом с пропуском («Да» на этапе 202) или если режим предсказания текущего PU является режимом интер-предсказания, и режимом интер-предсказания текущего PU является режим слияния («Да» на этапе 204), то видеокодер может сформировать список кандидатов на слияние для текущего PU (206). Список кандидатов на слияние может включать в себя множество кандидатов на слияние. Каждый из кандидатов на слияние задает набор информации о движении, например, один или более векторов движения, один или более индексов опорных изображений, флаг предсказания списка 0 и флаг предсказания списка 1. Список кандидатов на слияние может включать в себя один или более однонаправленных кандидатов на слияние или двунаправленных кандидатов на слияние. В некоторых примерах видеокодер может выполнять приведенную в качестве примера операцию, описанную ниже со ссылками на фиг. 6, для формирования списка кандидатов на слияние.
После формирования списка кандидатов на слияние видеокодер может определить выбранного кандидата на слияние в списке кандидатов на слияние (208). Если видеокодер представляет собой видеокодер, то видеокодер может выбрать кандидата на слияние из списка кандидатов на слияние на основе анализа «скорость передачи-искажение». Если видеокодер представляет собой видеодекодер, то видеокодер может выбрать кандидата на слияние на основе синтаксического элемента (например, merge_idx), который идентифицирует местоположение выбранного кандидата на слияние в списке кандидатов на слияние.
Затем видеокодер может определить информацию о движении текущего PU на основе информации о движении, заданной выбранным кандидатом на слияние (210). Информация о движении может включать в себя один или более векторов движения и индексов опорных изображений. Видеокодер может определить информацию о движении текущего PU на основе информации о движении, заданной выбранным кандидатом на слияние, различными путями. Например, видеокодер может определить, что информация о движении текущего PU совпадает с информацией о движении, заданной выбранным кандидатом на слияние.
Если режим интер-предсказания для текущего PU не является режимом слияния («Нет» на этапе 204), то видеокодер может определить информацию о движении текущего PU, используя режим AMVP (212). На фиг. 8, подробно описанной ниже, представлена блок-схема, иллюстрирующая примерную операцию для определения информации о движении для PU с использованием режима AMVP.
После определения информации о движении для текущего PU видеокодер может определить, ограничен ли текущий PU однонаправленным интер-предсказанием (214). Видеокодер может определить, ограничен ли текущий PU однонаправленным интер-предсказанием, различными путями. Например, видеокодер может определить, что текущий PU ограничен однонаправленным интер-предсказанием, если размерная характеристика текущего PU меньше порогового значения. В этом примере видеокодер может определить, что текущий PU ограничен однонаправленным интер-предсказанием, если размер данного PU равен 8x4, 4x8 или меньше. В другом примере, если видеокодер представляет собой видеодекодер, то видеодекодер может определить на основе синтаксического элемента в принятом битовом потоке, что текущий PU ограничен однонаправленным интер-предсказанием.
В ответ на определение того, что текущий PU ограничен однонаправленным интер-предсказанием («Да» на этапе 214), видеокодер может сформировать предсказанный видеоблок для текущего PU на основе не более одного опорного блока, связанного с информацией о движении текущего PU (216). Как указано выше, опорный блок может быть идентифицирован информацией о движении, заданной выбранным кандидатом на слияние, или синтезирован из опорных отсчетов, идентифицированных информацией о движении, заданной выбранным кандидатом на слияние.
С другой стороны, в ответ на определение того, что текущий PU не ограничен однонаправленным интер-предсказанием («Нет» на этапе 214), видеокодер может сформировать предсказанный видеоблок для текущего PU на основе одного или более опорных блоков, связанных с информацией о движении текущего PU (218). Как указано выше, эти один или более опорных блоков могут быть идентифицированы информацией о движении, заданной выбранным кандидатом на слияние, и/или синтезированы из опорных отсчетов, идентифицированных информацией о движении, заданной выбранным кандидатом на слияние.
На фиг. 5 представлена блок-схема, иллюстрирующая другую примерную операцию 270 компенсации движения. Видеокодер, такой как видеокодер 20 или видеодекодер 30, может выполнить операцию 270 компенсации движения для формирования предсказанного блока для текущего PU. Видеокодер может выполнить операцию 270 компенсации движения в качестве альтернативы к выполнению операции 200 компенсации движения.
После того, как видеокодер начнет операцию 270 компенсации движения, он может определить, является ли режим предсказания для текущего PU режимом с пропуском (272). Если режим предсказания для текущего PU не является режимом с пропуском («Нет» на этапе 272), то видеокодер может определить, является ли режим предсказания для текущего PU режимом интер-предсказания, и что режим интер-предсказания текущего PU является режимом слияния (273). Если режим предсказания текущего PU является режимом с пропуском («Да» на этапе 272) или если режим предсказания текущего PU является режимом интер-предсказания, и режимом интер-предсказания текущего PU является режим слияния («Да» на этапе 273), то видеокодер может определить, ограничен ли текущий PU однонаправленным интер-предсказанием (274). Если текущий PU ограничен однонаправленным интер-предсказанием («Да» на этапе 274), видеокодер может сформировать список кандидатов на слияние для текущего PU, так чтобы список кандидатов на слияние не включал в себя двунаправленных кандидатов на слияние (276). Видеокодер может выполнять приведенную в качестве примера операцию, проиллюстрированную на фиг. 6, для формирования списка кандидатов на слияние для текущего PU.
С другой стороны, если текущий PU не ограничен однонаправленным интер-предсказанием («Нет» на этапе 274), то видеокодер может сформировать список кандидатов на слияние, который может включать в себя однонаправленных и двунаправленных кандидатов на слияние (278). В некоторых примерах видеокодер может выполнять примерную операцию, описанную ниже со ссылкой на фиг. 6 для формирования списка кандидатов на слияние. Следовательно, если текущий PU не ограничен однонаправленным интер-предсказанием, то список кандидатов на слияние может включать в себя однонаправленных кандидатов на слияние и двунаправленных кандидатов на слияние.
После формирования списка кандидатов на слияние для текущего PU видеокодер может определить выбранного кандидата на слияние в списке кандидатов на слияние (280). Если видеокодер представляет собой видеокодер, то видеокодер может выбрать кандидата на слияние из списка кандидатов на слияние на основе анализа «скорость передачи-искажение». Если видеокодер представляет собой видеодекодер, то видеокодер может выбрать кандидата на слияние на основе синтаксического элемента (например, merge_idx), который идентифицирует местоположение выбранного кандидата на слияние в списке кандидатов на слияние.
Затем видеокодер может определить информацию о движении текущего PU на основе информации о движении, заданной выбранным кандидатом на слияние (282). Информация о движении, заданная выбранным кандидатом на слияние, может задать один или более векторов движения и один или более индексов опорных изображений. Видеокодер может определить информацию о движении текущего PU на основе информации о движении, заданной выбранным кандидатом на слияние, различными путями. Например, видеокодер может определить, что информация о движении текущего PU совпадает с информацией о движении, заданной выбранным кандидатом на слияние.
Если режим интер-предсказания для текущего PU не является режимом слияния («Нет» на этапе 273), то видеокодер может определить информацию о движении текущего PU, используя режим AMVP (284). На фиг. 8, подробно описанной ниже, представлена блок-схема, иллюстрирующая примерную операцию для определения информации о движении для PU с использованием режима AMVP.
После определения информации о движении для текущего PU видеокодер может сформировать предсказанный видеоблок для текущего PU (286). Поскольку список кандидатов на слияние включает в себя только однонаправленных кандидатов на слияние, если текущий PU ограничен однонаправленным интер-предсказанием, выбранный кандидат на слияние связан только с одним опорным блоком. Таким образом, если текущий PU находится в B-слайсе и ограничен однонаправленным интер-предсказанием, то предсказанный видеоблок для текущего PU может базироваться на не более чем одном опорном блоке, связанном с информацией о движении, заданной выбранным кандидатом на слияние.
С другой стороны, если текущий PU не ограничен однонаправленным интер-предсказанием, то список кандидатов на слияние может включать в себя однонаправленных кандидатов на слияние и двунаправленных кандидатов на слияние. Поскольку список кандидатов на слияние может включать в себя однонаправленных кандидатов на слияние и двунаправленных кандидатов на слияние, выбранный кандидат на слияние может быть связан с одним или двумя опорными блоками. Следовательно, если текущий PU находится в B-слайсе и не ограничен однонаправленным интер-предсказанием, то предсказанный видеоблок для текущего PU может базироваться на одном или более опорных блоках, связанных с выбранным кандидатом на слияние.
На фиг. 6 представлена блок-схема, иллюстрирующая примерную операцию 300 для формирования списка кандидатов на слияние. Видеокодер, такой как видеокодер 20 или видеодекодер 30, может выполнить операцию 300 для формирования списка кандидатов на слияние для текущего PU. Видеокодер может выполнить операцию 300, когда режим предсказания текущего PU является режимом с пропуском, или когда режимом предсказания текущего PU является режим интер-предсказания, а режимом интер-предсказания текущего PU является режим слияния.
После того, как видеокодер запустил операцию 300, он может определить информацию о движении, а также наличие пространственных кандидатов на слияние (302). Видеокодер может определить информацию о движении для пространственного кандидата на слияние на основе информации о движении для PU, который покрывает то место, которое соседствует в пространстве с текущим PU. Например, видеокодер может определить информацию о движении для пространственных кандидатов на слияние на основе информации о движении для тех PU, которые покрывают места слева, слева внизу, слева вверху, вверху и справа вверху по отношению к текущему PU.
Видеокодер может определить наличие пространственного кандидата на слияние различными путями. Например, видеокодер может определить, что пространственный кандидат на слияние недоступен, если этот пространственный кандидат на слияние соответствует PU с интер-предсказанием, расположенному вне текущего кадра или расположенному вне текущего слайса. Кроме того, видеокодер может определить, что пространственный кандидат на слияние недоступен, если информация о движении для этого пространственного кандидата на слияние совпадает с информацией о движении другого пространственного кандидата на слияние.
Вдобавок, видеокодер может определить информацию о движении и наличие кандидата на временное слияние. Кандидат на временное слияние может задать информацию о движении для PU, который расположен в соответствии с текущим PU, но находится в другом изображении. Видеокодер может определить наличие кандидата на временное слияние различными путями. Например, видеокодер может определить, что кандидат на временное слияние недоступен, если кандидат на временное слияние соответствует PU с интра-предсказанием.
После формирования кандидатов на пространственное слияние и кандидата на временное слияние видеокодер может включать в себя кандидатов из числа кандидатов на пространственное слияние и из числа кандидатов на временное слияние в списке кандидатов на слияние для текущего PU (306). Видеокодер может внести кандидата на пространственное или временное слияние в список кандидатов на слияние, если кандидат на слияние доступен, и может включать в себя кандидата на слияние из списка кандидатов на слияние, если данный кандидат на слияние недоступен. Исключение недоступных кандидатов на слияние из списка кандидатов на слияние, позволяет видеокодеру эффективно выполнять процесс отсечения, в ходе которого отсекаются (например, опускаются) недоступные кандидаты на слияние из списка кандидатов на слияние.
В некоторых примерах видеокодер формирует список кандидатов на слияние таким образом, чтобы этот список включал в себя только однонаправленных кандидатов на слияние. В некоторых из указанных примеров видеокодер может определить, что двунаправленные кандидаты на слияние недоступны. То есть видеокодер может определить, что кандидат на слияние недоступен, если этот кандидат на слияние задает вектор движения списка 0 и вектор движения списка 1. Таким образом, если текущий PU ограничен однонаправленным предсказанием, видеокодер может определить, что однонаправленные кандидаты на слияние доступны в отличие от двунаправленных кандидатов на слияние. Поскольку видеокодер может не включать недоступных кандидатов на слияние в список кандидатов на слияние, список кандидатов на слияние в некоторых случаях может включать в себя только однонаправленных кандидатов на слияние. В этом примере видеокодер может эффективно выполнять процесс отсечения, в ходе которого отсекаются из списка на слияние двунаправленные кандидаты на слияние.
В других примерах, где видеокодер формирует список кандидатов на слияние таким образом, что этот список включает в себя только однонаправленных кандидатов на слияние, видеокодер может преобразовать двунаправленных кандидатов на слияние в однонаправленных кандидатов на слияние, а затем включить доступных однонаправленных кандидатов на слияние в список кандидатов на слияние. В указанных примерах видеокодер может не добавлять однонаправленного кандидата на слияние в список кандидатов на слияние, если однонаправленный кандидат на слияние совпадает с однонаправленным кандидатом на слияние, который уже добавлен в список кандидатов на слияние. Таким путем видеокодер может отсекать дублирующих однонаправленных кандидатов на слияние из списка кандидатов на слияние. Путем преобразования двунаправленных кандидатов на слияние в однонаправленных кандидатов на слияние перед отсечением дублирующих однонаправленных кандидатов на слияние из списка кандидатов на слияние, видеокодер имеет возможность избежать появления избыточных кандидатов на слияние в списке кандидатов на слияние после отсечения. Преобразование двунаправленных кандидатов на слияние в однонаправленных кандидатов на слияние перед отсечением дублирующих однонаправленных кандидатов на слияние может повысить сложность аппаратного обеспечения видеокодера. Вдобавок, видеокодер может преобразовать множество двунаправленных кандидатов на слияние, которые совпадают с однонаправленными кандидатами на слияние.
В других примерах видеокодер может изначально включать в себя имеющихся двунаправленных кандидатов на слияние в списке кандидатов на слияние для текущего PU. Затем видеокодер может отсечь дублирующих кандидатов на слияние из списка кандидатов на слияние. После формирования видеокодером кандидата на слияние он может определить выбранного кандидата на слияние из списка кандидатов на слияние и преобразовать выбранного кандидата на слияние в однонаправленного кандидата на слияние, если выбранным кандидатом на слияние является двунаправленный кандидат на слияние. В этом примере видеокодер может эффективно преобразовать выбранного двунаправленного кандидата на слияние в однонаправленного кандидата на слияние путем использования только опорного блока, указанного вектором движения списка 0 или вектором движения списка 1, для формирования предсказанного видеоблока для текущего PU.
В отличие от преобразования двунаправленных кандидатов на слияние в однонаправленных кандидатов на слияние до отсечения дублирующих кандидатов на слияние из списка кандидатов на слияние, преобразование выбранного двунаправленного кандидата на слияние в однонаправленного кандидата на слияния после отсечения дублирующих кандидатов на слияние из списка кандидатов на слияние может потребовать только одного преобразовании, а не множества преобразований. Например, если преобразование выполняется после отсечения дублирующих кандидатов на слияние, выбранный кандидат на слияние является третьим кандидатом на слияние в списке кандидатов на слияние, и этот третий кандидат на слияние является двунаправленным кандидатом на слияние, то видеокодер может преобразовать только третьего кандидата на слияние в однонаправленного кандидата на слияние. В этом примере, если преобразование выполняется перед отсечением дублирующих кандидатов на слияние, то выбранным кандидатом на слияние является третий кандидат на слияние в списке кандидатов на слияние и этот третий кандидат на слияние является двунаправленным кандидатом на слияние, то видеокодер должен преобразовать трех двунаправленных кандидатов на слияние, прежде чем видеокодер сможет определить выбранного кандидата на слияние, из-за того, что операция отсечения выполняется после операции преобразования.
Видеокодер может сформировать различные списки кандидатов на слияние в зависимости от того, преобразует ли видеокодер двунаправленных кандидатов на слияние в однонаправленных кандидатов на слияние перед или после отсечения дублирующих кандидатов на слияние из списка кандидатов на слияние. Например, видеокодер может преобразовать двунаправленных кандидатов на слияние в однонаправленных кандидатов на слияние, взяв векторы движения двунаправленных кандидатов на слияние из списка 0, и проигнорировав векторы движения однонаправленных кандидатов на слияние из списка 1. В этом примере первым кандидатом на слияние может быть однонаправленным, и может задать вектор движения списка 0, равный значению MVI. В этом примере вторым кандидатом на слияние может быть двунаправленный кандидат, который может задать вектор движения списка 0, равным MV1, и вектор движения списка 1, который равен значению MV2. Первый и второй кандидаты на слияние могут задать одни и те же индексы опорных изображений списка 0. В этом примере, если видеокодер преобразует второго кандидата на слияние в однонаправленного кандидата на слияние перед отсечением дублирующих кандидатов на слияние из списка кандидатов на слияние, могут оставаться два однонаправленных кандидата на слияние, которые равны MV1. Соответственно, видеокодер может отсечь однонаправленного кандидата на слияние, сформированного из второго кандидата на слияние, поскольку он является избыточным в отношении первого кандидата слияние. В результате видеокодер может включить в список кандидатов на слияние только одного кандидата на слияние (например, первого кандидата на слияние).
Однако в примере из предыдущего раздела, если видеокодер преобразует второго кандидата на слияние в однонаправленного кандидата на слияние после отсечения дублирующих кандидатов на слияние из списка кандидатов на слияние, то видеокодер может внести первого и второго кандидата на слияние в список кандидатов на слияние. После внесения первого и второго кандидатов на слияние в список кандидатов на слияние видеокодер может преобразовать второго кандидата на слияние в однонаправленного кандидата на слияние, взяв (то есть поддерживая) вектор движения списка 0 второго кандидата на слияние и игнорируя вектор движения списка 1 второго кандидата на слияние. Таким образом, список кандидатов на слияние может включать двух кандидатов на слияние, которые задают векторы движения списка 0, равные MV1, что является весьма эффективным.
После внесения доступных кандидатов на слияние в список кандидатов на слияние, видеокодер может определить, находится ли текущий PU в B-слайсе (308). В ответ на определение того что текущий PU находится в B-слайсе («Да» на этапе 308) видеокодер может выполнить процесс, в ходе которого формируется нуль или более искусственных кандидатов на слияние, и видеокодер включает этих искусственных кандидатов на слияние в список кандидатов на слияние (310). На фиг. 7, подробно описанной ниже, показан примерный процесс формирования искусственных кандидатов на слияние.
В ответ на определение того, что текущий PU не находится в B-слайсе («Нет» на этапе 308) или после выполнения процесса, формирующего искусственных кандидатов на слияние, видеокодер может определить, меньше ли количество кандидатов на слияние в списке кандидатов на слияние максимального количества кандидатов на слияние (312). Если количество кандидатов на слияние в списке кандидатов на слияние не меньше максимального количества кандидатов на слияние («Нет» на этапе 312), видеокодер завершает формирование списка кандидатов на слияние.
Однако в ответ на определение того, что количество кандидатов на слияние в списке кандидатов на слияние меньше максимального количества кандидатов на слияние («Да» на этапе 312), видеокодер может сформировать кандидата на слияние с нулевым значением (314). Если текущий PU находится в P-слайсе, то кандидат на слияние с нулевым значением может задать вектор движения списка 0, величина которого равна нулю. Если текущий PU находится в B-слайсе, и текущий PU не ограничен однонаправленным интер-предсказанием, то кандидат на слияние с нулевым значением может задать вектор движения списка 0, величина которого равна нулю, а также вектор движения списка 1, величина которого также равна нулю. В некоторых примерах кандидат на слияние с нулевым значением может задать вектор движения списка 0 или вектор движения списка 1, имеющие величину, равную нулю, если текущий PU находится в B-слайсе, и текущий PU ограничен однонаправленным интер-предсказанием. Затем видеокодер может внести кандидата на слияние с нулевым значением в список кандидатов на слияние.
После внесения кандидата на слияние с нулевым значением в список кандидатов на слияние видеокодер может вновь определить, меньше ли количество кандидатов на слияние в списке кандидатов на слияние, чем максимальное количество кандидатов на слияние (312), и, если нет, то видеокодер может сформировать дополнительного кандидата на слияние с нулевым значением. Таким путем видеокодер может продолжать формирование кандидатов на слияние с нулевым значением и вносить этих кандидатов на слияние с нулевым значение в список кандидатов на слияние, пока количество кандидатов на слияние в списке кандидатов на слияние не станет равным максимальному количеству кандидатов на слияние.
На фиг. 7 представлена блок-схема, иллюстрирующая примерный процесс 350 формирования искусственных кандидатов на слияние. Видеокодер, такой как видеокодер или видеодекодер 30 может реализовать процесс 350 формирования искусственных кандидатов на слияние для их внесения в список кандидатов на слияние для текущего PU.
После запуска процесса 350 видеокодером он может определить, следует ли сформировать искусственного кандидата на слияние (352). Видеокодер может определить, следует ли сформировать искусственного кандидата на слияние различными путями. Например, видеокодер может определить, равно ли количество искусственных кандидатов на слияние в списке кандидатов на слияние общему количеству уникальных искусственных кандидатов, которое можно сформировать на основе исходных кандидатов на слияние в списке кандидатов на слияние. Исходными кандидатами на слияние могут быть кандидаты на слияние, задающие информацию о движении для PU, отличных от текущего PU. Кроме того, в этом примере видеокодер может определить, содержит ли список кандидатов на слияние максимальное количество кандидатов на слияние. В данном примере, если оба этих условия не выполняются, то видеокодер может принять решение о формировании искусственного кандидата на слияние.
Если видеокодер решает сформировать искусственного кандидата на слияние («Да» на этапе 352), то он может определить, ограничен ли текущий PU однонаправленным интер-предсказанием (354). Как было описано выше, видеокодер может определить, ограничен ли текущий PU однонаправленным интер-предсказанием, различными путями. Например, видеокодер может определить, ограничен ли текущий PU однонаправленным интер-предсказанием, на основе размерной характеристики текущего PU. В другом примере видеокодер может определить, ограничен ли текущий PU однонаправленным интер-предсказанием, на основе параметра, указанного в синтаксических элементах текущего древовидного блока текущего CU или текущего PU, либо в заголовке слайса, наборах PPS, APS, SPS, либо в другом наборе параметров. В некоторых примерах параметр в древовидном блоке может задать, что все PU, связанные с древовидным блоком ограничены однонаправленным интер-предсказанием. В некоторых примерах параметр в CU может задать, что все PU, связанные с CU, ограничены однонаправленным интер-предсказанием. В некоторых примерах параметр в наборе PPS может задать, что все PU, связанные с изображениями, которые связаны с набором PPS, ограничены однонаправленным интер-предсказанием. В некоторых примерах параметр в наборе APS может задать, что все PU, связанные с изображениями, которые связаны с набором APS, ограничены однонаправленным интер-предсказанием. В некоторых примерах параметр в наборе SPS может задать, что все PU, связанные с изображениями в последовательности, которая связана с набором SPS, ограничены однонаправленным интер-предсказанием.
В ответ на определение того, что текущий PU ограничен однонаправленным интер-предсказанием («Да» на этапе 354), видеокодер может сформировать искусственного однонаправленного кандидата на слияние (356). После формирования искусственного однонаправленного кандидата на слияние видеокодер может внести этого искусственного однонаправленного кандидата на слияние в список кандидатов на слияние (358). После внесения искусственного однонаправленного кандидата на слияние в список кандидатов на слияние видеокодер может определить, следует ли сформировать еще одного искусственного кандидата на слияние (352) и, если следует, то сформировать еще одного искусственного кандидата на слияние.
Видеокодер может сформировать искусственного однонаправленного кандидата на слияние различными путями. Например, видеокодер может сформировать искусственного однонаправленного кандидата на слияние, взяв сначала пару однонаправленных кандидатов на слияние, которые уже находятся в списке кандидатов. Эти первый и второй однонаправленные кандидаты на слияние могут задать соответственно векторы движения MV1 и MV2. Затем в этом примере видеокодер может выполнить масштабирование вектора MV2 в соответствии с временным различием между опорным кадром, заданным первым однонаправлены кандидатом на слияние, и опорным кадром, заданным вторым однонаправленным кандидатом на слияние. В этом примере видеокодер может сформировать искусственного однонаправленного кандидата на слияние, который задает масштабированную версию вектора MV2. Например, в данном примере опорное изображение, связанное с первым однонаправленным кандидатом на слияние, может появиться через одно изображение после текущего изображения, а опорное изображение, связанное со вторым однонаправленным кандидатом на слияние, может появиться через четыре изображения после текущего изображения. В этом примере видеокодер может разделить горизонтальную составляющую и вертикальную составляющую вектора MV2 на четыре и использовать масштабированный вектор MV2 с индексом опорного изображения, соответствующим вектору MV1, в качестве искусственного кандидата. Аналогичное масштабирование можно выполнить для вектора MV1 на основе вектора MV2.
В другом примере видеокодер может сформировать искусственного однонаправленного кандидата на слияние, который задает один из векторов движения, заданных двунаправленным кандидатом на слияние. Например, двунаправленный кандидат на слияние может задать вектор движения списка 0 и вектор движения списка 1. В этом примере видеокодер может сформировать искусственного однонаправленного кандидата на слияние, который задает вектор движения списка 0, но не задает вектор движения списка 1. В этом примере видеокодер может сформировать другого искусственного однонаправленного кандидата на слияние, который задает вектор движения списка 0, но не задает вектор движения списка 1. В данном примере видеокодер может сформировать еще одного искусственного однонаправленного кандидата на слияние, который задает вектор движения списка 1, но не задает вектор движения списка 0. Таким путем видеокодер может сформировать однонаправленных искусственных кандидатов на слияние из одного двунаправленного кандидата на пространственное или временное слияние путем разделения этого двунаправленного кандидата на слияние на два однонаправленных кандидата на слияние: одного из вектора движения списка 0, а другого из вектора движения списка 1. Видеокодер может внести любого или обоих однонаправленных кандидатов на слияние в список кандидатов на слияние. Другими словами, видеокодер может сформировать искусственного однонаправленного кандидата на слияние таким образом, что этот искусственный однонаправленный кандидат на слияние будет задавать вектор движения, заданный двунаправленным кандидатом на слияние.
В примерах, где видеокодер формирует искусственных однонаправленных кандидатов на слияние на основе векторов движения, заданных двунаправленными кандидатами на слияние, видеокодер может добавлять этих искусственных однонаправленных кандидатов на слияние в список кандидатов на слияние в различном порядке. Например, видеокодер может добавить искусственного однонаправленного кандидата на слияние на основе вектора движения списка 1 первого двунаправленного кандидата на слияние, затем добавить искусственного однонаправленного кандидата на слияние на основе вектора движения списке 1 первого двунаправленного кандидата на слияние, затем добавить искусственного однонаправленного кандидата на слияние на основе вектора движения списка 0 второго двунаправленного кандидата на слияние, затем добавить искусственного однонаправленного кандидата на слияние на основе вектора движения списка 1 второго двунаправленного кандидата на слияние и т.д.
Если текущий PU не ограничен однонаправленным интер-предсказанием («Нет» на этапе 354), то видеокодер может сформировать искусственного двунаправленного кандидата на слияние (360). Как упоминалось выше, видеокодер может определить, ограничен ли текущий PU однонаправленным интер-предсказанием? на основе различных факторов, таких как размерная характеристика данного PU, параметр и т.д. Видеокодер может сформировать искусственного двунаправленного кандидата на слияние различными путями. Например, видеокодер может выбрать комбинацию из двух кандидатов на слияние в списке кандидатов на слияние. В данном примере видеокодер может определить, задает ли первый из выбранных кандидатов на слияние опорное изображение в списке 0, задает ли второй из выбранных кандидатов на слияние опорное изображение в списке 1, и имеют ли заданные опорные изображения разные порядковые номера. Если каждое из этих условий выполняется, то видеокодер может сформировать искусственного двунаправленного кандидата на слияние, который задает вектор движения списка 0 первого кандидата на слияние в упомянутой комбинации, и вектор движения списка 1 второго кандидата на слияние в этой комбинации. В некоторых примерах (таких как пример, показанный на фиг. 4), где список кандидатов на слияние может включать в себя однонаправленных кандидатов на слияние и двунаправленных кандидатов на слияние, процесс 350 не включает в себя этапы 354, 356 и 358. В этом случае видеокодер может сформировать искусственных двунаправленных кандидатов на слияние в списках кандидатов на слияние для блоков PU в B-слайсах.
После формирования искусственного двунаправленного кандидата на слияние видеокодер может внести этого искусственного двунаправленного кандидата на слияние в список кандидатов на слияние для текущего PU (362). Затем видеокодер может определить, следует ли сформировать еще одного искусственного кандидата на слияние (352) и т.д.
На фиг. 8 представлена блок-схема, иллюстрирующая примерную операцию 400 для определения информации о движении для PU с использованием режима AMVP. Видеокодер, такой как видеокодер 20 или видеодекодер 30, может выполнить операцию 400 для определения информации о движении для PU, используя режим AMVP.
После запуска операции 400 видеокодер может определить, основано ли интер-предсказание для текущего PU на списке 0 (402). Если интер-предсказание для текущего PU основано на списке 0 («Да» на этапе 402), то видеокодер может сформировать список кандидатов-предикторов вектора MV списка 0 для текущего PU (404). Список кандидатов-предикторов вектора MV списка 0 может включать в себя двух кандидатов-предикторов вектора MV списка 0. Каждый из кандидатов-предикторов вектора MV списка 0 может задавать вектор движения списка 0.
После формирования списка кандидатов-предикторов вектора MV списка 0 видеокодер может определить выбранного кандидата предиктора вектора MV списка 0 в списке кандидатов-предикторов вектора MV списка 0 (406). Видеокодер может определить выбранного кандидата-предиктора вектора MV списка 0 на основе флага предиктора MV списка 0 («mvp_l0_flag»). Затем видеокодер может определить вектор движения списка 0 для текущего PU на основе MVD списка 0 для текущего PU и вектор движения списка 0, заданный выбранным кандидатом-предиктором вектора MV списка 0 (408).
Кроме того, после определения того, что интер-предсказание для текущего PU не основано на списке 0 («Нет» на этапе 402), или после определения вектора движения списка 0 для текущего PU (408), видеокодер может определить, основано ли интер-предсказание для текущего PU на списке 1, или, используется ли для данного PU двунаправленное интер-предсказание (410). Если интер-предсказание для текущего PU не основано на списке 1, и для текущего PU не используется двунаправленное интер-предсказание («Нет» на этапе 410), то видеокодер заканчивает определение информации о движении для текущего PU с использованием режима AMVP. В ответ на определение того, что интер-предсказание для текущего PU основано на списке 1, или того, что для текущего PU используется двунаправленное интер-предсказание («Да» на этапе 410), видеокодер может сформировать список кандидатов-предикторов вектора MV списка 1 для текущего PU (412). Список кандидатов-предикторов вектора MV списка 1 может включать в себя двух кандидатов-предикторов вектора MV списка 1. Каждый из кандидатов-предикторов вектора MV списка 0 может задавать вектор движения списка 1.
После формирования списка кандидатов-предикторов вектора MV списка 1 видеокодер может определить выбранного кандидата-предиктора вектора MV списка 1 в списке кандидатов-предикторов вектора MV списка 1 (414). Видеокодер может определить выбранного кандидата-предиктора вектора MV списка 1 на основе флага предиктора вектора MV списка 1 («mvp_l1_flag»). Затем видеокодер может определить вектор движения списка 1 для текущего PU на основе MVD списка 1 для текущего PU и вектора движения списка 1, заданного выбранным кандидатом-предиктором вектора MV списка 1 (416).
В некоторых примерах видеокодер может не добавлять двунаправленных кандидатов-предикторов MV в списки кандидатов-предикторов вектора MV списка 0 и списка 1. Другими словами, если кандидат-предиктор вектора MV задает вектор движения списка 0 и вектор движения списка 1, то видеокодер может включать в себя кандидата-предиктора вектора MV из списков кандидатов-предикторов вектора MV списка 0 и списка 1. Видеокодер может добавить только однонаправленных кандидатов-предикторов вектора MV в списки кандидатов-предикторов вектора MV списка 0 и списка 1. Видеокодер может выполнить это, проверяя, является ли каждый из возможных и имеющихся кандидатов-предикторов вектора MV однонаправленным, и включать в списки кандидатов-предикторов вектора MV только однонаправленных кандидатов-предикторов вектора MV.
В одном или более примерах описанные функции могут быть реализованы аппаратными средствами, программными средствами, программно-аппаратными средствами или любой их комбинацией. При реализации программными средствами эти функции могут храниться или передаваться в виде одной или более команд или кода на компьютерно-читаемом носителе и выполняться обрабатывающим аппаратным блоком. Компьютерно-читаемые носители могут включать в себя компьютерно-читаемый запоминающий носитель, который соответствует материальному носителю, такому как запоминающий носитель, или среде передачи, включая любой носитель, который способствует пересылке компьютерной программы из одного места в другое, например, согласно протоколу связи. В этом аспекте компьютерно-читаемые носители в общем случае могут соответствовать (1) материальным компьютерно-читаемым запоминающим носителям, которые обеспечивают долговременное хранение, или (2) среде связи, такой как сигнал или несущая волна. Средой для запоминания данных может служить любая доступная среда, доступ к которой может осуществляться одним или более компьютерами или одним или более процессорами для извлечения команд, кода и/или структур данных для реализации раскрытых в этом изобретении методик. Компьютерный программный продукт может включать в себя компьютерно-читаемый носитель.
В качестве примера, но не как ограничение, компьютерно-читаемый запоминающий носитель может содержать ОЗУ (RAM), ПЗУ (ROM), электрически стираемое программируемое ПЗУ (EEPROM), ПЗУ на компакт-диске (CD-ROM) или другое оптическое запоминающее устройство, магнитное запоминающее устройство или другие магнитные запоминающее устройства, флэш-память, или любой другой носитель, который можно использовать для запоминания требуемого программного кода в виде команд или структур данных, и к которым может иметь доступ компьютер. Также компьютерно-читаемым носителем будет правильно назвать любое соединение. Например, если команды передаются с веб-сайта, сервера или другого удаленного источника с использованием коаксиального кабеля, оптоволоконного кабеля, витой пары, цифровой абонентской линии (DSL) или беспроводных технологий, таких как инфракрасная связь, радиосвязь и микроволновая связь, то тогда коаксиальный кабель, оптоволоконный кабель, витая пара, линии DSL или такие беспроводные технологии, как инфракрасная связь, радиосвязь и микроволновая связь, входят в определение носителя. Однако следует понимать, что термины: «компьютерно-читаемый запоминающий носитель» и «носитель данных» не включают в себя соединения, несущие волны, сигналы или другие временные носители, а относятся к материальной запоминающему носителю долговременного хранения. Используемый здесь термин «диск» относится к компакт-диску (CD), лазерному диску, оптическому диску, цифровому универсальному диску (DVD), флоппи-диску и диску Blu-ray, причем магнитные диски обычно воспроизводят данные магнитным путем, в то время как оптические диски воспроизводят данные оптическим путем с использованием лазеров. В понятие компьютерно-читаемых носителей также следует отнести комбинации из вышеперечисленного.
Команды могут выполняться одним или более процессорами, такими как один или более микропроцессоров общего назначения, цифровых процессоров сигналов (DSP), прикладных специализированных интегральных схем (ASIC), вентильных матриц, программируемых пользователем (FPGA), или других эквивалентных интегральных или дискретных логических схем. Соответственно, используемый здесь термин «процессор» может относиться к любой из вышеописанных структур или любой иной структуре, подходящей для реализации вышеописанных методик. Вдобавок, в некоторых аспектах описанные здесь функциональные возможности могут быть обеспечены в рамках специализированных аппаратных и/или программных модулей, сконфигурированных для кодирования и декодирования, или включенных в состав комбинированного кодека. Также раскрытые здесь методики можно полностью реализовать в одной или более схемах или логических элементах.
Раскрытые здесь методики могут быть реализованы в самых разных устройствах или установках, включая беспроводную телефонную трубку, интегральную схему (IC) или набор интегральных схем (например, микропроцессорный набор). Различные компоненты, модули или блоки описаны здесь таким образом, чтобы подчеркнуть функциональные аспекты устройств, сконфигурированных для выполнения раскрытых здесь методик, причем для этого не требуется их реализация с помощью различных аппаратных компонент, модулей или блоков. Скорее наоборот, как обсуждалось выше, различные компоненты, модули блоки могут быть скомбинированы в аппаратном блоке-кодеке или обеспечены в виде набора взаимодействующих аппаратных блоков, включая один или более процессоров, описанных выше, в сочетании с подходящим программным и/или программно-аппаратным обеспечением.
Выше были описаны различные примеры. Эти и другие примеры не выходят за рамки объема нижеследующей формулы изобретения.