КОДИРОВАНИЕ ВИДЕО ПРИ ПОМОЩИ БОЛЬШИХ МАКРОБЛОКОВ
VIDEO CODING WITH LARGE MACROBLOCKS

Настоящая заявка испрашивает приоритет по предварительным заявкам на патент США № 61/102787, поданной 3 октября 2008 г., № 61/144357, поданной 13 января 2009 г., и № 61/166631, поданной 3 апреля 2009 г., каждая из которых во всей полноте заключена в настоящий документ посредством ссылки.
Настоящая заявка связана с заявками на патент США, поданными на ту же самую дату, как и настоящая заявка, причем все они имеют одинаковое название «КОДИРОВАНИЕ ВИДЕО ПРИ ПОМОЩИ БОЛЬШИХ МАКРОБЛОКОВ», с временно присвоенными номерами в досье поверенного 090033U1, 090033U3, 090033U4, все из которых переуступлены их правопреемнику и настоящим явно заключены в настоящий документ посредством ссылки во всей их полноте для всех целей.
ОБЛАСТЬ ТЕХНИКИ, К КОТОРОЙ ОТНОСИТСЯ ИЗОБРЕТЕНИЕ
Настоящее изобретение относится к кодированию цифрового видео, а более конкретно - к блочному кодированию видео.
ПРЕДШЕСТВУЮЩИЙ УРОВЕНЬ ТЕХНИКИ
Возможности цифрового видео могут быть заключены во многих приборах, в том числе в цифровых телевизорах, системах цифрового прямого вещания, системах беспроводного вещания, персональных цифровых ассистентах (PDA), ноутбуках или настольных компьютерах, цифровых видеокамерах, цифровых записывающих приборах, приборах для видеоигр, игровых видеоконсолях, сотовых или спутниковых радиотелефонах и т.п. Приборы цифрового видео реализуют методики сжатия видео, например, описанные в стандартах MPEG-2, MPEG-4 ITU-T H.263 или ITU-T H.264/MPEG-4, Часть 10, Усовершенствованное кодирование видео (AVC), и в расширениях данных стандартов для того, чтобы более эффективно передавать и принимать цифровую видеоинформацию.
Методики сжатия видео выполняют пространственное предсказание и/или временное предсказание для уменьшения или устранения избыточности, присущей видеопоследовательностям. Для блочного кодирования видео видеокадр или вырезка могут быть разделены на макроблоки. Каждый макроблок может быть дополнительно разделен. При внутрикадровом кодировании (I) кодирование макроблоков кадра или вырезки осуществляется посредством использования пространственного предсказания по отношению к соседним макроблокам. При межкадровом кодировании (P или B) кадра или вырезки макроблоки могут использовать пространственное предсказание по отношению к соседним макроблокам того же самого кадра или вырезки либо временное предсказание по отношению к другим опорным кадрам.
СУЩНОСТЬ ИЗОБРЕТЕНИЯ
В целом, в данном раскрытии описываются методики кодирования цифровых видеоданных с использованием больших макроблоков. Большие макроблоки больше, чем макроблоки, обычно предписываемые существующими стандартами кодирования видео. Большинством стандартов кодирования видео предписывается использование макроблока в форме массива пикселов 16x16. В соответствии с данным изобретением кодер и декодер могут использовать большие макроблоки, размер которых больше чем 16x16 пикселов. Например, большой макроблок может быть массивом пикселов 32x32, 64x64 или еще больше.
Кодирование видео основано на пространственной и/или временной избыточности, обеспечивающей возможность сжатия видеоданных. Кадры видео, сформированные при более высоком пространственном разрешении и/или с более высокой частотой кадров, могут обеспечить более высокую избыточность. Использование больших макроблоков, как описано в данном раскрытии, может позволить использовать для методики кодирования видео более высокую степень избыточности, обусловленную увеличением пространственной разрешающей способности и/или частоты кадров. В соответствии с данным изобретением методики кодирования видео могут использовать разнообразные возможности для обеспечения кодирования больших макроблоков.
Как описано в данном раскрытии, методика кодирования больших макроблоков может разделять большой макроблок на разделы и использовать различные размеры разделов и различные режимы кодирования, например различные пространственные (I) или временные (P или B) режимы для выбранных разделов. В качестве другого примера методика кодирования может использовать значения иерархической модели кодирования блока (СВР) для того, чтобы эффективно идентифицировать кодированные макроблоки и разделы, имеющие ненулевые коэффициенты, внутри большого макроблока. В качестве дополнительного примера методика кодирования может сравнивать показатели искажения и скорости, получаемые при кодировании с использованием больших и мелких макроблоков, для выбора размера макроблока, дающего более благоприятные результаты.
В одном примере в раскрытии представлен способ, содержащий кодирование видеоблока, имеющего размер более чем 16x16 пикселов, при помощи видеокодера, формирование синтаксической информации типа блока, которая указывает размер блока, и формирование значения модели кодируемого блока для закодированного блока, причем значение модели кодируемого блока указывает, включает ли в себя закодированный блок, по меньшей мере, один ненулевой коэффициент.
В другом примере в раскрытии представлено устройство, содержащее видеокодер, сконфигурированный для кодирования видеоблока, имеющего размер более чем 16x16 пикселов, формирование синтаксической информации типа блока, указывающей размер блока, и формирование значения модели кодируемого блока для закодированного блока, причем значение модели кодируемого блока указывает, включает ли в себя закодированный блок, по меньшей мере, один ненулевой коэффициент.
В другом примере в раскрытии представлен компьютерно-читаемый носитель с закодированными инструкциями для побуждения устройства кодирования видео кодировать видеоблок, имеющий размер более чем 16x16 пикселов, формировать синтаксическую информацию типа блока, указывающую размер блока, и формировать значение модели кодируемого блока для закодированного блока, причем значение модели кодируемого блока указывает, включает ли в себя закодированный блок, по меньшей мере, один ненулевой коэффициент.
В дополнительном примере в раскрытии представлен способ, содержащий прием при помощи видеодекодера закодированного видеоблока, имеющего размер более чем 16x16 пикселов, прием синтаксической информации типа блока, указывающей размер блока, прием значения модели кодируемого блока для закодированного блока, причем значение модели кодируемого блока указывает, включает ли в себя закодированный блок, по меньшей мере, один ненулевой коэффициент, и декодирование закодированного блока на основе синтаксической информации типа блока и значения модели кодируемого блока для закодированного блока.
В дополнительном примере в раскрытии представлено устройство, содержащее видеодекодер, сконфигурированный для приема закодированного видеоблока, имеющего размер более чем 16x16 пикселов, приема синтаксической информации типа блока, указывающей размер блока, приема значения модели кодируемого блока для закодированного блока, причем значение модели кодируемого блока указывает, включает ли в себя закодированный блок, по меньшей мере, один ненулевой коэффициент, и декодирования закодированного блока на основе синтаксической информации типа блока и значения модели кодируемого блока для закодированного блока.
В другом примере в раскрытии представлен компьютерно-читаемый носитель, содержащий инструкции для побуждения видеодекодера принимать закодированный видеоблок, имеющий размер более чем 16x16 пикселов, принимать синтаксическую информацию типа блока, указывающую размер блока, и принимать значения модели кодируемого блока для закодированного блока, причем значение модели кодируемого блока указывает, включает ли в себя закодированный блок, по меньшей мере, один ненулевой коэффициент, и декодировать закодированный блок на основе синтаксической информации типа блока и значения модели кодируемого блока для закодированного блока.
В другом примере в раскрытии представлен способ, содержащий прием, при помощи видеокодера, видеоблока, имеющего размер более 16x16 пикселов, разделение блока на разделы, кодирование одного из разделов с использованием первого режима кодирования, кодирование другого из разделов с использованием второго режима кодирования, отличного от первого режима кодирования, и формирование синтаксической информации типа блока, которая указывает размер блока и идентифицирует разделы и режимы кодирования, использованные для кодирования разделов.
В дополнительном примере в раскрытии представлено устройство, содержащее видеокодер, сконфигурированный для приема видеоблока, имеющего размер более 16x16 пикселов, разделения блока на разделы, кодирования одного из разделов с использованием первого режима кодирования, кодирования другого из разделов с использованием второго режима кодирования, отличного от первого режима кодирования, формирования синтаксической информации типа блока, которая указывает размер блока и идентифицирует разделы и режимы кодирования, использованные для кодирования разделов.
В другом примере в раскрытии представлен компьютерно-читаемый носитель с закодированными инструкциями для побуждения видеокодера принимать видеоблок, имеющий размер более 16x16 пикселов, разделять блок на разделы, кодировать один из разделов с использованием первого режима кодирования, кодировать другой раздел с использованием второго режима кодирования, отличного от первого режима кодирования, и формировать синтаксическую информацию типа блока, которая указывает размер блока и идентифицирует разделы и режимы кодирования, использованные для кодирования разделов.
В дополнительном примере в раскрытии представлен способ, содержащий прием, при помощи видеодекодера, видеоблока, имеющего размер более 16x16 пикселов, причем блок разделен на разделы, один из разделов закодирован с использованием первого режима кодирования, а другой раздел закодирован с использованием второго режима кодирования, отличного от первого режима кодирования, прием синтаксической информации типа блока, которая указывает размер блока и идентифицирует разделы и режимы кодирования, использованные для кодирования разделов, и декодирование видеоблока на основании синтаксической информации типа блока.
В другом примере в раскрытии представлено устройство, содержащее видеодекодер, сконфигурированный для приема видеоблока, имеющего размер более 16x16 пикселов, причем блок разделен на разделы, один из разделов закодирован с использованием первого режима кодирования, а другой раздел закодирован с использованием второго режима кодирования, отличного от первого режима кодирования, приема синтаксической информации типа блока, которая указывает размер блока и идентифицирует разделы и режимы кодирования, использованные для кодирования разделов, и декодирования видеоблока на основании синтаксической информации типа блока.
В дополнительном примере в раскрытии представлен компьютерно-читаемый носитель с закодированными инструкциями для побуждения видеодекодера принимать видеоблок, имеющий размер более 16x16 пикселов, причем блок разделен на разделы, один из разделов закодирован с использованием первого режима кодирования, а другой раздел закодирован с использованием второго режима кодирования, отличного от первого режима кодирования, принимать синтаксическую информацию типа блока, которая указывает размер блока и идентифицирует разделы и режимы кодирования, использованные для кодирования разделов, и декодировать видеоблок на основании синтаксической информации типа блока.
В другом примере в раскрытии представлен способ, содержащий прием цифровым видеокодером единицы кодирования видео, определение первого показателя искажения и скорости для кодирования единицы кодирования видео, использующего первые видеоблоки с размерами 16x16 пикселов, определение второго показателя искажения и скорости для кодирования единицы кодирования видео, использующего вторые видеоблоки с размерами более 16x16 пикселов, кодирование единицы кодирования видео с использованием первых видеоблоков, когда первый показатель искажения и скорости меньше, чем второй показатель искажения и скорости, и кодирование единицы кодирования видео с использованием вторых видеоблоков, когда второй показатель искажения и скорости меньше, чем первый показатель искажения и скорости.
В дополнительном примере в раскрытии представлено устройство, содержащее видеокодер, сконфигурированный для приема единицы кодирования видео, определения первого показателя искажения и скорости для кодирования единицы кодирования видео, использующего первые видеоблоки с размерами 16x16 пикселов, определения второго показателя искажения и скорости для кодирования единицы кодирования видео, использующего вторые видеоблоки с размерами более 16x16 пикселов, кодирование единицы кодирования видео с использованием первых видеоблоков, когда первый показатель искажения и скорости меньше, чем второй показатель искажения и скорости, и кодирование единицы кодирования видео с использованием вторых видеоблоков, когда второй показатель искажения и скорости меньше, чем первый показатель искажения и скорости.
В другом примере в раскрытии представлен компьютерно-читаемый носитель с закодированными инструкциями для побуждения видеокодера принимать единицу кодирования видео, определять первый показатель искажения и скорости для кодирования единицы кодирования видео, использующего первые видеоблоки с размерами 16x16 пикселов, определять второй показатель искажения и скорости для кодирования единицы кодирования видео, использующего вторые видеоблоки с размерами более 16x16 пикселов, кодировать единицу кодирования видео с использованием первых видеоблоков, когда первый показатель искажения и скорости меньше, чем второй показатель искажения и скорости, и кодировать единицу кодирования видео с использованием вторых видеоблоков, когда второй показатель искажения и скорости меньше, чем первый показатель искажения и скорости.
В другом примере в раскрытии представлен способ, содержащий кодирование, с помощью видеокодера, кодируемой единицы, содержащей множество видеоблоков, причем из множества видеоблоков, по меньшей мере, один имеет размер больше чем 16x16 пикселов, и формирование синтаксической информации для кодируемой единицы, которая включает в себя максимальное значение размера, причем максимальное значение размера указывает на размер самого большого из множества видеоблоков в кодируемой единице.
В другом примере в раскрытии представлено устройство, содержащее видеокодер, сконфигурированный для того, чтобы кодировать кодируемую единицу, содержащую множество видеоблоков, причем из множества видеоблоков, по меньшей мере, один имеет размер больше чем 16x16 пикселов, и формировать синтаксическую информацию для кодируемой единицы, которая включает в себя максимальное значение размера, причем максимальное значение размера указывает на размер самого большого из множества видеоблоков в кодируемой единице.
В другом примере в раскрытии представлено устройство, содержащее средство для кодирования кодируемой единицы, содержащей множество видеоблоков, причем из множества видеоблоков, по меньшей мере, один имеет размер больше чем 16x16 пикселов, и средство для формирования синтаксической информации для кодируемой единицы, которая включает в себя максимальное значение размера, причем максимальное значение размера указывает на размер самого большого из множества видеоблоков в кодируемой единице.
В другом примере в раскрытии представлен компьютерно-читаемый носитель с закодированными инструкциями для побуждения программируемого процессора кодировать кодируемую единицу, содержащую множество видеоблоков, причем из множества видеоблоков, по меньшей мере, один имеет размер больше чем 16x16 пикселов, и формировать синтаксическую информацию для кодируемой единицы, которая включает в себя максимальное значение размера, причем максимальное значение размера указывает на размер самого большого из множества видеоблоков в кодируемой единице.
В другом примере в раскрытии представлен способ, содержащий прием, с помощью видеодекодера, кодируемой единицы, содержащей множество видеоблоков, причем из множества видеоблоков, по меньшей мере, один имеет размер больше чем 16x16 пикселов, прием синтаксической информации для кодируемой единицы, которая включает в себя максимальное значение размера, причем максимальное значение размера указывает на размер самого большого видеоблока из множества видеоблоков в кодируемой единице, выбор декодера синтаксиса типа блока согласно максимальному значению размера и декодирование каждого из множества видеоблоков в кодируемой единице, с использованием декодера синтаксиса типа блока.
В другом примере в раскрытии представлено устройство, содержащее видеодекодер, сконфигурированный для приема кодируемой единицы, содержащей множество видеоблоков, причем из множества видеоблоков, по меньшей мере, один имеет размер больше чем 16x16 пикселов, приема синтаксической информации для кодируемой единицы, которая включает в себя максимальное значение размера, причем максимальное значение размера указывает на размер самого большого видеоблока из множества видеоблоков в кодируемой единице, выбора декодера синтаксиса типа блока согласно максимальному значению размера и декодирования каждого из множества видеоблоков в кодируемой единице, с использованием декодера синтаксиса типа блока.
В другом примере в раскрытии представлено средство для приема кодируемой единицы, содержащей множество видеоблоков, причем из множества видеоблоков, по меньшей мере, один имеет размер больше чем 16x16 пикселов, средство для приема синтаксической информации для кодируемой единицы, которая включает в себя максимальное значение размера, причем максимальное значение размера указывает на размер самого большого видеоблока из множества видеоблоков в кодируемой единице, средство для выбора декодера синтаксиса типа блока согласно максимальному значению размера и средство для декодирования каждого видеоблока из множества видеоблоков в кодируемой единице, с использованием декодера синтаксиса типа блока.
В другом примере в раскрытии представлен компьютерно-читаемый носитель с закодированными инструкциями для побуждения программируемого процессора принимать кодируемую единицу, содержащую множество видеоблоков, причем из множества видеоблоков, по меньшей мере, один имеет размер больше чем 16x16 пикселов, принимать синтаксическую информацию для кодируемой единицы, которая включает в себя максимальное значение размера, причем максимальное значение размера указывает на размер самого большого видеоблока из множества видеоблоков в кодируемой единице, выбирать декодер синтаксиса типа блока согласно максимальному значению размера и декодировать каждый видеоблок из множества видеоблоков в кодируемой единице, с использованием декодера синтаксиса типа блока.
Подробности одного или более примеров изложены ниже в сопроводительных фигурах и в описании. Прочие признаки, цели и достоинства будут ясны из описания и чертежей, и из формулы изобретения.
КРАТКОЕ ОПИСАНИЕ ЧЕРТЕЖЕЙ
На фиг.1 представлена функциональная схема, иллюстрирующая пример системы кодирования и декодирования видео, которая осуществляет кодирование и декодирование цифровых видеоданных с использованием больших макроблоков.
На фиг.2 представлена функциональная схема, иллюстрирующая пример видеокодера, реализующего способ кодирования больших макроблоков.
На фиг.3 представлена функциональная схема, иллюстрирующая пример видеодекодера, реализующего способ декодирования больших макроблоков.
На фиг.4A представлена концептуальная схема, иллюстрирующая разделение большого макроблока по различным уровням.
На фиг.4B представлена концептуальная схема, иллюстрирующая назначение различных режимов кодирования различным разделам большого макроблока.
На фиг.5 представлена концептуальная схема, иллюстрирующая иерархический обзор различных уровней большого макроблока.
На фиг.6 представлена функциональная схема, иллюстрирующая пример способа установки значения модели кодируемого блока (СВР) большого макроблока 64x64 пиксела.
На фиг.7 представлена функциональная схема, иллюстрирующая пример способа установки значения модели кодируемого блока (СВР) раздела 32x32 пиксела большого макроблока 64x64 пиксела.
На фиг.8 представлена функциональная схема, иллюстрирующая пример способа установки значения модели кодируемого блока (СВР) раздела 16x16 пикселов раздела 32x32 пиксела большого макроблока 64x64 пиксела.
На фиг.9 представлена функциональная схема, иллюстрирующая пример способа для определения двухбитового значения luma16x8_CBP.
На фиг.10 представлена функциональная схема, иллюстрирующая пример компоновки большого макроблока 64x64 пиксела.
На фиг.11 представлена функциональная схема, иллюстрирующая пример способа вычисления оптимального разделения и способов кодирования для большого видеоблока NxN пикселов.
На фиг.12 представлена функциональная схема, иллюстрирующая пример различных вариантов разделения макроблока 64x64 пиксела и выбранных способов кодирования для каждого раздела.
На фиг.13 представлена функциональная схема, иллюстрирующая пример способа определения оптимального размера макроблока для кодирования кадра видеопоследовательности.
На фиг.14 представлена функциональная схема, иллюстрирующая пример прибора беспроводной связи, включающего в себя видеокодер/декодер (CODEC, кодек), который осуществляет кодирование цифровых видеоданных с использованием больших макроблоков.
На фиг.15 представлена функциональная схема, иллюстрирующая пример представления массива иерархического представления СВР для большого макроблока.
На фиг.16 представлена функциональная схема, иллюстрирующая пример древовидной структуры, соответствующей иерархическому представлению СВР на фиг.15.
На фиг.17 представлена функциональная схема, иллюстрирующая пример способа использования синтаксической информации кодируемой единицы для того, чтобы указать и выбрать кодеры и декодеры блочного синтаксиса, для видеоблоков кодируемой единицы.
ПОДРОБНОЕ ОПИСАНИЕ
В данном раскрытии описываются методики кодирования и декодирования цифровых видеоданных с использованием больших макроблоков. Большие макроблоки больше, чем макроблоки, обычно предписываемые существующими стандартами кодирования видео. Большинством стандартов кодирования видео предписывается использование макроблока в форме массива пикселов размером 16x16 пикселов. В соответствии с данным изобретением кодер и/или декодер могут использовать большие макроблоки, размер которых больше чем 16x16 пикселов. В качестве примеров большой макроблок может быть массивом пикселов 32x32 пиксела, 64x64 пиксела или, возможно, еще больше.
Вообще термин «макроблок», как он используется в данном раскрытии, может относиться к структуре данных для массива пикселов, имеющего определенный размер, выраженный как NxN пикселов, где N - положительное целочисленное значение. Макроблок может определять четыре блока яркости, каждый из которых содержит массив из (N/2)x(N/2) пикселов, два блока цветности, каждый из которых содержит массив из NxN пикселов, и заголовок, содержащий информацию типа макроблока и информацию о модели кодируемого блока (СВР), как более подробно обсуждается ниже.
Традиционными стандартами кодирования видео обычно предписывается, чтобы определенный размер макроблока составлял массив 16x16 пикселов. В соответствии с различными методиками, описанными в данном раскрытии, макроблоки могут содержать массивы NxN пикселов, где N может быть больше 16. Аналогичным образом традиционными стандартами кодирования видео обычно предписывается, чтобы при межкадровом кодировании макроблоку назначался единственный вектор движения. В соответствии с различными методиками, описанными в данном раскрытии, множество векторов движения может быть назначено для межкадрово закодированных разделов макроблока NxN, как это более подробно описано ниже. Ссылки на «большие макроблоки» или аналогичные фразы в общем случае относятся к макроблокам с массивами пикселов больше чем 16x16.
В некоторых случаях большие макроблоки могут обеспечивать улучшения в эффективности кодирования и/или сокращения издержек на передачу данных при сохранении или возможном улучшении качества изображения. Например, использование больших макроблоков может позволить видеокодеру и/или декодеру использовать преимущества увеличенной избыточности, предоставляемой видеоданными, сформированными при увеличенной пространственной разрешающей способности (например, 1280x720 или 1920x1080 пикселов на кадр) и/или при увеличенной частоте кадров (например, 30 или 60 кадров в секунду).
В качестве иллюстрации цифровая видеопоследовательность с пространственным разрешением 1280x720 пикселов на кадр и частотой 60 кадров в секунду, в пространственном отношении в 36 раз больше и во временном отношении в 4 раза быстрее, чем цифровая видеопоследовательность с пространственным разрешением 176x144 пиксела на кадр и частотой 15 кадров в секунду. По мере увеличения размера макроблока видеокодер и/или декодер может лучше использовать увеличенную пространственную и/или временную избыточность для сжатия видеоданных.
Кроме того, при использовании больших макроблоков может быть закодировано меньшее число блоков для данного кадра или вырезки, что уменьшает объем передаваемой служебной информации. Иными словами, большие макроблоки могут позволить сократить общее количество макроблоков, кодируемых по каждому кадру или вырезке. Если бы пространственное разрешение кадра было бы увеличено, например, в четыре раза, то вчетверо возросло бы количество макроблоков 16x16, необходимых для обеспечения требуемого количества пикселов в кадре. В данном примере при макроблоках 64x64 количество макроблоков, необходимых для обеспечения возросшей пространственной разрешающей способности, уменьшается. По мере сокращения количества макроблоков на кадр или на вырезку может быть, например, сокращен общий объем кодирования информации, такой как синтаксическая информация, данные о векторе движения, и т.п.
В данном раскрытии размер макроблока, в общем, соотносится с количеством пикселов, вмещающихся в макроблоке, например 64x64, 32x32, 16x16 и т.п. Следовательно, большой макроблок (например, 64x64 или 32x32) может считаться большим в том смысле, что он вмещает в себя большее число пикселов, чем макроблок 16x16. Однако пространственная область, определенная вертикальными и горизонтальными измерениями большого макроблока, то есть как часть области, определенная вертикальными и горизонтальными измерениями видеокадра, может быть либо может не быть больше, чем область обычного макроблока 16x16. В некоторых примерах зона большого макроблока может быть равной или подобной обычному макроблоку 16x16. Однако большой макроблок имеет более высокую пространственную разрешающую способность, характеризуемую большим числом пикселов и большей пространственной плотностью пикселов, в пределах макроблока.
Размер макроблока может быть сконфигурирован, по меньшей мере, частично, на основании количества пикселов в кадре, то есть пространственной разрешающей способности кадра. Если в кадре имеется большее количество пикселов, то может быть сформирован большой макроблок, имеющий большее количество пикселов. В качестве иллюстрации видеокодер может быть сконфигурирован, чтобы использовать макроблок 32x32 пиксела для кадра 1280x720 пикселов, отображаемого с частотой 30 кадров в секунду. В качестве другой иллюстрации видеокодер может быть сконфигурирован, чтобы использовать макроблок 64x64 пиксела для кадра 1280x720 пикселов, отображаемого с частотой 60 кадров в секунду.
Для каждого макроблока, закодированного кодером, могут потребоваться данные, описывающие одну или более характеристик макроблока. Эти данные могут указывать, например, данные типа макроблока для того, чтобы представить размер макроблока, способ разделения макроблока и режим кодирования (пространственный или временной), применяемый к макроблоку и/или к его разделам. Кроме того, данные могут включать в себя данные разности векторов движения (mvd), представляющие, наряду с другими элементами синтаксиса, информацию о векторе движения для макроблока и/или его разделов. Данные также могут включать в себя значение модели кодируемого блока (СВР), наряду с другими элементами синтаксиса для того, чтобы представить информацию остатка после предсказания. Данные типа макроблока могут быть представлены в единственном заголовке макроблока для большого макроблока.
Как упомянуто выше, при использовании большого макроблока кодер может сократить количество макроблоков в кадре или вырезке, и, таким образом, уменьшается объем служебной информации, передаваемой по сети, для каждого кадра или вырезки. Также при использовании большого макроблока может уменьшиться общее количество макроблоков для конкретного кадра или вырезки, что может снизить количество артефактов «блочности» видео, отображаемого пользователю.
Методики кодирования видео, описанные в данном раскрытии, могут использовать одну или более функций для обеспечения возможности кодирования больших макроблоков. Например, большой макроблок может быть разделен на меньшие разделы. К выбранным разделам в пределах большого макроблока могут быть применены различные режимы кодирования, например различные пространственные (I) или временные (P или B) режимы кодирования. Кроме того, иерархические значения модели кодируемого блока (СВР) могут быть использованы для эффективной идентификации закодированных макроблоков и разделов, имеющих ненулевые коэффициенты преобразования, представляющие данные остатка. Кроме того, показатели искажения и скорости могут быть сравнены для кодирования с использованием макроблоков больших и мелких размеров для того, чтобы выбрать оптимальный размер макроблока, дающий благоприятные результаты. Более того, кодируемая единица (например, кадр, вырезка, последовательность или группа изображений), содержащий макроблоки различных размеров, может включать в себя элемент синтаксиса, который указывает размер самого большого макроблока в кодируемой единице. Как более подробно описано ниже, большие макроблоки имеют иной синтаксис уровня блоков, чем стандартные блоки размером 16x16 пикселов. Соответственно, посредством указания размера самого большого макроблока в кодируемой единице кодер может сообщить декодеру, какой синтаксис уровня блоков следует применить к макроблокам кодируемой единицы.
Использование различных режимов кодирования для различных разделов в большом макроблоке может считаться смешанным режимом кодирования больших макроблоков. Вместо того чтобы осуществлять кодирование большого макроблока единообразно, так, чтобы для всех разделов использовался одинаковый внутрикадровый либо межкадровый режим кодирования, большой макроблок может быть закодирован таким образом, что в некоторых разделах использовались бы различные режимы кодирования, такие как различные режимы внутрикадрового кодирования (например, I_16x16, I_8x8, I_4x4), либо внутрикадровые и межкадровые режимы кодирования.
Если большой макроблок разделен на два или более разделов, то, например, по меньшей мере, один раздел может быть закодирован с помощью первого режима, а другой раздел может быть закодирован с помощью второго режима, отличающегося от первого режима. В некоторых случаях первый режим может быть первым I-режимом, а второй режим может быть вторым I-режимом, отличающимся от первого I-режима. В других случаях первый режим может быть I-режимом, а второй режим может быть режимом P или В. Следовательно, в некоторых примерах большой макроблок может включать в себя один или более временным образом (P или B) закодированных разделов и один или более пространственным образом (I) закодированных разделов, или один или более пространственным образом закодированных разделов с помощью различных I-режимов.
Одно или более значений иерархической модели кодируемого блока (СВР) могут быть использованы для исчерпывающего описания, имеется ли в каких-либо разделах большого макроблока, по меньшей мере, один ненулевой коэффициент преобразования, и, если имеется, то в каких именно разделах. Коэффициенты преобразования используются для кодирования данных остатка для большого макроблока. Бит СВР уровня большого макроблока указывает, включает ли в себя какой-либо раздел в большом макроблоке ненулевой, квантованный коэффициент. Если нет, то нет необходимости рассматривать, имеется ли у какого-либо раздела коэффициент, отличный от нуля, поскольку известно, что у всего большого макроблока нет никаких ненулевых коэффициентов. В этом случае может быть использован макроблок предсказания для того, чтобы декодировать макроблок без данных остатка.
Альтернативно, если значение СВР уровня макроблока указывает, что, по меньшей мере, у одного раздела в большом макроблоке имеется ненулевой коэффициент, тогда значения СВР уровня раздела могут быть проанализированы для того, чтобы идентифицировать, какой из разделов включает в себя, по меньшей мере, один ненулевой коэффициент. Затем декодер может извлечь соответствующие данные остатка для разделов, имеющих, по меньшей мере, один ненулевой коэффициент, и декодировать разделы, используя данные остатка и данные блока предсказания. В некоторых случаях один или более разделов могут иметь ненулевые коэффициенты и поэтому включают в себя значения СВР уровня раздела с соответствующим указанием. Как большой макроблок, так и, по меньшей мере, некоторые разделы могут быть больше чем 16x16 пикселов.
Для того чтобы выбрать размеры макроблока, дающие благоприятные показатели искажения и скорости, показатели искажения и скорости могут быть проанализированы как для больших макроблоков (например, 32x32 или 64x64), так и для мелких макроблоков (например, 16x16). Например, кодер может сравнить показатели искажения и скорости между макроблоками 16x16, макроблоками 32x32 и макроблоками 64x64 для кодируемой единицы, такой как кадр или вырезка. Затем кодер может выбрать размер макроблока, который приводит к наилучшему показателю искажения и скорости, и осуществить кодирование кодируемой единицы, используя выбранный размер макроблока, то есть размер макроблока, соответствующий наилучшему показателю искажения и скорости.
Выбор может быть основан на кодировании кадра или вырезки за три или более прохода, например при первом проходе используются макроблоки 16x16 пикселов, при втором проходе используются макроблоки 32x32 пиксела и при третьем проходе используются макроблоки 64x64 пиксела, и сравнении показателей искажения и скорости для каждого прохода. Таким образом, кодер может оптимизировать показатель искажения и скорости посредством изменения размера макроблока и выбора размера макроблока, дающего наилучшую или оптимальную величину искажения и скорости для данной кодируемой единицы, такой как вырезка или кадр. Кодер может далее передать синтаксическую информацию для кодируемой единицы, например, как часть заголовка кадра или заголовка вырезки, которая идентифицирует размер макроблоков, используемых в кодируемой единице. Как описано более подробно ниже, синтаксическая информация для кодируемой единицы может содержать указатель максимального размера, который указывает максимальный размер макроблоков, используемых в кодируемой единице. Таким образом, кодер может информировать декодер о том, какой синтаксис следует ожидать для макроблоков кодируемой единицы. Когда максимальный размер макроблоков составляет 16x16 пикселов, декодер может использовать стандартный синтаксис H.264 и проводить синтаксический анализ макроблоков согласно синтаксису H.264. Однако когда максимальный размер макроблоков превышает 16x16, например составляет 64x64 пиксела, декодер может ожидать измененных и/или дополнительных элементов синтаксиса, предназначенных для обработки больших макроблоков, как описано в данном раскрытии, и проводить синтаксический анализ макроблоков согласно такому измененному или дополненному синтаксису.
Для некоторых видеокадров или вырезок использование больших макроблоков может дать существенную экономию скорости передачи битов и тем самым привести к наилучшим результатам по показателю искажения и скорости, обеспечивая относительно малое искажение. Однако для других видеокадров или вырезок меньшие макроблоки могут обеспечить меньшую величину искажения, перевешивая фактор скорости передачи битов при анализе затрат искажения и скорости. Следовательно, в различных случаях размеры 64x64, 32x32 либо 16x16 могут соответствовать различным видеокадрам или вырезкам, например, в зависимости от видеоконтента и его сложности.
На фиг.1 представлена функциональная схема, иллюстрирующая пример системы 10 кодирования и декодирования видео, которая может использовать методики кодирования/декодирования цифровых видеоданных с использованием больших макроблоков, то есть макроблоков, вмещающих в себя больше пикселов, чем макроблок 16x16. Как показано на фиг.1, система 10 включает в себя прибор-источник 12, который передает закодированные видео на прибор-адресат 14 по каналу 16 связи. Прибор-источник 12 и прибор-адресат 14 могут содержать любой из широкого диапазона приборов. В некоторых случаях прибор-источник 12 и прибор-адресат 14 могут содержать приборы беспроводной связи, такие как беспроводные телефонные аппараты, так называемые сотовые или спутниковые радиотелефоны, или любые беспроводные приборы, которые могут пересылать видеоинформацию по каналу 16 связи, в этом случае канал 16 связи является беспроводным. Однако методики, представленные в данном раскрытии, касающиеся использования большого макроблока, содержащего большее количество пикселов, чем макроблоки, предписанные традиционными стандартами кодирования видео, не обязательно ограничены беспроводными приложениями или окружениями. Например, эти методики могут применяться к эфирному телевещанию, передачам кабельного телевидения, передачам спутникового телевидения, передачам видео по сети Интернет, кодированию цифрового видео на носители информации или к другим сценариям. Соответственно, канал связи 16 может содержать любую комбинацию беспроводных или проводных средств, подходящих для передачи закодированных видеоданных.
В примере на фиг.1 прибор-источник 12 может включать в себя источник 18 видео, видеокодер 20, модулятор/демодулятор (модем) 22 и передатчик 24. Прибор-адресат 14 может включать в себя приемник 26, модем 28, видеодекодер 30 и прибор 32 отображения. В соответствии с данным изобретением видеокодер 20 прибора-источника 12 может быть сконфигурирован, чтобы в процессе кодирования видео использовать одну или более методик применения больших макроблоков, размер которых превышает размер макроблоков, предписанный традиционными стандартами кодирования видео. Аналогичным образом видеодекодер 30 прибора-адресата 14 может быть сконфигурирован, чтобы в процессе декодирования видео использовать одну или более методик применения больших макроблоков, размер которых превышает размер макроблоков, предписанный традиционными стандартами кодирования видео.
Проиллюстрированная система 10 на фиг.1 представляет собой просто один пример. Методики использования большого макроблока, описанные в данном раскрытии, могут быть выполнены любым цифровым прибором кодирования и/или декодирования видео. Прибор-источник 12 и прибор-адресат 14 являются просто примерами таких приборов кодирования, при этом прибор-источник 12 формирует закодированные видеоданные для передачи на прибор-адресат 14. В некоторых примерах приборы 12, 14 могут функционировать, по существу, симметричным образом так, что каждый из приборов 12, 14 включает в себя компоненты, осуществляющие кодирование и декодирование видео. Следовательно, система 10 может обеспечивать одностороннюю или двустороннюю передачу видео между видеоприборами 12, 14, например, для потокового видео, воспроизведения видео, видеовещания или видеотелефонии.
Источник 18 видео из прибора-источника 12 может включать в себя прибор захвата видео, такой как видеокамера, видеоархив, вмещающий в себя ранее захваченное видео, и/или подачу видео от поставщика видеоконтента. В качестве дополнительной альтернативы, источник 18 видео в качестве исходного видео может формировать данные, основанные на компьютерной графике, или комбинацию видео в реальном времени, архивное видео и видео, формируемое компьютером. В некоторых случаях, если источник 18 видео является видеокамерой, то прибор-источник 12 и прибор-адресат 14 могут образовать так называемые камерофоны или видеотелефоны. Однако, как упомянуто выше, методики, описанные в данном раскрытии, могут быть применимы к кодированию видео вообще и могут быть применимы к беспроводным либо к проводным приложениям. В каждом случае захваченное, предварительно захваченное или сформированное компьютером видео может быть закодировано видеокодером 20. Закодированная видеоинформация затем может быть модулирована модемом 22, согласно стандарту связи, и передана прибору-адресату 14 посредством передатчика 24. Модем 22 может включать в себя различные смесители, фильтры, усилители или иные компоненты, предназначенные для модуляции сигналов. Передатчик 24 может включать в себя схемы, предназначенные для передачи данных, включая усилители, фильтры, и одну или более антенн.
Приемник 26 прибора-адресата 14 принимает информацию по каналу 16, и модем 28 демодулирует информацию. Процесс кодирования видео снова может реализовывать одну или более методик, описанных здесь, с использованием большого макроблока, например, более 16x16, для межкадрового (то есть временного) и/или внутрикадрового (то есть пространственного) кодирования видеоданных. Процесс декодирования видео, выполняемый видеодекодером 30, также может использовать такие методики в процессе декодирования. Информация, передаваемая по каналу 16, может включать в себя синтаксическую информацию, определяемую видеокодером 20, которая также используется видеодекодером 30 и включает в себя элементы синтаксиса, описывающие характеристики и/или обработку больших макроблоков, как это более подробно обсуждается ниже. Синтаксическая информация может быть включена в любой или во все заголовки кадров, заголовки вырезок, заголовки последовательностей (например, в отношении H.264, посредством использовании профиля и уровня, которому соответствует закодированная видеопоследовательность) или заголовки макроблока. Прибор 32 отображения осуществляет отображение декодированных видеоданных пользователю и может содержать любой из многообразия приборов отображения, таких как электронно-лучевая трубка (CRT), жидкокристаллический дисплей (LCD), плазменный дисплей, дисплей на органических светодиодах (OLED) или иной тип прибора отображения.
В примере, представленном на фиг.1, канал 16 связи может содержать любую беспроводную или проводную среду передачи, такую как радиочастотный (RF) спектр, или одну или более физических линий передачи, или любую комбинацию беспроводных и проводных каналов связи. Канал 16 связи может являться частью сети, основанной на пересылке информационных пакетов, такой как локальная сеть, широкомасштабная сеть или глобальная сеть, такая как Интернет. В общем случае канал 16 связи представляет собой любой подходящий канал связи или набор различных средств связи для того, чтобы передать видеоданные от прибора-источника 12 прибору-адресату 14, включая любую подходящую комбинацию проводных или беспроводных средств связи. Канал 16 связи может включать в себя маршрутизаторы, коммутаторы, базовые станции или любое иное оборудование, которое может быть подходящим для того, чтобы обеспечить связь прибора-источника 12 с прибором-адресатом 14.
Видеокодер 20 и видеодекодер 30 могут функционировать согласно стандарту сжатия видео, такому как стандарт ITU-T H.264, альтернативно описанный как стандарт MPEG-4, Часть 10, Усовершенствованное кодирование видео (AVC). Однако представленные в данном раскрытии методики не ограничиваются никаким конкретным стандартом кодирования. Другие примеры включают в себя стандарты MPEG-2 и ITU-T H.263. Хотя это не показано на фиг.1, в некоторых аспектах и видеокодер 20, и видеодекодер 30 могут быть интегрированы с кодером и декодером аудио и могут включать в себя соответствующие модули мультиплексора-демультиплексора или иное аппаратное и программное обеспечение для того, чтобы осуществлять кодирование как аудио, так и видео в общем потоке данных или в отдельных потоках данных. Если применимо, то модули мультиплексора-демультиплексора могут соответствовать протоколу мультиплексирования ITU H.223 или иным протоколам, таким как протокол пользовательских дейтаграмм (UDP).
Стандарт ITU-T H.264/MPEG-4 (AVC) был сформулирован экспертной группой по кодированию видео (VCEG) при Международном союзе электросвязи (ITU-T) совместно с экспертной группой по вопросам движущегося изображения (MPEG) при Международной организации по стандартизации/Международной электротехнической комиссии (ISO/IEC) как продукт коллективного партнерства, известного как объединенная видеогруппа (JVT). В некоторых аспектах методики, описанные в данном раскрытии, могут быть применены к приборам, соответствующим стандарту H.264. Стандарт H.264 описан в рекомендации Международного союза электросвязи (ITU-T) по усовершенствованному кодированию видео для универсальных аудиовизуальных услуг исследовательской группой ITU-T и датирован мартом 2005 года и именуется здесь как стандарт H.264, или спецификация H.264, или стандарт, или спецификация H.264/AVC. Объединенная видеогруппа (JVT) продолжает работу над расширениями стандарта H.264/MPEG-4 AVC.
Как видеокодер 20, так и видеодекодер 30 могут быть реализованы в виде любой из многообразия подходящих схем кодеров, например на одном или более микропроцессорах, цифровых сигнальных процессорах (DSP), специализированных интегральных схемах (ASIC), программируемых вентильных матрицах (FPGA), дискретной логике, программном обеспечении, аппаратном обеспечении, встроенном программном обеспечении или любых их комбинациях. Каждый видеокодер 20 и видеодекодер 30 может быть включен в один или более кодеров или декодеров, каждый из которых может быть интегрирован как часть объединенного кодера/декодера (кодека) в соответствующей видеокамере, компьютере, мобильном приборе, абонентском приборе, приборе вещания, телевизионной приставке, сервере и т.п.
Видеопоследовательность обычно включает в себя ряд видеокадров. Видеокодер 20 осуществляет обработку видеоблоков в пределах индивидуальных видеокадров для того, чтобы закодировать видеоданные. Видеоблок может соответствовать макроблоку или разделу макроблока. Видеоблок может, кроме того, соответствовать разделу раздела. Видеоблоки могут иметь фиксированные или изменяющиеся размеры и могут отличаться по размерам, согласно указанному стандарту кодирования или в соответствии с методиками данного раскрытия. Каждый видеокадр может включать в себя множество вырезок. Каждая вырезка может включать в себя множество макроблоков, которые могут быть скомпонованы в разделы, также называемые субблоками.
В качестве примера стандарт ITU-T H.264 обеспечивает внутрикадровое предсказание в блоках различных размеров, таких как 16 на 16, 8 на 8, или 4 на 4 для компонентов яркости (luma) и 8x8 для компонентов цветности (chroma), так же как внешнее предсказание при различных размерах блока, таких как 16x16, 16x8, 8x16, 8x8, 8x4, 4x8 и 4x4 для компонентов яркости и соответствующих масштабированных размеров для компонентов цветности. В данном раскрытии термины «x» и «на» могут использоваться взаимозаменяемо для выражения соотношения вертикальных и горизонтальных размерностей блока в отношении пикселов, например 16x16 пикселов или 16 на 16 пикселов. Вообще у блока 16x16 есть 16 пикселов по вертикали и 16 пикселов по горизонтали. Аналогичным образом у блока NxN имеются N пикселов по вертикали и N пикселов по горизонтали, где N является положительным целочисленным значением, которое может быть больше 16. Пикселы в блоке могут быть скомпонованы по строкам и столбцам.
Размеры блоков менее чем 16 на 16 могут считаться разделами макроблока 16 на 16. Аналогичным образом для блока NxN размеры блока меньше, чем NxN, могут считаться разделами блока NxN. Методики данного раскрытия описывают внутрикадровое и межкадровое кодирование для макроблоков, которые больше традиционного макроблока 16x16 пикселов, например макроблоков 32x32 пиксела, макроблоков 64x64 пиксела или для больших макроблоков. Видеоблоки могут содержать блоки данных пикселов в области пикселов или блоки коэффициентов преобразования в области преобразования, например, последующее применение преобразования, такого как дискретное косинусное преобразование (DCT), целочисленное преобразование, вейвлет-преобразование или концептуально аналогичное преобразование данных остатка видеоблоков, представляющих собой разность между пикселами между закодированными видеоблоками и предсказываемыми видеоблоками. В некоторых случаях видеоблок может содержать блоки квантованных коэффициентов преобразования в области преобразования.
Более мелкие видеоблоки могут обеспечить лучшую разрешающую способность и могут использоваться для определения местоположений видеокадров, включающих в себя высокие уровни детализации. Вообще макроблоки и различные разделы, иногда именуемые субблоками, могут считаться видеоблоками. Дополнительно, вырезка может представлять собой множество видеоблоков, таких как макроблоки и/или субблоки. Каждая вырезка может быть независимо декодируемой единицей видеокадра. Альтернативно, сами кадры могут быть декодируемыми единицами, или иные части кадра могут быть определены как декодируемые единицы. Термин «кодируемая единица» или «единица кодирования» может относиться к любой независимо декодируемой единице видеокадра, такой как весь кадр, вырезка кадра, группа изображений (GOP), также называемая последовательностью, или к другой независимо декодируемой единице, определенной согласно применимым методикам кодирования.
После кодирования с внутрикадровым предсказанием или межкадровым предсказанием для того, чтобы сформировать предсказанные данные и данные остатка, и последующих любых преобразований (таких как 4x4 или 8x8 целочисленных преобразований, используемых в стандарте H.264/AVC или дискретного косинусного преобразования DCT) для формирования коэффициентов преобразования может быть выполнено квантование коэффициентов преобразования. В общем случае квантование относится к процессу, при котором коэффициенты преобразования квантуются для того, чтобы по возможности уменьшить объем данных, используемых для представления коэффициентов. Процесс квантования может уменьшить битовую глубину, связанную с некоторыми либо со всеми коэффициентами. Например, при квантовании n-битное значение может быть округлено в меньшую сторону к m-битному значению, где n больше m.
Вслед за квантованием может быть выполнено энтропийное кодирование квантованных данных, например, согласно контекстно-зависимому адаптивному кодированию с переменной длиной кодового слова (CAVLC), контекстно-зависимому адаптивному двоичному арифметическому кодированию (CABAC) или иной методологии энтропийного кодирования. Модуль процессора, сконфигурированный для энтропийного кодирования, или другой модуль процессора может выполнять иные функции по обработке, такие как кодирование квантованных коэффициентов нулевой последовательности и/или формирование синтаксической информации, такой как значения СВР, тип макроблока, режим кодирования, максимальный размер макроблока для кодируемой единицы (такой как кадр, вырезка, макроблок или последовательность), или аналогичные им.
Согласно различным методикам, представленным в данном раскрытии, видеокодер 20 может использовать макроблок, который больше макроблока, предписанного традиционными стандартами кодирования цифровых видеоданных. В одном примере видеокодер 20 может осуществлять кодирование видеоблока, имеющего размер более чем 16x16 пикселов, формирование синтаксической информации типа блока, которая указывает размер блока и формирование значения модели кодируемого блока (СВР) для закодированного блока, причем значение модели кодируемого блока указывает, включает ли в себя закодированный блок, по меньшей мере, один ненулевой коэффициент. Синтаксическая информация типа блока макроблока может быть представлена в заголовке макроблока для большого макроблока. Синтаксическая информация типа блока макроблока может указывать адрес или позицию макроблока в кадре или вырезке либо номер макроблока, который идентифицирует позицию макроблока, тип режима кодирования, применяемого для макроблока, порог квантования для макроблока, любую информацию о векторе движения для макроблока и значение СВР для макроблока.
В другом примере видеокодер 20 может осуществлять прием видеоблока, имеющего размер более чем 16x16 пикселов, разделение блока на разделы, кодирование одного из разделов с использованием первого режима кодирования, кодирование другого раздела с использованием второго режима кодирования, отличающегося от первого режима кодирования, и формирование синтаксической информации типа блока, в которой указывается размер блока и идентифицируются разделы и режимы кодирования, использованные для кодирования разделов.
В дополнительном примере видеокодер 20 может осуществлять прием единицы кодирования видео, такой как видеокадр или вырезка, осуществлять определение первого показателя искажения и скорости для единицы кодирования видео, использующей первые видеоблоки размерами 16x16 пикселов, осуществлять определение второго показателя искажения и скорости для единицы кодирования видео, использующей вторые видеоблоки размерами более чем 16x16 пикселов, осуществлять кодирование единицы кодирования видео с использованием первых видеоблоков, когда первый показатель искажения и скорости меньше, чем второй показатель искажения и скорости, и осуществлять кодирование единицы кодирования видео с использованием вторых видеоблоков, когда второй показатель искажения и скорости меньше, чем первый показатель искажения и скорости.
В одном примере видеодекодер 30 может осуществлять прием закодированного видеоблока, имеющего размер более чем 16x16 пикселов, осуществлять прием синтаксической информации типа блока, указывающей размер закодированного блока, осуществлять прием значения модели кодируемого блока для закодированного блока, причем значение модели кодируемого блока указывает, включает ли в себя закодированный блок, по меньшей мере, один ненулевой коэффициент, и осуществлять декодирование закодированного блока на основе синтаксической информации типа блока и значения модели кодируемого блока для закодированного блока.
В другом примере видеодекодер 30 может осуществлять прием видеоблока, имеющего размер более чем 16x16 пикселов, причем блок разделен на разделы, один из разделов закодирован внутрикадровым образом и другой из разделов закодирован внутрикадровым образом, осуществлять прием синтаксической информации типа блока, в которой указывается размер блока и идентифицируются разделы и режимы кодирования, использованные для кодирования разделов, и осуществлять декодирование видеоблока на основании синтаксической информации типа блока.
На фиг.2 представлена функциональная схема, иллюстрирующая пример видеокодера 50, который может реализовывать методику использования больших макроблоков, в соответствии с данным изобретением. Видеокодер 50 может соответствовать видеокодеру 20 прибора-источника 12 или видеокодеру другого прибора. Видеокодер 50 может осуществлять внутрикадровое и межкадровое кодирование блоков в пределах видеокадров, включающих в себя большие макроблоки, или разделы, или подразделы больших макроблоков. Внутрикадровое кодирование основано на пространственном предсказании для уменьшения или устранения пространственной избыточности видео в пределах данного видеокадра. Межкадровое кодирование основано на временном предсказании для уменьшения или устранения временной избыточности видео в пределах смежных кадров видеопоследовательности.
Внутрикадровый режим (I-режим) может относиться к любому из нескольких режимов пространственного сжатия, а межкадровые режимы, такие как предсказание (P-режим) или двунаправленный (В-режим), могут относиться к любому из нескольких режимов сжатия, основанных на временном подходе. Методики данного раскрытия применимы как при межкадровом, так и при внутрикадровом кодировании. В некоторых случаях методики, представленные в данном раскрытии, также могут быть применены к кодированию цифровых изображений, не являющихся видео. Таким образом, кодер для цифровых фотоснимков может использовать методики, представленные в данном раскрытии, для того чтобы осуществить внутрикадровое кодирование цифрового фотоснимка, используя большие макроблоки, способом, аналогичным внутрикадровому кодированию макроблоков в видеокадрах видеопоследовательности.
Как показано на фиг.2, видеокодер 50 принимает текущий видеоблок в пределах видеокадра, который должен быть закодирован. В примере, представленном на фиг.2, видеокодер 50 включает в себя модуль 35 компенсации движения, модуль 36 оценки движения, модуль 37 предсказания, модуль 39 выбора режима, устройство 34 хранения опорного кадра, сумматор 48, модуль 38 преобразователя, модуль 40 квантования и модуль 46 энтропийного кодирования. Для воссоздания видеоблока видеокодер 50 также включает в себя модуль 42 обратного квантования, модуль 44 обратного преобразования и сумматор 51. Деблокинг-фильтр (на фиг.2 не показан) также может быть включен для фильтрации границ блоков для того, чтобы устранить артефакты «блочности» изображения в воссозданном видео. Если это желательно, то деблокинг-фильтр обычно осуществляет фильтрацию выходного сигнала сумматора 51.
В процессе кодирования видеокодер 50 принимает видеокадр или вырезку, которая должна быть закодирована. Кадр или вырезка могут быть разделены на множество видеоблоков, включая большие макроблоки. Модуль 36 оценки движения и модуль 35 компенсации движения выполняют кодирование с межкадровым предсказанием принятого видеоблока по отношению к одному или более блокам в одном или более опорных кадрах для того, чтобы обеспечить временное сжатие. Модуль 37 предсказания выполняет кодирование с внутрикадровым предсказанием принятого видеоблока относительно одного или более соседних блоков в том же самом кадре или вырезке, где находится блок, который должен быть закодирован, для того, чтобы обеспечить пространственное сжатие.
Модуль 39 выбора режима может осуществлять выбор одного из режимов кодирования, внутрикадрового либо межкадрового, например, на основании величины погрешности, и передачу блока, закодированного внутрикадровым либо межкадровым образом, на сумматор 48 для того, чтобы сформировать данные остатка блока, и на сумматор 51 для того, чтобы воссоздать закодированный блок для использования его в качестве опорного кадра. В соответствии с методиками данного раскрытия видеоблок, который должен быть закодирован, может содержать макроблок, который больше, чем предписано обычными стандартами кодирования, то есть больше, чем макроблок 16x16 пикселов. Например, большой видеоблок может содержать макроблок 64x64 пиксела или макроблок 32x32 пиксела.
Модуль 36 оценки движения и модуль 35 компенсации движения могут быть выполнены конструктивно как единое целое, однако в пояснительных целях они показаны по отдельности. Оценка движения представляет собой процесс формирования векторов, характеризующих движение, которые оценивают движение для видеоблоков. Например, вектор движения может указывать смещение предсказанного блока в пределах предсказанного опорного кадра (или иной кодируемой единицы) относительно текущего блока, кодирование которого осуществляется в пределах текущего кадра (или иной кодируемой единицы). Предсказанный блок представляет собой блок, который находится наиболее близко к соответствующему блоку, который должен быть закодирован, исходя из разности между пикселами, которая может быть определена суммой абсолютных величин разностей (SAD), суммой квадратов разностей (SSD) или иными показателями разности.
Вектор движения также может указывать величину смещения раздела большого макроблока. В одном примере, касающемся макроблока 64x64 пиксела, содержащего раздел 32x64 и два раздела 32x32, первый вектор движения может указывать смещение раздела 32x64, второй вектор движения может указывать смещение первого раздела из разделов 32x32, а третий вектор движения может указывать смещение второго раздела из разделов 32x32, и все это относительно соответствующих разделов в опорном кадре. Такими разделами также можно считать видеоблоки, поскольку в данном раскрытии используются те же термины. Компенсация движения может включать в себя выборку или формирование блока предсказания, основанного на векторе движения, определяемом согласно оценке движения. Еще раз отметим, что модуль 36 оценки движения и модуль 35 компенсации движения могут быть функционально интегрированы.
Модуль 36 оценки движения вычисляет вектор движения для видеоблока кадра, закодированного межкадровым образом, посредством сравнения видеоблока с видеоблоками опорного кадра в хранилище 34 опорных кадров. Модуль 35 компенсации движения может также осуществлять интерполяцию дробных пикселов опорного кадра, например I-кадра или P-кадра. В стандарте ITU H.264 опорные кадры именуются «списками». Поэтому данные, хранящиеся в хранилище 34 опорных кадров, также могут считаться списками. Модуль 36 оценки движения осуществляет сравнение блоков одного или более опорных кадров (или списков) из хранилища 34 опорных кадров с блоком, который должен быть закодирован, из текущего кадра, например P-кадра или B-кадра. Когда опорные кадры в хранилище 34 опорных кадров включают в себя значения дробных пикселов, то вектор движения, вычисленный модулем 36 оценки движения, может относиться к промежуточному пиксельному положению опорного кадра. Модуль 36 оценки движения передает вычисленный вектор движения в модуль 46 энтропийного кодирования и в модуль 35 компенсации движения. Блок опорного кадра, идентифицированный вектором движения, может считаться блоком предсказания. Модуль 35 компенсации движения вычисляет значения погрешностей для блока предсказания опорного кадра.
Модуль 35 компенсации движения может вычислять предсказываемые данные, основанные на блоке предсказания. Видеокодер 50 формирует видеоблок остатка посредством вычитания предсказанных данных, получаемых из модуля 35 компенсации движения, из исходного кодируемого видеоблока. Сумматор 48 представляет собой компонент или компоненты, которые выполняют эту операцию вычитания. Модуль 38 преобразования осуществляет преобразование, такое как дискретное косинусное преобразование (DCT) или концептуально аналогичное преобразование, по отношению к блоку остатка, формируя при этом видеоблок, содержащий значения коэффициентов преобразования блока остатка. Модуль 38 преобразования может выполнять иные преобразования, определенные стандартом H.264, которые концептуально аналогичны преобразованию DCT. Также могут быть использованы вейвлет-преобразования, целочисленные преобразования, субполосные преобразования или иные виды преобразований. В любом случае модуль 38 преобразования осуществляет преобразование блока остатка, формируя блок коэффициентов преобразования остатка. В процессе преобразования информация остатка может быть преобразована из области значений пикселов в область преобразования, такую как частотная область.
Y
Модуль 40 квантования осуществляет квантование коэффициентов преобразования остатка для дальнейшего уменьшения скорости передачи битов. Процесс квантования может уменьшить битовую глубину, связанную с некоторыми либо со всеми коэффициентами. В одном примере модуль 40 квантования может установить разную степень квантования для каждого макроблока 64x64 пиксела, согласно параметру квантования яркости, именуемому в данном раскрытии как QP. Модуль 40 квантования может далее изменить параметр квантования яркости, используемый при квантовании макроблока 64x64, на основании модификатора параметра квантования, именуемого здесь как «MB64_delta_QP», и ранее закодированного макроблока 64x64 пиксела.
Y
Каждый большой макроблок 64x64 пиксела может содержать индивидуальное значение MB64_delta_QP в диапазоне между -26 и +25 включительно. Вообще видеокодер 50 может установить значение MB64_delta_QP для конкретного блока, на основании значения желаемой скорости передачи битов для передачи закодированной версии блока. Значение MB64_delta_QP первого макроблока 64x64 пиксела может быть равным значению QP кадра или вырезки, включающей в себя первый макроблок 64x64 пиксела, например, в заголовке кадра/вырезки. Значение QP для текущего макроблока 64x64 пиксела может быть вычислено по формуле:
Y,PREV
Y
Y,PREV
где QPотносится к значению QP предыдущего макроблока 64x64 пиксела в порядке декодирования текущей вырезки/кадра и где «%» относится к оператору по модулю таким образом, что N%52 дает результат между 0 и 51 включительно, что соответствует значению остатка от деления N на 52. Для первого макроблока в кадре/вырезке значение QPможет быть установлено равным значению QP кадра/вырезки, переданному в заголовке кадра/вырезки.
В одном примере модуль 40 квантования предполагает, что значение MB64_delta_QP равно нулю, когда значение MB64_delta_QP не определено для конкретного макроблока 64x64 пиксела, включая макроблоки типа «пропущен», такие как макроблоки типов PSkip и BSkip. В некоторых примерах дополнительные значения deltaQP (в общем случае называемые значениями изменения параметров квантования) могут быть определены для более точного контроля за шагом квантования разделов в пределах макроблока 64x64 пиксела, такого как значения MB32_delta_QP для каждого раздела 32x32 пиксела в макроблоке 64x64 пиксела. В некоторых примерах каждому разделу макроблока 64x64 можно назначить индивидуальный параметр квантования. Использование индивидуализированного параметра квантования для каждого раздела может привести к более эффективному квантованию макроблока, например улучшить настройку квантования для неоднородной области вместо использования единственного значения QP для макроблока 64x64. Каждое значение изменения параметра квантования может быть включено в качестве синтаксической информации соответствующего закодированного блока, и декодер может декодировать закодированный блок посредством деквантования, то есть обратного квантования закодированного блока, согласно величине изменения параметра квантования.
Y
После квантования модуль 46 энтропийного кодирования осуществляет кодирование квантованных коэффициентов преобразования. Например, модуль 46 энтропийного кодирования может выполнять контекстно-зависимое адаптивное кодирование с переменной длиной кодового слова (CAVLC), контекстно-зависимое адаптивное двоичное арифметическое кодирование (CABAC) или энтропийное кодирование по другой методике. После энтропийного кодирования модулем 46 энтропийного кодирования закодированное видео может быть передано на другой прибор либо заархивировано для более поздней передачи или восстановления. Закодированный битовый поток может включать в себя блоки энтропийно закодированных коэффициентов преобразования остатка, векторы движения для таких блоков, значения MB64_delta_QP для каждого макроблока 64x64 пиксела и другие элементы синтаксиса, включая, например, значения идентификатора типа макроблока, закодированные заголовки единиц, указывающие максимальный размер макроблоков в кодируемой единице, значения QP, значения модели кодируемого блока (СВР), значения, идентифицирующие способ разделения макроблока или субблока, и значения размера флага преобразования, как это подробно обсуждено ниже. В случае контекстно-зависимого адаптивного двоичного арифметического кодирования этот контекст может основываться на соседних макроблоках.
В некоторых случаях модуль 46 энтропийного кодирования или другой модуль видеокодера 50 может быть сконфигурирован, чтобы выполнять другие функции кодирования, в дополнение к энтропийному кодированию. Например, модуль 46 энтропийного кодирования может быть сконфигурирован, чтобы определять значения СВР для больших макроблоков и разделов. Модуль 46 энтропийного кодирования может использовать иерархическую схему СВР для определения значения СВР для большого макроблока, которое указывает, включает ли в себя какой-нибудь раздел в макроблоке ненулевые значения коэффициентов преобразования, и если да, то используются другие значения СВР для того, чтобы указать, имеют ли конкретные разделы в пределах большого макроблока ненулевые значения коэффициентов преобразования. Кроме того, в некоторых случаях модуль 46 энтропийного кодирования может выполнять кодирование длин серий коэффициентов в большом макроблоке или подразделе. В частности, модуль 46 энтропийного кодирования может применить зигзагообразное сканирование или иное сканирование для того, чтобы просканировать коэффициенты преобразования в макроблоке или разделе, и закодировать серии нулей для дальнейшего сжатия. Модуль 46 энтропийного кодирования также может сформировать информацию заголовка с соответствующими элементами синтаксиса для передачи в закодированном битовом видеопотоке.
Модуль 42 обратного квантования и модуль 44 обратного преобразования применяют обратное квантование и обратное преобразование соответственно для того, чтобы воссоздать блок остатка в области пикселов, например, для последующего использования в качестве опорного блока. Модуль 35 компенсации движения может осуществлять вычисление опорного блока посредством добавления блока остатка к предсказанному блоку одного из кадров из хранилища 34 опорных кадров. Модуль 35 компенсации движения также может применить один или более интерполяционных фильтров к воссозданному блоку остатка для вычисления дробных значений пикселов. Сумматор 51 осуществляет суммирование воссозданного блока остатка с предсказанным блоком, в котором движение скомпенсировано модулем 35 компенсации движения для того, чтобы получить воссозданный видеоблок для хранения его в хранилище 34 опорных видеокадров. Воссозданный видеоблок может использоваться модулем 36 оценки движения и модулем 35 компенсации движения в качестве опорного блока для межкадрового кодирования блока в последующем видеокадре. Большой макроблок может содержать макроблок 64x64 пиксела, макроблок 32x32 пиксела или иной макроблок, размер которого превышает размер, предписанный традиционными стандартами кодирования видео.
На фиг.3 представлена функциональная схема, иллюстрирующая пример видеодекодера 60, который осуществляет декодирование видеопоследовательности, закодированной описанным в данном раскрытии образом. Закодированная видеопоследовательность может включать в себя закодированные макроблоки, размеры которых превышают размеры, предписанные традиционными стандартами кодирования видео. Например, закодированные макроблоки могут быть макроблоками 32x32 пиксела или 64x64 пиксела. В примере, представленном на фиг.3, видеодекодер 60 включает в себя модуль 52 энтропийного декодирования, модуль 54 компенсации движения, модуль 55 внутрикадрового предсказания, модуль 56 обратного квантования, модуль 58 обратного преобразования, хранилище 62 опорных кадров и сумматор 64. В некоторых примерах видеодекодер 60 может осуществлять проход декодирования, в общем, обратный по отношению к выполнению прохода кодирования, описанного для видеокодера 50 (фиг.2). Модуль 54 компенсации движения может формировать предсказанные данные, основанные на векторах движения, полученных от модуля 52 энтропийного декодирования.
Y
Модуль 52 энтропийного декодирования осуществляет энтропийное декодирование принятого битового потока для того, чтобы сформировать квантованные коэффициенты и элементы синтаксиса (например, векторы движения, значения СВР, значения QP, значения флагов преобразований размеров, значения MB64_delta_QP). Модуль 52 энтропийного декодирования может осуществлять синтаксический анализ битового потока для того, чтобы идентифицировать синтаксическую информацию в закодированных единицах, таких как кадры, вырезки и/или заголовки макроблоков. Синтаксическая информация для кодируемой единицы, содержащей множество макроблоков, может указывать максимальный размер макроблоков, например 16x16 пикселов, 32x32 пиксела, 64x64 пиксела, или иных макроблоков больших размеров в кодируемой единице. Синтаксическая информация для блока направляется из модуля 52 энтропийного кодирования либо в модуль 54 компенсации движения, либо в модуль 55 внутрикадрового предсказания, в зависимости, например, от режима кодирования блока. Декодер может использовать указатель максимального размера в синтаксисе кодируемой единицы для того, чтобы выбрать декодер синтаксиса для кодируемой единицы. Используя декодер синтаксиса, определенный для максимального размера, декодер затем может должным образом интерпретировать большие макроблоки, включенные в кодируемую единицу, и осуществить их обработку.
Y
Модуль 54 компенсации движения может использовать векторы движения, полученные в битовом потоке для того, чтобы идентифицировать блок предсказания в опорных кадрах, находящихся в хранилище 62 опорных кадров. Модуль 55 внутрикадрового предсказания может использовать режимы внутрикадрового предсказания, полученные в битовом потоке для того, чтобы сформировать блок предсказания из пространственно смежных блоков. Модуль 56 обратного квантования осуществляет обратное квантование, то есть деквантование квантованного блока коэффициентов, представленного в битовом потоке и декодированного модулем 52 энтропийного декодирования. Процесс обратного квантования может включать в себя обычный процесс, например, как это определено стандартом декодирования H.264. Процесс обратного квантования может также включать в себя использование параметра квантования QP, вычисленного кодером 50 для каждого макроблока 64x64 для того, чтобы определить степень дискретизации, а также степень обратного квантования, которое должно быть применено.
Модуль 58 обратного преобразования осуществляет обратное преобразование, например, обратное DCT, обратное целочисленное преобразование или концептуально аналогичный процесс обратного преобразования по отношению к коэффициентам преобразования для того, чтобы сформировать блоки остатка в области пикселов. Модуль 54 компенсации движения осуществляет формирование блоков, в которых движение скомпенсировано, при этом возможно выполнение интерполяции при помощи интерполяционных фильтров. Идентификаторы для интерполяционных фильтров, которые должны быть использованы для оценки движения с точностью до долей пиксела, могут быть включены в элементы синтаксиса. Модуль 54 компенсации движения может использовать интерполяционные фильтры аналогично тому, как они используются видеокодером 50 при кодировании видеоблока для вычисления интерполированных значений для дробных пикселов опорного блока. Модуль 54 компенсации движения может определять интерполяционные фильтры, используемые видеокодером 50, согласно принятой синтаксической информации, и использовать интерполяционные фильтры для формирования предсказываемых блоков.
Модуль 54 компенсации движения использует часть синтаксической информации для того, чтобы определить размеры макроблоков, используемых для кодирования кадра(ов) кодируемой видеопоследовательности, информацию о разделении, описывающую, каким образом осуществляется разделение каждого макроблока кадра кодируемой видеопоследовательности, режимы, указывающие, каким образом закодирован каждый раздел, один или более опорных кадров (или списков) для каждого макроблока или раздела, закодированного межкадровым образом, и иную информацию для того, чтобы декодировать закодированную видеопоследовательность.
Сумматор 64 осуществляет суммирование блоков остатка с соответствующими предсказываемыми блоками, сформированными модулем 54 компенсации движения или модулем внутрикадрового предсказания для того, чтобы сформировать декодированные блоки. Если желательно, то может быть также применен деблокинг-фильтр для фильтрации декодированных блоков для того, чтобы устранить артефакты «блочности». Декодированные видеоблоки затем сохраняются в хранилище 62 опорных кадров, которое обеспечивает формирование опорных блоков для осуществления последующей компенсации движения, а также формирует декодированное видео для представления его в приборе отображения (таком как прибор 32 на фиг.1). Каждый из декодированных видеоблоков может содержать макроблок 64x64 пиксела, макроблок 32x32 пиксела или иной макроблок, размеры которого превышают стандартные. Некоторые макроблоки могут включать в себя разделы с множеством разделов, имеющих различные размеры разделов.
На фиг.4A представлена концептуальная схема, иллюстрирующая пример разделения большого макроблока на разделы различных уровней. Блоки разделов каждого уровня включают в себя количество пикселов, соответствующее конкретному уровню. Для каждого уровня также показаны четыре модели разделения, где первая модель разделения включает в себя целый блок, вторая модель разделения включает в себя два горизонтальных раздела равного размера, третья модель разделения включает в себя два вертикальных раздела равного размера и четвертая модель разделения включает в себя четыре раздела одинакового размера. Одна из моделей разделения может быть выбрана для каждого раздела на каждом уровне раздела.
В примере, представленном на фиг.4А, уровень 0 соответствует разделу выборок яркости и соответствующих выборок цветности, макроблока 64x64 пиксела. Уровень 1 соответствует выборкам яркости и соответствующим выборкам цветности блока 32x32 пиксела. Уровень 2 соответствует выборкам яркости и соответствующим выборкам цветности блока 16x16 пикселов, и уровень 3 соответствует выборкам яркости и соответствующим выборкам цветности блока 8x8 пикселов.
В других примерах могут быть представлены дополнительные уровни для того, чтобы использовать большие или меньшие количества пикселов. Например, уровень 0 мог бы начинаться с макроблока 128x128 пикселов, макроблока 256x256 пикселов или с иного, большего по размеру макроблока. В некоторых примерах определенный таким образом самый высокий уровень может соответствовать наиболее мелкому уровню разделения, единственному пикселу, то есть блоку 1x1. Следовательно, от самых низких до самых высоких уровней разделение может продолжаться шаг за шагом таким образом, что производится разделение макроблока на разделы, далее осуществляется разделение полученных разделов, затем образующиеся в результате этого подразделы подвергаются дальнейшему разделению и так далее. В некоторых случаях разделы ниже уровня 0, то есть разделы, образующиеся в результате разделения разделов, могут именоваться подразделами.
Когда блок на одном уровне разделен на четыре субблока одинакового размера, то любой либо все из субблоков могут быть разделены согласно моделям разделения следующего уровня. Таким образом, для блока NxN, разделенного на уровне x на четыре субблока одинаковых размеров (N/2)x(N/2), любой из субблоков (N/2)x(N/2) может быть далее разделен согласно одной из моделей разделения уровня x+1. Следовательно, субблок 32x32 пиксела из макроблока 64x64 пиксела на уровне 0 может быть далее разделен, согласно одной из моделей, показанных на фиг.4A на уровне 1, например 32x32, 32x16 и 32x16, 16x32 и 16x32 или 16x16, 16x16, 16x16 и 16x16. Аналогичным образом там, где четыре субблока 16x16 пикселов получаются вследствие разделения субблока 32x32 пиксела, каждый из субблоков 16x16 пикселов может быть далее разделен согласно одной из моделей, показанных на фиг.4A, на уровне 2. Там, где четыре субблока 8x8 пикселов получаются вследствие разделения субблока 16x16 пикселов, каждый из субблоков 8x8 пикселов может быть далее разделен согласно одной из моделей, показанных на фиг.4A, на уровне 3.
Используя пример четырех уровней разделения, представленный на фиг.4A, большие однородные области и мелкие случайные изменения могут быть адаптивно представлены кодером, реализующим структуру и методики, приведенные в данном раскрытии. Например, видеокодер 50 может определить различные уровни разделения для различных макроблоков, а также режимы кодирования для применения к таким разделам, например, на основании анализа искажения и скорости. Кроме того, как более подробно описано ниже, видеокодер 50 может осуществлять кодирование, по меньшей мере, некоторых из конечных разделов по-разному, используя пространственное (P-кодирование или B-кодирование) или временное (I-кодирование) предсказание, например, основанное на результатах показателя искажения и скорости или на иных факторах.
Вместо единообразного кодирования большого макроблока таким образом, чтобы все его разделы были закодированы внутрикадровым либо межкадровым образом, большой макроблок может быть закодирован таким образом, чтобы для некоторых разделов использовались различные режимы кодирования. Например, некоторые (по меньшей мере, один) разделы могут быть закодированы при различных режимах внутрикадрового кодирования (например, I_16x16, I_8x8, I_4x4) по отношению к другим (по меньшей мере, одному) разделам в том же самом макроблоке. Кроме того, некоторые (по меньшей мере, один) разделы могут быть закодированы внутрикадровым образом, в то время как другие (по меньшей мере, один) разделы в том же самом макроблоке закодированы межкадровым образом.
Например, видеокодер 50 для блока 32x32 с четырьмя разделами 16x16 может закодировать некоторые из разделов 16x16 с использованием пространственного предсказания, а другие разделы 16x16 с использованием временного предсказания. В качестве другого примера видеокодер 50 для блока 32x32 с четырьмя разделами 16x16 может закодировать один или более разделов 16x16 с использованием первого режима предсказания (например, один из I_16x16, I_8x8, I_4x4) и один или более других разделов 16x16 с использованием различных режимов пространственного предсказания (например, один из I_16x16, I_8x8, I_4x4).
На фиг.4B представлена концептуальная схема, иллюстрирующая назначение различных режимов кодирования различным разделам большого макроблока. В частности, на фиг.4B проиллюстрировано назначение режима внутрикадрового кодирования I_16x16 к верхнему левому блоку 16x16 большого макроблока 32x32, режима внутрикадрового кодирования I_8x8 к верхнему правому и к нижнему левому блоку 16x16 большого макроблока 32x32 и режима внутрикадрового кодирования I_4x4 к нижнему правому блоку 16x16 большого макроблока 32x32. В некоторых случаях режимы кодирования, проиллюстрированные на фиг.4B, могут быть режимами внутрикадрового кодирования H.264 для кодирования яркости.
Описанным образом каждый раздел может быть далее выборочно разделен, и каждый окончательно сформированный раздел может быть выборочно закодирован с использованием как временного предсказания, так и пространственного предсказания с применением выбранных временных или пространственных режимов кодирования. Следовательно, возможно закодировать большой макроблок при использовании смешанных режимов таким образом, что некоторые разделы в макроблоке закодированы внутрикадровым образом, а другие разделы в том же самом макроблоке закодированы межкадровым образом или некоторые разделы в том же самом макроблоке закодированы при различных режимах внутрикадрового кодирования или при различных режимах межкадрового кодирования.
Видеокодер 50 может далее определить каждый раздел, согласно типу макроблока. Тип макроблока может быть включен в качестве элемента синтаксиса в закодированный битовый поток, например, как элемент синтаксиса в заголовке макроблока. В общем, тип макроблока может быть использован для того, чтобы идентифицировать разделение макроблока и соответствующие способы или режимы кодирования каждого из разделов макроблока, как это рассмотрено выше. Способы кодирования разделов могут включать в себя не только внутрикадровое и межкадровое кодирование, но также и специфические режимы внутрикадрового кодирования (например, I_16x16, I_8x8, I_4x4) или межкадрового кодирования (например, P_ или B_ 16x16, 16x8, 8x16, 8x8, 8x4, 4x8 и 4x4).
Как более подробно рассмотрено ниже на примере Таблицы 1, для P-блоков и на примере Таблицы 2 для В-блоков, блоки разделения уровня 0 могут быть определены согласно элементу синтаксиса MB64_type, который представляет макроблок 64x64 пиксела. Подобные определения могут быть сформированы для любого типа MB[N]_ type, где [N] относится к блоку NxN пикселов, где N - положительное целое число, которое может быть больше 16. Если в блоке NxN имеется четыре раздела размером (N/2)x(N/2), как показано в последнем столбце на фиг.4A, то каждый их этих четырех разделов может получить определения своих собственных типов, например МВ[N/2]_type. Например, для блока 64x64 пиксела (типа MB64_type) с четырьмя разделами 32x32 пиксела видеокодер 50 может представить тип MB32_type для каждого из четырех разделов 32x32 пиксела. Эти элементы синтаксиса типа макроблока могут потребоваться декодеру 60 при декодировании больших макроблоков и различных разделов больших макроблоков, как описано в данном раскрытии. Каждый макроблок NxN пикселов, где N больше 16, в общем случае соответствует однозначному определению типа. Соответственно, кодер может сформировать синтаксис, соответствующий конкретному макроблоку, и указать декодеру максимальный размер макроблоков в кодируемой единице, таком как кадр, вырезка или последовательность макроблоков. Данным образом декодер может получить указание о том, какой синтаксис следует применить для макроблоков кодируемой единицы. Это также обеспечивает декодеру обратную совместимость с существующими стандартами кодирования, такими как H.264, при этом кодер может указывать тип синтаксиса декодерам для того, чтобы применить его к макроблокам, например, стандарт H.264, либо те, которые предназначены для обработки больших макроблоков согласно методикам данного раскрытия.
Вообще каждое определение типа MB[N]_type может представлять для соответствующего типа некоторое число пикселов в блоке соответствующего типа (например, 64x64), опорный кадр (или таблицу ссылок) для блока, некоторое число разделов блока, размер каждого раздела блока, каким способом закодирован каждый раздел (например, внутрикадровый или межкадровый и особый режимы), и опорный кадр (или таблицу ссылок) для каждого раздела блока, когда раздел закодирован межкадровым образом. Для блоков 16x16 и меньше видеокодер 50 может в некоторых примерах использовать обычные определения типов в качестве типов блоков, такие как типы, определенные стандартом H.264. В других примерах видеокодер 50 может применять вновь определенные типы блоков для блоков 16x16 и менее.
Видеокодер 50 может оценить, как обычные способы межкадрового или внутрикадрового кодирования с использованием нормальных размеров макроблоков и разделов, такие как способы, предписанные стандартом ITU Н.264, так и способы межкадрового или внутрикадрового кодирования с использованием больших макроблоков и разделов, описанные в данном раскрытии, и осуществить сравнение характеристик искажения и скорости, чтобы определить, какой способ дает наилучшие результаты с точки зрения искажения и скорости. Затем видеокодер 50 может выбрать и применить наилучший способ кодирования к блоку, который должен быть закодирован, включая межкадровый или внутрикадровый режимы кодирования, размер макроблока (большой, больший или нормальный) и способ разделения, на основании оптимальных или приемлемых результатов для примененного способа кодирования, с точки зрения искажения и скорости. В качестве иллюстрации видеокодер 50 может выбрать использование макроблоков 64x64, макроблоков 32x32 или макроблоков 16x16 для кодирования конкретного кадра или вырезки на основании анализа искажения и скорости при использовании видеокодером таких размеров макроблоков.
Вообще говоря, могут быть использованы два разных подхода для разработки режимов внутрикадрового кодирования с использованием больших макроблоков. В качестве одного примера при внутрикадровом кодировании может быть выполнено пространственное предсказание для блока, основанное непосредственно на соседних с ним блоках. В соответствии с методиками данного раскрытия видеокодер 50 может сформировать блоки 32x32 пространственного предсказания, основанного непосредственно на соседних с ними пикселах, и сформировать блоки 64x64 пространственного предсказания, основанного непосредственно на соседних с ними пикселах. При данной методике пространственное предсказание может быть выполнено в большем масштабе по сравнению с блоками 16x16 внутрикадрового кодирования. Поэтому в некоторых примерах использование данных способов может привести к экономии скорости передачи битов, например, при меньшем количестве блоков или разделов в каждом кадре или вырезке.
В качестве другого примера видеокодер 50 может сгруппировать четыре блока NxN вместе, для того чтобы сформировать блок (N×2)x(N×2), а затем закодировать блок (N×2)x(N×2). Используя существующие режимы внутрикадрового кодирования стандарта H.264, видеокодер 50 может сгруппировать четыре блока, закодированных внутрикадровым образом, вместе, сформировав, таким образом, большой макроблок, закодированный внутрикадровым образом. Например, четыре блока, закодированные внутрикадровым образом, размером 16x16 каждый, могут быть сгруппированы вместе для того, чтобы сформировать большой блок 32x32, закодированный внутрикадровым образом. Видеокодер 50 может закодировать каждый из четырех соответствующих блоков NxN, используя различные режимы кодирования, например, I_16x16, I_8x8 или I_4x4, согласно стандарту H.264. Таким образом, каждому блоку 16x16 может быть назначен его собственный режим пространственного предсказания видеокодером 50, например, для того, чтобы обеспечить благоприятный исход кодирования.
Видеокодер 50 может реализовать режимы внутрикадрового кодирования согласно любому из двух различных способов, рассмотренных выше, и проанализировать различные способы для того, чтобы определить, какой подход обеспечивает лучшие результаты кодирования. Например, видеокодер 50 может применить различные подходы режима внутрикадрового кодирования и поместить их в единственный пул кандидатов для того, чтобы позволить им конкурировать друг с другом по критерию искажения и скорости. Используя сравнение между различными подходами по критерию искажения и скорости, видеокодер 50 может определить, каким способом закодировать каждый раздел и/или макроблок. В частности, видеокодер 50 может выбрать режимы кодирования, которые обеспечивают наилучший показатель искажения и скорости для данного макроблока, и использовать эти режимы кодирования для того, чтобы закодировать макроблок.
На фиг.5 представлена концептуальная схема, иллюстрирующая иерархический обзор различных уровней разделения большого макроблока. На фиг.5 также представлены соотношения между различными уровнями разделения большого макроблока, как это описано в отношении фиг.4A. У каждого блока уровня разделения, как проиллюстрировано в примере на фиг.5, может быть соответствующее значение модели кодируемого блока (СВР). Значения СВР образуют часть синтаксической информации, которая описывает блок или макроблок. В одном примере каждое значение СВР представляет собой однобитовую синтаксическую величину, указывающую, имеется или нет какое-либо ненулевое значение коэффициента преобразования в данном блоке, подлежащем последующим операциям преобразования и квантования.
В некоторых случаях блок предсказания может оказаться очень близким по пиксельному контенту к блоку, который должен быть закодирован таким образом, что все коэффициенты преобразования остатка оказываются ниже начального порога квантования, в таком случае нет необходимости передавать коэффициенты преобразования для кодированного блока. Вместо этого значение СВР для блока может быть установлено нулевым для того, чтобы указать, что закодированный блок не включает в себя ненулевых коэффициентов. Альтернативно, если блок включает в себя, по меньшей мере, один коэффициент, отличный от нуля, то значение СВР может быть установлено равным единице. Декодер 60 может использовать значения СВР для того, чтобы идентифицировать блоки остатка, которые закодированы, то есть с одним или более ненулевыми коэффициентами преобразования, в сравнении с блоками, которые не закодированы, то есть не включающими в себя ненулевые коэффициенты преобразования.
В соответствии с некоторыми из методик, описанных в данном раскрытии, кодер может назначать значения СВР большим макроблокам, иерархически основываясь на том, имеют ли те макроблоки, включая в себя их разделы, по меньшей мере, один ненулевой коэффициент, и назначают значения СВР разделам для того, чтобы указать разделы, у которых имеются ненулевые коэффициенты. Иерархический СВР для больших макроблоков может упростить обработку больших макроблоков для того, чтобы быстро идентифицировать закодированные большие макроблоки и незакодированные большие макроблоки и разрешить идентификацию закодированных разделов на каждом уровне разделения для большого макроблока для того, чтобы определить, нужно ли использовать данные остатка для декодирования блоков.
В одном примере макроблок 64x64 пиксела на нулевом уровне может включать в себя синтаксическую информацию, содержащую значение CBP64, например однобитовое значение для того, чтобы указать, есть ли у всего макроблока 64x64 пиксела, включающего в себя какие-либо разделы, ненулевые коэффициенты либо нет. В одном примере видеокодер 50 "устанавливает" бит CBP64, например, равным "1", чтобы указать, что этот макроблок 64x64 пиксела включает в себя, по меньшей мере, один ненулевой коэффициент. Таким образом, когда значение CBP64 установлено, например, равным "1", макроблок 64x64 пиксела включает в себя, по меньшей мере, один ненулевой коэффициент, находящийся где-либо в макроблоке. В другом примере видеокодер 50 "сбрасывает" значение бита CBP64, устанавливая его, например, равным "0", для того, чтобы указать, что у этого макроблока 64x64 пиксела все коэффициенты нулевые. Таким образом, когда значение CBP64 сброшено, например установлено равным "0", то это указывает, что у макроблока 64x64 пиксела все коэффициенты нулевые. Макроблоки со значениями CBP64, равными "0", обычно не требуют передачи данных остатка в битовом потоке, тогда как макроблоки со значениями CBP64, равными "1", обычно требуют передачу данных остатка в битовом потоке для использования их при декодировании таких макроблоков.
Макроблок 64x64 пиксела, у которого все коэффициенты нулевые, может не включать в себя значения СВР для своих разделов или субблоков. То есть, поскольку у макроблока 64x64 пиксела все коэффициенты равны нулю, у каждого раздела также в обязательном порядке все коэффициенты равны нулю. Напротив, макроблок 64x64 пиксела, включающий в себя, по меньшей мере, один ненулевой коэффициент, может далее включать в себя значения СВР для разделов на следующем уровне разделения. Например, CBP64 со значением, равным единице, может включать в себя дополнительную синтаксическую информацию в форме однобитового значения CBP32 для каждого раздела 32x32 блока 64x64. Таким образом, в одном примере каждому разделу 32x32 пиксела (такому как четыре блока в разделении уровня 1 на фиг.5) макроблока 64x64 пиксела назначают значение CBP32 как часть синтаксической информации макроблока 64x64 пиксела. Так же как и значение CBP64, каждое значение CBP32 может содержать бит, установленный в единицу, когда соответствующий блок 32x32 пиксела имеет, по меньшей мере, один ненулевой коэффициент, и этот бит сбрасывается в ноль, когда соответствующий блок 32x32 пиксела имеет все нулевые коэффициенты. Кодер может, кроме того, указать в синтаксической информации кодируемой единицы, содержащей множество макроблоков, таких как кадр, вырезка или последовательность, максимальный размер макроблока в кодируемой единице для того, чтобы указать декодеру, как интерпретировать синтаксическую информацию каждого макроблока, например какой синтаксис следует использовать декодеру для обработки макроблоков в кодируемой единице.
Таким образом, макроблок 64x64 пиксела, имеющий все коэффициенты нулевыми, может использовать единственный бит для того, чтобы представить факт, что все коэффициенты макроблока являются нулевыми, тогда как макроблок 64x64 пиксела с, по меньшей мере, одним ненулевым коэффициентом может включать в себя синтаксическую информацию СВР, содержащую, по меньшей мере, пять битов, первый бит, чтобы представить, что у макроблока 64x64 пиксела есть ненулевой коэффициент, и четыре дополнительных бита, каждый из которых указывает, включает ли в себя соответствующий раздел из четырех разделов 32x32 пиксела, по меньшей мере, один ненулевой коэффициент. В некоторых примерах, когда первые три из этих четырех дополнительных битов являются нулевыми, четвертый дополнительный бит может быть не включен в состав битов, что интерпретируется декодером, как значение единица для последнего раздела. То есть кодер может определить, что последний бит имеет значение единицы, когда первые три бита нулевые, а бит представления более высокого уровня иерархии имеет значение единицы. Например, префикс значения CBP64 "10001" может быть сокращен до "1000", поскольку первый бит указывает, что, по меньшей мере, один из этих четырех разделов имеет ненулевые коэффициенты, а следующие друг за другом три нуля указывают, что в первых трех разделах все коэффициенты нулевые. Поэтому декодер может определить, что раздел, включающий в себя ненулевой коэффициент, является последним, без явного битового указания декодеру на этот факт, например, строкой битов "1000". То есть декодер может интерпретировать префикс CBP64 "1000" как "10001".
Аналогичным образом однобитовый CBP32 может быть установлен в состояние "1", когда раздел 32x32 пиксела включает в себя, по меньшей мере, один ненулевой коэффициент, и в состояние "0", когда значения всех коэффициентов равны нулю. Если раздел 32x32 пиксела имеет значение СВР, равное 1, то разделам данного раздела 32x32 на следующем уровне разделения можно назначить значения СВР для того, чтобы указать, включают ли в себя соответствующие разделы какие-либо ненулевые коэффициенты. Следовательно, значения СВР могут назначаться иерархическим способом на каждом уровне разделения до тех пор, пока уже не будет никаких дальнейших уровней разделения либо никаких разделов, включающих в себя ненулевые коэффициенты.
Вышеизложенным образом кодеры и/или декодеры могут использовать иерархические значения СВР для того, чтобы представить, включают ли в себя большой макроблок (например, 64x64 или 32x32) и его разделы, по меньшей мере, один ненулевой коэффициент либо все их коэффициенты являются нулевыми. Соответственно, кодер может закодировать большой макроблок кодируемой единицы цифрового видеопотока таким образом, чтобы блок макроблока имел более чем 16x16 пикселов, сформировать синтаксическую информацию типа блока, идентифицирующую размер блока, сформировать значение СВР для блока таким образом, что значение СВР идентифицирует, включает ли в себя блок, по меньшей мере, один ненулевой коэффициент, и сформировать дополнительные значения СВР для различных уровней разделения блока, если применимо.
В одном примере иерархические значения СВР могут содержать массив битов (например, битовый вектор), длина которого зависит от значений префикса. Далее, массив может представить иерархию значений СВР, такую как древовидная структура, как показано на фиг.5. Массив может представлять узлы дерева в ширину, где каждый узел соответствует биту в массиве. Когда значение бита узла дерева установлено в "1", в одном примере узел имеет четыре ветви (соответствующие четырем разделам), а когда бит сброшен в "0", узел не имеет ветвей.
В данном примере, чтобы идентифицировать значения узлов, которые ветвятся из конкретного узла X, кодер и/или декодер могут определить четыре последовательных бита, начиная с узла Y, которые представляют узлы, ответвляющиеся от узла x, посредством вычисления:
где tree[] (дерево[]) соответствует массиву битов со стартовым индексом 0, i - целочисленный индекс в массиве tree[], x соответствует индексу узла X в tree[] и у соответствует индексу узла Y, который является первым ветвлением узла X. Три последующие позиции массива (то есть y+1, y+2, и y+3) соответствуют другим ветвлениям узла X.
Кодер, такой как видеокодер 50 (фиг.2), может назначать значения СВР для разделов 16x16 пикселов раздела 32x32 пиксела с, по меньшей мере, одним ненулевым коэффициентом, используя существующие способы, такие как способы, предписанные стандартом ITU H.264 для установки значений СВР для блоков 16x16, как часть синтаксиса макроблока 64x64 пиксела. Кодер может также выбрать значения СВР для осуществления разделения разделов 32x32 пиксела, у которых имеется, по меньшей мере, один ненулевой коэффициент, на основании размера разделов, типа блоков, соответствующих разделам (например, блок цветности или блок яркости), или на других характеристиках разделов. Примеры способов по установке значения СВР для раздела, получающегося в результате разделения раздела 32x32 пиксела, обсуждены подробно далее со ссылками на фиг.8 и 9.
На фиг.6-9 представлены функциональные схемы, иллюстрирующие примеры способов установки различных значений модели кодируемого блока (СВР), в соответствии с методиками данного раскрытия. Хотя примеры способов на фиг.6-9 рассмотрены в отношении макроблока 64x64 пиксела, следует учитывать, что аналогичные методики могут быть применимы при назначении иерархических значений СВР для макроблоков других размеров. Хотя примеры на фиг.6-9 рассмотрены в отношении видеокодера 50 (фиг.2), следует учитывать, что другие кодеры могут использовать аналогичные способы при назначении значений СВР для макроблоков, размеры которых превышают стандартные. Аналогичным образом декодеры могут использовать подобные, хотя и взаимообратные, способы для интерпретации конкретного значения СВР для макроблока. Например, если у макроблока, закодированного межкадровым образом и принятого в битовом потоке, имеется значение СВР "0", то декодер не может принять данные остатка для макроблока и может просто сформировать предсказанный блок, идентифицированный вектором движения как декодированный макроблок, либо группу предсказанных блоков, идентифицированных векторами движения по отношению к разделам макроблока.
На фиг.6 представлена функциональная схема, иллюстрирующая пример способа для установки значения CBP64 макроблока 64x64 пиксела. Аналогичные методы могут применяться для макроблоков, больших чем 64x64. Первоначально видеокодер 50 принимает макроблок (100) 64x64 пиксела. Модуль 36 оценки движения и модуль 35 компенсации движения затем могут сформировать один или более векторов движения и один или более блоков остатка соответственно для того, чтобы закодировать макроблок. Выходной сигнал модуля преобразования 38 обычно содержит массив значений коэффициентов преобразования остатка для блока, закодированного внутрикадровым образом, или блока остатка, закодированного межкадровым образом, массив которых квантуется модулем квантования 40 для того, чтобы сформировать ряд квантованных коэффициентов преобразования.
Модуль 46 энтропийного кодирования может обеспечить энтропийное кодирование и иные функции кодирования, отдельные от энтропийного кодирования. Например, в дополнение к функциям CAVLC, CABAC или иным функциям энтропийного кодирования, модуль 46 энтропийного кодирования или другой модуль видеокодера 50 может определять значения СВР для больших макроблоков и разделов. В частности, модуль 46 энтропийного кодирования может определить значение CBP64 для макроблока 64x64 пиксела, сначала определив, имеет ли данный макроблок, по меньшей мере, один ненулевой, квантованный коэффициент преобразования (102). Если модуль 46 энтропийного кодирования определяет, что все коэффициенты преобразования имеют нулевые значения (ветвь "НЕТ" 102), то модуль 46 энтропийного кодирования сбрасывает значение CBP64 для макроблока 64x64, например, устанавливает значение бита CBP64 равным "0" (104). Если модуль 46 энтропийного кодирования, определяет, по меньшей мере, один ненулевой коэффициент (ветвь "ДА" блока 102) для макроблока 64x64, то модуль 46 энтропийного кодирования устанавливает значение CBP64, например устанавливает значение бита CBP64 равным "1" (106).
Когда у макроблока все коэффициенты нулевые, то для модуля 46 энтропийного кодирования нет необходимости установки никаких дополнительных значений СВР для разделов макроблока, что позволяет уменьшить издержки. В одном примере, когда у макроблока есть, по меньшей мере, один ненулевой коэффициент, модуль 46 энтропийного кодирования продолжает определение значений СВР для каждого из четырех разделов 32x32 пиксела, принадлежащих макроблоку 64x64 пиксела (108). Модуль 46 энтропийного кодирования может использовать способ, представленный на фиг.7, четыре раза, по одному разу для каждого из этих четырех разделов для того, чтобы установить четыре значения CBP32, каждое соответствующее одному из четырех разделов 32x32 пиксела, принадлежащих макроблоку 64x64. При данном способе, когда все коэффициенты макроблока являются нулевыми, модуль 46 энтропийного кодирования может передать единственный бит со значением "0" для того, чтобы указать, что все коэффициенты макроблока являются нулевыми, тогда как, если у макроблока имеется, по меньшей мере, один ненулевой коэффициент, то модуль 46 энтропийного кодирования может передать пять битов, один бит для макроблока и четыре бита, каждый из которых соответствует одному из четырех разделов макроблока. Кроме того, если раздел включает в себя, по меньшей мере, один ненулевой коэффициент, то данные остатка для разделения могут быть переданы в закодированном битовом потоке. Как и в случае примера CBP64, рассмотренного выше, когда первые три из этих четырех дополнительных битов являются нулями, то четвертый дополнительный бит, возможно, не является необходимым, поскольку декодер может определить, что его значение равно единице. Таким образом, в некоторых примерах кодер может передать только три нуля, то есть "000", а не три нуля и единицу, то есть "0001".
На фиг.7 представлена функциональная схема, иллюстрирующая пример способа установки значения СВР32 раздела 32x32 пиксела, принадлежащего макроблоку 64x64 пиксела. Первоначально на следующем уровне разделения модуль 46 энтропийного кодирования принимает раздел макроблока, 32x32 пиксела (110), например, одного из четырех разделов, сформированного, как показано на фиг.6. Затем модуль 46 энтропийного кодирования определяет значение CBP32 для раздела 32x32 пиксела, сначала определив, включает ли в себя раздел, по меньшей мере, один ненулевой коэффициент (112). Если модуль 46 энтропийного кодирования определяет, что все коэффициенты раздела имеют нулевые значения (ветвь "НЕТ" блока 112), то модуль 46 энтропийного кодирования сбрасывает значение CBP32, например, устанавливает значение бита CBP32 равным "0" (114). Если модуль 46 энтропийного кодирования определяет, по меньшей мере, один ненулевой коэффициент (ветвь "ДА" блока 112), то модуль 46 энтропийного кодирования устанавливает значение CBP32, например, устанавливает значение бита CBP32 равным "1" (116).
В одном примере, когда у раздела все коэффициенты нулевые, то модуль 46 энтропийного кодирования не устанавливает никаких дополнительных значений СВР для данного раздела. Когда же раздел включает в себя, по меньшей мере, один ненулевой коэффициент, модуль 46 энтропийного кодирования определяет значения СВР для каждого из четырех разделов 16x16 пикселов, принадлежащих разделу 32x32 пиксела, в свою очередь, принадлежащего макроблоку. Модуль 46 энтропийного кодирования может использовать способ, представленный на фиг.8, для того, чтобы установить четыре значения CBP16, каждое соответствующее одному из четырех разделов 16x16 пикселов.
Таким образом, когда все коэффициенты раздела являются нулевыми, модуль 46 энтропийного кодирования может установить бит в значение "0" для того, чтобы указать, что все коэффициенты раздела являются нулевыми, тогда как, если у раздела имеется, по меньшей мере, один ненулевой коэффициент, то модуль 46 энтропийного кодирования может включать в себя пять битов, один бит для раздела и четыре бита, каждый из которых соответствует одному из четырех подразделов раздела, принадлежащего макроблоку. Следовательно, каждый дополнительный уровень разделения может представить четыре дополнительных бита СВР, когда раздел предыдущего уровня разделения имел, по меньшей мере, одно ненулевое значение коэффициента преобразования. В качестве примера, если у макроблока 64x64 имеется значение СВР, равное 1, и у четырех разделов 32x32 имеются значения СВР, равные 1, 0, 1 и 1 соответственно, то полное значение СВР в данной точке равно 11011. Дополнительные биты СВР могут быть добавлены для дополнительных разделений разделов 32x32, например, на разделы 16x16.
На фиг.8 представлена функциональная схема, иллюстрирующая пример способа установки значения СВР16 раздела 16x16 пикселов, принадлежащего разделу 32x32 пиксела, в свою очередь принадлежащего макроблоку 64x64 пиксела. Для определенных разделов 16x16 пикселов видеокодер 50 может использовать значения СВР, как предписано стандартом кодирования видео, таким как ITU H.264, как это рассмотрено ниже. Для прочих разделов 16x16 видеокодер 50 может использовать значения СВР, определенные в соответствии с иными методиками данного раскрытия. Первоначально, как показано на фиг.8, модуль 46 энтропийного кодирования принимает раздел 16x16 (120), например один из четырех разделов 16x16, принадлежащих разделу 32x32, представленному на фиг.7.
Затем модуль 46 энтропийного кодирования может определить, превышает ли раздел движения для раздела 16x16 пикселов величину блока 8x8 пикселов (122). В общем случае раздел движения описывает разделение, в котором сосредоточено движение. Например, раздел 16x16 пикселов только с одним вектором движения можно рассматривать как раздел движения 16x16. Аналогичным образом для раздела 16x16 пикселов с двумя подразделами 8x16, по одному вектору движения в каждом, можно рассматривать как раздел движения 8x16. В любом случае, когда раздел движения не превышает блок 8x8 пикселов (ветвь "НЕТ" блока 122), модуль 46 энтропийного кодирования назначает значение СВР разделу 16x16 пикселов тем же самым способом, как это предписано стандартом ITU H.264 (124), в примере на фиг.8.
При наличии раздела движения в разделе 16x16 пикселов, величина которого больше блока 8x8 пикселов (ветвь "ДА" блока 122), модуль 46 энтропийного кодирования формирует и передает значение lumacbp16 (125), используя этапы, следующие после этапа 125. В примере на фиг.8, для того чтобы сформировать значение lumacbp16, модуль 46 энтропийного кодирования определяет, имеется ли у компонента яркости 16x16 пикселов, принадлежащего данному разделу, по меньшей мере, один ненулевой коэффициент (126). Если у компонента яркости 16x16 пикселов все коэффициенты являются нулевыми (ветвь "НЕТ" блока 126), то модуль 46 энтропийного кодирования назначает значение СВР16, согласно части «Модель кодируемого Блока Цветности» стандарта ITU H.264 (128), в примере на фиг.8.
Если модуль 46 энтропийного кодирования определяет, что у компонента яркости 16x16 пикселов имеется, по меньшей мере, один ненулевой коэффициент (ветвь "ДА" блока 126), то модуль 46 энтропийного кодирования определяет флаг размера преобразования для раздела 16x16 пикселов (130). В общем случае флаг размера преобразования указывает, что для данного раздела используется преобразование. Преобразование, представленное флагом размера преобразования, может включать в себя одно из преобразований: преобразование 4x4, преобразование 8x8, преобразование 16x16, преобразование 16x8 либо преобразование 8x16. Флаг размера преобразования может содержать целочисленное значение, соответствующее одному из перечисленных значений, которое идентифицирует одно из возможных преобразований. Затем модуль 46 энтропийного кодирования может определить, представляет ли флаг размера преобразования тот факт, что размер преобразования больше либо равен 16x8 (или 8x16) (132).
Если флаг размера преобразования не указывает, что размер преобразования больше либо равен 16x8 (или 8x16) (ветвь "НЕТ" блока 132), то модуль 46 энтропийного кодирования назначает значение CBP16 в соответствии со стандартом ITU H.264 (134), в примере на фиг.8. Если флаг размера преобразования указывает, что размер преобразования больше либо равен 16x8 (или 8x16) (ветвь "ДА" блока 132), то тогда модуль 46 энтропийного кодирования определяет, что представляет собой раздел 16x16 пикселов: два раздела 16x8 либо два раздела 8x16 (136).
Если тип раздела 16x16 пикселов не представляет собой два раздела 16x8 пикселов либо два раздела 8x16 пикселов (ветвь "НЕТ" блока 138), то модуль 46 энтропийного кодирования назначает значение СВР16 в соответствии с процедурой разделения кодированного блока цветности, предписываемой стандартом ITU H.264 (140), в примере на фиг.8. Если тип раздела 16x16 пикселов представляет собой два раздела 16x8 пикселов либо два раздела 8x16 пикселов (ветвь "ДА" блока 138), то модуль 46 энтропийного кодирования также использует процедуру разделения кодированного блока цветности, предписываемую стандартом ITU H.264, но, кроме того, назначает значение CBP16, двухбитовое значение luma16x8_CBP (142), например, в соответствии со способом, представленном на фиг.9.
На фиг.9 представлена функциональная схема, иллюстрирующая пример способа для определения значения двухбитового значения яркости 16x8_CBP. Модуль 46 энтропийного кодирования принимает раздел 16x16 пикселов, который далее делится на два раздела 16x8 пикселов или на два раздела 8x16 пикселов (150). Модуль 46 энтропийного кодирования обычно назначает каждый бит luma16x8_CBP согласно тому, включает ли в себя соответствующий субблок раздела 16x16 пикселов, по меньшей мере, один ненулевой коэффициент.
Модуль 46 энтропийного кодирования определяет, имеется ли у первого субблока раздела 16x16 пикселов, по меньшей мере, один ненулевой коэффициент для того, чтобы определить, есть ли у первого субблока, по меньшей мере, один ненулевой коэффициент (152). Когда у первого субблока все коэффициенты являются нулевыми (ветвь "НЕТ" блока 152), модуль 46 энтропийного кодирования сбрасывает первый бит luma16x8_СВР, например назначает luma16x8_CBP [0] значение "0" (154). Когда у первого субблока имеется хотя бы один нулевой коэффициент (ветвь "ДА" блока 152), модуль 46 энтропийного кодирования устанавливает первый бит luma16x8_СВР, например, назначает luma16x8_CBP [0] значение "1" (156).
Модуль 46 энтропийного кодирования также определяет, имеется ли у второго подраздела раздела размером 16x16 пикселов, по меньшей мере, один ненулевой коэффициент (158). Если у второго подраздела все коэффициенты являются нулевыми (ветвь "НЕТ" блока 158), то модуль 46 энтропийного кодирования сбрасывает второй бит luma16x8_СВР, например назначает luma16x8_CBP [1] значение "0" (160). Если у второго субблока имеется хотя бы один нулевой коэффициент (ветвь "ДА" блока 158), то модуль 46 энтропийного кодирования устанавливает второй бит luma16x8_СВР, например, назначает luma16x8_CBP [1] значение "1" (162).
Следующий псевдокод обеспечивает один пример реализации способов, описанных в соответствии с фиг.8 и 9:
if (motion partition bigger than 8x8)
{
lumacbp16
if (lumacbp16 != 0)
{
transform_size_flag
if (transform_size_flag ==
TRANSFORM_SIZE_GREATER_THAN 16x8)
{
if ((mb16_type ==P_16x8) OR (mb16_type==P_8x16))
{
luma16x8_cbp
chroma_cbp
}
else
chromacbp
}
else
h264_cbp
}
else
chroma_cbp
}
else
h264_cbp
В псевдокоде "lumacbp16" соответствует операции добавления однобитового флага, указывающего, есть ли у целого 16x16 luma блока коэффициенты, отличные от нуля, либо нет. Если "lumacbpl6" равен единице, то имеется, по меньшей мере, один коэффициент, отличный от нуля. Функция "Transform_size_flag" (флаг размера преобразования) относится к выполняемому вычислению, результат которого указывает на использование преобразования, например на одно из преобразований: преобразования 4x4, преобразования 8x8, преобразования 16x16 (для раздела, описывающего движение, размер которого равен или больше чем 16x16), преобразования 16x8 (для P_16x8) или преобразования 8x16 (для P_8x16). TRANSFORM_SIZE_GREATER_THAN_16x8 представляет собой нумерованное значение (например, "2"), которое используется для указания, что размер преобразования больше либо равен 16x8 или 8x16. Результат вычисления transform_size_flag заключается в синтаксическую информацию макроблока 64x64 пиксела.
"Luma16x8_cbp" относится к вычислению, результатом которого является двухбитовое число, каждый бит которого указывает, имеется ли у одного из двух разделов P_16x8 или P_8x16 ненулевые коэффициенты либо нет. Двухбитовое число, полученное от luma16x8_cbp, заключается в синтаксис макроблока 64x64 пиксела. Значение "chroma_cbp" может быть вычислено тем же самым способом, как CodedBlockPatternChroma (модель кодируемого блока цветности), как это предписано стандартом ITU H.264. Вычисленное значение chroma_cbp заключается в синтаксическую информацию макроблока 64x64 пиксела. Функция h264_cbp может быть вычислена таким же способом, как значение СВР, определенное в стандарте ITU H.264. Вычисленное значение H264_cbp заключается в синтаксическую информацию макроблока 64x64 пиксела.
В общем, способ, представленный на фиг.6-9, может включать в себя кодирование видеоблока, имеющего размер более чем 16x16 пикселов, посредством видеокодера, формирование синтаксической информации типа блока, которая указывает размер блока, и формирование значения модели кодируемого блока для закодированного блока, причем значение модели кодируемого блока указывает, включает ли в себя закодированный блок, по меньшей мере, один ненулевой коэффициент.
На фиг.10 представлена функциональная схема, иллюстрирующая пример компоновки макроблока 64x64 пиксела. Макроблок на фиг.10 содержит четыре раздела 32x32, помеченных буквами A, В, C и D. Как было рассмотрено на фиг.4A, в одном примере блок может быть разделен любым из четырех способов: целый блок (64x64) без подразделов, два равного размера горизонтальных раздела (32x64 и 32x64), два равного размера вертикальных раздела (64x32 и 64x32) или четыре равного размера раздела (32x32, 32x32, 32x32 и 32x32) квадратной формы.
В примере на фиг.10 все разделение на блоки содержит каждый из блоков A, B, C и D; первый из двух равного размера горизонтальных разделов содержит A и B, в то время как второй из двух равного размера горизонтальных разделов содержит С и D; первый из двух равного размера вертикальных разделов содержит A и C, в то время как второй из двух равного размера вертикальных разделов содержит В и D; а четыре равного размера раздела квадратной формы соответствуют каждому из обозначенных А, В, С и D. Аналогичные схемы разделения могут использоваться для любого размера блока, например большего чем 64x64 пиксела, 32x32 пиксела, 16x16 пикселов, 8x8 пикселов, или для других размеров видеоблоков.
Если видеоблок закодирован внутрикадровым образом, то для разделения видеоблока могут использоваться различные способы. Кроме того, каждый из разделов может быть закодирован различным внутрикадровым образом, то есть с помощью различных режимов, таких как различные внутрикадровые режимы. Например, раздел 32x32, такой как раздел А на фиг.10, может быть далее разделен на четыре равного размера блока размером 16x16 пикселов. В качестве одного примера в стандарте ITU H.264 описаны три различных способа для кодирования макроблока 16x16 внутрикадровым образом, включая уровень внутрикадрового кодирования при 16x16, уровень внутрикадрового кодирования при 8x8 и уровень внутрикадрового кодирования при 4x4. Однако в стандарте ITU H.264 предписано кодирование каждого раздела макроблока 16x16 с использованием одного и того же режима внутрикадрового кодирования. Поэтому, согласно стандарту ITU H.264, если один субблок макроблока 16x16 должен быть закодирован внутрикадровым образом на уровне 4x4, то каждый субблок макроблока 16x16 должен быть закодирован внутрикадровым образом на уровне 4x4.
Кодер, сконфигурированный согласно методикам данного раскрытия, с другой стороны, может использовать подход смешанного режима. При внутрикадровом кодировании, например, у большого макроблока могут быть различные разделы, закодированные при помощи различных режимов кодирования. В качестве иллюстрации в разделе 32x32 один раздел 16x16 может быть закодирован внутрикадровым образом на уровне 4x4 пиксела, в то время как другие разделы 16x16 могут быть закодированы внутрикадровым образом на уровне 8x8 пикселов и один раздел 16x16 может быть закодирован внутрикадровым образом на уровне 16x16, например, как показано на фиг.4B.
Когда необходимо поделить видеоблок на четыре равного размера субблока для кодирования, первым блоком, который кодируется внутрикадровым образом, может стать левый верхний блок, затем блок, находящийся справа от первого блока, затем блок, находящийся под первым блоком, и, наконец, блок, находящийся внизу справа от первого блока. Что касается примера на фиг.10, то порядок кодирования внутрикадровым образом мог бы проходить от А к В, далее С и, наконец, D. Хотя на фиг.10 изображен макроблок 64x64 пиксела, кодирование внутрикадровым образом разделенных блоков различных размеров может осуществляться в том же порядке.
Если видеоблок должен быть закодирован межкадровым образом, как часть P-кадра или P-вырезки, то блок может быть разделен на любые четыре вышеописанных раздела, каждый из которых может быть закодирован отдельно. То есть каждый раздел блока может быть закодирован в соответствии с различными режимами кодирования, как внутрикадровым (I-кодирование), так и межкадровым, по отношению к единственному кадру/вырезке/списку (P-кодирование). Таблица 1, приведенная ниже, суммирует информацию по межкадровому кодированию для каждого потенциального раздела блока размером NxN. Там, где в Таблице 1 указано "M", М=N/2. В Таблице 1 ниже L0 обозначает "список 0", то есть опорный кадр/вырезка/список. При принятии решения о наилучшем разделении блока NxN кодер, такой как видеокодер 50, может проанализировать информацию о величине затрат искажения и скорости для каждого MB_N_type (то есть каждого типа раздела) на основании множителя Лагранжа, как это более подробно обсуждено в отношении фиг.11, выбирая самые низкие затраты в качестве наилучшего способа разделения.
Таблица 1
MB_N_type
НаименованиеMB_N_type
№ части
Режимпредсказания,часть 1
Режим предсказания, часть 2
Ширина части
Высота час-ти
0
P_L0_NxN
1
Pred_L0
недоступно
N
N
1
P_L0_L0_NxM
2
Pred_L0
Pred_L0
N
M
2
P_L0_L0_MxN
2
Pred_L0
Pred_L0
M
N
3
PN_MxM
4
недоступно
недоступно
M
M
вычислено
PN_Skip
1
Pred_L0
недоступно
N
N
В вышеприведенной Таблице 1 элементы столбца "MB_N_type" являются ключевыми для каждого типа разделения блока NxN. Элементы столбца "Наименование MB_N_type" являются названиями различных типов разделения блока NxN. "P" в наименовании относится к блоку, закодированному межкадровым образом, с использованием P-кодирования, то есть в отношении единственного кадра/вырезки/списка. "L0" в наименовании относится к кадру/вырезке/списку, например "список 0" используется в качестве опорных кадров или вырезок для P-кодирования. "NxN" относится к разделению, представляющему собой целый блок, "NxM" относится к разделению, представляющему собой два раздела шириной N и высотой М, "MxN" относится к разделению, представляющему собой два раздела шириной М и высотой N, "MxM" относится к разделению, представляющему собой четыре равного размера раздела шириной М и высотой М каждый.
В Таблице 1 PN_Skip означает, что блок был "пропущен", например, потому что блок, получившийся в результате кодирования, имел все нулевые коэффициенты. Элементы столбца "Режим предсказания, часть 1" относятся к опорному кадру/вырезке/списку для подраздела 1 из раздела, в то время как элементы столбца "Режим предсказания, часть 2" относятся к опорному кадру/вырезке/списку для подраздела 2 из раздела. Поскольку у P_L0_NxN имеется только единственный раздел, то соответствующий элемент "Режима предсказания, часть 2" является "N/A" (недоступным), так как нет никакого второго подраздела. Для PN_MxM существуют четыре блока разделов, которые могут быть закодированы по отдельности. Следовательно, оба столбца режима предсказания для PN_MxM включают в себя "N/A" (недоступно). У PN_Skip, как и у P_LO_NxN, имеется только одна часть, таким образом, соответствующий элемент столбца "Режим предсказания, часть 2" является "N/A" (недоступным).
Таблица 2, приведенная ниже, включает в себя столбцы и элементы, аналогичные столбцам и элементам Таблицы 1. Однако Таблица 2 соответствует различным режимам кодирования для межкадрового кодирования блока с использованием двунаправленного предсказания (В-кодирования). Поэтому каждый раздел может быть закодирован и/или с помощью первого кадра/вырезки/списка (L0), и/или с помощью второго кадра/вырезки/списка (L1). "BiPred" относится к соответствующему разделу, предсказываемому как с помощью L0, так и с помощью L1. В Таблице 2 обозначения столбцов и значения аналогичны по смыслу тем, которые используются в Таблице 1.
Таблица 2
MB_N_type
Наименование MB_N_type
№ части
Режим предсказания, часть 1
Режим предсказания, часть 2
Ширина части
Высота части
0
B_Direct_NxN
недоступ-но
Direct
недоступно
N
N
1
B_L0_NxN
1
Pred_L0
недоступно
N
N
2
В_L1 NxN
1
Pred_L1
недоступно
N
N
3
В_Bi_NxN
1
BiPred
недоступно
N
N
4
B_L0_L0_NxM
2
Pred_L0
Pred_L0
N
M
5
B_L0_L0_MxN
2
Pred_L0
Pred_L0
M
N
6
B_L1_L1_NxM
2
Pred_L1
Pred_L1
N
M
7
В_L1_L1_MxN
2
Prcd_L1
Prcd_L1
M
N
8
B_L0_L1_NxM
2
Pred_L0
Pred_L1
N
M
9
B_L0_L1_MxN
2
Pred_L0
Pred_L1
M
N
10
B_L1_L0_NxM
2
Pred_L1
Pred_L0
N
M
11
B_L1_L0_MxN
2
Pred_L1
Pred_L0
M
N
12
B_L0_Bi_NxM
2
Pred_L0
BiPred
N
M
13
B_L0_Bi_MxN
2
Pred_L0
BiPred
M
N
14
B_L1_Bi_NxM
2
Pred_L1
BiPred
N
M
15
В_L1_Bi_MxN
2
Pred_L1
BiPred
M
N
16
B_Bi_L0_NxM
2
BiPred
Pred_L0
N
M
17
B_Bi_L0_MxN
2
BiPred
Pred_L0
M
N
18
B_Bi_L1_NxM
2
BiPred
Pred_L1
N
M
19
B_Bi_L1_MxN
2
BiPred
Pred_L1
M
N
20
B_Bi_Bi_NxM
2
BiPred
BiPred
N
M
21
B_Bi_Bi_MxN
2
BiPred
BiPred
M
N
22
BN_MxM
4
недоступно
недоступно
M
M
вычислено
BN_Skip
недоступно
непосредственно
недоступно
M
M
На фиг.11 представлена функциональная схема, иллюстрирующая пример способа вычисления оптимального разделения и способов кодирования для видеоблока NxN пикселов. Вообще способ, представленый на фиг.11, содержит вычисление затрат для каждого способа кодирования (например, для различных пространственных или временных режимов) при использовании их при различных способах разделения, показанных, например, на фиг.4A, и осуществление выбора комбинации режима кодирования и способа разделения с наилучшими затратами искажения и скорости для видеоблока NxN пикселов. В общем случае величина затрат может быть вычислена с использованием множителя Лагранжа и значений скорости передачи и искажения таким образом, что величина затрат = искажение+λ×скорость передачи, где искажение представляет собой погрешность между исходным блоком и закодированным блоком, а скорость передачи представляет собой скорость передачи битов, необходимую для обеспечения режима кодирования. В некоторых случаях величины скорости передачи и искажения могут быть определены на уровне макроблока, раздела, вырезки или кадра.
Первоначально видеокодер 50 осуществляет прием видеоблока NxN, который должен быть закодирован (170). Например, видеокодер 50 может осуществить прием большого макроблока 64x64 или его раздела, такого как, например, раздел 32x32 или 16x16, для которого видеокодер 50 должен выбрать способ кодирования и разделения. Затем видеокодер 50 вычисляет величину затрат для того, чтобы осуществить кодирование блока NxN (172), используя множество различных режимов кодирования, таких как различные режимы внутрикадрового и межкадрового кодирования. Для вычисления величины затрат при пространственном кодировании блока NxN видеокодер 50 может вычислить искажение и скорость передачи битов, необходимые для кодирования блока NxN при данном режиме кодирования, и затем рассчитать затраты = искажение (Режим, NxN)+λ×скорость передачи (Режим, NxN). Видеокодер 50 может закодировать макроблок, используя указанный способ кодирования, и определить вычисленные затраты по скорости передачи битов и искажению. Искажение может быть определено на основании разности между пикселами закодированного макроблока и пикселами исходного макроблока, например, на основании показателя суммы абсолютных разностей (SAD), показателя суммы квадратов разностей (SSD) или иного показателя разности между пикселами.
Затем видеокодер 50 может поделить блок NxN на два равного размера неперекрывающихся горизонтальных раздела Nx(N/2). Видеокодер 50 может вычислить величину затрат на кодирование каждого из разделов, используя различные режимы кодирования (176). Например, для того, чтобы вычислить затраты на кодирование первого раздела Nx(N/2), видеокодер 50 может вычислить искажение и скорость передачи битов для того, чтобы закодировать первый раздел Nx(N/2), а затем вычислить
величина затрат = искажение (Режим, ПЕРВЫЙ РАЗДЕЛ, Nx(N/2))+λ×скорость передачи (Режим, ПЕРВЫЙ РАЗДЕЛ, Nx(N/2)).
Затем видеокодер 50 может поделить блок NxN на два равного размера неперекрывающихся вертикальных раздела (N/2)xN. Видеокодер 50 может вычислить величину затрат на кодирование каждого из разделов, используя различные режимы кодирования (178). Например, для того, чтобы вычислить затраты на кодирование первого из разделов (N/2)xN, видеокодер 50 может вычислить искажение и скорость передачи битов для того, чтобы закодировать первый раздел (N/2)xN, а затем вычислить
величина затрат = искажение (Режим, ПЕРВЫЙ РАЗДЕЛ, (N/2)xN)+λ×скорость передачи (Режим, ПЕРВЫЙ РАЗДЕЛ, (N/2)xN). Видеокодер 50 может выполнить аналогичное вычисление величины затрат на кодирование второго раздела (N/2)xN макроблока.
Затем видеокодер 50 может поделить блок NxN на четыре равного размера неперекрывающихся раздела (N/2)x(N/2). Видеокодер 50 может вычислить величину затрат на кодирование разделов, используя различные режимы кодирования (180). Чтобы вычислить затраты на кодирование раздела (N/2)x(N/2), видеокодер 50 может сначала вычислить искажение и скорость передачи битов для того, чтобы закодировать верхний левый раздел (N/2)x(N/2) и определить величину затрат как затраты(Режим, ВЕРХНИЙ ЛЕВЫЙ, (N/2)x(N/2)) = искажение (Режим, ВЕРХНИЙ ЛЕВЫЙ, (N/2)x(N/2))+λ×скорость передачи (Режим, ВЕРХНИЙ ЛЕВЫЙ, (n/2)х(n/2)). Видеокодер 50 также может аналогичным образом вычислить затраты по каждому блоку (N/2)x(N/2) в следующем порядке: (1) верхний левый раздел, (2) верхний правый раздел, (3) нижний левый раздел, (4) нижний правый раздел. В некоторых примерах видеокодер 50 может осуществлять рекурсивные обращения к данному способу в отношении одного или более разделов (N/2)x(N/2) для того, чтобы вычислить затраты на последующее разделение и отдельное кодирование каждого из разделов (N/2)x(N/2), как, например, разделов (N/2)x(N/4), разделов (N/4)x(N/2) и разделов (N/4)x(N/4).
Затем видеокодер 50 может определить, какая комбинация способа разделения и режима кодирования дает наилучший, то есть самый низкий показатель затрат в отношении скорости передачи и искажения (182). Например, видеокодер 50 может сравнить наилучший показатель затрат по кодированию двух смежных разделов (N/2)x(N/2) с наилучшим показателем затрат по кодированию раздела Nx(N/2), содержащего два смежных раздела (N/2)x(N/2). Если суммарная величина затрат по кодированию двух смежных разделов (N/2)x(N/2) превышает затраты по кодированию раздела Nx(N/2), содержащего их, то видеокодер 50 может выбрать менее затратный вариант кодирования раздела Nx(N/2). В общем случае видеокодер 50 может применять каждую комбинацию способа разделения и режима кодирования для каждого раздела для того, чтобы идентифицировать способ разделения и кодирования, соответствующий самому низкому уровню затрат. В некоторых случаях видеокодер 50 может быть сконфигурирован, чтобы оценивать более ограниченный набор комбинаций способов разделения и режимов кодирования.
После определения наилучшего способа разделения и кодирования, например наименее затратного, видеокодер 50 может закодировать макроблок NxN, используя этот способ (184). В некоторых случаях в результате может оказаться большой макроблок, имеющий разделы, которые закодированы с использованием различных режимов кодирования. Возможно применение режима смешанного кодирования к большому макроблоку таким образом, что различные режимы кодирования применялись бы к различным разделам в большом макроблоке, что может обеспечить кодирование макроблока при меньших затратах.
В некоторых примерах способ кодирования с использованием смешанных режимов может включать в себя прием видеокодером видеоблока размером более 16x16 пикселов, деление блока на разделы, кодирование одного из разделов с использованием первого режима кодирования, кодирование другого раздела с использованием второго режима кодирования, отличающегося от первого режима кодирования, и формирование синтаксической информации типа блока, в которой указывается размер блока и идентифицируются разделы и режимы кодирования, использованные для кодирования разделов.
На фиг.12 представлена функциональная схема, иллюстрирующая пример различных вариантов разделения большого макроблока 64x64 пиксела и различных выбранных способов кодирования для каждого раздела. В примере на фиг.12 каждый раздел помечен одной из букв "I", "P" или "B". Разделы, помеченные "I", представляют собой разделы, для которых кодер выбрал использование внутрикадрового кодирования, например, на основании оценки искажения и скорости. Разделы, помеченные "P", представляют собой разделы, для которых кодер выбрал использование одноопорного межкадрового кодирования, например, на основании оценки искажения и скорости. Разделы, помеченные "B", представляют собой разделы, для которых кодер выбрал использование межкадрового кодирования с двунаправленным предсказанием, например, на основании оценки искажения и скорости. В примере на фиг.12 в различных разделах в пределах одного и того же большого макроблока использованы различные режимы кодирования, включая различные размеры разделов или подразделов, и различные режимы внутрикадрового или межкадрового кодирования.
Большой макроблок представляет собой макроблок, идентифицируемый элементом синтаксиса макроблока, который идентифицирует тип макроблока, например mb64_type или mb32_type, для данного стандарта кодирования, такого как расширение стандарта кодирования H.264. Элемент синтаксиса типа макроблока может быть предоставлен как элемент синтаксиса заголовка макроблока в закодированном двоичном потоке видео. Как проиллюстрировано на фиг.12, разделы, закодированные I-, P- и B-образом, могут быть закодированы согласно различным режимам кодирования, например, режимам предсказания внутрикадрового или межкадрового кодирования при различных размерах блоков, включая режимы больших размеров блоков, для больших разделов, размером более 16x16, либо согласно стандарту H.264 для разделов, размер которых не превышает 16x16.
В одном примере кодер, такой как видеокодер 50, может использовать способ, описанный на фиг.11, для того, чтобы выбрать различные режимы кодирования и размеры разделов для различных разделов и подразделов примера большого макроблока, представленного на фиг.12. Например, видеокодер 50 может осуществить прием макроблока 64x64, реализовать способ, представленный на фиг.11, и в результате этого сформировать макроблок, показанный в качестве примера на фиг.12, с различными размерами разделов и использованными режимами кодирования. Однако следует учитывать, что выбор способов разделения и режимов кодирования может быть осуществлен в результате применения способа, представленного на фиг.11, например, на основании типа кадра, из которого был выбран макроблок, и на основании входного макроблока, в отношении которого осуществляется реализация способа. Например, если кадр содержит I-кадр, то каждый раздел будет закодирован внутрикадровым образом. В качестве другого примера, если кадр содержит P-кадр, то каждый раздел может быть закодирован внутрикадровым или межкадровым образом, на основании одиночного опорного кадра (то есть без двустороннего предсказания).
Предположительно, примерный макроблок на фиг.12 был выбран из кадра с двунаправленным предсказанием (B-кадра) для иллюстративных целей. В других примерах, где макроблок выбран из P-кадра, видеокодер 50 не осуществил бы кодирование раздела с использованием двунаправленного предсказания. Аналогичным образом там, где макроблок выбран из I-кадра, видеокодер 50 не осуществил бы кодирование раздела с использованием межкадрового кодирования, а также P-кодирования или B-кодирования. Однако в любом случае видеокодер 50 может выбрать различные размеры разделов для различных частей макроблока и выбрать режим кодирования каждого раздела, используя любой доступный режим кодирования.
В примере на фиг.12 предполагается, что выбор комбинации разделения и режима, основанный на анализе искажения и скорости, привел к одному B-кодированному разделу 32x32, одному P-кодированному разделу 32x32, одному I-кодированному разделу 16x32, одному B-кодированному разделу 32x16, одному P-кодированному разделу 16x16, одному P-кодированному разделу 16x8, одному P-кодированному разделу 8x16, одному P-кодированному разделу 8x8, одному B-кодированному разделу 8x8, одному I-кодированному разделу 8x8 и к многочисленным подразделам меньших размеров при использовании различных режимов кодирования. Пример на фиг.12 представлен в целях концептуальной иллюстрации кодирования разделов в большом макроблоке при смешанных режимах и не обязательно должен считаться типовым для фактических результатов кодирования для конкретного большого макроблока 64x64.
На фиг.13 представлена функциональная схема, иллюстрирующая пример способа определения оптимального размера макроблока для кодирования кадра или вырезки из видеопоследовательности. Хотя описание дано относительно выбора оптимального размера макроблока для кадра, тем не менее, может использоваться способ, подобный описанному на фиг.13, для выбора оптимального размера макроблока для вырезки. Аналогичным образом, хотя способ на фиг.13 описан по отношению к видеокодеру 50, следует учитывать, что способ, представленный на фиг.13, может быть использован любым кодером для того, чтобы определить оптимальный (например, наименее затратный) размер макроблока для кодирования кадра видеопоследовательности. В общем случае способ, представленный на фиг.13, содержит выполнение операции кодирования три раза, по одному разу для каждого из макроблоков 16x16, макроблоков 32x32 и макроблоков 64x64, и видеокодер может вычислять показатели искажения и скорости при каждом проходе вычислений для того, чтобы определить размер макроблоков, обеспечивающий наилучший показатель искажения и скорости.
Видеокодер 50 может сначала закодировать кадр, используя макроблоки 16x16 пикселов при первом проходе кодирования (190), например, используя функцию кодирования (кадр, MB16_type) для того, чтобы сформировать закодированный кадр F16. После первого прохода кодирования видеокодер 50 может вычислить скорость передачи битов и искажение при использовании макроблоков 16x16 пикселов, таких как R16 и D16, соответственно (192). Затем видеокодер 50 может вычислить показатель искажения и скорости в форме затрат C16, при применении макроблоков 16x16 пикселов, используя множитель Лагранжа C16=D16+λ×R16 (194). Режимы кодирования и размеры разделов могут быть выбраны для макроблоков 16x16 пикселов, например, согласно стандарту H.264.
Затем видеокодер 50 может закодировать кадр, используя макроблоки 32x32 пиксела при втором проходе кодирования (196), например, используя функцию кодирования (кадр, MB32_type) для того, чтобы сформировать закодированный кадр F32. После второго прохода кодирования видеокодер 50 может вычислить скорость передачи битов и искажение при использовании макроблоков 32x32 пиксела, таких как R32 и D32 соответственно (198). Затем видеокодер 50 может вычислить показатель искажения и скорости в форме затрат C32 при применении макроблоков 32x32 пиксела, используя множитель Лагранжа C32=D32+λ×R32 (200). Режимы кодирования и размеры разделов могут быть выбраны для макроблоков 32x32 пиксела, например, используя методики оценки скорости передачи и искажения, как это описано в отношении фиг.11 и 12.
Затем видеокодер 50 может закодировать кадр, используя макроблоки 64x64 пиксела при третьем проходе кодирования (202), например, используя функцию кодирования (кадр, MB64_type) для того, чтобы сформировать закодированный кадр F64. После третьего прохода кодирования видеокодер 50 может вычислить скорость передачи битов и искажение при использовании макроблоков 64x64 пиксела, таких как R64 и D64 соответственно (204). Затем видеокодер 50 может вычислить показатель искажения и скорости в форме затрат C64 при применении макроблоков 64x64 пиксела, используя множитель Лагранжа C64=D64+λ×R64 (206). Режимы кодирования и размеры разделов могут быть выбраны для макроблоков 64x64 пиксела, например, используя методики оценки скорости передачи и искажения, как это описано в отношении фиг.11 и 12.
Далее, видеокодер 50 может определить, какой из показателей C16, C32 и С64 является наименьшим для кадра (208). Видеокодер 50 может выбрать для использования кадр, закодированный с помощью макроблоков такого размера, при котором затраты оказались самыми низкими (210). Таким образом, например, если значение C16 окажется самым низким, то видеокодер 50 может выбрать кадр F16, закодированный при помощи макроблоков 16x16, в качестве закодированного кадра, в битовый поток для сохранения либо для передачи на декодер. Если значение C32 окажется самым низким, то видеокодер 50 может выбрать F32, закодированный при помощи макроблоков 32x32. Если значение С64 окажется самым низким, то видеокодер 50 может выбрать F64, закодированный при помощи макроблоков 64x64.
В других примерах видеокодер 50 может выполнять проходы кодирования в любом порядке. Например, видеокодер 50 может начать с прохода кодирования с использованием макроблоков 64x64, затем выполнить проход кодирования с использованием макроблоков 32x32 и закончить выполнением прохода кодирования с использованием макроблоков 16x16. Кроме того, аналогичные способы могут использоваться для кодирования других кодируемых единиц, содержащих множество макроблоков, таких как вырезки с различными размерами макроблоков. Например, видеокодер 50 может применить способ, аналогичный представленному на фиг.13, для того чтобы выбрать оптимальный размер макроблока для кодирования вырезок кадра, а не целого кадра.
Видеокодер 50 может также передать идентификатор размера макроблоков для конкретной кодируемой единицы (например, кадра или вырезки) в заголовке кодируемой единицы для использования его декодером. В соответствии со схемой, представленной на фиг.13, способ может включать в себя прием посредством цифрового видеокодера кодируемой единицы из цифрового видеопотока, вычисление первого показателя искажения и скорости, соответствующего искажению и скорости при кодировании единицы с использованием первого множества блоков, каждый из которых содержит 16x16 пикселов, вычисление второго показателя искажения и скорости, соответствующего искажению и скорости при кодировании единицы с использованием второго множества блоков, каждый из которых содержит более чем 16x16 пикселов, и определение, какой из первого показателя искажения и скорости и второго показателя искажения и скорости является наименьшим для кодируемой единицы. Способ может далее включать в себя, если первый показатель искажения и скорости оказывается самым низким, кодирование единицы с использованием первого множества блоков, а если второй показатель искажения и скорости оказывается самым низким, то кодирование единицы с использованием второго множества блоков.
На фиг.14 представлена функциональная схема, иллюстрирующая пример прибора 230 беспроводной связи, включающего в себя видеокодер/декодер CODEC 234, который может осуществлять кодирование и/или декодирование цифровых видеоданных с использованием больших макроблоков, размеры которых превышают стандартные, с использованием любых разнообразных методик, описанных в данном раскрытии. В примере на фиг.14 прибор 230 беспроводной связи включает в себя видеокамеру 232, видеокодер-декодер (кодек) 234, модулятор/демодулятор (модем) 236, приемопередатчик 238, процессор 240, интерфейс 242 пользователя, память 244, прибор 246 хранения данных, антенну 248 и шину 250.
Компоненты, включенные в прибор 230 беспроводной связи, проиллюстрированный на фиг.14, могут быть реализованы в любой подходящей комбинации аппаратного обеспечения, программного обеспечения и/или встроенного программного обеспечения. В приведенном примере компоненты проиллюстрированы как отдельные модули. Однако в других примерах различные компоненты могут быть интегрированы в комбинированные модули в пределах общего аппаратного и/или программного обеспечения. В качестве одного примера память 244 может хранить инструкции, выполняемые процессором 240, в соответствии с различными функциями кодека 234 видео. В качестве другого примера видеокамера 232 может включать в себя кодек видео, который выполняет функции кодека 234 видео, например, по кодированию и/или декодированию видеоданных.
В одном примере видеокамера 232 может соответствовать источнику 18 видео (фиг.1). Вообще видеокамера 232 может записывать видеоданные, захваченные массивом датчиков для того, чтобы сформировать цифровые видеоданные. Видеокамера 232 может отправлять необработанные записанные цифровые видеоданные на кодек 234 видео для кодирования и затем на прибор 246 хранения данных по шине 250 для сохранения данных. Процессор 240 может отправлять сигналы на видеокамеру 232 по шине 250 с учетом режима записи видео, частоты кадров при записи видео, времени окончания записи или моментов изменения режимов частоты кадров, времени отправки видеоданных на кодек 234 видео или сигналов, указывающих на иные режимы или параметры.
Интерфейс 242 пользователя может содержать один или более интерфейсов, таких как интерфейсы ввода и вывода. Например, интерфейс 242 пользователя может включать в себя сенсорный экран, клавиатуру, кнопки, экран, который может функционировать в качестве видоискателя, микрофон, громкоговоритель или иные интерфейсы. Поскольку видеокамера 232 принимает видеоданные, процессор 240 может сигнализировать видеокамере 232 отправлять видеоданные на интерфейс 242 пользователя для отображения ее на видоискателе.
Кодек 234 видео может закодировать видеоданные от видеокамеры 232 и декодировать видеоданные, принятые через антенну 248, приемопередатчик 238 и модем 236. Кодек 234 видео дополнительно или альтернативно может декодировать ранее закодированные данные, принятые от прибора 246 хранения данных, для их воспроизведения. Кодек 234 видео может осуществлять кодирование и/или декодирование цифровых видеоданных с использованием макроблоков, размеры которых превышают размеры макроблоков, предписанные традиционными стандартами кодирования видео. Например, кодек 234 видео может кодировать и/или декодировать цифровые видеоданные, используя большой макроблок, содержащий 64x64 пиксела или 32x32 пиксела. Большой макроблок может быть идентифицирован при помощи синтаксического элемента типа макроблока, согласно стандарту видео, такому как расширение стандарта H.264.
Кодек 234 видео может выполнять функции любого из двух или обоих вместе, видеокодера 50 (фиг.2) и/или видеодекодера 60 (фиг.3), так же как и любые иные функции кодирования/декодирования или методики, как описано в данном раскрытии. Например, кодек 234 может осуществить разделение большого макроблока на множество более мелких разделов различных размеров и использовать различные режимы кодирования, например пространственные (I) или временные (P или B), для выбранных разделов. Выбор размеров разделов и режимов кодирования может быть основан на результатах вычисления искажения и скорости для таких размеров разделов и режимов кодирования. Кодек 234 также может использовать значения иерархической модели кодирования блока (СВР) для того, чтобы идентифицировать закодированные макроблоки и разделы, имеющие ненулевые коэффициенты, внутри большого макроблока. Кроме того, в некоторых примерах кодек 234 может осуществлять сравнение показателей искажения и скорости для макроблоков больших и мелких размеров для выбора размера макроблока, обеспечивающего оптимальные результаты для кадра, вырезки или иной кодируемой единицы.
Пользователь может взаимодействовать с интерфейсом 242 пользователя для того, чтобы передавать записанную в приборе 246 хранения данных видеопоследовательность на другой прибор, такой как другой прибор беспроводной связи через модем 236, приемопередатчик 238 и антенну 248. Видеопоследовательность может быть закодирована согласно стандарту кодирования, такому как стандарт MPEG-2, MPEG-3, MPEG -4, H.263, H.264 или иным стандартам кодирования видео, относящимся к расширениям или изменениям способов, описанных в данном раскрытии. Например, видеопоследовательность может быть также закодирована с использованием макроблоков больших размеров, чем стандартные, как описано в данном раскрытии. Прибор 230 беспроводной связи может также принимать закодированный видеосегмент и сохранять принятую видеопоследовательность в приборе 246 хранения данных.
Макроблоки принятой закодированной видеопоследовательности могут быть больше, чем макроблоки, определенные обычными стандартами кодирования видео. Для того чтобы отобразить закодированный видеосегмент, находящийся в приборе 246 хранения данных, такой как записанная последовательность видео или принятый видеосегмент, кодек 234 видео может декодировать последовательность видео и передать декодированные кадры видеосегмента в интерфейс пользователя 242. Если видеопоследовательность включает в себя аудиоданные, то кодек 234 видео может декодировать аудио, или прибор 230 беспроводной связи может дополнительно включать в себя аудиокодек (не показан) для того, чтобы декодировать аудио. Таким образом, кодек 234 видео может выполнять обе функции - как кодера, так и декодера.
Содержимое памяти 244 прибора 230 беспроводной связи на фиг.14 может быть закодировано с помощью компьютерно-читаемых инструкций, которые побуждают выполнение процессором 240 и/или кодеком 234 видео различных задач, в дополнение к хранению закодированных видеоданных. Такие инструкции могут быть загружены в память 244 из прибора хранения данных, такого как прибор 246 хранения данных. Например, инструкции могут побуждать выполнение процессором 240 функций, описанных по отношению к кодеку 234 видео.
На фиг.15 представлена функциональная схема, иллюстрирующая пример иерархической модели кодируемого блока (СВР) 260. В общем случае пример СВР 260 соответствует части синтаксической информации для макроблока 64x64 пиксела. В примере на фиг.15 СВР 260 содержит значение 262 CBP64, четыре значения 264, 266, 268, 270 CBP32 и четыре значения 272, 274, 276, 278 CBP16. Каждый блок СВР 260 может включать в себя один или более битов. В одном примере, когда значение CBP64 262 представляет собой бит, значение которого равно "1", указывая на то, что имеется, по меньшей мере, один ненулевой коэффициент в большом макроблоке, СВР 260 включает в себя четыре значения 264, 266, 268, 270 CBP32 для четырех разделов 32x32 большого макроблока 64x64, как показано в примере на фиг.15.
В другом примере, если значение CBP64 262 представляет собой бит, значение которого равно "0", то СВР 260 может состоять только из CBP64, поскольку значение "0" может указывать, что блок, соответствующий СВР 260, имеет все коэффициенты нулевыми. Следовательно, все разделы данного блока аналогичным образом будут иметь все коэффициенты нулевыми. В одном примере, если CBP64 представляет собой бит, значение которого равно "1", и одно из значений CBP32 для конкретного раздела 32x32 представляет собой бит, значение которого равно "1", то у значения CBP32 для раздела 32x32 имеется четыре ветви, представляющие значения CBP16, например, как показано по отношению к значению CBP32 266. В одном примере, когда значение CBP32 представляет собой бит, значение которого равно "0", у CBP32 нет никаких ветвей. В примере на фиг.15 у СВР 260 может быть пятибитовый префикс "10100", указывающий, что значение CBP64 равно "1" и что у одного из разделов 32x32 имеется значение CBP32, равное "1", с последующими битами, соответствующими четырем значениям 272, 274, 276, 278 параметров СВР 16, соответствующих разделов 16x16 в разделе 32x32, значение СВР 32 которого равно "1". Хотя только единственное значение CBP32, как показано, равно "1" в примере на фиг.15, однако в других примерах два, три или все четыре раздела 32x32 могут иметь значения CBP32, равные "1", в таком случае потребовались бы множественные варианты четырехкратного разделения на разделы 16x16, в соответствии со значениями СВР16.
В примере на фиг.15 могут быть вычислены четыре значения 272, 274, 276, 278 параметров CBP16 для четырех разделов 16x16, согласно различным способам, например согласно способам, представленным на фиг.8 и 9. Любое или все из значений 272, 274, 276, 278 параметров CBP16 могут включать в себя значение "lumacbp16", transform_size_flag и/или luma16x8_cbp. Значения 272, 274, 276, 278 параметров СВР 16 также могут быть вычислены согласно значению СВР, как это определено в стандарте ITU H.264 или как CodedBlockPatternChroma (цветность модели кодируемого блока) в стандарте ITU H.264, как представлено в описании фиг.8 и 9. В примере на фиг.15 в предположении, что CBP16 278 имеет значение "1", а другие значения СВР16 272, 274, 276 равны "0", девятибитовое значение СВР для макроблока 64x64 было бы равно "101000001", где каждый бит соответствует одному из разделов на соответствующем уровне иерархии CBP/раздела.
На фиг.16 представлена функциональная схема, иллюстрирующая пример древовидной структуры 280, соответствующей СВР 260 (фиг.15). Узел 282 CBP64 соответствует значению 262 CBP64, узлы 284, 286, 288, 290 CBP32, каждый, соответствуют соответствующим значениям 264, 266, 268, 270 CBP32, и узлы 292, 294, 296, 298 СВР16, каждый, соответствуют соответствующим значениям CBP16 272, 274, 276, 278. Таким образом, значение модели кодируемого блока, как определено в данном раскрытии, может соответствовать иерархической СВР. Каждый узел, имеющий ветвление в дереве, соответствует значению "1" в его СВР. В примерах на фиг.15 и 16 CBP64 282 и CBP32 286 оба имеют значения "1", и блоки подвергаются дальнейшим разделениям при возможных значениях СВР равного размера "1", то есть где, по меньшей мере, один раздел на последующем уровне разделения включает в себя, по меньшей мере, одно ненулевое значение коэффициента преобразования.
На фиг.17 представлена функциональная схема, иллюстрирующая пример способа использования синтаксической информации кодируемой единицы для того, чтобы указать и выбрать кодеры и декодеры блочного синтаксиса, для видеоблоков кодируемой единицы. В общем случае этапы с 300 по 310 на фиг.17 могут быть выполнены видеокодером, таким как видеокодер 20 (фиг.1), в дополнение и наряду с кодированием множества видеоблоков для кодируемой единицы. Кодируемая единица может содержать видеокадр, вырезку или группу изображений (также называемую "последовательностью"). Этапы с 312 по 316 на фиг.17 могут быть выполнены видеодекодером, таким как видеодекодер 30 (фиг.1), в дополнение и наряду с декодированием множества видеоблоков кодируемой единицы.
Первоначально видеокодер 20 может принять набор блоков различных размеров для кодируемой единицы, такой как кадр, вырезка или группа изображений (300). В соответствии с методиками данного раскрытия один или более блоков могут содержать более чем 16x16 пикселов, например 32x32 пиксела, 64x64 пиксела и т.д. Однако для каждого из блоков не является обязательным, чтобы он включал в себя одинаковое количество пикселов. Вообще видеокодер 20 может осуществлять кодирование каждого из блоков, используя один и тот же блочный синтаксис. Например, видеокодер 20 может осуществлять кодирование каждого из блоков, используя иерархическую модель кодируемого блока, как описано выше.
Видеокодер 20 может выбрать блочный синтаксис, чтобы использовать блоки максимального размера, в наборе блоков для кодируемой единицы. Максимальный размер блока может соответствовать размеру самого большого макроблока, включенного в закодированную единицу. Соответственно, видеокодер 20 может определить блок самого большого размера во множестве (302). В примере на фиг.17 видеокодер 20 может определить блок наименьшего размера во множестве (304). Как рассмотрено выше, иерархическая модель кодируемого блока имеет длину, величина которой зависит от того, имеется ли у разделов блока ненулевой коэффициент квантования. В некоторых примерах видеокодер 20 может включать в себя величину минимального размера в синтаксическую информацию для кодируемой единицы. В некоторых примерах минимальное значение размера указывает минимальный размер раздела в кодируемой единице. Минимальный размер раздела, например наименьший блок в кодируемой единице, может использоваться данным способом для того, чтобы определить максимальную длину для иерархической модели кодируемого блока.
Затем видеокодер 20 может закодировать каждый блок набора для кодируемой единицы согласно синтаксису, соответствующему самому большому блоку (306). Например, при предположении, что самый большой блок содержит блок размером 64x64 пиксела, видеокодер 20 может использовать синтаксис таким образом, как это определено выше для MB64_type. В качестве другого примера при предположении, что самый большой блок содержит блок размером 32x32 пиксела, видеокодер 20 может использовать синтаксис таким образом, как это определено выше для MB32_type.
Видеокодер 20 также осуществляет формирование синтаксической информации кодируемой единицы, которая включает в себя значения, соответствующие самому большому блоку в кодируемой единице и самому мелкому блоку в кодируемой единице (308). Затем видеокодер 20 может передать закодированную единицу, включающую в себя синтаксическую информацию для кодируемой единицы, и каждый из блоков кодируемой единицы, на видеодекодер 30.
Видеодекодер 30 может осуществить прием кодируемой единицы и синтаксической информации для кодируемой единицы от видеокодера 20 (312). Видеодекодер 30 может выбрать декодер блочного синтаксиса на основании указания самого большого блока в кодируемой единице, в синтаксической информации кодируемой единицы (314). Например, при предположении, что синтаксическая информация кодируемой единицы указывает, что самый большой блок в кодируемой единице содержит 64x64 пиксела, видеодекодер 30 может выбрать декодер синтаксиса для блоков типа MB64_type. Затем видеодекодер 30 может применить выбранный декодер синтаксиса к блокам кодируемой единицы для декодирования блоков кодируемой единицы (316). Видеодекодер 30 может также определить, когда у блока отсутствуют дополнительные отдельно закодированные подразделы, на основании указания, содержащегося в синтаксической информации кодируемой единицы, относительно наименьшего закодированного раздела. Например, если наибольший блок имеет 64x64 пиксела, а наименьший блок также имеет 64x64 пиксела, то это может свидетельствовать о том, что блоки 64x64 не разделены на подразделы, меньшие, чем размер 64x64. В другом примере, если наибольший блок имеет 64x64 пиксела, а наименьший блок имеет 32x32 пиксела, то это может свидетельствовать о том, что блоки 64x64 разделены на подразделы не менее чем 32x32.
Таким образом, может быть обеспечено сохранение обратной совместимости видеодекодера 30 с существующими стандартами кодирования, такими как H.264. Например, когда самый большой блок в кодируемой единице содержит 16x16 пикселов, видеокодер 20 может указать это в синтаксической информации кодируемой единицы и видеодекодер 30 может применить декодеры блочного синтаксиса стандарта H.264. Однако когда самый большой блок в кодируемой единице содержит более 16x16 пикселов, видеокодер 20 может указать это в синтаксической информации кодируемой единицы и видеодекодер 30 может селективно применить декодеры блочного синтаксиса в соответствии с методиками данного раскрытия для декодирования блоков кодируемой единицы.
В одном или более примерах описанные функции могут быть реализованы аппаратно, программно, во встроенном программном обеспечении или в любой их комбинации. При реализации программным способом функции могут храниться или передаваться в виде одной или более инструкций или кода на компьютерно-читаемом носителе. Компьютерно-читаемый носитель включает в себя как компьютерное средство хранения, так и средство связи, включающее в себя любую передающую среду, которые обеспечивают передачу компьютерной программы из одного местоположения в другое. Носителями данных могут быть любые существующие носители, к которым может получить доступ компьютер. В качестве примера, а никоим образом не ограничения, такие компьютерно-читаемые носители могут включать в себя RAM, ROM, EEPROM, CD-ROM или иные устройства хранения: оптический диск, магнитный диск или иные магнитные приборы хранения или любую иную среду, которая может использоваться для переноса или хранения необходимого программного кода в форме инструкций или структур данных, и к которым может осуществлять доступ компьютер. Любое подключение также именуется компьютерно-читаемым носителем. Например, если программное обеспечение передано с веб-сайта, сервера или иного удаленного источника посредством коаксиального кабеля, волоконно-оптического кабеля, витой пары, цифровой абонентской линии (DSL) или по беспроводной технологии, такой как инфракрасная, радио- или микроволновая, то коаксиальный кабель, волоконно-оптический кабель, витая пара, DSL или беспроводные технологии, такие как инфракрасная, радио- или микроволновая, включаются в определение носителя. Термин диск в данном контексте обозначает компакт-диск (CD), лазерный диск, оптический диск, цифровой универсальный диск (DVD), гибкий диск и диск формата blu-ray, при этом магнитные диски обычно воспроизводят данные магнитным образом, в то время как оптические диски воспроизводят данные оптическим образом при помощи лазеров. Комбинации из вышеперечисленного также относятся к компьютерно-читаемым носителям.
Были описаны различные примеры. Данные и иные примеры находятся в пределах следующей формулы изобретения.